Cryptocurrency Research Lab.

Cryptocurrency関連技術についての調査・研究

【Binance Chain API】⑦ 送金

Binance Chain上であるアドレス(送信元)から別のアドレス(送信先)へ暗号資産を送る方法について紹介します。

暗号資産を他のアドレスに送ることができるということは、決済のような形で何らかの労働・商品などの対価を暗号資産で渡すといったような使い方もできるかと思います。

動作確認を行うにあたって、誤ったアドレスに送信してしまったりすると資産を失ってしまう恐れがありますので、まずは失ってもいいくらいの少額で、自分のウォレットから別の自分のウォレットへの転送を試してみるとよいでしょう。

プログラム例は、Binance Chainの公式ドキュメントを参考に私個人が試行した内容ですが、今後API仕様が変わったりして正しく動かない可能性がないとも言えません。あくまでも自己責任でお願いします。

プログラム例

以下は送信元アドレスから送信先アドレスへ0.1BNBを送るサンプルです。送信の際には、送信元のプライベートキーが必要となります。プライベートキーは自分でウォレットをつくっていればその値は分かっているかと思います。もしくは、過去記事の『Binance Chain API④ KeyStoreファイルの読み込み』を参考にして、KeyStoreファイルを読み込んでパスワードを指定することにより取得が可能です。

送信時には別途手数料がかかりますのでご注意ください。(2019年5月2日時点で0.000625‬ BNB)

送信先アドレスが個人のウォレットではなく、取引所の入金用アドレスなど複数ユーザが使用するアドレスの場合にはmemoに正しい値を指定しないと相手にうまく届かない場合がありますのでくれぐれもご注意ください。

const BnbApiClient = require('@binance-chain/javascript-sdk');
const axios = require('axios');
const api = 'https://dex.binance.org/'
const bnbClient = new BnbApiClient(api);
bnbClient.chooseNetwork('mainnet');
const httpClient = axios.create({ baseURL: api});

const addressFrom = '<送信元アドレス(bnb~>';
const privateKey = '<送信元プライベートキー>'
const addressTo = '<送信先アドレス(bnb~>';

let asset  = 'BNB';
let amount = 0.1;
let memo   = '<メモ>';

(async ()=>{
  // シーケンス番号取得
  let sequenceURL = `${api}api/v1/account/${addressFrom}/sequence`;
  let response = await httpClient.get(sequenceURL);
  let sequence = response.data.sequence || 0;

  // 送信準備
  bnbClient.setPrivateKey(privateKey);
  response = await bnbClient.initChain();

  // 送信処理
  let result = await bnbClient.transfer(addressFrom, addressTo, amount, asset, memo, sequence);
  if (result.status === 200) {
    console.log(result);
  } else {
    throw result;
  }
})();
実行結果

上記を実行すると、以下のような結果が得られました。それぞれの資産状況を確認してみると、送信元アドレス側から 0.100625 BNBが減り、送信先アドレス側は0.1 BNBが増えていることが分かりました。

{
  "result": [{
    "hash": "<トランザクションハッシュ値>",
    "log": "Msg 0: ",
    "ok": true
    }
  ],
  "status": 200
}

参考ページ

github.com