当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:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
signature-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的默认私钥了。