• 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的合约里的全局变量不同于以太坊智能合约里的状态,每次调用都会初始化

        

  • 相关阅读:
    入门指引之实现简单的被动回复和图来图往
    入门指引
    实现待办事项网站回顾
    使用Django 测试客户端一起测试视图,模板和URL
    使用单元测试测试简单的首页
    2 使用unitest 模块扩展功能测试
    1 准备工作
    2018 开始认真学习点python
    边学边体验django--HttpRequest 对象
    边学边体验django--表格
  • 原文地址:https://www.cnblogs.com/lsh0908/p/10721586.html
Copyright © 2020-2023  润新知