logo

Solidityの0.8.27解説

〜一時ストレージ変数はまだ〜
profile photo
TaniguchiAkira

はじめに

残暑が激しい中、そんなことお構いなしにSolidityは新しい機能をリリースしてきます、皆様いかがお過ごしでしょうか。
現状使えないものもまだまだ多くはありますが、その辺り含め解説していきます。

今北産業

  • レガシーパイプラインでのrequire(bool, <custom error>)が利用可能に
  • 一時ストレージ変数のパーサーサポート導入(まだ使えないけど)
  • コンパイル速度改善

詳細

新たなrequireのサポート

レガシーパイプライン(*1)でのカスタムエラーをサポートするrequire文の導入される。
今まで、IR(Intermediate Representation)パイプライン(*2)しかサポートされていなかったrequire(bool, <custom error>)の構文がレガシーパイプラインでも利用可能になった。
Hardhatで利用する場合、新機能を利用するフラグを設定しなければ行けないので、結構微妙な位置付けのこの機能、Foundryってこういうところでも使いやすいなと思う。
(*1)Solidityコンパイラの従来のコンパイル方式で、SolidityソースコードをEVMバイトコードに直接変換する方法。将来的にはIRパイプラインに置換される。長年私用されてきたため、安定性は高いものの、一部を除いて、IRに比べコンパイル時間が低速になるなどのデメリットが存在する。
(*2)SolidityをまずYul(中間言語)に変換し、そこからEVMバイトコードを生成する方法。

コンパイラの最適化

依存関係のあるコントラクトの再最適化問題に対応した。
solidity
contract A { // Aのコード } contract B { function deployA() public { new A(); } }
Bをコンパイルする際に、Aのコードも含めて最適化が行われるが、今まで、毎回Aの最適化が実行され、コンパイル時間の速度低下を招いてきた。それらが今回のバージョンからIRのキャッシング機能が働き、再利用されることにより、速度低下の改善につながった。

一時ストレージ変数

トランザクション内でのみ利用できるtransient変数が利用できるようになった。
solidity
contract Example { transient uint256 tempValue; function someFunction() public { tempValue = 42; // この値はトランザクション内でのみ存在 } }
ただこれはコンパイラが対応しただけで、現状意図した動作はせず、期待されているガス代の低下という恩恵も受けれない。
実際の機能は今後のバージョンに期待。

その他もろもろ

  • 非推奨の型付きYul方言のサポート終了
  • EVMバージョン"Prague"のサポート
  • SMTCheckerの改善
  • 細かなバグ、コンパイラ最適化などの修正

所感

まぁ新しい機能を使いたければ、その下準備としてどうぞ、という感じではある。
俺たちの戦いはこれからだ!

参考リンク

Solidity on Twitter / X
Solidity 0.8.27 is out! 🎉This release brings support for custom errors in `require` to the legacy pipeline, optimizer improvements such as caching of optimized IR that will speed up compilation via IR, several bugfixes, and more!📝Blog: https://t.co/UMT5Kk83Kd💾GitHub:… pic.twitter.com/xATANvk8vp— Solidity (@solidity_lang) September 4, 2024
Solidity 0.8.27 Release Announcement | Solidity Programming Language
Posted by Solidity Team on September 4, 2024
Solidity 0.8.27 Release Announcement | Solidity Programming Language
github.com/ethereum/solidity/releases/tag/v0.8.27
Related posts
post image
Solidity
OpenZeppelin
AA
OpenZeppelin 5.2.0が出るよ
post image
Solidity
Optimism
Arbitrum
L2
Wormhole
Layer0
オレオレインターフェースからERC7802へ
ユニバーサル規格は大事
post image
Solidityも早く1.0.0出て欲しい
Powered by Notaku