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