Events

我的契約沒有發出事件

  • January 15, 2019

這是我的契約:

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)。

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