Solidity
更新多個複製合約
一個快速的問題:如果一個合約工廠通過複製生成了很多合約,並且希望在所有這些複製的合約中更新一個參數,那麼實現這一目標的最佳方法是什麼?假設所有此類合約都可以使用 setter。一個好的措施是低gas成本,易於實施和快速執行。
還要添加一個約束:生成的契約不屬於我,也不屬於任何已知的個人。他們在野外。
如果您正在使用現有合約,除了分批發送這些更新以節省交易費用成本之外,您無能為力。
但是,如果您從頭開始部署新的代理合約,那麼您可以使用一個單獨的合約來保存您希望更新的設置。代理合約將從該合約中查找它們的設置,這將允許通過一次寫入更新所有合約的設置。
例如:
contract Settings(){ uint256 public fooValue = 1; function setFooValue(uint256 x){ fooValue = x; } } contract MyContract(){ settings Settings = Settings(0x1234...) function doSomething() public { uint256 foo = settings.fooValue() } }
通過呼叫
settings.setFooValue(19)
,我可以更改所有已部署的合約,成本僅為 25,000 gas,即使有數万個已部署的合約。