0

We would like to get all public keys, account and balances for a particular ERC20 contract.

We understand we will need to scan the entire ethereum blockchain to do this.

We also understand that a public key is not visible unless the owner has made one transaction with it.

We have created a geth node which is fully synced. When we hit this node withe following RPC call (for the genesis block), it returns no transactions:

{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x0", false],"id":1}

Result

{
"jsonrpc": "2.0",
"id": 1,
"result":{
"difficulty": "0x400000000",
"extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
"gasLimit": "0x1388",
"gasUsed": "0x0",
"hash": "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"miner": "0x0000000000000000000000000000000000000000",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x0000000000000042",
"number": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x21c",
"stateRoot": "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544",
"timestamp": "0x0",
"totalDifficulty": "0x400000000",
"transactions":[],
"transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles":[]
}
}

Transactions is empty.

But when we scan block 0 thusly: https://etherscan.io/block/0

we get many transactions back:

Block Information
  Height:      0   
  TimeStamp:    1056 days 22 hrs ago (Jul-30-2015 03:26:13 PM +UTC)
  Transactions: 8893 transactions and 0 contract internal transactions in this block
  Hash: 0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3

If etherscan is "faking" these 8893 transactions, where is it pulling them from?

0

No, your node is returning the right list of transactions for the Ethereum genesis block. You can't have actual transactions in the genesis block. By definition, a transaction has to be brought into existence either by being called by an externally owned account, or another contract; but since there's 'nothing' only until genesis block comes into existence, you can't have any transactions in the genesis block (number 0).

Your second question is how does etherscan has it, and my guess is that it has something to do with genesis_block.json file. You can define this file to contain things or pseudo-transactions (or a useful case would be to capture the state of a previous blockchain) in your genesis block. With regard to the genesis_block.json file, you can read more here. But having a different genesis_block.json and being able to sync with the network is still very surprising to me.

Needless to mention, I have two local nodes (geth and Parity) and as expected, they also return empty transaction list for block 0, and so does this explorer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.