Exceptions

當通過公共 getter 接收乙太幣時,需要樣式異常的範例是什麼?

  • March 11, 2018

Solidity 文件中指出:

在以下情況下會生成 require 樣式的異常:

  1. 如果你的合約通過公共 getter 函式接收乙太幣。

有什麼例子,為什麼會引發異常?

讓我們考慮以下合約:

contract pubGetterException  {
 uint public value;

 function pubGetterException(uint _value) public {
   value = _value;
}
}

無符號整數變數value有一個自動生成的公共 getter(您不必在契約中明確編寫它),因為它被聲明為public.

如果您查看 ABI,它看起來像這樣:

[
   {
       "constant": true,
       "inputs": [],
       "name": "value",
       "outputs": [
           {
               "name": "",
               "type": "uint256"
           }
       ],
       "payable": false,
       "stateMutability": "view",
       "type": "function"
   },
   {
       "inputs": [
           {
               "name": "_value",
               "type": "uint256"
           }
       ],
       "payable": false,
       "stateMutability": "nonpayable",
       "type": "constructor"
   }
]

在這裡,請注意自動生成的 getter 函式不是payable函式,即。它無法接收乙太幣,因此它會拋出一個需要樣式的異常,如 Solidity 文件中所述。

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