1
1

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.

Hyperledger FireFlyとNFT ChainCodeのデプロイ

Last updated at Posted at 2023-09-28

前回はFireFlyの環境を構築しました
今回は、NFTスマートコントラクトをデプロイしてFireFlyとスマートコントラクトを紐づけた環境構築までを紹介します。

やること

  • Binace cmart chainにNFTスマートコントラクトをデプロイします。
  • Hyperledger FireFlyにデプロイしたスマートコントラクトを紐づけます。

使用する環境

実施手順

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が送付されます。
スマートコントラクトをデプロイする際にこのアドレスからガス代が差し引かれます。
image.png

Binance smart chain testnetでコントラクトのbuild

https://docs.openzeppelin.com/contracts/4.x/wizard
にアクセスします。
上記URLでスマートコントラクトのデプロイ準備をします。
画面から上記のトークン名、シンボル名を入力し、Featuresを指定します。
image.png
入力したらRemixIDEを起動します。
image.png
RemixIDEがブラウザ上で表示されます。
Compileボタンをクリックします。
image.png
コンパイルは以上です。
なお、こちらの画面はまだ使用するので画面は閉じません

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を開きます。
image.png

3. スマートコントラクトのデプロイ

FireFlyのSwagger UI : http://127.0.0.1:5000/api#/を表示したら、デプロイ用のAPIをコールします。
画面から「/contracts/deploy」を探します。
「Try out it」をクリックします。
image.png
コントラクトの情報を入力する画面に切り替わります。
テキストエリアに以下の内容を入力し実行します。
image.png

{
  "contract": "PASTE_BYTECODE_HERE",
  "definition": PASTE_ABI_HERE,
  "input": []
}

PASTE_BYTECODEとPASTE_ABIをRemixIDEの画面下部分からそれぞれコピーします。
image.png

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」をクリックします。
image.png

Curl部分下にレスポンスデータが表示されます。
image.png
さらに画面を下にスクロールします。
Binace smart chain上にデプロイされたスマートコントラクトのアドレスが確認できます。
「200 Response body」エリア内において、テキストをさらに下にスクロールします。
image.png
「output:contractLocation」下のaddressがスマートコントラクトアドレスです。

デプロイは完了です。

BSC Scan上でデプロイ状態の確認

Hyperledger FireFly経由でコントラクトをデプロイしました。
実際にBinace smart chain上にデプロイされたか確認します。
上記、「output:contractLocation」下のaddressをコピーします。
BSC Scan画面をブラウザから開きます。
https://testnet.bscscan.com/address/output:contractLocation下のaddressを指定します。
Transaction欄が表示されることが確認できます。
image.png

FireFlyインターフェース形式へ変換

この状態ではFireFly経由でスマートコントラクト関数を呼び出すことができません。
続いて、FireFly経由でスマートコントラクト関数を呼び出せるように関数情報(ABI)をFireFly形式(FFI)に変換します。
swagger画面から「/contracts/interfaces/generate」を探します。
テキストエリアに以下の内容を入力します。
「PASTE_ABI_HERE」に上記ABIと同じ内容を入力します。

{
  "input": {
    "abi": PASTE_ABI_HERE
  }
}

入力したら、「Execute」ボタンをクリックします。
image.png
Executeが成功するとレスポンス(長文)があります。
関数情報の変換は以上です。
レスポンスした部分は表示したままにします。
image.png
後続の処理で使用します。

スマートコントラクトのインターフェース情報の保存

続いて、上記のレスポンスをインターフェース情報としてFireFlyに登録します。
swagger画面から「/contracts/interfaces」を探します。
テキストエリアに/contracts/interfaces/generateで実行したレスポンスを全てペーストします。
以下のnameとdescriptionに情報を入力します。

{
  "namespace": "default",
  "name": "FFNFT",
  "description": "",
  "version": "0.1.0",
  "methods": [
    {
      "name": "getApproved",
      "pathname": "",
      "description": "",
      "params": [
        {

image.png
登録が完了するとidが返却されます。後続の作業で使用するのでメモしておきます。
image.png

FireFlyプールへの登録

スマートコントラクト関連の登録手順は、ここが最後です。
ここまでで、BSCチェーン上へのスマートコントラクトを登録し、FireFlyにコントラクトの関数情報およびインターフェース情報を登録しました。
続いて、FireFly上でデプロイしたスマートコントラクトの動作(トランザクション)を追跡できるようにプールを登録します。
swagger画面から「/tokens/pools」を探します。
登録情報の概要は以下の内容です。

{
  "config": {
    "address": "上記のスマートコントラクトアドレス",
    "blockNumber": "デプロイ時のブロックナンバー"
  },
  "interface": {
    "id": "上記手順で返却されたアドレス"
  },
  "name": "トークン名",
  "symbol": "トークンシンボル",
  "type": "nonfungible"
}

デプロイ時のブロックナンバーは、BSC Scanで表示した際のブロック番号を記載します。
image.png
各項目に全て記載したらExecuteボタンをクリックします。
image.png
Executeすると、以下のレスポンスが返却されます。
image.png
NFT ChainCodeのデプロイ手順は以上です。

登録内容の確認

ここまで、ChainCodeのデプロイおよびスマートコントラクトの登録をしました。
これらの登録内容をFireFly UIおよびSandBox画面を使って確認します。
ブラウザからhttp://127.0.0.1:5000/uiを開きます。
ActivityのOparation画面でトークンの登録およびプール登録結果を確認することができます。
image.png

次回は

次回は、NFTとして扱う際に重要な役割を果たしているIPFSについて紹介したいと思います。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?