OpenZeppelin V5.0 を読み解く
10月6日にOpenZeppelin の Version 5.0 がリリースされました。後方互換性がない破壊的変更が多いため、なにも考えずにリリースすると大変なことになりますが、バージョン5になって数々の機能追加がされています。Solidityエンジニアは最新の機能にキャッチアップするべく、追いついていきましょう。
ガス効率の改善
公式ドキュメントによると、V5 では、今までと比べてガス効率が平均9.63% 改善されたようです。これはありがたいですね。今までOpenZeppelinはガス効率が良くないので他のライブラリを使う例も多かったので、セキュリティ安心なOpenZeppelinを使ったままガス代が安くなるのは良さそうです。
また、デプロイメントコストが12%ほど安くなったとのことで、これもお財布に厳しい最近のSolidity プロジェクトにとってはありがたいですね(笑
AccessManager 機能の実装
AccessManager とは、今までコントラクトごとに管理していたアクセス管理機能を、AccessManager という単一コントラクトにまとめて集中的に管理する機能です。今までの各コントラクトごとのアクセス管理だと、変更があった時にそれぞれのコントラクトを修正しなければいけませんが、それを一つのコントラクトの変更だけで実現します。
PFPプロジェクトだと単一のコントラクトなのであまり意識することがありませんが、より大きなプロジェクトだとAccessManager の恩恵が大きそうです。このAccessManager に登録するウォレットのセキュリティ管理だけ意識すればよいので、これは良い改善点になりそうです。また、このAccessManager では、アクセス権限の更新の時にTimeLock機能のように、実際の反映を遅らせる機能などもついています。独自実装するとセキュリティが怖いですが、充分に監査されたAccessManager をそのまま使える恩恵は大きそうです。
アップグレーダブルの名前空間
Upgradable コントラクトにおけるストレージ空間衝突の回避のために、ERC-7201である名前空間ストレージが導入されたようです。Upgradable は概念が難しく、セキュリティインシデントの温床になることが多いので、潜在的なバグを回避できるパターンは積極的に回避していきたいです。ただ、これによって後方互換性がなくなる変更も多数あるので、導入する場合はソースコードのコメントまで読んでいきたいですね。
後方互換性のない簡略化
先ほども述べたように、後方互換性がない変更が多く、とりわけ今まで使われていた関数が消えていることも多いので注意が必要です。公式が述べた削除されたライブラリは以下の通りです。
Address.isContract
Counters
SafeMath
SignedSafeMath
GovernorCompatibilityBravo
GovernorVotesComp
TokenTimelock (in favor of VestingWallet)
ERC777
All cross-chain contracts (including AccessControlCrossChain)
All presets in favor of OpenZeppelin Contracts Wizard
SafeMathなどは使っている人も多そうなので注意が必要ですね。今まで使っていた人は、V4 のソースコードをコピーして使うなどの対応が必要になりそうです。
まとめ
OpenZeppelinのV5は、とりわけガス効率化がすべてのプロジェクトに対する好影響であり、新規プロジェクトでは積極的に使ったほうが良いでしょう。ここで挙げられた変更以外にも、今年後半に実装される予定のFoundry対応はめちゃめちゃ期待ですね。
ただ、実際に既存PJにアップデートしてみたところ多くの破壊的変更があったので、既存のPJは無理して入れ替える必要はなさそうです。とりわけ、今まで単体テストを書いてこなかったPJは、破壊的変更のリスクを考えると様子見の判断は全然ありだと思います。
公式の記事はこちらから
https://blog.openzeppelin.com/introducing-openzeppelin-contracts-5.0
この記事が気に入ったらサポートをしてみませんか?