EVM開発まとめ

⛓EVM互換チェーンの開発.

スマコン開発の流れ

  1. Solidity Program(.sol)作成.
  2. ソースコードをコンパイルして🔌EVMバイトコード🔌EVM ABIを生成.
  3. コントラクトをネットワークにデプロイ.
  4. web3クライアントライブラリから関数を呼び出す.

構成要素overview

  • 🔧Geth: チェーンに読み書きするためのサーバプログラム.
  • 📝Solidity: イーサリアムノード上で動くプログラム.
  • web3.js/web3.py: クライアント. 手元のPCとかからアクセスするプロクラム.
  • Truffle: アプリケーションフレームワーク.

🐥EVMスマコン開発の基礎知識

📝イーサリアム仮想マシン(EVM)

イーサリアム・バーチャルマシン(Ethereum Virtual Machine, EVM).

📝イーサリアム上で, スマートコントラクトを実行するためのソフトウェア環境.

🔖決定性(Deterministic)が特徴. どこで誰が実行しても, 同じ入力に対して同じ出力を返す.


🔌EVM ABI

  • JSONファイル.
  • 📝Solidityのコンパイラが生成する.

  • C言語のヘッダファイルのような関数呼び出しのspecがバイナリ変換されたようなもの.
  • 🔌ABI

既存Contractとやり取りするABIのjson情報はどこから取得するの?

すでにデプロイされたContractのABIは🔍EtherscanのConctract ABIの部分にあるのでコピペ.


公式ドキュメントから取得.

🔌EVMバイトコード

📝Solidityのソースコード(.sol)をコンパイラ(solc)でコンパイルして生成する, 📝EVM上で動作するバイナリプログラムのこと.

EVMバイトコードはイーサリアムネットワーク上に送信されて永続的に保存される. これをデプロイという.

📝バイトコード

Ethereum Address

case-sensitiveではない. いいかえれば大文字と小文字を区別しない.

Ethereum Testnet/Sepolia

TestnetはSepoliaと呼ばれている.

test用トークン配布サイトはFausets

📝ERC-20

📝イーサリアムブロックチェーン上で最も一般的な📝トークン規格.

Token Contract

Contract Model.

SPLのAccount Modelに相当. すべてはコントラクトで管理.

SolanaのSPLトークンでは「トークンごとにトークンアカウントを作る」のに対し、ERC-20では「1つのスマートコントラクト内にすべてのウォレットの残高を記録する」

Metadata

トークンの名前・シンボル・小数点以下の桁数などは、トークンコントラクトに定義

decimals

基本は18だが変更可能. ExploreだとContract情報のなかにある.

How to Retrieve Token Decimals on EVM, Solana, and Tron Networks

EOA

Externally Owned Account. Walletのアカウント

token allowance

Token Approvalの方法. スマートコントラクトや他のアドレスに自分のトークンを使わせるために、approve と allowance という仕組みがある.

  • approve(spender, amount): ユーザーが、特定のアドレス(spender)に対して、指定したトークン量(amount)の使用許可を与える
  • allowance(owner, spender):spender が、owner のトークンをどれだけ使えるか確認できる
  • transferFrom(owner, recipient, amount): spender が、許可された範囲内で owner のトークンを送る

  • cf. DEXでSwapしようとするときにポップアップででてくるやつ. Solanaだとそんなのないのでびっくりした. SPLはAccount Modelで ERCは Contract Modelだから.

  • How to Set a Token Allowance | 0x

permit2

Uniswapが開発したtoken allowanceの代替方法.

  • 2回のtxが1回で住む.
  • token allowance方式のほうが広く使われている.
  • 0x000000000022d473030f116ddee9f6b43ac78ba3, 全チェーン共通.

https://github.com/Uniswap/permit2

スマートコントラクト開発

📝Solidity

スマートコントラストを記述するための🔖DSL. 📝イーサリアム仮想マシン(EVM)での実行を想定している.

🐥Solidity Syntax

Mapping data types

  • mapping
    • key type
    • value type

Function

  • 関数のもどり値は複数なところは特徴的(returns).

Constructors

Events

📝副作用(Side effect)の制御.

SDK

Ethereum JSON RPC API Impl.

web3.js

歴史があるsdk.

ethers.js

web3.jsより後発で人気は劣るもののモダン.

🔖イーサリアムノード

イーサリアムのブロックチェーンネットワークに接続して操作をするための📝ノード.

🔖JSON-RPCを介して接続する.

🔧Geth

Geth, Go Ethereumの略.

Goで書かれた最もメジャーなnodeクライアントソフトウェア. 9割のシェアがあり, イーサリアムのノードというとほぼGethを指すが, 集中しすぎてそれでいいのかという意見もあるとか.

イーサリアムノードサービス

課金してノードをつかうやつ.

Solidity 開発ツール

Solidity開発環境. Developer Experience周り. 口コミはあまりSolidity周りは良い話を聞かないが…

🔧Remix IDE

Web-Basedな📝SolidityのIDE.

ローカルPCの📝VSCodeからもプラグインで接続できるようだ.

🔧Hardhat

Solidityでのスマートコントラクト開発のためのローカル開発環境およびタスクランナー.

https://hardhat.org/

🔧Truffle

Solidityを使ったアプリケーション開発用のデファクトスタンダードフレームワーク.

Ganache

ローカルに開発用のパーソナルノードを立てるツール.

テストネットワーク

Goerli

テストネットワーク.

Topics

Soidity Hello world

🔖Hello world

💡SolidityでMuitiswap

Single-Chain, 2 DEXes swapのやり方.

Insights

🔗References

イーサリアム公式

公式ドキュメントは日本語翻訳されてとても充実している. ファーストチョイス.

🐥初心者入門資料

とりあえず入門はイーサリアム公式サイトがいい. その上でのリンク.

📚Books

Solidty