# 如何把新节点加入到Sui的本地测试网络验证人集合中 ## 步骤 1. 首先编译出我们需要的二进制文件:sui,sui-node等,二进制文件在`./target/debug/`目录下: ```bash cargo build --bin sui sui-node ``` 2. 创建new validator的账户keypair,包括account keypair, network keypair, worker keypair, protocol keypair等: ```bash ./sui keytool generate ed25519 ./sui keytool load-keypair {key-file-generated-in-last-step} ``` 3. 编辑config.yaml,初始化账户balance,并注意把`epoch_duration_ms`修改成合适的时间(默认24小时,为了测试方便这里是3分钟,因为validator candidate在下个epoch才会成为validator): ```yaml --- validator_config_info: ~ parameters: chain_start_timestamp_ms: 1684727806223 protocol_version: 10 allow_insertion_of_extra_objects: true epoch_duration_ms: 180000 stake_subsidy_start_epoch: 0 stake_subsidy_initial_distribution_amount: 1000000000000000 stake_subsidy_period_length: 10 stake_subsidy_decrease_rate: 1000 accounts: - address: 0fc530455ee4132b761ed82dab732990cb7af73e69cd6e719a2a5badeaed105b gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: 1cf34ae2e006fbfa9cee6ae4703b1a6c4ef627ab22e92e226bc6975521d0d705 gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: 265254cffb43b73101579fecd21884d34336b3f23f61428a4e681bd96857ad66 gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: 3924d75ba4380a7f2ef0f1e2158eb72a1f7b2571af0cf04e994e31a38e95ef9e gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: 4bbf7f41e39cc238f76758f5c1d139d4af363eba16fe558188a867fec4fe3258 gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: 4deb09f93afb1d6d1c0847a406d1224de7cd92f6041a5c6ba24c1db4b3e64c1f gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: 5b8fd223087b3364d410c49f01dc4ba2b4efaae2381b36365d4bb5a498eb872c gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: 65c577fa84aaee9e8101d0b3b5df2591d81627dfcc3ccef7dc6a2e6af67de336 gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: 6af1d467b1903e2f79a8c7bc11d51eeb8c827497b85bf8a9d27f0afe2397a189 gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: 7603f74da67d3e1d86c3d1f8baa8cdaa836bb779e5d4b96b45ee72e9f25dc0f7 gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: 7d26eb76b7f1bc860ebddc267c3ad2170ede002d70df903e0783131ae4a37a0e gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: 8c66fda13388668dcb7bbe402c56e5819fa429f973070f094775711a4bb63b34 gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: bd0fd1261a56b8eb7aa00c9c61587bace432ad3adad35d6a230a39be0605a35a gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: c7294a5cc946db818c4058c83c933ad6c28e73711bee21c7fa85553c90cb7244 gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: ef6e9dd8f30dea802e0474a7996e5c772c581cc1adee45afb660f15a081d1c49 gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - address: f7ae71f84fabc58662bd4209a8893f462c60f247095bb35b19ff659ad0081462 gas_amounts: - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 - 30000000000000000 ``` 可把上一步生成的new validator账号加入,并指定gas_amounts,validator_info为缺省状态,如果要修改本地测试网络初始状态中验证人节点的信息,需要补充此部分信息 4. 根据config.yaml生成本地测试网络的genesis state和配置文件等,相关配置文件等数据默认在~/.sui/sui-config中: ```bash= ./sui genesis --from-config {config.yaml-path} ``` 5. 启动本地测试网络,测试网络的初始状态即是上一步我们生成的genesis ```bash= ./sui start ``` 6. 在配置文件夹里找到validator.config.yaml并复制修改,用来启动new validator ```bash= cd ./sui/sui-config cp validator-config-0.yaml new-validator-config.yaml ``` 在这一步主要是将各类keypair修改成new-validator的keypair,修改db-path以及各类端口等 7. 启动new validator node,如果是修改过源码的非正常node就先编译新版本sui-node,否则使用我们编译好的sui-node: ```bash= ./sui-node --config-path {new-validator-config.yaml-path} ``` 8. 生成validator.info文件,并将new-validator申请成为candidate: ```bash= ./sui validator make-validator-info {name}... ./sui validator become-candidate {validator.info-path} ``` 9. 如果在config.yaml我们已经指定了new-validator的gas_amounts,此时new-validator已经有足够的sui可以用来质押给自己,否则需要切换到其他账号进行质押,注意最小质押数量是30e15: ```bash= sui client call --package 0x3 --module sui_system --function request_add_stake --args 0x5 <sui_object> <val_address>--gas-budget 10000 ``` 或者通过rpc来质押: - 生成txbytes ```bash= curl -X POST \ -H 'Content-Type: application/json' \ -d '{ "jsonrpc":"2.0", "id":"1", "method":"unsafe_requestAddStake", "params":["0x7b989bc3ab301b424e0e7a0be6ea7753f754a6a61d26eec45a4d9b48ba76c0cf", ["0x169615758b73ad42eee64e0395dd49a6cc12b69acda649227b67b261defff135", "0x255825df3945378b02c9434d8835078f2746e29f3f09236e3cd7fa78369d8684"], "29000000000000000", "0x7b989bc3ab301b424e0e7a0be6ea7753f754a6a61d26eec45a4d9b48ba76c0cf", "0xa2dff1fba372484ccd66b4fa1881830a51ec91d1249456d54e9cd50f73fac807", "1000000000"] }' \ http://localhost:9000 ``` - dryrun下 ```bash= curl -X POST \ -H 'Content-Type: application/json' \ -d '{ "jsonrpc":"2.0", "id":"1", "method":"sui_dryRunTransactionBlock", "params":["AAAFAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQEAAAAAAAAAAQEAFpYVdYtzrULu5k4Dld1JpswStprNpkkie2eyYd7/8TVJAQAAAAAAACC5v0qe/Ptljkfrz0zMueAC6LPfbusVnmGkYc36XD0wYAEAJVgl3zlFN4sCyUNNiDUHjydG4p8/CSNuPNf6eDadhoQCAAAAAAAAACC28z6GuXUjRNsQpYio9QVb9ke70HdtGuJnvx57ufEONwAJAQCAfKpYB2cAACB7mJvDqzAbQk4Oegvm6ndT91Smph0m7sRaTZtIunbAzwIFAAIBAQABAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKc3VpX3N5c3RlbRpyZXF1ZXN0X2FkZF9zdGFrZV9tdWxfY29pbgAEAQAAAgAAAQMAAQQAe5ibw6swG0JODnoL5up3U/dUpqYdJu7EWk2bSLp2wM8Bot/x+6NySEzNZrT6GIGDClHskdEklFbVTpzVD3P6yAdJAQAAAAAAACDV10yzcyUYnzeNV6MqDKnUZexd51s5DITgFSeFZBbyN3uYm8OrMBtCTg56C+bqd1P3VKamHSbuxFpNm0i6dsDP6AMAAAAAAAAAypo7AAAAAAA="] }' \ http://localhost:9000 ``` - 命令行工具对txbytes签名 ```bash= ./sui keytool sign --data {txbytes} --address {address} ``` - 加载payload,执行交易: ```bash= curl -X POST \ -H 'Content-Type: application/json' \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "sui_executeTransactionBlock", "params": [ "AAAFAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQEAAAAAAAAAAQEAFpYVdYtzrULu5k4Dld1JpswStprNpkkie2eyYd7/8TVJAQAAAAAAACC5v0qe/Ptljkfrz0zMueAC6LPfbusVnmGkYc36XD0wYAEAJVgl3zlFN4sCyUNNiDUHjydG4p8/CSNuPNf6eDadhoQCAAAAAAAAACC28z6GuXUjRNsQpYio9QVb9ke70HdtGuJnvx57ufEONwAJAQCAfKpYB2cAACB7mJvDqzAbQk4Oegvm6ndT91Smph0m7sRaTZtIunbAzwIFAAIBAQABAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKc3VpX3N5c3RlbRpyZXF1ZXN0X2FkZF9zdGFrZV9tdWxfY29pbgAEAQAAAgAAAQMAAQQAe5ibw6swG0JODnoL5up3U/dUpqYdJu7EWk2bSLp2wM8Bot/x+6NySEzNZrT6GIGDClHskdEklFbVTpzVD3P6yAdJAQAAAAAAACDV10yzcyUYnzeNV6MqDKnUZexd51s5DITgFSeFZBbyN3uYm8OrMBtCTg56C+bqd1P3VKamHSbuxFpNm0i6dsDP6AMAAAAAAAAAypo7AAAAAAA=", [ "ALBMqXWnGF2igJiKOCIOUKJ5xP3NIIhq2dgltJVCJrR2OXBfWpU1+CKi4PMfvFwIorl1A3BuHoJ8/b9xVVnx3w96auo9CzzFf9RN0AUUSV96/cbw2gLArAbbvfA63qvj/g==" ], { "showInput": true, "showRawInput": true, "showEffects": true, "showEvents": true, "showObjectChanges": true, "showBalanceChanges": true }, "WaitForLocalExecution" ] }' \ http://localhost:9000 ``` 10. 质押成功后,成为正式validator: ```bash= ./sui validator join-committee --gas-budget 1000000000 ```