今回は、トークン配布のためのバッチ機能を実装してみました。
アドレスと送信するトークン数が記載された一覧を用意し、バッチ処理のなかで一覧を参照し連続的にトークンを送信するというものです。
動作確認環境
今回も、Genesys netwrok testnetを使用します。
Genesys netwrok testnetの環境はこちら。参考として執筆時点の情報を記載します。
区分 | 内容 | 補足事項 |
---|---|---|
Fauset URL | https://faucet.genesys.network/ | テスト用のトークンはこちらから入手できます |
RPC URL | https://testnet-rpc.genesys.network/ | リクエストのエンドポイントです |
API URL | https://testnet-gchainexplorer.genesys.network/api | APIのエンドポイントです |
Block Explorer | https://testnet-gchainexplorer.genesys.network | ブロック状態が確認できます |
Network ID | 0xa5c8(42440) | |
Decimals | 18 |
用意するもの
- 配布に使用するトークンSolidityソースコード(デプロイ時にトークンを発行します)
- バッチ処理をするSolidityソースコード
- スマートコントラクトにバッチ処理をリクエストするJavaScriptソースコード
ソースコード
今回実装してみたソースコードはこちらに置いていますので、参照くださいませ。
セットアップと実行手順
1. トークンコントラクトのデプロイ
配布用のトークンコントラクトをデプロイします。
$ cd contracts/tokenContact
$ cp .env.example .env
.env ファイル内の各ディレクティブの値を変更します。
PARAM_ENDPOINT=<<RPC URLを設定してください。>>
PARAM_ENDPOINT_CHAINID=<<エンドポイントチェーンIDを設定してください。>>
PARAM_DEPLOY_PRIVATE_KEY=<<デプロイするアカウントの秘密キーを入力してください。>>
デプロイ先のチェーンのトークンを取得するには、特にテストネットにデプロイする場合に、Faucet からトークンを取得できます。
$ npm install
$ npm run deploy
Token code Address: 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
実行後、Token code Addressをメモします。
2. バッチコントラクトのデプロイ
バッチ処理を行うコントラクトをデプロイします。
$ cd contracts/batchContact
$ cp .env.example .env
.env ファイル内の各ディレクティブの値を変更します。
PARAM_ENDPOINT=<<RPC URLを設定してください。>>
PARAM_ENDPOINT_CHAINID=<<エンドポイントチェーンIDを設定してください。>>
PARAM_DEPLOY_PRIVATE_KEY=<<デプロイするアカウントの秘密キーを入力してください。>>
PARAM_DEPLOY_TOKEN_ADDRESS=<<トークンコントラクトのアドレスを入力してください。>>
次にコマンドを実行します。
$ npm install
$ npm run deploy
Batch code Address: 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
実行後、Batch code Addressをメモします。
3. トークン転送設定
cd <Navigate to the root directory of the cloned folder>
cp .env.example .env
.env ファイル内の各ディレクティブの値を変更します。
PRIVATE_KEY=<<ウォレットアカウント用の秘密キーを指定してください。>>
CONTRACT=<<バッチコードコントラクトのデプロイアドレスを指定してください。>>
RPC_NODE=<HTTPS://*****形式でRPCノードのURLを指定してください。>
BATCH_SIZE=<<1回のリクエストで送信するアドレス数を指定します。>>
GAS_PRICE=<<ガス価格の数を指定してください。>>
GAS=<<ガスの数を指定してください。>>
一括転送の実行方法
addressList.csvにアドレスと送金額をリストします。
$ vi src/addressList.csv
addressList.csv の内容は次のとおりです。
0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,2
0xYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,3
0xZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ,5
addressList.csv を保存し、編集を終了します。
一括配信する合計トークン数をBatch code Addressに転送したら、実行してみましょう。
$ node src/token-transfer.js
From Token forwarding 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Estimated Gas: 174184
Current Gas Price: 5000000000
Token forwarding started
------------------------
Allocation + transfer was successful. 174184 gas used. Spent: 870920000000000 wei
Token forwarding done.
「Token forwarding done.」と表示されたら転送は完了です。BlockExplorer で受信者のアドレスを確認できます。
さいごに
みんなでトークンを所持させたい場合などに利用できるかと思います。
参考までに見ていただければ幸いです。