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