FIBOS入坑指南——本地开发环境搭建

虚树极昼
• 阅读 4599

FIBOS是什么?

FIBOS 是一个结合 FIBJS 以及 EOS 的 JavaScript 的运行平台,它使得 EOS 提供可编程性,并允许使用 JavaScript 编写智能合约。FIBOS 平台的出现让第三代 EOS 智能合约编程变得简单、快捷!其项目官网为 https://fibos.io/

简单地说,你可以在 FIBOS 这个平台上,使用 JS 语言来发行Token、控制区块节点运行、以及编写、部署、调用智能合约等操作,相比 EOS 使用 C/C++ 开发部署智能合约,具有更低的开发门槛。

FIBOS 可以运行在 Mac OS X,Linux 和 FreeBSD 系统中,所以要基于 FIBOS 平台开发区块链应用,首先得确保你的操作系统是这三种之一,并且已经安装好 node.js 和 npm ,相关的安装教程自行网上寻找即可。

1、快速安装稳定版的FIBOS

在终端中执行以下命令即可,版本更新也是使用这条命令。

curl -s https://fibos.io/download/installer.sh | sh

如果安装成功,在终端输入 fibos 将出现如下图。
FIBOS入坑指南——本地开发环境搭建

2、一键安装开发环境

由于区块链的复杂性,不管是 EOS 还是 FIBOS 搭建开发环境都比较繁琐,不过 FIBOS 官方已经提供了一个一键搭建本地开发环境的工具,我们执行以下命令将其从 GitHub 下载下来。

git clone https://github.com/FIBOSIO/fib-testnet.git

接着进入 fib-testnet 文件夹,执行安装相关的包依赖即可,依次执行以下两条命令,如下图。

cd fib-testnet
npm install

FIBOS入坑指南——本地开发环境搭建

可以先尝试启动一下,在 fib-testnet 目录执行以下命令,如果成功,将会开始出块,如下图。

fibos index.js dev

FIBOS入坑指南——本地开发环境搭建

大概在40秒后,BP同步节点开始运行,此时执行以下命令,或在浏览器输入 http://127.0.0.1:8801/v1/chain/get_info 获得当前区块的信息。在本出块终端按 Ctrl+C 或新开一个终端中执行 killall fibos 即可关闭 FIBOS 节点运行,当然,我们目前先不关闭着,下面还要用。

curl http://127.0.0.1:8801/v1/chain/get_info

FIBOS入坑指南——本地开发环境搭建

3、创建一些密钥

在 FIBOS 或 EOS 中,一个有效的账户,需要绑定至少一个公钥,因此,我们在创建开发账户之前,需要先创建一些密钥对。在 fib-testnet 文件夹中,新建一个 init 文件夹,然后再新建一个 generate.js 文件,输入以下JS代码。

var FIBOS = require('fibos.js');

var priKey, pubKey;

for (var i=0; i<3; i++) {
    priKey = FIBOS.modules.ecc.randomKeySync();
    pubKey = FIBOS.modules.ecc.privateToPublic(priKey);
    console.notice('\n私钥: '+priKey);
    console.notice('公钥: '+pubKey+'\n');
}

然后打开一个新的终端,进入 fib-testnet/init/ 文件夹中,执行 fibos generate.js ,即可如下图获得随机生成的3组密钥对。

FIBOS入坑指南——本地开发环境搭建

4、创建一些账号,并转入一些 FO Token

有效的 FIBOS 账户名和 EOS 类似,都必须是由 12345.abcdefghijklmnopqrstuvwxyz 组成,且长度小于等于12个字符串。其中小于12个字符串的账户名由系统的智能合约控制,需要竞价获得。为了方便,我们这里使用12个字符串长度作为账户名,分别是 computer1111、computer1112、computer1113,同时分别对应以上三组密钥对。

进入 fib-testnet/init/ 文件夹中,新建一个 init.js 文件,输入以下 JS 代码,用于创建3个账户,密钥对最好自行修改一下。

var config_dev = require('../common/config_dev.json');
var fibossystems = require('../common/fibossystems');
var systems = require('../common/systems');
var config = require('../config.json');
var FIBOS = require('fibos.js');

// 你可以在以下 accounts 这个对象里,增加或修改自己喜欢的FIBOS账户,密钥对最好自行修改一下
var accounts = {
    "computer1111": {
        "priKey": "5K3HGUKEwapH1GFrHjhtgr5sbqkLnFHrZL3ddR6v7FgrYetnQ2a",
        "pubKey": "FO5Xx9fdHUgCEe5huzedVGE2PTewhVsdNCcTg3cNeWN6KPVRF738"
    },
    "computer1112": {
        "priKey": "5JiU8Tzgv87Wx79mrmdkGjbaom1eAqxTQeGSoC63sziQ8eexRA8",
        "pubKey": "FO5Au67waA8UN9xfieK3KPGSX2jRzRRvFNvPhsBvtejGcXbA8UwG"
    },
    "computer1113": {
        "priKey": "5J5i5mtXep7fdHNYWjP9XpoZ2srFgE24r1GTHvTt9sU1BMPqby3",
        "pubKey": "FO6UYUU63Q4rFsbFV8KQLQivYyyUmU45fiCdv1D8nouXicooSsqr"
    }
};

function initClient(_keyProvider, _httpEndpoint, _chainId) {
    return FIBOS({
        chainId: config.chainId,
        keyProvider: _keyProvider || null,
        httpEndpoint: _httpEndpoint || config_dev.httpEndpoint,
        logger: {
            log: null,
            error: null
        }
    });
}

var client, res, ctx;

client = initClient(systems.concat(fibossystems).map(function(d) {
    return d.private_key;
}));

// 创建账户
client.transactionSync(tr => {
    for (account in accounts) {
        // 创建账户
        tr.newaccount({
            creator: 'fibos',
            name: account,
            owner: accounts[account].pubKey,
            active: accounts[account].pubKey
        }, {
            authorization: 'fibos'
        });

        // 购买内存
        tr.buyrambytes({
            payer: 'fibos',
            receiver: account,
            bytes: 1024 * 1024 * 2
        }, {
            authorization: 'fibos'
        });

        // 抵押 FO 获得 NET、CPU 资源
        tr.delegatebw({
            from: 'fibos',
            receiver: account,
            stake_net_quantity: '100.0000 FO',
            stake_cpu_quantity: '100.0000 FO',
            transfer: 1
        }, {
            authorization: 'fibos'
        });

        console.notice('created '+account);      
    }

},{
    authorization: 'fibos'
});

console.notice('');

// 转 10000.0000 FO 到一些账户中
ctx = client.contractSync('eosio.token');

for (account in accounts) {
    ctx.extransferSync('fibos', account, '10000.0000 FO@eosio', 'FO to '+account, {
        authorization: 'fibos'
    });   

    console.notice('extransfer 10000.0000 FO@eosio to '+account);
}

console.notice('');

进入 fib-testnet/init/ 文件夹中,执行 fibos init.js ,如下图,即完成 computer1111、computer1112、computer1113 账户的创建,同时每个账户拥有 10000 FO 余额了,可以用来做各类转账、兑换测试。如果出错,需要查看一下本地 fibos 节点是否正在运行,在浏览器输入 http://127.0.0.1:8801/v1/chain/get_info

FIBOS入坑指南——本地开发环境搭建

5、后记(完)

至此,本地的 FIBOS 开发环境基本搭建完成,如果你想试试在本地环境编写、部署、调用智能合约,可以参考 FIBOS 官方开发文档,当然,后续有时间,我也会把在 FIBOS 智能合约开发过程中踩到的坑写写。如果想了解 FIBOS 主网是如何启动的,启动顺序是怎样一个过程,节点编程时遇到的问题,那么这个 fib-testnet/lib 文件夹下的内容很值得你去研究。

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
4年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
4年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
4年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
虚树极昼
虚树极昼
Lv1
故国山川,故园心眼,还似王粲登楼。
文章
4
粉丝
0
获赞
0