Go-Ethereum

MetaMask 如何知道合約的前提條件會失敗?

  • June 27, 2018

我正在使用標準 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 在這兩種情況下的行為:

  1. 從地址A發送19個token到地址B,交易成功,現在A有1個token
  2. 嘗試從地址 A 向地址 B 發送 21 個令牌,元遮罩顯示以下消息:

MetaMask 通知

就好像 MetaMask 知道合約的前置條件會失敗:

   require(_value <= balances[msg.sender]);

我很想知道 MetaMask 是否有自己的合約狀態,並且可以在呼叫合約之前或在呼叫合約時確定交易是否會失敗。

作為氣體估算過程的一部分,它以只讀模式逐步完成交易。它可以看到交易何時可能失敗。

希望能幫助到你。

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