Events
我的契約沒有發出事件
這是我的契約:
pragma solidity ^0.4.22; contract Test { event Deposit( address indexed from, uint amt ); event Withdrawal( address indexed to, uint amt ); address owner; constructor() public { owner = msg.sender; } function Withdraw(uint amt) public { require(msg.sender == owner); msg.sender.transfer(amt); emit Withdrawal(msg.sender, amt); } function () payable external { emit Deposit(msg.sender, msg.value); } }
我使用松露 v4.1.11 和 Solidity v0.4.24
我執行 docker:run -d -p 8545:8545 trufflesuite/ganache-cli:latest -a 10 –debug
我連接:松露控制台
它連接,合約部署。我可以這樣發送:
Test.at('0xd8f24367662cd76f0723271cfd6000ab3d317e40').send(web3.toWei(1,"ether")) { tx: '0x2b438220d8ab4fe3428409f9d6a9bcb9ab800e0a975b216f06dc8654658c2d45', receipt: { transactionHash: '0x2b438220d8ab4fe3428409f9d6a9bcb9ab800e0a975b216f06dc8654658c2d45', transactionIndex: 0, blockHash: '0xfcdf0b31d4ac77001f1d6c760e2e5759addc184d311756a97b3f4aa3a86dcaa0', blockNumber: 27, from: '0xb9cd57a299ebf2eca11435ed890d5de0717f2889', to: '0xd8f24367662cd76f0723271cfd6000ab3d317e40', gasUsed: 21040, cumulativeGasUsed: 21040, contractAddress: null, logs: [], status: '0x1', logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', v: '0x1b', r: '0x6f76b56ff878c10c3dfed4315d071c160bb1572194197b9f974b7d168d7e816c', s: '0x23f68bc8533232aa113aeb0f2ba8e6425f2e0783bcbbc9e6cf825342890d0e73' }, logs: [] }
一切正常,但您會注意到日誌是空的 - 為什麼沒有發出 Deposit 事件?
鑑於沒有其他人回答,我可以為您提供某種答案。
首先要做的事情是:您的契約對於您在程式碼中暗示的編譯器版本(0.4.22)無效-
constructor
當時不存在關鍵字,您必須以不同的方式使用建構子。但是,我看到您實際上使用的是 0.4.24,所以一切都很好。如果您將程式碼放入 Remix 中,一切正常。但是,Remix 提供的氣體使用量為 22489 而不是您的 21040。
所以我最好的猜測是交易在某種程度上是錯誤的。它成功了(狀態
0x1
),但有些不對勁。或者你的甘納許太老了還是什麼?或者也許在 docker 中執行它會干擾某些東西?不幸的是,我不能給你一個更明確的答案,但希望總比沒有好。
程式碼執行良好,並且確實在 Remix IDE 上發出了一個事件。不過,我不得不將 pragma solidity 更改為 0.5.0。嘗試以下操作:
- 將鬆露更新到 v5。
- 將 pragma solidity 更改為
^0.5.0
.- 執行本地安裝的 ganache cli(例如
npm install -g ganache-cli
)。