-
Notifications
You must be signed in to change notification settings - Fork 36
记账节点更换版本及分叉后设置专用挖矿公钥
通过浏览器https://m.ft.im/record查看出块情况,可以在自己节点刚刚完成出块后重启节点,这样可以在不丢块的情况下完成版本的切换。
重启步骤和之前启动相同:
生产者节点为了保证出块的稳定性(或者说收益的稳定性),需要为同一个挖矿账户(假设为accout123456)启动主备两个节点程序,分别运行在不同的服务器上。
主节点启动过程:
nohup ./ft --genesis=../genesis.json --p2p_id=1 --miner_start & // 启动节点,数据默认保存在/root/.ft_ledger
./ft miner setcoinbase "accout123456" priKey.txt // 设置coinbase,priKey.txt设置好后可删除
备份节点启动过程:
nohup ./ft --genesis=../genesis.json --p2p_id=1 --miner_start & // 启动节点,数据默认保存在/root/.ft_ledger
./ft miner setcoinbase "accout123456" priKey.txt // 设置coinbase,priKey.txt设置好后可删除
./ft miner setdelay 200 //延迟200ms // 设置挖矿延迟200ms
注意:
(1)在一个周期开始前,一定要将区块同步到最新,之后节点才能出块
(2)如果是租用的阿里云或AWS的服务器,记得要在安全组中打开入站端口(默认P2P的端口是2018),否则其它节点将无法连到你的节点,影响P2P网络的建立
通过浏览器https://m.ft.im/record查看出块情况,自己节点刚刚出块后发送设置专用挖矿公钥并配置私钥。
(1).不需重启节点,设置coinbase:
./ft miner setcoinbase "accout123456" priKey.txt
(2). 分叉后发送配置专用挖矿公钥
func UpdateCandidatePubKey(pubKey common.PubKey, from, to common.Name, nonce uint64, prikey *ecdsa.PrivateKey) {
arg := &args.UpdateCandidatePubKey{
PubKey: pubKey,
}
payload, err := rlp.EncodeToBytes(arg)
if err != nil {
panic(err)
}
key := types.MakeKeyPair(prikey, []uint64{0})
sendTransferTx(types.UpdateCandidatePubKey, from, to, nonce, 0, big.NewInt(0), payload, []*types.KeyPair{key})
}
func sendTransferTx(txType types.ActionType, from, to common.Name, nonce, assetID uint64, value *big.Int, input []byte, keys []*types.KeyPair) {
action := types.NewAction(txType, from, to, nonce, assetID, gasLimit, value, input, nil)
gasprice, _ := testcommon.GasPrice()
tx := types.NewTransaction(0, gasprice, action)
signer := types.MakeSigner(big.NewInt(100))
err := types.SignActionWithMultiKey(action, tx, signer, 0, keys)
if err != nil {
jww.ERROR.Fatalln(err)
}
rawtx, err := rlp.EncodeToBytes(tx)
if err != nil {
jww.ERROR.Fatalln(err)
}
hash, err := testcommon.SendRawTx(rawtx)
if err != nil {
jww.INFO.Println("result err: ", err)
}
fmt.Println("result hash: ", hash.Hex())
jww.INFO.Println("result hash: ", hash.Hex())
}