fibos开发踩坑集合

fibos.js API资料:node

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

  

 

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

配置方面:数据库

一、关于帐户api

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

  帐户名:必须12位,仅限数字 1-五、小写英文字母网络

二、关于网络app

  // 测试网-帐户客户端配置异步

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

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

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

语法方面:

一、abi文件 type都是小写

二、js变量名不能有大写字母

三、

开发问题集锦:

一、FIBOS 帐户有2种原生权限:

  owner 拥有超级权限,表明着帐户的归属者,由于拥有此权限者能够用于操做其余权限配置,该权限经常使用事务中(转帐、合约 action 等)通常不会使用

  active 经常使用业务的权限,好比:转帐、投票等。

二、合约部署在哪一个帐户上,调用合约内函数时就须要该帐户的受权

  var ctx = fibosClient.contractSync(合约帐户名);

  let i = ctx.payforvotingSync(参数,参数,..,{

    authorization:合约帐户名

  });

三、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须要的权限

四、on_xxx 是监听 action 事件的用法

  例如合约里写on_extransfer 方法,并部署到合约帐户上,这表示在合约里会监听 extransfer 这个 action 方法里给这个合约帐户发的通知

 五、合约部署时上传abi接口文件合约js文件到合约帐户,若在合约文件里引用其余文件,会报错,由于合约帐户里不存在这个文件

  

  

六、abi文件存在问题

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

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

  

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

  且不容许不带参数的action,不然报错,以下:

  

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

  

七、查询帐户余额

  方法一:

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

    console.log(balance);

    

  方法二:

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

    console.log(balance);

    

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

相关文章
相关标签/搜索