仮想通貨EOS相場
EOSJS

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

今回は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のスキルが有ればそこそこ使いやすいのかもしれません。
次回は送金の他、様々なアクションを紹介したいと思います。

EOS初心者おすすめ記事