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

        

  • 相关阅读:
    poj 2584 T-Shirt Gumbo (二分匹配)
    hdu 1757 A Simple Math Problem (乘法矩阵)
    矩阵之矩阵乘法(转载)
    poj 2239 Selecting Courses (二分匹配)
    hdu 3661 Assignments (贪心)
    hdu 1348 Wall (凸包)
    poj 2060 Taxi Cab Scheme (二分匹配)
    hdu 2202 最大三角形 (凸包)
    hdu 1577 WisKey的眼神 (数学几何)
    poj 1719 Shooting Contest (二分匹配)
  • 原文地址:https://www.cnblogs.com/lsh0908/p/10721586.html
Copyright © 2011-2022 走看看