Python

在 Brownie 中將地址轉換為 ContractContainer

  • January 29, 2022

我有一份工廠契約,在交易中:

  • 部署合約
  • 使用它部署的合約的地址發出一個事件

我希望能夠使用返回的地址與已部署的合約進行互動。前任:

from brownie import AstroSwapExchange, AstroSwapFactory
[...]
tokenExchangeAddress = forgeTx.events["TokenExchangeAdded"][0]["tokenExchange"]
return tokenExchangeAddress

tokenExchangeAddress = deploy_new_exchange(factory, erc20)
CREATE A CONTRACT OBJECT HERE
factory = exchange.factory()

我可以使用哪些函式來利用返回的地址並將其轉換為 Contract 對象,以便像我自己部署的任何其他合約一樣與之互動?

我自己找到了答案!(不確定這是否是最好的做法,但方法如下)

第 1 步:獲取要為其創建來源的契約的 ABI。就我而言,這是一份可以通過巧克力蛋糕導入的契約,所以:

from brownie import AstroSwapExchange, AstroSwapFactory
[...]
exchangeAbi = AstroSwapExchange.abi

第 2 步:使用 Contract.from_abi 創建合約。文件中讓我感到困惑的部分是您需要使用契約 frombrownie.network.contract而不是實際的 ContractContainer from brownie

from brownie.network.contract import Contract
[...]
exchange = Contract.from_abi("AstroSwapExchange", exchangeAddress, exchangeAbi)

我們去吧!我們可以使用一個Contract變數來與以下內容互動:

tokenExchangeFee = exchange.feeAmmount()

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