ブロックチェーン開発環境のあれこれ調べてみた

<h1>はじめに</h1>
最近ブロックチェーン開発に携わることとなり、マーケットプレイスや開発環境などについて比較・調査したことを備忘録として記載します。概要的な部分はある程度割愛してます。（※2022年6月時点）


<h3>マーケットプレイスの比較</h3>
マーケットプレイスとは、NFTを購入したり、ユーザー同士でNFTを売買することができるプラットフォームのこと。
<table>
<thead>
  <tr>
    <th>名称</th>
    <th>取扱コンテンツ</th>
    <th>決済可能な仮想通貨</th>
    <th>手数料</th>
    <th>対応ウォレット</th>
    <th>対応ブロックチェーンネットワーク</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>LINE NFT</td>
    <td>ゲーム、エンターテイメントなど</td>
    <td>LINK</td>
    <td>ガス代無料</td>
    <td>LINE BITMAX Wallet</td>
    <td>LINE Blockchain</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Coincheck NFT</td>
    <td>ゲームアセット、トレーディングカードなど</td>
    <td>Ethereum、Bitcoinなど</td>
    <td>販売手数料：10％、出庫手数料：0.01〜0.16ETH</td>
    <td>MetaMask</td>
    <td>Ethereum</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Adam by GMO</td>
    <td>デジタルアートが多い</td>
    <td>Ethereum</td>
    <td>販売手数料：5％</td>
    <td>MetaMask</td>
    <td>Ethereum</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>OpenSea</td>
    <td>デジタルアート、デジタルミュージックなど</td>
    <td>Ethereum、Polygon、Solana、Klaytn</td>
    <td>販売手数料：2.5％</td>
    <td>MetaMask、PhantomWallet</td>
    <td>Ethereum、Polygon、Solana、Klaytn</td>
  </tr>
</tbody>
</table>

<h3>Openseaの主要ブロックチェーンネットワークの比較</h3>
Openseaのネットワーク比較をしていく。ここでいうネットワークとは、簡単に言えばアプリが動く場所。分散型のアプリケーション(DApps) やスマートコントラクトを動かすためのプラットフォーム。
<table>
<thead>
  <tr>
    <th>名称（通貨）</th>
    <th>トランザクション処理数/秒</th>
    <th>トランザクション手数料</th>
    <th>ブロック生成速度</th>
    <th>メリット</th>
    <th>デメリット</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>Ethereum（eth）</td>
    <td>13〜15</td>
    <td>10〜20ドル</td>
    <td>300秒</td>
    <td>取引量や人口の多さ。ネット上での情報量の多さ</td>
    <td>後続のネットワークと比較すると、現状はコスパが悪い（今後改善していく?）</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Solana（sol）</td>
    <td>約50,000</td>
    <td>10〜20ドル</td>
    <td>0.00005ドル</td>
    <td>安価なガス代や圧倒的な処理速度</td>
    <td>2022年4月から導入されたため、情報が少ない</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Polygon（matic）</td>
    <td>約7,000</td>
    <td>調査中</td>
    <td>調査中</td>
    <td>Solanaに次ぐガス代の安さや処理速度の速さ</td>
    <td>Ethereumと比べて使用人口が少ない。また、少額取引が多い</td>
  </tr>
</tbody>
</table>

<h3>スマートコントラクトの開発（指向）言語の比較</h3>
スマートコントラクトとは、あらかじめ設定されたルールに従って、ブロックチェーン上の取引、もしくはブロックチェーン外から取り込まれた情報をトリガーにして実行されるプログラム。
<table>
<thead>
  <tr>
    <th>名称</th>
    <th>特徴</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>Solidity</td>
    <td>CやJavaScript の文法に似た言語。現在は最もメジャーな言語で、ユーザ数、Webナレッジ共に豊富に存在する。</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Vyper</td>
    <td>Pythonライクな言語。同じPythonライクなSerpentに脆弱性が発見されたため、Pythonライクな言語ではメジャーである。</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Serpent</td>
    <td>Pythonライクな言語。2017年にSerpentコンパイラに重大な脆弱性があることが見つかり、現在はDeprecatedな位置づけである。</td>
  </tr>
</tbody>
</table>

<h3>開発フレームワークの比較</h3>
DAppを開発する上でのフレームワーク。例えるならバックエンドの開発フレームワークのようなもの。スマートコントラクトのコンパイル・テスト・マイグレーション機能を備えている。
<table>
<thead>
  <tr>
    <th>名称</th>
    <th>特徴</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>Truffle</td>
    <td>Ethereumのスタンダードなフレームワーク。ノード実行がGanache、スマートコントラクトの実行をリクエストするdrizzleを使って開発していく。</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Hardhat</td>
    <td>TypeScriptに対応している。毎回コンパイルしないのでTruffleよりは動作が軽い。
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Foundry</td>
    <td>後発だが、Rust製のため動作が早い（Hardhatよりも早い）。また、テストコードやデプロイコードもSolidityで書ける。</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Remix</td>
    <td>ethereumのチュートリアルでも出てくる。ブラウザで簡単に確認するとかチュートリアル程度ならRemixで問題ない。</td>
  </tr>
</tbody>
</table>

<h3>クライアントについて</h3>
クライアントはネットワーク上のNodeを動かすことができる。
具体的には、Etherの採掘、Etherの送金、スマート・コントラクトの生成などが可能。
ローカルでネットワークを作成するなどで役立つ。
<table>
<thead>
  <tr>
    <th>名称</th>
    <th>特徴</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>Geth（Go Ethereum）</td>
    <td>Go言語による実装。すべてのクライアント機能を完全実装している。ネット上のナレッジも豊富。</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Parity</td>
    <td>Rustによる実装。ドキュメントや情報少ない。また、コミュニティも活発ではない。</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Nethermind</td>
    <td>.NET Coreによる実装。Windows以外(Linux, MacOS)でも動作する。</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Hyperlendger Besu</td>
    <td>Javaによる実装。エンタープライズグレードの機能を実装。</td>
  </tr>
</tbody>
</table>

<h3>ノードプロバイダーについて</h3>
ノードプロバイダーを使えば、テストネットやメインネットに接続できる。ゲートウェイ的な役割を担うもの。
<table>
<thead>
  <tr>
    <th>名称</th>
    <th>特徴</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>Alchemy</td>
    <td>チーム開発に適している。クレジットカードの情報を登録しなくても、必要なすべてのサービスにアクセスできる。</td>
  </tr>
</tbody>
<tbody>
  <tr>
    <td>Infura</td>
    <td>ソロプロジェクト向き。ethereum系のチュートリアルではこちらの採用率が高い。</td>
  </tr>
</tbody>
<table>

<h1>まとめ</h1>
比較/調査して感じたことは、現状もっともネットに情報量が多くあるブロックチェーン技術の選択肢は以下であると感じました。情報量の多さを基準に開発環境を選択する際には、以下を採用するのが無難かと思います。(もちろんメリット・デメリットを考慮しつつですが)

- マーケットプレイス→Opensea
- ブロックチェーンネットワーク→Ethereum
- スマートコントラクト開発言語→solidity
- フレームワーク→Hardhat
- クライアント→Geth

移り変わりが激しいブロックチェーン界隈なので、上記の選択肢候補も容易に変わっていくと思いますが、現時点の状況をまとめてみました。今後自らDAppを開発していく中で知った追加情報なども記入していきたいと思います。

<h1>参考記事</h1>
<p>https://morioh.com/p/d8629a2f234b</p>
<p>https://www.caica.jp/media/crypto/nft-market-about/</p>
<p>https://www.sbbit.jp/article/fj/40394</p>