3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ERC1976: Standard Proxy Storage Slotsを理解する

Last updated at Posted at 2022-02-01

ERC1976

この記事では、このコミット時点でのERC1976の記載を参照しています。

この段階ではステータスがreviewなので仕様が変更される可能性はあります。

ERC1976の説明

ERC1976とはProxy Patternのコントラクトを実装する際に、Storage Contractの中でLogic Contractの中で定義されているslotと衝突しないように、特定のアドレスを保持するためのslotを定義する規格です。

Proxy Patternについての記事は別途作成予定です。

ドキュメント上では下記のアドレスについて言及されています。

  • Logic contract address
  • Beacon contract address
  • Admin address

Logic contract

実際のロジックが実装されているコントラクトです。Storage ContractはProxyはこのLogic Contractにdelegatecallを行うように実装します。

Logic contractのslotは下記のように定義されています。

// bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1))
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc

Beacon contract

ProxyのLogic Contractをまとめて管理するためのコントラクトです。一回のトランザクションでまとめてProxyのアップグレードを行いたい時に使用します。

Beacon contractのslotは下記のように定義されています。

// bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)
0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50

Admin address

Proxyのアップグレードを行う権限を持ったアドレスです。

Admin addressのslotは下記のように定義されています。

// bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)
0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103

ERC1976の具体的な実装

OpenZeppelinの実装です。

実際にデプロイしたコントラクト

こちらの記事で実際にデプロイしたコントラクトを確認できます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?