⛏️

Solidity 0.8.25での変更点まとめ

2024/06/24に公開

はじめに

初めまして。
CryptoGamesというブロックチェーンゲーム企業でエンジニアをしている cardene(かるでね) です!
スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。

https://cryptogames.co.jp/

代表的なゲームはクリプトスペルズというブロックチェーンゲームです。

https://cryptospells.jp/

以下でも情報発信しているので、興味ある記事があればぜひ読んでみてください!

https://twitter.com/cardene777

https://chaldene.net/

https://qiita.com/cardene

https://cardene.substack.com/

https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4

今回はSolidityのバージョン0.8.25での変更点をまとめていきます。

以下の公式のリリース記事をもとにまとめていきます。

https://soliditylang.org/blog/2024/03/14/solidity-0.8.25-release-announcement/

変更点

Solidityのバージョン0.8.25では以下の項目が変更されました。

  • コンパイラのデフォルトがcancunに変更。
  • mcopyオペコードのコードジェネレーター対応。
  • tstoreの警告回数の変更。

コンパイラのデフォルトがcancunに変更

EthereumのDencunアップグレードにより、新しいEVMバージョンであるCancunが導入されました。
これにより、Solidityコンパイラのデフォルトのバージョンが、新しいバージョンであるCancunをベースにコード生成するように変更されました。

mcopyオペコードのコードジェネレーター対応

Solidityのバージョン0.8.24にて、mcopyというオペコードが追加されました。
このオペコードはYulやインラインラインで使用できるオペコードです。

https://zenn.dev/heku/books/c28469224e315f/viewer/bce7f7

バージョン0.8.25では、コードジェネレーターがmloadmstoreのループをmcopy置き換えるようになりました。
これにより、効率的なメモリーコピーが可能になります。

活用される場面としては、abi.encode()abi.decode()があげられます。
abi.encode()はデータ型をバイト配列に変換し、abi.decode()はバイト配列から元のデータ型に戻す処理を実行します。
この変換の時に大量のデータがメモリにコピーされるため、mcopyを使用することで効率よく実行できます。

一方、ガスコストを削減はしていますが、そこまでの効果はないようです。
理由としては、コンパイラ自体がメモリ内での不要なデータのコピーを避けるように設計されているためです。
また、メモリ以外のcalldataやストレージ、returndataなどには、このmcopyを使用することはできません。

tstoreの警告回数の変更

Transient Storageという一時的なデータ保存用ストレージがあります。
これはトランザクションが終了するまでデータを保持するストレージで、tstoretloadというオペコードを使用してアクセスします。
ただ、Transient Storageの誤った使用は予期しない動作やバグの原因になります。
そのため、Solidityバージョン0.8.24から、tstoreオペコードが使用されていると常に警告が表示されるようになっていました。
しかし、同じ警告が繰り返し表示されるのは煩わしいため、コンパイルごとに1回だけ表示されるように変更されました。

その他の変更

その他の細かい修正については以下の記事を参考にしてください。

https://soliditylang.org/blog/2024/03/14/solidity-0.8.25-release-announcement/

最後に

今回はSolidityのバージョン0.8.25の変更点をまとめました。

以下でも情報発信しているので、興味ある記事があればぜひ読んでみてください!

https://twitter.com/cardene777

https://chaldene.net/

https://qiita.com/cardene

https://cardene.substack.com/

https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4

CryptoGames

Discussion