diff --git a/src/main.rs b/src/main.rs
index 57cd484c0e64b5afa14c995179378c88be48ee9d..bbea17e08ad210181c789423b81bf5b83565bb86 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -405,7 +405,16 @@ fn start_discover(args: &args::Run, to_supervisor: ipc::Sender<IpcMessage>) {
 fn start_boot(args: &args::Run) {
     tlog!(Info, ">>>>> start_boot()");
 
-    let raft_id = 1u64;
+    let mut topology = traft::Topology::from_peers(vec![]);
+    let req = traft::JoinRequest {
+        instance_id: args.instance_id.clone(),
+        replicaset_id: args.replicaset_id.clone(),
+        advertise_address: args.advertise_address(),
+        voter: true,
+    };
+    topology.process(&req).unwrap();
+    let peer = topology.diff().pop().unwrap();
+    let raft_id = peer.raft_id;
 
     start_transaction(|| -> Result<(), Error> {
         let cs = raft::ConfState {
@@ -414,14 +423,6 @@ fn start_boot(args: &args::Run) {
         };
 
         let entry = {
-            let peer = traft::Peer {
-                raft_id,
-                instance_id: args.instance_id.clone(),
-                peer_address: args.advertise_address(),
-                voter: true,
-                commit_index: 0,
-            };
-
             let conf_change = raft::ConfChange {
                 change_type: raft::ConfChangeType::AddNode,
                 node_id: raft_id,