加载BIOS合约给指定账户eosio踩坑记录

当完成节点搭建以后(测试单节点环境),我们需要给eosio这个账户,加载BIOS合约,实际上就是给eosio账户赋予了一个超级管理员的角色,这样就可以对其他账户资源进行管理以及执行一些需要特殊权限才可以执行的API。

首先,不需要启动nodeos,直接调用cleos命令:

cleos set contract eosio ../conntract/eosio.bios -p eosio

详细解释一下这句的含义:
首先,cleos是eosio开发中非常常用的一个工具,工具目录位于:
~/eos/build/programs/cleos
文件夹内

其次,cleos的set命令:“set or update a blockchain state” (设置或者更新一个区块链状态)
contract,智能合约,“set or update blockchain account state" (设置或更新区块链账户的状态)
后面跟的参数1:eosio,即要更新的账户名,再后面跟的,是智能合约的路径。
这个智能合约路径一般位于:
~/eos/build/contracts目录下,所以要填好对应的目录
最后的参数 -p,即--permission,“An account and permission level to authorize, as in 'account@permission' (defaults to 'account@active')",授权账户和权限级别,例如 account@permission,默认为accounnt@active。

执行该命令后,提示:

~/eos/build/contracts$ cleos set contract eosio eosio.bios # 注意这里我在contracts目录下
Readinng WASM from eosio.bios/eosio.bios.wasm...
Publishinng contract...
Failed to connect to nodeos at http://127.0.0.1:8888/; is nodeos running?

询问是否启动了nodeos,我没有启动,所以,去启动nodeos

~/eos/build/programs/nodeos$ ./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin

然后再试试刚才的cleos命令:

~/eos/build/contracts$ cleos set contract eosio eosio.bios
Error 3120006: No available wallet
Ensure that you have created a wallet and have it open

没有可用的钱包,需要确认是否创建并能打开了?

前面我们已经创建了default钱包(没有可以去看前面的文章:Ubuntu下安装eosio1.0.0过程全记录https://www.jianshu.com/p/16d0b7e62704)

先看一眼现在钱包有没有打开的:

cleos wallet list

发现没有。
打开钱包:

cleos wallet open # 默认就会打开default

然后再看

cleos wallet list
提示发现default已经打开了。

然后给钱包解锁:

cleos wallet unlock # 默认default
password: ***(之前创建时生成的密码)
Unlocked:default

然后看看钱包状态:

cleos wallet list
发现在default后面多了一个*,表示已经解锁

再去执行

~/eos/build/contracts$ cleos set contract eosio eosio.bios
Error3090003: 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.

确认钱包解锁并且有相关的私钥。

实际上这是因为我们现在所使用的default钱包,没有倒入eosio私钥导致的。
默认的eosio初始私钥:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

cleos wallet import
private key: 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
imported private key for :EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

导入成功后,再执行难上面的命令:

~/eos/build/contracts$ cleos set contract eosio eosio.bios -p eosio
Readinng WASM from eosio.bios/eosio.bios.wasm...
Publishinng contract...
executed transaction: **** 3720byte

eosio <= eosio::setcode {account......

最后提示只是本地执行了,还没得到区块确认,这其实已经不重要了,很快就会被确认了。

好了,完成了加载bios合约,中间的不少坑,都踩了一个遍。。。

我是王越,欢迎加入EOSIO开发俱乐部,微信361757(暗号EOS)

你可能感兴趣的:(加载BIOS合约给指定账户eosio踩坑记录)