Web3.py

如果導入 ChainlinkClient.sol,則無法將合約部署到多邊形孟買

  • February 2, 2022

我有一份可以很好地部署到 rinkeby 和 kovan 的契約。我想把它放在多邊形主上,但我想我會先用多邊形測試(即孟買)進行測試。我用的是布朗尼。我的部署如下所示:

   myContract = MyContract.deploy(
     var_1,
     var_2,
     ...
     var8,
     {"from": from_account},
     publish_source=True
   )

部署到多邊形測試會導致錯誤提示:

氣體估算失敗:“執行已恢復”。該交易可能會恢復。如果你想廣播,你必須手動設置氣體限制。

如果我從契約中刪除 ChainlinkClient.sol 的導入,我可以很好地部署到孟買,但我的契約需要 ChainlinkClient.sol,因此刪除它並不是一個真正的選擇。因此,在我的契約中使用 ChainlinkClient.sol,然後我嘗試使用 gas_price 和 gas_limit 進行部署,如下所示:

   myContract = MyContract.deploy(
     var_1,
     var_2,
     ...
     var8,
     {"from": from_account, 'gas_limit': 272692, gas_price': 9000000000},
     publish_source=True
   )

這導致此錯誤:

ValueError:呼叫期間恢復執行:“氣體不足”。該交易可能會恢復。如果您希望廣播,請將其allow_revert:True作為交易參數包含在內。

所以我再增加一點gas_limit(到282692),我得到這個錯誤:

ValueError:呼叫期間執行恢復:‘執行恢復’。該交易可能會恢復。如果您希望廣播,請將其allow_revert:True作為交易參數包含在內。

我嘗試使用allow_revert:True,但它似乎沒有做任何事情……雖然我不確定我是否正確使用它。我試過把它放在這樣的地方:

{"from": from_account,'gas_limit': 282692, 'gas_price': 9000000000, 'allow_revert': True},

這並沒有改變任何東西……我得到了與上面相同的錯誤。

from_account 在多邊形孟買有 0.9 MATIC ……它將部署合約(就像我刪除 ChainlinkClient.sol 的導入一樣)。我的契約是 340 行,可以毫無問題地部署到 kovan 和 rinkeby。我也嘗試發送到多邊形主,它給出了完全相同的錯誤……但是,我在多邊形主上沒有 MATIC,所以我不希望它在那里工作(儘管我認為它會顯示不同的錯誤如果缺少 MATIC 是問題)。

任何幫助或見解將不勝感激!

沒有程式碼,很難判斷出了什麼問題。但一個常見的問題是因為 Chainlink 客戶端無法辨識孟買網路上的 LINK 代幣合約地址。如果您的程式碼在建構子中包含以下函式,則可能是錯誤的根源。

constructor() {
   setPublicChainlinkToken();
   //rest of the code
}

此功能自動設置特定網路的 LINK 代幣合約的合約地址。但它不適用於孟買網路。所以手動設置它應該可以解決它。可以通過以下方式完成。

constructor() {
   address mumbaiLINKContract = 0x326C977E6efc84E512bB9C30f76E30c160eD06FB;
   setChainlinkToken(mumbaiLINKContract);
   //rest of the code
}

根據您使用的網路,您需要輸入正確的合約地址。上面程式碼中提供的地址是用於孟買測試網的。

如果這不能解決問題,請分享其餘程式碼,以便我們查看。

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