Ether
我的備份功能無法從已發送的交易中獲取 msg.value
我的程式碼中有一個映射為
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 值的過程中,有一個欄位。估計多少足夠並將其插入該欄位。