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