EOS智能合约开发(六)EOS智能合约开发中的异灵问题及解决办法

一、eosio.system智能合约部署遇到的问题
载入基础IO智能合约
现在我们拥有了一个钱包default,该钱包内部包含一个默认主密钥的账户eosio,默认的智能合约eosio.bios已经可以使用,这个合约是EOS很多基本action的基础系统,所以要保证这个合约的有效执行。这个合约可以让你能够直接控制资源分配,并且有权限访问API。在公链上,这个合约将管理已募集和待募集token,以储备带宽给CPU、内存以及网络活动使用。我们提取一下重点:

创建钱包
导入账户
默认合约eosio.bios,它的功能是控制资源分配。

这个默认合约eosio.bios可以在EOS源码位置contracts/eosio.bios找到。可以通过cleos来指定这个合约执行:

cleos set contract eosio build/contracts/eosio.bios -p eosio

问题1、
出现如下错误:Error 3080006: transaction took too long

cuijb@cuijb-VirtualBox:~/eos$ cleos -u http://192.168.0.107:8888 set contract eosio build/contracts/eosio.bios -p eosio
Reading WAST/WASM from build/contracts/eosio.bios/eosio.bios.wasm...
Using already assembled WASM...
Publishing contract...

Error 3080006: transaction took too long
----------------------------------------

问题解决:
nodeos程序启动时添加max-transaction-time即可解决这个问题

nodeos -e -p eosio --max-transaction-time=1000

问题二、
unable to find key

$cleos set contract eosio.token eosio.token
$cleos  push action eosio.token create '["eosio","1000000000.0000 EOS",0,0,0]' -p eosio.token
$cleos  push action eosio.token issue '["eosio","1000000000.0000 EOS","issue"]' -p eosio

$cleos set contract eosio eosio.system
Reading WAST/WASM from eosio.system/eosio.system.wasm...
Using already assembled WASM...
Publishing contract...
Error 3050003: eosio_assert_message assertion failure
Error Details:
assertion failure with message: unable to find key

这个问题eos github已经有人讨论过
就是4.0以后默认系统币名字是SYS,所以需要将上面的EOS改成SYS

$cleos  push action eosio.token create '["eosio","1000000000.0000 SYS",0,0,0]' -p eosio.token
$cleos  push action eosio.token issue '["eosio","1000000000.0000 SYS","issue"]' -p eosio
$cleos set contract eosio eosio.system

2018年7月18日整理于深圳

你可能感兴趣的:(区块链,技术篇,区块链开发)