logo

Solidity 0.8.26が出たよ

〜ETFとは何か言ってみろ〜
profile photo
TaniguchiAkira

今北産業

  • requireでエラーが指定できるようになった
  • カスタムエラーのガスコスト最適化
  • コンパイラ高速化
    • などなど

詳細

requireの仕様変更

今まではカスタムエラーを使う時、if文とセットでやっていたことが多かったが、それをrequireでスッキリ記述することができるようになった。
話は変わるが、requireの「第一引数がtrueならば続行」という仕様、逆の方が違和感ない気がするのは私だけだろうか。
<今まで>
solidity
error InsufficientBalance(uint256 available, uint256 required); // This will only compile via IR contract TestToken { mapping(address => uint) balance; function transferWithRequireError(address to, uint256 amount) public { // 今まではこんな感じ if(balance[msg.sender] < amount){ revert InsufficientBalance(balance[msg.sender], amount) } balance[msg.sender] -= amount; balance[to] += amount; } // ... }
<0.8.26以降>
solidity
error InsufficientBalance(uint256 available, uint256 required); // This will only compile via IR contract TestToken { mapping(address => uint) balance; function transferWithRequireError(address to, uint256 amount) public { // ここ!!!!!!!!!!! require( balance[msg.sender] >= amount, // この部分!!!!!!!!!! InsufficientBalance(balance[msg.sender], amount) ); balance[msg.sender] -= amount; balance[to] += amount; } // ... }

カスタムエラーガスコスト削減

例えば、こんな感じの引数を持たないカスタムエラーを利用する場合、デプロイ時のガス代が少なくなった
solidity
error ForceFailure(); contract FailureForcer { function fail() external pure { revert ForceFailure(); } }

コンパイラの高速化

Yulオプティマイザのシーケンス(*)が更新され、パフォーマンスが向上した。
最適化ステップを複数回繰り返すループを不要と判断し除去することにより、コンパイル時間を大幅に短縮することに成功したらしい。
例えばUniswapの場合、コンパイル時間が半分になったらしいので、大量のコード量を保持する大きなプロダクトであればあるほど、効果を感じるかもしれない。
(*):Yul言語で書かれたコードを最適化するための一連の手順。YulはSolidityの中間表現で、低レベルの最適化が可能。
https://soliditylang.org/blog/2024/05/21/solidity-0.8.26-release-announcement/
https://soliditylang.org/blog/2024/05/21/solidity-0.8.26-release-announcement/

所感

0.8.25からデフォルトEVMがCancunになってるはずなので、Ethereum mainnet以外で利用したい場合はコンパイル設定の変更が必要なので、お気をつけて。

参考リンク

Solidity 0.8.26 Release Announcement | Solidity Programming Language
Posted by Solidity Team on May 21, 2024
Solidity 0.8.26 Release Announcement | Solidity Programming Language
github.com/ethereum/solidity/releases/tag/v0.8.26
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