Open13
OpenZeppelin の Upgrades Plugins の仕組みを調べる
https://docs.openzeppelin.com/upgrades-plugins/1.x/ の仕組みが気になるので調べる
リポジトリ
plugin-hardhat
には contracts
ディレクトリがあるのに、plugin-truffle
にはないのはなんでなんだろう...。
サンプルコードの
const { ethers, upgrades } = require("hardhat");
の upgrades
オブジェクトの定義はここ
proxy の種類は 'uups' | 'transparent' | 'beacon'
の3種類を選択できる
使い方は upgrades.deployProxy
の第三引数に指定すればいいらしい
デフォルトの kind はここで選択されている
引数に代入してほしくない :innocent:
コードを追ってくとここで決定されているみたい
uups
と transparent
のどっちが選択されるかは、対象のコントラクトが upgradeTo(address)
というインタフェースを持っているかどうからしい
ない場合は transparent
が選ばれるらしい?
beacon
を使う場合は、README にもある通り upgrades.deployBeacon
を使う必要がある
uups
の場合
ERC1967Proxy
が実態ぽい?
どの kind でも manifest.addProxy
が呼ばれるらしい
Manifest
は config というかディスクにキャッシュを載せる君ぽい
コントラクトのアドレスと deployTransaction
を上書きしている
つまりデプロイした Proxy で擬態させているっぽい
コントラクトは、Import.sol
を使って別のパッケージのを使うだけ