仮想通貨EOS相場
EOSJS

仮想通貨EOSプログラミングの始め方(node.js)(eosjs v20.0)

今回は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
co eos

次にnode.jsの開発環境を作成しますので、以下のコマンドを入力します。

npm init

設定について聞いてきますのでそのままエンターキーを連打してください。

次にeosjsと必要モジュールをインストールしていきます。

npm i eosjs
npm i node-fetch
npm i text-encoding

これでeosjsの開発環境が整いました。

最後に以下のサイトで、EOSのテストネットにてテスト版EOSアカウントも作っておきましょう。

eosjsのプログラミングをする

早速プログラミングを始めていきたいと思いますので、先程作成したフォルダはMac環境であれば/home/<ユーザーネーム>/src/eos/の場所になりますのでそのフォルダを開いて、index.jsというファイルを作ります。

そのindex.jsの中にプログラムを記述していきたいと思います。

基本的なeosjsの型は以下の通りとなり、今回はCommonJSの形式でプログラミングしています。


/***************************************************/
/*      eosjsを動かすための基本的コード (index.js)     */
/***************************************************/

/* eosjsをインポート */
const { Api, JsonRpc, RpcError } = require('eosjs');
/* ウォレットの秘密鍵を格納するモジュール */
const { JsSignatureProvider } = require('eosjs/dist/eosjs-jssig');
/* APIを操作するためのモジュール */
const fetch = require('node-fetch');
/* 文字コードエンコード・デコードモジュール */
const { TextEncoder, TextDecoder } = require('text-encoding');

/* APIサーバーに接続: メインネットはこちら 今回は使いません*/
//const rpc = new JsonRpc('https://eos.greymass.com:443', {fetch});
/* APIサーバーに接続: テストネットはこちら */
const rpc = new JsonRpc('https://jungle2.eosio.cr:443', {fetch});

/* 秘密鍵の読み込み */
const defaultPrivateKey = "5K2KxxxxxxxxxxxxxxxxxxxXexxxxxxxxxxxxxxxxxxxx";
const signatureProvider = new JsSignatureProvider([defaultPrivateKey]);

/* EOS APIの読み込み */
const api = new Api({ rpc, signatureProvider, 
textDecoder: new TextDecoder(), textEncoder: new TextEncoder() });

 

この宣言をしておけばEOSのあらゆる機能を使うことが出来ます。
それでは2つほどプログラムを動かしてみましょう。

上記のコードの一番下に追記してください。



/************************************************************/
/*      EOSアカウントが存在するかどうかをチェックする (index.js)     */
/************************************************************/

async function get_account(account){
	/* 例外処理をかけてEOSアカウントが存在するかチェックします。 */
	try {
		/* EOSアカウントの情報を呼び出します。 */
		var ret = await rpc.get_account(account);

		/* EOSアカウント詳細情報をJSONデータで返します。 */
		return JSON.stringify(ret);
	} catch (e) {
		/* EOSアカウントが存在しなかったら-1を返します。 */
		return -1;
	}
}

更に下に以下のコードも追加します。


/************************************************************/
/*                EOSを送金する (index.js)                    */
/************************************************************/

async function send_transaction(){

 try {
  const result = await api.transact({
   actions: [{
    account: 'eosio.token',
    name: 'transfer', //送金しますという命令
    authorization: [{
     actor: '<送金者アカウント>',
     permission: 'active', //通常はactiveだがownerでも可
    }],
     data: {
      from: '<送金者アカウント>',
      to: '<受金者アカウント>',
      quantity: '1.0000 EOS', //必ず小数点4桁まで表示しないとエラーが出る
      memo: 'おらおらEOS送るぞ!',
     },
    }]
   }, {
    blocksBehind: 3,
    expireSeconds: 30,
   });
   /*  送金内容を表示する  */
   console.log(result);
 } catch (e) {
  /*  エラーが出たらエラー内容を表示する  */
  console.log("Error:" + e.message);
 }

}

上記2点のプログラムを書いたら実行してみましょう。


/************************************************************/
/*                プログラムを実行する (index.js)               */
/************************************************************/

/* 取得したアカウント詳細をJSONデータで表示する */
console.log(await get_account("<EOSアカウント>"));

/* 送金を実行する。 */
await send_transaction();

それではindex.jsを実行してみましょう。

eosjsを実行してみる

node index.js

上記を入力したらエンターキーを押すと以下のような結果が現れます。


{"account_name":"<EOSアカウント>","head_block_num":89562703,
"head_block_time":"2020-05-04T15:40:42.500","privileged":false,
"last_code_update":"1970-01-01T00:00:00.000",
"created":"2020-04-27T08:45:16.500",
"core_liquid_balance":"89.3987 EOS",
"ram_quota":10481,"net_weight":11003,
"cpu_weight":11003,"net_limit":{"used":795,"available":70052,"max":70847},
"cpu_limit":{"used":1461,"available":63598,"max":65059},"ram_usage":3734,
"permissions":[{"perm_name":"active","parent":"owner",
"required_auth":{"threshold":1,
"keys":[{"key":"EOS6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","weight":1}],
"accounts":[],"waits":[]}},{"perm_name":"owner","parent":"",
"required_auth":{"threshold":1,"keys":[{
"key":"EOS6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","weight":1}],
"accounts":[],"waits":[]}}],
"total_resources":{"owner":"<EOSアカウント>","net_weight":"1.1003 EOS",
"cpu_weight":"1.1003 EOS","ram_bytes":9081},
"self_delegated_bandwidth":{"from":"<EOSアカウント>","to":"<EOSアカウント>",
"net_weight":"1.1003 EOS","cpu_weight":"1.1003 EOS"},"refund_request":null,
"voter_info":{"owner":"<EOSアカウント>","proxy":"",
"producers":[],"staked":42006,
"last_vote_weight":"0.00000000000000000",
"proxied_vote_weight":"0.00000000000000000",
"is_proxy":0,"flags1":0,"reserved2":0,"reserved3":"0 "},
"rex_info":null}


{
  transaction_id: '64c1d37440a42a8a4ca3a7e62625a8779668c7c40aaff74ab3e00edf58d88ed0',
  processed: {
    id: '64c1d37440a42a8a4ca3a7e62625a8779668c7c40aaff74ab3e00edf58d88ed0',
    block_num: 89562721,
    block_time: '2020-05-04T15:40:51.500',
    producer_block_id: null,
    receipt: { status: 'executed', cpu_usage_us: 580, net_usage_words: 16 },
    elapsed: 580,
    net_usage: 128,
    scheduled: false,
    action_traces: [ [Object] ],
    account_ram_delta: null,
    except: null,
    error_code: null
  }
}

上記の内容が出てきたらプログラミング成功です。

最後に

今回はeosjsの基本的な型を紹介してみました。
node.jsを使ってjavascriptのスキルが有ればそこそこ使いやすいのかもしれません。
次回は送金の他、様々なアクションを紹介したいと思います。

EOS初心者おすすめ記事