データ流通を支援する分散型需給マッチングシステム のPoC。ブロックチェーンを用いたIoT機器のデータ流通を追体験できる。
データ流通までのワークフロー
sequenceDiagram
autonumber
participant Mediator(IoTOwner)
actor iotOwner as IoTオーナー
participant Merchandise
participant IoTMarketplace as マーケットプレイス
participant Frontend as UIアプリケーション
actor buyer as データ購入者
participant Mediator(buyer)
Mediator(IoTOwner)->>IoTMarketplace: Deploy
Note right of Mediator(IoTOwner): Hash値などメタデータ
IoTMarketplace->>Merchandise: コンストラクタ
buyer->>Frontend: データ購入リクエスト
Note left of buyer: ウォレットによる署名
Frontend->>Merchandise: purchase
Mediator(buyer)->>Mediator(IoTOwner): 実データの要求
Mediator(buyer)->>Mediator(buyer):Hash()
Mediator(buyer)->>Merchandise: verify()
Mediator(IoTOwner)->>Merchandise: withdraw()
- Docker
- VSCode (Extensions:Docker+DevContainers)
git clone --recursive https://github.com/ertlnagoya/Blockchain_IoT_Marketplace.git
$ cd iot-market
$ code .
VSCodeを開いたら、> DevContainer: Rebuild and Reopen in Container
を選択してコンテナに入る。
続いて、以下のコマンドを実行
$ npx hardhat node
これによって、ローカルネットワークが起動します。
別のターミナルを開いて、以下のコマンドを実行
$ npx hardhat run scripts/deployMerchandiseWithIoTMarket.ts --network localhost
これによってローカルネットワークに、IoT Marketといくつかのサンプルデータがデプロイされます。
ブラウザの拡張機能であるMetamaskをインストールしてください。 以下のサイトを参考にローカルネットワークのアカウント0~3をMetamaskに追加してください
参考:Ethereumのローカルノードを立ち上げて、MetaMaskも使ってみる (hardhat) #Ubuntu - Qiita
$ cd iot-market-ui
$ code .
VSCodeを開いたら、> DevContainer: Rebuild and Reopen in Container
を選択してコンテナに入る。
続いて、以下のコマンドを実行
$ npm run dev
localhost:5173
にアクセスすると、フロントエンドが表示されます。
$ cd simple-storage
$ code .
VSCodeを開いたら、> DevContainer: Rebuild and Reopen in Container
を選択してコンテナに入る。
続いて、以下のコマンドを実行
$ cargo run
これによって、ストレージサーバーが起動します。ストレージサーバーはポート3000番で待ち受けます。
$ cd mediator-owner
$ code .
VSCodeを開いたら、> DevContainer: Rebuild and Reopen in Container
を選択してコンテナに入る。
続いて、以下のコマンドを実行
$ cargo run
これによって、Mediatorが起動します。 ownerは商品のデプロイとストレージサーバーへのファイルのアップロードを行います。
$ cd mediator-buyer
$ code .
以降、手順6と同様にMediator(buyer)をセットアップしてください。
localhost:5173
にアクセスし、metamaskでアカウントをbuyerのものに切り替えてください。その後、mediator(owner)の実行によってデプロイされた商品を購入してください。正しくセットアップされていれば、buyerはイベントをキャッチしてストレージサーバーからファイルをダウンロードするはずです。