Ether

我的備份功能無法從已發送的交易中獲取 msg.value

  • May 18, 2021

我的程式碼中有一個映射為mapping(address => uint) private Payment;. 此映射用於查看誰發送了一些乙太幣以及發送的值是多少。它的鍵是一個address儲存發送者地址的值,它的值是uint儲存發送的值。我需要在回退函式中評估此映射的記錄。所以,我寫了以下備份:

function() external payable{
       Payment[msg.sender]=msg.value;
   }

但是,每當我向 Metamask 的合約支付一些乙太幣時,交易就會失敗。我該怎麼辦?

該錯誤很可能是您沒有為交易分配足夠的氣體。事實上,你必須為 ETH 轉賬(21000 gas)+ 在回退函式中完成的儲存操作付費。

因此嘗試增加 Metamask 選項中的交易氣體。

請注意,在 0.6 Solidity 版本(https://solidity.ethereum.org/2020/03/26/fallback-receive-split/)中更改了備份功能實現。

因為這個交易需要的gas超過了Metamask中gas的預設值。當您在回退函式體中編寫一些程式碼時,您應該注意回退函式與其主體為空的情況相比會消耗更多的氣體。因此,您需要在 Metamask 中為 gas 設置一個合適的值。在 Metamask 中,在確定 ETH 值的過程中,有一個欄位。估計多少足夠並將其插入該欄位。

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