如果導入 ChainlinkClient.sol,則無法將合約部署到多邊形孟買
我有一份可以很好地部署到 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 }
根據您使用的網路,您需要輸入正確的合約地址。上面程式碼中提供的地址是用於孟買測試網的。
如果這不能解決問題,請分享其餘程式碼,以便我們查看。