在eos测试链上开发 eos 合约
由于自建 eos 私有链,需要对 eos 比较熟悉,否则会有比较多的问题
eos network jungle
jungle 是 eos 其中一条测试链,这里我们选用 https://monitor.jungletestnet.io 作为我们的水龙头。
js4eos 是一款比较易用的 eos 合约开发工具。
创建钱包
js4eos wallet create
请记下钱包的密码
选择 jungle 网络
PS: 20181124 jungle 升级到 jungle2.0,
原 jungle1.0 将不会再被支持,https://jungle.bloks.io 上的数据已经切换到 jungle2.0
js4eos config set --chainid=e70aaab8997e1dfce58fbfac80cbbb8fecec7b99cf982a9444273cbc64c41473 --url=http://jungle2.cryptolions.io:80 --network jungle
创建账号并激活
离线生成 公私钥,并通过 https://monitor.jungletestnet.io/#account 创建账户,使用 https://monitor.jungletestnet.io/#faucet 获取 eos 资产。注意,这里使用的 jungle2 测试网络。
生成账户的公私钥
PS: 公私钥是离线生成的,不区分主链,测试链
js4eos create key --to-console
请妥善保管
{
"privateKey": "5J***",
"publicKey": "EOS4xWTNK4ySE57Am86fH5pbFhyDhTGkrHDiWgNoNnYTabCqBkhky"
}
导入私钥到钱包
js4eos wallet import 5J***
查看导入的私钥
js4eos wallet keys
前往 https://monitor.jungletestnet.io/#account 创建账户
公私钥是离线生成的,但是 eos 账户需要在链上创建,前往 https://monitor.jungletestnet.io/#account (水龙头)创建账户即可。
其中 Account name
是你需要的账户名,而 Owner Public Key
和 Active Public Key
都可以设置为自己的公钥。这里 Account name
设置为 qyvlikeosdev
。
如下图示:
通过水龙头创建的 eos 账户,拥有一定的 cpu 和内存资源。但是并没有 eos 资产。前往 https://monitor.jungletestnet.io/#faucet 获取 eos 资产(需要梯子,每 6 小时可以拿一次)。
https://jungle.bloks.io/account/qyvlikdev111
给账号授权
当合约需要内联调用 eosio.token
的 action
时,需要设置一些权限。
模板如下:
js4eos set account permission 你的账户名 active '{"threshold": 1,"keys": [{"key": "你的公钥","weight": 1}],"accounts": [{"permission":{"actor":"你的账户名","permission":"eosio.code"},"weight":1}]}' owner -p 你的账户名
实际命令如下:
js4eos set account permission qyvlikeosdev active '{"threshold": 1,"keys": [{"key": "EOS4xWTNK4ySE57Am86fH5pbFhyDhTGkrHDiWgNoNnYTabCqBkhky","weight": 1}],"accounts": [{"permission":{"actor":"qyvlikeosdev","permission":"eosio.code"},"weight":1}]}' owner -p qyvlikeosdev
购买 ram
js4eos system buyram qyvlikeosdev qyvlikeosdev "10.0000 EOS"
编译&部署合约
我们约定 xxx
是合约目录。xxx
目录内,有 xxx.cpp
,xxx.cpp
是我们的 eos 智能合约的代码。
编译:
cd xxx
js4eos compile -o xxx.wasm xxx.cpp
js4eos compile -g xxx.abi xxx.cpp
部署(部署合约前,需要解锁钱包 js4eos wallet unlock
):
cd ..
js4eos set contract qyvlikeosdev xxx
接下来就可以通过 js4eos
调用合约了。