FIBOS入坑指南——本地開發環境搭建

FIBOS是什麼?

FIBOS 是一個結合 FIBJS 以及 EOS 的 JavaScript 的運行平臺,它使得 EOS 提供可編程性,並容許使用 JavaScript 編寫智能合約。FIBOS 平臺的出現讓第三代 EOS 智能合約編程變得簡單、快捷!其項目官網爲 https://fibos.io/html

簡單地說,你能夠在 FIBOS 這個平臺上,使用 JS 語言來發行Token、控制區塊節點運行、以及編寫、部署、調用智能合約等操做,相比 EOS 使用 C/C++ 開發部署智能合約,具備更低的開發門檻。node

FIBOS 能夠運行在 Mac OS X,Linux 和 FreeBSD 系統中,因此要基於 FIBOS 平臺開發區塊鏈應用,首先得確保你的操做系統是這三種之一,而且已經安裝好 node.js 和 npm ,相關的安裝教程自行網上尋找便可。git

一、快速安裝穩定版的FIBOS

在終端中執行如下命令便可,版本更新也是使用這條命令。github

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

若是安裝成功,在終端輸入 fibos 將出現以下圖。
FIBOS 安裝成功npm

二、一鍵安裝開發環境

因爲區塊鏈的複雜性,不論是 EOS 仍是 FIBOS 搭建開發環境都比較繁瑣,不過 FIBOS 官方已經提供了一個一鍵搭建本地開發環境的工具,咱們執行如下命令將其從 GitHub 下載下來。編程

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

接着進入 fib-testnet 文件夾,執行安裝相關的包依賴便可,依次執行如下兩條命令,以下圖。json

cd fib-testnet
npm install

安裝相關依賴包

能夠先嚐試啓動一下,在 fib-testnet 目錄執行如下命令,若是成功,將會開始出塊,以下圖。瀏覽器

fibos index.js dev

圖片描述

大概在40秒後,BP同步節點開始運行,此時執行如下命令,或在瀏覽器輸入 http://127.0.0.1:8801/v1/chain/get_info 得到當前區塊的信息。在本出塊終端按 Ctrl+C 或新開一個終端中執行 killall fibos 便可關閉 FIBOS 節點運行,固然,咱們目前先不關閉着,下面還要用。dom

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

查看出塊信息

三、建立一些密鑰

在 FIBOS 或 EOS 中,一個有效的帳戶,須要綁定至少一個公鑰,所以,咱們在建立開發帳戶以前,須要先建立一些密鑰對。在 fib-testnet 文件夾中,新建一個 init 文件夾,而後再新建一個 generate.js 文件,輸入如下JS代碼。curl

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組密鑰對。

生成3組密鑰對

四、建立一些帳號,並轉入一些 FO Token

有效的 FIBOS 帳戶名和 EOS 相似,都必須是由 12345.abcdefghijklmnopqrstuvwxyz 組成,且長度小於等於12個字符串。其中小於12個字符串的帳戶名由系統的智能合約控制,須要競價得到。爲了方便,咱們這裏使用12個字符串長度做爲帳戶名,分別是 computer11十一、computer11十二、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 ,以下圖,即完成 computer11十一、computer11十二、computer1113 帳戶的建立,同時每一個帳戶擁有 10000 FO 餘額了,能夠用來作各種轉帳、兌換測試。若是出錯,須要查看一下本地 fibos 節點是否正在運行,在瀏覽器輸入 http://127.0.0.1:8801/v1/chain/get_info

建立3個帳戶

五、後記(完)

至此,本地的 FIBOS 開發環境基本搭建完成,若是你想試試在本地環境編寫、部署、調用智能合約,能夠參考 FIBOS 官方開發文檔,固然,後續有時間,我也會把在 FIBOS 智能合約開發過程當中踩到的坑寫寫。若是想了解 FIBOS 主網是如何啓動的,啓動順序是怎樣一個過程,節點編程時遇到的問題,那麼這個 fib-testnet/lib 文件夾下的內容很值得你去研究。

相關文章
相關標籤/搜索