Hyperledger FireFlyのWeb3ゲートウェイ機能を使ってみる

今回は、Hyperledger FireFlyのWeb3 ゲートウェイ機能を使ってNFT生成について動作確認してみましたので、その手順と結果を紹介します。
ローカル観光での構築から外部への公開までを数回に分けて記事にしたいと思います。

## やること
* Hyperledger FireFly Binance Testnet接続環境の起動 **※ 当投稿**
* BinanceTestnet上のスマートコントラクトのデプロイ **以下は次回以降に掲載**
* Hyperledger FireFly 画像データおよびIPFS登録
* NFT化したトークンの転送

## 参考サイト
Hyperledger FireFlyのエンジニアの方がワークショップを公開してくれていました。
こちらを参考にしました。

https://www.youtube.com/watch?v=OMI-xuysiwI

## 主要機能の構成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514304/11c8752f-f8e5-06a8-07a1-4e4043e368b8.png)

## 環境構築
* Linxu環境（ローカル環境WSLで検証しました。なお **Ubutnu18.04 VPS ※** にて環境構築も可能です。）
　※ **[vultr.comのVPSは月々7ドルから利用できます](https://www.vultr.com/?ref=7447858)**
* ターミナル（TeraTermなど）ソフト

## Hyperledger FireFly 主要画面
Hyperledger FireFlyを起動すると、４種類のUIのサービスが提供されます。
1. FireFly UI
Hyperledger FireFlyサービス内でのイベントなどを確認することができます。
2. SoundBox
スマートコントラクトを制御することができます。
3. IPFS api UI
ローカルIPFS環境の動作状況を確認することができます。
4. IPFS Gateway UI
IPFSに登録されたデータをCIDを指定することにより確認することができます。

## 環境構築からNFT生成までのステップ
**当記事で紹介**
* Hyperledger FireFly環境を新規でWeb3 ゲートウェイ機能を有効にしBinaceテストネットと通信できるようにします。

**ここからは次回以降に紹介**
* BinaceテストネットトークンをFausetサイトから入手します。
* Binaceテストネット上にNFT用のコントラクト（ERC-721ベース）をデプロイします。
* NFT用のコントラクトの関数などのメタ情報をFireFly側に登録します。
* NFTとして扱う画像をFireFly側に登録します。
* FireFly側に登録した画像をPublicに公開します。
* NFTテキストデータをFireFly側に登録します。
* FireFly側に登録したNFTテキストデータをPublicに公開します。
* 発行したNFTを他のユーザに転送して、ウォレットから確認します。

### 各種モジュール
Hyperledger FireFlyを動作させるにあたり、以下のツールをあらかじめ用意します。

* WSL2 （Windows環境にて動作させる場合に必要です）
* Ubuntu 18.04 (WSL2もしくは通常のUbuntu環境を使用)
* Docker(Docker Compose含む）
* OpenSSL

## 構築手順詳細
### Hyperledger FireFly CLI
FireFlyを導入する際のメインのコマンドです。
WSL2環境を起動します。
※ https://hyperledger.github.io/firefly/gettingstarted/ サイトを参照し構築します。
firefly cliを[こちらからダウンロード](https://github.com/hyperledger/firefly-cli/releases/tag/v1.2.2)し、解凍して展開します。
展開するとffファイルまでのパスを通します。ffコマンドでバージョンを表示されればHyperledger FireFly CLIのセットアップは完了です。

```shell
$ cd 
$ mkdir ff_cli
$ cd ff_cli
$ wget https://github.com/hyperledger/firefly-cli/releases/download/v1.2.2/firefly-cli_1.2.2_Linux_x86_64.tar.gz
$ tar xzvf firefly-cli_1.2.2_Linux_x86_64.tar.gz
$ echo 'export PATH=<set your current path>:$PATH' >> ~/.bashrc
$ source ~/.bashrc
$ ff version
 {
  "Version": "1.2.2",
  "Commit": "082945514f3bdfaffd5d01c222a817330b7372c1",
  "Date": "2023-08-18T13:26:09Z",
  "License": "Apache-2.0"
 }
```

### Binance スマートチェーン テストネット接続設定
FireFlyのBinance接続環境のスタックを構築します。
evmconnect.ymlファイルに定義情報を記載し、ffコマンドにBinanceテストネットのチェーン情報およびevmconnect.ymlを指定します。
なお、今回は最終的にNFTを発行するため、IPFSの設定をこのタイミングで有効にします。

```shell
$ cd
$ mkdir param
$ cd param
$ vi evmconnect.yml
※  evmconnect.ymlに以下の内容を記載し保存します
```
evmconnect.ymlの内容
```
confirmations:
  required: 3
policyengine.simple:
  fixedGasPrice: null
  gasOracle:
    mode: connector
```
記載したら以下のコマンドを実行します。
正常に終了するとテストネット接続設定の完了です。
```
$ ff init ethereum bsc 1 --multiparty=false -n remote-rpc --remote-node-url  https://data-seed-prebsc-1-s3.binance.org:8545  --chain-id 97 --ipfs-mode public --connector-config evmconnect.yml

```
なお、ffコマンドにより定義情報が~/.firedly下に展開されます。
ここで展開された情報は、FireflyのDockerを起動時に各ファイルが読み込まれます。
ffコマンドによりbsc起動情報が登録されました。以下のコマンドによりbscが存在することを確認できます。
```shell
$ ff list
FireFly Stacks:
bsc
```

### Fireflyサービスの起動
initコマンドを実行後、Fireflyサービスを起動します。
```shell
$ sudo service docker start
 * Starting Docker: docker  
$ ff start bsc
done

Web UI for member '0': http://127.0.0.1:15000/ui
Sandbox UI for member '0': http://127.0.0.1:15109

To see logs for your stack run:

ff logs bsc
```
ffコマンドが完了すると上記内容が表示されます。
ブラウザを起動しそれぞれのURLでWebページが表示されることを確認します。

* Web UI 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514304/edce86ae-a956-480f-6522-ed116cce9962.png)

* Sandbox UI
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514304/291be0fa-bfff-e179-5c6c-ce4333bd7e75.png)

## 次回は
NFTを発行までの手順を紹介したいと思います。