Skip to content

perf: optimize warm_preloaded_addresses reset#2625

Merged
rakita merged 5 commits intobluealloy:mainfrom
DaniPopes:dani/preloaded-addrs-reset
Jun 12, 2025
Merged

perf: optimize warm_preloaded_addresses reset#2625
rakita merged 5 commits intobluealloy:mainfrom
DaniPopes:dani/preloaded-addrs-reset

Conversation

@DaniPopes
Copy link
Copy Markdown
Collaborator

@DaniPopes DaniPopes commented Jun 12, 2025

cargo bench --profile dev --benches -p revme -- --test --nocapture | rg reset_preloaded_addresses where yes is len == len:

  • yes: 1028
  • no: 2141

so decent enough for essentially a free comparison

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Jun 12, 2025

CodSpeed Performance Report

Merging #2625 will degrade performances by 4%

Comparing DaniPopes:dani/preloaded-addrs-reset (1ee17c7) with main (c9a017a)

Summary

⚡ 3 improvements
❌ 4 regressions
✅ 156 untouched benchmarks

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Benchmarks breakdown

Benchmark BASE HEAD Change
CALL_50 131.7 µs 127.5 µs +3.34%
LOG0_50 43.7 µs 42.2 µs +3.76%
PUSH11_50 22.2 µs 23.1 µs -4%
PUSH13_50 22.3 µs 23.2 µs -3.73%
PUSH15_50 22.4 µs 23.2 µs -3.36%
PUSH5_50 22.1 µs 22.9 µs -3.42%
transact_commit_1000txs 3 ms 2.9 ms +3.67%

@DaniPopes DaniPopes force-pushed the dani/preloaded-addrs-reset branch from 6c1553e to 1ee17c7 Compare June 12, 2025 07:59
@DaniPopes DaniPopes marked this pull request as ready for review June 12, 2025 08:02
@DaniPopes DaniPopes requested review from Copilot and rakita June 12, 2025 08:02
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR optimizes the reset of warm preloaded addresses to improve performance during state resets.

  • Replaces direct cloning of precompiled addresses with a new helper function (reset_preloaded_addresses) that conditionally avoids unnecessary cloning in good conditions.
  • Updates the warm_precompiles method to use the new strategy in some cases.

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
crates/context/src/journal/inner.rs Replaces clone_from with reset_preloaded_addresses to optimize reset behavior.
crates/context/src/journal.rs Updates warm_precompiles to use clone_from directly instead of the helper, introducing potential inconsistency.

) {
// `warm_preloaded_addresses` is append-only, and is initialized with `precompiles`.
// Avoid unnecessarily cloning if it hasn't changed.
if warm_preloaded_addresses.len() == precompiles.len() {
Copy link

Copilot AI Jun 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The early return based solely on equal lengths may skip necessary updates when the sets have the same size but different elements. Consider explicitly checking equality or documenting the assumption that same length implies equality.

Suggested change
if warm_preloaded_addresses.len() == precompiles.len() {
if warm_preloaded_addresses == precompiles {

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

expensive and unnecessary because warm_preloaded_addresses starts as equal, is append only and therefor always a subset

Comment on lines +149 to +151
self.inner
.warm_preloaded_addresses
.clone_from(&self.inner.precompiles);
Copy link

Copilot AI Jun 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For consistency and to benefit from the length-check optimization, consider using the reset_preloaded_addresses helper function here rather than calling clone_from directly.

Suggested change
self.inner
.warm_preloaded_addresses
.clone_from(&self.inner.precompiles);
self.inner.reset_preloaded_addresses(&self.inner.precompiles);

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dont want this in a constructor, where we want to always override

Copy link
Copy Markdown
Member

@rakita rakita left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warm_preloaded_addresses are used for both precompiles and for access list and coinbase. We need a different approach for this.

One way is to always load all accounts of the access list and beneficiary with warm_account_and_storage and leave this "warm" addresses only for precompiles.

@DaniPopes
Copy link
Copy Markdown
Collaborator Author

please read the comment; because the set is append only, and is initialized always to the precompiles, it's always a subset; therefore we can check equality with just the lengths

@rakita
Copy link
Copy Markdown
Member

rakita commented Jun 12, 2025

please read the comment; because the set is append only, and is initialized always to the precompiles, it's always a subset; therefore we can check equality with just the lengths

I see, this PR does not do a lot than, the beneficiary is always added at the start of the transaction.

Copy link
Copy Markdown
Member

@rakita rakita left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like idea of using one function to clear the warm_preloaded_addresses

@rakita rakita merged commit 34542d7 into bluealloy:main Jun 12, 2025
28 of 29 checks passed
This was referenced Jun 12, 2025
dmitry123 added a commit to fluentlabs-xyz/revm-rwasm that referenced this pull request Aug 9, 2025
* chore(test): preserve order of fields in json fixtures (bluealloy#2541)

* feat: transact multi tx (bluealloy#2517)

* chore: remove default capacity on journal reverts

* wip multi tx exec support

* wip

* API changes

* wip

* fix compilation

* some cleanup,introduce additional bench

* cleanup and docs

* fix op-revm, add transact-multi bench

* bump criterion

* add balance incr/decr and simplify calls to journal

* add transact_multi bench

* add journal entry for deduct_caller fn

* cleanup

* rm ResultAndState and fix tests

* clippy

* cheatcode example fix

* rm cleanup after transact

* cleaup on inner journal

* cleanup on storage slot warm marking

* cleanup unneded structs

* fix discard bug

* typo

* fix benches

* remove cloning of tx

* rm with_capacity

* clone journal

* use mem::take

* skip cloning

* remove history entries

* rm println

* drain journal

* bump testdata suite

* use replay in bench

* fix tests

* cleanup and refactor, call discard_tx always

* ci: remove concurrency from bench (bluealloy#2542)

* feat: expand timestamp/block_number to u256 (bluealloy#2546)

* chore: use sha3 by default (bluealloy#2545)

* refactore: Add InstructionContext instead of Host and Interpreter (bluealloy#2548)

* refac: extract `InstructionContext` for `Interpreter` and `Host`

* refac: move `InstructionContext` out of main loop

* refac: extract `instructions::context` mod

* chore: drop redundant `Host` bound

* remove additional ref to context

* cleanup, remove some Host restraints

* small cleanup

---------

Co-authored-by: sergey-melnychuk <sergey-melnychuk@users.noreply.github.com>

* feat: Config blob basefee fraction (bluealloy#2551)

* feat: Config blob basefee fraction

* fix test

* chore: add dot to trigger ci (bluealloy#2552)

* chore: simplify Interpreter loop (bluealloy#2544)

* chore: check end of interpreter loop with ptr

* Use Optional action

* cleanup

* feat: added TxEnv::new_bench() add util function (bluealloy#2556)

* bench: add gas-cost-estimator selected bytecodes (bluealloy#2555)

* bench: add gas-cost-estimator selected bytecodes

* add gas cost estimation to codspeed bench

* chore(cfg): add tx_chain_id_check fields. Optimize effective gas cost calc (bluealloy#2557)

* cfg: add tx_chain_id_check fields. Optimize effective gas cost calc

* cleanup logic

* chore: ContextTr rm *_ref, and add *_mut fn (bluealloy#2560)

* refactor: unify calling of journal account loading (bluealloy#2561)

* docs: fix for eth tests in revme.md (bluealloy#2559)

* docs: temporary fix for eth tests in revme.md

* Update book/src/revme.md

---------

Co-authored-by: rakita <rakita@users.noreply.github.com>

* chore(docs): context crate lints (bluealloy#2565)

* chore(docs): context crate lints

* fix doc check

* chore(docs): add lints to database-interface and op-revm crates (bluealloy#2568)

* feat(database): Implement DatabaseRef for State (bluealloy#2570)

* feat(database): Implement DatabaseRef for State

* Fix clippy

* Adjust to review

* feat(Osaka): EIP-7825 tx limit cap (bluealloy#2575)

* feat(Osaka): EIP-7825 tx limit cap

* use const value

* chore: Avoid clone before converting ref BundleAccount to CacheAccount (bluealloy#2574)

* chore: Avoid clone before converting ref BundleAccount to CacheAccount

* Bring back the none ref conversion

* chore(op-revm): impl type alias for Default OpEvm (bluealloy#2576)

* chore: support functions for eip7918 (bluealloy#2579)

* wip blob

* chore: support functions for eip7918

* deps: explicitly bump `auto_impl` (bluealloy#2583)

* chore: use iter_batched for revme benches (bluealloy#2584)

* fix(multitx): Add local flags for create and selfdestruct (bluealloy#2581)

* fix(multitx): Add local flags for create and selfdestruct

* fix tests

* add test for selfdestruct

* add selfdestruct crate test

* fix zepter

* feat: add with_caller for system_transact (bluealloy#2587)

* bump: tag v75 revm v24.0.1 (bluealloy#2563) (bluealloy#2589)

* refactor: unify calling of journal account loading

* bump: tag v75 revm v24.0.1

* chore: release (bluealloy#2577)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* bump: tag v76 revm v25.0.0 (bluealloy#2590)

* feat(InspectEvm): add inspect_finalize method for tx+inspector with state (bluealloy#2593)

* add of inspect_finalize

* add comment

---------

Co-authored-by: Toki <toki@MacBook-Pro-de-Toki.local>

* feat: add optional priority fee check configuration (bluealloy#2588)

* feat: add optional priority fee check configuration

* fmt

* fmt and cleanup

* chore: onlyy skip priority fee check

* refactor: use local variable for priority fee check disable flag

* clippy

* nits

* feat: added instruction_result fn in LoopControl trait  (bluealloy#2595)

* added instruction_result fn

* smol fmt

* and then

* default impl

* feat: enable P256 in Osaka (bluealloy#2601)

* feat: add basic tests for modexp (bluealloy#2603)

* feat: change blob_max_count to max_blobs_per_tx (bluealloy#2608)

* feat: add Inspector implementation for either::Either (bluealloy#2614)

* feat: add Inspector implementation for either::Either

Implements Inspector trait for either::Either<L, R> where both L and R
implement Inspector. This enables conditional inspector usage where the
specific inspector type can be chosen at runtime while maintaining the
same interface.

Changes:
- Add either dependency to inspector Cargo.toml
- Create either.rs with Inspector implementation that forwards all method
  calls to the appropriate variant (Left or Right)
- Add either module to lib.rs
- Include comprehensive tests verifying the Either type works correctly
  with the Inspector trait

Closes bluealloy#2607

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: resolve clippy warning for default_constructed_unit_structs

Remove unnecessary .default() call on unit struct DummyInsp in test.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* chore: run zepter

---------

Co-authored-by: Claude <noreply@anthropic.com>

* chore: rename `transact` methods (bluealloy#2616)

* refactor: rename transact -> transact_one, transact_finalize -> transact

* renames

* default generic

* inspect_tx

* ResultAndState

* fix

* chore: build less stuff in codspeed ci (bluealloy#2620)

* chore: make CallInput default 0..0 (bluealloy#2621)

* perf: faster JumpTable bits lookup (bluealloy#2618)

* perf: improve JumpTable access

* use doc comment formatter

* fix serialization via manual impl

* fix clippy

* nits - rename cached->table_ptr

* chore(grammar): comments for workflows (bluealloy#2602)

* Update zepter.yaml

* Update release-plz.yml

* feat: add clz opcode (bluealloy#2598)

* feat: add clz opcode

* chore: add tests for clz

* fix: gate clz behind osaka

Co-authored-by: rakita <rakita@users.noreply.github.com>

* chore: fix count_opcodes test

* fix: add special case for zero clz

* fix: another special case because of default ruint leading_zeros behavior

* fix: use proper specid in test

* remove redundant stuff

---------

Co-authored-by: rakita <rakita@users.noreply.github.com>

* chore(tests): extend test for is_valid jumptable (bluealloy#2622)

* ci: rm op-revm from bench (bluealloy#2624)

* perf: optimize warm_preloaded_addresses reset (bluealloy#2625)

* perf: optimize warm_preloaded_addresses reset

* opt warm_precompiles

* back to clone_from

* check len == len

* dbg assert eq

* feat(precompile): rug/gmp-based modexp (bluealloy#2596)

* feat: rug/gmp-based powmod

* chore: use correct imports in gmp modexp

* chore: add feature for gmp

* Update README.md

Co-authored-by: Dan Cline <6798349+Rjected@users.noreply.github.com>

* fix: set ABI explicitly for gmp install

* fix feature propagation

* fix: use gmp not on i686 runners

---------

Co-authored-by: rakita <dragan0rakita@gmail.com>
Co-authored-by: rakita <rakita@users.noreply.github.com>

* fix: change account state to None if NotExisting on insert_account_info (bluealloy#2630)

* fix: change account state if NotExisting on insert_account_info

* add update_info and update_account_state to DbAccount

* chore: build less benchmark binaries (bluealloy#2629)

* perf: store coinbase address separately to avoid cloning warm addresses in the common case (bluealloy#2634)

* special case coinbase address warming

* nits

* fix: compare_or_save_testdata sig (bluealloy#2637)

* perf: re-use frame allocation (bluealloy#2636)

* wip

* fix

* fix: use Default instead of uninit

* fix

* chore: clippy

* perf: try removing allocs from Default

* chore: clippy

* new: OutFrame abstraction over a maybe-uninit slot

* perf: make SharedMemory::empty not allocate

* inline

* perf: do the stack thing

* rename

* perf: share the stack in the evm context

* perf: initialize first frame the same way

* rm inlines

* jump_inner inline always

* simplify frame init

* cleanup move frame stack outside of run_exec_loop fun

* cleanup inspector trait

* add box around frame_stack items so we dont allocate a lot more of it

* box included for no_std

* unbox the init closure

* WIP

* move frame to evmtr

* wip

* clippy

* fix inspection

* some cleanup

* cleanup

* fix inspector test

* cleaup, renames and moving of structs

* renames

---------

Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>

* chore: claud.md (bluealloy#2638)

* test: bump alloydb test (bluealloy#2640)

* chore: claud.md

* test: bump alloydb test

* chore: lints for revm-database (bluealloy#2639)

* feat(osaka): modexp assume minimal base/mod length of 32 (bluealloy#2613) (bluealloy#2643)

* feat: configurable contract size limit (bluealloy#2611) (bluealloy#2642)

* feat: configurable contract size limit (bluealloy#2611)

* feat(devnet2): double contract size limit

* set double value

* tests

* add initcode limit of 73kb

* cleanup

* clippy

* chore: include local context as generic (bluealloy#2645)

* chore: include local context as generic

* fmt

* feat: remove EOF (bluealloy#2644)

* feat: remove EOF

* remove more of eof code

* fix test

* remove tracer section and fn depth

* docs

* inline functions

* clippy doc

* chore: bump all deps (bluealloy#2647)

* chore: bump all deps

* propagate serde

* docs: lints handler inspector interpreter (bluealloy#2646)

* docs: lints for revm-handler

* docs: lints for interpreter and inspector

* docs for instructions

* fmt

* Add missing documentation to interpreter crate

Added comprehensive documentation to resolve all clippy missing-docs warnings:
- Module documentation for instructions modules
- Function documentation for all instruction implementations
- Struct field documentation for Interpreter
- Trait and method documentation for interpreter types
- Associated type documentation
- Debug implementation for EthInterpreter

All 154+ clippy warnings have been resolved to achieve 0 warnings.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix compilation error in TracerEip3155 Debug implementation

Remove references to deleted fields 'section' and 'function_depth' from
the Debug implementation, matching the changes from commit 1c0d770 that
removed EOF support.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>

* feat: add fallible conversion from OpHaltReason to HaltReason (bluealloy#2649)

* chore: lints for examples (bluealloy#2650)

* chore: release (bluealloy#2641)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: bump v77 (bluealloy#2651)

* fix: call stack_frame.clear() at end (bluealloy#2656)

* chore: release (bluealloy#2657)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* bump: tag v78 revm v26.0.1 (bluealloy#2658)

* fix: implement `PartialEq` for `JumpTable` correctly (bluealloy#2654)

* fix: implement PartialEq for JumpTable correctly

* fix: implement PartialEq for JumpTable correctly

* fmt

* chore: fix typo (bluealloy#2660)

* feat: optional_eip3541 (bluealloy#2661)

* feat: optional_eip3541

* fmt

* feat: implement `Transaction` for `Either` (bluealloy#2662)

* feat: impl tx for either

* fix bounds

---------

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>

* docs: fix copy-pasted inner doc comments (bluealloy#2663)

* refactor: use TxEnv::builder (bluealloy#2652)

* chore: lints for examples

* feat: Use TxEnv builder

* wip optx builder

* builder for OpTx

* compile

* fix parts of it

* revert runner changes

* fix clippy

* refactor: statetest runner cleanup (bluealloy#2665)

* refactor: statetest runner cleanup

* move function to statetest-types

* clippy

* docs: inline documentation of revm top modules (bluealloy#2666)

This unifies the documentation of all revm crates into the `revm`
documentation. Main benefit is the searchbox of the `revm` crate
actually search into all crates.

* test(op/handler): verify caller account is touched by zero value transfer (bluealloy#2669)

* chore: cargo clippy --fix --all (bluealloy#2671)

* chore: cargo +nightly clippy --fix --all

* clippy second try

* clippy in tests

* feat: implement Database traits for either::Either (bluealloy#2673)

* feat: implement Database traits for either::Either

Adds Database, DatabaseCommit, and DatabaseRef trait implementations
for the either::Either type, allowing it to be used as a database
abstraction that can hold one of two different database types.

* zepter

* feat: blake2 avx2 (bluealloy#2670)

* feat: blake2 avx2

* cleanup

* clippy

* cleanup

* clippy

* runtime check

* test

* test

* test

* fix compilation

* cleanup

* chore: release (bluealloy#2659)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* bump: tag v79 revm v27.0.0 (bluealloy#2680)

* fix: OpTransactionBuilder dont override envelope (bluealloy#2681)

* fix: OpTransactionBuilder dont override envelope

* relax builder for known tx type

* bump: v80 revm v27.0.1 (bluealloy#2683)

* bump: v80 revm v27.0.1

* main changelog

* docs: fix in pre_execution.rs about nonce bump for CREATE (bluealloy#2684)

* feat: add custom precompile with journal access example (bluealloy#2677)

* feat: add custom precompile with journal access example

This example demonstrates how to create a custom precompile that can
access and modify the journal (state). Key features:

- CustomPrecompileProvider that extends EthPrecompiles
- Precompile at address 0x0100 with journal access
- Storage read/write operations using journal.sload/sstore
- Balance transfers using journal.transfer
- Proper gas accounting and error handling

The example shows how to integrate custom precompiles with existing
Ethereum precompiles and provides clear documentation on usage patterns.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* follow up

* fix: resolve compilation errors and apply clippy suggestions in custom precompile journal example

- Fix Handler::mainnet() API usage by using MainnetHandler::default()
- Add missing imports for ContextSetters, EVMError, and InvalidTransaction
- Fix output.data() pattern matching from optional to direct access
- Add proper type annotations with error type alias
- Correct mutable borrowing patterns for database access
- Apply clippy suggestions for inline format args
- Ensure clean compilation with no warnings

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* style: apply cargo fmt to custom precompile journal example

- Format multi-line println\! statements to single lines where appropriate
- Ensure consistent code formatting across the codebase

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>

* docs: minor fixes (bluealloy#2686)

* docs: document external state transitions for EIP-4788 and EIP-2935 (bluealloy#2678)

* docs(book): document external state transitions for EIP-4788 and EIP-2935

* Update SUMMARY.md

* docs: add rustdoc about external state transitions for EIP-2935 and EIP-4788

* Update system_call.rs

* Update system_call.rs

* Update external_state_transitions.md

* chore: add PartialEq u8 (bluealloy#2688)

* fix(inspector): revert pointer before calling step_end (bluealloy#2687)

* fix(inspector): revert pointer before calling step_end

* test that opcode will not panic

* bump: tag v81 revm v27.0.1 (bluealloy#2689)

* docs: fix minor typo (bluealloy#2672)

* docs: bump changelog for v81 (bluealloy#2691)

* fix typo: Rename is_created_globaly to is_created_globally (bluealloy#2692)

* Update inner.rs

* Update entry.rs

* test: add comprehensive tests for TxEnvBuilder (bluealloy#2690)

* test: add comprehensive tests for TxEnvBuilder

Add comprehensive test coverage for TxEnvBuilder including:
- Valid configurations for all transaction types (Legacy, EIP-2930, EIP-1559, EIP-4844, EIP-7702)
- Error cases for missing required fields
- build_fill() method auto-filling behavior
- Transaction type derivation logic
- Contract creation transactions
- Custom transaction types
- Method chaining verification

Total: 24 new tests covering all build() and build_fill() scenarios

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* cargo fmt

---------

Co-authored-by: Claude <noreply@anthropic.com>

* chore: use c-kzg precompute value 8 (bluealloy#2698)

* fix(Inspector): call_end not calle on first call fast return (bluealloy#2697)

* chore: incorrect StorageKey and StorageValue parameter order in burntpix benchmark (bluealloy#2704)

* refactor: simplify gas calculations by introducing a used() method (bluealloy#2703)

* refactor: simplify gas calculations by introducing a used() method

* fix(gas): update used() method to prevent underflow by using saturating_sub

---------

Co-authored-by: megakabi <jakevin@megatechnology.com>

* chore: release (bluealloy#2682)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* bump: tag v82 revm v27.0.3 (bluealloy#2710)

* feat(migrate-to-v82): fix fairblock address, disable cancun fork support in e2e tests

---------

Co-authored-by: rakita <rakita@users.noreply.github.com>
Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>
Co-authored-by: sergey-melnychuk <sergey-melnychuk@users.noreply.github.com>
Co-authored-by: Ishika Choudhury <117741714+Rimeeeeee@users.noreply.github.com>
Co-authored-by: Johns Gresham <johnsgresham@gmail.com>
Co-authored-by: cakevm <cakevm@proton.me>
Co-authored-by: 0xDmtri <0xDmtri@protonmail.com>
Co-authored-by: Roman Krasiuk <rokrassyuk@gmail.com>
Co-authored-by: Dan Cline <6798349+Rjected@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Toki <105550481+gitToki@users.noreply.github.com>
Co-authored-by: Toki <toki@MacBook-Pro-de-Toki.local>
Co-authored-by: Udoagwa Franklin <54338168+frankudoags@users.noreply.github.com>
Co-authored-by: Soubhik Singha Mahapatra <160333583+Soubhik-10@users.noreply.github.com>
Co-authored-by: Arsenii Kulikov <klkvrr@gmail.com>
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Samuel Onoja <samiodev@icloud.com>
Co-authored-by: Coder <161350311+MamunC0der@users.noreply.github.com>
Co-authored-by: rakita <dragan0rakita@gmail.com>
Co-authored-by: Beta <105949605+LevBeta@users.noreply.github.com>
Co-authored-by: bernard-wagner <bernard-wagner@users.noreply.github.com>
Co-authored-by: Wodann <Wodann@users.noreply.github.com>
Co-authored-by: Afounso Souza <drewsmpk@gmail.com>
Co-authored-by: Quentin Sabah <quentin.sabah@gmail.com>
Co-authored-by: Emilia Hane <elsaemiliaevahane@gmail.com>
Co-authored-by: simonchen-supra <s.chen@supraoracles.com>
Co-authored-by: VolodymyrBg <aqdrgg19@gmail.com>
Co-authored-by: Kendra Karol Sevilla <smpkdrew@gmail.com>
Co-authored-by: leopardracer <136604165+leopardracer@users.noreply.github.com>
Co-authored-by: Micke <155267459+reallesee@users.noreply.github.com>
Co-authored-by: jakevin <jakevingoo@gmail.com>
Co-authored-by: megakabi <jakevin@megatechnology.com>
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

Successfully merging this pull request may close these issues.

3 participants