Solidity
使用 Truffle 和 Web3 的應付交易的 Metamask 問題
希望每個人都做得很好。
在過去的幾天裡,我一直遇到付款功能問題,我知道該功能肯定有效。我怎麼知道它在工作?乙太在 Remix 上成功發送。
以下程式碼來自我的契約的一部分:
function payRent() public payable onlyTenant inState(State.Started) equalValue { landlord.transfer(msg.value); paidrents.push(PaidRent({ id : paidrents.length + 1, value : msg.value })); }
假設房東是先前在契約中規定的地址。
我還包括了備份應付功能:
//fallback payable function() public payable{}
上述功能與 Remix 完美配合。我創建了一個 React 應用程序,它將呼叫此函式並將 Metamask 用作 web3 提供程序。在函式中,我這樣使用返回部分:
return rentalAgreementInstance.payRent.sendTransaction({from: accounts[0], value: this.state.web3.toWei(this.state.rent, "ether"), gas:30000})
實例已正確初始化。
這設置為在點擊按鈕時啟動。
每次點擊按鈕時,Metamask 都會為我提供一個彈出視窗,以使用定義的正確值來確認交易。現在,一旦點擊確認,就會出現問題。
交易完成,但沒有從發送方賬戶中扣除乙太幣,接收方賬戶也沒有收到乙太幣。
我假設我可能在 react 的 web3 返回函式中錯誤地呼叫了它。
如果需要更多相關細節,請告訴我。
一些幫助將不勝感激。謝謝你們!
所以我設法解決了這個問題。
伊斯梅爾提到氣體太低了。
當我為應付交易創建松露單元測試時,我意識到了這一點。交易成功後,我前往 Ganache 客戶並註意到付款所需的氣體。
這讓我意識到我給的氣體太少了。我將它從 30000 更改為 100000 並且效果很好。
我希望其他人可能會發現這個答案也很有用。