ブロックチェーン・ブリッジを実装してみる

今回は、Blockchainブリッジを実装してみたいと思います。
## ブロックチェーン・ブリッジとは

ブロックチェーン・ブリッジ (Blockchain bridge) は、異なるブロックチェーンネットワーク同士をつなぎ、ユーザーにシームレスなトークン移動の体験を提供します。このテクノロジーを使用したサービスは、ここ数年で海外では多く提供されています。
例えば、Ethereum（ETH）とBinance Smart Chain（BSC）など、異なるブロックチェーンプラットフォームが存在します。これらのプラットフォーム間での資産の移動は、従来は複雑な手続きや中間業者を必要としました。しかし、ブロックチェーン・ブリッジを使用することで、ユーザーはスムーズに異なるネットワーク間でトークンを移動させることができるようになりました。

個人的にもどのように実装するのか以前から興味がありました。
ソースコードは諸先輩方々がすでに提供してくだっていましたので、ポーティングしながら学習することができました。実際にソースコードを触ってみたのでその内容を紹介したいと思います。

## 実装するもの
1\. Bridge UI
2\. Wallet ※ MetaMaskをブラウザにインストールするのみ
3\. FirstNetwork Token
4\. SecondNetwork Token
5\. emit-event監視機能 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514304/6e05196e-6880-cd2c-05d2-e53068f09050.png)

## 前提知識
* スマートコントラクトのデプロイにHardHatライブラリを使用します。
* UIは、Ionic/Angularを使用します。
* Chain（EVM）関数の操作のため、ethersを使用します。Web3は使用しません。
* その他、必要に応じて各環境でのデバッグ方法や基本的なトークンの扱いほうほうの知識が必要となります。


## ブリッジ機能を使用したトークン交換のシナリオ
利用者が保有するFIRSTトークンをSECONDトークンに変換します。
画面からブリッジ機能上で指定したFIRSTトークン数と同数のSECONDトークンを発行します。
また、発行されたSECONDトークンの数を指定して実行した場合、SECONDトークンを焼却しそのトークン数と同数を利用者にFIRSTトークンを返却する機能を実装します。
利用者が両方向のトークンの変換が自由に行える環境を製造します。

## ブリッジのシナリオで使用するChain
* FirstNetwork：Genesys network testnet
（メインのトークンであり、変換元のトークン）

* SecondNetwork：Fantom network testnet
（サブのトークンであり、変換先のトークン）

いずれもEVM互換のためチェーンコードの流用が容易に行えます。

## ブリッジを実現するための主要機能概要
実装する各資材をそれぞれ説明します。

### Bridge UI
機能は非常にシンプルです。
FIRSTトークンをブリッジウォレットに送信する機能およびSECONDトークンをブリッジウォレットに送信する機能を実装します。
画面UIのフレームワークに、Ionic/Angularを使用しました。
画面イメージは以下：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514304/06beeb53-9a7a-b62d-a507-cfcb0469f367.png)
※ メインのトークン(FIRST)からサブのトークン（SECOND）に変換する画面

### Wallet
こちらは、今回はMetaMastを使用します。
ブラウザにMetaMaskをインストールして作業は完了です。
多くの方々がMetaMaskのインストール方法を紹介してくださっていますので、インストール手順等については割愛させていただきます。

### FirstNetwork Token
FirstNetwork、FIRST、および初期供給量を指定しGenesys network testnetにデプロイします。
シンプルな、ERC20ベースのトークンを発行します。
こちらをメインのトークンとします。

### SecondNetwork Token
SecondNetwork、SECOND、および初期供給量を指定しFantom network testnetにデプロイします。
ERC20ベースのチェーンコードであり、トークンの発行、焼却（Burn）機能を提供します。
こちらがサブのトークンです。

### emit-event監視機能
利用者よりブリッジ機能を実行してブリッジアドレスに送信後、コントラクトのイベントをハンドリングし、ネットワーク間のトークンの制御をする機能を実装します。
主な機能は、トークン生成(SECOND Token)、焼却(SECOND Token)、Tokenの転送(FIRST Token)の指示を送信します。

## ソースコード
ソースコードは、こちらに公開していますので、参考までに参照していただければと思います。

https://github.com/qiita-mobileapps/blockchain-bridge-app-example

## ブリッジの動作概要
1\. メインのFIRSTからSECONDトークンに変換する処理の流れ
1000 FIRSTトークンを1000 SECONDトークンに変換する処理フローです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514304/7d72e8e7-4150-66d5-5ce8-824dc44126df.png)

2\. サブのSECONDからFIRSTトークンに変換する処理の流れ
1000 SECONDトークンを1000 FIRSTトークンに戻す処理フローです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514304/a4f745d8-90d2-8325-0516-4494edb800be.png)

## 残課題
* ブリッジウォレットのイベント監視時、後続の処理でエラーになった場合のリカバリ処理の実装
* Token転送時の各種チェックロジックの実装
* リクエストが集中した場合のイベント管理方法

## 補足事項
### Genesys network
Genesysは、ガス代が非常に安価で、デプロイやトークンの転送などすべてにおいて少ないトークンで実行することができます。テストとしてデプロイ、実行を繰り返す場合に必要とするトークンのコストが非常に低い為、今回テスト用のChainとして選択しました。

### 暗号資産取り扱いと日本国内における法律
暗号資産（トークンやコイン）を取り扱う場合、日本国内においては法律を注視する必要があります。
今回紹介した内容は、プライベートネットワークでの利用やTestnetでの動作確認までにとどめておいたほうが無難だと考えています。

## まとめ
ブロックチェーン・ブリッジ機能を探求することにより、FIRSTトークンからSECONDトークンへの変換をシームレスに行える方法を学ぶ貴重な体験でした。このダイナミックな機能は、これらのトークンを双方向に変換するユニークな能力を提供しています。そして、この全体プロセスをユーザーフレンドリーなウェブアプリケーションを通じて、どんなブラウザからでも処理できるようになっている点が印象的です。

ブリッジ機能と関わるうちに、異なるブロックチェーンエコシステムをつなげる重要性に再度気付きました。トークンを移動させるだけでなく、異なるネットワーク間でのつながりを確立することで、アクセシビリティの新たな可能性を開くことができると実感しました。

ブロックチェーン・ブリッジの潜在的な影響は、暗号通貨の世界に留まらないと考えていますが、これは、ブロックチェーンプロジェクトの相互運用性を向上させる可能性を秘めており、よりつながりのある流動的なデジタル環境を創り出すことができるのではと思いました。

今回は、ブロックチェーン・ブリッジ機能についてシンプルな機能を紹介しました。
次回は、DAO観点のスマコン、機能を精査してみたいと思います。