見出し画像

2022年版スマートコントラクト開発者のためのツールトップ10

本記事は以下の記事を翻訳・要約したものです。ここ3, 4年ほど開発をしていなかったのですが、いつの間にか Remix や Truffle が一昔の前のツールになっていたことに進歩の速さを感じました。

1. Smart Contract 言語

3つのおすすめ言語をピックアップしてご紹介します。

Solidity
初心者はまずは Solidity から始めるべきでしょう。Solidity は最も有名で使用実績のある言語です。Ethereum, Avalanche, Moonbeam, Polygon, BSC など様々なスマートコントラクトプラットフォームで動作します。これは、Solidity で実装されている Ethereum Virtual Machine (EVM) をほとんどのブロックチェーンが採用しているためです。現在、上位10位以内の DeFi プロジェクトのうち、9つは主要なプログラミング言語としてSolidityを使用しています。
この言語は積極的にメンテナンスもされていて、サポートも手厚いです。

Vyper
Vyper は別の EVM 互換な言語で、上位10位以内の DeFi プロジェクトのうち1つのプロジェクトで使用されています。Vyper は Python をベースとした言語で、Solidity ほど多くの用途はありませんが、Python が好きな人にとっては扱いやすい言語でしょう。

Rust
Rust は EVM 系列のブロックチェーンでは使用できませんが、Solana や Terra などのチェーンにデプロイできたり、Polkadot を使用してブロックチェーンを構築することができます。 Rust はスマートコントラクト以外にも使用されるパフォーマンスの高い汎用言語です。
先ほどあげたような新進気鋭なブロックチェーンを使用したい場合は Rust は確かな選択です。

Summary / まとめ
必須:Solidity
Python が好きな人:Vyper
Terra, Solana, Polkadot などを使用したい人:Rust

2. Smart Contract に必要なツール

ここではスマートコントラクトで使用するツールを紹介します。

Chainlink
Chainlink は(ブロックチェーン界の)オラクルとして知られているものです。オフチェーンコンポーネントが含まれており、外部の世界と接続することができます。このようなスマートコントラクトをハイブリッドスマートコントラクトと呼びます。

トップスマートコントラクトプラットフォームの大部分は外部の世界と接続できるハイブリッドスマートコントラクトで、これらのオラクルをインフラの重要コンポーネントとして使用しています。DeFipulse のトップ10位のプロジェクトを見てみると、7つがハイブリッドです。

Asterik’s explained*: Uniswap has an oracle product. Yearn, and Instadapp are aggregators that work with protocols that use oracles / are hybrid. Sushiswap uses oracles for leveraged trading.

オラクルを利用すれば価格情報ランダムな数字、イベント駆動型実行などが可能です。Chainlink は言語やチェーンの種類によらずブロックチェーン開発者にとって必須の機能です。

オラクルを使用する場合は Chainlink のようなセキュアなものにしましょう。2020年から2021年にかけて起こった多くのフラッシュローン攻撃では数十億円単位での被害が出ましたが、これらは Chainlink のような適切なオラクルを利用していれば被害をもっと防げたと言われています。

Openzeppelin
Openzeppelin は Solidity のスタンダードライブラリで、NFT / ERC721, ERC20, DAO などを簡単に作成することができます。

Summary / まとめ
必須:Chainlink & Openzeppelin

3.デプロイ, テストのためのフレームワーク

元記事の筆者による評価は下記のようです。
最高:Hardhat, Brownie, DappTools
良い:Remix, Truffle, Apeworx, Foundry
普通:Waffle, sbt-ethereum, web3j, Embark, saddle
EVM 系列以外:Anchor, TerraSDK
時代遅れ;Etherlime, Openzeppelin SDK, Cobra, Parasol

上から順に見ていきましょう。

Hardhat

Hardhat Logo

Hardhat は最も使用されているフレームワークです。JavaScript & Solidity ベースの開発フレームワークで、アプリケーション開発をスピードアップさせます。ここから Hardhat のプロジェクトの雰囲気を見ることができます。

テストのスピード、TypeScript のサポート、幅広い採用、開発者の経験に焦点を当てたチームなどからなぜこのフレームワークが有名になったのかが良くわかります。

JavaScript が好きな人や、多くのサポートがある人気のフレームワークを使用したい人におすすめです。JavaScript の奇妙な点があまり好ましく無い人は、TypeScript で使用すると良いでしょう。

Brownie

ETH Brownie Logo

元記事の筆者は Brownie が1番のお気に入りだそうです。
Brownie は Python ベースの OSS で、Solidity も Vyper もサポートしていています。web3.py の上に構築されていてパイソニックなフレームワークです。パイソニスタにおすすめです。

開発を始める際にはまず最初に brownie-starter-kit を見てみることをおすすめします。その他のスターターキットのリストは Brownie Mixes repo にまとまっています。

DappTools

Dapptools Logo?

Dapptools はロゴはファンシーではないですが、Haskell で記述された魅力的なフレームワークです。もちろん、Haskell を知らない方も利用できます。

Dapptools は Python や JavaScript などと一緒に使うのではなく、どちらかというとコマンドラインでの利用にフォーカスしています。そのため、 bash や zsh などに既に慣れている方にとてもおすすめです。dapp、seth、ethsign、hevm などの一連のツールが付属しており、それぞれがスマートコントラクト開発者として行う必要のある作業のために特別に設計されたツールです。

どのようにこのツールが動くかは Dapptools starter kit を見るのが良いでしょう。Dapptools では、テストは Solidity で記述し fuzzing まで実施することが推奨されています。

Python や JavaScript など新しい言語を覚えたく無い開発者にとっては、最小のツールで構築可能なのでおすすめです。

Remix

Remix Logo

Remix はフレームワークというより統合開発環境(IDE)です。Remix はこれまで紹介したツールよりもより視覚的にわかりやすいツールで、Python, JavaScript, bash script に慣れていない方にとっても使いやすいツールです。

コントラクトをデプロイすると、それを操作するためのボタンが表示されます。Solidity のバージョンや、コンパイル、テストなども簡単に行うことができます。JavaScript を使えるようにしたりと拡張性に富んでいるため、自分の欲しい機能を追加したりすることも可能です。

ただし、Remix は上級ユーザーにはおすすめしません。Web IDE に依存するよりも、ローカル開発環境でもっと微調整の効くツールを使用した方が良いと考えているためです。

Truffle

Truffle Logo

Truffle は JavaScript ベースのフレームワークで、Ganache や Drizzle などのツールが組み込まれています。後発の様々なフレームワークに影響を与えました。2019年ごろは界隈では知らない人はいないほど有名なフレームワークでしたが、その後 Hardhat が急伸し JavaScript のフレームワークの標準となりました。Truffle は Hardhat と比べると全体的に少し劣ります。(テストの実行速度が少し遅い、たまに奇妙なバグがある、TypeScript のサポートが薄い、などです。)

現在は Truffle より Hardhat を使用することをおすすめしますが、Ganache は今でも強力なテストツールですし、2022年以降も Truffle の動向には引き続き注目しています。 

ApeWorX

ApeWorX Logo

ApeWorX は Brownie コミュニティーから枝分かれした金融に特化した Python フレームワークです。Brownie と同じセットアップ方法、文法です。
Apeworx が Brownie を抜いて標準となるのか、2つが共存するのかは今の所不明です。

Foundry

Foundry Logo

Foundry は Rust で書かれた Dapptools です。
コマンドラインでの利用を中心とし、Dapptools と似たファイル構造、コマンドを有しています。おそらくほとんど違いを感じないでしょう。

動作も早く、Solidity でのテストも行えて、 fuzzing などの強力なツールも組み込まれています。

今後 Rust でブロックチェーンアプリが書かれる機会も増えていくと考えていますが、Foundry や Dapptools はその潮流に合っているように思います、今後が楽しみなフレームワークです。

Waffle, sbt-ethereum, web3j, Embark, saddle
特別おすすめでもないため省略

ここからは非EVMのフレームワークです。

Anchor
今の所、Anchor は Solana を動かすための非EVMフレームワークとしては一番大きいと思います。Solana の開発を行いたい方には最もおすすめです。

TerraSDK
Terra は Rust ベースのスマートコントラクトブロックチェーンを開発するための SDK / フレームワークです。Terra.js と Python SDK があります。

4.Wallet

スマートコントラクトを展開するにおいて、資金を保管するためのウォレットが必要になります。様々な用途に応じて以下に紹介するウォレットを組み合わせて使用しています。

MetaMask
Metamask は スマートコントラクトを扱う全ての人が知っている(べき)ツールです。Metamask か、似たウォレット(例えば Solana であれば Phantom など)はブラウザにインストールしておくべきでしょう。

Metamask は扱いが簡単なホットウォレットです。ホットウォレットの難しいところは、ひとたび private key が流出してしまうと、ウォレット内の資産が持ち出されるリスクがあることです。それに加えて、ホットウォレットは常にインターネットに接続されているため、もしかすると運悪く誰かがあなたのコンピュータに悪意を持って侵入するかもしれません。幸なことに、これらの問題から私たちを救ってくれるツールが存在します。

Gnosis Safe
Gnosis safe はマルチシグウォレットです。マルチシグとは、トランザクションを発行するために、複数個の署名が必要とする仕組みです。マルチシグを採用していれば、もし一つのウォレットが危険に晒されたとしても大きな問題にはなりません。なぜなら、攻撃者が危害を加えるためには少なくとも privete key を保有する人のうちの半分のウォレットに、同様に侵入する必要があるためです。

これはスマートコントラクト開発者にとって非常に強力なツールです。たくさんのお金を扱う人や、資産を安全に保持したい人たちにとっては特にです。多くの DAO も資金を補完するために Gnosis safe を使用しています。また、Gnosis safe は Snapshot のような他の DAO ツールと連携することもできます。

Ledger / Trezor
Ledger and Trezor はコールドウォレットです。コールドウォレットはトランザクションを発行するのが少し面倒ですが、それ故に悪意ある外部からの攻撃にも強いです。

コールドウォレットやホットウォレット、マルチシグを組み合わせて使用することが可能ですし、おそらくそうするべきでしょう。ホットウォレットには普段使用する程度の少量の資金を保存しておき、残りの普段使用しない資金はコールドウォレットに保存しておくべきでしょう。さらに重要な資金にはマルチシグを採用するべきでしょう。マルチシグのキーの一つとしてコールドウォレットを接続することも可能です。

5. Block Explorer

Block Explorer はトランザクションの詳細を見たい人にとってとても重要なツールです。

Etherscan
Etherscan は全ての人にぜひ使い方を知って欲しいツールの一つで、多くのサービスに組み込まれています。ETH コミュニティーにおいて最もシェアの高い block explorer で、PolygonETH 2Binance Smart Chain などのプロジェクトもサポートしています。

Etherchain
Etherchain は ETH 2 用の軽量な explorer です。

Ethplorer
Ethplorer はあなたが次に使ってみたくなる explorer かもしれません。

ほとんどのブロックチェーンには複数の block explorer サービスが存在しますが、特に EVM / ETH コミュニティにはたくさんのサービスが存在します。したがって、ここでは上記の3つに着目して紹介をしました。

6. ブロックチェーンへの接続

トランザクションを発行するためには、ブロックチェーンのノードへ接続する必要があります。そのために自分のノードを立てる必要がありますが、これは非常に複雑な作業です。下記に紹介するようなサービスを使えば、自分でノードを立てずにブロックチェーンに接続することができます。全てのサービスは無料で試すことができますので、一度使ってみることをおすすめします。

Alchemy
Alchemy は ETH や全ての EVM への接続を行ってくれます。Alchemy は速く、リクエストを追跡するための見やすい UI と、膨大なレイヤー1のノードを揃えています。

Infura
Infura は最も広く使用されているアプリの一つです。IPFS のような多くの製品で使用されており、多くのツールが Infura で動作します。強固なレイヤー1サービスを探している場合はこれが最適でしょう。

Moralis
Moralis もレイヤー1の機能を持っていますが、特に素晴らしいのはフロントエンドのサービスです。(フロントエンドの詳細は次のセクションで紹介します。)

QuickNode
もし使用したいブロックチェーンが上記のサービスのサポート対象外の場合、QuickNode の出番かもしれません。接続できるノードが多く、簡単な設定だけで使用できます。

7. フロントエンドツール

フルスタックのフロントエンドを構築するために、JavaScript、HTML、CSS などの全ての標準ツールと、react、angular、svelte などのフレームワークを引き続き使用する可能性があります。これらに加えて、いくつかの素晴らしいツールがフロントエンド開発をより良いものにしてくれるでしょう。

Web3js / Ethersjs
Web3js と Ethersjs は Web3 界隈での主要な JavaScript フレームワークで、どちらもフロントエンドで非常に優れたパフォーマンスを発揮します。ウェブサイトを構築する場合は、どちらかを使用すれば十分でしょう。最近のトレンドでは Ethersjs の方が人気なようですが、どちらも非常に優れています。

Moralis
Moralis は全ての人が知っているべきツールです。フロントエンド開発を良くする強力なツールがたくさん揃っています。

オープンソースのツールキットとクラウドベースのサービスフレームワークについて、必要なものは全てここに揃っています。プロジェクトを始めるにあたってのボイラープレート(≒テンプレート)も豊富に揃っています。

UseDapp
UseDapp は Web3 を操作するための優れたプラグインを備えたもう1つのオープンソースプロジェクトです。

Drizzle
Drizzle は Truffle, MetaMask, Infura, Consensys の仲間です。スマートコントラクトと JavaScript のシンプルなラッパーを作れて、React がサポートされてます。

The Graph
The Graph はインデックス作成を実行するためのツールです。ブロックチェーン上の何らかの情報を探したい時、大量のクエリを発行しなければならないかもしれません。例えば、チェーン上にある 1000 DAI を保有しているアドレスを全て取得したい時などです。これの実行は骨の折れるほど長く、チェーン上のすべてのアドレスを調べて、balance 関数を呼び出さなければなりません。The Graph を使えば、そうする代わりに subgraph というものを作成することができます。subgraph とは、私たちに必要なクエリにインデックスを付け、ブロックチェーン全体よりもはるかに小さいデータベースに格納することです。これを利用することで、ブロックチェーンに関する特定のデータを遥かに簡単に取得することができます。

その他
その他に、正確にはツールでは無いですが、web3 アプリケーション/ dAppsを構築するためのスターターキットである create-eth-app と scaffold-eth も知っておくべきでしょう。

8. 困った時のサポート

全ての開発者は何かで詰まった時にその問題をどう解決すれば良いか知っておくべきです。

  1. エラー文を Google で検索しましょう

  2. StackOverflow や Stack Exchange ETH を確認しましょう

  3. プロジェクトの Github に isuue を立てましょう

  4. フォーラムで質問しましょう

  5. Discord で質問しましょう

上記の場所で質問をする時は、質問内容を次のようにしておくと良いでしょう。

  • 検索で見つかりやすいようにしよう: 同じ問題にぶつかった人があなたの質問を見つけられるようにしましょう

  • 問題を的確かつ他人が再現できるように説明しよう: あなた特有の問題であればあるほど、回答は得づらくなります。

StackOverflow & Stack Exchange ETH
経験則によれば次の通りです。「問題が発生し、その回答がGoogle検索結果の最初のページに表示されない場合は、StackOverflow に投稿する必要があります。」(日本語話者である我々においては、日本語で検索して見つからない場合、その次に英語での検索を試してみることをおすすめします。)

これを使えば、問題を解決する方法を得られる可能性が高いです。時々、質問内容が難しいか、誰も遭遇したことがないか、質問が埋もれてしまったかなどの理由で回答が得られないことがあり、そのような時は質問のリンクを Discord など人目に触れるところに投稿します。

ところで、StackOverflow と Stack Exchange ETH のどちらに質問を投稿するのが良いのでしょうか?実を言うとどちらでも良いです。Stack Exchange の方が少し優しい印象があり、 StackOverflow の方が検索で見つけられやすいです。この両サイトは技術的な質問をするのに適しており、学理的な質問や、個別の技術を超えたスケールの大きな問いの投げかけは Discord や Twitter で行うのが良いでしょう。

Discord
Discord はクイックなチャットツールでアイデアを議論する場として最高です。それゆえにサポートや質問が Discord で行われる場合も多くありますが、Discord 内での質問をすることはあまり適切では無いと考えています。Discord 内の質問とその回答は Google 検索にも引っ掛からずランキングによる整理も行われないためです。

Forums
Forums は StackOverflow のように検索にも引っかかりランキングによる整理もされていて素晴らしいです。特に Openzeppelin フォーラムは非常に見やすく整理されています。

9.セキュリティ分析ツール

ご存知のようにブロックチェーンにコードをデプロイする時に、ソースコードに脆弱性が含まれていないか精査することはとても重要です。一度ブロックチェーン上にデプロイされたコードは、誰でも閲覧可能で悪用される可能性があるためです。そのため、コード内の脆弱性を減らしセキュリティを強化させるツールは不可欠です。

残念なことに、このセクションで紹介するツールの全てを実際に(元記事の筆者が)使用したわけではありません。ですので詳細は他の記事をご覧ください。また、これらのツールが全てのバグを発見できるわけでは無いことをご留意ください。

Slither
Slither は静的解析ツールです。Trail of Bits チームによって開発されたツールで、簡単に使用できて多くの単純ミスを見つけてくれます。

MythX
MythX はクラウドベースのテストツールです。一部の機能は有料ですが、非常に価値のあるものです。

Mythril
Mythril はセキュリティ分析ツールです。MythX の一部がオープンソース化されたツールです。

Manticore
Manticore はもう一つの Trail of Bits ツールで、スマートコントラクトがどのように動作するかをテストするシンボリック実行ができます。もし Slither を使用していれば、こちらも使用することをおすすめします。

Echidna
Trail of Bits の次の例は Echidna です。EVM コントラクトのための fuzzing を実行できます。

Securify
Securify は特定の脆弱性を発見してくれるオープンソースツールです。

10.監視とメンテナンス

Openzeppelin's Defender と Tenderly が親しみやすくておすすめです。

最後に

多くのツールをリストアップしました。ここに載せたツールを使えば使うほど、これらがアプリケーション構築の効率をいかに高めてくれるか実感できるでしょう。

2022年は Web3 にとって重要な年になるでしょう。そしてこの記事を通して、ユニークで素晴らしい Web3 アプリの開発者であろう読者に、いくらかの有益なアイデアをお伝えできていれば幸いです。

もしこの記事の内容に誤りがコメントでご指摘ください。2022年が素晴らしい年になることを願っています!

この記事が気に入ったらサポートをしてみませんか?