EVM開発まとめ
⛓EVM互換チェーンの開発.
スマコン開発の流れ
- Solidity Program(.sol)作成.
- ソースコードをコンパイルして🔌EVMバイトコードと🔌EVM ABIを生成.
- コントラクトをネットワークにデプロイ.
- 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だから.
permit2
Uniswapが開発したtoken allowanceの代替方法.
- 2回のtxが1回で住む.
- token allowance方式のほうが広く使われている.
- 0x000000000022d473030f116ddee9f6b43ac78ba3, 全チェーン共通.
https://github.com/Uniswap/permit2
スマートコントラクト開発
📝Solidity
スマートコントラストを記述するための🔖DSL. 📝イーサリアム仮想マシン(EVM)での実行を想定している.
- 文法は📝JavaScriptに似ている.
- 拡張子はsol.
- 関数を実行するたびに📝ガス代(Gas)を支払う必要あり.
🐥Solidity Syntax
Mapping data types
- mapping
- key type
- value type
Function
- 関数のもどり値は複数なところは特徴的(returns).
Constructors
Events
SDK
Ethereum JSON RPC API Impl.
web3.js
歴史があるsdk.
ethers.js
web3.jsより後発で人気は劣るもののモダン.
🔖イーサリアムノード
イーサリアムのブロックチェーンネットワークに接続して操作をするための📝ノード.
🔖JSON-RPCを介して接続する.
🔧Geth
Geth, Go Ethereumの略.
Goで書かれた最もメジャーなnodeクライアントソフトウェア. 9割のシェアがあり, イーサリアムのノードというとほぼGethを指すが, 集中しすぎてそれでいいのかという意見もあるとか.
イーサリアムノードサービス
課金してノードをつかうやつ.
- Free
- Infura: https://www.infura.io/
- Alchemy: https://www.alchemy.com/
- QuickNode:
Solidity 開発ツール
Solidity開発環境. Developer Experience周り. 口コミはあまりSolidity周りは良い話を聞かないが…
🔧Remix IDE
Web-Basedな📝SolidityのIDE.
ローカルPCの📝VSCodeからもプラグインで接続できるようだ.
🔧Hardhat
Solidityでのスマートコントラクト開発のためのローカル開発環境およびタスクランナー.
🔧Truffle
Solidityを使ったアプリケーション開発用のデファクトスタンダードフレームワーク.
- https://trufflesuite.com/truffle/
- 🔖アプリケーションフレームワーク, DAppsフレームワーク, Railsみたいな.
Ganache
ローカルに開発用のパーソナルノードを立てるツール.
テストネットワーク
Goerli
テストネットワーク.
Topics
Soidity Hello world
- 初心者向けのHello Worldスマートコントラクト | ethereum.org
- Hello World Smart Contract
- How To Create a “Hello World” Smart Contract With Solidity | Chainlink
💡SolidityでMuitiswap
Single-Chain, 2 DEXes swapのやり方.
Insights
- 💭スマートコントラクト開発とはまさか低レベル組込みファーム開発と相性がいいんじゃないか(23/08/23)
- 💭JavaScriptわかればSolidityスマコン開発いけるっしょと思ったらいけなかった(23/08/23)
- 💭EVMのことなにも知らないバカなのにCursorでSwap実装できて人間と呼び捨てされた(25/03/31)
🔗References
イーサリアム公式
公式ドキュメントは日本語翻訳されてとても充実している. ファーストチョイス.
🐥初心者入門資料
とりあえず入門はイーサリアム公式サイトがいい. その上でのリンク.
- CryptoZombies: https://cryptozombies.io/
- 有名なSolidityを学ぶオンラインリソース.
- 【いまさら聞けない】BUILD UP - YouTube
- 🏢Skyland VenturesのYoutube. いまさら聞けないというテイストでweb3エンジニア向けなのでわかりやすい.
- Lecture 3.1 Smart Contract from Programmer Perspective - YouTube
- Lecture 3.2 Ethereum Programming Basics - YouTube
📚Books
- Mastering Ethereum
Solidty
- Solidty公式: https://github.com/ethereumbook/ethereumbook
- GitHub - sot528/smart-contract-best-practices
- 中級者向けのSolidityベストプラクティス. 少し古いが今はどうなんだろう.