Solidity

使用 Truffle 和 Web3 的應付交易的 Metamask 問題

  • April 13, 2018

希望每個人都做得很好。

在過去的幾天裡,我一直遇到付款功能問題,我知道該功能肯定有效。我怎麼知道它在工作?乙太在 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 並且效果很好。

我希望其他人可能會發現這個答案也很有用。

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