当EOS应用开发者在自己新搭建的开发环境中尝试提交第一个交易时,经常会 碰到3090003错误,提示交易授权所需密钥、权限或延迟不满足要求:
代码语言:javascript复制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.这是因为每一个新的EOSIO区块链都有一个默认的系统账号eosio,该账户将被 用来初始化区块链的设置,例如载入管理EOSIO区块链以及共识计算的系统合约。 每一个新的EOSIO链都内置一个相同的开发密钥,需要载入这个密钥才能以系统 账号eosio的名义对交易进行签名。
执行下面的命令载入账号eosio对应的密钥:
代码语言:javascript复制~$ cleos wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3注意:不要在生产环境中使用开发密钥,因为这个私钥是公开的!
那么,应该如何修改eosio的默认私钥?
在nodeos的配置文件(ubuntu默认路径:~/.local/share/eosio/nodeos/config/config.ini) 中,有一个参数signature-provider用来定义eosio账号对应的密钥对。如果你 没有修改过的话,看起来就是这样:
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3signature-provider参数的值是一个密钥对,形式为:
<public-key>=<provider-spec><public-key>是一个有效的EOSIO公钥字符串,例如:
OS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV<provider-spec>由两部分组成:<provider-type>:<data>。其中<provider-type> 的值可以是KEY或KEOSD,根据这部分的不同,<data>也有所不同。
当<provider-type>的值设置为KEY时,<data>的内容应当是与公钥对应的私钥字符串; 当<provider-type>的值设置为KEOSD时,<data>的内容则应当是keosd钱包的URL,注意这时 对应的钱包还需要解锁。
因此,你可以使用cleos生成一对密钥,然后修改signature-provider就可以 改变eosio的默认私钥了。


