6、如果比较好,每个区块生产者应该继续使用必要的密钥签署官方升级交易,以满足其主动许可。如果块生产者在它们的电脑 块生成帐户的活动许可中只有单个密钥(即“活动密钥”),则它们只需要使用该活动密钥生成一个签名。这个签名过程可以离线完成,以提高安全性。
首先,区块生产者应该收集所有必要的信息。让我们假设块生产者主动密钥对是(EOS5kBmh5kfo6c6pwB8j77vrznoAaygzoYvBsgLyMMmQ9B6j83i9c,5JjpkhxAmEfynDgSn7gmEKEVcBqJTtu6HiQFf4AVgGv5A89LfG3)。块生产者需要他们的活动私钥
(本例中为
5JjpkhxAmEfynDgSn7gmEKEVcBqJTtu6HiQFf4AVgGv5A89LfG3),upgrade_system_contract_official_trx.json和chain_id
(本例中为d0242fb30b71b82df9966d10ff6d09e4f5eb6be7ba85fd78f796937f1959315e),可以通过cleos获取信息。
然后在安全的计算机上,生产者可以签署交易(生产者需要在提示时粘贴私钥):
$ programs/cleos/cleos sign --chain-id
d0242fb30b71b82df9966d10ff6d09e4f5eb6be7ba85fd78f796937f1959315e
upgrade_system_contract_trx.json | tail -n 5
private key: \"signatures\": [
\"SIG_K1_JzABB9gzDGwUHaRmox68UNcfxMVwMnEXqqS1MvtsyUX8KGTbsZ5电脑aZQZ
jHD5vREQa5BkZ7ft8CceLBLAj8eZ5erZb9cHuy5\"
],
\"context_free_data\": []
}
确保使用交易将被提交的实际主网区块链的chain_id,而不是上面提供的示例chain_id。
输出应该包括签名(在本例中为“SIG_K1_JzABB9gzDGwUHaRmox68UNcfxMVwMnEXqqS1MvtsyUX8KGTbsZ5aZQZjHD5vREQa5BkZ7ft8CceLBLAj8eZ5erZb9cHuy5”),然后生产者应该将其发送给生产者。
当主要生产者收集15个生产者签名时,主要生产者应该做以下工作:
7、制作upgrade_system_contract_official_trx.json的副本并将其称为upgrade_system_contract_official_trx_signed.json,然后修改upgrade_system_contract_official_trx_signed.json以使签名字段包含所有15个收集的签名。 因此,upgrade_system_contract_official_trx_signed.json的尾部可能如下所示:
$ cat upgrade_system_contract_official_trx_signed.json | tail -n 20
\"transaction_extensions\": [],
\"signatures\": [
\"SIG_K1_JzABB9gzDGwUHaRmox68UNcfxMVwMnEXqqS1MvtsyUX8KGTbsZ5aZQZj
HD5vREQa5BkZ7ft8CceLBLAj8eZ5erZb9cHuy5\",
\"SIG_K1_Kj7XJxnPQSxEXZhMA8uK3Q1zAxp7AExzsRd7Xaa7ywcE4iUrhbVA3B6GW
re5Ctgikb4q4CeU6Bvv5qmh9uJjqKEbbjd3sX\",
\"SIG_K1_KbE7qyz3A9LoQPYWzo4e6kg5ZVojQVAkDKuufUN2EwVUqtFhtjmGoC6QP
QqLi8J7ftiysBp52wJBPjtNQUfZiGpGMsnZ1f\",
\"SIG_K1_KdQsE7ahHA9swE9SDGg4oF6XahpgHmZfEgQAy9KPBLd9HuwrF6c8m6jz43
zizK2oo32Ejg1DYuMfoEvJgVfXo81jsqTHvA\",
\"SIG_K1_K6228Hi2z1WabgVdf5bk2UdKyyDSVFwkMaagTn9oLVDV8rCX7aQcjY94c39
ah2CkLTsTEqzTPAYknJ8m2m9B7npPkHaFzc\",
\"SIG_K1_Jzdx75hBCA2WSaXgrupmrNbcQocUCsP8r1BKkPXMreiAKPZDwX9J3G8fS1H
hyqWjc7FbukwZf8sVRdS3wKbJVpytqXe7Nn\",
\"SIG_K1_KW7Qu2SdPD3zuQKh2ziFLzn9QbKqeMpeiemULky5Bbg1Mst6ijbCX3k2AVF
GNFLkNLA36PM1WAT5oipzu1B1K7ymRxTx1Z\",
\"SIG_K1_KXJf1KZNpz73YFKKE7u6jFgsQ8XcX3yA7rDX6ZmG1Qfnc9FLLmT1WViv4bw
cPbxaEYfR6SNWfk5cCR9eao2si1soqkXq92\",
\"SIG_K1_JynjkHFT5UFGDpEcqdriXTzCGCwS36Xztq4UAWQHLQgRUZT2YFoLhUcc87k
vUteqCUGVxsmSbfgWv1KLy24voKN4Qs5zTe\",
\"SIG_K1_JxhfCaGBhuNShpDHn7j1CryG3iSebvfi7FUnJsfkXNTiwLyq2NDBkeakwjCM
WFbzr6qqWuMDLjfXbzdtU17f1wCXMjKSgk\",
\"SIG_K1_KcMSz89QG1ZRFNrXc69R63d5KXbJA8CBjNPYv1VEA3TRfjqVYuhyaHpGXQN4
RSKDq4ygr3UTRYBQQVutkJnR6zZ4Ssgd7R\",
\"SIG_K1_JuxT6bhUAbDs6Q2ppuKyKauduvbaJLxvh4gBH4e4A9yRhvUBT7w3DcvMyhdao
电脑r27Kbu29jnqhTbvXcb57QqKWQDpboLv7e\",
\"SIG_K1_K8BuFYpCiC5FhpVK8ZAzc3VUg7vz6WwLoWBrGN6nnuqUjngGqvHp3UxDVzcwh
qccHdv8kdPXvF6G1NszwF1dd3wjCrHBYw\",
\"SIG_K1_KfH5ZirPwDk1RQKvJv2AGPfsJyPXvXLegZ7LvcPmRtjtMiErs1STXLNT8kiBfh
Zr4xkWRA5NR1kMF3d49DFMJiB2iWMXJc\",
\"SIG_K1_KjJB8jtcqpVe3r5jouFiAa9wJeYqoLMh5xrUV6kBF6UWfbYjimMWBJWz2ZPomG
Dsk7JtdUESVrYj1AhYbdp3X48KLm5Cev\"
],
\"context_free_data\": []
}
将已签名的交易推送到区块链:
$ programs/cleos/cleos push transaction
upgrade_system_contract_official_trx_signed.json
{
\"transaction_id\": \"202888b32e7a0f9de1b8483befac8118188c786380f6e62ced445f93fb2b1041\",
\"processed\": {
\"id\": \"202888b32e7a0f9de1b8483befac8118188c786380f6e62ced445f93fb2b1041\",
\"receipt\": {
\"status\": \"executed\",
\"cpu_usage_us\": 4909,
\"net_usage_words\": 15124
},
\"elapsed\": 4909,
\"net_usage\": 120992,
\"scheduled\": false,
\"action_traces\": [{
...
如果您收到类似以下的错误消息:
Error 3090003: provided keys, permissions, and delays do not satisfy declared
authorizations
Ensure that you have the related private keys inside your wallet and your
wallet is unlocked.
这意味着至少有一个提供的签名不好。 这可能是因为生产者签署了错误的交易,使用了错误的私钥或使用了错误的链ID。
如果您收到类似以下的错误消息:
Error 3090002: irrelevant signature included
Please remove the unnecessary signature from your transaction!
这意味着不必要的签名被包括在内。 如果有21个活跃的生产者,则只需要来自这21个活跃生产者中的15个的签名。
如果您收到类似以下的错误消息:
Error 3040006: Transaction Expiration Too Far
Please decrease the expiration time of your transaction!
这意味着将来到期时间超过1小时,您需要等待一段时间才能被允许推送交易。
如果您收到类似以下的错误消息:
Error 3040005: Expired Transaction
Please increase the expiration time of your transaction!
这意味着签名事务的到期时间已过,整个过程必须从第1步重新开始。
9、假设交易成功执行,每个人都可以验证新合同是否到位:
$ programs/cleos/cleos get code -c new_system_contract.wast
-a new_system_contract.abi eosio
code hash: 9fd195bc5a26d3cd82ae76b70bb71d8ce83dcfeb0e5e27e4e740998fdb7b98f8
saving wast to new_system_contract.wast
saving abi to new_system_contract.abi
$ diff original_system_contract.abi new_system_contract.abi
584,592d583
< },{
< \"name\": \"deferred_trx_id\",
< \"type\": \"uint32\"
< },{
< \"name\": \"last_unstake_time\",
< \"type\": \"time_point_sec\"
< },{
< \"name\": \"unstaking\",
< \"type\": \"asset\"
电脑 电脑