语法方面:
1、abi文件 type都是小写
2、js变量名不能有大写字母
3、
其他:
1、FIBOS 账户有2种原生权限:
owner 拥有超级权限,代表着账户的归属者,因为拥有此权限者可以用于操作其他权限配置,该权限常用事务中(转账、合约 action 等)一般不会使用
active 常用业务的权限,比如:转账、投票等。
2、合约部署在哪个账户上,调用合约内函数时就需要该账户的授权
var ctx = fibosClient.contractSync(合约账户名);
let i = ctx.payforvotingSync(参数,参数,..,{
authorization:合约账户名
});
3、inline action与 eoiso.code
inlilne内部调用,简单来说一个合约的代码调用另外一个智能合约的函数,最常用的场景是在合约内部调用 Token 合约进行转账操作。
例:
引:eoiso.code这一特殊权限是dawn4.0后新增的内部特殊权限,用来加强inline action的安全性。
比如alice调用智能合约contract.test,一开始alice看过contract.test的逻辑,发现它只是一个打印函数,并不会调用其他合约。
所以alice以自己active的权限alice@active去执行contract.test。
但是contract的拥有者某一天可能偷偷更改了test的实现,在test函数中调用eosio.token的transfer函数以alice@active权限就可以取走alice的EOS.
为了解决权限乱用问题,EOS新增了eosio.code这个特殊权限。
采用eosio.code后,contract.test要以alice@active去调用eosio.token,必须得到alice的授权,即必须在alice@active里添加[email protected]授权。
若没有授权,则报错:
"message":"/voteaccount1/index.js:19:8
trans.send_inline(\"eosio.token\", \"transfer\", {
Error: 3090003 unsatisfied_authorization: Provided keys, permissions, and delays do not satisfy declared authorizations
transaction declares authority '{\"actor\":\"liusihao1314\",\"permission\":\"active\"}', but does not have signatures for it under a provided delay of 0 ms,
provided permissions [{\"actor\":\"voteaccount1\",\"permission\":\"eosio.code\"}], provided keys [], and a delay max limit of 3888000000 ms
授权如下:
注:actor表示action的调用者吗,permission表示actor需要的权限
4、on_xxx 是监听 action 事件的用法
例如合约里写on_extransfer 方法,并部署到合约账户上,这表示在合约里会监听 extransfer 这个 action 方法里给这个合约账户发的通知
5、合约部署时上传abi接口文件和合约js文件到合约账户,若在合约文件里引用其他文件,会报错,因为合约账户里不存在这个文件
6、未完待续