[Ethereum] How to decode logsBloom

go-ethereum

Here is one block of my private blockchain

> eth.getBlock(63)
{
  difficulty: 134290,
  extraData: "0xd783010506846765746887676f312e372e33856c696e7578",
  gasLimit: 4038569465,
  gasUsed: 23114,
  hash: "0xa5d727b111f123e11b6dc5d271697b82a6238f83ab342088e0a1538afce7862d",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000004000000000000200000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x4c558858289c4180d0d2b994a4e009e078731191",
  mixHash: "0xba14e2b605aeacfa68f8345a9e30dd2d37dc4f3f4eba9e8ac8e744ded90ae566",
  nonce: "0x38de415ea086671a",
  number: 63,
  parentHash: "0xa7186a94afe92f0c0fedd1b8aa96e9aa92321e63a0b79d3f68ffe888bfb0239a",
  receiptsRoot: "0x303d0444bf28744722fd53a46144ead61f3515a82b9640603028ebf91f212126",
  sha3Uncles: "0x3633e886ef643c067d6fb7bfc1d2a6bf3eba939bf3cbb522f3894779ac1dd090",
  size: 1709,
  stateRoot: "0xcd4abaafec19113743df0235f06482f3a0b49e546e708055aa7a2382b232601e",
  timestamp: 1484750319,
  totalDifficulty: 8362288,
  transactions: ["0x1bd5825eac201f0f0e1e2c4a9ed5de026edc3f7fb02c4b912ca55c0f50a021fc"],
  transactionsRoot: "0xbaf6819c91ed625a97e974bbc4efd5808970b3b4991b1e2aca0dd537750aafc7",
  uncles: ["0x6f0a9ab0e468112fdcbbecd81ebebf929ca9a38e6a4c864e8164309d3bed42c6", "0xb4dd60c91ab18de3f72ba27ab5934bec66ab01798d18b599d1d298bd29e56204"]
}

How to decode the logsBloom?

Best Answer

There's not really anything to "decode".

A block or transaction bloom filter is a 2048 bit string. Every log that is emitted in a transaction has 0-4 topics. Each topic will set 3 bits to '1' based on the hash of the topic. Later, if you want to know whether a block or transaction has a given topic in one of its logs, you can check to see if those same 3 bits are set. If they aren't set, you know the topic won't be found in any transaction logs. If they are set, you can guess that they probably will be, but you still need to look at the transaction logs to be sure, because bloom filters have a risk of false positives.

Related Topic