0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

トークン複数ユーザ宛の一括配布バッチ機能を実装してみる

Last updated at Posted at 2023-09-03

今回は、トークン配布のためのバッチ機能を実装してみました。
アドレスと送信するトークン数が記載された一覧を用意し、バッチ処理のなかで一覧を参照し連続的にトークンを送信するというものです。

動作確認環境

今回も、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 で受信者のアドレスを確認できます。

さいごに

みんなでトークンを所持させたい場合などに利用できるかと思います。
参考までに見ていただければ幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?