Solidity 0.8.25での変更点まとめ
はじめに
初めまして。
CryptoGamesというブロックチェーンゲーム企業でエンジニアをしている cardene(かるでね) です!
スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。
代表的なゲームはクリプトスペルズというブロックチェーンゲームです。
以下でも情報発信しているので、興味ある記事があればぜひ読んでみてください!
今回はSolidityのバージョン0.8.25での変更点をまとめていきます。
以下の公式のリリース記事をもとにまとめていきます。
変更点
Solidityのバージョン0.8.25では以下の項目が変更されました。
- コンパイラのデフォルトがcancunに変更。
-
mcopy
オペコードのコードジェネレーター対応。 -
tstore
の警告回数の変更。
コンパイラのデフォルトがcancunに変更
EthereumのDencunアップグレードにより、新しいEVMバージョンであるCancunが導入されました。
これにより、Solidityコンパイラのデフォルトのバージョンが、新しいバージョンであるCancunをベースにコード生成するように変更されました。
mcopy
オペコードのコードジェネレーター対応
Solidityのバージョン0.8.24にて、mcopy
というオペコードが追加されました。
このオペコードはYulやインラインラインで使用できるオペコードです。
バージョン0.8.25では、コードジェネレーターがmload
とmstore
のループをmcopy
置き換えるようになりました。
これにより、効率的なメモリーコピーが可能になります。
活用される場面としては、abi.encode()
やabi.decode()
があげられます。
abi.encode()
はデータ型をバイト配列に変換し、abi.decode()
はバイト配列から元のデータ型に戻す処理を実行します。
この変換の時に大量のデータがメモリにコピーされるため、mcopy
を使用することで効率よく実行できます。
一方、ガスコストを削減はしていますが、そこまでの効果はないようです。
理由としては、コンパイラ自体がメモリ内での不要なデータのコピーを避けるように設計されているためです。
また、メモリ以外のcalldata
やストレージ、returndata
などには、このmcopy
を使用することはできません。
tstore
の警告回数の変更
Transient Storageという一時的なデータ保存用ストレージがあります。
これはトランザクションが終了するまでデータを保持するストレージで、tstore
やtload
というオペコードを使用してアクセスします。
ただ、Transient Storageの誤った使用は予期しない動作やバグの原因になります。
そのため、Solidityバージョン0.8.24から、tstore
オペコードが使用されていると常に警告が表示されるようになっていました。
しかし、同じ警告が繰り返し表示されるのは煩わしいため、コンパイルごとに1回だけ表示されるように変更されました。
その他の変更
その他の細かい修正については以下の記事を参考にしてください。
最後に
今回はSolidityのバージョン0.8.25の変更点をまとめました。
以下でも情報発信しているので、興味ある記事があればぜひ読んでみてください!
Discussion