前回はFireFlyの環境を構築しました。
今回は、NFTスマートコントラクトをデプロイしてFireFlyとスマートコントラクトを紐づけた環境構築までを紹介します。
やること
- Binace cmart chainにNFTスマートコントラクトをデプロイします。
- Hyperledger FireFlyにデプロイしたスマートコントラクトを紐づけます。
使用する環境
- WSL2 (Ubuntu)
- Hyperledger FireFly BSC testnet スタック環境
- Remix IDE(ブラウザを使用するのでインストールは不要です)
実施手順
Binance smart chain testnet上にスマートコントラクトをデプロイするため、Testnet fausetサイトからトークンを取得します。
トークンを受け取るアドレスは、ffコマンドにより確認したアドレスとします。
Binance smart chain testnet tokenの取得
1. Binance smart chain testnet Faucetサイトを開きます。
2. FireFly環境でアドレスを確認します。
以下のコマンドを実行し、アドレスを確認します。
$ ff accounts list bsc
[
{
"address": "0x9f4e5d3a1b2c8f7e6d5a2b1c7f9e0d7a2b5f3e6a",
"privateKey": "3fc32788eea6a32a8e9ca7d7f10cb162c2112c34c0e2ae02a4ee6416a61e0b64"
}
]
addressがあなたのウォレットのアドレスです。
3. Faucetサイトに上記アドレスを指定し、Testnet BSCトークンを取得します。
https://testnet.bnbchain.org/faucet-smart サイトにアクセスします。上記アドレスをテキストボックスに入力し、0.1BNBを選択します。
選択後、指定したアドレスに0.1BNBが送付されます。
スマートコントラクトをデプロイする際にこのアドレスからガス代が差し引かれます。
Binance smart chain testnetでコントラクトのbuild
https://docs.openzeppelin.com/contracts/4.x/wizard
にアクセスします。
上記URLでスマートコントラクトのデプロイ準備をします。
画面から上記のトークン名、シンボル名を入力し、Featuresを指定します。
入力したらRemixIDEを起動します。
RemixIDEがブラウザ上で表示されます。
Compileボタンをクリックします。
コンパイルは以上です。
なお、こちらの画面はまだ使用するので画面は閉じません。
FireFlyへコントラクトの登録
1. bscスタックの起動
bscスタックがまだ起動していない場合はDockerおよびbscスタックを起動します。
bscスタックがまだ作成していない場合は、こちらの作成方法を参照ください。
WSL2(Ubuntu)を起動し以下のコマンドを実行します。
$ sudo service docker start
$ ff start bsc
Web UI for member '0': http://127.0.0.1:5000/ui
Sandbox UI for member '0': http://127.0.0.1:5109
To see logs for your stack run:
ff logs bsc
2. UIの起動
ブラウザにhttp://127.0.0.1:5109を入力ます。
画面が表示されればbscスタックが起動できています。
続いて、デプロイするためにFireFlyのSwagger UIを開きます。
3. スマートコントラクトのデプロイ
FireFlyのSwagger UI : http://127.0.0.1:5000/api#/を表示したら、デプロイ用のAPIをコールします。
画面から「/contracts/deploy」を探します。
「Try out it」をクリックします。
コントラクトの情報を入力する画面に切り替わります。
テキストエリアに以下の内容を入力し実行します。
{
"contract": "PASTE_BYTECODE_HERE",
"definition": PASTE_ABI_HERE,
"input": []
}
PASTE_BYTECODEとPASTE_ABIをRemixIDEの画面下部分からそれぞれコピーします。
PASTE_BYTECODE_HERE
60806040523480156200001157600080fd5b506040518060400160405280601481526020017f4646204e6674207072697661746520746f6b656e0000000000000000000000008152506040518060400160405280600581526020017f46464e465400000000000000000000000000000000000000000000000000000081525081600090816200008f919062000412565b508060:
:
:
20616c7265616479206d696e74656400000000600082015250565b6000612e66601c83611d31565b9150612e7182612e30565b602082019050919050565b60006020820190508181036000830152612e9581612e59565b905091905056fea2646970667358221220437b21eeab391ce126b3ae3b17805c178614493d3cfb90ce13de04ea51afed5a64736f6c63430008120033
PASTE_ABI_HERE
[
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
:
:
:
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
入力できたら、テキストエリア下にある「Execute」をクリックします。
Curl部分下にレスポンスデータが表示されます。
さらに画面を下にスクロールします。
Binace smart chain上にデプロイされたスマートコントラクトのアドレスが確認できます。
「200 Response body」エリア内において、テキストをさらに下にスクロールします。
「output:contractLocation」下のaddressがスマートコントラクトアドレスです。
デプロイは完了です。
BSC Scan上でデプロイ状態の確認
Hyperledger FireFly経由でコントラクトをデプロイしました。
実際にBinace smart chain上にデプロイされたか確認します。
上記、「output:contractLocation」下のaddressをコピーします。
BSC Scan画面をブラウザから開きます。
https://testnet.bscscan.com/address/output:contractLocation下のaddressを指定します。
Transaction欄が表示されることが確認できます。
FireFlyインターフェース形式へ変換
この状態ではFireFly経由でスマートコントラクト関数を呼び出すことができません。
続いて、FireFly経由でスマートコントラクト関数を呼び出せるように関数情報(ABI)をFireFly形式(FFI)に変換します。
swagger画面から「/contracts/interfaces/generate」を探します。
テキストエリアに以下の内容を入力します。
「PASTE_ABI_HERE」に上記ABIと同じ内容を入力します。
{
"input": {
"abi": PASTE_ABI_HERE
}
}
入力したら、「Execute」ボタンをクリックします。
Executeが成功するとレスポンス(長文)があります。
関数情報の変換は以上です。
レスポンスした部分は表示したままにします。
後続の処理で使用します。
スマートコントラクトのインターフェース情報の保存
続いて、上記のレスポンスをインターフェース情報としてFireFlyに登録します。
swagger画面から「/contracts/interfaces」を探します。
テキストエリアに/contracts/interfaces/generateで実行したレスポンスを全てペーストします。
以下のnameとdescriptionに情報を入力します。
{
"namespace": "default",
"name": "FFNFT",
"description": "",
"version": "0.1.0",
"methods": [
{
"name": "getApproved",
"pathname": "",
"description": "",
"params": [
{
登録が完了するとidが返却されます。後続の作業で使用するのでメモしておきます。
FireFlyプールへの登録
スマートコントラクト関連の登録手順は、ここが最後です。
ここまでで、BSCチェーン上へのスマートコントラクトを登録し、FireFlyにコントラクトの関数情報およびインターフェース情報を登録しました。
続いて、FireFly上でデプロイしたスマートコントラクトの動作(トランザクション)を追跡できるようにプールを登録します。
swagger画面から「/tokens/pools」を探します。
登録情報の概要は以下の内容です。
{
"config": {
"address": "上記のスマートコントラクトアドレス",
"blockNumber": "デプロイ時のブロックナンバー"
},
"interface": {
"id": "上記手順で返却されたアドレス"
},
"name": "トークン名",
"symbol": "トークンシンボル",
"type": "nonfungible"
}
デプロイ時のブロックナンバーは、BSC Scanで表示した際のブロック番号を記載します。
各項目に全て記載したらExecuteボタンをクリックします。
Executeすると、以下のレスポンスが返却されます。
NFT ChainCodeのデプロイ手順は以上です。
登録内容の確認
ここまで、ChainCodeのデプロイおよびスマートコントラクトの登録をしました。
これらの登録内容をFireFly UIおよびSandBox画面を使って確認します。
ブラウザからhttp://127.0.0.1:5000/uiを開きます。
ActivityのOparation画面でトークンの登録およびプール登録結果を確認することができます。
次回は
次回は、NFTとして扱う際に重要な役割を果たしているIPFSについて紹介したいと思います。