Web3.py

從代理呼叫 eth-brownie 的備份函式

  • June 3, 2021

我有一個合約,它對delegatecall所有對不同合約的函式呼叫都有一個備份函式。我似乎無法使用我的典型 API 與它委託呼叫的合約進行互動。

我有一個Box.solretrieve函式呼叫的契約。我的TransparentUpgradeableProxy proxy合約將所有呼叫委託給該合約。但是,如果我呼叫retrieve代理合約,我會得到:

AttributeError: Contract 'TransparentUpgradeableProxy' object has no attribute 'retrieve'

這是程式碼的外觀

from brownie import Box, TransparentUpgradeableProxy

account = accounts[0]
print(f"Deploying to {network.show_active()}")
box = Box[len(Box) - 1]
proxy = TransparentUpgradeableProxy[len(TransparentUpgradeableProxy) - 1]
print(proxy.retrieve())

你需要使用

  1. 實現的實際 ABI,而不是代理合約的 ABI 文件
  2. 代理合約地址
from brownie import Box, TransparentUpgradeableProxy, Contract

account = accounts[0]
proxy = TransparentUpgradeableProxy[-1]
proxy_box = Contract.from_abi("Box", proxy.address, Box.abi)
print(proxy_box.retrieve())

引用自:https://ethereum.stackexchange.com/questions/100223