Gas
“內在氣體太低”是什麼意思?
我正在執行 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 來執行。