diff --git a/src/main/java/entity/SeedDownload.java b/src/main/java/entity/SeedDownload.java
new file mode 100644
index 0000000..caafda8
--- /dev/null
+++ b/src/main/java/entity/SeedDownload.java
@@ -0,0 +1,119 @@
+package entity;
+
+import java.time.LocalDateTime;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "SeedDownload")
+public class SeedDownload {
+
+    @Id
+    @Column(name = "task_id", length = 64, nullable = false)
+    public String taskId;
+
+    @Column(name = "user_id", length = 36, nullable = false)
+    public String userId;
+
+    @Column(name = "seed_id", length = 64, nullable = false)
+    public String seedId;
+
+    @Column(name = "download_start", nullable = false)
+    public LocalDateTime downloadStart;
+
+    @Column(name = "download_end")
+    public LocalDateTime downloadEnd;
+
+    @Column(name = "is_dedicated", nullable = false)
+    public boolean isDedicated;
+
+    @Column(name = "client_ip", length = 45)
+    public String clientIp;
+
+    // Constructors
+    public SeedDownload() {}
+
+    public SeedDownload(String taskId, String userId, String seedId, LocalDateTime downloadStart, LocalDateTime downloadEnd, boolean isDedicated, String clientIp) {
+        this.taskId = taskId;
+        this.userId = userId;
+        this.seedId = seedId;
+        this.downloadStart = downloadStart;
+        this.downloadEnd = downloadEnd;
+        this.isDedicated = isDedicated;
+        this.clientIp = clientIp;
+    }
+
+    // Getters and Setters
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getSeedId() {
+        return seedId;
+    }
+
+    public void setSeedId(String seedId) {
+        this.seedId = seedId;
+    }
+
+    public LocalDateTime getDownloadStart() {
+        return downloadStart;
+    }
+
+    public void setDownloadStart(LocalDateTime downloadStart) {
+        this.downloadStart = downloadStart;
+    }
+
+    public LocalDateTime getDownloadEnd() {
+        return downloadEnd;
+    }
+
+    public void setDownloadEnd(LocalDateTime downloadEnd) {
+        this.downloadEnd = downloadEnd;
+    }
+
+    public boolean isDedicated() {
+        return isDedicated;
+    }
+
+    public void setDedicated(boolean dedicated) {
+        isDedicated = dedicated;
+    }
+
+    public String getClientIp() {
+        return clientIp;
+    }
+
+    public void setClientIp(String clientIp) {
+        this.clientIp = clientIp;
+    }
+
+    // equals and hashCode based on taskId
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof SeedDownload)) return false;
+        SeedDownload that = (SeedDownload) o;
+        return taskId != null && taskId.equals(that.taskId);
+    }
+
+    @Override
+    public int hashCode() {
+        return 31 + (taskId != null ? taskId.hashCode() : 0);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/entity/config.java b/src/main/java/entity/config.java
index 0cf39c1..71f3b4f 100644
--- a/src/main/java/entity/config.java
+++ b/src/main/java/entity/config.java
@@ -1,14 +1,15 @@
 package entity;
 
 public class config {
-    public String TrackerURL;
-    public int FarmNumber;
-    public int FakeTime;
-    public int BegVote;
+    public static final String TrackerURL="";
+    public static final int FarmNumber=3;
+    public static final int FakeTime=3;
+    public static final int BegVote=3;
     // 请根据实际环境修改为可达的地址
-    public String SqlURL = "192.168.5.9:3306";
-    public String Database = "pt_database";
-    public String TestDatabase = "pt_database_test";
-    public String SqlPassword = "123456";
-    public String SqlUsername = "root";
+    public static final String SqlURL = "192.168.5.9:3306";
+    public static final String Database = "pt_database";
+    public static final String TestDatabase = "pt_database_test";
+    public static final String SqlPassword = "123456";
+    public static final String SqlUsername = "root";
+    public static final String TORRENT_STORAGE_DIR = "torrents";
 }
diff --git a/src/main/java/tracker/Tracker.java b/src/main/java/tracker/Tracker.java
index 6334ebb..210b9bf 100644
--- a/src/main/java/tracker/Tracker.java
+++ b/src/main/java/tracker/Tracker.java
@@ -1,20 +1,24 @@
 package tracker;
 
 import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 import java.util.HashMap;
 import java.util.Map;
-
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.EntityTransaction;
 import javax.persistence.Persistence;
-
 import com.querydsl.jpa.impl.JPAUpdateClause;
-
 import entity.QUserPT;
-import entity.TTorent;
+import entity.Seed;
+import entity.SeedDownload;
 import entity.TransRecord;
 import entity.config;
+import entity.TTorent;
+import java.time.LocalDateTime;
 
 public class Tracker implements TrackerInterface {
     private final EntityManagerFactory emf;
@@ -163,17 +167,69 @@
         }
     }
 
+    @Override
+    public int SaveTorrent(String seedid, File TTorent){
+        try {
+            Path storageDir = Paths.get(config.TORRENT_STORAGE_DIR);
+            if (!Files.exists(storageDir)) {
+                Files.createDirectories(storageDir);
+            }
+            String filename = TTorent.getName();
+            Path target = storageDir.resolve(seedid + "_" + filename);
+            Files.copy(TTorent.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
+
+            EntityManager em = emf.createEntityManager();
+            EntityTransaction tx = em.getTransaction();
+            try {
+                tx.begin();
+                Seed seed = em.find(Seed.class, seedid);
+                seed.url = target.toString();
+                em.merge(seed);
+                tx.commit();
+                return 0;
+            } catch (Exception e) {
+                if (tx.isActive()) tx.rollback();
+                return 1;
+            } finally {
+                em.close();
+            }
+        } catch (Exception e) {
+            return 1;
+        }
+    }
 
     @Override
-    public int SaveTorrent(File TTorent){
-        return 0;
-    };//保存seedid对应的ttorent信息
-
-    @Override
-    public File GetTTorent(String seedid,String userid){
-        return null;
-    };//根据种子id获得ttorent信息然后构建Ttorent文件并返回,同时记录用户的下载行为
-
+    public File GetTTorent(String seedid, String userid, String ip) {
+        EntityManager em = emf.createEntityManager();
+        EntityTransaction tx = em.getTransaction();
+        File file = null;
+        try {
+            Seed seed = em.find(Seed.class, seedid);
+            if (seed == null || seed.url == null) {
+                return null;
+            }
+            file = new File(seed.url);
+            if (!file.exists()) {
+                return null;
+            }
+            tx.begin();
+            SeedDownload sd = new SeedDownload();
+            sd.seedId = seedid;
+            sd.userId = userid;
+            sd.clientIp = ip;
+            LocalDateTime now = LocalDateTime.now();
+            sd.downloadStart = now;
+            sd.downloadEnd = now;
+            em.persist(sd);
+            tx.commit();
+        } catch (Exception e) {
+            if (tx.isActive()) tx.rollback();
+            // ignore persistence errors and still return the file
+        } finally {
+            em.close();
+        }
+        return file;
+    }
 
     @Override
     public int AddRecord(TransRecord rd){
diff --git a/src/main/java/tracker/TrackerInterface.java b/src/main/java/tracker/TrackerInterface.java
index 1496a26..4776d11 100644
--- a/src/main/java/tracker/TrackerInterface.java
+++ b/src/main/java/tracker/TrackerInterface.java
@@ -11,8 +11,8 @@
     public boolean AddMagic(String userid,int magic);//给用户增加魔力值，返回0成功，返回1失败;
     public boolean ReduceMagic(String userid,int magic);//给用户减少魔力值，返回0成功，返回1失败;
 
-    public int SaveTorrent(File TTorent);//保存seedid对应的ttorent信息
-    public File GetTTorent(String seedid,String userid);//根据种子id获得ttorent信息然后构建Ttorent文件并返回,同时记录用户的下载行为
+    public int SaveTorrent(String seedid,File TTorent);//保存seedid对应的ttorent信息
+    public File GetTTorent(String seedid,String userid,String ip);//根据种子id获得ttorent信息然后构建Ttorent文件并返回,同时记录用户的下载行为
     
     public int AddRecord(TransRecord rd);//新增一个seedid对应的种子的传输任务记录
 }
\ No newline at end of file
