今回はnode.js(ノードジェイエス)による仮想通貨EOSプログラミングeosjs(イオスジェイエス)をやっていきたいと思います。
■node.jsとは
これまでInternet explorer(インターネットエクスプローラ)やGoogle Chrome(グーグルクローム)などのブラウザ上でしか動作が出来なかったJavascript(ジャバスクリプト)言語を、単体で実行することが出来、サーバー上でもクライアント側でも動作させることができる汎用性のあるJavascript環境です。
そのnode.jsのなかのパッケージプログラムとして仮想通貨EOSを操作させることのできるのがeosjsです。
今回のやり方は、Mac環境、Linux環境を想定しての設定になるので、Windowsの場合はバーチャルマシンにUbuntuを入れたりVPS(Virtual Private Server)を導入して運用するのをおすすめします。
node.jsのインストール方法は以下のリンクから参考にしてください。
eosjsの開発環境を構築する
Macの場合はターミナル、Linuxの場合はTerminalを開いてください。
最初にプログラミング作業用のフォルダ(src)を作成しましょう。
以下のコマンドを一行ずつ入力して行きましょう。
mkdir src
cd src
次にeosjsのプログラミングをする作業パッケージフォルダを作成します。
mkdir eos
cd eos
次にnode.jsの開発環境を作成しますので、以下のコマンドを入力します。
npm init
設定について聞いてきますのでそのままエンターキーを連打してください。
次にeosjsをインストールしていきます。
npm i eosjs@16.0.9
これでeosjsの開発環境が整いました。
最後に以下のサイトで、EOSのテストネットにてテスト版EOSアカウントも作っておきましょう。
eosjsのプログラミングをする
早速プログラミングを始めていきたいと思いますので、先程作成したフォルダはMac環境であれば/home/<ユーザーネーム>/src/eos/の場所になりますのでそのフォルダを開いて、index.jsというファイルを作ります。
そのindex.jsの中にプログラムを記述していきたいと思います。
基本的なeosjsの型は以下の通りとなり、今回はCommonJSの形式でプログラミングしています。
/***************************************************/
/* eosjsを動かすための基本的コード (index.js) */
/***************************************************/
/* eosjsをインポート */
const Eos = require('eosjs');
/* EOSブロックチェーンに接続(今回テストのためテストネットJungleに接続 */
eos = Eos({
keyProvider: '5Kxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', //プライベートキー
httpEndpoint: 'https://jungle2.cryptolions.io:443', //接続するAPIノード
chainId: 'e70aaab8997e1dfce58fbfac80cbbb8fecec7b99cf982a9444273cbc64c41473', //チェーンID
});
ちなみにメインネットの場合はこちら
/* メインネット接続設定 */
eos = Eos({
keyProvider: '5Kxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', //プライベートキー
httpEndpoint: 'https://nodes.get-scatter.com:443', //接続するAPIノード
chainId: 'aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906', //チェーンID
});
この宣言をしておけばEOSのあらゆる機能を使うことが出来ます。
それでは2つほどプログラムを動かしてみましょう。
上記のコードの一番下に追記してください。
/************************************************************/
/* EOSアカウント情報をチェックする (index.js) */
/************************************************************/
eos.getAccount("nodejstest45").then(function(res){ console.log(res) });
更に下に以下のコードも追加します。
/************************************************************/
/* EOSを送金する (index.js) */
/************************************************************/
function transfer(sPermission, sSendAccount, sRecAccount, fAmount, sSymbol, sMessage){
options = {
authorization:[`${sSendAccount}@${sPermission}`],
broadcast: true,
sign: true
}
var num = new Number(fAmount);
if(sMessage == null) sMessage = '';
eos.transfer(sSendAccount, sRecAccount, String(num.toFixed(4)) + ' ' + sSymbol, sMessage, options).then(res => {
console.log('sent: ', res);
}).catch(err => {
console.error('error: ', err);
});
}
上記2点のプログラムを書いたら実行してみましょう。
/************************************************************/
/* プログラムを実行する (index.js) */
/************************************************************/
/* 送金を実行する。 */
send_transaction("active", "from1account", "toeosaccount" 0.0001, "EOS", "オラオラメッセージ送るぞ');
それではindex.jsを実行してみましょう。
eosjsを実行してみる
node index.js
上記を入力したらエンターキーを押すと以下のような結果が現れます。
{
account_name: 'from1account',
head_block_num: 91098945,
head_block_time: '2020-05-13T14:36:48.000',
privileged: false,
last_code_update: '1970-01-01T00:00:00.000',
created: '2020-04-27T08:45:16.500',
core_liquid_balance: '78.0310 EOS',
ram_quota: 26466,
net_weight: 31004,
cpu_weight: 28001,
net_limit: { used: 3598, available: 196034, max: 199632 },
cpu_limit: { used: 5743, available: 159822, max: 165565 },
ram_usage: 4393,
permissions: [
{ perm_name: 'active', parent: 'owner', required_auth: [Object] },
{ perm_name: 'owner', parent: '', required_auth: [Object] }
],
total_resources: {
owner: 'from1account',
net_weight: '3.1004 EOS',
cpu_weight: '2.8001 EOS',
ram_bytes: 25066
},
self_delegated_bandwidth: {
from: 'from1account',
to: 'from1account',
net_weight: '3.1004 EOS',
cpu_weight: '2.8001 EOS'
},
refund_request: {
owner: 'from1account',
request_time: '2020-05-13T13:04:40',
net_amount: '0.5000 EOS',
cpu_amount: '0.5000 EOS'
},
voter_info: {
owner: 'from1account',
proxy: '',
producers: [],
staked: 79005,
last_vote_weight: '0.00000000000000000',
proxied_vote_weight: '0.00000000000000000',
is_proxy: 0,
flags1: 0,
reserved2: 0,
reserved3: '0 '
},
rex_info: null
}
sent: {
broadcast: true,
transaction: {
compression: 'none',
transaction: {
expiration: '2020-05-13T14:37:51',
ref_block_num: 3580,
ref_block_prefix: 3896985743,
max_net_usage_words: 0,
max_cpu_usage_ms: 0,
delay_sec: 0,
context_free_actions: [],
actions: [Array],
transaction_extensions: []
},
signatures: [
'SIG_K1_K66xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
]
},
transaction_id: '65bd7e5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
processed: {
id: '65bd7exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
block_num: 91098957,
block_time: '2020-05-13T14:36:54.000',
producer_block_id: null,
receipt: { status: 'executed', cpu_usage_us: 418, net_usage_words: 16 },
elapsed: 418,
net_usage: 128,
scheduled: false,
action_traces: [ [Object] ],
account_ram_delta: null,
except: null,
error_code: null
}
}
上記の内容が出てきたらプログラミング成功です。
最後に
今回はeosjsの基本的な型を紹介してみました。
node.jsを使ってjavascriptのスキルが有ればそこそこ使いやすいのかもしれません。
次回は送金の他、様々なアクションを紹介したいと思います。