イノベーション エンジニアブログ


株式会社イノベーションのエンジニアたちの技術系ブログです。ITトレンド・List Finderの開発をベースに、業務外での技術研究などもブログとして発信していってます!


このエントリーをはてなブックマークに追加

DockerでNEMのAPIを使いAccount情報取得から送金まで使ってみる

そろそろ肌寒くなってきましたね。

こんににはこへです。 ということで今回はNEMで遊びます。

nem_1.png

環境構築

doker-compose.yml

version: '3.7'
services:
  node:
    image: node
    tty: true
    volumes:
      - ./app:/var/www/app:cached
    working_dir: /var/www/app
    ports:
      - 80:80

docker-compose up -d で起動

コンテナに入る docker exec -it コンテナ名 bash

yarn add nem-library

yarn add -D babel-cli babel-preset-env

.babelrc

{
  "presets": ["env"]
}

pakage.json に追加

 "scripts": {
   "build": "babel src -d lib"
 },

ウォレット情報取得

app配下にindex.jsを作る

import {AccountHttp, NEMLibrary, NetworkTypes, Address} from "nem-library";

NEMLibrary.bootstrap(NetworkTypes.MAIN_NET);

const address = new Address("NB3SSP-4MANHQ-RAK76S-FMMVOP-HFK6EP-NBKRYV-RU2V");

const accountHttp = new AccountHttp();
accountHttp.getFromAddress(address).subscribe(accountInfoWithMetaData => {
    console.log(accountInfoWithMetaData);
});

もっかいコンテナに入り、 yarn build

node lib/index.jsで

AccountInfoWithMetaData {
  balance:
   Balance {
     balance: 15000000,
     vestedBalance: 15000000,
     unvestedBalance: 0 },
  importance: 0,
  harvestedBlocks: 0,
  cosignatoriesCount: undefined,
  minCosignatories: undefined,
  status: 'LOCKED',
  remoteStatus: 'INACTIVE',
  cosignatoryOf: [],
  cosignatories: [] }

情報がみれた!これは簡単!

送金

//送金元の秘密鍵が入っているファイルをインポート
let tmp = require("./mydata.js")

import {AccountHttp, NEMLibrary, NetworkTypes, Account, Address, TimeWindow, XEM, PlainMessage, TransferTransaction, TransactionHttp} from "nem-library";

NEMLibrary.bootstrap(NetworkTypes.MAIN_NET);

// 送金先
const address = "NB3SSP-4MANHQ-RAK76S-FMMVOP-HFK6EP-NBKRYV-RU2V"

// 送金元
const PRIVATE_KEY = tmp.key

const amount = 0.1;
const message = "";

const transferTransaction = TransferTransaction.create(
  TimeWindow.createWithDeadline(),
  new Address(address),
  new XEM(amount),
  PlainMessage.create(message)
);

const account = Account.createWithPrivateKey(PRIVATE_KEY);

// トランザクションを署名
const signedTransaction = account.signTransaction(transferTransaction);
const transactionHttp = new TransactionHttp();

// 送金実行
transactionHttp.announceTransaction(signedTransaction)
  .subscribe(
    value => {console.log(value.message);},
    err => {console.log(err.toString());}
);

nem_2.png ちゃんと支払われている!!

今は最低0.05XEM(現在価値で0.5円程度)で送金できるのでお得ですね。 にしても簡単

THE END