fibos开发踩坑集合

fibos.js API资料:

与eosjs相比,fibos.js没有添加新功能,可以在eosjs项目页面https://developers.eos.io/eosio-nodeos/reference上找到所有函数。对于fibos.js,唯一需要做的就是把异步函数调用切换到同步版本,如下: 

  

具体参考:https://github.com/FIBOSIO/fibos.js/blob/master/README.md

配置方面:

1、关于账户

  支持 FIBOS TestNet 账户注册: http://api.testnet.fo/ (默认账户送 10 EOS =1000FO通证)

  账户名:必须12位,仅限数字 1-5、小写英文字母

2、关于网络

  // 测试网-账户客户端配置

  client: {
  chainId: '68cee14f598d88d340b50940b6ddfba28c444b46cd5f33201ace82c78896793a',
  httpEndpoint: ' http://api.testnet.fo',
  keyProvider: 'your private key'
  }

   // 主网-账户客户端配置

  client: {
  chainId: '6aa7bd33b6b45192465afa3553dedb531acaaff8928cf64b70bd4c5e49b7ec6a',
  httpEndpoint: 'http://ca-rpc.fibos.io:8870',
  keyProvider: your private key'
  }

语法方面:

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 合约进行转账操作。

  例:在自己的合约内调用eos.token合约的transfer函数

    

  eoiso.code这一特殊权限是dawn4.0后新增的内部特殊权限,解决权限乱用问题,以加强inline action的安全性。

  alice调用智能合约contract.test

  第一种情况:如果test只是一个打印函数,而不会调用其他合约这时alice以自己active的权限alice@active去执行contract.test,不会出现问题。

  第二种情况:test函数被人修改,其中调用eosio.token的transfer函数,此时以alice@active权限就可以取走alice的EOS。

  采用eosio.code后,contract.test要以alice@active去调用eosio.token,必须得到alice的授权,即必须在alice@active里添加contrac@eosio.code授权

  若没有授权,则报错:

  "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、abi文件存在问题

  应用程序二进制接口(application binary interface):ABI文件是基于JSON格式的描述:如何将用户的操作在JSON格式和二进制格式之间进行转化,还描述如何在数据库状态和JSON格式文件之间进行转换。一旦我们用ABI文件对智能合约进行描述之后,开发者和用户们就能轻而易举的用JSON文件与智能合约进行交互。

  具体可看https://blog.csdn.net/u011240016/article/details/84036061

  

  action的type定义必须为自定义,然后再在Type中定义,否则报错,如上

  且不允许不带参数的action,否则报错,如下:

  

  abi文件内有明显结构错误,报错如下:

  

7、查询账户余额

  方法一:

    const balance = fibosClient.getCurrencyBalanceSync("eosio.token", accountName, "FO@eosio");

    console.log(balance);

    

  方法二:

    const balance = fibosClient.getTableRowsSync(true, 'eosio.token', accountName, 'accounts');

    console.log(balance);

    

8、初步判断:fibos的合约里的全局变量不同于以太坊智能合约里的状态,每次调用都会初始化

    

原文地址:https://www.cnblogs.com/lsh0908/p/10721586.html