Python
在 Brownie 中將地址轉換為 ContractContainer
我有一份工廠契約,在交易中:
- 部署合約
- 使用它部署的合約的地址發出一個事件
我希望能夠使用返回的地址與已部署的合約進行互動。前任:
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 創建合約。文件中讓我感到困惑的部分是您需要使用契約 from
brownie.network.contract
而不是實際的 ContractContainer frombrownie
。from brownie.network.contract import Contract [...] exchange = Contract.from_abi("AstroSwapExchange", exchangeAddress, exchangeAbi)
我們去吧!我們可以使用一個
Contract
變數來與以下內容互動:tokenExchangeFee = exchange.feeAmmount()