Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Duplicate events reported by get_ethFilterChanges #2300

Closed
dabooz opened this issue Mar 7, 2016 · 2 comments
Closed

Duplicate events reported by get_ethFilterChanges #2300

dabooz opened this issue Mar 7, 2016 · 2 comments
Assignees
Milestone

Comments

@dabooz
Copy link

dabooz commented Mar 7, 2016

I am running in a private chain (v1.3.3), go ethereum. Sometimes (it is recreateable) eth_getFilterChanges will return duplicate events. I have a fair amount of detail for you, so hopefully the following is clear. I have 2 go threads, each thread is tracking a different contract address. Each thread wakes up every 15 seconds and calls eth_getFilterChanges. Sometimes (maybe once an hour?) the response to that API call will return duplicate events. That is, only 1 event has occurred on the blockchain but the API returns an array of 2 events, dup of each other. These are events that my contract creates as it runs. Here's something interesting. In one instance of the problem, both threads saw duplicate events in the EXACT SAME BLOCK. My 2 contracts do call each other, so it makes sense that both contracts will have an event in the same block but there shouldnt be duplicates. This seems interesting to me because this is happening from 2 different calls (remember I have 2 threads) to the eth_getFilterChanges API (using different filter ids), so this says to me that the duplicate events are not a problem with the API itself but seem to have something to do with the block state that the events are in.

Here's another interesting thing to note. I blew away my geth client's local state (db, ethash etc), restarted it, allowed it to resync to the chain, then I started my threads again. When the threads dumped events for the block in question (this time using eth_getFilterLogs), there were NO duplicate entries. So, whatever block state was confused previously, was resolved by the restart. Further, this also tells me that the dup events DO NOT exist in the blockchain, again it seems to have something to do with the local block state from which get_ethFilterChanges derives it's data.

In order to try to help resolve this issue, I created a scaled down testcase. I've attached a geth log, a log from my RPC client, my RPC client code, and my solidity file inside the zip file. You probably wont be able to run the program directly because I havent provided all the other libraries but you will be able to clearly see what's going on in the testcase.

event-defect.zip

@obscuren
Copy link
Contributor

obscuren commented Mar 8, 2016

Thanks for the detailed report. Will take a look

@dabooz
Copy link
Author

dabooz commented Mar 8, 2016

Reran my test on 1.3.4 this morning and I can still recreate the dup event problem.

@obscuren obscuren added this to the 1.4.0 milestone Mar 14, 2016
@obscuren obscuren self-assigned this Mar 14, 2016
maoueh pushed a commit to streamingfast/go-ethereum that referenced this issue Apr 17, 2024
* ci: temp enable blobtx branch ci run;
* Switch ON blobpool & ensure Cancun hardfork can occur (ethereum#2223)
* feat: support blob storage & miscs; (ethereum#2229)
* chainconfig: use cancun fork for BSC;
* feat: fill WithdrawalsHash when BSC enable cancun fork;
* rawdb: support to CRUD blobs;
* freezer: support to freeze block blobs;
* blockchain: add blob cache & blob query helper;
* freezer: refactor addition table logic, add uts;
* blobexpiry: add more extra expiry time, and logs;
* parlia: implement IsDataAvailable function;
* blob: refactor blob transfer logic;
* blob: support config blob extra reserve;
* blockchian: support to import block with blob & blobGasFee; (ethereum#2260)
* blob: implement min&max gas price logic;
* blockchian: support import side chain;
* blobpool: reject the banned address;
* blockchain: add chasing head for DA check;
* params: update blob related config;
* blockchain: opt data available checking performance;
* params: modify blob related params;
* gasprice: support BEP-336 blob gas price calculate;
* blobTx: mining + brodcasting (ethereum#2253)
* blobtx mining pass (ethereum#2282)
* Sidecar fetching changes for 4844 (ethereum#2283)
* ci: temp enable blobtx branch ci run;
* Switch ON blobpool & ensure Cancun hardfork can occur (ethereum#2223)
* feat: support blob storage & miscs; (ethereum#2229)
* chainconfig: use cancun fork for BSC;
feat: fill WithdrawalsHash when BSC enable cancun fork;
* rawdb: support to CRUD blobs;
* freezer: support to freeze block blobs;
* blockchain: add blob cache & blob query helper;
* freezer: refactor addition table logic, add uts;
* blobexpiry: add more extra expiry time, and logs;
* parlia: implement IsDataAvailable function;
* blob: refactor blob transfer logic;
* blob: support config blob extra reserve;
* blockchian: support to import block with blob & blobGasFee; (ethereum#2260)
* blob: implement min&max gas price logic;
* blockchian: support import side chain;
* blobpool: reject the banned address;
* blockchain: add chasing head for DA check;
* params: update blob related config;
* blockchain: opt data available checking performance;
* params: modify blob related params;
* gasprice: support BEP-336 blob gas price calculate;
* fix failed check for WithdrawalsHash (ethereum#2276)
* eth: include sidecars in fitering of body
* core: refactor sidecars name
* eth: sidecars type refactor
* core: remove extra from bad merge
* eth: fix handlenewblock test after merge
* Implement eth_getBlobSidecars && eth_getBlobSidecarByTxHash (ethereum#2286)
* execution: add blob gas fee reward to system;
* syncing: support blob syncing & DA checking;
* naming: rename blobs to sidecars;
* fix the semantics of WithXXX (ethereum#2293)
* config: reduce sidecar cache to 1024 and rename (ethereum#2297)
* fix: Withdrawals turn into empty from nil when BlockBody has Sidecars (ethereum#2301)
* internal/api_test: add test case for eth_getBlobSidecars && eth_getBlobSidecarByTxHash (ethereum#2300)
* consensus/misc: rollback CalcBlobFee (ethereum#2306)
* flags: add new flags to override blobs' params;
* freezer: fix blob ancient save error;
* blobsidecar: add new sidecar struct with metadata; (ethereum#2315)
* core/rawdb: optimize write block with sidecars (ethereum#2318)
* core: more check for validity of sidecars
* mev: add TxIndex for mev bid (ethereum#2325)
* remove useless Config() (ethereum#2326)
* fix WithSidecars (ethereum#2327)
* fix: fix mined block sidecar issue; (ethereum#2328)
* fix WithSidecars (ethereum#2329)

---------
Co-authored-by: GalaIO <[email protected]>
Co-authored-by: buddho <[email protected]>
Co-authored-by: Satyajit Das <[email protected]>
Co-authored-by: Eric <[email protected]>
Co-authored-by: zzzckck <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants