fibos开发踩坑集合

语法方面:

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、未完待续

猜你喜欢

转载自www.cnblogs.com/lsh0908/p/10721586.html