最近在编写EOS合约代码的时候,遇到的一些问题,现在放在一起做一个笔记。
1、inline action调用时没有权限
Error Details:
transaction declares authority '{"actor":"testtestmine1","permission":"active"}', but does not have signatures for it under a provided delay of 0 ms, provided permissions [{"actor":"testtesttest","permission":"eosio.code"}], provided keys [], and a delay max limit of 3888000000 ms
pending console output:
意思是,在action内部调用合约执行其它的action时,需要给testtesttest
账户添加testtestmine1
的eosio.code
权限。
如下设置即可:
cleos set account permission testtestmine1 active '{"threshold": 1,"keys": [{"key": "testtestmine1账户的私钥","weight": 1}], "accounts": [{"permission":{"actor":"testtesttest","permission":"eosio.code"},"weight":1}]}' -p testtestmine1@owner
2、调用action时,参数传递错误
assertion failure with message: read
pending console output:
上面遇到这个错误,是因为我在内部调用action时参数传递错误导致。这个错误我不止犯了一次,最印象深刻的是在transfer
时,传递memo参数一定要转换成std::string类型
,直接给"is transfer"这样不行。
3、Failed with error: Parse Error (4)Couldn't parse uint64_t
详细错误信息如下:
error 2018-11-12T03:28:23.314 thread-0 main.cpp:3151 main ] Failed with error: Parse Error (4)Couldn't parse uint64_t
这个错误是因为我将结构体的名字
和方法名
写成一样导致。
4、错误:iterator out of range
遇到这个错误,是因为我在遍历参数时进行修改,传递了一个另外类型数据
导致。报一个这样不知名的错误,我总以为是循环的问题,找了很久。
5、rpc的api 接口中,在获取table
中数据时,通过lower_bound
进行搜索
参考:https://github.com/EOSIO/eosjs/issues/154
5、方法调用成功了,内部没有任何反应
碰到一个问题,在类中声明了action,却在apply中没有添加对应调用,导致外部看起来调用成功,其实内部根本没有调用到对应方法。
6、Assertion failure: multiplication overflow
这个问题是因为在处理asset
乘法时,由于乘以一个很大的乘数导致溢出了。(错误的原因还是因为我前面以为合约中不能使用double型,现在发现是可以的。
解决的办法很简单,先使用double计算好除法,再进行乘法就行了。
参考:https://github.com/EOSIO/eos/issues/4872
网友评论