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 5private key: "signatures": [ "SIG_K1_JzABB9gzDGwUHaRmox68UNcfxMVwMnEXqqS1MvtsyUX8KGTbsZ5aZQZ 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 authorizationsEnsure that you have the related private keys inside your wallet and your wallet is unlocked.这意味着至少有一个提供的签名不好。
这可能是因为生产者签署了错误的交易,使用了错误的私钥或使用了错误的链ID。
如果您收到类似以下的错误消息:Error 3090002: irrelevant signature includedPlease remove the unnecessary signature from your transaction!这意味着不必要的签名被包括在内。
如果有21个活跃的生产者,则只需要来自这21个活跃生产者中的15个的签名。
如果您收到类似以下的错误消息:Error 3040006: Transaction Expiration Too FarPlease decrease the expiration time of your transaction!这意味着将来到期时间超过1小时,您需要等待一段时间才能被允许推送交易。
如果您收到类似以下的错误消息:Error 3040005: Expired TransactionPlease increase the expiration time of your transaction!这意味着签名事务的到期时间已过,整个过程必须从第1步重新开始。
9、假设交易成功执行,每个人都可以验证新合同是否到位:$ programs/cleos/cleos get code -c new_system_contract.wast -a new_system_contract.abi eosiocode hash: 9fd195bc5a26d3cd82ae76b70bb71d8ce83dcfeb0e5e27e4e740998fdb7b98f8saving wast to new_system_contract.wastsaving abi to new_system_contract.abi$ diff original_system_contract.abi new_system_contract.abi584,592d583< },{< "name": "deferred_trx_id",< "type": "uint32"< },{< "name": "last_unstake_time",< "type": "time_point_sec"< },{< "name": "unstaking",< "type": "asset"