Error 3090003: provided keys, permissions, and delays do not satisfy declared authorizations...

2019-03-12 09:58:43 浏览数 (1)

当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账号对应的密钥对。如果你 没有修改过的话,看起来就是这样:

代码语言:javascript复制
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

signature-provider参数的值是一个密钥对,形式为:

代码语言:javascript复制
<public-key>=<provider-spec>

<public-key>是一个有效的EOSIO公钥字符串,例如:

代码语言:javascript复制
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的默认私钥了。

0 人点赞