Skip to content
This repository has been archived by the owner on Jan 21, 2022. It is now read-only.

Transaction Receipts do not include logsBloom #440

Closed
elenadimitrova opened this issue Dec 4, 2017 · 12 comments
Closed

Transaction Receipts do not include logsBloom #440

elenadimitrova opened this issue Dec 4, 2017 · 12 comments

Comments

@elenadimitrova
Copy link

The transaction receipts are missing the logsBloom property. Below are outputs from a non-specific transaction using testrpc and parity where the property is available.

Test with testrpc

truffle(development)> web3.eth.getTransactionReceipt("0x14e5bd5756ce051493736bb003e1ac9c738d276aa6b732accf90b636c6d2e5c8")
{ transactionHash: '0x14e5bd5756ce051493736bb003e1ac9c738d276aa6b732accf90b636c6d2e5c8',
  transactionIndex: 0,
  blockHash: '0xddb832236ccc486adbdae6282432b2363dd9995ded167573d950c9c9e11568ef',
  blockNumber: 57,
  gasUsed: 2401314,
  cumulativeGasUsed: 2401314,
  contractAddress: null,
  logs:
   [ { logIndex: 0,
       transactionIndex: 0,
       transactionHash: '0x14e5bd5756ce051493736bb003e1ac9c738d276aa6b732accf90b636c6d2e5c8',
       blockHash: '0xddb832236ccc486adbdae6282432b2363dd9995ded167573d950c9c9e11568ef',
       blockNumber: 57,
       address: '0x09a8c3968b660d9c9646aefe420f741a5e891e1b',
       data: '0x0',
       topics: [Array],
       type: 'mined' },
     { logIndex: 1,
       transactionIndex: 0,
       transactionHash: '0x14e5bd5756ce051493736bb003e1ac9c738d276aa6b732accf90b636c6d2e5c8',
       blockHash: '0xddb832236ccc486adbdae6282432b2363dd9995ded167573d950c9c9e11568ef',
       blockNumber: 57,
       address: '0x557227efe117a5fd3ba0f0df559694fb8cbb9e0b',
       data: '0x0',
       topics: [Array],
       type: 'mined' },
     { logIndex: 2,
       transactionIndex: 0,
       transactionHash: '0x14e5bd5756ce051493736bb003e1ac9c738d276aa6b732accf90b636c6d2e5c8',
       blockHash: '0xddb832236ccc486adbdae6282432b2363dd9995ded167573d950c9c9e11568ef',
       blockNumber: 57,
       address: '0x09a8c3968b660d9c9646aefe420f741a5e891e1b',
       data: '0x0',
       topics: [Array],
       type: 'mined' },
     { logIndex: 3,
       transactionIndex: 0,
       transactionHash: '0x14e5bd5756ce051493736bb003e1ac9c738d276aa6b732accf90b636c6d2e5c8',
       blockHash: '0xddb832236ccc486adbdae6282432b2363dd9995ded167573d950c9c9e11568ef',
       blockNumber: 57,
       address: '0x1fd3a85a88ea6b1416024017f8fc32bf2f92bab1',
       data: '0x0',
       topics: [Array],
       type: 'mined' },
     { logIndex: 4,
       transactionIndex: 0,
       transactionHash: '0x14e5bd5756ce051493736bb003e1ac9c738d276aa6b732accf90b636c6d2e5c8',
       blockHash: '0xddb832236ccc486adbdae6282432b2363dd9995ded167573d950c9c9e11568ef',
       blockNumber: 57,
       address: '0x557227efe117a5fd3ba0f0df559694fb8cbb9e0b',
       data: '0x0',
       topics: [Array],
       type: 'mined' },
     { logIndex: 5,
       transactionIndex: 0,
       transactionHash: '0x14e5bd5756ce051493736bb003e1ac9c738d276aa6b732accf90b636c6d2e5c8',
       blockHash: '0xddb832236ccc486adbdae6282432b2363dd9995ded167573d950c9c9e11568ef',
       blockNumber: 57,
       address: '0x1fd3a85a88ea6b1416024017f8fc32bf2f92bab1',
       data: '0x0',
       topics: [Array],
       type: 'mined' } ],
  status: 1 }

Test against Parity:

truffle(development)> web3.eth.getTransactionReceipt("0x0ecedc318e0650f6c9e4c209866dac3f6629b6f9b3f0e663f061531add4e3b87")
{ blockHash: '0xdf268557e3ab89c4312f1f6b2b479a0a8d2bcc8e61310b6652a20afb2d7e0de9',
  blockNumber: 3928,
  contractAddress: null,
  cumulativeGasUsed: 2401314,
  gasUsed: 2401314,
  logs:
   [ { address: '0x9d62edd98de4b87b5a533b9a25b0087128f92ac3',
       blockHash: '0xdf268557e3ab89c4312f1f6b2b479a0a8d2bcc8e61310b6652a20afb2d7e0de9',
       blockNumber: 3928,
       data: '0x',
       logIndex: 0,
       topics: [Array],
       transactionHash: '0x0ecedc318e0650f6c9e4c209866dac3f6629b6f9b3f0e663f061531add4e3b87',
       transactionIndex: 0,
       transactionLogIndex: '0x0',
       type: 'mined' },
     { address: '0xfe70de0ed1c5b77be4f1c3fd70cfd5ec3c61b810',
       blockHash: '0xdf268557e3ab89c4312f1f6b2b479a0a8d2bcc8e61310b6652a20afb2d7e0de9',
       blockNumber: 3928,
       data: '0x',
       logIndex: 1,
       topics: [Array],
       transactionHash: '0x0ecedc318e0650f6c9e4c209866dac3f6629b6f9b3f0e663f061531add4e3b87',
       transactionIndex: 0,
       transactionLogIndex: '0x1',
       type: 'mined' },
     { address: '0x9d62edd98de4b87b5a533b9a25b0087128f92ac3',
       blockHash: '0xdf268557e3ab89c4312f1f6b2b479a0a8d2bcc8e61310b6652a20afb2d7e0de9',
       blockNumber: 3928,
       data: '0x',
       logIndex: 2,
       topics: [Array],
       transactionHash: '0x0ecedc318e0650f6c9e4c209866dac3f6629b6f9b3f0e663f061531add4e3b87',
       transactionIndex: 0,
       transactionLogIndex: '0x2',
       type: 'mined' },
     { address: '0x7d3f80eaadbc9df1e2f0a5142473f8e6502d2cef',
       blockHash: '0xdf268557e3ab89c4312f1f6b2b479a0a8d2bcc8e61310b6652a20afb2d7e0de9',
       blockNumber: 3928,
       data: '0x',
       logIndex: 3,
       topics: [Array],
       transactionHash: '0x0ecedc318e0650f6c9e4c209866dac3f6629b6f9b3f0e663f061531add4e3b87',
       transactionIndex: 0,
       transactionLogIndex: '0x3',
       type: 'mined' },
     { address: '0xfe70de0ed1c5b77be4f1c3fd70cfd5ec3c61b810',
       blockHash: '0xdf268557e3ab89c4312f1f6b2b479a0a8d2bcc8e61310b6652a20afb2d7e0de9',
       blockNumber: 3928,
       data: '0x',
       logIndex: 4,
       topics: [Array],
       transactionHash: '0x0ecedc318e0650f6c9e4c209866dac3f6629b6f9b3f0e663f061531add4e3b87',
       transactionIndex: 0,
       transactionLogIndex: '0x4',
       type: 'mined' },
     { address: '0x7d3f80eaadbc9df1e2f0a5142473f8e6502d2cef',
       blockHash: '0xdf268557e3ab89c4312f1f6b2b479a0a8d2bcc8e61310b6652a20afb2d7e0de9',
       blockNumber: 3928,
       data: '0x',
       logIndex: 5,
       topics: [Array],
       transactionHash: '0x0ecedc318e0650f6c9e4c209866dac3f6629b6f9b3f0e663f061531add4e3b87',
       transactionIndex: 0,
       transactionLogIndex: '0x5',
       type: 'mined' } ],
  logsBloom: '0x08000800040000000000000000000000000000200000020000000001000000000000000040050000000020010000000000000000000000080000000000000000000001000000000000000000000000000000000000080000000000000000000000000000000000000000000000008000000000000001000000000000000800020000000000000000000000000002000000000000000000000040000000000080100000000000000000000000000000000000000000000000000000000080000000000000000000020000000020000000000000001000000000000000000000000000000800000000000000000000000000000000000000000000000000000000',
  root: '0x265e46500c11b96b190c6284b9e8aae8ff6f0d1f0516898450a569db74916c62',
  transactionHash: '0x0ecedc318e0650f6c9e4c209866dac3f6629b6f9b3f0e663f061531add4e3b87',
  transactionIndex: 0 }

The property is otherwise available on the block using testrpc.

truffle(development)> web3.eth.getBlock(57)
{ number: 57,
  hash: '0x6bfae935b6405c854aa743c7cbbc084def16feb0c7891de2a48ca49b94ad4219',
  parentHash: '0xd1eb4098b32f0340a90c03f7806f592c2c77f868b9545f9cde619a8abf3a813e',
  nonce: '0x0',
  sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
  logsBloom: '0x00000000001000000000000000000000000000000000020000000000000100000000000000000000000020010000000000000240000000080004000000000800000000000000000000000000000000000000000000080001000002000000000000000000000000000000000000000000000000000000002000400000000001020000000000000000000000000000000000000000000000000000000000000100000000000000002000000009000000500000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000100000000000000000400000000000000000000000000',
  transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
  stateRoot: '0x25d0fdcd5c9fafc00f7a7f474cdb223fe383feaf8b55370abf7430ddfc0f98cb',
  receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
  miner: '0x0000000000000000000000000000000000000000',
  difficulty: BigNumber { s: 1, e: 0, c: [ 0 ] },
  totalDifficulty: BigNumber { s: 1, e: 0, c: [ 0 ] },
  extraData: '0x0',
  size: 1000,
  gasLimit: 6721975,
  gasUsed: 2401314,
  timestamp: 1512294320,
  transactions:
   [ '0x322b5c0eed38e5f226881b366bef40709125eeeab3f3216b42cc8a220aa02106' ],
  uncles: [] }

According to the yellow paper, both the block and the transaction receipt define logsBloom in their properties.

@benjamincburns
Copy link
Contributor

@elenadimitrova per the JSON RPC wiki, the logsBloom field is meant to be defined on the eth_getBlock* responses, but not on eth_getTransactionReceipt.

That said, I'm still uncertain as to how much we should treat that wiki page as a spec. Further, I need to balance the goal of adhering to the spec (weakly-defined as it is) so that people write dapps which are portable across ethereum clients, against supplying people what they need in order to test their Dapps adequately for their environments.

As a rule, we usually do our best to follow the RPC wiki page unless there's disagreement amongst major client implementations. In that case, we tend to take the intersection of functionality between Parity and geth rather than the union.

To help me make the decision:

  • Can you work around not having this field, or does this block your progress in some way?
  • Do you know whether geth or any other clients provide this field on eth_getTransactionReceipt?

@elenadimitrova
Copy link
Author

It is breaking for ethers which expects this in the transaction receipt
https://github.com/ethers-io/ethers.js/blob/511fff1390ba56ba56237053fd00ae0ec87b1e7b/providers/provider.js#L296

As for geth this also returns logsBloom in the transaction receipt:

truffle(development)> web3.eth.getTransactionReceipt('0x485bacde24723e24c6eb278000c08cb95094f0c69e205aa39cfa9353f97db869')
{ blockHash: '0x2d43d6141761537eef97e00eb4f919cd8da4d27fa580cbc6f02981d77756a468',
  blockNumber: 5317,
  contractAddress: '0xab56c45847c68007cffe7d80cabdb24043d1b08f',
  cumulativeGasUsed: 630488,
  from: '0xc46fbd443feca41354c6ebfd36cea7d89c555bea',
  gasUsed: 630488,
  logs:
   [ { address: '0xab56c45847c68007cffe7d80cabdb24043d1b08f',
       topics: [Array],
       data: '0x',
       blockNumber: 5317,
       transactionHash: '0x485bacde24723e24c6eb278000c08cb95094f0c69e205aa39cfa9353f97db869',
       transactionIndex: 0,
       blockHash: '0x2d43d6141761537eef97e00eb4f919cd8da4d27fa580cbc6f02981d77756a468',
       logIndex: 0,
       removed: false } ],
  logsBloom: '0x00000002000000000010000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000080000000000000000000004000000000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
  root: '0x8c78a5f75f32094b64befcd08b1890c05c6d6f64a33557289ebd3548bb1b7fe3',
  to: null,
  transactionHash: '0x485bacde24723e24c6eb278000c08cb95094f0c69e205aa39cfa9353f97db869',
  transactionIndex: 0 }

This points to omission in the JSON RPC wiki but the yellow paper clearly defines it.

@benjamincburns
Copy link
Contributor

That's good enough for me, then - we'll go ahead and add it.

@benjamincburns
Copy link
Contributor

From comparison of both objects you submitted, it seems we also don't respond with the root field.

@elenadimitrova
Copy link
Author

As per the JSON RPC this is actually correct as it states the transaction receipt returns either the root (pre Byzantium) or the status. The latter is returned in testrpc.

To enable that in parity we had to switch to 1.8.3-beta and turn the "eip658Transition": 0 parameter in config. We haven't tried in geth yet.

@benjamincburns
Copy link
Contributor

@elenadimitrova what version of geth was that output from above? It seems strange that it also has the root field but is missing the status field. Looks like I need to fire up a light client for myself...

@elenadimitrova
Copy link
Author

I'm on geth Version: 1.7.3-stable

@benjamincburns
Copy link
Contributor

Fixed in develop branch now. Will go out with latest release. Thanks for reporting this, @elenadimitrova!

@benjamincburns
Copy link
Contributor

@elenadimitrova I've actually just pushed out a beta release of ganache-core 3.0.0 and ganache-cli 7.0.0. This change will be in there amongst other major things like websockets support, fixing #417, and fixes for other various race condition and stability bugs, including the pesky "key not found" db error. I hope that you'll find it to be a much better experience.

@naddison36
Copy link

I've installed Ganache v1.2.0-beta.0 and I am still getting this problem when using Ethers.js
Should this fix be included in the v1.20 release?
Thanks

@benjamincburns
Copy link
Contributor

I caught up with @naddison36 offline, but for those reading along, this is in the v1.1.0-beta.1 release which is up now.

@naddison36
Copy link

Thanks, @benjamincburns. I can confirm that the new version fixed this problem

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants