Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save srghma/c8e92bf400d65939f2c7e035199500c8 to your computer and use it in GitHub Desktop.
Save srghma/c8e92bf400d65939f2c7e035199500c8 to your computer and use it in GitHub Desktop.

run geth using

geth --datadir ./myDataDir --dev --http --http.api web3,eth,debug,personal,net --http.corsdomain "https://remix.ethereum.org,http://remix.ethereum.org" --vmdebug

in https://remix.ethereum.org deploy contract

contract MyContract {
  event MyEvent(uint256 indexed foo, uint256 bar);
  event MyEventAnonymous(uint256 indexed foo, uint256 bar) anonymous;

  function doWork() public {
    emit MyEvent(1, 2);
    emit MyEventAnonymous(1, 2);
  }
}

in node --experimental-repl-await --unhandled-rejections=strict

paste

ethers = require("ethers")
filter = { fromBlock: "earliest", toBlock: "latest" }
provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545")
filterId = await provider.send("eth_newFilter", [filter])
# click on `doWork`
logs = await provider.send("eth_getFilterChanges", [filterId])
console.log(logs)

will output

[
  {
    address: '0x4f816147c06134e5dfce9c5a1b20d5cbafd85ab2',
    topics: [
      '0x06208c2a7c81ce0338f4e7c431f49476c450bad6ce52ef2b4e186db4a1fbcaf4',
      '0x0000000000000000000000000000000000000000000000000000000000000001'
    ],
    data: '0x0000000000000000000000000000000000000000000000000000000000000002',
    blockNumber: '0x5',
    transactionHash: '0xda265c2f3f3272b99fbbf63ebb8f817fab6d9a73d85b4be94515833887e17043',
    transactionIndex: '0x0',
    blockHash: '0x9edd9c96b8e5a8d1bbc5d385c62f1287687c1f2ea280ee532e0a74a4a8623a7a',
    logIndex: '0x0',
    removed: false
  },
  {
    address: '0x4f816147c06134e5dfce9c5a1b20d5cbafd85ab2',
    topics: [
      '0x0000000000000000000000000000000000000000000000000000000000000001'
    ],
    data: '0x0000000000000000000000000000000000000000000000000000000000000002',
    blockNumber: '0x5',
    transactionHash: '0xda265c2f3f3272b99fbbf63ebb8f817fab6d9a73d85b4be94515833887e17043',
    transactionIndex: '0x0',
    blockHash: '0x9edd9c96b8e5a8d1bbc5d385c62f1287687c1f2ea280ee532e0a74a4a8623a7a',
    logIndex: '0x1',
    removed: false
  }
]

Info about rpc

https://eth.wiki/json-rpc/API https://www.quicknode.com/docs/ethereum

Libraries

https://github.com/ChainSafe/web3.js https://github.com/ethers-io/ethers.js

Examples of how to make subscriptions

https://docs.ethers.io/v5/api/providers/provider/#Provider--events https://geth.ethereum.org/docs/rpc/pubsub https://openethereum.github.io/JSONRPC-eth_pubsub-module (forgets about some of subscription types, uses wscat)

npm install -g wscat
wscat -c localhost:8546

Subscription is ethers.js

WebsocketProvider inherits from JsonRpcProvider inherits from BaseProvider

  1. on on new Event(..., listenerFunction) -> _startEvent will throw event IF it's already in cache (e.g. for transactions)
  2. on emit the Event is found by getEventTag -> event.listener.apply(args)
ethers = require("ethers")
provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545")
// earliest = block number 0
// latest = block number -1
// pending = block number -2
all__since_creation__filter_id = await provider.send("eth_newFilter", [{ fromBlock: "earliest", toBlock: "latest" }])
new_block__since_creation__filter_id = await provider.send("eth_newBlockFilter")
new_pending_transaction__since_creation__filter_id = await provider.send("eth_newPendingTransactionFilter")
// all__since_creation__filter_id_2 = await provider.send("eth_newFilter", [{ fromBlock: "earliest", toBlock: "latest" }])
// new_block__since_creation__filter_id_2 = await provider.send("eth_newBlockFilter")
// new_pending_transaction__since_creation__filter_id_2 = await provider.send("eth_newPendingTransactionFilter")
// all__since_creation__filter_id_3 = await provider.send("eth_newFilter", [{ fromBlock: "earliest", toBlock: "latest" }])
// new_block__since_creation__filter_id_3 = await provider.send("eth_newBlockFilter")
// new_pending_transaction__since_creation__filter_id_3 = await provider.send("eth_newPendingTransactionFilter")
// all__since_creation__filter_id_4 = await provider.send("eth_newFilter", [{ fromBlock: "earliest", toBlock: "latest" }])
// new_block__since_creation__filter_id_4 = await provider.send("eth_newBlockFilter")
// new_pending_transaction__since_creation__filter_id_4 = await provider.send("eth_newPendingTransactionFilter")
await provider.send("eth_getFilterLogs", [all__since_creation__filter_id]) // []
await provider.send("eth_getLogs", [{ fromBlock: "earliest", toBlock: "latest" }]) // []
await provider.send("eth_getFilterLogs", [new_block__since_creation__filter_id]) // error: Error: filter not found
await provider.send("eth_getFilterLogs", [new_pending_transaction__since_creation__filter_id]) // error: Error: filter not found
await provider.send("eth_getFilterChanges", [all__since_creation__filter_id]) // []
await provider.send("eth_getFilterChanges", [new_block__since_creation__filter_id]) // []
await provider.send("eth_getFilterChanges", [new_pending_transaction__since_creation__filter_id]) // []
console.log(`Before deploying contract: latestBlock =`, await provider.send("eth_getBlockByNumber", ["latest", true])) // (cursor, includeFullTransactionsOrOnlyHash)
// Before deploying contract: latestBlock = {
// baseFeePerGas: '0x3b9aca00',
// difficulty: '0x1',
// extraData: '0x0000000000000000000000000000000000000000000000000000000000000000e90daf5fe0a9de0f632906912f62fe9afaf976580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
// gasLimit: '0xaf79e0',
// gasUsed: '0x0',
// hash: '0xc946ab0c8bfdb76f6b775c08b3a542a28c5b916e567397bc5e969dea8d852ead',
// logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
// miner: '0x0000000000000000000000000000000000000000',
// mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
// nonce: '0x0000000000000000',
// number: '0x0',
// parentHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
// receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
// sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
// size: '0x273',
// stateRoot: '0xfd65234500b2a6577d0b68ae48bfb15e7dc363389c865cdca33b3fef407604b8',
// timestamp: '0x0',
// totalDifficulty: '0x1',
// transactions: [],
// transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
// uncles: []
// }
// click on deploy
console.log(`After deploying contract: latestBlock =`, await provider.send("eth_getBlockByNumber", ["latest", true]))
// After deploying contract: latestBlock = {
// baseFeePerGas: '0x342770c0',
// difficulty: '0x2',
// extraData: '0xd883010a08846765746888676f312e31362e38856c696e757800000000000000eec73ddbe0fc759d66e612a6e1e93307d983814e45d4c1bc0ee231701a43df9a5389b265e4c82abd7a7e4d62a7e00e5c2f955ae18fac453e99382d179946960a01',
// gasLimit: '0xaf4e03',
// gasUsed: '0x1d047',
// hash: '0x7384f28b4fa17aba24ca055cf4d5542d977fee36bf904eb043303a48026e4520',
// logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
// miner: '0xb53d3a9ad5fe6d64d7b257fa701e457d7e58b869',
// mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
// nonce: '0x0000000000000000',
// number: '0x1',
// parentHash: '0x2adacf084c07dbf0eae3f4ea3eff3936133532086a45a855ac1bd726a4c7c0f5',
// receiptsRoot: '0xaa864d39af58c37731dcb0de8a26b87dc973e8730ded0bcc0c5543488f66b8ec',
// sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
// size: '0x41a',
// stateRoot: '0xcef4557315772a87e09bd42605367890f486e1680b1b920637d24f1f460a3bde',
// timestamp: '0x622e3d1d',
// totalDifficulty: '0x3',
// transactions: [
// {
// blockHash: '0x7384f28b4fa17aba24ca055cf4d5542d977fee36bf904eb043303a48026e4520',
// blockNumber: '0x1',
// from: '0xb53d3a9ad5fe6d64d7b257fa701e457d7e58b869',
// gas: '0x1d047',
// gasPrice: '0xc92a69c0',
// maxFeePerGas: '0x10c388d00',
// maxPriorityFeePerGas: '0x9502f900',
// hash: '0x930e016cd4eb8cc93e2c4983cb69963a4bb6198d8cf16b318771e8c2007b47c8',
// input: '0x608060405234801561001057600080fd5b5061012f806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80632630dd3a14602d575b600080fd5b60336035565b005b60011515600a7f9ea39178d43afac9c279861cb1e4c9fa05a1f17d37bfcb737ba9edfb7f9c0637600b6000604051606c92919060ae565b60405180910390a360011515600a600b6000604051608a92919060ae565b60405180910390a2565b609b8160d3565b82525050565b60a88160e9565b82525050565b600060408201905060c1600083018560a1565b60cc60208301846094565b9392505050565b60008115159050919050565b6000819050919050565b600060f28260df565b905091905056fea264697066735822122015fe4ab98637493293e05ae872fa688e4a87630c3ddd60870a534c1515e1654764736f6c63430008070033',
// nonce: '0x0',
// to: null,
// transactionIndex: '0x0',
// value: '0x0',
// type: '0x2',
// accessList: [],
// chainId: '0x539',
// v: '0x0',
// r: '0xf598f5e59c68cce2a06ff303011e8c15dcf851a88640b13354280f836b12afe3',
// s: '0xd80c5c12aeb90b9936b621b1c06156d88f3b16377271b911553dd6fb1bbdee0'
// }
// ],
// transactionsRoot: '0x78bcff42a8175ba7fcd02d7088bc278d2bb04e369f4b7aab931a036607084cdb',
// uncles: []
// }
await provider.send("eth_getFilterLogs", [all__since_creation__filter_id]) // []
await provider.send("eth_getLogs", [{ fromBlock: "earliest", toBlock: "latest" }]) // []
await provider.send("eth_getFilterChanges", [all__since_creation__filter_id]) // []
await provider.send("eth_getFilterChanges", [new_block__since_creation__filter_id]) // ['0x7384f28b4fa17aba24ca055cf4d5542d977fee36bf904eb043303a48026e4520']
await provider.send("eth_getFilterChanges", [new_pending_transaction__since_creation__filter_id]) // ['0x930e016cd4eb8cc93e2c4983cb69963a4bb6198d8cf16b318771e8c2007b47c8']
await provider.send("eth_getFilterChanges", [new_block__since_creation__filter_id]) // []
await provider.send("eth_getFilterChanges", [new_pending_transaction__since_creation__filter_id]) // []
// click on `doWork`
console.log(`After clicking on button: latestBlock =`, await provider.send("eth_getBlockByNumber", ["latest", true]))
// After clicking on button: latestBlock = {
// baseFeePerGas: '0x2dc50aa7',
// difficulty: '0x2',
// extraData: '0xd883010a08846765746888676f312e31362e38856c696e75780000000000000023398ef9a7df2761d413d6188f31c9a46c66de9b6cfda1557264c1c48832c9ce106568c809de4a5fb373a1269490dbe65740d725997da94d31cb81f5fc37251401',
// gasLimit: '0xaf2231',
// gasUsed: '0x63b1',
// hash: '0x0256b3247bdcfb3e5e46c1eae53910cbf2d30d72b8e9c9f069f81eb6947effe3',
// logsBloom: '0x00000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000040000000020082000040000000000000000000000000000000000000000000000040000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000200000000000000000',
// miner: '0xb53d3a9ad5fe6d64d7b257fa701e457d7e58b869',
// mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
// nonce: '0x0000000000000000',
// number: '0x2',
// parentHash: '0x7384f28b4fa17aba24ca055cf4d5542d977fee36bf904eb043303a48026e4520',
// receiptsRoot: '0xa51bb70c80edfc7d768f9bd7c5c49d91b15e1ab7b4bd42e3bc823db8c6070034',
// sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
// size: '0x2db',
// stateRoot: '0x4133e507b45e6f85f2e99770f2631d5a2f3390b8052b09c0bf81580770b6bd87',
// timestamp: '0x622e3e56',
// totalDifficulty: '0x5',
// transactions: [
// {
// blockHash: '0x0256b3247bdcfb3e5e46c1eae53910cbf2d30d72b8e9c9f069f81eb6947effe3',
// blockNumber: '0x2',
// from: '0xb53d3a9ad5fe6d64d7b257fa701e457d7e58b869',
// gas: '0x63b1',
// gasPrice: '0xc2c803a7',
// maxFeePerGas: '0xfd51da80',
// maxPriorityFeePerGas: '0x9502f900',
// hash: '0xa3cfab242a6ffab1725a71571b313e93f3016805469484051e0c7873c4fdebdf',
// input: '0x2630dd3a',
// nonce: '0x1',
// to: '0x64a256fdd231c06bb76e67ee03619df1f7db3ff1',
// transactionIndex: '0x0',
// value: '0x0',
// type: '0x2',
// accessList: [],
// chainId: '0x539',
// v: '0x1',
// r: '0x6250f980ef4a3cd42b2e86cfa901c87f2e58fb95c420d0a0ec61327fbdce3958',
// s: '0x6b80fba5befa694422d86a0dccedbdff23868f73af7a1ce3bda10e98612a69f5'
// }
// ],
// transactionsRoot: '0x3340c315193fa49539f40256e06c28afe3b1dd3cb76b48ac3a85a05c0040ff80',
// uncles: []
// }
await provider.send("eth_getTransactionByHash", ["0xa3cfab242a6ffab1725a71571b313e93f3016805469484051e0c7873c4fdebdf"]) // same
await provider.send("eth_getFilterLogs", [all__since_creation__filter_id])
// [
// {
// address: '0x64a256fdd231c06bb76e67ee03619df1f7db3ff1',
// topics: [
// '0x9ea39178d43afac9c279861cb1e4c9fa05a1f17d37bfcb737ba9edfb7f9c0637',
// '0x000000000000000000000000000000000000000000000000000000000000000a', // 10
// '0x0000000000000000000000000000000000000000000000000000000000000001' // true
// ],
// data: '0x000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000', // 11 + false
// blockNumber: '0x2',
// transactionHash: '0xa3cfab242a6ffab1725a71571b313e93f3016805469484051e0c7873c4fdebdf',
// transactionIndex: '0x0',
// blockHash: '0x0256b3247bdcfb3e5e46c1eae53910cbf2d30d72b8e9c9f069f81eb6947effe3',
// logIndex: '0x0',
// removed: false
// },
// {
// address: '0x64a256fdd231c06bb76e67ee03619df1f7db3ff1',
// topics: [
// '0x000000000000000000000000000000000000000000000000000000000000000a', // 10
// '0x0000000000000000000000000000000000000000000000000000000000000001' // true
// ],
// data: '0x000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000', // 11 + false
// blockNumber: '0x2',
// transactionHash: '0xa3cfab242a6ffab1725a71571b313e93f3016805469484051e0c7873c4fdebdf',
// transactionIndex: '0x0',
// blockHash: '0x0256b3247bdcfb3e5e46c1eae53910cbf2d30d72b8e9c9f069f81eb6947effe3',
// logIndex: '0x1',
// removed: false
// }
// ]
await provider.send("eth_getLogs", [{ fromBlock: "earliest", toBlock: "latest" }]) // ....same, 2 logs
await provider.send("eth_getFilterChanges", [all__since_creation__filter_id]) // ...same, 2 logs
await provider.send("eth_getFilterChanges", [new_block__since_creation__filter_id]) // ['0x0256b3247bdcfb3e5e46c1eae53910cbf2d30d72b8e9c9f069f81eb6947effe3']
await provider.send("eth_getFilterChanges", [new_pending_transaction__since_creation__filter_id]) // ['0xa3cfab242a6ffab1725a71571b313e93f3016805469484051e0c7873c4fdebdf']
await provider.send("eth_getFilterChanges", [all__since_creation__filter_id]) // []
await provider.send("eth_getFilterChanges", [new_block__since_creation__filter_id]) // []
await provider.send("eth_getFilterChanges", [new_pending_transaction__since_creation__filter_id]) // []
// click on `doWork` second time
console.log(`After clicking on button 2: latestBlock =`, await provider.send("eth_getBlockByNumber", ["latest", true]))
// After clicking on button 2: latestBlock = {
// baseFeePerGas: '0x2812ecbf',
// difficulty: '0x2',
// extraData: '0xd883010a08846765746888676f312e31362e38856c696e7578000000000000003a2f6eb79fcea8ea2d5ad042383f3fdf580116cce9fabf8f4e8527373e1c3745342449a22a069f5712c0447cd571cafbacaf2baaa903d107baccea68fbfc344801',
// gasLimit: '0xaef66a',
// gasUsed: '0x63b1',
// hash: '0x35e346ed67e582f1578bda9b47ae3f576351cbbd909b849c962c17116a06872c',
// logsBloom: '0x00000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000040004000020002000040000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000010000000000000000000000000000000000000000000002000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000',
// miner: '0x488fc8ceb547209d3eb25aff5c3ac3c2ca563802',
// mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
// nonce: '0x0000000000000000',
// number: '0x3',
// parentHash: '0x02fa78502931b6a4f9396d800b6bd00860b95dd8af69c69bb3ca8c1a5be0de13',
// receiptsRoot: '0x71a9575e7d7695865055cc74eacc46daef3f47498fca2ae193375b88a395cee1',
// sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
// size: '0x2db',
// stateRoot: '0x300fb1d71eb37415a959bc73c3428908d40a8040398d5c6b1e9b5c7cc7db9b79',
// timestamp: '0x622e4280',
// totalDifficulty: '0x7',
// transactions: [
// {
// blockHash: '0x35e346ed67e582f1578bda9b47ae3f576351cbbd909b849c962c17116a06872c',
// blockNumber: '0x3',
// from: '0x488fc8ceb547209d3eb25aff5c3ac3c2ca563802',
// gas: '0x63b1',
// gasPrice: '0xbd15e5bf',
// maxFeePerGas: '0xf08d0e4e',
// maxPriorityFeePerGas: '0x9502f900',
// hash: '0xe336f051bc39ff12779f8ca1050e8276a9f608dfb2a7613303c8f3adc9d44fa8',
// input: '0x2630dd3a',
// nonce: '0x2',
// to: '0x38efe6192a84f736f685f291a868c3fcb69bab07',
// transactionIndex: '0x0',
// value: '0x0',
// type: '0x2',
// accessList: [],
// chainId: '0x539',
// v: '0x1',
// r: '0x147706c714896d2e27354c9924c5fe9a8e0715579d26e7dd961a22dee2be8ab8',
// s: '0x6e30213801f4069c2af6b252a8e1060dcb00c7945903f7fb2fa5cfe7acbec7e6'
// }
// ],
// transactionsRoot: '0x93449a97a6f92c914294a561fde2ec17cc25daaa126a4123345901ac0dbfa33a',
// uncles: []
// }
await provider.send("eth_getFilterLogs", [all__since_creation__filter_id])
// [
// {
// address: '0x38efe6192a84f736f685f291a868c3fcb69bab07',
// topics: [
// '0x9ea39178d43afac9c279861cb1e4c9fa05a1f17d37bfcb737ba9edfb7f9c0637',
// '0x000000000000000000000000000000000000000000000000000000000000000a',
// '0x0000000000000000000000000000000000000000000000000000000000000001'
// ],
// data: '0x000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000',
// blockNumber: '0x2',
// transactionHash: '0xf9840beb5f37cc400cd2b23191e95c9f248e1f1f3ec0b2f40672d6255888f52b',
// transactionIndex: '0x0',
// blockHash: '0x02fa78502931b6a4f9396d800b6bd00860b95dd8af69c69bb3ca8c1a5be0de13',
// logIndex: '0x0',
// removed: false
// },
// {
// address: '0x38efe6192a84f736f685f291a868c3fcb69bab07',
// topics: [
// '0x000000000000000000000000000000000000000000000000000000000000000a',
// '0x0000000000000000000000000000000000000000000000000000000000000001'
// ],
// data: '0x000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000',
// blockNumber: '0x2',
// transactionHash: '0xf9840beb5f37cc400cd2b23191e95c9f248e1f1f3ec0b2f40672d6255888f52b',
// transactionIndex: '0x0',
// blockHash: '0x02fa78502931b6a4f9396d800b6bd00860b95dd8af69c69bb3ca8c1a5be0de13',
// logIndex: '0x1',
// removed: false
// },
// {
// address: '0x38efe6192a84f736f685f291a868c3fcb69bab07',
// topics: [
// '0x9ea39178d43afac9c279861cb1e4c9fa05a1f17d37bfcb737ba9edfb7f9c0637',
// '0x000000000000000000000000000000000000000000000000000000000000000a',
// '0x0000000000000000000000000000000000000000000000000000000000000001'
// ],
// data: '0x000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000',
// blockNumber: '0x3',
// transactionHash: '0xe336f051bc39ff12779f8ca1050e8276a9f608dfb2a7613303c8f3adc9d44fa8',
// transactionIndex: '0x0',
// blockHash: '0x35e346ed67e582f1578bda9b47ae3f576351cbbd909b849c962c17116a06872c',
// logIndex: '0x0',
// removed: false
// },
// {
// address: '0x38efe6192a84f736f685f291a868c3fcb69bab07',
// topics: [
// '0x000000000000000000000000000000000000000000000000000000000000000a',
// '0x0000000000000000000000000000000000000000000000000000000000000001'
// ],
// data: '0x000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000000',
// blockNumber: '0x3',
// transactionHash: '0xe336f051bc39ff12779f8ca1050e8276a9f608dfb2a7613303c8f3adc9d44fa8',
// transactionIndex: '0x0',
// blockHash: '0x35e346ed67e582f1578bda9b47ae3f576351cbbd909b849c962c17116a06872c',
// logIndex: '0x1',
// removed: false
// }
// ]
await provider.send("eth_getLogs", [{ fromBlock: "earliest", toBlock: "latest" }]) // ....same, 4 logs
await provider.send("eth_getFilterChanges", [all__since_creation__filter_id]) // ...same, 2 logs from block number 3
await provider.send("eth_getFilterChanges", [new_block__since_creation__filter_id]) // ['0x35e346ed67e582f1578bda9b47ae3f576351cbbd909b849c962c17116a06872c']
await provider.send("eth_getFilterChanges", [new_pending_transaction__since_creation__filter_id]) // ['0xe336f051bc39ff12779f8ca1050e8276a9f608dfb2a7613303c8f3adc9d44fa8']
await provider.send("eth_getFilterChanges", [all__since_creation__filter_id]) // []
await provider.send("eth_getFilterChanges", [new_block__since_creation__filter_id]) // []
await provider.send("eth_getFilterChanges", [new_pending_transaction__since_creation__filter_id]) // []
await provider.send("eth_getFilterLogs", [new_block__since_creation__filter_id]) // error
await provider.send("eth_getFilterLogs", [new_pending_transaction__since_creation__filter_id]) // error
//////////////////////
/////// SUMMARY //////
//////////////////////
//
// 1.
// Q: is the "eth_getFilterLogs" counded as "polling", i.e. will it make "eth_getFilterChanges" return []?
// A: NO, only "eth_getFilterChanges" is counted as polling
@srghma
Copy link
Author

srghma commented Mar 16, 2022

how to name classes

naming

  1. IF class has a generic arguments THEN
class GenericMyClass where genericMyActionImplementation = ...
-- or
class GenericMyClass where toGenericMyActionImplementation = ...; fromGenericMyActionImplementation = ...
  1. after the to / from functions the function name toGenericMyAction
genericMyAction = from >>> genericMyActionImplementation
-- or
toGenericMyActionImplementation = from >>> toGenericMyAction

@srghma
Copy link
Author

srghma commented May 9, 2022

????

ethers = require('ethers')
p = new ethers.providers.WebSocketProvider('ws://172.17.0.2:8546')
p.on('block', (...args) => console.log(args))

provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545")

new_pending_transaction__since_creation__filter_id = await provider.send("eth_newPendingTransactionFilter")
new_block__since_creation__filter_id = await provider.send("eth_newBlockFilter")
all__since_creation__filter_id = await provider.send("eth_newFilter", [{ fromBlock: "earliest", toBlock: "latest" }])

ethers = require('ethers')
provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545")
await provider.send("eth_getLogs", [{ fromBlock: "earliest", toBlock: "latest" }])


// TODO 1:
// since of
> await provider.send("eth_getLogs", [{ fromBlock: "latest", toBlock: "latest" }])
[
  {
    address: '0x98f2e13551c0f7a34db0d318a5f54f6ba2845780',
    topics: [
      '0xa32bc18230dd172221ac5c4821a5f1f1a831f27b1396d244cdd891c58f132435'
    ],
    data: '0x0000000000000000000000000000000000000000000000000000000000000002',
    blockNumber: '0x3',
    transactionHash: '0x8deb1b9e39b5d1be4d1ac1302e308073e9edc08df65feee96e60a85ff2df8f64',
    transactionIndex: '0x0',
    blockHash: '0xd18792aa1bed3d5c69fc387029cce25e78e86435dd4da5b05e3d8ad901efe3dc',
    logIndex: '0x0',
    removed: false
  }
]

// > await provider.send("eth_getLogs", [{ fromBlock: "earliest", toBlock: "earliest" }])
// []

// I propose to change the `Cursor = Latest | BN BigNumber` to `EventCoursor = LatestBlockWhenEventIsCreated | BlockNumber BigNumber` and `Tag = Latest | Earliest | Pending`

// ------------------------

/// Q: get_transactionReceipt
// does it wait infinitely until transaction succeeds?
// 2. how it looks in /graphql ?%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment