* eth/protocols/snap: fix problems due to idle-but-busy peers (#25651)
* eth/protocols/snap: throttle trie heal requests when peers DoS us (#25666)
* eth/protocols/snap: throttle trie heal requests when peers DoS us
* eth/protocols/snap: lower heal throttle log to debug
Co-authored-by: Martin Holst Swende <martin@swende.se>
* eth/protocols/snap: fix comment
Co-authored-by: Martin Holst Swende <martin@swende.se>
* trie: check childrens' existence concurrently for snap heal (#25694)
* eth: fix a rare datarace on CHT challenge reply / shutdown (#25831)
* eth/filters: change filter block to be by-ref (#26054)
This PR changes the block field in the filter to be a pointer, to disambiguate between empty hash and no hash
* rpc: handle wrong HTTP batch response length (#26064)
* params: release geth v1.10.26 stable
* V1.10.25 statediff v4 wip (#275)
* Statediff Geth
Handle conflicts (#244)
* Handle conflicts
* Update go mod file versions
* Make lint changes
Disassociate block number from the indexer object
Update ipld-eth-db ref
Refactor builder code to make it reusable
Use prefix comparison for account selective statediffing
Update builder unit tests
Add mode to write to CSV files in statediff file writer (#249)
* Change file writing mode to csv files
* Implement writer interface for file indexer
* Implement option for csv or sql in file mode
* Close files in CSV writer
* Add tests for CSV file mode
* Implement CSV file for watched addresses
* Separate test configs for CSV and SQL
* Refactor common code for file indexer tests
Update indexer to include block hash in receipts and logs (#256)
* Update indexer to include block hash in receipts and logs
* Upgrade ipld-eth-db image in docker-compose to run tests
Use watched addresses from direct indexing params by default while serving statediff APIs (#262)
* Use watched addresses from direct indexing params in statediff APIs by default
* Avoid using indexer object when direct indexing is off
* Add nil check before accessing watched addresses from direct indexing params
Rebase missed these changes needed at 1.10.20
Flags cleanup for CLI changes and linter complaints
Linter appeasements to achieve perfection
enforce go 1.18 for check (#267)
* enforce go 1.18 for check
* tests on 1.18 as well
* adding db yml for possible change in docker-compose behavior in yml parsing
Add indexer tests for handling non canonical blocks (#254)
* Add indexer tests for header and transactions in a non canonical block
* Add indexer tests for receipts in a non-canonical block and refactor
* Add indexer tests for logs in a non-canonical block
* Add indexer tests for state and storage nodes in a non-canonical block
* Add indexer tests for non-canonical block at another height
* Avoid passing address of a pointer
* Update refs in GitHub workflow
* Add genesis file path to stack-orchestrator config in GitHub workflow
* Add descriptive comments
fix non-deterministic ordering in unit tests
Refactor indexer tests to avoid duplicate code (#270)
* Refactor indexer tests to avoid duplicate code
* Refactor file mode indexer tests
* Fix expected db stats for sqlx after tx closure
* Refactor indexer tests for legacy block
* Refactor mainnet indexer tests
* Refactor tests for watched addressess methods
* Fix query in legacy indexer test
rebase and resolve onto 1.10.23... still error out of index related to GetLeafKeys
changed trie.Commit behavior was subtle about not not flushing to disk without an Update
* no merge nodeset throws nil
* linter appeasement
Cerc refactor (#281)
* first pass cerc refactor in cicd
* 1st attempt to publish binary to git.vdb.to from github release
* docker build step mangled
* docker build step mangled
* wrong username for docker login... which still succeeded
* circcicd is not cerccicd
* bad hostname
adding manual override of binary publish to git.vdb.to for development/emergency (#282)
Cerc io publish fix (#284)
* adding manual override of binary publish to git.vdb.to for development/emergency
* Create manual_binary_publish.yaml (#283)
* github did not pick up workflow added outside of its UI and I still cannot spell cerc right
rawdb helper functions for cold levelDB sync export
Jenkins reborn (#285)
* initial build and output testing... lots of trial and error
* clean up for working (but failing) unit test geth with ubuntu foundation image
* linter problem on comments in version
* trying linter appeasement with gofmt output on versions.go
Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Péter Szilágyi <peterke@gmail.com>
Co-authored-by: Jordan Krage <jmank88@gmail.com>
Co-authored-by: Felix Lange <fjl@twurst.com>
This adds a cache for block logs which is shared by all filters. The cache
size of is configurable using the `--cache.blocklogs` flag.
Co-authored-by: Felix Lange <fjl@twurst.com>
This PR implements the new LES protocol version extensions:
* new and more efficient Merkle proofs reply format (when replying to
a multiple Merkle proofs request, we just send a single set of trie
nodes containing all necessary nodes)
* BBT (BloomBitsTrie) works similarly to the existing CHT and contains
the bloombits search data to speed up log searches
* GetTxStatusMsg returns the inclusion position or the
pending/queued/unknown state of a transaction referenced by hash
* an optional signature of new block data (number/hash/td) can be
included in AnnounceMsg to provide an option for "very light
clients" (mobile/embedded devices) to skip expensive Ethash check
and accept multiple signatures of somewhat trusted servers (still a
lot better than trusting a single server completely and retrieving
everything through RPC). The new client mode is not implemented in
this PR, just the protocol extension.
When implementing the new bloombits based filter, I've accidentally broke null
topics by removing the special casing of common.Hash{} filter rules, which
acted as the wildcard topic until now.
This PR fixes the regression, but instead of using the magic hash
common.Hash{} as the null wildcard, the PR reworks the code to handle nil
topics during parsing, converting a JSON null into nil []common.Hash topic.
There is no need to depend on the old context package now that the
minimum Go version is 1.7. The move to "context" eliminates our weird
vendoring setup. Some vendored code still uses golang.org/x/net/context
and it is now vendored in the normal way.
This change triggered new vet checks around context.WithTimeout which
didn't fire with golang.org/x/net/context.
This significantly reduces the dependency closure of ethclient, which no
longer depends on core/vm as of this change.
All uses of vm.Logs are replaced by []*types.Log. NewLog is gone too,
the constructor simply returned a literal.
This commit introduces a FindOnce method for filters. FindOnce finds the next block that
matches the filter and returns all matching logs from that block. If there are no further
matching logs, it returns a nil slice. This method allows callers to iterate over large
sets of logs progressively.
The changes introduce a small inefficiency relating to mipmaps: the first time a filter is
called, it acts as if all mipmaps are matched, and thus iterates several blocks near the
requested start point. This is in the interest of simplicity and avoiding duplicate mipmap
lookups each time FindOnce is called.
This field used to be assigned by the filter system and returned through
the RPC API. Now that we have a Go client that uses the underlying type,
the field needs to move. It is now assigned to true when the RemovedLogs
event is generated so the filter system doesn't need to care about the
field at all.
While here, remove the log list from ChainSideEvent. There are no users
of this field right now and any potential users could subscribe to
RemovedLogsEvent instead.
Pending logs are now filterable through the Go API. Filter API changed
such that each filter type has it's own bucket and adding filter
explicitly requires you specify the bucket to put it in.
Out of Bound log events are events that were removed due to a fork. When
logs are received the filtering mechanism should check for the `removed`
field on the json structure.
Log filtering is now using a MIPmap like approach where addresses of
logs are added to a mapped bloom bin. The current levels for the MIP are
in ranges of 1.000.000, 500.000, 100.000, 50.000, 1.000. Logs are
therefor filtered in batches of 1.000.
* Moved `vm.Transfer` to `core` package and changed execution to call
`env.Transfer` instead of `core.Transfer` directly.
* core/vm: byte code VM moved to jump table instead of switch
* Moved `vm.Transfer` to `core` package and changed execution to call
`env.Transfer` instead of `core.Transfer` directly.
* Byte code VM now shares the same code as the JITVM
* Renamed Context to Contract
* Changed initialiser of state transition & unexported methods
* Removed the Execution object and refactor `Call`, `CallCode` &
`Create` in to their own functions instead of being methods.
* Removed the hard dep on the state for the VM. The VM now
depends on a Database interface returned by the environment. In the
process the core now depends less on the statedb by usage of the env
* Moved `Log` from package `core/state` to package `core/vm`.
Moved the filtering system from `event` to `eth/filters` package and
removed the `core.Filter` object. The `filters.Filter` object now
requires a `common.Database` rather than a `eth.Backend` and invokes the
`core.GetBlockByX` directly rather than thru a "manager".