Go-Ethereum
MetaMask 如何知道合約的前提條件會失敗?
我正在使用標準 ERC20 代幣,我有一個傳輸函式:
function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; }
我的地址 A 有 20 個我的 ERC20 代幣,我正在使用 web3.js 將交易發送到部署在 Geth 私有節點上的智能合約。MetaMask 正在攔截這些呼叫。
我很好奇 MetaMask 在這兩種情況下的行為:
- 從地址A發送19個token到地址B,交易成功,現在A有1個token
- 嘗試從地址 A 向地址 B 發送 21 個令牌,元遮罩顯示以下消息:
就好像 MetaMask 知道合約的前置條件會失敗:
require(_value <= balances[msg.sender]);
我很想知道 MetaMask 是否有自己的合約狀態,並且可以在呼叫合約之前或在呼叫合約時確定交易是否會失敗。
作為氣體估算過程的一部分,它以只讀模式逐步完成交易。它可以看到交易何時可能失敗。
希望能幫助到你。