deploy-contracts
在前面的章节我们成功连接了自己的 FIBOS 的节点,并且进行了一些简单操作。在这一章我们将带领大家发布一个简单的 JavaScript 合约,旨在让大家快速的了解发布合约的流程,并且上手在本地节点发布属于自己的 JavaScript 合约。
本文运行环境:
系统:macOS
本章涉及到文章列表:
hello_fibos/
├── fibos_client
│ ├── call.js
│ ├── initClient.js
│ ├── deploy.js
│ ├── hello
│ │ ├── hello.abi
│ │ └── hello.js
│ └── package.json
└── start_fibos
└── node.js
本章示例代码地址:https://github.com/FIBOSIO/samples
学习准备
本章节的内容基于前面章节知识的铺垫。强烈建议读者学习本章之前阅读使用 fibos.js 与 FIBOS 交互和搭建一个 FIBOS 开发环境,以免在本章的学习过程中遇到困扰。
目录文件说明:
├── fibos_client
│ ├── call.js 调用合约接口脚本文件
│ ├── deploy.js 加载、发布合约脚本文件
│ ├── initClient.js FIBOS连接文件
│ ├── hello
│ │ ├── hello.abi 合约abi文件
│ │ └── hello.js 合约代码文件
需要说明的是,在 FIBOS 中一个用户只能发布一个同名的合约,如果再次发布相同内容的合约(即合约代码hash值相同),发布合约会失败,如果合约内容与节点合约内容不同,则会更新合约。
发布自己的 JS 合约
hello 合约代码
在下面我们通过 JavaScript 来编写合约的功能,在这个合约调用成功后,将在命令行输出传入参数的名称。
以下代码保存至工作目录 ./hello/hello.js
exports.hi = user => console.error('in contract:', user);
合约 abi 文件
下面定义了一份 abi 文件,对于合约而言,abi 定义了 action 行为和数据储存的的表等基础信息。对于 abi 更详细的解读,我们将在后续的文章中给出。
以下代码保存至工作目录./hello/hello.abi
{
"version": "eosio::abi/1.0",
"structs": [{
"name": "player",
"base": "",
"fields": [{
"name": "title",
"type": "string"
}, {
"name": "age",
"type": "int64"
}]
}, {
"name": "hi",
"base": "",
"fields": [{
"name": "user",
"type": "name"
}]
}],
"actions": [{
"name": "hi",
"type": "hi",
"ricardian_contract": ""
}]
}
加载、发布合约脚本文件
以下代码保存至工作目录
deploy.js
我们将使用前面章节创建的 hello 用户来发布一个上述合约。
var FIBOS = require('./initClient.js')
var fs = require("fs");
var config = {
"public-key": "FO6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"private-key": "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3",
"contractName": "hello"
};
// new FIBOS client
var fibos = FIBOS(config["private-key"]);
//setcode
var js_code = fs.readTextFile("./hello/hello.js");
fibos.setcodeSync(config["contractName"], 0, 0, fibos.compileCode(js_code));
//getcode
var code = fibos.getCodeSync(config["contractName"], true);
console.log("code:", code);
//setabi
var abi = JSON.parse(fs.readTextFile("./hello/hello.abi"));
fibos.setabiSync(config["contractName"], abi);
执行脚本:
fibos deploy.js
输出结果(片段):
code: {
"account_name": "hello",
"code_hash": "383a12daacaf124eea9afc529822d990853b5b99570401b8394534b746ea3977",
"wast": "504b03042d00000008002cadfe4c6a9400a2360000003900000008001400696e6465782e6a7301001000000000000000000000000000000000004bad28c82f2a29d6cbc854b055282d4e2d52b0b55348cecf2bcecf49d54b2d2aca2fd250cfcc0389941425269758a9eb8055695a0300504b010200001400000008002cadfe4c6a9400a23600000039000000080000000000000001000000000000000000696e6465782e6a73504b0506000000000100010036000000700000000000",
"wasm": ""
}
调用合约接口脚本文件
以下代码保存至工作目录
call.js
:```javascript
var FIBOS = require('./initClient.js')
var config = {
"public-key": "FO6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"private-key": "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3",
"contractName": "hello"
};
// new FIBOS client var fibos = FIBOS(config["private-key"]);
//call abi var ctx = fibos.contractSync(config["contractName"]); let i = ctx.hiSync('hello', { authorization: config["contractName"] });
执行脚本:
```text
fibos call.js
在 FIBOS 节点服务控制台输出 trxs:1
,说明调用成功 :
2018-07-30T14:28:22.005 thread-1 producer\_plugin.cpp:1196 produce\_block \] Produced block 00000e57c573a33b... \#3671 @ 2018-07-30T14:28:22.000 signed by eosio \[trxs: 1, lib: 3670, confirmed: 0\]
体验 FIBOS 超棒的测试框架
这几章我们学会了如何搭建 FIBOS 的开发环境,也学会了如何使用 fibos.js 与 FIBOS 交互,那么让我们来试试 FIBOS 的测试框架吧!
Last updated