Gas

“內在氣體太低”是什麼意思?

  • September 1, 2019

我正在執行 Mist 錢包,並且我已將此合約部署到測試網(來自https://ethereum.stackexchange.com/a/179/520):

contract Notary{
   struct Document {
       uint timestamp;
       bytes ipfs_hash;
       address[] signatures;
   }
   mapping(address => bytes[]) public users; //maps addresses to ipfs document hashes
   mapping(bytes32 => Document) public documents; //maps sha3(ipfs) hashes to documents

   function addDocument(bytes ipfs) public {
       users[msg.sender].push(ipfs); //Add document to users's "signed" list
       address[] memory sender;
       sender[0] = msg.sender;
       documents[sha3(ipfs)] = Document(block.timestamp, ipfs, sender);
   }

   function signDocument(bytes ipfs) public {
       users[msg.sender].push(ipfs);
       documents[sha3(ipfs)].signatures.push(msg.sender);
   }

}

但是,當我嘗試執行 addDocument 函式時,我得到“內在氣體太低”。這是什麼意思?同樣在確認執行之前,它說:“數據無法執行,因此它將使用所有提供的氣體。”

交易的內在氣體是交易在任何程式碼執行之前使用的氣體量。它是固定的“交易費用”(目前為 21000 gas)加上交易提供的每個數據字節的費用(零字節為 4 gas,非零字節為 68 gas)。這些常量目前都是在 params/protocol_params.go 中為 geth 定義的。大概它們也被編碼到其他節點/客戶端實現的原始碼中。

您需要使用 addDocument 函式為您的交易分配更多的氣體。Mist 正在向前看,並且能夠判斷交易將失敗,因為您沒有為交易提供足夠的 gas 來執行。

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