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的合約裏的全局變量不一樣於以太坊智能合約裏的狀態,每次調用都會初始化

相關文章
相關標籤/搜索