Solidity 0.8.24での変更点まとめ
はじめに
初めまして。
CryptoGamesというブロックチェーンゲーム企業でエンジニアをしている cardene(かるでね) です!
スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。
代表的なゲームはクリプトスペルズというブロックチェーンゲームです。
以下でも情報発信しているので、興味ある記事があればぜひ読んでみてください!
今回はSolidityのバージョン0.8.24での変更点をまとめていきます。
以下の公式のリリース記事をもとにまとめていきます。
変更点
Solidityのバージョン0.8.24では以下の項目が変更されました。
- Cancunネットワークアップグレードサポート。
- Apple Siliconのサポート。
Cancunネットワークアップグレードサポート
EthereumのCancunアップグレードにより、以下のEIPをサポートするようになりました。
-
EIP1153
: 一時的ストレージオペコード -
EIP4788
: EVMのビーコンブロックルート -
EIP4844
: シャードBLOBトランザクション -
EIP7516
:BLOBBASEFEE
オペコード -
EIP5656
:MCOY
メモリーコピーオペコード -
EIP6780
:SELFDESTRUCT
の機能削減
EIP1153
: 一時的ストレージオペコード
Transient Storageというのは、EVMに新たに追加されたデータストレージの一種です。
通常のストレージと同様にkey-value形式でデータを保存していますが、一時的にしかデータを保存せず、トランザクションの終了後に中身は空になります。
Transient Storageへのデータのアクセスは100ガスかかります。
SolidityでTransient Storageを使用するために、以下の2つのアセンブリ関数が導入されました。
-
tstore
- Transient Storageにデータを保存する。
-
tload
- Transient Storageからデータを読み取る。
EIP4788
: EVMのビーコンブロックルート
Ethereum上のアプリケーションが、信頼性の高い方法でEthereum上のデータを取得できる方法が提案されています。
各エグゼキューションブロック(トランザクション処理を行うブロック)に親(1つ前のブロック)ビーコンブロックのルート(ハッシュ値)が含まれるようになります。
これにより、より信頼性高くコントラクトからデータを取得することが可能になります。
これにより、例えば、現状限られた信頼できるオラクルノードから情報を取得していまが、EIP4788の導入により不要になります。
また、コントラクトが、Ethereumのメインネット上で直接最新データにアクセスできるようになります。
LidoやRocket Poolなどのリキッドステーキングプロトコルは、複数ユーザーのETHを集めてステーキングでき、EIP4788により、オラクルに依存せずに報酬をユーザーに配分できます。:
また、EigenlayerなどのEthereumのネットワークセキュリティを他のサービスにも適用するリステーキングアプリケーションでも、EIP4788はセキュリティと効率性を向上させます。
EIP4844
: シャードBLOBトランザクション
将来的に実装されるデータシャーディングの実装に向けて、新しいトランザクション形式であるblobが導入されました。
このアップデートにより、ユーザーは大量のデータを安価に使用することができるようになります。
blobはコントラクトから直接アクセスすることはできません。
そのため、blobhash
という命令が追加され、blobハッシュデータにアクセスできるようになりました。
また、blobでは新しいガス価格計算メカニズムが導入されています。
blobのbase feeには、EIP7516で提案されているblobbasefee
という命令を使用してアクセスすることができます。
EIP5656
: MCOY
メモリーコピーオペコード
EVMでメモリ領域間のデータを効率的にコピーするためのmcopy
というオペコードを追加する提案です。
これまで、EVMにはメモリ領域間でデータを直接コピーする命令がなく、mload
とmstore
の2つの命令のループを使用していました。
提案されている新しいオペコードであるmcopy
はYulやインラインアセンブリで使用することができ、先ほどのmload
とmstore
の2つの命令を使用せずにデータをメモリ内にコピーすることができます。
ただ、コンパイル時にコードジェネレーターが生成するコピー処理にはまだ組み込まれていないため、将来的にガスコスト削減などの観点から組み込まれることが予定されています。
EIP6780
: SELFDESTRUCT
の機能削減
その名の通り、コントラクトが自身を破壊するSELFDESTRUCT
というオペコードの機能を大幅に制限する提案です。
SELFDESTRUCT
が実行されると、コントラクト内のETHを指定されたアドレスに送金し、コントラクトのストレージとコードを削除します。
EIP6780導入後は以下のような機能に制限されます。
- コントラクト内のETHを指定されたアドレスに送金。
- コントラクトのストレージとコードを削除しない。
- ただし、コントラクトがデプロイされたトランザクション内で
SELFDESTRUCT
が実行された時のみ、コントラクトのストレージとコードを削除。
SELFDESTRUCT
命令はEIP6049によりすでに非推奨になっていて、コンパイラはSELFDESTRUCT
を使用していると警告を出すようになっていました。
Apple Siliconのサポート
これまでのIntel専用のmacOSバイナリ(solc-macos)を、ARMベースのMac(Apple Silicon)でも動作するユニバーサルバイナリに置き換えます。
これは、SolidityコンパイラがApple Siliconアーキテクチャでネイティブに動作するようにするためです。
これにより、ARMベースのMac(M1やM2チップを搭載したMac)で、Solidityコンパイラをネイティブに実行でき、コンパイラのパフォーマンスが向上して簡単に使用できるようになります。
また、もちろんIntelベースのMacでも同じバイナリを使用できます。
その他の変更
その他の細かい修正については以下の記事を参考にしてください。
最後に
今回はSolidityのバージョン0.8.24の変更点をまとめました。
以下でも情報発信しているので、興味ある記事があればぜひ読んでみてください!
Discussion