Compare commits

...

14 Commits

Author SHA1 Message Date
Denis S. Soldatov aka General-Beck
753b923ee9 Beta sccache backport (#11254)
fix check-benches
2019-11-12 18:54:05 +01:00
Talha Cross
bc90ba2863 v2.6.5 beta (#11240)
* [CI] check evmbin build (#11096)
* Correct EIP-712 encoding (#11092)
* [client]: Fix for incorrectly dropped consensus messages (#11082) (#11086)
* Update hardcoded headers (foundation, classic, kovan, xdai, ewc, ...) (#11053)
* Add cargo-remote dir to .gitignore (?)
* Update light client headers: ropsten 6631425 foundation 8798209 (#11201)
* Update list of bootnodes for xDai chain (#11236)
* ethcore/res: add mordor testnet configuration (#11200)
* [chain specs]: activate Istanbul on mainnet (#11228)
* [builtin]: support multiple prices and activations in chain spec (#11039)
* [receipt]: add sender & receiver to RichReceipts (#11179)
* [ethcore/builtin]: do not panic in blake2pricer on short input (#11180)
* Made ecrecover implementation trait public (#11188)
* Fix docker centos build (#11226)
* Update MIX bootnodes. (#11203)
* Insert explicit warning into the panic hook (#11225)
* Use provided usd-per-eth value if an endpoint is specified (#11209)
* Cleanup stratum a bit (#11161)
* Add Constantinople EIPs to the dev (instant_seal) config (#10809) (already backported)
* util Host: fix a double Read Lock bug in fn Host::session_readable() (#11175)
* ethcore client: fix a double Read Lock bug in fn Client::logs() (#11172)
* Type annotation for next_key() matching of json filter options (#11192)
* Upgrade jsonrpc to latest (#11206)
* [dependencies]: jsonrpc 14.0.1 (#11183)
* Upgrade to jsonrpc v14 (#11151)
* Switching sccache from local to Redis (#10971)
* Snapshot restoration overhaul (#11219)
* Add new line after writing block to hex file. (#10984)
* Pause pruning while snapshotting (#11178)
* Change how RPCs eth_call and eth_estimateGas handle "Pending" (#11127)
* Fix block detail updating (#11015)
* Make InstantSeal Instant again #11186
* Filter out some bad ropsten warp snapshots (#11247)
2019-11-11 23:55:19 +01:00
Niklas Adolfsson
9838c9f447 Secret store: fix Instant::now() related race in net_keep_alive (#11155) (#11158)
* try Instant fix in SS

* proper fix + add comment

* fix compilation
2019-10-10 15:52:09 +01:00
Niklas Adolfsson
1a62f5a086 [beta]: backports (#11115)
* [spec] fix rinkeby spec (#11108)

* use images from our registry (#11105)
2019-10-02 12:24:07 +02:00
Andronik Ordian
badb04502f [evmbin] fix build (#11095) 2019-09-26 14:47:28 +02:00
s3krit
a44fad04fa Update CHANGELOG.md and version (#11094)
* Update CHANGELOG.md and version
2019-09-26 12:12:59 +02:00
s3krit
7ae5d8ebdc v2.6.4-beta (#11090)
* ethcore/res: activate Istanbul on Ropsten, Görli, Rinkeby, Kovan (#11068)

* ethcore/res: activate Istanbul on Ropsten block 6485846

* ethcore/res: activate Istanbul on Goerli block 1561651

* ethcore/res: use hex values for Istanbul specs

* ethcore/res: fix trailing comma

* ethcore/res: be pedantic about EIP-1283 in Petersburg and Istanbul test specs

* ethcore/res: activate Istanbul on Rinkeby block 5435345

* ethcore/res: activate Istanbul on Kovan block 14111141

* ethcore/res: fix kovan istanbul number to 0xd751a5

* cleanup json crate (#11027)

* [json]: cleanup

write something here....

* nit: commit new/moved files

* nit: remove needless features

* nits

* fix(grumbles): use explicit import `DifficultyTest`

* fix(grumbles): remove needless type hints

* fix(grumble): docs `from -> used by`

Co-Authored-By: David <dvdplm@gmail.com>

* fix(grumbles): use explicit `imports`

* fix(grumble): merge `tx` and `tx_with_signing_info`

* fix(grumbles): resolve introduced `TODO's`

* [json-spec] make blake2 pricing spec more readable (#11034)

* [json-spec] make blake2 pricing spec more readable

* [ethcore] fix compilation

* Update JSON tests to d4f86ecf4aa7c (#11054)

* new ethereum consensus tests, #10908

* Update JSON tests to 725dbc73a

This PR reverts the controversial changes of the previous PR and skips the failing tests.

Maybe I misunderstand the suggested workaround of putting the fix under `#[cfg(test)]` but it seems odd to run different code in production than we run in tests. Instead here I suggest we skip the failing tests with the argument that we do not wish to fix this issue (at least not at this time) because it does not affect us. If I am wrong, and I likely am, I look forward to hearing why and what a better approach to updating the state tests is.

Branched off https://github.com/paritytech/parity-ethereum/pull/10923

ref #10908

* Update json test commit to 1dc9d20e97165708f7db0bbf2d1a87a6b4285827

* Fail with error message

* Handle missing r, s, v params in json tests
Light cleanup of json test runner

* Include the path to the test file

* Handle new `postState` format: string or map
Sort out tests
Missing docs

* WIP

* Include test-helpers from ethjson

* Sort out new paths

* Remove dead code

* Fix warnings stemming from code called only from macros
Skip failing tests in stRevert/ and stTransactionTest/ (too course a filter!)
Docs and light touch refactorings for readability

* Skip all failing tests

* Document the single-test-skipping madness

* Update tests to latest commit on the `develop` branch

* Rename test skipping types to reflect actual purpose

* Switch to skipping individual tests in currents.json
Add some logging to help debug skipping

* Fix rpc test by curve fitting to new json test source file

* Add refs to all issues for fixing failing&skipped json tests

* Sort out the need for Clone for tests

* [json-tests] populate state from genesis pod state (#11083)

* [json-tests] populate state from genesis pod state

* [json-tests] #11075 is resolved as well

* [json-tests] #11076 hopefully too

* [json-tests] #11077 🎉

* [json-tests] fix trailing comma

* Update ethcore/src/json_tests/chain.rs

Co-Authored-By: Andronik Ordian <write@reusable.software>

* Add issue numbers to TODOs

* Apply @ordians fix for wrong state_root

* Warn on invalid RLP

* Remove the `ci-skip-tests` feature
2019-09-26 11:04:00 +02:00
s3krit
b7b1484f2e update CHANGELOG.md (#11058) 2019-09-16 12:13:45 +02:00
s3krit
da8c4df8cc v2.6.3-beta (rev2) (#11050)
* EIP 1884 Re-pricing of trie-size dependent operations  (#10992)
* Implement EIP-1283 reenable transition, EIP-1706 and EIP-2200  (#10191)
2019-09-13 14:55:43 +02:00
David
06287c478a ethcore: remove test-helper feat from build (#11047) (#11049) 2019-09-13 11:53:31 +02:00
s3krit
6ad6c3cbf9 v2.6.3-beta (#11040)
* add more tx tests (#11038)
* Fix parallel transactions race-condition (#10995)
* Add blake2_f precompile (#11017)
* [trace] introduce trace failed to Ext (#11019)
* Edit publish-onchain.sh to use https (#11016)
* Fix deadlock in network-devp2p (#11013)
* EIP 1108: Reduce alt_bn128 precompile gas costs (#11008)
* xDai chain support and nodes list update (#10989)
* EIP 2028: transaction gas lowered from 68 to 16 (#10987)
* EIP-1344 Add CHAINID op-code (#10983)
* manual publish jobs for releases, no changes for nightlies (#10977)
* [blooms-db] Fix benchmarks (#10974)
* Verify transaction against its block during import (#10954)
* Better error message for rpc gas price errors (#10931)
* Fix fork choice (#10837)
* Fix compilation on recent nightlies (#10991)
2019-09-12 18:04:58 +02:00
s3krit
25936ae0f6 v2.6.2 beta (#11007)
* [trace] check mem diff within range (#11002)

* Update version (v2.6.2-beta)

* bump spin to 0.5.2 (#10996)

patch vulnerability https://github.com/RustSec/advisory-db/pull/132
2019-08-29 13:03:12 +02:00
s3krit
7bfbe41c72 2.6.1-beta (#10973)
* Add support for Energy Web Foundation's new chains (#10957)                                                                                                                                  
  * Kaspersky AV whitelisting (#10919)                                                                                                                                                           
  * Avast whitelist script (#10900)                                                                                                                                                              
  * Docker images renaming (#10863)                                                                                                                                                              
  * Remove excessive warning (#10831)                                                                                                                                                            
  * Allow --nat extip:your.host.here.org (#10830)                                                                                                                                                
  * When updating the client or when called from RPC, sleep should mean sleep (#10814)                                                                                                           
  * added new ropsten-bootnode and removed old one (#10794)                                                      
  * ethkey no longer uses byteorder (#10786)                                                            
  * docs: Update Readme with TOC, Contributor Guideline. Update Cargo package descriptions (#10652)
2019-08-14 18:29:48 +02:00
s3krit
e38293b085 version: betalise v2.6 (#10859) 2019-07-08 13:24:25 +02:00
299 changed files with 28618 additions and 5291 deletions

3
.gitignore vendored
View File

@@ -43,3 +43,6 @@ parity-clib-examples/cpp/build/
.vscode
rls/
/parity.*
# cargo remote artifacts
remote-target

View File

@@ -4,19 +4,15 @@ stages:
- publish
- optional
image: parity/parity-ci-linux:latest
image: ${REGISTRY}/parity-ci-linux:latest
variables:
GIT_STRATEGY: fetch
GIT_SUBMODULE_STRATEGY: recursive
CI_SERVER_NAME: "GitLab CI"
CARGO_HOME: "/ci-cache/${CI_PROJECT_NAME}/cargo/${CI_JOB_NAME}"
SCCACHE_DIR: "/ci-cache/${CI_PROJECT_NAME}/sccache"
CARGO_TARGET: x86_64-unknown-linux-gnu
.no_git: &no_git # disable git strategy
variables:
GIT_STRATEGY: none
GIT_SUBMODULE_STRATEGY: none
REGISTRY: registry.parity.io/parity/infrastructure/scripts
.releaseable_branches: # list of git refs for building GitLab artifacts (think "pre-release binaries")
only: &releaseable_branches
@@ -41,22 +37,12 @@ variables:
before_script:
- rustup show
- cargo --version
- SCCACHE_ERROR_LOG=/builds/parity/parity-ethereum/sccache_debug.log
RUST_LOG=sccache=debug
sccache --start-server
- sccache -s
after_script:
# sccache debug info
- if test -e sccache_debug.log;
then
echo "_____All crate-types:_____";
grep 'parse_arguments.*--crate-type' sccache_debug.log | sed -re 's/.*"--crate-type", "([^"]+)".*/\1/' | sort | uniq -c;
echo "_____Non-cacheable reasons:_____";
grep CannotCache sccache_debug.log | sed -re 's/.*CannotCache\((.+)\).*/\1/' | sort | uniq -c;
else
echo "_____No logs from sccache_____";
exit 0;
fi
retry:
max: 2
when:
- runner_system_failure
- unknown_failure
- api_failure
tags:
- linux-docker
@@ -66,7 +52,6 @@ variables:
<<: *collect_artifacts
script:
- scripts/gitlab/build-linux.sh
- sccache -s
after_script:
- mkdir -p tools
- cp -r scripts/docker/hub/* ./tools
@@ -84,21 +69,38 @@ cargo-check 0 3:
<<: *docker-cache-status
script:
- time cargo check --target $CARGO_TARGET --locked --no-default-features --verbose --color=always
- sccache -s
- sccache --show-stats
cargo-check 1 3:
stage: test
<<: *docker-cache-status
script:
- time cargo check --target $CARGO_TARGET --locked --manifest-path util/io/Cargo.toml --no-default-features --verbose --color=always
- sccache -s
- sccache --show-stats
cargo-check 2 3:
stage: test
<<: *docker-cache-status
script:
- time cargo check --target $CARGO_TARGET --locked --manifest-path util/io/Cargo.toml --features "mio" --verbose --color=always
- sccache -s
- sccache --show-stats
cargo-check-evmbin:
stage: test
<<: *docker-cache-status
script:
- time cargo check -p evmbin --target $CARGO_TARGET --locked --verbose --color=always
- sccache --show-stats
cargo-check-benches:
stage: test
<<: *docker-cache-status
script:
- time (
cargo check --all --benches --exclude ethash --target $CARGO_TARGET --locked --verbose --color=always;
(cd ethash; time cargo check --benches --features bench --target $CARGO_TARGET --locked --verbose --color=always)
)
- sccache --show-stats
cargo-audit:
stage: test
@@ -112,21 +114,18 @@ validate-chainspecs:
<<: *docker-cache-status
script:
- ./scripts/gitlab/validate-chainspecs.sh
- sccache -s
test-cpp:
stage: build
<<: *docker-cache-status
script:
- ./scripts/gitlab/test-cpp.sh
- sccache -s
test-linux:
stage: build
<<: *docker-cache-status
script:
- ./scripts/gitlab/test-linux.sh stable
- sccache -s
test-linux-beta:
stage: build
@@ -134,7 +133,6 @@ test-linux-beta:
<<: *docker-cache-status
script:
- ./scripts/gitlab/test-linux.sh beta
- sccache -s
test-linux-nightly:
stage: build
@@ -142,12 +140,11 @@ test-linux-nightly:
<<: *docker-cache-status
script:
- ./scripts/gitlab/test-linux.sh nightly
- sccache -s
allow_failure: true
build-android:
<<: *build-on-linux
image: parity/rust-parity-ethereum-android-build:stretch
image: ${REGISTRY}/parity-ci-android:stretch
variables:
CARGO_TARGET: armv7-linux-androideabi
@@ -158,21 +155,21 @@ build-linux:
build-linux-i386:
<<: *build-on-linux
only: *releaseable_branches
image: parity/rust-parity-ethereum-build:i386
image: ${REGISTRY}/parity-ci-i386:latest
variables:
CARGO_TARGET: i686-unknown-linux-gnu
build-linux-arm64:
<<: *build-on-linux
only: *releaseable_branches
image: parity/rust-parity-ethereum-build:arm64
image: ${REGISTRY}/parity-ci-arm64:latest
variables:
CARGO_TARGET: aarch64-unknown-linux-gnu
build-linux-armhf:
<<: *build-on-linux
only: *releaseable_branches
image: parity/rust-parity-ethereum-build:armhf
image: ${REGISTRY}/parity-ci-armhf:latest
variables:
CARGO_TARGET: armv7-unknown-linux-gnueabihf
@@ -205,11 +202,10 @@ build-windows:
publish-docker:
stage: publish
<<: *no_git
only: *releaseable_branches
except:
variables:
- $SCHEDULE_TAG == "nightly"
- nightly
when: manual
dependencies:
- build-linux
environment:
@@ -219,23 +215,24 @@ publish-docker:
services:
- docker:dind
variables:
GIT_STRATEGY: none
DOCKER_HOST: tcp://localhost:2375
DOCKER_DRIVER: overlay2
GIT_STRATEGY: none
# DOCKERFILE: tools/Dockerfile
# CONTAINER_IMAGE: parity/parity
# CONTAINER_IMAGE: parity/parity
script:
# we stopped pushing nightlies to dockerhub, will push to own registry prb.
- ./tools/publish-docker.sh
tags:
- kubernetes-parity-build
publish-snap: &publish-snap
publish-snap-nightly: &publish-snap
stage: publish
<<: *no_git
only: *releaseable_branches
only:
- nightly
image: snapcore/snapcraft
variables:
GIT_STRATEGY: none
BUILD_ARCH: amd64
cache: {}
dependencies:
@@ -245,7 +242,12 @@ publish-snap: &publish-snap
script:
- ./tools/publish-snap.sh
publish-snap-i386:
publish-snap-manually:
<<: *publish-snap
only: *releaseable_branches
when: manual
publish-snap-i386-nightly: &publish-snap-i386
<<: *publish-snap
variables:
BUILD_ARCH: i386
@@ -253,7 +255,12 @@ publish-snap-i386:
dependencies:
- build-linux-i386
publish-snap-arm64:
publish-snap-i386-manually:
<<: *publish-snap-i386
only: *releaseable_branches
when: manual
publish-snap-arm64-nightly: &publish-snap-arm64
<<: *publish-snap
variables:
BUILD_ARCH: arm64
@@ -261,7 +268,12 @@ publish-snap-arm64:
dependencies:
- build-linux-arm64
publish-snap-armhf:
publish-snap-arm64-manually:
<<: *publish-snap-arm64
only: *releaseable_branches
when: manual
publish-snap-armhf-nightly: &publish-snap-armhf
<<: *publish-snap
variables:
BUILD_ARCH: armhf
@@ -269,11 +281,18 @@ publish-snap-armhf:
dependencies:
- build-linux-armhf
publish-onchain:
stage: publish
<<: *no_git
publish-snap-armhf-manually:
<<: *publish-snap-armhf
only: *releaseable_branches
when: manual
publish-onchain-nightly: &publish-onchain
stage: publish
only:
- nightly
cache: {}
variables:
GIT_STRATEGY: none
dependencies:
- build-linux
- build-darwin
@@ -283,11 +302,18 @@ publish-onchain:
tags:
- linux-docker
publish-awss3-release:
image: parity/awscli:latest
stage: publish
publish-onchain-manually:
<<: *publish-onchain
only: *releaseable_branches
<<: *no_git
when: manual
publish-release-awss3-nightly: &publish-release-awss3
image: ${REGISTRY}/awscli:latest
stage: publish
only:
- nightly
variables:
GIT_STRATEGY: none
cache: {}
dependencies:
- build-linux
@@ -309,17 +335,39 @@ publish-awss3-release:
tags:
- linux-docker
publish-release-awss3-manually:
<<: *publish-release-awss3
only: *releaseable_branches
when: manual
publish-docs:
stage: publish
image: parity/rust-parity-ethereum-docs:xenial
stage: publish
image: ${REGISTRY}/parity-ci-docs:latest
only:
- tags
except:
- nightly
cache: {}
dependencies: []
when: manual
cache: {}
dependencies: []
script:
- scripts/gitlab/publish-docs.sh
tags:
- linux-docker
allow_failure: true
publish-av-whitelist:
stage: publish
variables:
GIT_STRATEGY: none
only: *releaseable_branches
except:
- nightly
when: manual
cache: {}
dependencies:
- build-windows
script:
- scripts/gitlab/publish-av-whitelists.sh
tags:
- linux-docker

View File

@@ -1,151 +1,256 @@
## Parity-Ethereum [v2.4.3](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.3) (2019-03-22)
## Parity-Ethereum [v2.6.5](https://github.com/paritytech/parity-ethereum/releases/tag/v2.6.5)
Parity-Ethereum 2.4.3-beta is a bugfix release that improves performance and stability. This patch release contains a critical bug fix where serving light clients previously led to client crashes. Upgrading is highly recommended.
Parity Ethereum v2.6.5-stable is a patch release that adds block numbers for activating the Istanbul hardfork on mainnet, as well as a large number of various bugfixes, QoL changes, some code cleanup/refactoring and other miscellaenous changes.
The full list of included changes:
- 2.4.3 beta backports ([#10508](https://github.com/paritytech/parity-ethereum/pull/10508))
- Version: bump beta
- Add additional request tests ([#10503](https://github.com/paritytech/parity-ethereum/pull/10503))
## Parity-Ethereum [v2.4.2](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.2) (2019-03-20)
* [CI] check evmbin build (#11096)
* Correct EIP-712 encoding (#11092)
* [client]: Fix for incorrectly dropped consensus messages (#11082) (#11086)
* Update hardcoded headers (foundation, classic, kovan, xdai, ewc, ...) (#11053)
* Add cargo-remote dir to .gitignore (?)
* Update light client headers: ropsten 6631425 foundation 8798209 (#11201)
* Update list of bootnodes for xDai chain (#11236)
* ethcore/res: add mordor testnet configuration (#11200)
* [chain specs]: activate Istanbul on mainnet (#11228)
* [builtin]: support multiple prices and activations in chain spec (#11039)
* [receipt]: add sender & receiver to RichReceipts (#11179)
* [ethcore/builtin]: do not panic in blake2pricer on short input (#11180)
* Made ecrecover implementation trait public (#11188)
* Fix docker centos build (#11226)
* Update MIX bootnodes. (#11203)
* Insert explicit warning into the panic hook (#11225)
* Use provided usd-per-eth value if an endpoint is specified (#11209)
* Cleanup stratum a bit (#11161)
* Add Constantinople EIPs to the dev (instant_seal) config (#10809) (already backported)
* util Host: fix a double Read Lock bug in fn Host::session_readable() (#11175)
* ethcore client: fix a double Read Lock bug in fn Client::logs() (#11172)
* Type annotation for next_key() matching of json filter options (#11192)
* Upgrade jsonrpc to latest (#11206)
* [dependencies]: jsonrpc 14.0.1 (#11183)
* Upgrade to jsonrpc v14 (#11151)
* Switching sccache from local to Redis (#10971)
* Snapshot restoration overhaul (#11219)
* Add new line after writing block to hex file. (#10984)
* Pause pruning while snapshotting (#11178)
* Change how RPCs eth_call and eth_estimateGas handle "Pending" (#11127)
* Fix block detail updating (#11015)
* Make InstantSeal Instant again #11186
* Filter out some bad ropsten warp snapshots (#11247)
Parity-Ethereum 2.4.2-beta is a bugfix release that improves performance and stability.
## Parity-Ethereum [v2.6.4](https://github.com/paritytech/parity-ethereum/releases/tag/v2.6.4)
Parity Ethereum v2.6.4-stable is a patch release that adds the block numbers for activating the Istanbul hardfork on test networks: Ropsten, Görli, Rinkeby and Kovan.
A full list of included changes:
* ethcore/res: activate Istanbul on Ropsten, Görli, Rinkeby, Kovan (#11068)
* cleanup json crate (#11027)
* [json-spec] make blake2 pricing spec more readable (#11034)
* Update JSON tests to d4f86ecf4aa7c (#11054)
## Parity-Ethereum [v2.6.3](https://github.com/paritytech/parity-ethereum/releases/tag/v2.6.3)
Parity Ethereum v2.6.3-stable is a patch release that improves security, stability and performance.
* The most noteworthy improvement in this release is incorporating all the EIPs required for the Istanbul hard fork.
* This release also fixes certain security and performance issues, one of which was suspected to be consensus-threatening but turned out to be benign. Thanks to Martin Holst Swende and Felix Lange from the Ethereum Foundation for bringing the suspicious issue to our attention.
The full list of included changes:
- 2.4.2 beta backports ([#10488](https://github.com/paritytech/parity-ethereum/pull/10488))
- Version: bump beta
- Сaching through docker volume ([#10477](https://github.com/paritytech/parity-ethereum/pull/10477))
- fix win&mac build ([#10486](https://github.com/paritytech/parity-ethereum/pull/10486))
- fix(extract `timestamp_checked_add` as lib) ([#10383](https://github.com/paritytech/parity-ethereum/pull/10383))
## Parity-Ethereum [v2.4.1](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.1) (2019-03-19)
* add more tx tests (#11038)
* Fix parallel transactions race-condition (#10995)
* Add blake2_f precompile (#11017)
* [trace] introduce trace failed to Ext (#11019)
* Edit publish-onchain.sh to use https (#11016)
* Fix deadlock in network-devp2p (#11013)
* EIP 1108: Reduce alt_bn128 precompile gas costs (#11008)
* xDai chain support and nodes list update (#10989)
* EIP 2028: transaction gas lowered from 68 to 16 (#10987)
* EIP-1344 Add CHAINID op-code (#10983)
* manual publish jobs for releases, no changes for nightlies (#10977)
* [blooms-db] Fix benchmarks (#10974)
* Verify transaction against its block during import (#10954)
* Better error message for rpc gas price errors (#10931)
* Fix fork choice (#10837)
* Fix compilation on recent nightlies (#10991)
* Don't build rpc with ethcore test-helpers (#11048)
* EIP 1884 Re-pricing of trie-size dependent operations (#10992)
* Implement EIP-1283 reenable transition, EIP-1706 and EIP-2200 (#10191)
Parity-Ethereum 2.4.1-beta is a bugfix release that improves performance and stability.
## Parity-Ethereum [v2.6.2](https://github.com/paritytech/parity-ethereum/releases/tag/v2.6.2)
Parity Ethereum v2.6.2-stable is a bugfix release that fixes a potential DoS attack in the trace_call RPC method. This is a critical upgrade for anyone running Parity nodes with RPC exposed to the public internet (and highly recommended for anyone else). For details see this blog post.
## Parity-Ethereum [v2.6.1](https://github.com/paritytech/parity-ethereum/releases/tag/v2.6.1)
Parity-Ethereum 2.6.1-beta is a patch release that improves stability.
This release includes:
* Allow specifying hostnames for node URLs
* Fix a bug where archive nodes were losing peers
* Add support for Energy Web Foundations new chains 'Volta' and 'EWC', and remove their deprecated 'Tobalaba' chain.
The full list of included changes:
- 2.4.1 beta backports ([#10471](https://github.com/paritytech/parity-ethereum/pull/10471))
- Version: bump beta
- Implement parity_versionInfo & parity_setChain on LC; fix parity_setChain ([#10312](https://github.com/paritytech/parity-ethereum/pull/10312))
- CI publish to aws ([#10446](https://github.com/paritytech/parity-ethereum/pull/10446))
- CI aws git checkout ([#10451](https://github.com/paritytech/parity-ethereum/pull/10451))
- Revert "CI aws git checkout ([#10451](https://github.com/paritytech/parity-ethereum/pull/10451))" ([#10456](https://github.com/paritytech/parity-ethereum/pull/10456))
- Tests parallelized ([#10452](https://github.com/paritytech/parity-ethereum/pull/10452))
- Ensure static validator set changes are recognized ([#10467](https://github.com/paritytech/parity-ethereum/pull/10467))
* Add support for Energy Web Foundation's new chains (#10957)
* Kaspersky AV whitelisting (#10919)
* Avast whitelist script (#10900)
* Docker images renaming (#10863)
* Remove excessive warning (#10831)
* Allow --nat extip:your.host.here.org (#10830)
* When updating the client or when called from RPC, sleep should mean sleep (#10814)
* added new ropsten-bootnode and removed old one (#10794)
* ethkey no longer uses byteorder (#10786)
* docs: Update Readme with TOC, Contributor Guideline. Update Cargo package descriptions (#10652)
## Parity-Ethereum [v2.4.0](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.0) (2019-02-25)
## Parity-Ethereum [v2.6.0](https://github.com/paritytech/parity-ethereum/releases/tag/v2.6.0)
Parity-Ethereum 2.4.0-beta is our trifortnightly minor version release coming with a lot of new features as well as bugfixes and performance improvements.
Parity-Ethereum 2.6.0-beta is a minor release that stabilizes the 2.6 branch by
marking it as a beta release.
Notable changes:
- Account management is now deprecated ([#10213](https://github.com/paritytech/parity-ethereum/pull/10213))
- Local accounts can now be specified via CLI ([#9960](https://github.com/paritytech/parity-ethereum/pull/9960))
- Chains can now be reset to a particular block via CLI ([#9782](https://github.com/paritytech/parity-ethereum/pull/9782))
- Ethash now additionally implements ProgPoW ([#9762](https://github.com/paritytech/parity-ethereum/pull/9762))
- The `eip1283DisableTransition` flag was added to revert EIP-1283 ([#10214](https://github.com/paritytech/parity-ethereum/pull/10214))
This release includes:
* Major refactoring of the codebase
* Many bugfixes
* Significant improvements to logging, error and warning message clarity.
* SecretStore: remove support of old database formats (#10757)
* This is a potentially breaking change if you have not upgraded for
quite some time.
As of today, Parity-Ethereum 2.4 reaches end of life, and everyone is
encouraged to upgrade.
The full list of included changes:
- More Backports for Beta 2.4.0 ([#10431](https://github.com/paritytech/parity-ethereum/pull/10431))
- Revert some changes, could be buggy ([#10399](https://github.com/paritytech/parity-ethereum/pull/10399))
- Ci: clean up gitlab-ci.yml leftovers from previous merge ([#10429](https://github.com/paritytech/parity-ethereum/pull/10429))
- 10000 > 5000 ([#10422](https://github.com/paritytech/parity-ethereum/pull/10422))
- Fix underflow in pip, closes [#10419](https://github.com/paritytech/parity-ethereum/pull/10419) ([#10423](https://github.com/paritytech/parity-ethereum/pull/10423))
- Fix panic when logging directory does not exist, closes [#10420](https://github.com/paritytech/parity-ethereum/pull/10420) ([#10424](https://github.com/paritytech/parity-ethereum/pull/10424))
- Update hardcoded headers for Foundation, Ropsten, Kovan and Classic ([#10417](https://github.com/paritytech/parity-ethereum/pull/10417))
- Backports for Beta 2.4.0 ([#10416](https://github.com/paritytech/parity-ethereum/pull/10416))
- No-git for publish jobs, empty artifacts dir ([#10393](https://github.com/paritytech/parity-ethereum/pull/10393))
- Snap: reenable i386, arm64, armhf architecture publishing ([#10386](https://github.com/paritytech/parity-ethereum/pull/10386))
- Tx pool: always accept local transactions ([#10375](https://github.com/paritytech/parity-ethereum/pull/10375))
- Fix to_pod storage trie value decoding ([#10368](https://github.com/paritytech/parity-ethereum/pull/10368))
- Version: mark 2.4.0 beta
- Update to latest mem-db, hash-db and trie-db. ([#10314](https://github.com/paritytech/parity-ethereum/pull/10314))
- Tx pool: always accept local transactions ([#10375](https://github.com/paritytech/parity-ethereum/pull/10375))
- Fix(trace_main! macro): don't re-export ([#10384](https://github.com/paritytech/parity-ethereum/pull/10384))
- Exchanged old(azure) bootnodes with new(ovh) ones ([#10309](https://github.com/paritytech/parity-ethereum/pull/10309))
- Ethash: implement Progpow ([#9762](https://github.com/paritytech/parity-ethereum/pull/9762))
- Snap: add the removable-media plug ([#10377](https://github.com/paritytech/parity-ethereum/pull/10377))
- Add message to IO errors ([#10324](https://github.com/paritytech/parity-ethereum/pull/10324))
- Chore(bump parity-daemonize): require rust >= 1.31 ([#10359](https://github.com/paritytech/parity-ethereum/pull/10359))
- Secretstore: use in-memory transport in cluster tests ([#9850](https://github.com/paritytech/parity-ethereum/pull/9850))
- Add fields to `memzero`'s Cargo.toml ([#10362](https://github.com/paritytech/parity-ethereum/pull/10362))
- Snap: release untagged versions from branches to the candidate snap channel ([#10357](https://github.com/paritytech/parity-ethereum/pull/10357))
- Fix(compilation warns): `no-default-features` ([#10346](https://github.com/paritytech/parity-ethereum/pull/10346))
- No volumes are needed, just run -v volume:/path/in/the/container ([#10345](https://github.com/paritytech/parity-ethereum/pull/10345))
- Fixed misstype ([#10351](https://github.com/paritytech/parity-ethereum/pull/10351))
- Snap: prefix version and populate candidate channel ([#10343](https://github.com/paritytech/parity-ethereum/pull/10343))
- Bundle protocol and packet_id together in chain sync ([#10315](https://github.com/paritytech/parity-ethereum/pull/10315))
- Role back docker build image and docker deploy image to ubuntu:xenial… ([#10338](https://github.com/paritytech/parity-ethereum/pull/10338))
- Change docker image based on debian instead of ubuntu due to the chan… ([#10336](https://github.com/paritytech/parity-ethereum/pull/10336))
- Don't add discovery initiators to the node table ([#10305](https://github.com/paritytech/parity-ethereum/pull/10305))
- Fix(docker): fix not receives SIGINT ([#10059](https://github.com/paritytech/parity-ethereum/pull/10059))
- Snap: official image / test ([#10168](https://github.com/paritytech/parity-ethereum/pull/10168))
- Fix(add helper for timestamp overflows) ([#10330](https://github.com/paritytech/parity-ethereum/pull/10330))
- Additional error for invalid gas ([#10327](https://github.com/paritytech/parity-ethereum/pull/10327))
- Revive parity_setMinGasPrice RPC call ([#10294](https://github.com/paritytech/parity-ethereum/pull/10294))
- Add Statetest support for Constantinople Fix ([#10323](https://github.com/paritytech/parity-ethereum/pull/10323))
- Fix(parity-clib): grumbles that were not addressed in [#9920](https://github.com/paritytech/parity-ethereum/pull/9920) ([#10154](https://github.com/paritytech/parity-ethereum/pull/10154))
- Fix(light-rpc): Make `light_sync` generic ([#10238](https://github.com/paritytech/parity-ethereum/pull/10238))
- Fix publish job ([#10317](https://github.com/paritytech/parity-ethereum/pull/10317))
- Secure WS-RPC: grant access to all apis ([#10246](https://github.com/paritytech/parity-ethereum/pull/10246))
- Make specification of protocol in SyncRequester::send_request explicit ([#10295](https://github.com/paritytech/parity-ethereum/pull/10295))
- Fix: parity-clib/examples/cpp/CMakeLists.txt ([#10313](https://github.com/paritytech/parity-ethereum/pull/10313))
- Ci optimizations ([#10297](https://github.com/paritytech/parity-ethereum/pull/10297))
- Increase number of requested block bodies in chain sync ([#10247](https://github.com/paritytech/parity-ethereum/pull/10247))
- Deprecate account management ([#10213](https://github.com/paritytech/parity-ethereum/pull/10213))
- Properly handle check_epoch_end_signal errors ([#10015](https://github.com/paritytech/parity-ethereum/pull/10015))
- Fix(osx and windows builds): bump parity-daemonize ([#10291](https://github.com/paritytech/parity-ethereum/pull/10291))
- Add missing step for Using `systemd` service file ([#10175](https://github.com/paritytech/parity-ethereum/pull/10175))
- Call private contract methods from another private contract (read-onl… ([#10086](https://github.com/paritytech/parity-ethereum/pull/10086))
- Update ring to 0.14 ([#10262](https://github.com/paritytech/parity-ethereum/pull/10262))
- Fix(secret-store): deprecation warning ([#10301](https://github.com/paritytech/parity-ethereum/pull/10301))
- Update to jsonrpc-derive 10.0.2, fixes aliases bug ([#10300](https://github.com/paritytech/parity-ethereum/pull/10300))
- Convert to jsonrpc-derive, use jsonrpc-* from crates.io ([#10298](https://github.com/paritytech/parity-ethereum/pull/10298))
- Fix Windows build ([#10284](https://github.com/paritytech/parity-ethereum/pull/10284))
- Don't run the CPP example on CI ([#10285](https://github.com/paritytech/parity-ethereum/pull/10285))
- Additional tests for uint deserialization. ([#10279](https://github.com/paritytech/parity-ethereum/pull/10279))
- Prevent silent errors in daemon mode ([#10007](https://github.com/paritytech/parity-ethereum/pull/10007))
- Fix join-set test to be deterministic. ([#10263](https://github.com/paritytech/parity-ethereum/pull/10263))
- Update CHANGELOG-2.2.md ([#10254](https://github.com/paritytech/parity-ethereum/pull/10254))
- Macos heapsize force jemalloc ([#10234](https://github.com/paritytech/parity-ethereum/pull/10234))
- Allow specifying local accounts via CLI ([#9960](https://github.com/paritytech/parity-ethereum/pull/9960))
- Take in account zero gas price certification when doing transact_cont… ([#10232](https://github.com/paritytech/parity-ethereum/pull/10232))
- Update CHANGELOG.md ([#10249](https://github.com/paritytech/parity-ethereum/pull/10249))
- Fix typo: CHANGELOG-2.1 -> CHANGELOG-2.2 ([#10233](https://github.com/paritytech/parity-ethereum/pull/10233))
- Update copyright year to 2019. ([#10181](https://github.com/paritytech/parity-ethereum/pull/10181))
- Fixed: types::transaction::SignedTransaction; ([#10229](https://github.com/paritytech/parity-ethereum/pull/10229))
- Fix(ManageNetwork): replace Range with RangeInclusive ([#10209](https://github.com/paritytech/parity-ethereum/pull/10209))
- Import rpc transactions sequentially ([#10051](https://github.com/paritytech/parity-ethereum/pull/10051))
- Enable St-Peters-Fork ("Constantinople Fix") ([#10223](https://github.com/paritytech/parity-ethereum/pull/10223))
- Add EIP-1283 disable transition ([#10214](https://github.com/paritytech/parity-ethereum/pull/10214))
- Echo CORS request headers by default ([#10221](https://github.com/paritytech/parity-ethereum/pull/10221))
- Happy New Year! ([#10211](https://github.com/paritytech/parity-ethereum/pull/10211))
- Perform stripping during build ([#10208](https://github.com/paritytech/parity-ethereum/pull/10208))
- Remove CallContract and RegistryInfo re-exports from `ethcore/client` ([#10205](https://github.com/paritytech/parity-ethereum/pull/10205))
- Extract CallContract and RegistryInfo traits into their own crate ([#10178](https://github.com/paritytech/parity-ethereum/pull/10178))
- Update the changelogs for 2.1.11, 2.2.6, 2.2.7, and 2.3.0 ([#10197](https://github.com/paritytech/parity-ethereum/pull/10197))
- Cancel Constantinople HF on POA Core ([#10198](https://github.com/paritytech/parity-ethereum/pull/10198))
- Adds cli interface to allow reseting chain to a particular block ([#9782](https://github.com/paritytech/parity-ethereum/pull/9782))
- Run all `igd` methods in its own thread ([#10195](https://github.com/paritytech/parity-ethereum/pull/10195))
- Pull constantinople on ethereum network ([#10189](https://github.com/paritytech/parity-ethereum/pull/10189))
- Update for Android cross-compilation. ([#10180](https://github.com/paritytech/parity-ethereum/pull/10180))
- Version: bump fork blocks for kovan and foundation ([#10186](https://github.com/paritytech/parity-ethereum/pull/10186))
- Handle the case for contract creation on an empty but exist account w… ([#10065](https://github.com/paritytech/parity-ethereum/pull/10065))
- Align personal_unlockAccount behaviour when permanent unlock is disab… ([#10060](https://github.com/paritytech/parity-ethereum/pull/10060))
- Drop `runtime` after others (especially `ws_server`) ([#10179](https://github.com/paritytech/parity-ethereum/pull/10179))
- Version: bump nightly to 2.4 ([#10165](https://github.com/paritytech/parity-ethereum/pull/10165))
- Skip locking in statedb for non-canon blocks ([#10141](https://github.com/paritytech/parity-ethereum/pull/10141))
- Remove reference to ui-interface command-line option ([#10170](https://github.com/paritytech/parity-ethereum/pull/10170))
- Fix [#9822](https://github.com/paritytech/parity-ethereum/pull/9822): trace_filter does not return failed contract creation ([#10140](https://github.com/paritytech/parity-ethereum/pull/10140))
- Fix _cannot recursively call into `Core`_ issue ([#10144](https://github.com/paritytech/parity-ethereum/pull/10144))
- Fix(whisper): correct PoW calculation ([#10166](https://github.com/paritytech/parity-ethereum/pull/10166))
- Bump JSON-RPC ([#10151](https://github.com/paritytech/parity-ethereum/pull/10151))
- Ping nodes from discovery ([#10167](https://github.com/paritytech/parity-ethereum/pull/10167))
- Fix(android): remove dependency to libusb ([#10161](https://github.com/paritytech/parity-ethereum/pull/10161))
- Refactor(trim_right_matches -> trim_end_matches) ([#10159](https://github.com/paritytech/parity-ethereum/pull/10159))
- Merge Machine and WithRewards ([#10071](https://github.com/paritytech/parity-ethereum/pull/10071))
* update jsonrpc to 12.0 ([#10841](https://github.com/paritytech/parity-ethereum/pull/10841))
* Move more code into state-account ([#10840](https://github.com/paritytech/parity-ethereum/pull/10840))
* Extract AccountDB to account-db ([#10839](https://github.com/paritytech/parity-ethereum/pull/10839))
* Extricate PodAccount and state Account to own crates ([#10838](https://github.com/paritytech/parity-ethereum/pull/10838))
* Fix fork choice ([#10837](https://github.com/paritytech/parity-ethereum/pull/10837))
* tests: Relates to #10655: Test instructions for Readme ([#10835](https://github.com/paritytech/parity-ethereum/pull/10835))
* idiomatic changes to PodState ([#10834](https://github.com/paritytech/parity-ethereum/pull/10834))
* Break circular dependency between Client and Engine (part 1) ([#10833](https://github.com/paritytech/parity-ethereum/pull/10833))
* Remove excessive warning ([#10831](https://github.com/paritytech/parity-ethereum/pull/10831))
* Allow --nat extip:your.host.here.org ([#10830](https://github.com/paritytech/parity-ethereum/pull/10830))
* ethcore does not use byteorder ([#10829](https://github.com/paritytech/parity-ethereum/pull/10829))
* Fix typo in README.md ([#10828](https://github.com/paritytech/parity-ethereum/pull/10828))
* Update wordlist to v1.3 ([#10823](https://github.com/paritytech/parity-ethereum/pull/10823))
* bump `smallvec 0.6.10` to fix vulnerability ([#10822](https://github.com/paritytech/parity-ethereum/pull/10822))
* removed additional_params method ([#10818](https://github.com/paritytech/parity-ethereum/pull/10818))
* Improve logging when remote peer is unknown ([#10817](https://github.com/paritytech/parity-ethereum/pull/10817))
* replace memzero with zeroize crate ([#10816](https://github.com/paritytech/parity-ethereum/pull/10816))
* When updating the client or when called from RPC, sleep should mean sleep ([#10814](https://github.com/paritytech/parity-ethereum/pull/10814))
* Don't reimplement the logic from the Default impl ([#10813](https://github.com/paritytech/parity-ethereum/pull/10813))
* refactor: whisper: Add type aliases and update rustdocs in message.rs ([#10812](https://github.com/paritytech/parity-ethereum/pull/10812))
* test: whisper/cli `add invalid pool size test depending on processor` ([#10811](https://github.com/paritytech/parity-ethereum/pull/10811))
* Add Constantinople EIPs to the dev (instant_seal) config ([#10809](https://github.com/paritytech/parity-ethereum/pull/10809))
* fix spurious test failure ([#10808](https://github.com/paritytech/parity-ethereum/pull/10808))
* revert temp changes to .gitlab-ci.yml ([#10807](https://github.com/paritytech/parity-ethereum/pull/10807))
* removed redundant fmt::Display implementations ([#10806](https://github.com/paritytech/parity-ethereum/pull/10806))
* removed EthEngine alias ([#10805](https://github.com/paritytech/parity-ethereum/pull/10805))
* ethcore-bloom-journal updated to 2018 ([#10804](https://github.com/paritytech/parity-ethereum/pull/10804))
* Fix a few typos and unused warnings. ([#10803](https://github.com/paritytech/parity-ethereum/pull/10803))
* updated price-info to edition 2018 ([#10801](https://github.com/paritytech/parity-ethereum/pull/10801))
* updated parity-local-store to edition 2018 ([#10800](https://github.com/paritytech/parity-ethereum/pull/10800))
* updated project to ansi_term 0.11 ([#10799](https://github.com/paritytech/parity-ethereum/pull/10799))
* ethcore-light uses bincode 1.1 ([#10798](https://github.com/paritytech/parity-ethereum/pull/10798))
* ethcore-network-devp2p uses igd 0.9 ([#10797](https://github.com/paritytech/parity-ethereum/pull/10797))
* Better logging when backfilling ancient blocks fail ([#10796](https://github.com/paritytech/parity-ethereum/pull/10796))
* added new ropsten-bootnode and removed old one ([#10794](https://github.com/paritytech/parity-ethereum/pull/10794))
* Removed machine abstraction from ethcore ([#10791](https://github.com/paritytech/parity-ethereum/pull/10791))
* Removed redundant ethcore-service error type ([#10788](https://github.com/paritytech/parity-ethereum/pull/10788))
* Cleanup unused vm dependencies ([#10787](https://github.com/paritytech/parity-ethereum/pull/10787))
* ethkey no longer uses byteorder ([#10786](https://github.com/paritytech/parity-ethereum/pull/10786))
* Updated blooms-db to rust 2018 and removed redundant deps ([#10785](https://github.com/paritytech/parity-ethereum/pull/10785))
* Treat empty account the same as non-exist accounts in EIP-1052 ([#10775](https://github.com/paritytech/parity-ethereum/pull/10775))
* Do not drop the peer with None difficulty ([#10772](https://github.com/paritytech/parity-ethereum/pull/10772))
* EIP-1702: Generalized Account Versioning Scheme ([#10771](https://github.com/paritytech/parity-ethereum/pull/10771))
* Move Engine::register_client to be before other I/O handler registration ([#10767](https://github.com/paritytech/parity-ethereum/pull/10767))
* ethcore/res: activate atlantis classic hf on block 8772000 ([#10766](https://github.com/paritytech/parity-ethereum/pull/10766))
* Updated Bn128PairingImpl to use optimized batch pairing ([#10765](https://github.com/paritytech/parity-ethereum/pull/10765))
* Remove unused code ([#10762](https://github.com/paritytech/parity-ethereum/pull/10762))
* Initialize private tx logger only if private tx functionality is enabled ([#10758](https://github.com/paritytech/parity-ethereum/pull/10758))
* SecretStore: remove support of old database formats ([#10757](https://github.com/paritytech/parity-ethereum/pull/10757))
* Enable aesni ([#10756](https://github.com/paritytech/parity-ethereum/pull/10756))
* updater: fix static id hashes initialization ([#10755](https://github.com/paritytech/parity-ethereum/pull/10755))
* Use fewer threads for snapshotting ([#10752](https://github.com/paritytech/parity-ethereum/pull/10752))
* Die error_chain, die ([#10747](https://github.com/paritytech/parity-ethereum/pull/10747))
* Fix deprectation warnings on nightly ([#10746](https://github.com/paritytech/parity-ethereum/pull/10746))
* Improve logging and cleanup in miner around block sealing ([#10745](https://github.com/paritytech/parity-ethereum/pull/10745))
* Add a way to signal shutdown to snapshotting threads ([#10744](https://github.com/paritytech/parity-ethereum/pull/10744))
* fix docker tags for publishing ([#10741](https://github.com/paritytech/parity-ethereum/pull/10741))
* refactor: Fix indentation in ethjson ([#10740](https://github.com/paritytech/parity-ethereum/pull/10740))
* Log validator set changes in EpochManager ([#10734](https://github.com/paritytech/parity-ethereum/pull/10734))
* Print warnings when using dangerous settings for ValidatorSet ([#10733](https://github.com/paritytech/parity-ethereum/pull/10733))
* ethcore: enable ECIP-1054 for classic ([#10731](https://github.com/paritytech/parity-ethereum/pull/10731))
* Stop breaking out of loop if a non-canonical hash is found ([#10729](https://github.com/paritytech/parity-ethereum/pull/10729))
* Removed secret_store folder ([#10722](https://github.com/paritytech/parity-ethereum/pull/10722))
* Revert "enable lto for release builds (#10717)" ([#10721](https://github.com/paritytech/parity-ethereum/pull/10721))
* fix: aura don't add `SystemTime::now()` ([#10720](https://github.com/paritytech/parity-ethereum/pull/10720))
* Use RUSTFLAGS to set the optimization level ([#10719](https://github.com/paritytech/parity-ethereum/pull/10719))
* enable lto for release builds ([#10717](https://github.com/paritytech/parity-ethereum/pull/10717))
* [devp2p] Update to 2018 edition ([#10716](https://github.com/paritytech/parity-ethereum/pull/10716))
* [devp2p] Don't use `rust-crypto` ([#10714](https://github.com/paritytech/parity-ethereum/pull/10714))
* [devp2p] Fix warnings and re-org imports ([#10710](https://github.com/paritytech/parity-ethereum/pull/10710))
* DevP2p: Get node IP address and udp port from Socket, if not included in PING packet ([#10705](https://github.com/paritytech/parity-ethereum/pull/10705))
* introduce MissingParent Error, fixes #10699 ([#10700](https://github.com/paritytech/parity-ethereum/pull/10700))
* Refactor Clique stepping ([#10691](https://github.com/paritytech/parity-ethereum/pull/10691))
* add_sync_notifier in EthPubSubClient holds on to a Client for too long ([#10689](https://github.com/paritytech/parity-ethereum/pull/10689))
* Fix compiler warning (that will become an error) ([#10683](https://github.com/paritytech/parity-ethereum/pull/10683))
* Don't panic if extra_data is longer than VANITY_LENGTH ([#10682](https://github.com/paritytech/parity-ethereum/pull/10682))
* Remove annoying compiler warnings ([#10679](https://github.com/paritytech/parity-ethereum/pull/10679))
* Remove support for hardware wallets ([#10678](https://github.com/paritytech/parity-ethereum/pull/10678))
* [CI] allow cargo audit to fail ([#10676](https://github.com/paritytech/parity-ethereum/pull/10676))
* new image ([#10673](https://github.com/paritytech/parity-ethereum/pull/10673))
* Upgrade ethereum types ([#10670](https://github.com/paritytech/parity-ethereum/pull/10670))
* Reset blockchain properly ([#10669](https://github.com/paritytech/parity-ethereum/pull/10669))
* fix: Move PR template into .github/ folder ([#10663](https://github.com/paritytech/parity-ethereum/pull/10663))
* docs: evmbin - Update Rust docs ([#10658](https://github.com/paritytech/parity-ethereum/pull/10658))
* refactor: Related #9459 - evmbin: replace untyped json! macro with fully typed serde serialization using Rust structs ([#10657](https://github.com/paritytech/parity-ethereum/pull/10657))
* docs: Add PR template ([#10654](https://github.com/paritytech/parity-ethereum/pull/10654))
* docs: Add ProgPoW Rust docs to ethash module ([#10653](https://github.com/paritytech/parity-ethereum/pull/10653))
* docs: Update Readme with TOC, Contributor Guideline. Update Cargo package descriptions ([#10652](https://github.com/paritytech/parity-ethereum/pull/10652))
* Upgrade to parity-crypto 0.4 ([#10650](https://github.com/paritytech/parity-ethereum/pull/10650))
* fix(compilation warnings) ([#10649](https://github.com/paritytech/parity-ethereum/pull/10649))
* [whisper] Move needed aes_gcm crypto in-crate ([#10647](https://github.com/paritytech/parity-ethereum/pull/10647))
* Update publishing ([#10644](https://github.com/paritytech/parity-ethereum/pull/10644))
* ci: publish docs debug ([#10638](https://github.com/paritytech/parity-ethereum/pull/10638))
* Fix publish docs ([#10635](https://github.com/paritytech/parity-ethereum/pull/10635))
* Fix rinkeby petersburg fork ([#10632](https://github.com/paritytech/parity-ethereum/pull/10632))
* Update kovan.json to switch Kovan validator set to POA Consensus Contracts ([#10628](https://github.com/paritytech/parity-ethereum/pull/10628))
* [ethcore] remove error_chain ([#10616](https://github.com/paritytech/parity-ethereum/pull/10616))
* Remove unused import ([#10615](https://github.com/paritytech/parity-ethereum/pull/10615))
* Adds parity_getRawBlockByNumber, parity_submitRawBlock ([#10609](https://github.com/paritytech/parity-ethereum/pull/10609))
* adds rpc error message for --no-ancient-blocks ([#10608](https://github.com/paritytech/parity-ethereum/pull/10608))
* Constantinople HF on POA Core ([#10606](https://github.com/paritytech/parity-ethereum/pull/10606))
* Clique: zero-fill extradata when the supplied value is less than 32 bytes in length ([#10605](https://github.com/paritytech/parity-ethereum/pull/10605))
* evm: add some mulmod benches ([#10600](https://github.com/paritytech/parity-ethereum/pull/10600))
* sccache logs to stdout ([#10596](https://github.com/paritytech/parity-ethereum/pull/10596))
* update bootnodes ([#10595](https://github.com/paritytech/parity-ethereum/pull/10595))
* Merge `Notifier` and `TransactionsPoolNotifier` ([#10591](https://github.com/paritytech/parity-ethereum/pull/10591))
* fix(whisper): change expiry `unix_time + ttl + work` ([#10587](https://github.com/paritytech/parity-ethereum/pull/10587))
* fix(evmbin): make benches compile again ([#10586](https://github.com/paritytech/parity-ethereum/pull/10586))
* fix issue with compilation when 'slow-blocks' feature enabled ([#10585](https://github.com/paritytech/parity-ethereum/pull/10585))
* Allow CORS requests in Secret Store API ([#10584](https://github.com/paritytech/parity-ethereum/pull/10584))
* CI improvements ([#10579](https://github.com/paritytech/parity-ethereum/pull/10579))
* ethcore: improve timestamp handling ([#10574](https://github.com/paritytech/parity-ethereum/pull/10574))
* Update Issue Template to direct security issue to email ([#10562](https://github.com/paritytech/parity-ethereum/pull/10562))
* version: bump master to 2.6 ([#10560](https://github.com/paritytech/parity-ethereum/pull/10560))
* fix(light cull): poll light cull instead of timer ([#10559](https://github.com/paritytech/parity-ethereum/pull/10559))
* Watch transactions pool ([#10558](https://github.com/paritytech/parity-ethereum/pull/10558))
* Add SealingState; don't prepare block when not ready. ([#10529](https://github.com/paritytech/parity-ethereum/pull/10529))
* Explicitly enable or disable Stratum in config file (Issue 9785) ([#10521](https://github.com/paritytech/parity-ethereum/pull/10521))
* Add filtering capability to `parity_pendingTransactions` (issue 8269) ([#10506](https://github.com/paritytech/parity-ethereum/pull/10506))
* Remove calls to heapsize ([#10432](https://github.com/paritytech/parity-ethereum/pull/10432))
* RPC: Implements eth_subscribe("syncing") ([#10311](https://github.com/paritytech/parity-ethereum/pull/10311))
* SecretStore: non-blocking wait of session completion ([#10303](https://github.com/paritytech/parity-ethereum/pull/10303))
* Node table limiting and cache for node filter ([#10288](https://github.com/paritytech/parity-ethereum/pull/10288))
* SecretStore: expose restore_key_public in HTTP API ([#10241](https://github.com/paritytech/parity-ethereum/pull/10241))
* Trivial journal for private transactions ([#10056](https://github.com/paritytech/parity-ethereum/pull/10056))
## Previous releases
- [CHANGELOG-2.3](docs/CHANGELOG-2.3.md) (_stable_)
- [CHANGELOG-2.5](docs/CHANGELOG-2.5.md) (_stable_)
- [CHANGELOG-2.4](docs/CHANGELOG-2.4.md) (EOL: 2019-07-08)
- [CHANGELOG-2.3](docs/CHANGELOG-2.3.md) (EOL: 2019-04-09)
- [CHANGELOG-2.2](docs/CHANGELOG-2.2.md) (EOL: 2019-02-25)
- [CHANGELOG-2.1](docs/CHANGELOG-2.1.md) (EOL: 2019-01-16)
- [CHANGELOG-2.0](docs/CHANGELOG-2.0.md) (EOL: 2018-11-15)

1567
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
description = "Parity Ethereum client"
name = "parity-ethereum"
# NOTE Make sure to update util/version/Cargo.toml as well
version = "2.6.0"
version = "2.6.5"
license = "GPL-3.0"
authors = ["Parity Technologies <admin@parity.io>"]
@@ -19,7 +19,7 @@ number_prefix = "0.2"
rpassword = "1.0"
semver = "0.9"
ansi_term = "0.11"
parking_lot = "0.7"
parking_lot = "0.9"
regex = "1.0"
atty = "0.2.8"
toml = "0.4"
@@ -29,7 +29,7 @@ serde_derive = "1.0"
futures = "0.1"
fdlimit = "0.1"
ctrlc = { git = "https://github.com/paritytech/rust-ctrlc.git" }
jsonrpc-core = "12.0.0"
jsonrpc-core = "14.0.3"
parity-bytes = "0.1"
common-types = { path = "ethcore/types" }
ethcore = { path = "ethcore", features = ["parity"] }
@@ -66,7 +66,7 @@ panic_hook = { path = "util/panic-hook" }
keccak-hash = "0.2.0"
migration-rocksdb = { path = "util/migration-rocksdb" }
kvdb = "0.1"
kvdb-rocksdb = "0.1.3"
kvdb-rocksdb = "0.1.5"
journaldb = { path = "util/journaldb" }
ethcore-secretstore = { path = "secret-store", optional = true }
@@ -92,7 +92,6 @@ default = ["accounts"]
accounts = ["ethcore-accounts", "parity-rpc/accounts"]
miner-debug = ["ethcore/miner-debug"]
json-tests = ["ethcore/json-tests"]
ci-skip-tests = ["ethcore/ci-skip-tests"]
test-heavy = ["ethcore/test-heavy"]
evm-debug = ["ethcore/evm-debug"]
evm-debug-tests = ["ethcore/evm-debug-tests"]

View File

@@ -151,7 +151,7 @@ To start Parity Ethereum as a regular user using `systemd` init:
## 4. Testing <a id="chapter-004"></a>
You can run tests with the following commands:
Download the required test files: `git submodule update --init --recursive`. You can run tests with the following commands:
* **All** packages
```

View File

@@ -11,7 +11,7 @@ edition = "2018"
ethkey = { path = "ethkey" }
ethstore = { path = "ethstore" }
log = "0.4"
parking_lot = "0.7"
parking_lot = "0.9"
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"

View File

@@ -16,7 +16,7 @@ rustc-hex = "1.0"
tiny-keccak = "1.4"
time = "0.1.34"
itertools = "0.5"
parking_lot = "0.7"
parking_lot = "0.9"
parity-crypto = "0.4.0"
ethereum-types = "0.6.0"
dir = { path = "../../util/dir" }

View File

@@ -11,7 +11,7 @@ num_cpus = "1.6"
rustc-hex = "1.0"
serde = "1.0"
serde_derive = "1.0"
parking_lot = "0.7"
parking_lot = "0.9"
ethstore = { path = "../" }
dir = { path = '../../../util/dir' }
panic_hook = { path = "../../../util/panic-hook" }

View File

@@ -12,10 +12,10 @@ futures = "0.1"
log = "0.4"
serde = "1.0"
serde_json = "1.0"
url = "1.2.0"
url = "2.1.0"
matches = "0.1"
parking_lot = "0.7"
jsonrpc-core = "12.0.0"
jsonrpc-ws-server = "12.0.0"
parking_lot = "0.9"
jsonrpc-core = "14.0.3"
jsonrpc-ws-server = "14.0.3"
parity-rpc = { path = "../../rpc" }
keccak-hash = "0.2.0"

128
docs/CHANGELOG-2.4.md Normal file
View File

@@ -0,0 +1,128 @@
## Parity-Ethereum [v2.4.9](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.9)
Parity Ethereum v2.4.9-stable is a security update which addresses servo/rust-smallvec#148
The full list of included changes:
* cargo update -p smallvec ([#10822](https://github.com/paritytech/parity-ethereum/pull/10822))
## Parity-Ethereum [v2.4.8](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.8)
Parity-Ethereum 2.4.8-stable is a bugfix release that improves performance and stability.
* Blockchain: fix reset chain
* State tests: treat empty accounts the same as non-existant accounts (EIP 1052)
* Aura: fix Timestamp Overflow
* Networking: support discovery-only peers (geth bootnodes)
* Snapshotting: fix unclean shutdown while snappshotting is under way
The full list of included changes:
* ethcore/res: activate atlantis classic hf on block 8772000 ([#10766](https://github.com/paritytech/parity-ethereum/pull/10766))
* fix docker tags for publishing ([#10741](https://github.com/paritytech/parity-ethereum/pull/10741))
* Reset blockchain properly ([#10669](https://github.com/paritytech/parity-ethereum/pull/10669))
* adds rpc error message for --no-ancient-blocks ([#10608](https://github.com/paritytech/parity-ethereum/pull/10608))
* Treat empty account the same as non-exist accounts in EIP-1052 ([#10775](https://github.com/paritytech/parity-ethereum/pull/10775))
* fix: aura don't add `SystemTime::now()` ([#10720](https://github.com/paritytech/parity-ethereum/pull/10720))
* DevP2p: Get node IP address and udp port from Socket, if not included in PING packet ([#10705](https://github.com/paritytech/parity-ethereum/pull/10705))
* Revert "fix: aura don't add `SystemTime::now()` ([#10720](https://github.com/paritytech/parity-ethereum/pull/10720))"
* Add a way to signal shutdown to snapshotting threads ([#10744](https://github.com/paritytech/parity-ethereum/pull/10744))
## Parity-Ethereum [v2.4.7](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.7)
Parity-Ethereum 2.4.7-stable is a bugfix release that improves performance and stability.
Among others, it enables the _Atlantis_ hardfork on **Morden** and **Kotti** Classic networks.
The full list of included changes:
* [CI] allow cargo audit to fail ([#10676](https://github.com/paritytech/parity-ethereum/pull/10676))
* new image ([#10673](https://github.com/paritytech/parity-ethereum/pull/10673))
* Update publishing ([#10644](https://github.com/paritytech/parity-ethereum/pull/10644))
* enable lto for release builds ([#10717](https://github.com/paritytech/parity-ethereum/pull/10717))
* Use RUSTFLAGS to set the optimization level ([#10719](https://github.com/paritytech/parity-ethereum/pull/10719))
* ethcore: enable ECIP-1054 for classic ([#10731](https://github.com/paritytech/parity-ethereum/pull/10731))
## Parity-Ethereum [v2.4.6](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.6)
Parity-Ethereum 2.4.6-stable is a bugfix release that improves performance and stability.
Among others, it enables the Petersburg hardfork on **Rinkeby** and **POA-Core** Network, as well as the **Kovan** Network community hardfork.
The full list of included changes:
* ci: publish docs debug ([#10638](https://github.com/paritytech/parity-ethereum/pull/10638))
## Parity-Ethereum [v2.4.5](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.5)
Parity-Ethereum 2.4.5-stable is a bugfix release that improves performance and stability. This release improves memory optimizations around timestamp handling and stabilizes the 2.4 release branch.
As of today, Parity-Ethereum 2.3 reaches end of life and everyone is encouraged to upgrade.
## Parity-Ethereum [v2.4.4](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.4)
Parity-Ethereum 2.4.4-beta is a bugfix release that improves performance and stability. This patch release removes the dead chain configs for Easthub and Ethereum Social.
The full list of included changes:
* fix(rpc-types): replace uint and hash with `ethereum_types v0.4` ([#10217](https://github.com/paritytech/parity-ethereum/pull/10217))
* chore(bump ethereum-types) ([#10396](https://github.com/paritytech/parity-ethereum/pull/10396))
* fix(light eth_gasPrice): ask network if not in cache ([#10535](https://github.com/paritytech/parity-ethereum/pull/10535))
* fix(light account response): update `tx_queue` ([#10545](https://github.com/paritytech/parity-ethereum/pull/10545))
* fix(bump dependencies) ([#10540](https://github.com/paritytech/parity-ethereum/pull/10540))
* tx-pool: check transaction readiness before replacing ([#10526](https://github.com/paritytech/parity-ethereum/pull/10526))
* fix #10390 ([#10391](https://github.com/paritytech/parity-ethereum/pull/10391))
* private-tx: replace error_chain ([#10510](https://github.com/paritytech/parity-ethereum/pull/10510))
## Parity-Ethereum [v2.4.3](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.3)
Parity-Ethereum 2.4.3-beta is a bugfix release that improves performance and stability. This patch release contains a critical bug fix where serving light clients previously led to client crashes. Upgrading is highly recommended.
The full list of included changes:
* Add additional request tests ([#10503](https://github.com/paritytech/parity-ethereum/pull/10503))
## Parity-Ethereum [v2.4.2](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.2)
Parity-Ethereum 2.4.2-beta is a bugfix release that improves performance and stability.
The full list of included changes:
* Сaching through docker volume ([#10477](https://github.com/paritytech/parity-ethereum/pull/10477))
* fix win&mac build ([#10486](https://github.com/paritytech/parity-ethereum/pull/10486))
* fix(extract `timestamp_checked_add` as lib) ([#10383](https://github.com/paritytech/parity-ethereum/pull/10383))
## Parity-Ethereum [v2.4.1](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.1)
Parity-Ethereum 2.4.1-beta is a bugfix release that improves performance and stability.
The full list of included changes:
* Implement parity_versionInfo & parity_setChain on LC; fix parity_setChain ([#10312](https://github.com/paritytech/parity-ethereum/pull/10312))
* CI publish to aws ([#10446](https://github.com/paritytech/parity-ethereum/pull/10446))
* CI aws git checkout ([#10451](https://github.com/paritytech/parity-ethereum/pull/10451))
* Revert "CI aws git checkout ([#10451](https://github.com/paritytech/parity-ethereum/pull/10451))" (#10456)
* Revert "CI aws git checkout ([#10451](https://github.com/paritytech/parity-ethereum/pull/10451))"
* Tests parallelized ([#10452](https://github.com/paritytech/parity-ethereum/pull/10452))
* Ensure static validator set changes are recognized ([#10467](https://github.com/paritytech/parity-ethereum/pull/10467))
## Parity-Ethereum [v2.4.0](https://github.com/paritytech/parity-ethereum/releases/tag/v2.4.0)
Parity-Ethereum 2.4.0-beta is our trifortnightly minor version release coming with a lot of new features as well as bugfixes and performance improvements.
Notable changes:
- Account management is now deprecated ([#10213](https://github.com/paritytech/parity-ethereum/pull/10213))
- Local accounts can now be specified via CLI ([#9960](https://github.com/paritytech/parity-ethereum/pull/9960))
- Chains can now be reset to a particular block via CLI ([#9782](https://github.com/paritytech/parity-ethereum/pull/9782))
- Ethash now additionally implements ProgPoW ([#9762](https://github.com/paritytech/parity-ethereum/pull/9762))
- The `eip1283DisableTransition` flag was added to revert EIP-1283 ([#10214](https://github.com/paritytech/parity-ethereum/pull/10214))
The full list of included changes:
* revert some changes, could be buggy ([#10399](https://github.com/paritytech/parity-ethereum/pull/10399))
* 10000 > 5000 ([#10422](https://github.com/paritytech/parity-ethereum/pull/10422))
* fix panic when logging directory does not exist, closes #10420 ([#10424](https://github.com/paritytech/parity-ethereum/pull/10424))
* fix underflow in pip, closes #10419 ([#10423](https://github.com/paritytech/parity-ethereum/pull/10423))
* ci: clean up gitlab-ci.yml leftovers from previous merge ([#10429](https://github.com/paritytech/parity-ethereum/pull/10429))
* Update hardcoded headers for Foundation, Ropsten, Kovan and Classic ([#10417](https://github.com/paritytech/parity-ethereum/pull/10417))

View File

@@ -11,11 +11,11 @@ ethereum-types = "0.6.0"
keccak-hash = "0.2.0"
log = "0.4"
memmap = "0.6"
parking_lot = "0.7"
parking_lot = "0.9"
primal = "0.2.3"
[dev-dependencies]
criterion = "0.2"
criterion = "0.3"
rustc-hex = "1.0"
serde_json = "1.0"
tempdir = "0.3"

View File

@@ -10,9 +10,8 @@ authors = ["Parity Technologies <admin@parity.io>"]
account-db = { path = "account-db" }
ansi_term = "0.11"
blooms-db = { path = "../util/blooms-db", optional = true }
bn = { git = "https://github.com/paritytech/bn", default-features = false }
common-types = { path = "types" }
crossbeam = "0.4"
crossbeam-utils = "0.6"
derive_more = "0.14.0"
env_logger = { version = "0.5", optional = true }
ethabi = "8.0"
@@ -21,6 +20,7 @@ ethabi-derive = "8.0"
ethash = { path = "../ethash" }
ethcore-blockchain = { path = "./blockchain" }
ethcore-bloom-journal = { path = "../util/bloom" }
ethcore-builtin = { path = "./builtin" }
ethcore-call-contract = { path = "./call-contract" }
ethcore-db = { path = "./db" }
ethcore-io = { path = "../util/io" }
@@ -39,7 +39,7 @@ keccak-hash = "0.2.0"
keccak-hasher = { path = "../util/keccak-hasher" }
kvdb = "0.1"
kvdb-memorydb = "0.1"
kvdb-rocksdb = { version = "0.1.3", optional = true }
kvdb-rocksdb = { version = "0.1.5", optional = true }
lazy_static = "1.2.0"
len-caching-lock = { path = "../util/len-caching-lock" }
log = "0.4"
@@ -47,20 +47,19 @@ lru-cache = "0.1"
macros = { path = "../util/macros" }
memory-cache = { path = "../util/memory-cache" }
memory-db = "0.12.4"
num = { version = "0.1", default-features = false, features = ["bigint"] }
num_cpus = "1.2"
parity-bytes = "0.1"
parity-crypto = "0.4.0"
parity-snappy = "0.1"
parking_lot = "0.7"
parking_lot = "0.9"
pod-account = { path = "pod-account" }
trie-db = "0.12.4"
patricia-trie-ethereum = { path = "../util/patricia-trie-ethereum" }
rand = "0.6"
rayon = "1.0"
rayon = "1.1"
rlp = "0.4.0"
rlp_derive = { path = "../util/rlp-derive" }
rustc-hex = "1.0"
rustc-hex = "1"
scopeguard = "1.0.0"
serde = "1.0"
serde_derive = "1.0"
state-account = { path = "state-account" }
@@ -77,11 +76,13 @@ rand_xorshift = "0.1.1"
[dev-dependencies]
blooms-db = { path = "../util/blooms-db" }
criterion = "0.2"
criterion = "0.3"
env_logger = "0.5"
ethcore-accounts = { path = "../accounts" }
ethjson = { path = "../json", features = ["test-helpers"] }
ethkey = { path = "../accounts/ethkey" }
fetch = { path = "../util/fetch" }
kvdb-rocksdb = "0.1.3"
kvdb-rocksdb = "0.1.5"
parity-runtime = { path = "../util/runtime" }
rlp_compress = { path = "../util/rlp-compress" }
serde_json = "1.0"
@@ -111,8 +112,6 @@ evm-debug-tests = ["evm-debug", "evm/evm-debug-tests"]
slow-blocks = []
# Run JSON consensus tests.
json-tests = ["env_logger", "test-helpers", "to-pod-full"]
# Skip JSON consensus tests with pending issues.
ci-skip-tests = []
# Run memory/cpu heavy tests.
test-heavy = []
# Compile test helpers

View File

@@ -21,13 +21,14 @@ extern crate criterion;
extern crate lazy_static;
extern crate ethcore;
extern crate ethcore_builtin as builtin;
extern crate ethereum_types;
extern crate parity_bytes as bytes;
extern crate rustc_hex;
use criterion::{Criterion, Bencher};
use bytes::BytesRef;
use ethcore::builtin::Builtin;
use builtin::Builtin;
use ethcore::machine::Machine;
use ethereum_types::H160;
use ethcore::ethereum::new_byzantium_test_machine;

View File

@@ -0,0 +1,149 @@
// Copyright 2015-2019 Parity Technologies (UK) Ltd.
// This file is part of Parity Ethereum.
// Parity Ethereum is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Parity Ethereum is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
//! Benchmarking of calling builtin contract
use std::str::FromStr;
use account_state::State;
use parity_bytes::Bytes;
use ethcore::test_helpers::get_temp_state_db;
use ethereum_types::{H160, U256};
use criterion::{black_box, criterion_main, criterion_group, Criterion};
use machine::{test_helpers, Machine};
use machine::executive::CallCreateExecutive;
use machine::substate::Substate;
use trace::{NoopTracer, NoopVMTracer};
use trie_vm_factories::VmFactory;
use vm::{ActionParams, EnvInfo, Schedule};
const ECRECOVER: &str = "0000000000000000000000000000000000000001";
const SHA256: &str = "0000000000000000000000000000000000000002";
const SIGNED_DATA: &str = "hash000000000001v000000000000002r000000000000003s000000000000004";
fn single_builtin_pricing() -> Machine {
test_helpers::load_machine(include_bytes!("../../res/ethereum/builtin_one_activation_bench.json"))
}
fn multiple_builtin_pricing() -> Machine {
test_helpers::load_machine(include_bytes!("../../res/ethereum/builtin_multi_bench.json"))
}
fn builtin_params(address: H160, execute: bool) -> ActionParams {
let mut params = ActionParams::default();
params.code_address = address;
params.gas = u64::max_value().into();
if execute {
params.data = Some(SIGNED_DATA.bytes().collect::<Bytes>());
}
params
}
fn single_activation(c: &mut Criterion) {
let contract = H160::from_str(ECRECOVER).unwrap();
let params = builtin_params(contract, false);
let env_info = EnvInfo::default();
let machine = single_builtin_pricing();
let schedule = Schedule::default();
let factory = VmFactory::default();
let depth = 0;
let stack_depth = 0;
let parent_static_flag = false;
let db = get_temp_state_db();
let mut state = State::new(db, U256::from(0), Default::default());
let mut substate = Substate::new();
c.bench_function("single activation", move |b| {
b.iter(|| black_box(CallCreateExecutive::new_call_raw(
params.clone(),
&env_info,
&machine,
&schedule,
&factory,
depth,
stack_depth,
parent_static_flag,
).exec(&mut state, &mut substate, &mut NoopTracer, &mut NoopVMTracer))
)
});
}
fn ten_multiple_activations(c: &mut Criterion) {
let contract = H160::from_str(ECRECOVER).unwrap();
let params = builtin_params(contract, false);
let env_info = EnvInfo::default();
let machine = multiple_builtin_pricing();
let schedule = Schedule::default();
let factory = VmFactory::default();
let depth = 0;
let stack_depth = 0;
let parent_static_flag = false;
let db = get_temp_state_db();
let mut state = State::new(db, U256::from(0), Default::default());
let mut substate = Substate::new();
c.bench_function("ten activations", move |b| {
b.iter(|| black_box(CallCreateExecutive::new_call_raw(
params.clone(),
&env_info,
&machine,
&schedule,
&factory,
depth,
stack_depth,
parent_static_flag,
).exec(&mut state, &mut substate, &mut NoopTracer, &mut NoopVMTracer))
)
});
}
fn fourty_multiple_activations(c: &mut Criterion) {
let contract = H160::from_str(SHA256).unwrap();
let params = builtin_params(contract, false);
let env_info = EnvInfo::default();
let machine = multiple_builtin_pricing();
let schedule = Schedule::default();
let factory = VmFactory::default();
let depth = 0;
let stack_depth = 0;
let parent_static_flag = false;
let db = get_temp_state_db();
let mut state = State::new(db, U256::from(0), Default::default());
let mut substate = Substate::new();
c.bench_function("fourty activations", move |b| {
b.iter(|| black_box(CallCreateExecutive::new_call_raw(
params.clone(),
&env_info,
&machine,
&schedule,
&factory,
depth,
stack_depth,
parent_static_flag,
).exec(&mut state, &mut substate, &mut NoopTracer, &mut NoopVMTracer))
)
});
}
criterion_group!(benches, single_activation, ten_multiple_activations, fourty_multiple_activations);
criterion_main!(benches);

View File

@@ -13,21 +13,23 @@ blooms-db = { path = "../../util/blooms-db" }
common-types = { path = "../types" }
ethcore-db = { path = "../db" }
ethereum-types = "0.6.0"
keccak-hash = "0.2.0"
parity-util-mem = "0.1"
itertools = "0.5"
kvdb = "0.1"
log = "0.4"
parity-bytes = "0.1"
parking_lot = "0.7"
parking_lot = "0.9"
rand = "0.6"
rayon = "1.0"
rlp = "0.4.0"
rlp_compress = { path = "../../util/rlp-compress" }
rlp_derive = { path = "../../util/rlp-derive" }
triehash-ethereum = { version = "0.2", path = "../../util/triehash-ethereum" }
[dev-dependencies]
env_logger = "0.5"
ethkey = { path = "../../accounts/ethkey" }
keccak-hash = "0.2.0"
rustc-hex = "1.0"
tempdir = "0.3"
kvdb-memorydb = "0.1"

View File

@@ -195,6 +195,12 @@ pub trait BlockProvider {
where F: Fn(&LogEntry) -> bool + Send + Sync, Self: Sized;
}
/// Interface for querying blocks with pending db transaction by hash and by number.
trait InTransactionBlockProvider {
/// Get the familial details concerning a block.
fn uncommitted_block_details(&self, hash: &H256) -> Option<BlockDetails>;
}
#[derive(Debug, Hash, Eq, PartialEq, Clone)]
enum CacheId {
BlockHeader(H256),
@@ -424,6 +430,19 @@ impl BlockProvider for BlockChain {
}
}
impl InTransactionBlockProvider for BlockChain {
fn uncommitted_block_details(&self, hash: &H256) -> Option<BlockDetails> {
let result = self.db.key_value().read_with_two_layer_cache(
db::COL_EXTRA,
&self.pending_block_details,
&self.block_details,
hash
)?;
self.cache_man.lock().note_used(CacheId::BlockDetails(*hash));
Some(result)
}
}
/// An iterator which walks the blockchain towards the genesis.
#[derive(Clone)]
pub struct AncestryIter<'a> {
@@ -592,7 +611,7 @@ impl BlockChain {
let best_block_rlp = bc.block(&best_block_hash)
.expect("Best block is from a known block hash; qed");
// and write them
// and write them to the cache.
let mut best_block = bc.best_block.write();
*best_block = BestBlock {
total_difficulty: best_block_total_difficulty,
@@ -710,6 +729,10 @@ impl BlockChain {
///
/// If the tree route verges into pruned or unknown blocks,
/// `None` is returned.
///
/// `is_from_route_finalized` returns whether the `from` part of the
/// route contains a finalized block. This only holds if the two parts (from
/// and to) are on different branches, ie. on 2 different forks.
pub fn tree_route(&self, from: H256, to: H256) -> Option<TreeRoute> {
let mut from_branch = vec![];
let mut is_from_route_finalized = false;
@@ -723,9 +746,9 @@ impl BlockChain {
// reset from && to to the same level
while from_details.number > to_details.number {
from_branch.push(current_from);
is_from_route_finalized = is_from_route_finalized || from_details.is_finalized;
current_from = from_details.parent.clone();
from_details = self.block_details(&from_details.parent)?;
is_from_route_finalized = is_from_route_finalized || from_details.is_finalized;
}
while to_details.number > from_details.number {
@@ -739,9 +762,9 @@ impl BlockChain {
// move to shared parent
while current_from != current_to {
from_branch.push(current_from);
is_from_route_finalized = is_from_route_finalized || from_details.is_finalized;
current_from = from_details.parent.clone();
from_details = self.block_details(&from_details.parent)?;
is_from_route_finalized = is_from_route_finalized || from_details.is_finalized;
to_branch.push(current_to);
current_to = to_details.parent.clone();
@@ -788,7 +811,7 @@ impl BlockChain {
batch.put(db::COL_HEADERS, hash.as_bytes(), &compressed_header);
batch.put(db::COL_BODIES, hash.as_bytes(), &compressed_body);
let maybe_parent = self.block_details(&block_parent_hash);
let maybe_parent = self.uncommitted_block_details(&block_parent_hash);
if let Some(parent_details) = maybe_parent {
// parent known to be in chain.
@@ -851,12 +874,31 @@ impl BlockChain {
}
}
/// clears all caches for testing purposes
/// clears all caches, re-loads best block from disk for testing purposes
pub fn clear_cache(&self) {
self.block_bodies.write().clear();
self.block_details.write().clear();
self.block_hashes.write().clear();
self.block_headers.write().clear();
// Fetch best block details from disk
let best_block_hash = self.db.key_value().get(db::COL_EXTRA, b"best")
.expect("Low-level database error when fetching 'best' block. Some issue with disk?")
.as_ref()
.map(|r| H256::from_slice(r))
.unwrap();
let best_block_total_difficulty = self.block_details(&best_block_hash)
.expect("Best block is from a known block hash; a known block hash always comes with a known block detail; qed")
.total_difficulty;
let best_block_rlp = self.block(&best_block_hash)
.expect("Best block is from a known block hash; qed");
// and write them to the cache
let mut best_block = self.best_block.write();
*best_block = BestBlock {
total_difficulty: best_block_total_difficulty,
header: best_block_rlp.decode_header(),
block: best_block_rlp,
};
}
/// Update the best ancient block to the given hash, after checking that
@@ -1040,7 +1082,7 @@ impl BlockChain {
///
/// Used in snapshots to glue the chunks together at the end.
pub fn add_child(&self, batch: &mut DBTransaction, block_hash: H256, child_hash: H256) {
let mut parent_details = self.block_details(&block_hash)
let mut parent_details = self.uncommitted_block_details(&block_hash)
.unwrap_or_else(|| panic!("Invalid block hash: {:?}", block_hash));
parent_details.children.push(child_hash);
@@ -1147,7 +1189,7 @@ impl BlockChain {
/// Mark a block to be considered finalized. Returns `Some(())` if the operation succeeds, and `None` if the block
/// hash is not found.
pub fn mark_finalized(&self, batch: &mut DBTransaction, block_hash: H256) -> Option<()> {
let mut block_details = self.block_details(&block_hash)?;
let mut block_details = self.uncommitted_block_details(&block_hash)?;
block_details.is_finalized = true;
self.update_block_details(batch, block_hash, block_details);
@@ -1340,7 +1382,7 @@ impl BlockChain {
/// Uses the given parent details or attempts to load them from the database.
fn prepare_block_details_update(&self, parent_hash: H256, info: &BlockInfo, is_finalized: bool) -> HashMap<H256, BlockDetails> {
// update parent
let mut parent_details = self.block_details(&parent_hash).unwrap_or_else(|| panic!("Invalid parent hash: {:?}", parent_hash));
let mut parent_details = self.uncommitted_block_details(&parent_hash).unwrap_or_else(|| panic!("Invalid parent hash: {:?}", parent_hash));
parent_details.children.push(info.hash);
// create current block details.
@@ -1646,7 +1688,7 @@ mod tests {
let fork_choice = {
let header = block.header_view();
let parent_hash = header.parent_hash();
let parent_details = bc.block_details(&parent_hash).unwrap_or_else(|| panic!("Invalid parent hash: {:?}", parent_hash));
let parent_details = bc.uncommitted_block_details(&parent_hash).unwrap_or_else(|| panic!("Invalid parent hash: {:?}", parent_hash));
let block_total_difficulty = parent_details.total_difficulty + header.difficulty();
if block_total_difficulty > bc.best_block_total_difficulty() {
common_types::engines::ForkChoice::New
@@ -2503,4 +2545,74 @@ mod tests {
assert_eq!(bc.epoch_transition_for(fork_hash).unwrap().block_number, 0);
}
}
#[test]
fn tree_rout_with_finalization() {
let genesis = BlockBuilder::genesis();
let a = genesis.add_block();
// First branch
let a1 = a.add_block_with_random_transactions();
let a2 = a1.add_block_with_random_transactions();
let a3 = a2.add_block_with_random_transactions();
// Second branch
let b1 = a.add_block_with_random_transactions();
let b2 = b1.add_block_with_random_transactions();
let a_hash = a.last().hash();
let a1_hash = a1.last().hash();
let a2_hash = a2.last().hash();
let a3_hash = a3.last().hash();
let b2_hash = b2.last().hash();
let bootstrap_chain = |blocks: Vec<&BlockBuilder>| {
let db = new_db();
let bc = new_chain(genesis.last().encoded(), db.clone());
let mut batch = db.key_value().transaction();
for block in blocks {
insert_block_batch(&mut batch, &bc, block.last().encoded(), vec![]);
bc.commit();
}
db.key_value().write(batch).unwrap();
(db, bc)
};
let mark_finalized = |block_hash: H256, db: &Arc<dyn BlockChainDB>, bc: &BlockChain| {
let mut batch = db.key_value().transaction();
bc.mark_finalized(&mut batch, block_hash).unwrap();
bc.commit();
db.key_value().write(batch).unwrap();
};
// Case 1: fork, with finalized common ancestor
{
let (db, bc) = bootstrap_chain(vec![&a, &a1, &a2, &a3, &b1, &b2]);
assert_eq!(bc.best_block_hash(), a3_hash);
assert_eq!(bc.block_hash(2).unwrap(), a1_hash);
mark_finalized(a_hash, &db, &bc);
assert!(!bc.tree_route(a3_hash, b2_hash).unwrap().is_from_route_finalized);
assert!(!bc.tree_route(b2_hash, a3_hash).unwrap().is_from_route_finalized);
}
// Case 2: fork with a finalized block on a branch
{
let (db, bc) = bootstrap_chain(vec![&a, &a1, &a2, &a3, &b1, &b2]);
assert_eq!(bc.best_block_hash(), a3_hash);
assert_eq!(bc.block_hash(2).unwrap(), a1_hash);
mark_finalized(a2_hash, &db, &bc);
assert!(bc.tree_route(a3_hash, b2_hash).unwrap().is_from_route_finalized);
assert!(!bc.tree_route(b2_hash, a3_hash).unwrap().is_from_route_finalized);
}
// Case 3: no-fork, with a finalized block
{
let (db, bc) = bootstrap_chain(vec![&a, &a1, &a2]);
assert_eq!(bc.best_block_hash(), a2_hash);
mark_finalized(a1_hash, &db, &bc);
assert!(!bc.tree_route(a1_hash, a2_hash).unwrap().is_from_route_finalized);
assert!(!bc.tree_route(a2_hash, a1_hash).unwrap().is_from_route_finalized);
}
}
}

View File

@@ -21,11 +21,13 @@ use ethereum_types::{U256, H256, Bloom};
use common_types::encoded;
use common_types::header::Header;
use common_types::transaction::SignedTransaction;
use common_types::transaction::{SignedTransaction, Transaction, Action};
use common_types::view;
use common_types::views::BlockView;
use keccak_hash::keccak;
use rlp::encode;
use rlp_derive::RlpEncodable;
use triehash_ethereum::ordered_trie_root;
/// Helper structure, used for encoding blocks.
#[derive(Default, Clone, RlpEncodable)]
@@ -136,6 +138,29 @@ impl BlockBuilder {
})
}
/// Add a block with randomly generated transactions.
#[inline]
pub fn add_block_with_random_transactions(&self) -> Self {
// Maximum of ~50 transactions
let count = rand::random::<u8>() as usize / 5;
let transactions = std::iter::repeat_with(|| {
let data_len = rand::random::<u8>();
let data = std::iter::repeat_with(|| rand::random::<u8>())
.take(data_len as usize)
.collect::<Vec<_>>();
Transaction {
nonce: 0.into(),
gas_price: 0.into(),
gas: 100_000.into(),
action: Action::Create,
value: 100.into(),
data,
}.sign(&keccak("").into(), None)
}).take(count);
self.add_block_with_transactions(transactions)
}
/// Add a block with given transactions.
#[inline]
pub fn add_block_with_transactions<T>(&self, transactions: T) -> Self
@@ -166,11 +191,15 @@ impl BlockBuilder {
let mut block = Block::default();
let metadata = get_metadata();
let block_number = parent_number + 1;
let transactions = metadata.transactions;
let transactions_root = ordered_trie_root(transactions.iter().map(rlp::encode));
block.header.set_parent_hash(parent_hash);
block.header.set_number(block_number);
block.header.set_log_bloom(metadata.bloom);
block.header.set_difficulty(metadata.difficulty);
block.transactions = metadata.transactions;
block.header.set_transactions_root(transactions_root);
block.transactions = transactions;
parent_hash = block.hash();
parent_number = block_number;

View File

@@ -0,0 +1,25 @@
[package]
description = "ethereum vm builtin"
name = "ethcore-builtin"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
[dependencies]
bn = { git = "https://github.com/paritytech/bn", default-features = false }
ethereum-types = "0.6.0"
byteorder = "1.3.2"
common-types = { path = "../types" }
eip-152 = { path = "../../util/EIP-152" }
ethjson = { path = "../../json" }
ethkey = { path = "../../accounts/ethkey" }
keccak-hash = "0.2.0"
log = "0.4"
macros = { path = "../../util/macros" }
num = { version = "0.1", default-features = false, features = ["bigint"] }
parity-bytes = "0.1"
parity-crypto = "0.4.0"
[dev-dependencies]
hex-literal = "0.2.1"
parity-crypto = "0.4.0"

1513
ethcore/builtin/src/lib.rs Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -12,6 +12,6 @@ common-types = { path = "../types" }
ethereum-types = "0.6.0"
kvdb = "0.1"
parity-util-mem = "0.1"
parking_lot = "0.7"
parking_lot = "0.9"
rlp = "0.4.0"
rlp_derive = { path = "../../util/rlp-derive" }

View File

@@ -188,6 +188,21 @@ pub trait Readable {
})
}
/// Returns value for given key either in two-layered cache or in database.
fn read_with_two_layer_cache<K, T, C>(&self, col: Option<u32>, l1_cache: &RwLock<C>, l2_cache: &RwLock<C>, key: &K) -> Option<T> where
K: Key<T> + Eq + Hash + Clone,
T: Clone + rlp::Decodable,
C: Cache<K, T> {
{
let read = l1_cache.read();
if let Some(v) = read.get(key) {
return Some(v.clone());
}
}
self.read_with_cache(col, l2_cache, key)
}
/// Returns true if given value exists.
fn exists<T, R>(&self, col: Option<u32>, key: &Key<T, Target = R>) -> bool where R: AsRef<[u8]>;

View File

@@ -13,12 +13,13 @@ lazy_static = "1.0"
log = "0.4"
vm = { path = "../vm" }
keccak-hash = "0.2.0"
parking_lot = "0.7"
parking_lot = "0.9"
memory-cache = { path = "../../util/memory-cache" }
[dev-dependencies]
rustc-hex = "1.0"
criterion = "0.2"
criterion = "0.3"
hex-literal = "0.2.0"
[features]
evm-debug = []

View File

@@ -44,12 +44,18 @@ pub trait Finalize {
impl Finalize for Result<GasLeft> {
fn finalize<E: Ext>(self, ext: E) -> Result<FinalizationResult> {
match self {
Ok(GasLeft::Known(gas_left)) => Ok(FinalizationResult { gas_left: gas_left, apply_state: true, return_data: ReturnData::empty() }),
Ok(GasLeft::NeedsReturn { gas_left, data, apply_state }) => ext.ret(&gas_left, &data, apply_state).map(|gas_left| FinalizationResult {
gas_left: gas_left,
apply_state: apply_state,
return_data: data,
}),
Ok(GasLeft::Known(gas_left)) => {
Ok(FinalizationResult {
gas_left,
apply_state: true,
return_data: ReturnData::empty()
})
},
Ok(GasLeft::NeedsReturn { gas_left, data, apply_state }) => {
ext.ret(&gas_left, &data, apply_state).map(|gas_left|
FinalizationResult { gas_left, apply_state, return_data: data }
)
},
Err(err) => Err(err),
}
}

View File

@@ -47,7 +47,7 @@ impl Factory {
/// for caching jump destinations.
pub fn new(evm: VMType, cache_size: usize) -> Self {
Factory {
evm: evm,
evm,
evm_cache: Arc::new(SharedCache::new(cache_size)),
}
}

View File

@@ -149,6 +149,10 @@ enum_with_from_u8! {
DIFFICULTY = 0x44,
#[doc = "get the block's gas limit"]
GASLIMIT = 0x45,
#[doc = "get chain ID"]
CHAINID = 0x46,
#[doc = "get balance of own account"]
SELFBALANCE = 0x47,
#[doc = "remove item from stack"]
POP = 0x50,
@@ -442,12 +446,7 @@ pub struct InstructionInfo {
impl InstructionInfo {
/// Create new instruction info.
pub fn new(name: &'static str, args: usize, ret: usize, tier: GasPriceTier) -> Self {
InstructionInfo {
name: name,
args: args,
ret: ret,
tier: tier
}
InstructionInfo { name, args, ret, tier }
}
}
@@ -504,6 +503,8 @@ lazy_static! {
arr[NUMBER as usize] = Some(InstructionInfo::new("NUMBER", 0, 1, GasPriceTier::Base));
arr[DIFFICULTY as usize] = Some(InstructionInfo::new("DIFFICULTY", 0, 1, GasPriceTier::Base));
arr[GASLIMIT as usize] = Some(InstructionInfo::new("GASLIMIT", 0, 1, GasPriceTier::Base));
arr[CHAINID as usize] = Some(InstructionInfo::new("CHAINID", 0, 1, GasPriceTier::Base));
arr[SELFBALANCE as usize] = Some(InstructionInfo::new("SELFBALANCE", 0, 1, GasPriceTier::Low));
arr[POP as usize] = Some(InstructionInfo::new("POP", 1, 0, GasPriceTier::Base));
arr[MLOAD as usize] = Some(InstructionInfo::new("MLOAD", 1, 1, GasPriceTier::VeryLow));
arr[MSTORE as usize] = Some(InstructionInfo::new("MSTORE", 2, 0, GasPriceTier::VeryLow));

View File

@@ -121,6 +121,10 @@ impl<Gas: evm::CostType> Gasometer<Gas> {
Request::Gas(Gas::from(1))
},
instructions::SSTORE => {
if schedule.eip1706 && self.current_gas <= Gas::from(schedule.call_stipend) {
return Err(vm::Error::OutOfGas);
}
let address = BigEndianHash::from_uint(stack.peek(0));
let newval = stack.peek(1);
let val = ext.storage_at(&address)?.into_uint();

View File

@@ -109,8 +109,6 @@ enum InstructionResult<Gas> {
Trap(TrapKind),
}
enum Never {}
/// ActionParams without code, so that it can be feed into CodeReader.
#[derive(Debug)]
struct InterpreterParams {
@@ -168,12 +166,6 @@ pub enum InterpreterResult {
Trap(TrapKind),
}
impl From<vm::Error> for InterpreterResult {
fn from(error: vm::Error) -> InterpreterResult {
InterpreterResult::Done(Err(error))
}
}
/// Intepreter EVM implementation
pub struct Interpreter<Cost: CostType> {
mem: Vec<u8>,
@@ -284,6 +276,8 @@ impl<Cost: CostType> Interpreter<Cost> {
cache, params, reader, informant,
valid_jump_destinations, gasometer, stack,
done: false,
// Overridden in `step_inner` based on
// the result of `ext.trace_next_instruction`.
do_trace: true,
mem: Vec::new(),
return_data: ReturnData::empty(),
@@ -304,21 +298,26 @@ impl<Cost: CostType> Interpreter<Cost> {
let result = if self.gasometer.is_none() {
InterpreterResult::Done(Err(vm::Error::OutOfGas))
} else if self.reader.len() == 0 {
InterpreterResult::Done(Ok(GasLeft::Known(self.gasometer.as_ref().expect("Gasometer None case is checked above; qed").current_gas.as_u256())))
let current_gas = self.gasometer
.as_ref()
.expect("Gasometer None case is checked above; qed")
.current_gas
.as_u256();
InterpreterResult::Done(Ok(GasLeft::Known(current_gas)))
} else {
self.step_inner(ext).err().expect("step_inner never returns Ok(()); qed")
self.step_inner(ext)
};
if let &InterpreterResult::Done(_) = &result {
self.done = true;
self.informant.done();
}
return result;
result
}
/// Inner helper function for step.
#[inline(always)]
fn step_inner(&mut self, ext: &mut vm::Ext) -> Result<Never, InterpreterResult> {
fn step_inner(&mut self, ext: &mut dyn vm::Ext) -> InterpreterResult {
let result = match self.resume_result.take() {
Some(result) => result,
None => {
@@ -333,22 +332,31 @@ impl<Cost: CostType> Interpreter<Cost> {
let instruction = match instruction {
Some(i) => i,
None => return Err(InterpreterResult::Done(Err(vm::Error::BadInstruction {
None => return InterpreterResult::Done(Err(vm::Error::BadInstruction {
instruction: opcode
}))),
})),
};
let info = instruction.info();
self.last_stack_ret_len = info.ret;
self.verify_instruction(ext, instruction, info)?;
if let Err(e) = self.verify_instruction(ext, instruction, info) {
return InterpreterResult::Done(Err(e));
};
// Calculate gas cost
let requirements = self.gasometer.as_mut().expect(GASOMETER_PROOF).requirements(ext, instruction, info, &self.stack, self.mem.size())?;
let requirements = match self.gasometer.as_mut().expect(GASOMETER_PROOF).requirements(ext, instruction, info, &self.stack, self.mem.size()) {
Ok(t) => t,
Err(e) => return InterpreterResult::Done(Err(e)),
};
if self.do_trace {
ext.trace_prepare_execute(self.reader.position - 1, opcode, requirements.gas_cost.as_u256(), Self::mem_written(instruction, &self.stack), Self::store_written(instruction, &self.stack));
}
self.gasometer.as_mut().expect(GASOMETER_PROOF).verify_gas(&requirements.gas_cost)?;
if let Err(e) = self.gasometer.as_mut().expect(GASOMETER_PROOF).verify_gas(&requirements.gas_cost) {
if self.do_trace {
ext.trace_failed();
}
return InterpreterResult::Done(Err(e));
}
self.mem.expand(requirements.memory_required_size);
self.gasometer.as_mut().expect(GASOMETER_PROOF).current_mem_gas = requirements.memory_total_gas;
self.gasometer.as_mut().expect(GASOMETER_PROOF).current_gas = self.gasometer.as_mut().expect(GASOMETER_PROOF).current_gas - requirements.gas_cost;
@@ -357,18 +365,24 @@ impl<Cost: CostType> Interpreter<Cost> {
// Execute instruction
let current_gas = self.gasometer.as_mut().expect(GASOMETER_PROOF).current_gas;
let result = self.exec_instruction(
let result = match self.exec_instruction(
current_gas, ext, instruction, requirements.provide_gas
)?;
) {
Err(x) => {
if self.do_trace {
ext.trace_failed();
}
return InterpreterResult::Done(Err(x));
},
Ok(x) => x,
};
evm_debug!({ self.informant.after_instruction(instruction) });
result
},
};
if let InstructionResult::Trap(trap) = result {
return Err(InterpreterResult::Trap(trap));
return InterpreterResult::Trap(trap);
}
if let InstructionResult::UnusedGas(ref gas) = result {
@@ -390,28 +404,31 @@ impl<Cost: CostType> Interpreter<Cost> {
self.valid_jump_destinations = Some(self.cache.jump_destinations(&self.params.code_hash, &self.reader.code));
}
let jump_destinations = self.valid_jump_destinations.as_ref().expect("jump_destinations are initialized on first jump; qed");
let pos = self.verify_jump(position, jump_destinations)?;
let pos = match self.verify_jump(position, jump_destinations) {
Ok(x) => x,
Err(e) => return InterpreterResult::Done(Err(e))
};
self.reader.position = pos;
},
InstructionResult::StopExecutionNeedsReturn {gas, init_off, init_size, apply} => {
let mem = mem::replace(&mut self.mem, Vec::new());
return Err(InterpreterResult::Done(Ok(GasLeft::NeedsReturn {
return InterpreterResult::Done(Ok(GasLeft::NeedsReturn {
gas_left: gas.as_u256(),
data: mem.into_return_data(init_off, init_size),
apply_state: apply
})));
}));
},
InstructionResult::StopExecution => {
return Err(InterpreterResult::Done(Ok(GasLeft::Known(self.gasometer.as_mut().expect(GASOMETER_PROOF).current_gas.as_u256()))));
return InterpreterResult::Done(Ok(GasLeft::Known(self.gasometer.as_mut().expect(GASOMETER_PROOF).current_gas.as_u256())));
},
_ => {},
}
if self.reader.position >= self.reader.len() {
return Err(InterpreterResult::Done(Ok(GasLeft::Known(self.gasometer.as_mut().expect(GASOMETER_PROOF).current_gas.as_u256()))));
return InterpreterResult::Done(Ok(GasLeft::Known(self.gasometer.as_mut().expect(GASOMETER_PROOF).current_gas.as_u256())));
}
Err(InterpreterResult::Continue)
InterpreterResult::Continue
}
fn verify_instruction(&self, ext: &vm::Ext, instruction: Instruction, info: &InstructionInfo) -> vm::Result<()> {
@@ -423,7 +440,9 @@ impl<Cost: CostType> Interpreter<Cost> {
((instruction == instructions::RETURNDATACOPY || instruction == instructions::RETURNDATASIZE) && !schedule.have_return_data) ||
(instruction == instructions::REVERT && !schedule.have_revert) ||
((instruction == instructions::SHL || instruction == instructions::SHR || instruction == instructions::SAR) && !schedule.have_bitwise_shifting) ||
(instruction == instructions::EXTCODEHASH && !schedule.have_extcodehash)
(instruction == instructions::EXTCODEHASH && !schedule.have_extcodehash) ||
(instruction == instructions::CHAINID && !schedule.have_chain_id) ||
(instruction == instructions::SELFBALANCE && !schedule.have_selfbalance)
{
return Err(vm::Error::BadInstruction {
instruction: instruction as u8
@@ -838,6 +857,12 @@ impl<Cost: CostType> Interpreter<Cost> {
instructions::GASLIMIT => {
self.stack.push(ext.env_info().gas_limit.clone());
},
instructions::CHAINID => {
self.stack.push(ext.chain_id().into())
},
instructions::SELFBALANCE => {
self.stack.push(ext.balance(&self.params.address)?);
}
// Stack instructions

View File

@@ -33,6 +33,8 @@ extern crate log;
#[cfg(test)]
extern crate rustc_hex;
#[cfg(test)]
extern crate hex_literal;
pub mod evm;
pub mod interpreter;

View File

@@ -25,6 +25,7 @@ use vm::{self, ActionParams, ActionValue, Ext};
use vm::tests::{FakeExt, FakeCall, FakeCallType, test_finalize};
use factory::Factory;
use vmtype::VMType;
use hex_literal::hex;
evm_test!{test_add: test_add_int}
fn test_add(factory: super::Factory) {
@@ -108,6 +109,32 @@ fn test_origin(factory: super::Factory) {
assert_store(&ext, 0, "000000000000000000000000cd1722f2947def4cf144679da39c4c32bdc35681");
}
evm_test!{test_selfbalance: test_selfbalance_int}
fn test_selfbalance(factory: super::Factory) {
let own_addr = Address::from_str("1337000000000000000000000000000000000000").unwrap();
// 47 SELFBALANCE
// 60 ff PUSH ff
// 55 SSTORE
let code = hex!("47 60 ff 55").to_vec();
let mut params = ActionParams::default();
params.address = own_addr.clone();
params.gas = U256::from(100_000);
params.code = Some(Arc::new(code));
let mut ext = FakeExt::new_istanbul();
ext.balances = {
let mut x = HashMap::new();
x.insert(own_addr, U256::from(1_025)); // 0x401
x
};
let gas_left = {
let vm = factory.create(params, ext.schedule(), ext.depth());
test_finalize(vm.exec(&mut ext).ok().unwrap()).unwrap()
};
assert_eq!(gas_left, U256::from(79_992)); // TODO[dvdplm]: do the sums here, SELFBALANCE-5 + PUSH1-3 + ONEBYTE-4 + SSTORE-?? = 100_000 - 79_992
assert_store(&ext, 0xff, "0000000000000000000000000000000000000000000000000000000000000401");
}
evm_test!{test_sender: test_sender_int}
fn test_sender(factory: super::Factory) {
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
@@ -130,6 +157,27 @@ fn test_sender(factory: super::Factory) {
assert_store(&ext, 0, "000000000000000000000000cd1722f2947def4cf144679da39c4c32bdc35681");
}
evm_test!{test_chain_id: test_chain_id_int}
fn test_chain_id(factory: super::Factory) {
// 46 CHAINID
// 60 00 PUSH 0
// 55 SSTORE
let code = hex!("46 60 00 55").to_vec();
let mut params = ActionParams::default();
params.gas = U256::from(100_000);
params.code = Some(Arc::new(code));
let mut ext = FakeExt::new_istanbul().with_chain_id(9);
let gas_left = {
let vm = factory.create(params, ext.schedule(), ext.depth());
test_finalize(vm.exec(&mut ext).ok().unwrap()).unwrap()
};
assert_eq!(gas_left, U256::from(79_995));
assert_store(&ext, 0, "0000000000000000000000000000000000000000000000000000000000000009");
}
evm_test!{test_extcodecopy: test_extcodecopy_int}
fn test_extcodecopy(factory: super::Factory) {
// 33 - sender
@@ -262,7 +310,6 @@ fn test_calldataload(factory: super::Factory) {
assert_eq!(gas_left, U256::from(79_991));
assert_store(&ext, 0, "23ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23");
}
evm_test!{test_author: test_author_int}

View File

@@ -35,7 +35,7 @@ itertools = "0.5"
bincode = "1.1"
serde = "1.0"
serde_derive = "1.0"
parking_lot = "0.7"
parking_lot = "0.9"
stats = { path = "../../util/stats" }
keccak-hash = "0.2.0"
keccak-hasher = { path = "../../util/keccak-hasher" }

View File

@@ -18,7 +18,7 @@
use std::sync::{Weak, Arc};
use ethcore::client::{ClientReport, EnvInfo, ClientIoMessage};
use ethcore::client::{ClientReport, EnvInfo, EngineClient, ClientIoMessage, ForceUpdateSealing};
use ethcore::engines::{epoch, Engine, EpochChange, EpochTransition, Proof};
use ethcore::error::{Error, EthcoreResult};
use ethcore::verification::queue::{self, HeaderQueue};
@@ -620,8 +620,8 @@ impl<T: ChainDataFetcher> ::ethcore::client::ChainInfo for Client<T> {
}
}
impl<T: ChainDataFetcher> ::ethcore::client::EngineClient for Client<T> {
fn update_sealing(&self) { }
impl<T: ChainDataFetcher> EngineClient for Client<T> {
fn update_sealing(&self, _force: ForceUpdateSealing) {}
fn submit_seal(&self, _block_hash: H256, _seal: Vec<Vec<u8>>) { }
fn broadcast_consensus_message(&self, _message: Vec<u8>) { }

View File

@@ -12,7 +12,7 @@ ethcore-network = { path = "../../util/network" }
ethcore-network-devp2p = { path = "../../util/network-devp2p" }
ethereum-types = "0.6.0"
log = "0.4"
parking_lot = "0.7"
parking_lot = "0.9"
ethabi = "8.0"
ethabi-derive = "8.0"
ethabi-contract = "8.0"

View File

@@ -82,21 +82,6 @@ impl PodAccount {
}
}
impl From<ethjson::blockchain::Account> for PodAccount {
fn from(a: ethjson::blockchain::Account) -> Self {
PodAccount {
balance: a.balance.into(),
nonce: a.nonce.into(),
code: Some(a.code.into()),
storage: a.storage.into_iter().map(|(key, value)| {
let key: U256 = key.into();
let value: U256 = value.into();
(BigEndianHash::from_uint(&key), BigEndianHash::from_uint(&value))
}).collect(),
}
}
}
impl From<ethjson::spec::Account> for PodAccount {
fn from(a: ethjson::spec::Account) -> Self {
PodAccount {

View File

@@ -25,7 +25,7 @@ keccak-hash = "0.2.0"
log = "0.4"
parity-bytes = "0.1"
parity-crypto = "0.4.0"
parking_lot = "0.7"
parking_lot = "0.9"
trie-db = "0.12.4"
patricia-trie-ethereum = { path = "../../util/patricia-trie-ethereum" }
rand = "0.3"
@@ -37,8 +37,8 @@ serde_derive = "1.0"
serde_json = "1.0"
time-utils = { path = "../../util/time-utils" }
tiny-keccak = "1.4"
transaction-pool = "2.0"
url = "1"
transaction-pool = "2.0.1"
url = "2.1.0"
[dev-dependencies]
env_logger = "0.5"

View File

@@ -285,7 +285,7 @@ impl Provider {
let mut state_buf = [0u8; 64];
state_buf[..32].clone_from_slice(state_hash.as_bytes());
state_buf[32..].clone_from_slice(nonce_h256.as_bytes());
keccak(&state_buf.as_ref())
keccak(AsRef::<[u8]>::as_ref(&state_buf[..]))
}
fn pool_client<'a>(&'a self, nonce_cache: &'a NonceCache, local_accounts: &'a HashSet<Address>) -> miner::pool_client::PoolClient<'a, Client> {

View File

@@ -46,9 +46,51 @@
"0000000000000000000000000000000000000003": { "balance": "1", "nonce": "1048576", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "nonce": "1048576", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "balance": "1", "builtin": { "name": "modexp", "activate_at": 0, "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "balance": "1", "builtin": { "name": "alt_bn128_add", "activate_at": 0, "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "balance": "1", "builtin": { "name": "alt_bn128_mul", "activate_at": 0, "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "balance": "1", "builtin": { "name": "alt_bn128_pairing", "activate_at": 0, "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } },
"0000000000000000000000000000000000000006": {
"balance": "1",
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"balance": "1",
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"balance": "1",
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"9cce34f7ab185c7aba1b7c8140d620b4bda941d6": { "balance": "1606938044258990275541962092341162602522202993782792835301376", "nonce": "1048576" }
}
}

View File

@@ -49,9 +49,51 @@
"0000000000000000000000000000000000000003": { "balance": "1", "nonce": "1048576", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "nonce": "1048576", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "balance": "1", "builtin": { "name": "modexp", "activate_at": 0, "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "balance": "1", "builtin": { "name": "alt_bn128_add", "activate_at": 0, "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "balance": "1", "builtin": { "name": "alt_bn128_mul", "activate_at": 0, "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "balance": "1", "builtin": { "name": "alt_bn128_pairing", "activate_at": 0, "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } },
"0000000000000000000000000000000000000006": {
"balance": "1",
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"balance": "1",
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"balance": "1",
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"9cce34f7ab185c7aba1b7c8140d620b4bda941d6": { "balance": "1606938044258990275541962092341162602522202993782792835301376", "nonce": "1048576" },
"0000000000000000000000000000000000000042": {
"balance": "1",

View File

@@ -38,9 +38,48 @@
"0000000000000000000000000000000000000003": { "balance": "1", "nonce": "1048576", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "nonce": "1048576", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "balance": "1", "builtin": { "name": "modexp", "activate_at": 0, "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "balance": "1", "builtin": { "name": "alt_bn128_add", "activate_at": 0, "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "balance": "1", "builtin": { "name": "alt_bn128_mul", "activate_at": 0, "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "balance": "1", "builtin": { "name": "alt_bn128_pairing", "activate_at": 0, "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } },
"0000000000000000000000000000000000000006": {
"balance": "1",
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0x0": {
"price": { "linear": { "base": 500, "word": 0 }}
},
"0x7fffffffffffff": {
"price": { "linear": { "base": 150, "word": 0 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"balance": "1",
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0x0": {
"price": { "linear": { "base": 40000, "word": 0 }}
},
"0x7fffffffffffff": {
"price": { "linear": { "base": 6000, "word": 0 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"balance": "1",
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0x0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"9cce34f7ab185c7aba1b7c8140d620b4bda941d6": { "balance": "1606938044258990275541962092341162602522202993782792835301376", "nonce": "1048576" }
}
}

View File

@@ -34,9 +34,51 @@
"0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "balance": "1", "builtin": { "name": "modexp", "activate_at": 0, "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "balance": "1", "builtin": { "name": "alt_bn128_add", "activate_at": 0, "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "balance": "1", "builtin": { "name": "alt_bn128_mul", "activate_at": 0, "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "balance": "1", "builtin": { "name": "alt_bn128_pairing", "activate_at": 0, "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } },
"0000000000000000000000000000000000000006": {
"balance": "1",
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0": {
"price": { "linear": { "base": 500, "word": 0 }}
},
"0x7fffffffffffff": {
"info": "EIP1108 transition",
"price": { "linear": { "base": 150, "word": 0 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"balance": "1",
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0": {
"price": { "linear": {"base": 40000, "word": 0 }}
},
"0x7fffffffffffff": {
"info": "EIP1108 transition",
"price": { "linear": { "base": 6000, "word": 0 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"balance": "1",
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"0000000000000000000000000000000000001337": { "balance": "1", "constructor": "60606040526000805460ff19166001179055346000575b6075806100246000396000f300606060405263ffffffff60e060020a60003504166394b91deb81146022575b6000565b34600057602c6040565b604080519115158252519081900360200190f35b60005460ff16815600a165627a7a723058207882eb60ebce23178b3fa06d4cd8e5adc17711937ccddacb18a04abca2a2c9ee0029" }
}
}

View File

@@ -0,0 +1,112 @@
{
"name": "ecrecover legacy",
"engine": {
"Ethash": {
"params": {
"minimumDifficulty": "0x020000",
"difficultyBoundDivisor": "0x0800",
"durationLimit": "0x0d",
"blockReward": "0x4563918244F40000",
"homesteadTransition": "0x0"
}
}
},
"params": {
"gasLimitBoundDivisor": "0x0400",
"registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b",
"accountStartNonce": "0x00",
"maximumExtraDataSize": "0x20",
"minGasLimit": "0x1388",
"networkID" : "0x1",
"eip150Transition": "0x0",
"eip160Transition": "0x7fffffffffffffff",
"eip161abcTransition": "0x7fffffffffffffff",
"eip161dTransition": "0x7fffffffffffffff",
"eip155Transition": "0x7fffffffffffffff",
"maxCodeSize": 24576,
"maxCodeSizeTransition": "0x7fffffffffffffff"
},
"genesis": {
"seal": {
"ethereum": {
"nonce": "0x0000000000000042",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
},
"difficulty": "0x400000000",
"author": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
"gasLimit": "0x1388"
},
"accounts": {
"0000000000000000000000000000000000000001": {
"balance": "1",
"builtin": {
"name": "ecrecover",
"pricing": {
"0": {"price": {"linear": { "base": 1, "word": 0 }}},
"1": {"price": {"linear": { "base": 2, "word": 0 }}},
"2": {"price": {"linear": { "base": 3, "word": 0 }}},
"3": {"price": {"linear": { "base": 4, "word": 0 }}},
"4": {"price": {"linear": { "base": 5, "word": 0 }}},
"5": {"price": {"linear": { "base": 6, "word": 0 }}},
"6": {"price": {"linear": { "base": 7, "word": 0 }}},
"7": {"price": {"linear": { "base": 8, "word": 0 }}},
"8": {"price": {"linear": { "base": 9, "word": 0 }}},
"9": {"price": {"linear": { "base": 1, "word": 0 }}},
"10": {"price": {"linear": { "base": 2, "word": 0 }}}
}
}
},
"0000000000000000000000000000000000000002": {
"balance": "1",
"builtin": {
"name": "sha256",
"pricing": {
"0": {"price": {"linear": { "base": 1, "word": 0 }}},
"1": {"price": {"linear": { "base": 2, "word": 0 }}},
"2": {"price": {"linear": { "base": 3, "word": 0 }}},
"3": {"price": {"linear": { "base": 4, "word": 0 }}},
"4": {"price": {"linear": { "base": 5, "word": 0 }}},
"5": {"price": {"linear": { "base": 6, "word": 0 }}},
"6": {"price": {"linear": { "base": 7, "word": 0 }}},
"7": {"price": {"linear": { "base": 8, "word": 0 }}},
"8": {"price": {"linear": { "base": 9, "word": 0 }}},
"9": {"price": {"linear": { "base": 1, "word": 0 }}},
"10": {"price": {"linear": { "base": 2, "word": 0 }}},
"11": {"price": {"linear": { "base": 3, "word": 0 }}},
"12": {"price": {"linear": { "base": 4, "word": 0 }}},
"13": {"price": {"linear": { "base": 5, "word": 0 }}},
"14": {"price": {"linear": { "base": 6, "word": 0 }}},
"15": {"price": {"linear": { "base": 7, "word": 0 }}},
"16": {"price": {"linear": { "base": 8, "word": 0 }}},
"17": {"price": {"linear": { "base": 9, "word": 0 }}},
"18": {"price": {"linear": { "base": 1, "word": 0 }}},
"19": {"price": {"linear": { "base": 2, "word": 0 }}},
"20": {"price": {"linear": { "base": 3, "word": 0 }}},
"21": {"price": {"linear": { "base": 4, "word": 0 }}},
"22": {"price": {"linear": { "base": 5, "word": 0 }}},
"23": {"price": {"linear": { "base": 6, "word": 0 }}},
"24": {"price": {"linear": { "base": 7, "word": 0 }}},
"25": {"price": {"linear": { "base": 8, "word": 0 }}},
"26": {"price": {"linear": { "base": 9, "word": 0 }}},
"27": {"price": {"linear": { "base": 1, "word": 0 }}},
"28": {"price": {"linear": { "base": 2, "word": 0 }}},
"29": {"price": {"linear": { "base": 3, "word": 0 }}},
"30": {"price": {"linear": { "base": 4, "word": 0 }}},
"31": {"price": {"linear": { "base": 5, "word": 0 }}},
"32": {"price": {"linear": { "base": 6, "word": 0 }}},
"33": {"price": {"linear": { "base": 7, "word": 0 }}},
"34": {"price": {"linear": { "base": 8, "word": 0 }}},
"35": {"price": {"linear": { "base": 9, "word": 0 }}},
"36": {"price": {"linear": { "base": 10, "word": 0 }}},
"37": {"price": {"linear": { "base": 10, "word": 0 }}},
"38": {"price": {"linear": { "base": 10, "word": 0 }}},
"39": {"price": {"linear": { "base": 10, "word": 0 }}}
}
}
}
}
}

View File

@@ -0,0 +1,54 @@
{
"name": "ecrecover legacy chain spec for benchmarking",
"engine": {
"Ethash": {
"params": {
"minimumDifficulty": "0x020000",
"difficultyBoundDivisor": "0x0800",
"durationLimit": "0x0d",
"blockReward": "0x4563918244F40000",
"homesteadTransition": "0x0"
}
}
},
"params": {
"gasLimitBoundDivisor": "0x0400",
"registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b",
"accountStartNonce": "0x00",
"maximumExtraDataSize": "0x20",
"minGasLimit": "0x1388",
"networkID" : "0x1",
"eip150Transition": "0x0",
"eip160Transition": "0x7fffffffffffffff",
"eip161abcTransition": "0x7fffffffffffffff",
"eip161dTransition": "0x7fffffffffffffff",
"eip155Transition": "0x7fffffffffffffff",
"maxCodeSize": 24576,
"maxCodeSizeTransition": "0x7fffffffffffffff"
},
"genesis": {
"seal": {
"ethereum": {
"nonce": "0x0000000000000042",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
},
"difficulty": "0x400000000",
"author": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
"gasLimit": "0x1388"
},
"accounts": {
"0000000000000000000000000000000000000001": {
"balance": "1",
"builtin": {
"name": "ecrecover",
"pricing": {
"linear": { "base": 3000, "word": 0 }
}
}
}
}
}

View File

@@ -54,8 +54,47 @@
"0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": "0x00", "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "builtin": { "name": "alt_bn128_add", "activate_at": "0x00", "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "builtin": { "name": "alt_bn128_mul", "activate_at": "0x00", "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "builtin": { "name": "alt_bn128_pairing", "activate_at": "0x00", "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } }
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
}
}
}

View File

@@ -72,9 +72,48 @@
"0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "balance": "1", "builtin": { "name": "modexp", "activate_at": 20, "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "balance": "1", "builtin": { "name": "alt_bn128_add", "activate_at": 20, "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "balance": "1", "builtin": { "name": "alt_bn128_mul", "activate_at": 20, "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "balance": "1", "builtin": { "name": "alt_bn128_pairing", "activate_at": 20, "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } },
"0000000000000000000000000000000000000006": {
"balance": "1",
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"20": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"balance": "1",
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"20": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"balance": "1",
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"20": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"183394f52b2c8c034835edba3bcececa6f60b5a8": {
"balance": "100491852286952719463755404"
}

View File

@@ -55,8 +55,8 @@
"stateRoot": "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544"
},
"hardcodedSync": {
"header": "f9021ba0a281d23475d3d5ff03df8636c9f528cdd91498af274a3b2f8989bbd51bfeb809a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794004730417cd2b1d19f6be2679906ded4fa8a64e2a0d5fdd62e7e29dc3da1cd3fe5ad549e000260bfdb55f523fde008f26390220d23a0370ff78457d6c7469ff333a13165f4bb8057d00cfa68365cb4d1a8c8a1da46d5a0dea37365a20f5bb5ad3766a24a9fe7b04b946e35aaba74f862467a7c5cdb7d67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000004000000000040000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000100000000000000000000000080000000000000000020000000000000000000000000000000000000000000000000000000000000000000000020000000000001000000000000000000000000000000080010000000000000008000000000000000866fc181925a9783763801837a121d830c317c845c9d1efe9b457468657265756d436c6173736963534f4c4f2f326d696e657273a0bb6e626c7ee3d827da18e1b303d9552ba17e92cefcedfc58bdfc5bac6a8ebabe882d8c26402344c24b",
"totalDifficulty": "598584828374329723203",
"header": "f901fda0f46341de105659d5897cc2c49b97df3f74a7535f2f0a7c86b12a0f23b2c436afa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479421479eb8cb1a27861c902f07a952b72b10fd53efa0c409d60020629ffe77f7aa91603b8fe5df8811957d231638b29471a0b0cb695ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000868527ce839a798385e8018379f57980845d7b0d1c80a051d85cf8feba52d2c0cf244ceb037441ec276d88a07ad755e6ff3cc92d52097e88f3906b50ebf30eec",
"totalDifficulty": "729996985215121503838",
"CHTs": [
"0x0eb474b7721727204978e92e27d31cddff56471911e424a4c8271c35f9c982cc",
"0xe10e94515fb5ffb7ffa9bf50db4a959b3f50c2ff75e0b8bd5f5e038749e52a11",
@@ -3840,7 +3840,509 @@
"0xc893aee6d249c152f5db3d7763f34a3311345dff721ae9c71ab5fb3d2b3e2559",
"0x250caa98ea3e682be9c866990f19647f443d57690052229ac0ccfa0ab30a5a71",
"0xc32fd5318214071a41cd8e98499b2b65942c5837c686a06b536146fd0bf294bf",
"0xac390c012eecd83fa8f4cc77a59992914b5c95af36b28747e07adea13228acbc"
"0xac390c012eecd83fa8f4cc77a59992914b5c95af36b28747e07adea13228acbc",
"0x5baa5a91d5e9d4632ba89304ca9a3b252f873477f3f0dbbe82a2656eb11cc74b",
"0x063db9182a0d7061dd6872e56c0fc9c5ce9dcd50bba1c1be4e066ac31baea300",
"0x30718f710304c59b8438a03539aca2d431d0a751fd718d905bd14b9b14587674",
"0xeff0df83d65ca2db9b93f92245f8f2be2777ac0eb8b05960c63f9761c4a609b2",
"0xad3e2da2fe9dfa45f6c2655ebbf57f4291db03ee48d4cc9c9dce8ba77068192c",
"0x1c2da7631ac5be07f69d7a33ab11c19677f037339197eb6019ad7a85b81ccc73",
"0xad135339b16d46696f1d630a041af6ff703e50f03720a2391a7437cca1e86c6b",
"0x18a288ba23d438c58600d500f8a2f5b66fbf8cac2fdf21c92602715e1d7d9c0a",
"0xc41f27d18eeac02197b67d185163b407d7ee75e776cd73e36e568f05f7528631",
"0x5243561b8e640354f82568049d4b8ce7f30e092384398f22ec4f0558da756c86",
"0x0fc498227a7c657eec7dfe09a668db967d6ed74bbabe16dc2108406870d7d7f2",
"0xf229992ca93866a74fe61e3d0a742e7b756db30e5c1b20038cece1c7e0a20c2a",
"0x6ec77884426881486865322f73f26c09cca3446081380d91730d19fca46adb61",
"0xed8ce85df6404d421b09dda6e3e4539df7963067f2ee0190de80faf9589249a7",
"0x5fe506925192e162787bafa20c4829755d2616c27fb448d08a9594383608b114",
"0x18808bdd50aa3f52f045cfa8eb2a669c52004c38b12b68536ac3e742f3a11a15",
"0xded04cbdd4942959435b197403ac9d38b7239f51693440d88e3fe4cc2f90a3a0",
"0x6ad413fbdd413fc14decf9aae5c37dae63fd4ec2d11844c6058023a462040053",
"0xa1cf0f465f9af59340b2e3f49242e02282f6a0ab82ea4721bfdae4f995e2da99",
"0xe1794440b5173a4a6cde5595e3d34df38aaaaed9489af182af314b29357748b2",
"0x1d427d41658ea2a40d9da5e2f03ad0b3060a9693572d2e188e0ae4e9e1852f36",
"0x0799a99fb0ef1edbcb102022b3d86abd3a4d771e583814a292f6a499233a0fc4",
"0x63cc0d8e879d5c25fb4001b90e0e9e8fb8201cf50aaad3c9ae7f6354760bd976",
"0xc94df53c16fad900034e2b3fca50038979b8eb94032f745073f10a56bce1e027",
"0xc587fb5f436afaf00310ec86dbfd622afdb3f694c08ff71db952f903a4bb8a55",
"0x70fda21e86b108ac5e16109a12f51f26d374c164899898106d80d5a641b7dd03",
"0xa48bf905f87aab400fb9f4e456d27de102763156bb33a3db37f8fc8aeccbb135",
"0xb934c6f92f574a1ce070dfefbc2fbc6764ea22a2565a8083ac5b1063b3a237d3",
"0x474b3eb3e73312269d3598161bfbcae30b7e1056919a6f6afeca3a2abb853897",
"0x122e4343fe46c9cd740381675fba4a0258e0f42dfa569073bdf055bb66cc6543",
"0x8c4a235053e9fb225eaed1ad6f61747d1ca9f29fa520465ee0471f4fb028c619",
"0x5228999495c587f7000ec00e18e09cccaa1ac2eb8e0415307439f3927450832d",
"0x81ab2253864c7e7ce4d7184f2280cb080e38a7d672e9f8dc3c18907a51894509",
"0xf8bc443f7984839c9024c2649ef329cca6c7f05fffe90e116436267aa0bcc27a",
"0x99553484d427f255d14c1b03ceeac1cdb5e08134ad4f4a06a1b02ec3fb1657f4",
"0xf8fce679a0ef4119057ee408a5bb7dfea18cb93d8d41f4ca7e663ca6c1c8a1cf",
"0xa432fffcec6116e11426685b7d73d37945e884c2f261a139f5cb8c458e501f1e",
"0x2729cf60d8531d0620ef907cd4f5cb51f6eabfb94a5af5b1e1f674bdb916cbbe",
"0xa5977b367bb45c53c85f40d28e9ff0215790e94054dbc11510222137e55736cf",
"0x0c4378b1341796a2ae2143795df0a7c5e3a85c57e5a2ed62d14fe6296fa98d84",
"0x07d744b148a65d6535c0b7ec4789323c10cf19062177780cb196e2d7ff5b169e",
"0x9bbf777e8fbb1cbdb773eb18a47bf9cf0946e501653584a8364e8f6bda245d34",
"0xdd70ea9aa94dffda9c2dc901e84e621135c139405e2136ac6f7e54e71aaad593",
"0xde5e19af4bc19137ead84d3db93a511a7c253eb1d71ca3cc9284163facf2ecc7",
"0xa75e5454a26c2f26768e17aa56fc1768503d7c8b2d3d0bf8a65380cdcb3348cc",
"0x37f55a4f1df17bdf0813e0781d0227f539e9633f6ff924fe73d9cbb248e2741c",
"0x2834deeb897f9f9cb7f8902825a106b0c7389f5a151f61f7bcf38fa569968893",
"0x31e583216ab016d456e9e5cfda5a27b564a822f164ee3b70dc956392bd504a18",
"0x92bbc94b98ce4dcc8bc0f98b5cec91618904021c721f175676fe59ce308cf6e1",
"0xeb3ca726b5bd919e41376a95d41deafba80d8ab52f79f976dbb1eab219af8653",
"0x1b4ff093569939e006a6854a2a1af06b8220151968240d80fbd5ac56a0837cd4",
"0xc87b28f21420b002c2b79c12388d714661ba67e55a587aca1a390f2082505168",
"0x866a67c833049cfc8491d672696d591d1163f8fe21b67f385030e6a153c3399f",
"0x61b4ddb584fc452f47db7d9912388da253ac97ae4270676c09dcfab3df91e4fe",
"0x132616810148d4491328b6893edb9a66db1b20184aef5efae481505d43ee78db",
"0x21c644596d384f59307e7e6defcf9547794b30a1f61758ec24dd0362690bf22b",
"0xc4905b2f5798c1e88ce47e7f2144bb5f8c2650b44926be59f9336b9a76477f14",
"0x281a805a9dff1fb6ffc3bc1660063d2d92ce2cdf1de4da98e007c217a8eb2b2b",
"0x4f52a327469d9fb0978cb57f8061d7c3c4c39b73aa7eb771173ac5f375850832",
"0xb690d892e39e838dda77b78ffcb4e3dc6fc4621856388233d559eddeb25f89c3",
"0x1dd206d1bfaf594caeab38e041f30f2bbcff635f8818bf5c8407a7a957e44a97",
"0x6d5189f970052250a91f304dd419742b1b96655566f4426b33335c3bdcc3e6fe",
"0x7aec3247a3d6e0ffd3e4bfd60dd143455dfebd7a5587e531575772f215bc45e0",
"0x810187dfc969f107494d9f9891d9f1cdcc0978d48efdec0ac8bbff5ef9843977",
"0xe104b79045c6efaf4b5cdab9ab1c25d6afac28a9165bdd22a601a0baed63b1f5",
"0x258f8300d1e177e19666c69dc714b71d7a441d251e4841d73bac817814ef2f91",
"0x3e78915853a869348a65035fec30987d4e7cf23f42e06f6f6b932e0d94d45d1c",
"0x60f0fff616c4014b36320f632b50e011521a4804b7cf87071f0d4b138e1540a0",
"0x91efbedd8494c07e4e77e826dc0cc557f55b903854cfd45358a7b10deaf9f814",
"0xb8d2abfbdb710b8a2694a60e72536f0e99b455614c1e2f0050ff6be1e2c0d89e",
"0x26f7662a23f6b3f20e9ade429977f4c3c56b7e53ff72f09d40d2dc0cd3d002ef",
"0x91e9906b0591fbecef8e154903c4dbeb3d2d6f853b1d2bd85af26fa6ec6b12b8",
"0xa932981dc47fee204a3a57fe11465fd836936b7cf0d314ebbfd92f5a700935c0",
"0x49ea0da0300b7864b201bc474c841641b920741f95607714d59b8ce62c11be14",
"0x778fc84c0b7e7aaaa9a12478156c352c3eb88c9703066e7744183eff8615f529",
"0x28467d644dbe57aecf7486e729c5dac2e23d1850f2d1c0e1fd6b641c9c57a72b",
"0x4a5a47a6978dc72d46dd823e9a5056d37367ee9b31b620baec372a60a5d923b1",
"0xb3ffab40553877702b0401133e512958bedbc667076cb19afc3ac17ad812558d",
"0xf0fdef8c21a19c70e3eec8f5cd8cbd8e7189ab12924adc6a913739da5b259814",
"0x3052012ceb30e8a8805a289c1a702451d8d144325e960b24214659dbbee92aa0",
"0xad90c660afa7d924632728d2462d6e12621292436d5608d6f8f4b9edd6e8fac1",
"0xa77f30230e8444590e86c0062585e299a42fc11f1bb4fe0bdd54270bc56d41bb",
"0x3b95bc0943de7c51628110c942c96445bf6e66e22817803f62a961fe5e5a7842",
"0xf1d18b53e1753fe6ae35451ed5416871df5ef3d11f298fe0c4728f2a45dc4a36",
"0x9f583b0e5aaa4ecaec2f364d15fcc92127b7975d21d73d88cc8a4dac794c4c4d",
"0x8b35fafdfae45c2084821d8232f39515f0eae1a33b54a7b068c27ef577f17401",
"0x9164a7d5479e4e017762a6d23f9615aefb7908309aac0d7ca5136c5f12038be6",
"0xbdc2907185dc191216024480db13512f447bfce61a26cada361b13519f4c8750",
"0x26aae1e9fc65bc757b8b5214a53dd3181716148fe5ee8b6024def720e8f2dfb1",
"0xdd27ddb445b4e0ebbcaee4e4ee16cd82026053ba710d203a8f12d98be49bd192",
"0xa65e6212135dc4800e8db31eaffecc5fd102e27392eeb29a0408027b8296aa6c",
"0x48be60400a417b4278f6a4462df5b21ed84478aef95832d6bc84d268043a58d4",
"0x15064498fd0d9306f93b049c09e2ae34bde26666a68398d43334bde79e81a8c5",
"0x1675cfc2488fbcc07abb552be0d9330863d72109cd326df28fc29ebe31a9f0c3",
"0x355dd1ddbc5d1661798bc2e6c14bab637c865ef2f9269cbc9de65c000e8ffd6f",
"0x3d43b77d3cc2496287b70876afa5fd95091b9c7be2404ba7d4beb33f63a59946",
"0x67d7b72f12b310423f7255c23adddba8b254955fbd26f6e1a04d2894b986d2ed",
"0x474266653b5c0fb8cdec08165fd372e0621666cec9518dd760ecf4a17532909d",
"0x21789112f6735fba468d54bc2fb0e36944dc6600714a5a91559a2d3c58a88506",
"0x4f7b92f944a137f4fabe94e79dead83d0751d67fc576d3bf0ed12f45ae7ab19a",
"0x8e8b807df4d55d066e557499e338a0c4469d0dc60c1f1049ab10c0793bbc1341",
"0x0c80c5a951364b0535c30cb2377359330e62a3b22baa9e46def2bd34335808df",
"0xed0e8622188e86095f0c00451330a8c6c66c3c4ded762c24cbc5d9583ca6c14a",
"0x32ebe89b887a32f373619861777bd4848834e2f15d32caefa86cc68a828b60e1",
"0x219dc3416bd64cc30ea4d235962476703ef07371b894e2fc6921831a400668b1",
"0x15094b0e7221259ed675e59abecae8a7b06639b8af7c8275331fc4fa2ff28bfa",
"0x39eac3cfdbcc36436bb4dc9549921b3da0b698bf6811a524f5645a43ddbb4152",
"0x50434374e8cdd1d864073732729f22a42b396973a94966afb61787a6a016878f",
"0x65b62ec39e4e8191eced64fdd511f8631bdc91361e7340b04b0bcd36f64a1450",
"0x108449a43e9c8162c067f1a7cc592c64d77646fa56bf752b4f9d8cf509df8ca3",
"0x0a01e40f6cae91f422eb3f6ccc2bc1df1ecd74102e31ca7c108cb830fe960dbd",
"0x687a6e0d33f87f4218a27806dad2cfcc03ee83a60b129bdad30640210bc0ceba",
"0xbe9514f263b1e396879f7e826e70eb610f9324d6b5b1bcef613184d858b20268",
"0x5240516bb101ef84c1ade7f6d4859f1de174f8d71a58651eee8aaaf625812c92",
"0xc92b4d735fe7b91d55d4d9dd7be705010c5046e734e7269e00a8a2d0b6eda469",
"0x989cbd034d9785f6391387ff80280bb871f5fcda1ed4491558deedc0642d539d",
"0x8b1f0fa6557b231bcfa3c1e3e441b0307d0143cce4147404cc2251e04f2e7c6e",
"0xcd6c7d23c13c62de5c2d1b284e95eec5aa938146963bfc0d928dc4f2bedbb990",
"0x6598cb8c83478b0169bdd9efc51e31c03029a193962cde282eebc57ca50209a8",
"0x6ac406d7f3c720ef0e511482353fd1764a59e236681dcc21b5b0c5608065c254",
"0xc4f81e27afca02ffdb9cc75b10755714d9f0ed585c49a02ff56dca68ea81a4b9",
"0x73f18bb87df70b65d87f5857b7ed56a0aeee9e5782f02c731b2a088dc87ffa90",
"0x292c53312388cab0d16e1ef0b5e0664260e6192a2eef5466cf2f55b9d884e84f",
"0xe12f08a92be7116c0f2124e00e31a0e365862c02f24b969d11d73eca742e9d20",
"0xff4dcaf5ecacd0a0c79ffd05fed7064a42aa34b7e4d4c2ef06cf93866ab11b0d",
"0x09b269a7bda10a51f41a382195997c1eb999e7d5b95cd80c2bbcdca1516ad2df",
"0x84a3219e02c807319ccb729b8b75884ef07828362f41352ba5366c8a971ac8ad",
"0x00625ef937b27ea4d4cdea0877a8ea6c1c12a30fedaf9ffa616c4bfc03fdad41",
"0xb260408afa75b0dd271c42d03329d18b4a52eac1b366284e4dce49228c93aee4",
"0xf6aab365a58d33619568bb5b048f0832bf56464b8ff18e5e5cb01221d2c9153e",
"0x3c1cca7e56641f2513ed3a8200af452f07c57ba719a03f0ad152924d5025f78c",
"0x4d8fe151b547736943fc9461162fd0c38c3c587543ed07919f0899c33571c02a",
"0x1f96e14e7f4b0d88667caa9358f71537ae8259058cdd5bf4d4548a596aafd6fe",
"0x47269a44adf8d4da7387b4472a6fe6fc73ff036bfd3d18539baa7a994cbb08b6",
"0x99dc1f31c4372c92c111e07f9204b0c02a65c60cb98945b48f36f91e4ee3ebbc",
"0xb386f83f1dfb377542729637b7c9fa5aaeda1b1e80a943814b595455169df4d5",
"0xc658d48da7857f2428e842f082058f67b5a207f1e89755be975d63f2536d052d",
"0xb4ac984c3973d2b29dab339b22f24184a71a8f2095687730e2e983c7ead1debc",
"0xe18a17e73707dfda4dff0d6d265dbefb30ade501f66ddb271e4acc14abe33a67",
"0x54094994c0767621e6991968292626ea6b96ded08b7db4911ca813addd6c97cd",
"0x66ebf14e3b67586988821edc1d1359b5e2b7a1308ebf74e8f262936eaf094a79",
"0xe4ec70730abb9ca432449ade5fa755063f000e4f951b9bd66427a7c81f0e2693",
"0xba2d8fd5e35c180ab7f82bd9756bc0d6d9869517dfa955c4eca986ba24e77879",
"0x01a94449579d72a037bc9b3f2c7e5b2a9fa271efbba739dcfc4317f46f7f6351",
"0x58acf073f978e3429fec96bdb141370e950c4b6262455e187901a8ae9cd996c5",
"0xf8dfd826ef39b866257bb1735a6f90e42cf5c43b0141bef9e8a40ad27fce51cb",
"0x13bc935c01bb67d74f990026ee7c71af40fda4ba767477811806033c9eda0627",
"0x06be0395e7baf7411391eb25aa6d686d17bc9b5234da75e222513aee2fd57667",
"0x79c8f4cf27457be49ba894d8f9941d07537c6efc8403e2409fefd48cdf57ff72",
"0xa3e8dec2fe3b7ae4a72bb335ffd73ba83b6f554a241bad37f57e91fe0489e0be",
"0xa09c11f4d0a7987b2b13645db856b0075aa7cf2ae6d192df34e47ac3e382e91d",
"0x6bbd7d58f36dabf050aed607cf4cf0cad4b77cd8d8fabd7e8102f37d57d0b431",
"0x64f8a336f48ba487fce269f2a50f96b27854e821a9ed8a7a37d234531919fffc",
"0xeadd50546049b0fe946d16fb473694d67cc3a3a47b66c95e36e2c5c07d5c00cb",
"0x7ff4c90b3926f3d1e0e05256afca46888c873a518d4cb31e2a8e09774c8377fa",
"0x071beac76eea71ff246007f02a36cc8a622280dfaec5ee03ad4b30c7de4e7db7",
"0x32700ffce5a146bcd52564e00a98452038e19871f766a49734705b0715b4813e",
"0x8d2266050b03ef7e8a04338443bde3838d70c093ee018ef1b78175a96de98f1e",
"0xfae1a03d9e78ac16e03720f2195ea151b266fc1af5c9cc394846a3005b939944",
"0xa9db306a833357705f982694f681ad88e6b4f01f8bbe788ebc94e46d6e57de88",
"0x0bcd8dfe6604fafeebbd60243236c8b087f39525a764b069114c254d9b3a0660",
"0x32233199d897fdca97996fda5ccade8627169b0f674fdd2dde0a9fc7fa90c44e",
"0x2457dd631c1eb6142f65a4b3de12fe569a40d44345d0bde097341acda75a40cb",
"0x484bd77e0c06fecbcdcdcd28b07baf8de611b732123a08bcc4a3a94a49e6a6c7",
"0xfb9cb098723627e59ea6904dddcf688d8df3f7128a613b0d2519d445034d79dc",
"0x0804bb070784b8eb843c54abbd0a3047cf0c8a0ca7cad1853b2c9e9e38058d61",
"0x3c8d85c1cc596e45cf5f2e956ed42e1f1b87e8d38a9e043520b23721a8dbfa6d",
"0x718be0e6a7902f2464021258cc453038fd16baf96ae5c23d4649d4f12b405841",
"0x050660b3a33d96bab20fc6325ad84aea2727cd15e6908b438ba781ea92b83b51",
"0xd1c630d407eea28e5ac5bdaa26ac32a942896b5df088ba3adf67bdbe379b0adc",
"0xe76ea018d89c46a82381d930814e79580bdccc0acee6040162ebf44d174b0be1",
"0x25193d452b79ba224d3099ab5037af2420604d533773dcef5809bf60a46d5a42",
"0xf6576b28692002a1af1e3a6b0c3955cdd9c152b8b393e23dfd35b89786ea9067",
"0xe72cbedb7d4d7be50c52a0c0341b6a1e2b8d2b9b5a337eeb848840eb67eb435e",
"0xd1db44c28724f464268c4167f10ee0b7926178c181693ff60314b6b8d1eaee83",
"0x85b058f6028aac3720e6357d3f422c698b40dbfbc669c4edbfea775feb9a4463",
"0xa4fe8bd82ae34471453c6555314c4eda49f9273e996d6d54f7d1623229a96f30",
"0xa1fe7219b3f459c299f74678c1dff85cfa71e0286fa648022670ddcdad71a14e",
"0x43a9107554de014df984318d14a69e3c2f944ce5f63740e0c234e72ad9a7d05c",
"0x7aeb4bde654f62f16272018905520fdcd5aff603c3b5f400ce308cb4220458fa",
"0x8b2c8a696b029571caccbdc6c62b88e81216fcef074a9962e2b8da9589e4eee5",
"0x70ca647133e53019d1eb2ad9f88a39cedfff6613ba145eff700a2e6430f5edbc",
"0x56b6e937851f9fff38f8482fd739d2534bbea1d9f7bdff37593f2b6e24c6c892",
"0x6fbbbb8c4b2194b3f29d9233b251d33ad2b35e44ce51ceaaad6c982bb27ad6af",
"0xc76aafb66d6506356a83bf7bb4f618fa8b4e8fe5c5eab6361b6381ee519d7299",
"0xd839e351e77b21da7b42028f0102982703785b7ab17844c8fccc08385a85fdae",
"0x18a0082277bd4521c73f506f775f7b9193c81e3985c1a0341b97c9eb532a2aae",
"0x18dfbfa1771b2e60c8e859352550104d4f4ed4f788e4acb5e1700eda9bd2aae6",
"0x4c637fec82e7c993ae0c1f1ca76ef7ce02cae03eef1d40d3651c0ca945b37223",
"0x59fb0b58a885ba8dc9fb49cae638505bb609ad4fb8ff6769cb5174df461de748",
"0x97c58e7dfd2d45c4162f3590d0a4307b3d489223167df97177a11a9a2c4f107a",
"0xeb3a84563ab5b034eb5b301ed927db60c7c9918a73c88725bcb4f391ec80e264",
"0x1e24665e197511c1d5f369b6cd5d9655e39ccc71dc96481c3786294aa95f7716",
"0xd99d4053a8937501b5f33c2a891dc1c5c68596540f46be4bb95829b0fc8fe518",
"0xcacd99e02e6d95871337755edd5078fac19d0765a296a256401cb36772450fc8",
"0x0d8b1ad0070f13966c5c1a793f8596a1c4546e0deca4d2eab770abaea7d8c788",
"0xae12f968a8d9e854a55213c7d8c3522014fabfa31a41c5620bf4c1fa4b412ed8",
"0xae8d86547cd68065a8201df6f5e5e7ff7d0f253354e3a11f109b4c307197bacf",
"0x9aa0e527eb19eb7ad49e98387b7c367a8af94bbaa1493e9cb1f82ffba95439b7",
"0x4bc7af1e8d91864331f06e261b71ed690a2f95bce4a10b32ce8e57d41ed434ea",
"0xb7e3303f5aea61f4198720b67fec535db3a67a236271897c40a5b3626324b1e5",
"0x1c28333ddb6b715dc49390d7603124a32aa79f2d1a3df439972b796fcda24b75",
"0x1142fe51525a5e1c35e710e39136e9272c3ffe17e93070e29f543e2ce15a1747",
"0x13d2fdd1a280e4cbf56c256a0874b37d1c96b720c57d6baa58ce5e53c878778d",
"0x0697c729147f0bfcd8140ece6818594d9700a06eb642dca83c82d71ee3fe58c3",
"0x575577dea847a6dbdae4996ee5d580233f72a14862674c5d3e7a10a42e2d0351",
"0x8be0771aa3c46db990fcf44e5695cc68e0eaab17a27c2edd8ad133071b213d08",
"0x97c00d772b74e819d1ce3bd8f960ed146876c92a6832fe550af02ee1a5fcdb6e",
"0x252574a6c2b3d4c1256555c92b15bb319c65c281ec7182bb846556039aac9ae8",
"0x2c8c35d0884c1722087df8453554bb41c4dc0ccd2c733a4cb0ef96e82afdce29",
"0xed9bd6b0a0935fea6255c1165c3cd4f4a679e7682b2c1ddf56576a4ff4e2899d",
"0x15930523b35b7dcb5c3667235530f65c6dcb6e50be95a566bae3ab8462e09d6a",
"0xb496381c8bceed672708b285db8faaa4a88685c82cb3300aef2eec432ba5d510",
"0xaeb6db62dc87ee9c11b22dcb1f6e2edc8704614ca8339f46fd5ca93c9a6dfdef",
"0x51d2858b08f1fce5e913eb191bf00e892101b28cc052bc101fdd3b1431f33566",
"0x6e116778db7bea0bcc0ca8091ddd25d79e49380e8ae1db3f6c5d02a58108019b",
"0xc8bfa6406b64178e69982aa5b0469e3c673335d02b95c4e92e063b63f3c4822e",
"0x99dc14bb9eac3b98ec17c47dde323eca58c03995819fd77064e67c39fd4bd267",
"0xc1ead1e67df08872a479b65e113dfc2b526798fe6710498d23f85860f975f19d",
"0xd02d56db80e0f440b8a341070e9fdbf4367d4f00de0d20540fe0366ceb805c43",
"0x5e729e9b1c67af239a175145dd70231e27c803e74f41978e2c2a1c57bb44e01d",
"0x8278da9eee31e624a0a18d3fbda12a01212ec3b768efb17ed0104861d0685c8c",
"0x9fc130daf463021658a868f4e04ed7ead2f7eee4f7fdaf69f6d8e56e08fb52bc",
"0x65527a873087e8be55671750d2c747dc1fd6786097824cc7e6a38014d4cc7a40",
"0xa5e696a432c64bc1839ac343f4b421d480f86050f463a32bf6f4886c271b579a",
"0x59b5c415bbc0e63238a465b9f97d246a71a67265796568e15cad26bcecafd656",
"0x1dd2cd36fdf907adc8056ab2d95ea1271d750afda532e72b1e4934831acf4c9e",
"0x56003948c7d0b3ba9a2f2b750e59435f6c07931ba7b268e921f92641a99f1ea5",
"0x4aff1adfe1ca51079258e8af4459dec78140e41ea008ecbc4f6c0ee6da9c0379",
"0xf06bd8fe34e7ef3adcccc9ec96bb8a353375d46eaf4e5b96d75a81605f04abe2",
"0xf3e751999b43f851b5c03da4c204c516af1c48a427e918b1c06881f19df9e698",
"0xa3096446ca5a29ff568afd1054d37f9c1cee28ef5e285a73ab478dd4aa7166b1",
"0x481c53551e35f05d14e14449c0baa5595c482e36dc5f71cd1a6ac94027eb1d08",
"0x4604fbec1af30c8a30524ac648da5ad50d35a2cd2d7a74ae3d91a485c5f6c627",
"0x527dc65c0cefe3734029ed170d6a555729b83ae0934bb28230aad0c1b6f81579",
"0x7df2ef4eee8774415151f49c3f2936778f660f9086e389261fdb7838e6805e86",
"0xf7a6da82f8adba9187bc45cb1e23428c7c16cedd3b8313816baeee93784b3bd3",
"0xe69fec45b3b22ee02e540adea0a45dc05c0268e6ad6e9a6d180ca3a407eacc79",
"0x67052e1622bf5bd9227e63cd0fc3dcaf8db70012649d5676150121e73f17c314",
"0xc253d564634365b785ee7f83f28a9fa2f975e24063a2e6b8744631ffb7f47add",
"0xb0c858b95a5761e46aec676ec81ba4d84b76f4a77c968267e835905a035b1d79",
"0x8e400499cab14c1b3c172758ab8c1ae6130d986d4252bb5a08ff2d01ba9a5ca8",
"0x919fe24156e68e047e059048771ebdd7c521bdfaceeecabc00d2985eccf85f23",
"0xb848d66d8ef6611b5b8aed3c2b52514d122065ff823ae2791b8fb2a0da0012e6",
"0x4e2b2ac13f7d8fe7c3610d9f9ca72a2e8c3b087a30340dc602cda5dcb34ee1be",
"0x7fb678e57abe63f107a2f551f02119ea8f4818b33d24254e83a50ad31cd9e003",
"0xe20d018271635eda8809a6e33e212356145dd760e0396ca4c7c20b174e0903d1",
"0xbbd32616b6405ebf16a849c52466f44d1b6a75781144ca26bbd9a0a800ab579c",
"0x66e56cde1d5725159dc25161a7fdeae566286102197da75d3b2a0061c5e72e17",
"0xed78c34110a34a035c272d23177b1e89711aa6fe5d86bc310639e2be281cbbc8",
"0xdfd222650f64f50bcbdcbb0cde52f2f595e2bbc6c407f2331d6261710039a229",
"0xf417a3bac12e37cc34af45941d125364e967d733960dcf532f5884f0123cce8c",
"0x71bc627f16637e45f324d328ee77753405f386e6eb09d728751484b669bb39a3",
"0x8c1ddc7575b40e933bf78d79ffc5e7a1576f57d815188135c9b69f95cb7a07c2",
"0xcade8b3aa016d5c38fcd25e437efd7faa7c7b348ccc0f5739e432ea764c43934",
"0x0faeaac8367dfa7befe0d1fe8faa0dda63e52b2a3fd6c1949ad3cb573b65f812",
"0x788c80ff254701d0875226bf44d1979f0630d62e61e462af607030ff0d9b3368",
"0xe0e6e03423b59807bb8b13902fd122e9a54948a62ab1c7166d70b04827732b9f",
"0x9d719c9624361d38acbbfa953d138455aed6219988f4c0efb81943b9914aa667",
"0x110fe7e2bce9d595b165bfa4b1623b8d68aadc009dacffaa7f5b9b22e156429f",
"0x8584f37f802adfc366bc7e4495381a5118a1748cf7092263af6ae821639b375f",
"0x43ba36909165e888100e3bfa68c143608d2957e6e12e8e5a5afc505723f2681f",
"0xe3502faa04ecda52f9e2991e9b0a4bb12336568f8639b2d5df79302293ba0e80",
"0xcb5b16709d72464e9cf8006dee81c0a13134ba0fc7cff79a3c148c023906b46c",
"0x39042255a95890e5e25fe5b337ec6f67752a525c3f16c13c192278501d1cf98b",
"0x6acb1a8761b4dea3bbfb0ff36acbfd9691306760128021645ff996047956ce52",
"0x7d271348df01d06078731f840dae289c83ad9c62a053a6fc4c1604ac3761059a",
"0xfded75a4f5fc836ba1e7c361fd8c9859c8837c9378e85382ff9fd5ce68c35f6e",
"0x7be16ddbe3440ca448b35ef2096e5908df7c6fe5ebb947d36fb8b850296be6b0",
"0x231f208f3cd518ffb2fe8247839c85028e5f571294145568041d485cf890818a",
"0xfd6b89d1df0963e9f1e7cd20a04c8c64d4acf080068945d369c147818876661e",
"0xe6b04006a037628d7d5b92daae5a658f0609a67a1e3ab5ba192c4b1b89124fd2",
"0x64e4c31781178ad1cda0f4692fcb64f712fb2168662c62c329a5583e57b18108",
"0xa2d8b3ae5cd5426986f9b9c7efb7b310048a0a0d2f67334bdf7f624733f6c848",
"0xd561bf8889d91b742fdbe91568ff515ed00ee4b00f0c348b7ccbf886b77def48",
"0xc75f30604271aa0866c4bce63a36843ac97393eaaf049d1f298bbe5a222a7e84",
"0xe1311ecd05a64af66424105d836cd841f24109e95dac07c88bb64ee78c449200",
"0xdf9926e89a65d1bb3207adfd7b6db4a3244d97be45142fa06bb3e998dab0a86a",
"0xedeb275850750b783ec429af321dfc027e5d39dd803f4c9a5b203ddf953a1b27",
"0xee6148cfb49cf82a27d1dfcb14f80147f690e01f3d9a890616bf5dc1e607c046",
"0x3b69daf8b05fae34985bf38b252453dfea52213cb5bfecd90f6ca38a8e58fd1e",
"0x348b4cd39e5d417085e043f8a8025a3e68ccd6bfcbdbdcb90c66d70a28709494",
"0x9002d69e7e739b8f776ecff6d118435b900e505a7c16fca31f64ae71dce82986",
"0x29a96ec2a1293ba421682f5d1c74f83aec5d4a6f0fa3c1c394df14b9e235d974",
"0xda53cb82c0ad9c5c26ddb6562d8af102334477c2f7435bb53c8fc4e4a877b0a5",
"0x13b9d65a3a66d855a206f6f63312eaed4e405cc4ffeab4fe7263539360755b26",
"0x4a4cec2d543aea8d1418a1fecc9f0e1038457d753da7f450b7d3293c851ea512",
"0x35630db49b5997eedc830b7b47fe0428a95fdabd954e2c8af32a0a98309e0761",
"0x7f50e590df1675cd2385dd13c5f82cb0c8faba9690dd294b5ca90bafb6b588cb",
"0x2b6cc6065a1804cf831874955a03df8f106fe271ab60832c0f33c3b0ca94bcc0",
"0x258fe7a7fa5a2628512f9a1cf775ed428e5d333213584e40df40e4e1e4b53e99",
"0xd1b148d8d8212698f4f5f99c0b615fe3d1d0d81983149d87c0fadd3f308425e5",
"0xda4b8ef0abc842ddcdcf78fe71a9526120585fbff658bde79024c43fdbc86551",
"0xb446a4dec3b4f517a705e58d699ff5c07290648db07de60bb09e62877ab86584",
"0x33830123a250cd8638561396c1b840001e1e2b6d169ad0bb5bc59286547fef91",
"0xa1576028b9a8c08f4492bab43160fd3dbae34ce6be0de51ebfd2a6d2d6a38dc4",
"0x1d962eafcd83751feade5c58c63e76a56253602775521ab1a202006b391c4e89",
"0x86ead56e6284fa402779a9e4553664ec6ae0ec1803b850a614868b21ce8586d3",
"0xd4cb116199be898e4b56769751a9e85b8ab87818d259e916a9db1fc73ac06e0f",
"0x882652ae9949e0ac72673999486bcad68ff9baa2956c7372670e51c98cefc8af",
"0xf6e6ff41c774c0becd16b43ef716775181a925d274c31c768f74ad1c3a32b1ef",
"0xb09e6534374ef307453dc3f2a0602fe47a346c62f2d001f6697236d2f2e11a98",
"0x75597bbdfc11290134402983aa34f4b5af723ae2e4a825a4b5c0819db72ac240",
"0xb9110e79b2f2330cbe3b4535ea080c5ee1fa80403da4fea5ecb6084ecb6d277d",
"0x55ae4ff2123e5101cd3e4f4fdeed8545bf9c59397db8e8f9d8901e0a7e75ddeb",
"0x3238b14dff5a6eaab7fff9091fed04ab2789b1f368926d86035a82a140ae49c7",
"0x2514e5d19c4a00387e11dc98cef2763692da4a7f90342d2adb6f4802bb70ea2d",
"0xeb5643fe5d8e8fe13f285be6b76b1eac831c57fe46cb6fa7a59e239676676959",
"0x1f1ef022a02bd26891c039b75462be51fd13865c07a3c60dc98688bd45f4c543",
"0x668e62f2513afc51ccbb179aa126c14ab0317c2278702938337949da86e36417",
"0xe16db22afa2c8f38121d6e67250691e124474e4f7fbc8d3c6aa9b285ae7c92b3",
"0x8793a39fb3262ee2c50d11bf33a5604d9e0cc42b39375683ef6a6cd89ab5d5c1",
"0xd8b11d3391a1007d7aa716743c452e6eebcf4bd5695c1ed5533a071899cc543b",
"0x192b38f9be07ef6b42b5217376352c95769e5e07997b9d5baf51663581f232b3",
"0xec13d6b476922aa74a40f50eb782581ba47ec6327082df32473952de25c83d0c",
"0x5cc1c80c881738bc133377ea71be4b6802c99567247719a387cda27668d58778",
"0x34b7a9633cd49ad3a895f772ac73a8e715ce9c4f0fd5507356c8e3eaf33cb29b",
"0x46f1cdf66e60d898ae032f06bfe93f61b7cd69fd5a0eaccb9db620380339083b",
"0xfe6d2f1ba7e4ef4b294b41970fa68dbf900b4e85e58a9af27c4a42cfc30f1dbf",
"0x352f6b99a68daaf5dce5221592a142103b7cda46731ed187c3e1103b96e82dce",
"0x6e99833da7b5b8956d716cb9a2960a392eddfe06a0bc5d78fd564c86fb0ccb52",
"0xfff814a33bac8f75288186ef922ece3b606dcbbbf737c9c4e8a5f1f4b8aeb043",
"0x9e76a2096f56a74a8c7e7087e0fb800cab4c8cbef8f74561f084b744427a57b3",
"0x3ec126ac97179bc3b6b5c6e705e99add70c05fa0944d94cc7d03dea80cf99a22",
"0xd3bcc11fff5b05e8f68dcc7ce18fc859b4694ac6054274eba2d57b429bfd4684",
"0x2dcc7c43c813f86f5384bf873f80719ba130564fd762f79f997afb8b78400ddf",
"0x99dd99812eaf582974ea9dfaa34af648b8c9285f83739064ba5c1a27b15b3a9e",
"0x4dbf1bb339d6bd7aff3cc30cf88fbb1ad477ff86b03003c27c00d04daebe3b9e",
"0x965d253eddefce112690eda236fd4b3c0bc886cf1fbd8f7169baf01180db62f9",
"0x65b655141981bb0fd37f940a0e9cd4ec0da22dea05ea76a218b282c5c3bf6870",
"0x206ced27047c5943fcbe0a3e8aea8319eedfb74f9ef987e325e960c1e5de6c1b",
"0xafe29dce7d2d5fab4e25dbf8feb9e9140b7c9ec32e85998094b45bd567c501f7",
"0xdd9587a1ee2979c22d3c5f9c1f75197c6106fdef4edf96b6c031a145275c3411",
"0x92923394097069edace46aacc259122d57e839a88d8279164c060860c02b558f",
"0xf0bdf2797e8e26c50e72790b8e2eb9f021cdd28d9f787c5be91f9ae9aa7c4254",
"0x375b5ec9a57ec7e138d83d587557756c8a257c35826647d6fb8722483f6ad6ca",
"0x97565f3583e044d82b34538bc1ae4ae73b1438bd293353bcefd8074fc4d57d9a",
"0xccaf1047024f3879cc6c24be5f2f032bd66c811f3e31c43ed4e659cf615d5c22",
"0xe0feb551c2f9d3abb1aafcd39ad8f6e2cecadf58452c4cf618855829e51296f4",
"0x61b00166b1e2418340130739836b55e629e71121c03d951f216a5ffe790c0bb0",
"0x224940c2a88acd6c08d383f9266cd58cc30733778419a1eebb9b3f29c7d63ea5",
"0xf7ee4ced3c20f765bb217df4f9ed3acffeba11adcb3ce780cce4534f0d1f76fd",
"0x6ec6d073da3ba16c979d73d89a484805a61f89ae5aa7da63cb3b4142e672c37f",
"0xf13edccf3c2ba5b07e51aacaac79390d48407f172369fb3b5d0fae5b0362e81e",
"0x36bf725db4b4a913b9da3b9239cfed8cd8c2920b9f6fa225fd9e01cf50f7b015",
"0x313761a59054f3fcb6575d84dcaf36a0b2b98de4ec7c946c0e52d98390977396",
"0xfb2f6e111aca75e4a7eee5e45e9bd019242751208874f70f130631e6e70f652c",
"0x5f669e23137ce3b13c3370a2a9bb69d678c2d4832bf83e92f3d3fe4004e74f65",
"0x3e4e8e594981033e13bfd7c966806f29c488a8fd28b4d4c41762909cb1eed0c1",
"0x012223f48eb911be09c85d7c497383ed56198483a624fdb6fee2647bd225773d",
"0xff1873be4d0bd3b5f631b9838e690a359849b33f7f3fc1e19ccbb72c88756767",
"0xbd687d562bcb4ce7c97533750e6b960ce0c70e651cf4e48a86471d9c2d697bc9",
"0xadf6c679a8bad9a1debac26bc47ea20d85fd583d1ecb6686e04fa9e302f9115a",
"0xbaf772ae7b9297ca5506f5dcf2c38b8342d25cef39d38a3565b59b053f3bc3e9",
"0x75e82f9e9b1c1bf35165642cb5eaf663282e19a865b8ed357955da5357807040",
"0x1434b0eb9da6e3d6b303fb90ff53b1e9437a48c0a76a0c4b697e0cb35be1f2ce",
"0x9374a8ccb290ac7092baaa3015833b85162dd8a25f5bc9085bdb3cec74ab74cb",
"0x3f70a231bbe16e811656114d9f56e2f2189a8c09150c771671fde8dcc810349e",
"0xa35119becf58b88b1047cf99c6e1505fe95084b3a7bed9671086586af9f73492",
"0x80529edeba202929712f3cdce41d5e62e64b400be30367628c00755ff6b9d413",
"0xbc3760b47f838830baa4ffb46e2565e1d46b5ebc23b3b1edf6ec7c805f09c2b6",
"0x62a71459985ab84b9d41cdf869e3662fdd893cba3d0bb4a927153de686599a5f",
"0x5ef1e0728bf7beccf56ba47d4845bb46390cd3c6e93dcb2cca731606f95d1500",
"0x7779015d840f8a88c1d0cf67f92cf127d3c9794ff3dc054aaaf2a3e4b3c1aae4",
"0xa9080b382667b7441685f821da557df676a42816d09315675c7a006a72270a46",
"0xa47b186f5816a5e491f340f6ddbcaea411fdb2f18927434c453af3e516823600",
"0x7d8c351d6adbdd697adced72bf78d872cbe0863ac9ec8d2dba3a710586164cd0",
"0x405866bdea47ef0bea80299efade675f38d3d3fe7099ef81a72e38e1a3cb3986",
"0x4dfc49055b63fba170f839e40b4937db2d526e417b91663315e2b30d6f457659",
"0x305c768a219d7cb2680e318db51a56316b4cb5031ea3054881391223f14d0d68",
"0x068059d70253d4b9fa6c6b9aa5f1e630216dc86909d9d0ef85efebf035c7e117",
"0x8511119d6b7ad71610dc7f6885d629cbb5b29de798ccbab2d19c933c4b19cdc1",
"0x5c07b07624f978be768a9ee75c921008fe568b26fd72fcecac9bb86cafdcca2c",
"0x3fa37280dc8af0b49c5336a212d4ad0eade7c396aa819d1875843912d926d44d",
"0x927f2c496e370470948f98840189bd42e1069c19084d286d92b99e18657fce11",
"0x1e16eade51d54a2571949f47a60f3c8fac1fef64017f4aa89e352d59ebaed60c",
"0x4d192d0b3676f2318ce425322362039570bed3a631712c77b2a7ec83e533be56",
"0x772edb64509e35b4787a4a00b9744970af1611b5a99d54369d72285c1b8cebbc",
"0xf7e8a2805741e7026c16e5725abdbb79e41ae67d7e8244102fb9335825b7c121",
"0xcff6ba50d31a3517b6b8a90f369c1926487097ab1aa8f94db8b1825d732da641",
"0x32785079f4953cb089335c558734e7db5bc56ce9ff0fa6b3eeba5c17ccddf712",
"0xb1bf5ae4a4c4d15951737a8512907b55d6861b4469eb93f0126131f0e960db76",
"0xa1f6ad11014379152a2d9ce3cfcc9ccb78c7d368fc8d6fe6c7d3f0cd9b18d243",
"0x29acf19bbd78df2552e096d34865103b67bcb675e1f7637d7e3126ea81328383",
"0x5fa035769737cea3a671055117fcee6e49f87dbb91f405bd8e57917f40d43258",
"0x9376967d393c7f162b3137a8d5223eba30523efb840a77f9ffb3c54f6562cea0",
"0xeb906fcea9d31514f9a9ca677a1a5446c59f55b00988f31288be7b793d4d4a0d",
"0x28df5982f0ec1bab9f53634f84812fab8474ef1f1ea445bd5abcce7160654af3",
"0xe8db1f0c5c36b93e6a624faab49798068ad7048e0e119b85d2bc390a47ff86fe",
"0x035eed70ca4e86cfeb63724e4497097fb5732f9e35186499f32305e1cb62aaf7",
"0xce7e3d7445800b883a6afe66de6ef645ff64860ecca5138c0114efb0b98658c1",
"0x507d639abbbde60fe1a793cbb74b3390159177b7ed439382e1c6bb519b93ab4f",
"0x8165b07162d41891743b8dc66ae9e74b53eb0b2148ee0a279004ab4fede787b7",
"0xc591ba93abf2754767db7bb127c72be6acd719913c36ff7fa21bdbd05ec3c928",
"0x54f15e8785546f8a30e21ab3674d46a6e891f9bebead810b9f1366d5072fb538",
"0x61d3b6d1e22ec3ce39e01b3a2156bff745eb28f405450e7415b6aa75bc2165ae",
"0xa0710473b2f9c580c38ed05d49c3a70ec3d62b8da444bf60b025dc06865b7913",
"0xd7060eafb6ce0e0290392ff840b36014b279707c96eb8a6874d539c17417db77",
"0xe6cdcd01dbee6f9bebb2b8d6ecea9128adbaae36645e95402a3141f720c61607",
"0x7defe0a4cca43220d9e734eae2c391140146a1429893c4e22872b322097ce083",
"0x0889381511a1c287d44de2b97892bc42a7187f192a40130c02b64fe4ed307979",
"0x7b51f005bd2251f2505c166af288afce15c5daa7e579d84dec64da2611663213",
"0x78590863017925ae20ecd0ab3d894ee379eb6b317fd555762d690afb6c7571c9",
"0xe5364e7972dfd48a13d283faef5048eb5cbf9cefdacfca2f344bab62f553a3e9",
"0xce082eedc1cf0e59648767fb5e6111cd52c2384142bd0e64b53327eed71b9bda",
"0xb55bb94834fd25c07be869a595ecc8c7ca073bcd10a52736ae090b5333a7c01a",
"0xb7ba53ed094df02bbcaa3f5e14093050fd7ce3b5f56581da3ef39b20faa52ff6",
"0x14f91b36704989c461c3c91fdd387af8a0e5cb9de83564768d12a3161dfb6570",
"0xb783126d4aff67331c09a8c2dd67975e390c5e30d491f387eba3ab460d61e48f",
"0x1df18339d1cd450b00eef7c5ffc629ddde7ce7c66635d7e3f6173ba67c465f09",
"0xc3afbe9680722e1c6e6e2f1c4ca05578f5cc03ee471c3a874629500375772ce2",
"0xe0762a2f4dd50008f509b090512a9f3b61da31ca15e89565de1a20a5e82498c8",
"0xb40798c2bc2f2f1d4ca733cf725067d93b8a7ce79e825b0d8c3d75de4b7b75f2",
"0xbbed0630817e3be3756769ac03f8cc47773a89b4d108dfb0f7c8134426d311e8",
"0x363ecf42cce3b2f9fae5351a3b1720f7ebb103d98ab98e83d070169c92f6eacd",
"0x5e2cf0cec878c48132bdc509d673617bdb5c8700cdaf0079594e9f0a852638c0",
"0xa41f1ab43326da96742e3ea121302eb78d699f7dfe5819874502c49922d32547",
"0xc57973f78786bc0da7d145c24029ca002ad18c305a2cb4a797702c2b5935afc7",
"0xa5c244713fdf07819cf73ad4e39370df2f9bd16017bf949235f709253ce8196f",
"0x5a2330c7eefceec26683cec8c78b03b31ed8d487f5a5fbc56ed1a7d70f30b4bf",
"0x4ba6253ac69cd862741d80b6c8cfef6bfb371148dfec35d53b2fda83a1d8d032",
"0x4f508f16eaddfab93cd2c54237c88175593f430efa30de624658ba1c07f7beb0",
"0xc7dc55bfd18e467d6ffd1fab5fd848976541aa5a57b6c959dee421c6a4b7eca1",
"0x261269c42408993cc6c818784e86b6c717c4991aa762d3b0b8478116e3703003",
"0xee2b50c384ec0b8033b3ff955369a91421bf56567495336a428a5e50cb6b27e9",
"0x133644fa7416af0ff9fff35be0ca69cec4624be54b9e578c9498a25942c8b583",
"0x04a76a83d9175aaae387188e53004a97856f509afb1d7b46d894381e73994741",
"0xab10e84cbf8e2b02a2e9c5a8235a1a9df4517d4df3af1830ad50d225c4644721",
"0x2a0aa09df678f7b485b8a3d96e61b79bc0879cff33093410bb833a6ae8dcc9f3",
"0xa8eb8a0459295693d0024bcb8cf86bd0d829ac391694253c99b478a1325a4fac",
"0xa7d00c2f790abbee2aa9664f03814c8639538a8d3c897d573964a4a295b40fa2",
"0x9cb474bd11aeaad0b80dff8f86f053d3590b427a1a47976ae43be8620f1dcad7",
"0x3652c1b1014d272fcecfb5afd5f3cde1767a275054a009204ba41816741aee74",
"0x0b7f0b3f88b29597ce10c687133a97910a285ea3e9b9cc7f961482559c4db446",
"0x28e0f502a6feafa88d1f9839aa1ef05f885edf07b82c8a459c8be2dfe27011fe",
"0x3ed7c0a277f5c487db5ef55c873000051748845d33eccef3db934b4292eeface",
"0x9079da1da700f461597e4f986d0b4cde30873ddb400aaf087a827636f44a7ffd",
"0xfa44d95c7dcaaa534031536f3bfd7630776f1862a3585a6daa5e86e3dc5264b5",
"0x959dbcca720dfd5e920e618c28c663c925b589ae2bd82faab265b09e4cf6db08",
"0xbbe07491ee234bf9ecbb35560ad6e2d1a7ec8cb2690cd68b46cbad79538aba1f",
"0x589d7e261ca64bafa4d7f9cb101f5f3417ef71c501b5317e5162c3774291081b",
"0x5b97793b3b83b554beac60b2b6b3e22b6c257c81c32adeaf11f58cb70794bf5d",
"0xb37dc9e9418dc0178364af954fdb1a9395655955ff138fb0f66a81275ccfe0ed",
"0x704631d8f514805cf51530ba31f3c9f25d1bf8828a410cd89e4d31e98711f278",
"0x81ee7855bbd2ae8e1aefa5141efeaceff850b2223b8aae2fe65f2e2076d11b87",
"0x226370d2bb775c69f3432fdc1545c263311948acbee525e3848317cd9fc3da7d",
"0x4e6b200866b090eb2dc26259b7f8adabf57740fa0a73f73df0ada6d9f80d13ff",
"0xd164106da1db225979ad7f6fc9e11b40e5fb5ae345a818014d810e1a871b2b48",
"0x68087615488020a515970c41ef40392a4877e59f05d07444ec0b7f2467a099b3",
"0x21575bcaf329553469449cdf9d68faea0218728b09627a36ba8426bcf8115791",
"0x1e11dc27c4932814b0234bd17cff690aa0f9c8a258d57e11564484b4b17a3e0b",
"0xa8a409601f945aa2dcb36574966f6b8f1942f83d5110dab917d730016b3703aa",
"0x4eb77c78b2157e63b6ca0ddb36afcda138561ba409552529ab49ea9324e1796a",
"0xb66cd6e9e19f50d0346b5ca40410cf6d334dae9c41ab8fd5402c538c11a94a78",
"0x5069ac42df7f89261f4ba36452190e0ebe938ab46eb422090e9ef458f2fea8bc",
"0xf77faca1a86c25db5a348fc916b7f3724855b136b21eda7779b874459d6b7562",
"0x3fd875f36e535bbca2ba2f539d45b8e60487415a96d34846b110690cfb45fbff",
"0x2cf97dbc6bd70524c91ff72718b5ebc2b3ffb38b46a6430e9f16a1a8c3545271",
"0x0e4bd06ec123f3510d059c03439da7e19397473a2b144868b3fd70daccbc6e25",
"0x36d07bd92969b5465a70ea63ec814f18033990a941b38e76114e2173264505bd",
"0x7d8a17ff014fda45bf5c43a83316f53069214949be5eefa80b0fcb9c447573ac",
"0x70f8d99ac59af894e9f136a46e650ed1dcc022a7f23f7c7f7d3d899f0a934729",
"0xccdc7473316bf9faf3196c11f65eb560cc5be04988ed4aaeb2ae2fc7a76cd7cb",
"0xb95e9102f44161346459f9166695ad4d01b02cf827333bc04b73e9bfc76a6b4a",
"0xa0073174e023480efe99e1ee414a3a6fe7a4289a9146eafab77bc2a2f74ce041",
"0x71a170f1bd3eec872eb86ca28f5a07a16d34df621841c9a0327c5a4842d14cff",
"0xb46b6570cc7b9b9c6530f1395628201390559117744bb3ae3289a1329e2a9fe5",
"0x6612ab632dfb5fa48c92c28c1ebdc606d6456defa2cba07fee5c7637a9f0881e",
"0xbdc0d3c7bef21e95e10e012e8b3beb1d9d6afbf0f6d4431671c5e2c9d3d558d2",
"0x1317011bd4eded75c83e9a7a96e70556b3c056a996b90efc54cf983eb832234e",
"0xb63e87384e2b36fda06a1600031b9e8f76d8ab3ab2d1a50fdd24dbd0d7aba82c",
"0xc266ed0d55603ff6781b55b850d6b03fd2f0e96298b4cdfb5f05897a0fd2d143",
"0x3a6d30c03b37b50fee8cc592e39077f2577c1cca654fe65b30b8e6b7175d7c2a",
"0x6c1cfd1c1ba9c00cf25d42fc53fea15b3d436dc5b58f2cb3afeb8bb2a353a5c0",
"0x63d68be124625c2604e5297a5f8e655a6d44a43d0254f538d3f8e095c75c0e0a",
"0xcad240da9f6d07760ff04cb649dd5614d9ba8d1254734f2d99583cd24ec35d89",
"0x0ec939ec5cef73b863b964f3d7b852626d9d2428ce174fe998a45bf01aa8a203",
"0x9b526692a719f47c3c645818165283d9fcf0fe42e4dfbd780cd2628059278f14",
"0x1896c29de4883b1a6c91cb95db2dcdc0ff176b65ae1fd4bebc18afeda41eb425",
"0xb71cef6adb860bbde041254126bbaf54fd2a385f1870045c4b7986e22bfee34b",
"0x05c0644792c8d246675f4882045a2226aeec17443c8f796d63c84533c627b343",
"0xb3d2c5ed1089cc20ff4bb0882ac778417190dca446c7b83f5d58b194ecc55a66",
"0x723ef30c89606acf024be95e383372d42e07214de1d0040f386f268ec216df76",
"0x7dee5122c011954e14f6eb35957ead3b728e181331420b3919105f073d16bb05",
"0x0d10c86c88fbefe4f397db0e19ef7ffd5833d53ba90f4754987e89c13fb67d9a",
"0x5c744c979c84b49dcd4139c7c179910bb2150239979fb5a3b4a1053c6d398dbb",
"0xbe3c32d2059814004ec49e460dfe39cca8202877a8a83c8911f01c3ba234c921",
"0x8adfc2c122e2cf58b3c032981574255cf40b4559df4e62d49d550f04ed0553a0",
"0x80bf3ac9eaa6dc061e488a431c4cf08d4d042ea47453c44892ec50e966081065",
"0x817a4b2f3e63e983f6fc37476b1b1f467099a50a25f356738126479839c084dd",
"0x5dee0513b55736564262a7fc472ff671358d4fd66eeb9596ec170e054d954faf",
"0xce34b38ac7d48c0655885f7378948deed4f107f5fc4268608ca0a9850fd15085",
"0x6c95a9df5aaf661a2f32c96a25a091f66c38cb4b7479cbfd7a9a162dd4bc12ce",
"0xa63bfeca9998140d7aebc8d8603d6ebf91dec849445e454dc6539dcde35481f1",
"0xed514ea523571fd4eb31623e0da3dd8a41bdffc26ab4f8fdd90e2cd9324b1bf2",
"0x4037b9d183c4d81add87254e50219cf87c4cc94128535e50f2f04331b1baa3a6",
"0x1f009704b3245fd77ecdca0ad95322e6ada6f4075e1289108675caa5da480de3",
"0xab62a47d7ef09bb1f1e78289127d993aee91bfb76f95bb3264f6577df6d54684",
"0xc70538d7614ec964fea3227e60d9d46a5c6215c185d1d0db8e8c39763f50421c",
"0x2f294fdbc0f5a6407267d525fafd59211baf345e566db91717209349f655a31f",
"0xe867ce4a2df3e263044479d9c6f64a72a4d5b1f3426c54b9fb217451f81e6d6e",
"0x5a00548bb8369aaf20d16a63141a778346c70a37a3851eec1aac38c69c3c8c7f"
]
},
"nodes": [
@@ -3916,11 +4418,12 @@
"0x0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"activate_at": "0x85d9a0",
"pricing": {
"linear": {
"base": 500,
"word": 0
"0x85d9a0": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
@@ -3928,11 +4431,12 @@
"0x0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"activate_at": "0x85d9a0",
"pricing": {
"linear": {
"base": 40000,
"word": 0
"0x85d9a0": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
@@ -3940,11 +4444,12 @@
"0x0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"activate_at": "0x85d9a0",
"pricing": {
"alt_bn128_pairing": {
"base": 100000,
"pair": 80000
"0x85d9a0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}

View File

@@ -58,8 +58,47 @@
"0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": "0x00", "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "builtin": { "name": "alt_bn128_add", "activate_at": "0x00", "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "builtin": { "name": "alt_bn128_mul", "activate_at": "0x00", "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "builtin": { "name": "alt_bn128_pairing", "activate_at": "0x00", "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } }
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
}
}
}

View File

@@ -46,8 +46,47 @@
"0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": "0x00", "pricing": { "modexp": { "divisor": 100 } } } },
"0000000000000000000000000000000000000006": { "builtin": { "name": "alt_bn128_add", "activate_at": "0x00", "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "builtin": { "name": "alt_bn128_mul", "activate_at": "0x00", "pricing": { "linear": { "base": 2000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "builtin": { "name": "alt_bn128_pairing", "activate_at": "0x00", "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } }
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
}
}
}

View File

@@ -66,8 +66,47 @@
"0000000000000000000000000000000000000003": { "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": 2000000, "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "builtin": { "name": "alt_bn128_add", "activate_at": 2000000, "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "builtin": { "name": "alt_bn128_mul", "activate_at": 2000000, "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "builtin": { "name": "alt_bn128_pairing", "activate_at": 2000000, "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } }
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"2000000": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"2000000": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"2000000": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -76,9 +76,48 @@
"0000000000000000000000000000000000000003": { "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": "0xC3500", "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "builtin": { "name": "alt_bn128_add", "activate_at": "0xC3500", "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "builtin": { "name": "alt_bn128_mul", "activate_at": "0xC3500", "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "builtin": { "name": "alt_bn128_pairing", "activate_at": "0xC3500", "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } },
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0xC3500": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0xC3500": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0xC3500": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"bb94f0ceb32257275b2a7a9c094c13e469b4563e": {
"balance": "10000000000000000000000000"
},

View File

@@ -163,7 +163,11 @@
"eip658Transition": "0x42ae50",
"eip145Transition": "0x6f1580",
"eip1014Transition": "0x6f1580",
"eip1052Transition": "0x6f1580"
"eip1052Transition": "0x6f1580",
"eip1283Transition": "0x8a61c8",
"eip1706Transition": "0x8a61c8",
"eip1884Transition": "0x8a61c8",
"eip2028Transition": "0x8a61c8"
},
"genesis": {
"seal": {
@@ -181,9 +185,9 @@
"stateRoot": "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544"
},
"hardcodedSync": {
"header": "f90212a0113ba3b1153987fc483b01ccfe9ecadbdc36a7b264be75d6486cb6b694cc38a1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479452bc44d5378309ee2abf1539bf71de1b7d7be3b5a0d91db5900e312a1ba8d39505406a95dc0ea20393b723c4bf488ade4e3c4ee4c3a05e63ab076852043b1c2fe010e2f14ab13dcc8e1c546ac497a24ce88c4abf3056a0b72e4a776f895459b6bf0937040990d868b1f45889aeaa26684e07472263fc31b90100b00200000063664554889124822ce2001022840543085d5810042382888542ca3816801780384384cd6851081cdc4d4b2b205a814b049198110a6869d60f4009a79c3854c9000581044889080000611c09142200106552000044027024004038092102814ed6c48040a8715851088a20108e80165f8c0c514019037a0000121304b2343416800b029000024404248238a06818414cb8690244879491855405026bc8250220520992c2380099d10024411c6048424083d1307822442d8444700405147883c4c041300aaa2408bb61084012983825a22830040a180106b5e27182088060b111515832902903a8f1d432a48004d0250437106a503491000048a91587067a897789f4d78371d801837a309c8379ffd7845c9d879e9150505945206e616e6f706f6f6c2e6f7267a0db22736cb3f06f9c86804902731fa6841eaaa1cd6326ea2a30e9c304d48bdd04880323b06837344cb8",
"totalDifficulty": "9633968582330911261986",
"CHTs": [
"header": "f90215a0ec6330e9082f796d1d40cd146f1c504efc5823b486633f81a9f8ee31e799d41aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794ea674fdde714fd979de3edf0f56aa9716b898ec8a0d815854242c0f817a92beff41d66fc19dbfb2e4769762da7a2d4e49a9cf831c2a0e7e0ffc7d9a8ab82a7713cbf850628bf9a5227d80b0fe75d10b682be74bd90b9a0933423cb40b87bbcc53383c7d0a24d2ce5e8de99f2ba9213e51b4bb86b2fbb27b901008a0200250d21200aa00806e32495058b8880962440b0005dc4900000fc63451012c084c8c6224a0234ded20e96099533b08856aa0288a3bd00666137612c5680400000c4ec3ec5118ca2fa5c40804026c782e0188e4602502500c34460101adb47400d1b52c6884995204ac402d0bc10df7c1929827a9880b4a4051190406049368a1387c24c840a90b6c2b4e48e003e28459dc479c00042184824b2b8780308f3a660d05438a115a68804a16b209101020c0d9046812b61bc8004871b04402b1d904406114120beb0ea108a1cafe6983d9010c984882d2424301200000a78e0b03074ead02004044702412122423cbd2c5a4020ca9ca041998158050838033d8708cce2eaf2fd8b838640018397cc4d83979c13845db0992894505059452d65746865726d696e652d6575312d32a033a7c1a79360234b45773d79bb2d017ccf33414e59502691c87fea0a3ec26163880e5c7838013df6da",
"totalDifficulty": "12517645144159165893352",
"CHTs": [
"0x0eb474b7721727204978e92e27d31cddff56471911e424a4c8271c35f9c982cc",
"0xe10e94515fb5ffb7ffa9bf50db4a959b3f50c2ff75e0b8bd5f5e038749e52a11",
"0x816e7463af7b5d2fcb804ba55f09e8452182b0ba6c995a34e144245d76333d55",
@@ -3826,7 +3830,660 @@
"0x64b862e2d5a6c24d569f3352b8524ebfecfd5a3205a3200ec78df72d79a66838",
"0x6da8edf169a9c78307258a723c1ac1d96db20a7131018efad16f0606683c0f07",
"0xbae1427beab8c3e71cea57e5f9cdd55bc278c6d6073ae2628f0d3efbf9894a42",
"0x389bbd1b3fa390e8d3339cf5b018ec64d9cfc02bbcb801acad0857fe377ed83b"
"0x389bbd1b3fa390e8d3339cf5b018ec64d9cfc02bbcb801acad0857fe377ed83b",
"0x819c3a7f682db122c56c004c1128a9e219f13052c9b78e59e838ca850e7ff191",
"0xaa860c92d60059cc76b9c07d9b942e132b72940f09952a6ea84e03e0d481a409",
"0x3a1ed0df289c45f80aca59d16f9a8fc2363faa591ff2259767965138155057f7",
"0xebd67ae495f5d5f4b2d36676bd9e4619043dc83e00766b92eb0ac9ecc46cb9ba",
"0x2ff9b30bfee54deed34ac25e2c7e1d7825ce27d270b27ac8350f33e0021a894b",
"0x5344883f5098af546dfeed7e76dae5597b6a2eade7eba066c1f3fd2ca37b5a9c",
"0xd8220eed4c1e6c3fc9edf342c7691e0b7a09b1bc93ca8ee101f549d1c416dd13",
"0x89122f929f806e2f345539d74a3b67a59976a996427a301f608f67e9067d337a",
"0xbb288743f3da50ba5ba8c3493e267c30b83c67b77a22df96fb194fbe3d6fbdcf",
"0x1f4d12a9c756fd7a8e6a35df39a35888a47fea0f4191ffb303503c1c007f0959",
"0xf4a47acf8c2ecdf67bfbb0fa49b02a372e16ea554d7911eba4527647564b773a",
"0xc4ea1bb4b007889b8a81b306367ef03d2213a17e44ca13dd0d30f98e0327644a",
"0x1da665d430e25a551e5a2cc6b09942c906559337df136af4b81934a14b44f2fb",
"0x429c1fac7e8ae535baf1024b797708ab758420bdf6dc73331f2c48bb27edc2e2",
"0x3cb6d3d2836e4132b090dc084df9347f6cea34d23b3252301b65d2ae125c057a",
"0x82aa375fa96569741873b0fbe883f5901dfc2bb80dc9cf8c77622fe57ae7922c",
"0x44ecf8444c6f4cf718a9d785b74ee71d483c02b8a4499065d4822d4c4b7dd098",
"0x35879d2288d42165f3329be77fc7125ef63947d99647022cf85d9d78bf5c3376",
"0x5119fb54e3eec69ddb94091f3f446e3dccb7bb91d11345f4895734765ce74740",
"0xcac39a05efa882556d8f2afc987563d61e1728dc00365c2b19182bfea7e9e1f4",
"0x3a5bac1d3d0751d1101245c4fc5594ddf6b2b87e1ca2afe97e3b94659f2d6a6c",
"0x433bfa0e7110d38ac86b893e892f3ba7f5acedccc5482a34b6045fcabeb27a75",
"0x4f25ccd53e8bd308c7aac31f47ca3b0efc803ec7787904d41e4f40ff1a7c9936",
"0xe290ba09a6f6b5a975f2a0b87717d83c64128af3d84ee5a8e3e6b73dc963bfdc",
"0x7a4d734fe57c4ae23fc10f17863eaf0fd35b71f7bd1f03196c4466028b143d0d",
"0x191c097cb3f00ed9f5f8b8e6cee02f8e8a11c4500f92ec2f99fa2140173f6e07",
"0x7f21cd1e87804e63c0973dd9f66e792181aedc5d8cd931eaa1d80d14880f8dce",
"0x4ae1193f849d7833b9efb7c615dc7e88026a3f3d01a72aecaa040b4754eb6c5d",
"0x84e7bd0b8f59390667f6e211ea89a17a13279190de24a33b744f71149eff9165",
"0x5765adf9a49a7594f0e9ed443858f3a822b293cf8bfdae93f36739e1989b1961",
"0x80abd196d81322281597ed14ed996987e15bafcb372c5b386a28e5df8cee57fa",
"0x24e9ac57c579c3edb8b3d40231436c8a5a4316fa73810855f5cf4a89b858c563",
"0x3378c60cb4879b9d4205db9b4cafdba13e9923993dc5e8b155d909ba2bd0b270",
"0x0e4e9289f83c3a8bcc6d6a6d7645ca919bee8c278e3776e2085b4fc347627934",
"0x2879e00c5e77faef512162ec3b28c132cda5377f72fdec476d0f09be9d002e42",
"0x8e0de62a93882ddab17038a7250734c354340e976dd643f609fd497381a3562b",
"0x8730ceb5206279126dbebf0676f922f12b5ecd13be08bf301d7d652473f79001",
"0x0df58042003ef56cd28013d9794180ad11cfb28485970bfd79f62e1893f39dfd",
"0xbf555dc1708cbeb96069194d2d2cb75208ef2cc73fcac3b4f35abae97dfc26ad",
"0xa38a19e71f0b7176b3428cd3e635405fb1df56ce3ab60f711521b1c6dd5921ef",
"0x7748a206bb39f27841e3fd6caec4c00a68ed50ca1e474cf8a943e99a21013742",
"0xb1e82160b63784d3e9b434033c8b79c2f9f8bd713e392581fa7db2290512a437",
"0x0569198adc593a471ea4fba27d0aa659361395b18185de08442aba1128b321b3",
"0x4821034a9f0e2d3badf586be65a04fdbd035c960265d0f2bd07cc5403e1ec002",
"0xfc3b5dfbb770fba26e68a2cf15ab6d9fd0cbc841c8b7e4cb67f975f0d1e9a456",
"0xa85944d5b68b690c8eae612b09e71e422f96234bfc55860159e99371b17db96a",
"0x704ddeb5089de9f58c7677150ca4dc64b9f8eaeb8d1e24dcafaad48ec910dc7e",
"0x223938a7097dddac139a909c0c33880b8da9dc45c86e1493d21909f809531132",
"0xa07403c373e4edbdc13e207241577de01d2cc9baec6529ca28afcdef27ac04d4",
"0x385fcf679306dad9d1d2323caca5d17aa3197316bc4ae3dbe126a7f687280e13",
"0x81c27cce7a06b71cfe276b0440865cf2c0f444bbd6904bc30f2e2380074d1020",
"0x2fbae35e1c82c0d8afda61f1a0e95dd5ca47fd603450a7f2fa4fa5bcd73ac5db",
"0xea14be904f027e364092837e583dc19500addf6e5ecb59af1dab4cd0a132a04b",
"0x409f1a6a99ff08ac262addb8ffaf3fb3d08db086716c92bbccbc2b8c738b8866",
"0xfcd3cf7e04c6eabe6c648368cff1ef62ffff8fd5f3279176781d2238db715f04",
"0x5f38c3238f5b52cfa9f45249651e468a53a2b62f1b62a5c543bd663dbae07204",
"0x265a6954be72496fec70afabb4224f7ce4258caeeebfc4c6d27550e17cce58b9",
"0x58b2fae8d925846b08310b557ca5b7262a9ee1f3b729863e699fbfa91ccb9ef0",
"0xbbb46cd133cbbeea781699fe620831b93db03bc3f7d77da64c0367fe5d8170a2",
"0x9b57cf784efd6d4d484486ed7ac6a7093fe0fe087931eca10e9f7a0084c4fbbb",
"0x1ef9d5604fbb21e365d259c10b0b24070a5d5ba4dda6ab44f37337d62c4a84e4",
"0x2502589834ad081fd22d5df57be4047001ac7df36ebc5733bca560ac5e463b02",
"0x425cac90caa07eed1eaa6c020bd2d7141601b5d007fbd5905d455fa6e00cf804",
"0x65d3376222597121fbf6fa541998a61605f8c344bb68b646c32a5d10a215f955",
"0x087c94ab1aebbf52e158c0caf0ffb1ccdc179b3d3b9ce136653d6e72a918e96a",
"0x5524392fb09e03a0bd8440d8e9f038a82954f95332bf4beb8f8e4d5be6deb904",
"0x134ac78af0626fa56dd62f27ea658570652e5fc3c627c57d737d178a31688f7d",
"0xf2e565457b1d938a18a8fe1c3732d70386f9344be91380d8cae740ffccdac58a",
"0xc203bc327d1085ba09cafbe5645657d73e64450ed314dac5c84e7f356cae01de",
"0x9c847099e82e8b2c1be8a7cf440ecb85c8cc20111931c0bedbb7ce778c7404e0",
"0xc22206c94e653a7439faf69cba997d9feb1c5b34829bf00a4c85d0adfe79d911",
"0xce0d9b43dce7b340e847e7340aa7d58c03b778a57e493a8f8dc9d63ccb06b6a9",
"0x20f416746af1522273b7119f31000c4848ee66597d5945492053cbcce359c6ff",
"0x9f789bec24566fc2ee6179b336be2b08e67fa39a367787063f07b7424f8f77f5",
"0xdaff9cecfb864d02ea03a7fc76d24760303c1d28a93613bfd659dea6997d8cdc",
"0x522c6b0c2334ddeb39a0fa8092851535e6980e3bfb1ceaccf86247ca4209c392",
"0x35e1440e9e6851ec26dd112b07761023637bdeb54c9a4045475b8616eac8f2c7",
"0x160df7b24ed8a0d4e2d6556add5318aed08656dc2f218b75badfa7dcd2d6085d",
"0x1219ccc41d673e6e1d8eb1e2a1edf6360318a611bf5917f40394216c3398af30",
"0x5237d29b94e6427a41e552dfa0db1281381a6f7f5eca72134e1638a8a7acb790",
"0x596d64fb8478cf32fd3d72d70c4ddc8a348b4d2aaefabeffc906a8ce656884a5",
"0x6cd01fc463582e85e433263128bbcb75d8cea197d650034bdf0ca0fba50abf92",
"0xe879011882783b1f085cb14abe05fa2fb008f3f25d303c96532c7b63091fcd50",
"0xad0e0237bfc7ca75073ab1328770fe3fa2099c7aad98d659747446efc271860a",
"0x1ef22d01e144466d68c09600e54425756024d95f323064a7bace055678533223",
"0xeb4f046e6c9eafb07c8615513b096dac0c30a7a9983a9b9d282ced0502baefac",
"0xa5ec8188ed11607e0c166d809bf6f4a624b63a04cdde6c9b38ca991cc363f07d",
"0x757cbd504e40ed1fb80967cbfbf0d73d649f381e07d3d774f6fb6a958872e13c",
"0xa9d67e8749177c72fef84684a3ddf25f280e624fce571e202eac7f4713675f07",
"0x05fffd3d981ec6411342264732be62a03ced7c7fbd2ccaae53fee75c81017316",
"0x673bf4e2016572077879057f6d122ad7e29da0a17c62a97679dfc6913820d42b",
"0x3f3e2d80251eb582daf8057af384c4e4a419873e1fa8b9ec32a6ed7054de1efa",
"0x860291469fec3ecb7c78b2a3c291722f43aaf747fbf3bd88cc4061083516b64a",
"0x3c30c64ffb77b39132c64e8856024abf0736cd2603da0091f52f1e81983e67ba",
"0xae8e21ce50f85fc0ea64696b973f53ae1cd877d64e30f13904d15b34d4bac6c5",
"0xb4ca3d97e33e9526ad1c7796a7f9efa5858ebec2605d1367862c880f78c86272",
"0x6c20893dcf39f711700bf6be5e360ef38102a7f7129ed83e24c5fc24f42584c9",
"0xd520870cbe314b46c1b7edc21399986870303d38cde9cbce3f4e25807124b1fe",
"0x9a24dc78fdfaa16af729b4b27c324a95068b7fd09eaecfa6564c7a815b8e9084",
"0x9b8c6c28860af11376931e082ad7bf12b0cb75f2582c8284c6e587ef2cdb8842",
"0x656f2096414bd7ad74c7abc1cd8222c61697b15ad68d7a5e76c1dc41086129c4",
"0x95bc4027611b90d1fb1ca0eed5bd326464cd1e4de67ff8640683496785c38c04",
"0x20e3c8545a8c05022d3b83a1bcc94db7239a6f509f13053d19b8ff7db126d093",
"0x767a60be20b494d792b1d4ea6fbc35f4affa633841f7f07f6c95b8b14ddad8c9",
"0x521dbc01a89820776a38d4989b6ba794d7c0251ad939dd0caff9a7b99579d0ee",
"0x814c1693d5e763b3e91b49ab8c192dfac0848993839e2cafab76e5cab13c6f7b",
"0x6626910d3525d978e25f14a92e3e2795dcd2f7844dcaae556127716ecbdbf747",
"0x685257b9002ba7808aed5b69dced6fcf1eb9b75e1e3646541aafe90caf3ce1b5",
"0xaa3d255fbf57445aca9fb45babd6fb58c89a95c6625f6b80601bb656a5eab344",
"0x2795d9516f8f2f15da8904741d24cc0675803c9a7ddb342fc66caa7d5050bca9",
"0x283f89476887c625c534bd277fcf5523df8ded877479517728358b71efaacdf2",
"0xc2044a35800edb0b6848341004928307ed023660fd22d7eaad2422146cef294f",
"0x01d35757346541a85a4b86f41d1b5b21701c1efce3f287a034497942483f52db",
"0x43d7f8c173717cfdbb3cbf38cc8cdda9c6ea8f05bfd435efe1f74144c9c84f24",
"0x6463d12f4bd83d544a14948fdce6c7e9e0da0e9812bedfb314b6e91157c0c682",
"0xa7cc32d879feab7508b84fa364fadc0af5a7cb1164b61d7d6cc5d7d1a76c32eb",
"0x37cd4953d262b095fa8a5a0708224d006ed9ef93d1ee5edeb285d410c5d86a8a",
"0xe896567b6be24f3ff1d962e05015f574443ac86c58b07bb943d12255cd94ed11",
"0x51d07ecc06ee4be7bc9700631ae07818756aca34d1eb2ac6eae7112ea9e9df41",
"0x72ba4e79031a1f2616b8e788fa578b9ea830e08823467fc875dd603badf6b79b",
"0xe06f71635f9df9bcecbd6553ab32f1af94275d8ccd59d1969c248822e3b6feb2",
"0x0484a049e43ac9f424ee9b2dfbd4c5932cafca539c1bec00d32d90561746e12e",
"0xe03a17de161d63503962f3d5cfaf28cba22ed622cb88547c8224509e77e2bfea",
"0x203acc2c14b68b80292f381fd440da199c9f8f0e043c42e0b0adc67be71bb807",
"0xba3d7f8a15b76afa8a834b44a922332713014a5d5ec3e52f729007c6717d5324",
"0x01e4a4e25bbfad7dbb0a23adf6fc873c40561319ba7bfbffa3c7a379606433cc",
"0x6252660ed44dc18d448fc1cf49bbae98c4c31817b6e372c71d45832556261a1c",
"0x1442a2a2eb665994c951d8134726c91989f7fd13145ca146de4e87a203ed1c31",
"0x017e10ab064887aaf7354bf1108d6946d31b435838a56d5c43bd70d3b5fe7c6e",
"0xc9f0213c74e6f3ee3bf7505c66620b61b147597ae8a4c3f0324463cb57d07f78",
"0x321a1e72fb858b8df990639bb7b05e10b7c094772af92fea9a8882b84a91d33e",
"0xcd57ed7635c2c59e8d2fa2ff04afc2c851d1a792fcf2e0192769404dd96b3be5",
"0xaf89e85dabaa1fd91efc15f0a60e2fb10be92c6ab2d726d6f7afc8ab94d5639f",
"0xf8425ba5813b811a587ad8b9fffa64adc22ad5660ff77a94ecaf479dadc7deff",
"0x9d602387122f2c064924d32fa3a62ed2e39dbdeb570b55af7a6b138534ace4d1",
"0x2569b3f2c09c18ec14468c4615355afd9fcadf2bb6c9d527e4a3457a068bb808",
"0x96a695ce507be20ae2636449116850e8cf86485eb756bca499aca80790c3dd3a",
"0xbb91a27d4a244d199c1b9dd22d0a6e687fdd340731c13c7016b7009ac49771fb",
"0x468a1b2fd3c8835f1f1b7e16f35a5a401cd4e7e0e50920198cfd3f27b5971f7e",
"0xce2aea8f42295d49480f6ccdb2f0c2d33af2b44f1f3b0b4eb45e3975397ee264",
"0x786c6d63ef22e083b0aa3c1cd2de64c238efa8963532e84471ca40a1fb210f4c",
"0x86f90dae63767ef7819d0c779ac362b2a23e8c457bb7f5c901e89dcab8a5ea14",
"0xf689fdf55a5d1e1474b9dcb1b591f14448cd017d2d708bc522157688a728cc8b",
"0xc4be4c521cc105651c4a2a0449d206c2d7052123d06bb02ba3afc1b22d802177",
"0x64debdb7293aaac3e610bececfcd7b53e103c27b03173f0cfa401db4d385023f",
"0x3d4b4017e6ffe74f2a96cf8cba7b21edd627ba5105bb87e79cb1ea88b3657366",
"0x74161c9fd283d80490b55731ddec4ebf2a1e328e518ac17b2526bb93d069ecdd",
"0x89f522f48230fcbe9fe87ffff8201ce5fd853bf7ff6536d3299368151b833871",
"0x090d72bee8471c51275662ac2fbe285e5a52552348af1eca33e657fac448db8c",
"0x2d76427152f13ec917a6e28430ad5f0f0e69b5abba49ef432a90c4fc2a875894",
"0xd490618c0aa63e1e963e457c6be096bb5242b10765b4797df232def9d0269aba",
"0x980445545153a80c8aa343a8874a80fe7fbb7beac68e58d5d90c4c5fa73d7e9d",
"0x0eeb2df77b486bf20203c9e80981787ae439fc38f39c583ffef93ea0aad82358",
"0xd0897e799d1152432c2d9cbfdbf72d2e522af23766e7ff93d51acd52ed869683",
"0xe740acfe918c168daf28f9e491cf94b3b168de4e807a80b5f1b097beff45f206",
"0x125580c9d014b8cb50a56f8a14f10ba4360fe448f18aa86829bc7f7e1cccbb77",
"0x7c9af1244e12d298778b3320718f096faabed0006acabdb0289bcb7b5c2bf8c1",
"0x76ac2ad7e52c2a1e7b23f03f21d607bb634a4290b800fe479c6c134c87d41703",
"0xdfb4b41974d53773300949ee46ce3edd2b5ea0f8be55d87bf9b2d1ba21dc30e7",
"0xde87fe285a4fb2dfe40dd79462488808c6efc4ca3cf26de46f3ac56c4fcfc0ec",
"0x72ddcbe95df0949ae31eb4ee5d532587ec1d30a358a3fa9588dc6749f3b0b673",
"0x4da323bf0509116d1dedd6ef0c486838a9c8fc7bf0d6f2899fa1c43c89791a5c",
"0x6ab3c6c40001407ecc8b5926692e6bda176b5d9685cbebf72a69a8bd01c8764c",
"0x85e1cd7421da9343f156f573c89d477f166cea452287d9cb8f19e71feb570cdf",
"0xa8f06a7f39e85e9e3c1abf454940c9d4a658f1d5df827935376f556b90670c53",
"0xa6ef83d45fe75050512a767f8d69b74a59a43b2d12a03204bea075839e9401c0",
"0x92d440c5683f941accc4b575e884bc402fedf6499b1a9f74e0500885eaf211e3",
"0xac5536524cc38b40c8f0b421af9eeaf9ed78be65bd1b180a469008d5b807cc1c",
"0x00bf19f0ca582188040b38756dc88388d1aca7cba42aa89e513628a433156b0c",
"0x220b5f691ad4fecf71e471a845862097fd754bd0ffaebc204c048aa48acb2bea",
"0xba7174d367fd0f9487aa9d1f2444a4fdf38f39d3686d7d41d18b0671653cfe6a",
"0x04e281d09ab1ff8fadd252a22c4682beafc436916ac90f81ef85d3c92fefe628",
"0x4aeb3ab7be3dd495dcdc78631a3cfece68ae9797bfbc4b5ac6ab13002d9fe6e0",
"0x0fd273deb137dcc98c8bc54f13098e355568bf56077a58f656e4c22e51ab0360",
"0x55438d435628bef382426565cad284695ebffa4ff7485e10c91c0988ba20ec25",
"0x049e4a80ef77096719ed90d324174d50a0f84cdc3da0c45d0b122a813028d2d5",
"0x200e2da004718c48d4850a0c5ea3fc9821f820af0cc24b733d80dab98d756ec0",
"0x9da660709c2b4ab2807df73bc4d11cd75a102ff5d47ded6781ad5a293ce22415",
"0xf29ee2bc658cac2d28a1e5809becab789b329938c3ce314bec172c6ae3861f4f",
"0xeca0f045b3777c894d3cc2be518cbb06b2f54c4c9d02374e6d27de0721c471f4",
"0x804b27ccfd7440ae1dd05edc6acc4194a288918958541de596530ca2b89b3b54",
"0xe0805890aed8a60e2e60d2bbf29a2d130c64ff69a82e3a78f63c9e483fee94d9",
"0xcdfde2f6274594a0a67a6d7b02dfa0fc735842c28b144a6859ef6eda842d6669",
"0x5e80068e6aa44fe7d9c810607d90e13bc364bdbf91255fa4675a7264bdc38998",
"0x622e0765bef88f51dd013b616f40fb80c6bbf6623fb226d3d811af52e4de7740",
"0x0ee735a5e83a5191c4e531c603179e90381eb43de0abb03e12e5f8d7b821031f",
"0x55eacedd69481b311baac1d17343a78a1587454e6acba2edbc560fc1c95ebc6d",
"0x2eda26ac17139e750560a6b705f60a4408487668df17fdfa29fd1f3d3fd76aac",
"0x18a465896c7cda9912dc2c7ba459224a924d0feca1d49825423277902b7a0094",
"0xf764b9bbab0bde6ce1cfbf84a8c280f1524f396aed6fb4569f59e2791afcf27f",
"0x7d7fbe746c72958cf2dc3d5b6a7f2b680c0e47247e9697a1135384486640a736",
"0xcc595d1e98d13809ed5a22277ec10f25f36f05ff7ef1aa91de45bdd471ce76ca",
"0xd9579a9c16117e08e441401696fe4b3687b40179cda267be384d044d27fea705",
"0x39c73747189563c6ee22de333270178803b17b5d1e300732143a3e553ddac6e0",
"0x52049d4f26ff9bcb9b4444e0a3d4551d2e68ba31787f1c69722754004e6c10c7",
"0xe15d9b70b804cac3efaf1eee6f980b146f2753cca6f60a338800fe67cbf47db6",
"0x150feb1be780bb1e166b4f7b54bd01434820fcb8e63244d259a56bed67eb1fb4",
"0x48441f61086ff68e3d7ea203193df77565ff8c846a5ef3aea5cdf52ead82c6b5",
"0x8fd3355dbe04679233da0c0aebf896128245349e8e3925e2f4b4e044ece35654",
"0x22395d1a8af82cc86af2697b45b86df13d5af07eb790a96624383d2d2cf35fbf",
"0x32c13c2498ca202482c0b2e7e5ed096bde4c36cdf15dbc0076042caea180d6ba",
"0xfb3fa42d8cca9e62d1226bce9a8a3d8e75cc461d2b34979751107ac656130a4f",
"0x2860141a7eb70cb951b3f45f13dd81c95ac8d86c97ee354e65c2ff31ad24f149",
"0x7c02d5bb3b990ac7d5c6a7f183fb4c4e3d2249605f6d963e12b6587e665bbad0",
"0x22a79a905b70c40eebf4aff3f9a595458e9e5a585ae7a18a32d99cb369cdda90",
"0x8e10f60b08c81d0ae43a1932f798e85bf0bac6d22ab3d399c22d1e3744134de7",
"0x03d6dda99b12d94960eeae1f67dd6ff8f41102ab00aa7b48055515262bcbcf01",
"0x2864090dfb4a667388f3c51dea1daac94245f2de71e804bd7e9f8c4a6206a827",
"0xf64e0a38264b190f611d8afe030e948064af722c1d85a16e3e20a5c4d6c9153a",
"0xb7706df2d787d33c13f2f100cdbbeab68dae726cd5a08a046d7fa8b34b029a23",
"0xf91f33d36525beb213fe0761808dc89921ed0d52c5214d704acbca639098622b",
"0xe1825f2cc40a1fefb24edbb3ee31c5118448abdd237a6e27f364623689a70a92",
"0x051450e257cd9e5d03081ab11de949a52b4391f7f7179fabe0e7f43e0cceded4",
"0xd09a4642c0fbbb0f29af7bf0ac06c080e468e2e287d1ef74e388163d5c0057dd",
"0xd7ff8cf1b7744f7c2d79255e5288e8a2c6b58ea7aac62894716149f42f3e020c",
"0xb108bbd52148c62ad106a9cd35aec9d8b111e094bbfcbb4d447745f8a54ae8fc",
"0xa4794deee36a670394a5ec4d908728a1796cea8c8564f61e41201a7ae985b0ab",
"0x4fa697253bab92379a876446a3af734dacb965722d568203a1194e078777c364",
"0x4222754bd0a480cd4e1bf0c9faa267d17a941496e557c0856d2ef9818f96bcfa",
"0x8ee7c73f3d4ba9c2764cc6e980f3b9a53fe7a1306c415c8fd8264a33dd5622f1",
"0x17f40c4b7109e2aec6c8c4eea793e196bc96c73f20c963a923fd311b23814590",
"0xc32018615cf1253161ea102dce96379f6fb9791e8008d75d86642f21bc555b3d",
"0xd38fa39699ea67d3c4892094309335ec3bfd0185790ad117d197866331a294cf",
"0xa770de6526cd0a07d0337cb18e371fa33a6ec0803203e54f1c93b276d1bd24ee",
"0x7377908db9acdbc040fd248b8ab85eefdf7edac2efa6ca90535d4241c2286d46",
"0xcb74aabcd157c732935f0d8b926ecedb3b643ca97ead5077301d2b4768324908",
"0x3885f8b2a341c91cf42d459a0f9e81bc11bea8da8e0080c884e357d79f0143a5",
"0x1c56ed46627a1c6b2495cd4d94473920b8a249c951b227e24b9bafaa00a3575c",
"0xc2e5a1d6afe982eaef9f35cfe30b4f80e224950c094d9ae39430476988199c98",
"0xd5c27345331cde1052278637de22a243e9c5022d4edc254cffb7c574615e661d",
"0xe89ad382c17daf957f02a2472fd509eefeed4a10317ca97085539839a80bc5f3",
"0x2bef80881328dbe76f8f87a6f7285209a1355e9400c31fe1e915d5a0323efec9",
"0x0a79f2fc887da96d5ea26722726d83506c1d5fcbcb50044ba6f74336d9ae8609",
"0x2d79e9b35b5bd7beb0bb392a4db71331c4bf41210c26e2a0f5e64c4de8d659f8",
"0x3a82b6fea11f99de12f1e39202c2fd69a21ea2fe5f4d1d62500ceee7de29c88f",
"0xeb1139baf2c45e867787be6df45acc8d21686cb21adb1f10866ebb1605741ade",
"0x691505332d0a4c6af51e0c49f11d578f834e961898279a21b680438b3dffd917",
"0x8cb46c9273d3ccecf1ddcd4cc86b9ae5f1e1bec57c15cd624853c2333aa7184a",
"0x06f1cb0b68758ada524d604ce8b6d5c273eaba7304d8650687869eb575799362",
"0xce7464c87dda228032c88dd3ed29b41524e847e31ebaa76b2248eee64ca41e70",
"0x64b6e5039609367f5c524c0d5266150515cad29a8a262c76614c5086c83f1bb8",
"0x76cbd65dfe8dd8eb21996529bfa0663bbcd851b675314ed4855689ed9f120939",
"0xea80a1c269e36cc9ef3aa3daa051a08e03deb23add31dd32cff7bbb86f53c8f3",
"0x575ed304982a8b6c44b3f6dbfad271ef13c13986776abfca33a9da2727f587c2",
"0x5a969beca5363e60be1c6ba433f6cc037806e1c617c78b9a3115d47d2e87865e",
"0x2b010bbdd97fbf30ff7b48263c8ef58690a2de5b4cf170829fd458d2309c7c09",
"0x7bbc16e0933d41a60d2fa96563ffe099fcbcb4427cfe884150f645f25af752b3",
"0xba7fabd6d879f55a747a3427b3b2c5e04917b0734d693f759c2ee5fe235c8e6b",
"0xa890505d5778b78e3dc6c9749e8c9c80e490aa84bf91a76f4fde2d39a8e68ad3",
"0x36e27f687d02db5cf074ec89896e557ccf240d6c0271b5858a6af8b2661104e6",
"0x6a18097d71c66f0564a0fd27b05346d2dc74ccbb1ae123ba575a2bde54f1e810",
"0xdf4b61a51fa7f576c212aa0ec1a93118668f8c5fae5e7a55a27d2d0033634734",
"0xb572f4dde7b9282f92de5efa836b9d8ba82476c229bc669eb1956e05a1a02923",
"0x616b7d8a8c29a6dea339ceb8241b86fead820cdbcee279f87680b9973c1ccf85",
"0x3c59231ae02993318e8244435bf7f51ad352ce971a2f174725f2c2456bf62812",
"0x66e778c1de1503722d7a610003596c092360261e4eff24c54f218baf5106a8b6",
"0x5b372b99a39105ab048a83fa36f2ee79de9c920addaaae0cfb5b569ed92d0fc7",
"0x1389b29e130b37d8aae7dd19b46f216c2ca8d8562c7e04be9113ace816b772eb",
"0xe947c173f63c2a4b5bc1d14617dff02d6221915debca30ce90af9c63123dccd7",
"0x18926071dedc42086bc9c90e9f3e80ea1ac09981677b7c8d75159a8b11043501",
"0xd196e45da07cd27ef03abb235166e4937b6027c0fd6de42ed71b5d9ec748767c",
"0x81440dee93f1b7ca2d634549e1f21b834e417df97338c7de56e2d630f15e662c",
"0x228a10cf2a02f134998dab3ac59a71a05681640f115cfea4dccc67baedf4f746",
"0x5ab8b611cb2eef244571059e61540fd338bdb1ee90e7ed7e5769e67f5eb2c793",
"0x3f044afb403947868f4d2deb1dce168dc9332451c1dd1bab4e94e4ff6de5bba7",
"0x6212ebee274a505464940ca808dc61d1f1a2df76820ce3a8cb9c26bfd49b67e2",
"0x6a89fdde963cc5b696beb902d174b99c0cf8ee2e2208cd8f1f25965fc2d7368c",
"0xbc5d4f775e4925e2201214b1e64c7f5080899125a01961b1e5a3d29aa6158d26",
"0x844b1f9e0da0aa6dea81cada5255248b14cc4655d739377feab11d99b77f48ca",
"0x8a972d2e563d3baa95cac6c73b23bb04e57e7db2eb27b2c6bd78f0f2b2285a17",
"0xd25370dc166a5a4ec801c652b9eb3b7f17c9c76f898c6da338dc686ea65fc108",
"0xb1d6e05e234624e144fd8db5189ed47da5befc84581fcee92176951aa7a6adc7",
"0xbae505f675148669eb640bb1183d5235260780e57f62398b244a289f6e920593",
"0xfb0cdb77ad3ad6dc5feab63979743a18d72aa7715f9e3518618be5de6c724d5c",
"0x78964f3f2e28bdc1d9f6bdd9c424cc8b211820f23bc59d61a00a4f5089eb8553",
"0x81985ebb740817d81784174ae06e160d3d37c1a1fd4b79b665fba428e6adf199",
"0xdfe038aa48f96bd190c570b92bb9771b49556a8e618bd17a3183d594cb303297",
"0x4c2866dccd714ca6e233da2349b91e7fea7dfd0055675235788e1bcc012fd297",
"0x4d9e866bf6bf2545608734b914a55f247b9acd17455d1262f6a352cc46499ef7",
"0x53be82bf17d1dc0d3d5e50be3a04fcf2f5191cd3547ca432a7814c038f709a82",
"0x1d5cda51a57e81d33e3caae568b083bb26f71fdb23fb68e1f7ceb4444514c13c",
"0x35633bad7488a5c222d4fcc3111768fb7c126065ad9b32c49dac3a44353539ae",
"0x857564f5cc2b7385db6cfb22e41a30047dfbbb333f5e2984bc5826805653e364",
"0x3346a3292d6d1f716a13fad02af61b18f6993d277cd891a162fb6df932333906",
"0x267114f270cb5c8d7be4016d4ac1e6950cfef777e36e746829963c9c08fa604d",
"0x9b133dba17f550b709ec7891bec8ddaa99a909482ff50dd1ab0f473a64ccbec0",
"0xbb9d1242e6dca8ac62b9cf77f5fea02bf6ca33cd8fc60b75370eca5050e7e3a8",
"0x4b03fff35d5eb647982f79cc8c6fdd3514a8b2d95d45af83a06352a9f857b770",
"0x1251e1e7d8ba37f5ed242c045d14bcee63d044bcbeb300d2036cb746675777c4",
"0x3ea4f140b4dc19071603745962ab84c2751c9fa7add74f165cc4955bd0a23384",
"0xdce6b80eb188a9e240c73c86c13554c89176a0a3a322538480683a9f1187e518",
"0xf67d61c218998a24048c4dd68f903190a0072c80066b53e34df7e3a837e18339",
"0x9f886a4835f3f8fc010ad96e3e2a3004647c0f3c744d98d527980383975dc6f3",
"0x8a7920678b5f2687620340ac774f00239e48bfe1cf443c795d6cf25fd885c98e",
"0x16dfb4a0448f4b05c18115f6e2c128be6d6596b338723c912f22cd80448de1d8",
"0x497588ed59d0e9b9733bb7caa08fc36deeaae3396bd3922272d69f4861f06420",
"0xd96c89c40ba3daeb23f18a83471be008dbf8cc75668a72bcf8d02cefa1efee7e",
"0xee4e9ee2ea8a057649b9105c68792f2479b7eca57276211d70da3097a9fe4904",
"0xfd789aa5a980fee8a509079acc5ad340c98faeaeb31a1774683b93b1753289fb",
"0xf9e19259a14a532c93e935d252145d41988c16faffa4a185df11ed5f23715d20",
"0xbb0b8e1c03cac49cf3b45bc031a229334f9f25aeb59d410a12fc17c7e78f759a",
"0x5993b045dcbc40baf27d780c48b881c864f9aa21a9d59b0d4ff0377aa64e7c7a",
"0x726dd11a76be09acae4dbe103f0ba092d654206dee07511d6ac97c673437d26f",
"0xb43c5f0bbd52398157dd6233a5d8a03c931166150df21e8643f02b6c767239c4",
"0xcad3878512998b146cb2c6eb61efe07206c09677687df4198d9174c66e3ef3c7",
"0xf8a7872ede6770b0f48c924888c3b4d1b410639ddf98944561f837acee7c21fa",
"0xb31f007ab3deec8e37f7b70d4c5102a06eb9b37abf384ba3da0d7f32d29d320e",
"0xde77b2e81f239a80caeb44731b1f272a10528909f7ef6e342e36dc29edf7373e",
"0xa9818a101b730940a6b7698f76d6c08ef7720b12fd267825202355c3edeccc72",
"0x962cdb425d23201004d3f39a045e10aa39994fb8425aca3a2298b4ef1c9cd6ae",
"0x3c2a14b29d91c93978fd5a178adf3cb1aa5d60c8eb0b60d4c05f3f32b79ea42d",
"0x86d861026e8918c570c3190e57244aa89be34d57aa0c0d4f65f98abbb547b255",
"0x91e3b5fdda9b9087f6d267741a383c6c9a566851e03501d9090228046d793a32",
"0xb8e4f9fa0c7ddaec74a87492af4679aec824a08fc3fb267dc6f41b764145040e",
"0x7da2db73f48b0ec869db149bdb9ee85f50587720cb0fd6a765a23586f47e61d0",
"0x04b81ae4616337f5a09700eafec29ec84af8b0babd528913c8155ae3a47545e2",
"0xd2ca213e6a01e43f2eaab755003f25512fde5c1fc9d809c0b6ec437b194d5899",
"0xaced62e93320daedde74a5aa1f72739698c286f9ef4848b7be0682d99fcdd385",
"0x4e2f1707f429a5be0f52b39936d90bd3faa1693a4c18f0926cc300e2c2fdf8f4",
"0xc840e1e29894fb3ff6fe5572075b0a1e98e33b251fd8dd5996cbccf041a48b4e",
"0xe3d69480c26d810001a144e37f251e3ac4bbbc7558a0550a4ed8f8d5a06f09f7",
"0x7bf69d3d3bc804cc504ef7d37fde00fd3649dcc2853541507585e40b67bead0b",
"0xafe6cfb04d00956f24e4ebc3e9e0a23e55b044bde113654a5787a8c05add0a4b",
"0x3d050577e4169f4205e19f28f309142665acfd296c2ab5c234b6b5acabab07be",
"0x2c74c7ab90ae5058daed0c9551f0c9a52a9a5b10871fb0f71733fa6c39969882",
"0xf3d37db16c16218aa47b1ece8b7d178c42f1d06ec0141cfa0e5ffca27b21969c",
"0x5894c5aea4a461941788104ba38e9d8d39718ec8e4948c2675d83195584d1df5",
"0x564b9061ef80ed588a658fb138240e5c6356a5e1bd557ea06f85b4507dc4b73a",
"0x6a802d7836b1db57aa5b6c68b43fc072941e2c8090e73e26de86a0956eda3876",
"0x05fd4b6d5633a83e48fc91638d3f39cc6df164dc4187c78c19f4bbe78dcd12ee",
"0x481d0df4eef16c19e38d8a08889da1c2279d56ad2b6c6961737585686ff42280",
"0x0faa8363d77063a3ec76a6ec5786e9d64e0d028912c3ba5272c06cbf7c1d7c52",
"0x2177ca5c3420989d7493b28534489f2269f28e97ba167772bf5d17e9f9efd274",
"0x0694512d03ba47a5f36d024abed8ce1d15741f56c32baf7deb5b9a5e3afe66c5",
"0x38364d47d110cc930dd32fdc5cb7aa4e96b88e783b7060d2302c8235da7b4e8b",
"0x7f63e39e98887db4dfdda2cdb29ef716425f30480371beea60f2f70a8df7263b",
"0x4069d32514b8216a07b21c23b75cb63f12967dabec053304c990ebc8de9cdb99",
"0x954da7bca7ec16e62189cc6ae2878dc347d1677895cd978f2dfaf31593cd6bce",
"0xe9eeb5d86aec47d3f43f2b899fdad816b0c30e3040cfad14fd3e821cc6962ecd",
"0xae81c8ca19bf6b92752fcfdce9441f7c5b540d911a5e4315e561e9eb22746a4a",
"0xc84bf9c8ea619e0658ff70101fe588dc385e1e997349dbe112d66968ed672113",
"0xb113ba865fbc89fd495934f9139731222940ef72804eaea010f12ee167406fa6",
"0xf70a9e70e90a08c8fd629ab4fe0d1497896ab2d5e00852d18fe672346e337155",
"0xc1e671394b86e70459a39449e8ae9cd0b3e05602639e256a9da4cc3c047f6cf7",
"0x577bbcb4066d1aad7cbb75b5ce0f8f1bd7885511b1a7652b8f8600492656d673",
"0xa836b6615e1a4b6e306399e9da4d2c661985446822c8c05939da1a35414cd328",
"0x7042af635abf9efb3d9f5d6a2d25e638b6e9b8c6ad61591a7f88cedd4b0667aa",
"0xffa0e1f57683d082733344e57ef4aa267dac50dc6d72e8f36125e7ba892d19bb",
"0x2ac6846383bb7ca0ec56883b797c379336d64d9753a16ce48ad14d4086da2388",
"0x21499ae4629bccd17845c58f7fd13a8a72ece3557f4c11cc68af46426d3c3057",
"0x7bbb60b32ca0ec25a830e77790f73d11ac92929d2c9dc8eb70b8be026c7a7489",
"0xbfbd58d0c7f635ecbef3eb27d114068f953c2ef4ba9407a33c5516156d622e77",
"0x08643068ca01cdad8fc46e5190a9c90423e1f95cb4960684977c6c7980e6c0ea",
"0xea194e1527fb2202da5fbac43239179f2cfca95206c34c56042f69ba76ef3cca",
"0xe7e1206b62032646bb310e8b11338d0c94fef89151731fa701767d22105570c4",
"0x222084eaaff69aa8c1addb139d566e71d95dabe7fbf1cfcfb7d604eb3ab133a9",
"0x615c903ae923f5f8769befa3d9850d53b36ee3b47f2f136545efdace34e72de8",
"0x20f73e2ac4f18b1664a1028184367aa3d7b4b6d16492e199991cb0cc334908ff",
"0xe6fba0dd6fca5aca6cdc8b64f1509e6bb2b7819906cae07649bc311cec2829b4",
"0x4d73a9c7d379fd300f03be9e842ceec41a4c00ff35610756e5754f33929e8719",
"0x875ce56746e3303d28b7b6345d21dcc26412625d5972944a9a6039cde722260c",
"0x8fbf9148420b9c2eebc075d757ffbcaf0ee18373f1827b6b7c1051abe1b47bc7",
"0x44f7288451825d7b7bd4e4c8f82d9e017844ab9c08b77b4cbcd01fa39a755420",
"0xc150ccccd85a88fbe1795603c84193173c6de5814952763be4915061bf9490ea",
"0x936a08521d40e87784ccfe3bd50bf5f0ce28e8ddba7e29b4ed4139ae5030ace1",
"0x023d64dab9457ad253e42455b83a48217bf31b6779365694ced4640b640327e6",
"0x89a921ab2c309f0b86689c3d8f1eb6e9daa745c83b0d1a04cbc5331f9f96238a",
"0xb6f2020f682f34cd41dd273f19e6449c6b2b0b35d3bd7bee96363f97f028c27f",
"0xe61f2638f6cdc94607c9e978d6cfdc936a126cbbec0a97e27ed6733683b0794d",
"0xb136303b946b359cdd76c1a588046757221bcbdef6b7c4c070d9603bbe575b29",
"0xabe07f82dab2b17a4990f425a0daa1b78fd22ad33e68c499a7fd418c5f09d6f0",
"0xaeacb7ce46ffc86a5e08d6a71b7304f8f7f5fd794ceb0710888bf1825e7b0620",
"0x5879c7fe56421aa2a41731a4c6aeffdfe690b27c1468f5467ca03f69e7c74149",
"0x8a962ce351c06748908f8565ce0aca5b874c2ff18e99611cf12843a1bf93dbc0",
"0xa7557ac54d37f207d069407ebc80c1bb84a85744763e585c15199ea0ca906b47",
"0x26b637ab94949a1e7243736fff67435d28513b978a9e2173d184a64659f3b225",
"0xb80d141f221fe90d9aa80875c1c7d4f82d16a8b170073c08248878aee057c78d",
"0x1e4e58da25f9c1feddecbb771f6089dabe79079c9c8c98d78f8854b004f0b5c6",
"0xdffa5016e82a215af34cb2d7b54535e32c8e0797dafd1ad0b829ca434ddb7596",
"0xb74197a700d2ac5ac4105291ffe1567d146b3eec5447af86701b1599e42637af",
"0x4104494199a7fae34759bca78e8490f41dfc1eec726f33555a2bf87b3f923a12",
"0x0100ddc8b90291faf2af0a2b36975b7c7e247dc65414ad429f4b1d68a2f2ab75",
"0xe4740fc1ca3cbd20871da439f3af9e7a0aa94ab9e1eed2fb04931272f5546c3b",
"0x69eb680f378798e9dd194e3b985078b71d18ed637199cf854cb8116c5d2ebf56",
"0x8828999c917e550baaa229b3157a7914d4eca4903d96f2778702a7ac578bf897",
"0x3db2bba067a16d29a3ee7c68c9b5ac825f2814fb9b8490a5db3c1bedaafa33a4",
"0x079ebcfdae5f5457bc5cd686d65af96d8c15806ef4152eea5f4681ee472cc303",
"0xd2609a6ffbadd712bca9ea357311b30f79334667973c024e03670e26d2420862",
"0x3168229643f898f3297d3af867e03e1360d99d265c1e83d1440f045b0739767b",
"0xd62aee5a8f14ad052619317a81852cf563bd716a0ec621bfb25a15f9736deb53",
"0x144bb80a52cca2b9813f7f1ac547e96a57485c345f7eb4fbef7a0c6772292848",
"0xd8f21d1aae77e7a8610aef8ebc35f28c9f8dcc07463f4852a5a17db1eccbe795",
"0x8d08043b6144cd3d22c23675390363dd517fe2e8b71e29a7d1107f18d98f7607",
"0xc5f997af5b8c39a7992a3d64ae05d10791c18507c93977477954c4e89b28da42",
"0xcdb5b0e653ff308a24fc98b6cc28f1bdb4739673f2d96ea567edf9ffddf50c05",
"0xecba2883399e952a885fa626663de0c922e98ea1eb57b8b286121f5bc0a6b147",
"0xf32c9760a0ca7966dbd017d7326f50f15daf020daf31a5258819d2d55fb224ee",
"0x8e5cae1773d0aa309991d024ee02ab1ffcd0ffe895503e2f94ae30551de3d7a1",
"0x49d378c0158bfeb25b7ac2914bc1b45ddee970e58001ece549f60033781a39cd",
"0xd19e11ff8d23a64ffae4c886669d7e52d48ac281ad1283885ebafaab53e8ff70",
"0x6c91b89d95efff6ce209d96bf5c1dbeb5d6c01710ba03379be0f0a845d3ac936",
"0x4e514d655f12589e3c57a6f9ca2879658ea9c6ab0a523f5f107ac1a543e2ce67",
"0x44e9876929bdbf0e6ca42c42ae2222812f6bfe6fd957ccbc5f70a9eac80f0892",
"0x545859fe34e436e0d4183b630cd69b103816d883a0648e67ad955328022d5aeb",
"0x121b2a96f0bbb59565fadcbf50a02de161d57a8dd5871ebf72e039832104ab20",
"0xa96f4ab77346235358b680a23cae7f1cacbe21cd0e1fe775c4b0721bbee46bf3",
"0x80b235a11a3114ef45cc9c563b4646c338eda7e7ba2b077b0acf640197fe48eb",
"0x1a11074a30d0cdd88a26e648e673d0c3b6376dd8e5c8bf23012684102a3af830",
"0x51b806c229bc0755a73f256da981ba450d32a008306e6bf59ba4c893e1cc5795",
"0xaa74491a1e7d0edb6bf4e979ebafa5af05dae7d5d0f067303627f00e8fa56afd",
"0xcbf802903c9d29e00b22fef9f2875944f3d0e36a87ce6e49beb230979fb4e838",
"0xb92c3755d629be2c446a19a4a0bba3212f60c1fa5b342d60930379a74d41169b",
"0x07ec15dd0bd56f2acb56a5db6a530a23cdc33b7a7a1c4a8464572e6fd9b8626e",
"0x7f9c7a9b5abe417243e3c74adcd571aa45783a9dece0187a1466760270ba3b6b",
"0xaf9740a3960868f6e759d8f18221f3c5f6a6138afd40672e9c8e37e437be9bbb",
"0x7ec7bbcb17bc86e276a13dcd41513d7effaf08b67e71aa618528087f34efc208",
"0xf2903fcde2aef9045af6f83a3677ab98bb23adc5bda60de7d46509bba777d5ff",
"0xcf83625f4d891af2a93114908f3be5319b89372c31bd23960ad20f8031b20ce6",
"0x18aa4145b728ef0427165710bd0437dd5551a69c5056dfb171b546e35753860a",
"0xe139097ab29aa83f4aac8765e9125b109ddf2984ea325e7a1b4d881495f29dd8",
"0xceaf62b97e71d8326d5f66e81b26ea2b0519fe38c6a4b1b38d693d90d3ebf1dc",
"0xd23c423fe5fa5ca547a84e7e34f401ddc846af42956c6b052eea15950a0fe79b",
"0x947bb7c1e8c90826f78c4139def8e188af907cdb04feddb80360b4d712e51103",
"0xb8c65dbc12478ee24def67d15e845c4a52d9c4ce4467674faa81df72120061e5",
"0x85a642a8743d2d4aba389ae7a7ffa9b0687d28d4702cf45130e2d66eb43a31d1",
"0xe913e63914798d9b3518f204a989328f97520460d0e5925e73c0596d62cfd9c7",
"0x7c7065599f3f5cdf0314cb9ff575feaf604507859c20ff3a63e86c3dfdd2a5b5",
"0xaa2d5c80b189f37cfa00285362abeaaf430b9dc198a042024f1e148b0e888585",
"0xd5c0cb01fcee8af87b0842ad630ea13ea0892c97acd8b1443f6a6c7bcf7bd5b4",
"0x7c41cef1c4af5d15900fb535f0b1f3ae78de50cab2046dd65785feb768ea9437",
"0xf125c0cf53777bf2c49f9b99b804b0df68155c1c3dc554db66bf0327ecd62a70",
"0x18441cdcbc196bc6a4e4a5d9216132d3e075e60d2efbafecfd352621e6b2175b",
"0x0c4b7a2df6e6f1c4a724a8f4cfac0297f3c1f4248ec298a98d4c871820219e40",
"0x43bb93b6bc4c61df7ce7547405fc95a0bcb3ad7874562413dedb1744826fc4cb",
"0xf5f736e014cc04ab828edabde6a104caffe3ec3b286f84d4f6ecc2f7e699974f",
"0x8a912ec8dfa51053430d2e1fcfb67e7961fb7c9eb34006d08848d2d3b21c742d",
"0xd2567779967cfde9018c42f059490cc0c3518b9a32ee5fb1306cd54ca0ced771",
"0x3098a48f2fdf02ac43531168734d661673f82ac0d2e120f10ef0a00460db134e",
"0x9777d31e299aa8fe591612462b85ebb3c1fa27d60248cae8e90e4ec8ff00a811",
"0x880ea730ca93d9639ef1c2ab33136b16eb447b52b89cfe5b74b7327e4d12e4eb",
"0x1ea9f641d8a740ed394d34d7d1648f837667ed622867dd05fcd5f1387efb32f3",
"0xda9f20e5b4a61f72291e1a0438095af7fba8a55196a448c88cf3d1e1ea9bfcd3",
"0x949bd03ef394076512b6cb8f41c09a8d41304e045642c4670585a4e4b54c539b",
"0xafc89365b92724884bce8e10ec1c5c9c9f3f4a7a38effe56392642a73df487c8",
"0x447f42123c8ee209e4940605aa753cba0590bb4cecf366d07ee7e15e11ba7447",
"0x9a99f57a47d31a95f015347d38a3e39f66aa942747dcd65fdfc5355f61ea31cf",
"0xc131af20ca03905d63e74dde7d44d9138d59ec6e95b8a283fea9de870b79ad84",
"0xebfd03f29b2251499f04227ddcff308d5367bf534cd59f42a090a5a6c64458af",
"0x071ee5f0da2f97fca59606b25edfc0642371251d9c07aaf0e8010e5afaad7bf9",
"0x5040af11773c0c1b13fdcf6f2a92dff924d7733ee7d1caa83cfaa84dd204ce3b",
"0xc25afdcda4dff3a3b6a15e6fa90dc54a05a5cf33dea503b9e152a7fde6ceb9d5",
"0x9604f964d6de2c263139cf011baaf97aed1ed08dfbca158ecb495986d461261b",
"0x177e263de95e9c29f3ad31f286117d30ef069e981d825e767bce8031e634d84c",
"0x72f10f3393dea1a41bbe4834d728e8429aa5651c043fdf5b881650328eb62118",
"0x3969a0524ce2ed0d59f839f4abefae7ad9b2750b698716aac552e92079fae19c",
"0x99876fc077b178d584e9c29160ed320fe62c908ed406a2fca7ddf47de487f3d1",
"0xbd211392c93f76c541ddcbd83702db71a90a2ded78d530ae61c00c7ba72d9509",
"0x5e75d857ede2f1af61f846b5f7072225bdec659543c33b24fdd1bddf04de2f93",
"0xdb4c0c2519e081e1a6ed40a3a397b9f093f8dd4b24613d3f18a1e4f7ef94af9d",
"0xb2dfec129fe8cd0f7ed568b0a984fc37dae704c497770110b944d003e53b3807",
"0x6ba3b9ecafc2a469338c398c7588806d499b98720d3bd9c9bb2aa07a0fbf63bf",
"0x69a711d99e3e061cffbc1f6b10f4036de181a9bdb3824ee1a7c83fe15fb2ad41",
"0x2340c3402304d06a71998d35a2431774cd2198a170a3cf62989205545c6f0dd0",
"0xf7b9a019517ef3f4fd6bc5c4a98dc4b97e742e2f0f088d94d8b6442447118c76",
"0xf556a0b838ac7dc6dcd57b0e52f53df4a9f171221d620bbe7958ca3d71671787",
"0x68ebf1d4a6009f64a8a2f1b53611d43404a539e8d51c46dae9873ac1fd9548a3",
"0xb37c2344e14dd698bf0988608ee56a8f6b31fd2d18629c9a7dc1f027955b39a5",
"0x066df722de25d7455976b6be2ec850d97a6afe7f934fc83dde99aa5d49cc912f",
"0xdcaa64c29d2e447d85fe9a0329b269a283e27885ac75d874793bc4989d726f3c",
"0x6ac4870c173b2404d30357e40bb14db4ec0b87f35437da89c07af88d7c265420",
"0xaff8d57640e559db7dbbacbffbe7436d2708f5c3be26370b1b54a8e771eb4141",
"0xec0a42a3464caf7ba5b95d185aed8ce0b9e0696a03e2638f71382a92106b3957",
"0x7b77e84bcd0b0602128148fc8c94dee2e4f28ff1a748ada7ca7f5d0855e1708d",
"0xe0a572dde38708200a814e0120522528bd0ad3be8862293a21c69151fd72659b",
"0x2580506cdacfa687e1dc7344aaeacf2cb2a2eb8a4830c7ad83ec8cc0ef70a1f5",
"0xf5379cfc470fd6989c140d3d3bc51f9ca7a18761928783424c1947ad33e07e4c",
"0x582097b699a9ce614e823fd7e95235e8e6f002d2eea67e87f56ef86735599f24",
"0xab1a683bb247b5f0f3efb6a91f1938e0938326e81e6cdde2278827e25aed99ea",
"0xf21eb6fa7877e3275690765bdc7f0186e5ba0a94b0bbf9ebf1b4b1bf7aad3add",
"0x3168d818b07b7cc71912d7d92f2ec15d10ecf22c9ec20da610068c972c933c4a",
"0xd3d49fa35320e95473a7197c2a9c98bcd13b4b491ee96ac0199f3fde94123706",
"0x193d71d673a1e1de8267df397c41b8e3d9fb5b189b96da91c31be63456afaada",
"0x6579fe55af7c0d58f00f241e257db748566b750a59b7c05372b0b14fb03282ca",
"0xf6195d1b7de28d81a3f7d50f34f2a60f7ba6cf48d4ea9593404e48e6b33b8857",
"0x3bf3d52ff3c498761bbc2598c449d64a0cebbbb28201dec3633c73d5493b048a",
"0x57c4f9be1b0fc5d7c6f86a9297aa4d1375e9f5848bb2f3c1f08851f2c77a614a",
"0xa6ca06afd1b9fae9533d53a9188aa8497a7c92e363ade6ac094023bcb0e5f46b",
"0x09c669b50d1b26685f20817d0a096168b7d2a4949a20e50a2d665be4c3d4086e",
"0x8aa7d92376364e98c4549669e798af1c2e654a776f0561c89c7f7b2540725539",
"0x935240267eb3e1a1a6a34966084681ca4d8792142c4fc45574fa669c518b2e8e",
"0x7e339371cb38e9babe203905f4026cb90f25c8b10def4781ab5330dd0a63af63",
"0xfb588a940601e578fc7c3286fb4ad68f76dc1fa3dd88251193d9655fea77e056",
"0x90a702a71779ee4176ed8eab503deb43c63628535d78f9742ac95ffa5f699464",
"0x122c0341b0838cdcbf934769322e8fb8df77d8f8a666fe106cf87373bb719eeb",
"0x53e7ace007789e4c3513b16eef872dff5b6353bea42d8a3e3912fd62e14b8f83",
"0x3bdad07ec3a785d36f8c41ac9c0716a2cad6004bcf1e7e899b06c640e1aa1d9a",
"0x6d95da2724a3609af3466474e44455a787b9286f0bc016f13690a867f2f89756",
"0x98cd50a72a2fe944b00613dec757270f61e8590002d2e1b35bdb6bd4290dcb31",
"0x3b995783e2812c5d7fdf10f83170c8fd142caf1526698a9d094a24314ebb1a09",
"0x81cf7500dd9e75fd872b00378005a1bd180fe07be7e7cc3dcdb06ee006c8721c",
"0x8e7f5b4940da9de2b59fde73201351d01e5ebdd3ee863cc7653a919c64c35e84",
"0x6bd0c1bae338f0922d5c0fc951d089f9c290a42a3744f0a5b4b0b61a5248a4b1",
"0xca6c19228395454d07246773fe87ea86891a0fdeee12e8bd261625a62a426c05",
"0x83d0b617af7fe6f23019ff4e04bc71b8267a4dd9b79ae4ac29470e99cbe7466b",
"0x901c51cf6fa4726b8217b807f7b0d2e0b4ebb71b6a28e8168d2493016919b267",
"0x6d101782b820ab580dbe1cf9aacbc065279c18407e70e965ba3315bb77537c77",
"0x831996d9ece576f424f0c11abe5f3847229500ca651c452fd6ac234cc48cda4e",
"0x5d8fe79678589811621ff19ebfd3d6c4e2d0035ace9a197368b58deadc8b6fc1",
"0x8eda2c20216008d1c04f5bc93b5c2d9f8c3635e2ee440cee379f0470cd1a3c9a",
"0xef3608f4b6e9e835f3360e78b097af504df75f96796b4e30c9b4e643caf9d07e",
"0xee7fd312bae21e15346a412bd82265cd4231449f5a11824938de30fbc6400b19",
"0xd659949d718dc3522af4a4794d0c46b346109b5de4a8b87247d1f1a4c414b766",
"0x7567bedd64cd79119167944a7e623997ddf134c308a546724e432c36ee2a2d39",
"0xf0adf777a52828b31e70712776b4e56215a1038e0c14f2a5ab5bbf035623067a",
"0x92daf2c7cef9eee82db16820db7c60a3113950448ae4b149a7b32eb6956326fb",
"0x83825ec2c5c8a323cb5ced10e99fa0d7e9df73b9a158c522267ab0fb05ee7030",
"0xbb9e1680cb85ae48da3322345b06055fe4b668ae7b31402fc4d13faf439b199c",
"0xb040722e777fe01ac533eafcc93b869cfab5bc67f9e2e1044ff505c011f55f1f",
"0x0c488f1776428ffdd8eb03083fcc9dde010d7a3d4c08c8f8df2fa93fb206b2bd",
"0x54a0b71a8cba973d26bb89e5e07421b8c73dc59bf95f6190bb3b86e7962788ea",
"0xadf110bccb6d34276e3fe4701119b2527a86431d6f057a02e30118a6c6cfed54",
"0xe01ab7f11ec408b5a17ffbf6cabc3268e16f6be0cd0b15d73ee8b8e2aaaeed54",
"0x7280b73efa14f10d39306f2d2dc7832c0e47fadbc14f990a821c76d60be529f9",
"0x3cd2b491fa5228b4cae420d5c2a2da9a5e07a32f2147f45f3fa35dbde38224f8",
"0xdcc642f2123fc607d991e9794210770453e1befdf52582df0bbaacf85a148048",
"0x79a1710d32bfb57c607c5bd23fbd2b8fe3356f586172e507d2688185be8993ca",
"0x9ed1335deff01eda0b660081d44718b7cfa0fc69c3e9946c9733dd7ea64d6f8f",
"0x37f70e002a78cb3e8266d5ce7959a45649359b6b6ada51482d097b9f32e93179",
"0x814f9b9e4af3c84c31f40af0028086d16900f9c63f519f7bc3c18c0eb5c407dc",
"0x9957e067f5e79fa6f40bef2036c6d19734146ef231ffc22263bda5c36a7a12ec",
"0xa1a240b8ce8973e91dec89bd147a3b7af274fa1e233cc56b9dd83bcc9311a029",
"0xac083bbbb8455d3e145f59424d19a8fd7c6162d32a193c67405291ff64113bab",
"0xf2182db4682212298b31bd8bd086171a719bd68424da98dc133c83ad043ae903",
"0xb3015688c0e0f55c6e97034615de00173151c4334c72aabe048c47c244ea5082",
"0x15ebd9c48235918e2d8b2260acda2610b71fe3c4ba7f853238df940d021cd60c",
"0x847729223cc8abde709cd283dcc4356375ff89651f39c9adab865fea75e10708",
"0x39c9a1bd9e21caf13132b33a272b429c68cb7af1b8db3df08280860dcce141b0",
"0x31f21eb219700c01c3d910b2a922788d790acf6ad91c8de739795f1a740c220e",
"0x7fee191fd2c31b723a1d4a57af9366662e62eec889d886b0325f0c1e2e4f9d57",
"0xc682c555d050a03b8164ca927920ac6f97be4f96eeb8efe8e4fe3d7b48cc8424",
"0x1b887661820a95c845fa5c8e0bf10028b81073bbfa072a2f81f82b4aaf3c68e2",
"0x4e86af7e8a0aaea28c67e2658b97540e84ebd4cd1a9dff33c99a45cdbd0de661",
"0xa93100e0dcab1d0799a13d40ddb459e32f6e95d2c661094d7e8d09e008ed2486",
"0x2d15cbd72ffe23920d63d6916f68c5a75d2400b0417283b54ade9dab8ba3af5c",
"0x72f199719868bb4b4546407f7dc690180b2e8359ab6e747fe3ca4861c59bcfdb",
"0xc3a9a2ad727ee7623ec35671a330ff150e504bd20365a7dfec0295909e9973a7",
"0xe4dec421f674d4917299076c9885c49c51e7cffdc5253696b552b9c3ab307cdc",
"0x426f724354ff7fb3114bc2e66360c996dfdb1e8585d3967738285a2030a89b07",
"0xf39f6051d26d8b21aa5592dffc3be99480a768a0be6afb8b8eb5bbcd4058d4e4",
"0x061bbe83ae46285c935b9bfd646cc54f4da034b33dfa8b3b8c902995a77b7d1e",
"0x37b7086aa13372623ea527ad0dbf08bb2162b274420972c55030c4001e86a1eb",
"0x2de6121506702ddf0eb5ec8e2eae6110ad41b3982c73cf8382bea329e77a8cfa",
"0x4e941c3da784368dc838b7b8a77ee51868160a79362aef6caf0981fed3ba3d36",
"0xad2e32669978cdc836e32d3dae7a7a89b1d0e28e5f938247d1a6233eb055b481",
"0x8d0d13cfe3e40eca8c6ec865aef23fee9f5af445131bf0aeffdc87e4640a1212",
"0x8bf162d69c4565050dd4496e244ebfffa69bf13abaa9e7770b8173999340009e",
"0x21a33a33d92a99de5af52ae238a799e3307258b8b91a959a485238bad31f913a",
"0x21a95996aa2f4abe48a35617de16894f14292afca769679a63a03d68350cc362",
"0x57bfa7d2037da6aaa07f44594cef60a598ed2bc1218b9f6af48dad1b42759e95",
"0x7324fefadaab09a26c065bd98d3e9a56eaa7ef78df1269c1152bbbaaa6693256",
"0x41722de103de41c72010d1f19166ae0ccee2bb72314c719945f4162ffa165ac1",
"0x19b2f1f42353f935f46f8f9421bcf06e2ee573304d0efa13071d676ea174e18d",
"0xd7fc39efd2a392efb8de6d7d1c7807ed7daee0c8b82115acc60beaa7f6d9b86f",
"0x5ae63df9ecf9aee8cac4d0ce1edd37a95069d61c8d8ef886a150eda4bad4c87b",
"0x6e7aba83a3654cae6b12a6f87a9739735dfeb43ff67e309fe4701b8b17937915",
"0xd624f46d01a186da11d15eef4d79250191605e51ce19b9e02b62e65d84dd1c38",
"0xbc134d2f8acb6a60d424d4c8c6087fbacbb5202251c89ef720dded9947e3c4d7",
"0x6e8e39dca2960de07134fc043f73c9757c42c6827ef22d063c44a5573ce6c8f1",
"0xe53089dd7ccb7e0e78f3cd7d7ea342ce5a2316b50d6bd033ae621f6ec4329a46",
"0xca3eca5da2a9ded537dcd471390b7d97716deb0c5cd9e0d6a7e2addbadd97cac",
"0xaa5799394d99d90642d013e8359a40f2cc72e6b49c91233ed930ea1d32b360f6",
"0x8ae22559b0296959ef540aec5702dcc03d2b2bd9411b69af756d7d9e12e6cb90",
"0x5067bf825ad66e89ae1c46f1ebbbee8a77c2d285fb66c01b732b6c3f629b2ca2",
"0xf2f1c4304b5ec8b314fc6a4f9a9df69472cf0a132577217eff1c0a80443885ae",
"0x4c888be868c74ae86a9c0648429bdb207d18794e3ad6b9ff79d9291dfb0d0b46",
"0x3083508ec1669fa69d5fa4ab1d84501868c7a054a24b0a432b74be1f3bd0ed1c",
"0x443f7e4cc89e3c798c788fd40185525d8402c2160e5f3434986922c6f8179ab1",
"0x16d395ee5e915ea950dfc7639f90a29fe04ccbb47a2b0cd303ea719acd48ed58",
"0x901df34bd40035ee95569ea61c8a9874fd9151fef5701e91f02578c896704f20",
"0x4ce474419d801fad788b158bbf40dc7d7bc2ba43e1c2424f91b858055a7b61ea",
"0x10b2d6126ce1183cb227e291b184d7541b3380e100a70d876587a0aef2fe588a",
"0xac68a6a550c4a40c723ae37abd07d9e2d8486a30cd4f2cf7285f6d74882368f7",
"0xa0800069211efb656d0df4a81f1febfb48f251c712ee973afdff37a2baf83b99",
"0x53293ec8346c1a44e3cf78017dd033dd90be4737045e1c55d27130d7f6f36dbf",
"0x0a92d75455eb5c2167e2c07e1575a9580c135debe7bafc8d15d1fc2a25b984ea",
"0x32e6f505ec66fa987746c67a470df78a7a0fd136ef814ed24f3b5e0988cb53b0",
"0x20e6f99aa4b002e35f97900a34322af373397dc98ec28ee668e9921bc41d7219",
"0xc309a8620421c52fdae475d4a29530a2e56dc0051a28f8c4205c09cba5443666",
"0x0fb5bbd851d3860876e1dd038fd3f8d9e5b8e8b4e0d3b83ba0bc3d06222ac9ed",
"0xd71830cb6f3ad0776795865aedf50ceee94ba9ec89533190d3dfe2107a9e0e9a",
"0x768040f6401331b029bb0222b7494ddd21525091d936641f4ef89f00cb5b20e8",
"0xc52b410050774495fb2e22e0a94bc97dc72aa86cba7b20e8ce6c8a20ff03c5e1",
"0x026072e68a13a5ae0721d9e47ace688b75e16ba76ef67ff01d0a11f10e80ddc3",
"0xcfb1040048b9312c0d274a6b2576c7907176a983f0c0e02b120c10bee28f438b",
"0xd3036d04273279c5fa5ec4a096b8fd8a68a46c0536c24519b0ee5368c5103d84",
"0xdb9bdc3edecf7280dabcc104885942eced615311e93c2fa06dea812adc626baf",
"0xa25ca25f83c418bbfcba8a16cf661902499d3651b497e75161aa0d0bc4c3717c",
"0x96221feae35068b02e1540f06be277c27e938459af8718a2c883406b2582ba31",
"0x5584e36296dc2cc61e21c1e6539f66d918b800025fd6460da31f869cbc357289",
"0x7a0de103b391af8b2a9af3e6e5c2c6bf309d61cebe805db82d3addfde5395b4d",
"0xc5b000944c368f67c77e6c6564c5be5bb1fb84eaac76ca2bb3c7ddfde64e5635",
"0x544ea39b4d37a698bcb0c2dbd689ef90590e160db52deefe446d65aa7b60b20b",
"0x32160ce8e604c62c09814f8e13e795b654cfda57fdfef4b01c38ae3d078aaab6",
"0x5def86fc59562b477277bd6a2c1f1bd5a9192cd969c4ac578b16ea73031d5aa5",
"0xc0fc111d2c0eea81e7d6e0221c0465cf950772fe8dad94476c0e33d528928f9a",
"0x1b803a048d3ab8e5b4a49b3550c6586d71dd6f5409da6df0bc6df76de94e64bd",
"0x549d98175538c94e098c93f77ccca9ca0cbd11ab7c270ffcf1d3a908adb4d8e4",
"0x17d331df92fe4d8b57acde9bff8eced101f461e3470691ba7b46df9ceeb8129f",
"0x7a496054ef706cf89c0c55d848cac64779091799d2d64d6cb43907d2222c000b",
"0xe86b6819e9a482600ce2c9b42d248dfa3262547eb7ed42a6c1ebdb138e62206e",
"0xfd49fc9e5f4eeabb74a7d9ab4ae8a0e583ca153ef4c09e697f5c0207e6505ff7",
"0x9a297101369d0cba7b6f7edfe1a4a432d91f74f88ed3473ce14dc91cf616e903",
"0xd66a19a2834cbd910f2278b2bd5cae2ab9b58fe1a9e583cce4e2d22903d767db",
"0xd9cf8987c12672ec0e2bb97b25567f3f914fa8fb89b1186c6b665967834025a2",
"0x54e18efcf10895d51cf8f8dd6541ca097899fbb1880abd3b68aefd6e657a0af2",
"0x759486342c0162d26a8d2a0881affeca579a7cad80c32c6885d910f9e966ed94",
"0x02b2d8cbcb7244efb913aac80895e6cfbc81b60cf831b0a19b2354e0c7e00b72",
"0x414736aea69a7be69bed90c56eea05e5df9db9667f3b0b07ee6622442628fd88",
"0x75db93f08ee2236e4cc9222f8167c15c5bb31b4b9cfa1fe62f5175bac9c4c6de",
"0x07c460d27a5df943f09d114d99cc39c05135953c416591a7dc9bad3e2c064796",
"0x42c32a832d8a9911eeafbf0ed6550cce1be3832304f22a63d6edf1b72d92053d",
"0x2f8226acee0e5cb949592c1e77ac3da86f43f3834df940349cd6a55626ec7d3c",
"0x3f3e88302fffecb9751ee31a36de3abc6fb7963e264988904daf8fe6aec18fc8",
"0x0ea47b2cb04403773d9420ccfde549fe763bcdfe350c7546e3293b4612e096bc",
"0xf03a38c16a3ee05197b7c77985c2640af18479ebfb7db342416bd0baf2645eab",
"0x32c9844dcd2794e987ab14af8aab52d9925d77279377185697bfa362907f4bf3",
"0x72985d640d5ee8da6a1e0aa3ab71a19168802c29e3ab915d61910523d2d8a550",
"0x4453f4c055057ac3fb2780fa8fe131b6e08ef90a5b30930a83d4cfa5120ff6ce",
"0xb13ff4f56efd0f41bdcbc06c8a917f81614ca363f8c06bb3bd748467e146f959",
"0x172419af274d54de1a3ec6b10e5e8f98d0941d07571f9a5eae977597f0ea6e2e",
"0xa70469fc4070b5a675838352457cb6b4566a7a95ef843b0cf49fc0e02a342b0a",
"0x15072136cb1235007413c137115f4246ff22dd33bce99dec813042d6638ee502",
"0xa883cb9646a12a6f13eb4e1fde9422767be38279eef669068db6572d449da45f",
"0xe752e1e6ddc10633853a0c997727644b92aff7e46710c2c3850f6994edf83072",
"0x880e73586a7d6d79b4a7bd30f551d04e928747962ec263867f53dc33709353c4",
"0xcca01d7edd840727db14e657c9edb63a5518b41115abbcd848a60c9800e8b244",
"0xdf231e025e5c85b82fac8c836df78f5ee23509bb7b363b018ab27cf83680ea52",
"0xb42b4d31d1838886a6cb91123748078b5d07384afb1e574146a0174b6e3609fb",
"0x243c0ef11b9cedb39146fc35149291ea31906f60f56642ec3af28753936c7b08",
"0xac496eba34056ac76fd2c20c300bbcb66bc9d5257859aa8b8480fb1ea44cc60f",
"0x1631a82a3927c93bcb93d055ef94963bd00c264816768d7a12b1e6844b65a226",
"0xee630ea7011dc95ef7c9dab11e2c89a8065a85b7ee3ffe35bacf38efc61706e6",
"0x8bcb73df8715723d55d5635d5b1d5332af85b2945871172d22e10a2f19cbc9f9",
"0xa498dea3b8eb89b40f963d9266a2d4e71e3492c614e597e08dcf565e54d2d8cb",
"0xe798586f9f5bd8def445e5b66e1cd1037df1fc1e043b7c4a804d1cf368aaff70",
"0xc7e9da2ee64ed53fa9306e35e019c7fd74030f3065b5514189c50931d70372dc",
"0x557acd95f593728a732f1ef04b94acfd5475da37a18dafda2cac957db46b24a2",
"0x303f4929efdd5f54365d8927aae229df99e222e76e42b494e216d5365a4330c2",
"0x6252147a7a16f988726467394919d25e24a28756726bdefbdec768cc84d125b5",
"0xd9bd80354f25a846ccf3a47dc928b1d47958598474749795d4f1885f172fc996",
"0x356cc71f2169917a76e87355c358eca62bb5c79fc4f38c4992ad57cb35ce493c",
"0xadf1135a2511fd2cdbd33006738725459f33edcc593b1aa936b55889fe9e9687",
"0x8359e90f401234e4a85695c7e369ef5c107b246088baf3355046934197705c89"
]
},
"nodes": [
@@ -3920,11 +4577,13 @@
"0x0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"activate_at": "0x42ae50",
"pricing": {
"linear": {
"base": 500,
"word": 0
"0x42ae50": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x8a61c8": {
"info": "EIP 1108 transition at block 9_069_000 (0x8a61c8)",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
@@ -3932,11 +4591,13 @@
"0x0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"activate_at": "0x42ae50",
"pricing": {
"linear": {
"base": 40000,
"word": 0
"0x42ae50": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x8a61c8": {
"info": "EIP 1108 transition at block 9_069_000 (0x8a61c8)",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
@@ -3944,11 +4605,24 @@
"0x0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"activate_at": "0x42ae50",
"pricing": {
"alt_bn128_pairing": {
"base": 100000,
"pair": 80000
"0x42ae50": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x8a61c8": {
"info": "EIP 1108 transition at block 9_069_000 (0x8a61c8)",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"0x0000000000000000000000000000000000000009": {
"builtin": {
"name": "blake2_f",
"activate_at": "0x8a61c8",
"pricing": {
"blake2_f": {
"gas_per_round": 1
}
}
}

View File

@@ -26,6 +26,11 @@
"eip1052Transition": "0x0",
"eip1283Transition": "0x0",
"eip1283DisableTransition": "0x0",
"eip1283ReenableTransition": "0x17d433",
"eip1344Transition": "0x17d433",
"eip1706Transition": "0x17d433",
"eip1884Transition": "0x17d433",
"eip2028Transition": "0x17d433",
"gasLimitBoundDivisor": "0x400",
"maxCodeSize": "0x6000",
"maxCodeSizeTransition": "0x0",
@@ -125,11 +130,13 @@
"balance": "0x1",
"builtin": {
"name": "alt_bn128_add",
"activate_at": "0x0",
"pricing": {
"linear": {
"base": 500,
"word": 0
"0": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x17d433": {
"info": "EIP 1108 transition at block 1_561_651 (0x17d433)",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
@@ -138,11 +145,13 @@
"balance": "0x1",
"builtin": {
"name": "alt_bn128_mul",
"activate_at": "0x0",
"pricing": {
"linear": {
"base": 40000,
"word": 0
"0": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x17d433": {
"info": "EIP 1108 transition at block 1_561_651 (0x17d433)",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
@@ -151,17 +160,28 @@
"balance": "0x1",
"builtin": {
"name": "alt_bn128_pairing",
"activate_at": "0x0",
"pricing": {
"alt_bn128_pairing": {
"base": 100000,
"pair": 80000
"0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x17d433": {
"info": "EIP 1108 transition at block 1_561_651 (0x17d433)",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"0x0000000000000000000000000000000000000009": {
"balance": "0x1"
"balance": "0x1",
"builtin": {
"name": "blake2_f",
"activate_at": "0x17d433",
"pricing": {
"blake2_f": {
"gas_per_round": 1
}
}
}
},
"0x000000000000000000000000000000000000000a": {
"balance": "0x1"

View File

@@ -0,0 +1,121 @@
{
"name": "Istanbul (test)",
"engine": {
"Ethash": {
"params": {
"minimumDifficulty": "0x020000",
"difficultyBoundDivisor": "0x0800",
"durationLimit": "0x0d",
"blockReward": "0x1BC16D674EC80000",
"homesteadTransition": "0x0",
"eip100bTransition": "0x0",
"difficultyBombDelays": {
"0": 5000000
}
}
}
},
"params": {
"gasLimitBoundDivisor": "0x0400",
"registrar" : "0xc6d9d2cd449a754c494264e1809c50e34d64562b",
"accountStartNonce": "0x00",
"maximumExtraDataSize": "0x20",
"minGasLimit": "0x1388",
"networkID" : "0x1",
"maxCodeSize": 24576,
"maxCodeSizeTransition": "0x0",
"eip150Transition": "0x0",
"eip160Transition": "0x0",
"eip161abcTransition": "0x0",
"eip161dTransition": "0x0",
"eip140Transition": "0x0",
"eip211Transition": "0x0",
"eip214Transition": "0x0",
"eip155Transition": "0x0",
"eip658Transition": "0x0",
"eip145Transition": "0x0",
"eip1014Transition": "0x0",
"eip1052Transition": "0x0",
"eip1283Transition": "0x0",
"eip1283DisableTransition": "0x0",
"eip1283ReenableTransition": "0x0",
"eip1344Transition": "0x0",
"eip1706Transition": "0x0",
"eip1884Transition": "0x0",
"eip2028Transition": "0x0"
},
"genesis": {
"seal": {
"ethereum": {
"nonce": "0x0000000000000042",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
},
"difficulty": "0x400000000",
"author": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
"gasLimit": "0x1388"
},
"accounts": {
"0000000000000000000000000000000000000001": { "balance": "1", "builtin": { "name": "ecrecover", "pricing": { "linear": { "base": 3000, "word": 0 } } } },
"0000000000000000000000000000000000000002": { "balance": "1", "builtin": { "name": "sha256", "pricing": { "linear": { "base": 60, "word": 12 } } } },
"0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": "0x00", "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"0000000000000000000000000000000000000009": {
"builtin": {
"name": "blake2_f",
"activate_at": "0x00",
"pricing": {
"blake2_f": {
"gas_per_round": 1
}
}
}
}
}
}

View File

@@ -13,6 +13,7 @@
"accountStartNonce": "0x0",
"chainID": "0x6",
"eip140Transition": "0xaef49",
"eip145Transition": "0x1a064d",
"eip150Transition": "0x0",
"eip155Transition": "0x0",
"eip160Transition": "0x0",
@@ -21,6 +22,8 @@
"eip211Transition": "0xaef49",
"eip214Transition": "0xaef49",
"eip658Transition": "0xaef49",
"eip1014Transition": "0x1a064d",
"eip1052Transition": "0x1a064d",
"gasLimitBoundDivisor": "0x400",
"maxCodeSize": "0x6000",
"maxCodeSizeTransition": "0xaef49",
@@ -116,11 +119,13 @@
"balance": "0x1",
"builtin": {
"name": "alt_bn128_add",
"activate_at": "0xaef49",
"pricing": {
"linear": {
"base": 500,
"word": 0
"0xaef49": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
@@ -129,11 +134,13 @@
"balance": "0x1",
"builtin": {
"name": "alt_bn128_mul",
"activate_at": "0xaef49",
"pricing": {
"linear": {
"base": 40000,
"word": 0
"0xaef49": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
@@ -142,11 +149,13 @@
"balance": "0x1",
"builtin": {
"name": "alt_bn128_pairing",
"activate_at": "0xaef49",
"pricing": {
"alt_bn128_pairing": {
"base": 100000,
"pair": 80000
"0xaef49": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -60,9 +60,48 @@
"0x0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0x0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0x0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": 5067000, "pricing": { "modexp": { "divisor": 20 } } } },
"0x0000000000000000000000000000000000000006": { "builtin": { "name": "alt_bn128_add", "activate_at": 5067000, "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0x0000000000000000000000000000000000000007": { "builtin": { "name": "alt_bn128_mul", "activate_at": 5067000, "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0x0000000000000000000000000000000000000008": { "builtin": { "name": "alt_bn128_pairing", "activate_at": 5067000, "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } },
"0x0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"5067000": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0x0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"5067000": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0x0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"5067000": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"0x00521965e7bd230323c423d96c657db5b79d099f": { "balance": "1606938044258990275541962092341162602522202993782792835301376" }
},
"nodes": [

View File

@@ -120,38 +120,44 @@
}
}
},
"0000000000000000000000000000000000000006":{
"builtin":{
"name":"alt_bn128_add",
"activate_at":"0x7fffffffffffff",
"pricing":{
"linear":{
"base":500,
"word":0
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0x7fffffffffffff": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007":{
"builtin":{
"name":"alt_bn128_mul",
"activate_at":"0x7fffffffffffff",
"pricing":{
"linear":{
"base":40000,
"word":0
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0x7fffffffffffff": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008":{
"builtin":{
"name":"alt_bn128_pairing",
"activate_at":"0x7fffffffffffff",
"pricing":{
"alt_bn128_pairing":{
"base":100000,
"pair":80000
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0x7fffffffffffff": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}

View File

@@ -48,13 +48,23 @@
},
"nodes": [
"enode://aeb6070deb50efeb41c5e4283a6a3b08ff701fef90e3522161c145f30df2852af3dfc51ba74591f7c9d96b11ca4c3c2b354bf58dd243f2d877f6eecc2373fd1d@139.162.15.124:30313",
"enode://cb4b0568607c97a3af4857700152fad9c79908a89319310268c7f49184e3f7e0c88c8d3504696f521c8aafcd00644f9325f76cba9427181b1493ff7ce230df00@139.162.15.124:30303",
"enode://e0c926dcdc5c1cf58b2ecba371c577c28c28c91f9b210093178a812389b65e5b53f0e478753b94fceb0b36645b779a915ca57c0c48507fe4d7f786508653656c@74.207.240.177:30313",
"enode://37fe8c0f8d667f110316de3109dcc2e9c9247219998e9ac395db39511bef697f9646f73d86a43da491efce35458f53ac3ac0994b85f7086bbf244809d4e7eb7f@74.207.240.177:30303",
"enode://a2a2adb8c12b9b189306050013a44f28db30f92fb3670db9675a049b98b96eb18901d6ff7b961b6e96cfa3923ac29e8f647ef452f0a23ddfef3903ac1cf826af@173.255.195.214:30313",
"enode://ed6fea8e7389bb75ff34846e4aaefa9157c9c79828c6404f4a0ab6b997a613f777aecaed5092c3f51abdf918926c925f7ee4f4cffdb0ac37775d03070a3d6b55@173.255.195.214:30303",
"enode://5460fd1ad217941befd0f8d060e6729a0535a0738770aba56827d1313c09aeb68e3098d458aace59faba2c6780b8c9c30cb140b80cd8e30ca3a074ce6d3344d3@50.116.38.52:30313",
"enode://9109e01dec60b67afa5aea77da17e0cb9a716a547469be378eb122c545a3fda9082e553624ff9e673195a715d5628ebf046a6c4ff315e566420e3bdde003bd9a@50.116.38.52:30303",
"enode://99fff4ed887d6a6a7b6e03a657c35c06d0eede1909ec289a362bad9d37dd4085886461bbce83aa484ce1327badb3c5958365caa851d71de49dc4530e075b64bc@45.79.128.151:30313",
"enode://4b4c06445175b77ac07eba03ac624f72e4e86065ee8bbdbca5f882a2a333e2608e6ef2ae5b5779816abd8d07ae6ec08f75888edeab3bc06f2b75871feb14afef@45.79.128.151:30303",
"enode://fd80e04c75559cfdd9ed8c08ef2c39c5bc95021f7cbaf31acb601914bc7dac7c34b470b90a05e519bc8a8435a46e1ce51053ae07fac31a83567285c34a79c6bf@139.162.224.203:30313",
"enode://d2e678247450c0a7aefdcf03787d4905deda2a6889f02071b241a1309a6bec6ea1c8b1160f69635dee0b4e00cc83656a601b4528cccbd85744b811654ab24b13@139.162.224.203:30303",
"enode://4742134a153c108855eb16563424887ed3aa5b6b74e4b713c8e93a10c376d954ff3041442716bdf9ee28fab2ea09f04d07e3366f834ea472c19820b7337eb27a@172.104.130.233:30313",
"enode://799d0a8836e17ef7fcc58b3d5ced5bb1fe474b31a09851f938d381f4556fa8954ca308f6a178d22ed56769a8b878ac8f9cc62c889f9cafab45a3bd4f6024bb29@172.104.68.7:30313"
"enode://9aaeae0129af1bbb2e3590a71cd1ad0c320aa1c03e15c9eb3563cee2d8a7ca43473f43197b6dc0befe5bcef6185196360fa8b4b0d82d8ef11e2ff65553a1efa5@172.104.130.233:30303",
"enode://799d0a8836e17ef7fcc58b3d5ced5bb1fe474b31a09851f938d381f4556fa8954ca308f6a178d22ed56769a8b878ac8f9cc62c889f9cafab45a3bd4f6024bb29@172.104.68.7:30313",
"enode://ab7b1aab2439aafadcb52f8353e60fc1eea55ee5a01b4ddf46ecdeaa2e869c4bf305249757dc74baa78cf05c5d98ffe5c2a008851f08cab6096c78a08dee7c17@172.104.68.7:30303",
"enode://ab4a7fb0963e4951bebbefd2ec09ddac018bb27600a6063d755dfc10be118cbfe3954ada561afbce4cbda6f62364c12902b9e6bdef258aff36b8a73db3c0f161@172.105.16.240:30313",
"enode://30ff1bd89f58a1adae1f2b2ed1e36fa95caf5c2c7e085cf3a49f14705427ca7d7b2508060d058ceda57c708e8aa4661304f3c17eaae4da2e9cea6b64b3893c2f@172.105.16.240:30303"
],
"accounts": {
"0000000000000000000000000000000000000001": { "builtin": { "name": "ecrecover", "pricing": { "linear": { "base": 3000, "word": 0 } } } },
@@ -62,9 +72,48 @@
"0000000000000000000000000000000000000003": { "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": 3000000, "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "builtin": { "name": "alt_bn128_add", "activate_at": 3000000, "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "builtin": { "name": "alt_bn128_mul", "activate_at": 3000000, "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "builtin": { "name": "alt_bn128_pairing", "activate_at": 3000000, "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } },
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"3000000": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"3000000": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"3000000": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"97c7f4f8f0bbf384578a9f5754ae73f37ff49ec2": { "balance": "55000000000000000000000000" }
}
}

View File

@@ -37,7 +37,10 @@
"eip140Transition": "0x4829ba",
"eip211Transition": "0x4829ba",
"eip214Transition": "0x4829ba",
"eip658Transition": "0x4829ba"
"eip658Transition": "0x4829ba",
"eip145Transition": "0x4c4cbd",
"eip1014Transition": "0x4c4cbd",
"eip1052Transition": "0x4c4cbd"
},
"genesis": {
"seal": {
@@ -75,7 +78,7 @@
"0000000000000000000000000000000000000002": { "balance": "1", "nonce": "1048576", "builtin": { "name": "sha256", "pricing": { "linear": { "base": 60, "word": 12 } } } },
"0000000000000000000000000000000000000003": { "balance": "1", "nonce": "1048576", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "nonce": "1048576", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0x0000000000000000000000000000000000000005": {
"0000000000000000000000000000000000000005": {
"builtin": {
"name": "modexp",
"activate_at": "0x4829ba",
@@ -86,38 +89,44 @@
}
}
},
"0x0000000000000000000000000000000000000006": {
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"activate_at": "0x4829ba",
"pricing": {
"linear": {
"base": 500,
"word": 0
"0x4829ba": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0x0000000000000000000000000000000000000007": {
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"activate_at": "0x4829ba",
"pricing": {
"linear": {
"base": 40000,
"word": 0
"0x4829ba": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0x0000000000000000000000000000000000000008": {
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"activate_at": "0x4829ba",
"pricing": {
"alt_bn128_pairing": {
"base": 100000,
"pair": 80000
"0x4829ba": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}

View File

@@ -0,0 +1,189 @@
{
"name":"Mordor Classic Testnet",
"dataDir":"mordor",
"engine":{
"Ethash":{
"params":{
"minimumDifficulty":"0x20000",
"difficultyBoundDivisor":"0x800",
"durationLimit":"0xd",
"blockReward":"0x4563918244F40000",
"homesteadTransition":"0x0",
"ecip1010PauseTransition":"0x0",
"ecip1010ContinueTransition":"0x0",
"ecip1017EraRounds":"0x1e8480",
"bombDefuseTransition":"0x0",
"eip100bTransition":"0x0"
}
}
},
"params":{
"gasLimitBoundDivisor":"0x400",
"accountStartNonce":"0x0",
"maximumExtraDataSize":"0x20",
"minGasLimit":"0x1388",
"networkID":"0x7",
"chainID":"0x3f",
"eip150Transition":"0x0",
"eip160Transition":"0x0",
"eip161abcTransition":"0x0",
"eip161dTransition":"0x0",
"eip155Transition":"0x0",
"maxCodeSize":"0x6000",
"maxCodeSizeTransition":"0x0",
"eip140Transition":"0x0",
"eip211Transition":"0x0",
"eip214Transition":"0x0",
"eip658Transition":"0x0",
"eip145Transition":"0x498bb",
"eip1014Transition":"0x498bb",
"eip1052Transition":"0x498bb"
},
"genesis":{
"seal":{
"ethereum":{
"nonce":"0x0000000000000000",
"mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000"
}
},
"difficulty":"0x20000",
"author":"0x0000000000000000000000000000000000000000",
"timestamp":"0x5d9676db",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData":"0x70686f656e697820636869636b656e206162737572642062616e616e61",
"gasLimit":"0x2fefd8"
},
"nodes":[
"enode://03b133f731049e3f7be827339c3759be92778c05e54a1847d178c0fdb56fa168aa1e7e61fc77791a7afdd0328a00318f73c01212eb3f3bbe919f5ce8f5b4a314@192.227.105.4:32000",
"enode://06fdbeb591d26f53b2e7250025fe955ca013431ded930920cf1e3cd1f0c920e9a5e727949d209bc25a07288327b525279b11c5551315c50ff0db483e69fc159b@34.218.225.178:32000",
"enode://1813e90a0afdd7c1e4892c5376960e3577a9e6c5a4f86fa405a405c7421a4a1608248d77cc90333842f13d8954d82113dec480cfb76b4fef8cb475157cf4d5f2@10.28.224.3:30000",
"enode://2b69a3926f36a7748c9021c34050be5e0b64346225e477fe7377070f6289bd363b2be73a06010fd516e6ea3ee90778dd0399bc007bb1281923a79374f842675a@51.15.116.226:30303",
"enode://621e28e529146fd501709194885f50540c494f1a2985d1fb4ec8769226b5cb0b0d1a11545926077821474c2767cdd87888ead8a2509a2c9069dd5584e4b1c3b8@10.28.223.8:30000",
"enode://a59e33ccd2b3e52d578f1fbd70c6f9babda2650f0760d6ff3b37742fdcdfdb3defba5d56d315b40c46b70198c7621e63ffa3f987389c7118634b0fefbbdfa7fd@51.15.116.226:30303"
],
"accounts":{
"0x0000000000000000000000000000000000000001":{
"builtin":{
"name":"ecrecover",
"pricing":{
"linear":{
"base":3000,
"word":0
}
}
}
},
"0x0000000000000000000000000000000000000002":{
"builtin":{
"name":"sha256",
"pricing":{
"linear":{
"base":60,
"word":12
}
}
}
},
"0x0000000000000000000000000000000000000003":{
"builtin":{
"name":"ripemd160",
"pricing":{
"linear":{
"base":600,
"word":120
}
}
}
},
"0x0000000000000000000000000000000000000004":{
"builtin":{
"name":"identity",
"pricing":{
"linear":{
"base":15,
"word":3
}
}
}
},
"0x0000000000000000000000000000000000000005":{
"builtin":{
"activate_at":"0x0",
"name":"modexp",
"pricing":{
"modexp":{
"divisor":20
}
}
}
},
"0x0000000000000000000000000000000000000006":{
"builtin":{
"name":"alt_bn128_add",
"pricing":{
"0x0":{
"price":{
"alt_bn128_const_operations":{
"price":500
}
}
},
"0x7fffffffffffff":{
"info":"EIP 1108 transition",
"price":{
"alt_bn128_const_operations":{
"price":150
}
}
}
}
}
},
"0x0000000000000000000000000000000000000007":{
"builtin":{
"name":"alt_bn128_mul",
"pricing":{
"0x0":{
"price":{
"alt_bn128_const_operations":{
"price":40000
}
}
},
"0x7fffffffffffff":{
"info":"EIP 1108 transition",
"price":{
"alt_bn128_const_operations":{
"price":6000
}
}
}
}
}
},
"0x0000000000000000000000000000000000000008":{
"builtin":{
"name":"alt_bn128_pairing",
"pricing":{
"0x0":{
"price":{
"alt_bn128_pairing":{
"base":100000,
"pair":80000
}
}
},
"0x7fffffffffffff":{
"info":"EIP 1108 transition",
"price":{
"alt_bn128_pairing":{
"base":45000,
"pair":34000
}
}
}
}
}
}
}
}

View File

@@ -128,38 +128,44 @@
}
}
},
"0000000000000000000000000000000000000006":{
"builtin":{
"name":"alt_bn128_add",
"activate_at":"0x21e88e",
"pricing":{
"linear":{
"base":500,
"word":0
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0x21e88e": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007":{
"builtin":{
"name":"alt_bn128_mul",
"activate_at":"0x21e88e",
"pricing":{
"linear":{
"base":40000,
"word":0
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0x21e88e": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008":{
"builtin":{
"name":"alt_bn128_pairing",
"activate_at":"0x21e88e",
"pricing":{
"alt_bn128_pairing":{
"base":100000,
"pair":80000
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0x21e88e": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -26,6 +26,11 @@
"eip1052Transition": "0x37db77",
"eip1283Transition": "0x37db77",
"eip1283DisableTransition": "0x41efd2",
"eip1283ReenableTransition": "0x52efd1",
"eip1344Transition": "0x52efd1",
"eip1706Transition": "0x52efd1",
"eip1884Transition": "0x52efd1",
"eip2028Transition": "0x52efd1",
"gasLimitBoundDivisor": "0x400",
"maxCodeSize": "0x6000",
"maxCodeSizeTransition": "0x0",
@@ -120,11 +125,13 @@
"balance": "0x1",
"builtin": {
"name": "alt_bn128_add",
"activate_at": "0xfcc25",
"pricing": {
"linear": {
"base": 500,
"word": 0
"0xfcc25": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x52efd1": {
"info": "EIP 1108 transition at block 5_435_345 (0x52efd1)",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
@@ -133,11 +140,13 @@
"balance": "0x1",
"builtin": {
"name": "alt_bn128_mul",
"activate_at": "0xfcc25",
"pricing": {
"linear": {
"base": 40000,
"word": 0
"0xfcc25": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x52efd1": {
"info": "EIP 1108 transition at block 5_435_345 (0x52efd1)",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
@@ -146,17 +155,28 @@
"balance": "0x1",
"builtin": {
"name": "alt_bn128_pairing",
"activate_at": "0xfcc25",
"pricing": {
"alt_bn128_pairing": {
"base": 100000,
"pair": 80000
"0xfcc25": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x52efd1": {
"info": "EIP 1108 transition at block 5_435_345 (0x52efd1)",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"0x0000000000000000000000000000000000000009": {
"balance": "0x1"
"balance": "0x1",
"builtin": {
"name": "blake2_f",
"activate_at": "0x52efd1",
"pricing": {
"blake2_f": {
"gas_per_round": 1
}
}
}
},
"0x000000000000000000000000000000000000000a": {
"balance": "0x1"

View File

@@ -28,8 +28,8 @@
"maximumExtraDataSize": "0x20",
"minGasLimit": "0x1388",
"networkID": "0x3",
"forkBlock": "0x40E80F",
"forkCanonHash": "0x3e12d5c0f8d63fbc5831cc7f7273bd824fa4d0a9a4102d65d99a7ea5604abc00",
"forkBlock": "0x62f757",
"forkCanonHash": "0x3a024a13310ec9b4805f681b17c3ae6c94167d1c6494e83d70a887ebc27df5ea",
"maxCodeSize": "0x6000",
"maxCodeSizeTransition": "0xa",
"eip150Transition": "0x0",
@@ -45,7 +45,12 @@
"eip1014Transition": "0x408b70",
"eip1052Transition": "0x408b70",
"eip1283Transition": "0x408b70",
"eip1283DisableTransition": "0x4b5e82"
"eip1283DisableTransition": "0x4b5e82",
"eip1283ReenableTransition": "0x62f756",
"eip1344Transition": "0x62f756",
"eip1706Transition": "0x62f756",
"eip1884Transition": "0x62f756",
"eip2028Transition": "0x62f756"
},
"genesis": {
"seal": {
@@ -62,8 +67,8 @@
"gasLimit": "0x1000000"
},
"hardcodedSync": {
"header": "f9021aa0a8da98b6ef1e12b6c49e85b0e965f1ed1688f5e3605f06bb3c6ce4f857aa0bc6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794635b4764d1939dfacd3a8014726159abc277becca0d03c319fe68a91e22fb3b945a8dfc73b817976e29cf57e6c8425e6a02e9bf034a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000849fe1546f8350d001837a121d80845c9d55f29fde8302020b8f5061726974792d457468657265756d86312e33322e30826c69a04bf72e97bcf64717bfd655e2bca9ed1a5253cce5373268729161b1786ca4710488db3c50627f9321c4",
"totalDifficulty": "18787961645682286",
"header": "f90219a081352ab3cd380f66493aa270deeb239af085e68a83579dd8871a0b0a7c7fd4e2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794295856bcf02b2017607e4f61cfc1573fd05d511fa0a886a42f9a2733e392a5f9459f70bb133e5012f059d6cb6aeb360a7bb766571ea01ffc81fa17e357d368e82f1a658c8b129877818e34fdad26e32fa60ac4b12fc7a0946e845a5b468d8c679890632ab9fdff3349b307ce864c7b13195e4f80af4777b90100000000000000008c00021100000000000000000000010000400000000280000000000000000000000000008201000000010000010408010002010000000000002000010102080000008000080000000400000020100010000000200000200000000000000000000010080000000000008000000000080800000080100210000000080201006008210002000002004000000004a0000010800000000820c00010100000000000880000000800080000000020000000000000000100020000002000008002000200100000000000880840000000000242000000020100408800000202000000200000000000000000000200000008000001000000520080000000850340be271083653001837a12008344ded9845db0acc49ad983010906846765746889676f312e31312e3133856c696e7578a0a23e3a33f308378c4cb1eb9b34b40c224844aae072c0eba928a840f6d6ca69a28892892d000574e452",
"totalDifficulty": "26251713144679901",
"CHTs": [
"0x614648fc0a459451850bdfe353a932b5ff824e1b568478394f78b3ed5427e37a",
"0x1eae561c582dbb7f4e041998e084e165d0332c915d3a6da367638a8d24f3fafc",
@@ -2650,7 +2655,659 @@
"0xebb3e8f76f3b6a95285154dc11d4bd94ac4c3a150383ed69f5373499b1983dc3",
"0xb0919ed300acac5f912f01611a428861db27ffb8129a80495f735f0ac608ab35",
"0x2ee321d9d805b78a97210df2977ab62b352705e308773b90e0f4e923adec377c",
"0xee00cb02e9b86978ae10b119924bbe6c38f730c1d1b621d32c9d697e11105871"
"0xee00cb02e9b86978ae10b119924bbe6c38f730c1d1b621d32c9d697e11105871",
"0x3138c1f196e8b3de9369c3c8ee1d556de1bae00896cac87b4083bdd7a691e738",
"0x0a777c53b3be3f3b136b24585dca1b7c85f7b0edd72f2173ddc70b0a1bc8bd93",
"0xbcb300ee517ac8356c36c002da6f2ad562c31c81a3353d63925e044b10d0412a",
"0x503c3b1da233bf2f9f9fa13b0488aa5384a3cc95dc21e6f2e73577dd3ddc1974",
"0x0d07a00e18f3db6896d0879fe87cf7aec13f30a957806f74cdb0c47ccac035db",
"0xb6e92e6a32c5434a79448503a269e6e5ccbf70bc59dc58957915621eb5951e26",
"0xc2381981c2a38689e6ca1121fd33eac2881b1aac64a850b7f5751d587a5a79f4",
"0x83c0f655616e7565d63333d8a5f99baf2f4e0a7dc1520d6c4142b1be6931cdf4",
"0xb17c34ad30548ca1889d7aa11aa12748f7c02431d64d7f53013a10b979ec7aa1",
"0x34ab63d2aea17cf800fc2aa3c8589fcded1a732bbfa2102315adfa03596a4221",
"0x6a7bae77e28fe9ea18b59e4bd4b81780daf520309808560d533604c0bdf76f84",
"0x64df132fc5319adc69249961df9830e5d63945564d912fe901d80e7859a87057",
"0x2323352a8e2f13d442fcebc760ece470dfe5542188f6fc2d38f4db6af48bc959",
"0xe9944f4b2d9e3fd7aad0446281d4971463c2e53029d7e7f40f8b0daad1a29d67",
"0xe012a3af1ddc10881cbc1c62c1e0e7205db5edebe74bd0c8d1c12bb9a3f47e2f",
"0x26672ff6f0f02089b7a67837aedea5e54acc3120ad4f2b936948d7053d74ccfe",
"0x70b1eb24d9c2544e26af43212c0cf70e3e2ba58316f5372db5daed02c45907bf",
"0x7156e65df46bc1d62e8f8ab4c6c2115a5129d28ae9e96ba779b4615fde08f267",
"0x15212b5fcc31d204cee80a4ba392e731a2fbe40e1a23d8fdcbc6ecdd665ac9ff",
"0x1508823c086bb5269f60b452fcaf3d58b6dece236704ad479205e1b6b870b7a2",
"0x73a9ba93b3a5444294b466acb8c560c0a62a16dcdb5c90eddeb19f9eb75dfd31",
"0x9658cab50473a5fdc06f3bf07b34981212f215bdd773439cda3a5a37dd96b7ed",
"0x1b76828d177851a98f2a4e4a5a28e2e50dc876878b4a44b7654c409ad6a58a4c",
"0x7345477276953426e16dc819818ba09988d1e2b552adfa47c5f7cf6c1bfdb3da",
"0x2419a94e778ed5aeff0552a884b87b12e3b4f9b87c2e5df66ebe9260f38f19fa",
"0x4c14ee271bcb543d5395324a6fae046e133bd3e34f6a3d1328c9d3c77593756f",
"0xcbd9935f32d758ec070e06c393f5bfb925515058237471ccc89a6c7126df2fbc",
"0xf945621e7c926f2739488d96c4e5fd42fa91a5be31e9a45876fe982166bd4cfd",
"0x427ae8d29c63525078a803c1e40554f77685866a46f2ad9d0f772ad0c10b43ea",
"0xe4a6753800fc0d20c0ddedd6c716f8fafbbe636256548170a871d2913c885c9a",
"0x4da6c6246e60c496e059dd80bcae5ff30dc285e2a2db142eb4da3f15b00c0df3",
"0x4d1ff252edc762f25066a466e26154162942ef71ad13c159c102d94e427cc926",
"0x663a98199d967f55acdb313e901cfa23768ae21e7b5efa6b6de88b93e96b08b2",
"0xf025c69018317e95880e27a96910c6a4fac0b5d7a52abaab7c616af08eab1090",
"0xa5dc8339e0b823dc3821867cc84bebff11fb0bb8fe2f54ca5748cd2d8066f68b",
"0x9b3835afa0d0f1aac1a603d1f322940f4b84da6c6352654fb10aea202b3b84b1",
"0x41cea6f1e1de2697e58cefefbd4ea1118acb43aaf9ec7a9c116d14a5310e925f",
"0x5f1e42931b16c26642f351b24bb063f6ae7dbceca760961fe4d07dee0286082a",
"0x9ab19e309d5a4fd3596f0979b268473eeccd04af6674968e1e340a47c6652d9f",
"0xd6dfe22679bc3590594bfa1ead582bd4639f1b3869915e802e8973666d29588d",
"0x92f5589f356fbf8e4c5b12bf11d5f148d94f0e9f9297bbb32a73ed8fc409ad8d",
"0xecdeb77e2b35647c59aeb935e6fa4404ddecf9287ffd84d02c090d6772f1a68b",
"0x18abbe4adfb8d2365a14201ceb3966e561817ae497754b65cb5441f64bfec184",
"0x4d57180d082ec586a97573b383a12a59664d9877d86140281af0eef88f8dc8fc",
"0xfd52e379ec75f3645ccd83653370e107970c5c61573ec688986895d5e825303d",
"0x9327212a8ca5d0139e6728f8b39caa571a7821782b49a2edb96371daf6320571",
"0x9d9b1cbc011a31b99943d9dc7a2a8ff2da0992a5e3d22bf24685723b85545452",
"0x8661975f8565dd506ee26d265ed78a06d0c60dc150df594b6a1cd09c5c383e5c",
"0x98574ee8064f0b276433b8d98f7db55b7387775c03d543f2a8d1f77cc9d9bd20",
"0x6fd37be595359e52e5482f53ab66c9e76ef393085485a4bcb344272607cf2c0d",
"0x1d2a15c07ac3b45c024b4c14c976ed18d0f2e4ddfc84fa153414e301115b70fb",
"0x1ebb4adc19ea75acf90cd66ded504674367b70506f4813e22cc856f10c36973a",
"0xcb0198d5b6883b582c6b389e6f98ed77494f3f6ed232056dff48a368bbc2b9c2",
"0x2bb53b3a72fd65a4a090b49301c448fe44fbe0c7773e938af9c511070b442957",
"0xbf8289e45461485d9ae0df36052adcc1c43089e173a54663330a4f1ccd6ff7ea",
"0x059c82830dd4ffb040cc75a4b354483d81bc6f16ffd0545029112845f8db7cbd",
"0x68fa73438a9093f1e2e5a88a244287cd1d068bc28ac0c7c88cecc70f2b7cfe74",
"0xf935992c7eea357445e47fceb2894d4c04c618fb238f6a84251c919cd2e5b97c",
"0xc2b6a5bf4ab7f6f43fa9f59269116929116e5f136faf8acc7a565eaf4f6f5a0e",
"0x0f06da2edc35f959f8f3c9f9b16b13df3d1ebc5de146d7467f342116648bcbb7",
"0x4cccb59e57aedae4c1aa83a19126e846b14701be2971f95868c9055b77461db0",
"0xb2a64c59c4a3878472f5fdc4365e61f6cb5a67a1b453dba34c2d257f97ac44cd",
"0x21d74f1e667bce1163c8da46d522bb39a6ce777b618c6d2551c01427a68a2316",
"0xe1d84da4146c25e3d89bece4bcfd19ebaf684086604c53e702c07b938057d88d",
"0x6ff86b85371f732a285b19e9372a2567529bae071a439e80be782c5e3c462c4b",
"0x86fce707891c52a94cb30d50c4bd08fdd5567b88f6676f35228523847c966032",
"0x59aeb5682b2a3443e6c8bcc4d425e3a59872090bc71dfbc6cacda9f02d9fb7c8",
"0x7bf9a30fae3402b8d0aa4f7b18842bbe082c1e11469f635792225c8e8e536f9a",
"0x3f13e2ce31229a9079f04f77131a170212bc64c1701c2ddd54713c0e59f03991",
"0x2daaafebbc63db1ea0a8fa6e5037c4da16a92fceda2dbcb9576fc2fa28b0ee74",
"0xb14610c614c0c0c59e295fde6c4ab0e4b4c174385fa734cc8a2095dd6a95358c",
"0x14ab25c7f34bb626f581d38faef3beee599300a51bb62d3e1e1dded92ddc95d3",
"0x409ca4196a8db10326ca032cd14b7295981f0a779a42c7f0233d71ebfec3b19f",
"0xa283859dca46f41b5ca2f403aaa9e2356bf41e06697b5722b245c68ea3f81b2c",
"0x1c917355509fab582d5556e340b71c6962577da9e189b703456dbb7fb55784c7",
"0xb928315f7ce4508f4014962fc95a5942a5c0ee66af2e125101ab02d04b6cccab",
"0x00c6a46b1b4eaf7f62e2133d454f850ef1dae798d5aff512f607dd8037e53bbc",
"0xc042c1ce9cc355d4e054e5880f7c09fa3bcd58047159fe6b08a02c80059acaea",
"0xbf7b1e204a760ae2782e926e202428312955404786b85ab00688da616682b085",
"0x36d29378eacf4d587bc5a569e8ed572cbcb71be0a016d69909a05457915962b0",
"0x27674967b0e43a5f70ec168cb00df61a1227da4ac61660769ac2a7a2cdcb2598",
"0x9bea8f7596f72268a51be1b993cde5adbbe175ad48334276295687a76f801fc1",
"0xd9e17222c824c8293b05702e3170a059543bfa3e4bdd19828203c7072f013eb4",
"0x170685db98bae956224b3a57e4cf50ae4a8874ddc988f70d5ea31357c2a83ed8",
"0xb8e7344df221731d25fc88dfd31f938005328202dffd0be8d28e9d0392a75c81",
"0x47abee9a0802d59dec86fbe5d9a13a7332d326b900cae4e3841c69e9b25ac788",
"0xc09452238c2890433e14e0fcf826051c752580f147750ca745d1b779f303ef9b",
"0x05bbb06eb270618437a1300c02964c8f854d4a6daaab2d59ff6cc69f46c7234b",
"0x89d752b94f59ad98d59ee317c3ebcd840dcc997efa7fb88797c35477831c695a",
"0x2dc622984dd44a2cbb4313c7efccba85b497e33214eb314dfd7f2be40fee6cd3",
"0xe23e51675985c6a4f887c843048487721da6ae6a6676adc87a805fdd46149f9c",
"0xa452ef2f6e358a534dfc4914a2c7ad3ff9faf2d16fc0b7cab96659cef5e4eea0",
"0xec9f04f090f443596129248d8675aab78e5275c56691444604751a0bb5da443e",
"0x52d8fe33aab98f680b3b7d56f501621a5516d3999bf4b1804b4ec0e845f87ee4",
"0x22dce4da35077c2efdb94c41c6ec7e17c1a3604c3c7b70041728a96c3d533851",
"0x706284df96499696a8c20c7a685493663b149af04afb5635fb831bdb20de256c",
"0xcfd7fa6c9a27e3b9c1f124522c87841a22105c561224de3c1d7a5e441f980c94",
"0x562458d2c5b55b9fe6116ef5cf165aebcc40d86863efb5036d42f1f86a804e73",
"0x05fffdd643f1eefb8083d7c2acdbbd13e076134e05c0ca6bed8049bc747403ec",
"0x1f1d7cb9e496d998ea6f8bdeb31e977dffc942987157f571cfb38037b8585bba",
"0xaac332309b32eb92fd347871dc513987c06b984ac00feecbc686029cd548ed56",
"0x64c449079ba124feb488948f3b17f6e68207992d71cc4a383563510503414932",
"0x0aa5215822bdc1f3151756079fb5435df2abbeeecaae1050d33af6fa1ab37a87",
"0xceddb86f1882bd3e196856e9a43d95a37ef115a4a2d2a86166ae827c7b0e8f0e",
"0x3f368b92f5217f872d9a38c14e5791b72b3b25730962514677e2c069bc04de94",
"0x9ef75df3e9b2e97208b2c4d0917ba6de03b437ccba8e580b9f4023a1c753a354",
"0xaa662f12ed9e399bdfa0e81b7f52c217029166b483a1ee492328d596d95e55c8",
"0xbaee3ebcc9a9de22b3d4067d905beb6c75ec7715d06a426dfba366da9d9b12dc",
"0x4fd3b9baa9f53e6edaa14c9d69f0cf2f0010d9ead83963d96b87b7505b97e83b",
"0x808d62434ef0cbd193a3ec3cdc60f79ffb797ea07d53b98ba1afaa8497cdf7e6",
"0x1da441a4ef8e75eab531c5fadee15bd1a60e93043e6f5b5264912d760ccfd79f",
"0xea233791cf501a1b6d172ecea7ed1e2fcc39555b597fa3ef86f8b63ceffef6cc",
"0x57e04235e51c579d0a7fbf74d469c6a74403cbd09ee56f168a74a3c1fc5940f5",
"0x46d051393b825130670a2d56872467b02033a8eb479d466c6522fc466020e76b",
"0xd9c313e7ac54bf497a315c8af6dc1f3751e10a97dab570b04f80811208f0c2d0",
"0x7219321803c2a129ef429886035bfbc27dd64fd50515c38a7c43bcd184a68380",
"0x140c4deb5543c31c49296e68bbca9d7c10799ff293e05ee130982a6d9f3d4638",
"0x2cb5aac917f6c1519a7cb3094953d9851d5498b954b62b05045ef0fb93924419",
"0x1aaaf2699d5ac7bd2124f3509fb2148dc1c93b940c517eb9d4417b6a6a911a21",
"0xb454286ea98d62faba2a2e531f6e2a42a61e23ea3274605f8e2c776697085dea",
"0x100a6c25a0221361db912b4a491a001032a3cac6909f8d805ef82251f635aaf3",
"0x08a834de8f3ca2dc5f7075f0ef5246f6d824ea4577a3d238b2458676896a846c",
"0x6c0878c40a466520a5b86a06670ff0e1ce97512205ae8c22995d0bc48d9ad222",
"0x6835b4bb12bae675af54580a1fc57f266c050748a583f8b6145306fd3bf86cb9",
"0xa66940592c705e99bccb61c82e6112cc75aad73b605aa09280edeb065718a043",
"0xc565e42a728c1a0211ebce7b5ce9b8088e74ba9b254ff339611806c239dc72f6",
"0xc691d8ad39fab8e168266f1d502f02f269c7f44ddd055dcee529136cce2b835e",
"0x34bd34e5e476acfdef9f3c260a8d6f9d4236e58a9fe60aae99c38f8fbd465b38",
"0x9bf9269591e17668d01181d6a0d71ac17b494340e47034ec5f40f91f0bde9f58",
"0x3f3b051eea4259b90aa1063772ebf6e05563c7de791707bc8e35cc5ae561d110",
"0x7021c2db5c4df7a546d99750bc905b1a9f846afc688b7a033653feb8a9afc12c",
"0xfc7b212e599b58ff35eaa80b49ead63215ea826dcb3edc4df7500334cb929935",
"0x6cf11be5e7c9b94e24ab241b7552fb5bb089ef9b3dcd62bdba020b0332d4cc05",
"0x9353b5f84c414f0274732975cd3449a7ba55aba6665b5cdca14650e6387ffb3c",
"0xa4717f0fecb6a35c60e9669c8a754c1c2d41f6144cefac52531f9870fe0351ef",
"0xae685fc22226cfb05373350506f1f2072406b3d391a4b57ea5c467a9286ddc3c",
"0xd91482bd0e080649387aa580e255d77c197c1734a692296b27470d8f20d971cc",
"0xbe97061686e83466182be54cfdc721637ef26e99b247ea68b814aeef0123f076",
"0x8bc0768fa4670eb28beaea6ebe20a7acc0f23832154b61515bdebc9e6e5aae61",
"0x9570703dace2ff11a3e8d61552baaf3e5e812eca124f42210f1300ccb2116158",
"0x21a68948d1014f8e541adead6c9d0e73f003dbb3cdc145cbfcdaadb1ab0449c9",
"0xad51740caef4a8c01223fe11d7346852ed0873b38a65fe3ab1948e5946e6a8c4",
"0xf5b3e50890db272ac29b8fed050b89a3c1260563466cbde8aa6d50ab66c28a54",
"0x635e873d51779460b6b4dc2683ca229826e5a40ba0f5963a0a27d02eb0370cb9",
"0x13302c3e93380ebbf6b54be15f792f0878396dfd9e8da75689e4dec5f30ca85c",
"0xffb0746ad72d53240895bbdb07d1cc5a94bcf4e6422c0dbe7b2b3fff57587271",
"0x1cef16d47f2975e4517a9bead7df47d7e0db677c68d80e50edca3a81f493cdb9",
"0x50824f81d7ccbdadfdf5fc4b082d920d1416d6f3e6dae3a347e71993a2565ecd",
"0x10707c02efc13e50e5b1a9217ba2602ec77dee3817385d145674eceaa21d2892",
"0xa281eb9159884095b5d3584b67bb7db899464fa176cc90800ed8ccf23eccb4c7",
"0x2f63567e75786960025334d3772571f6fe1ff411b6bf867c84c1455f3954ef13",
"0xe1d9eb8d78fb1365f28d4112b14f3d5575a68f1160813f0d0a2a1faae3266d1c",
"0x7a7dd4036031fe92e19c41af52f5c039fa3c12430d5b79111c568681b640a2a0",
"0x509e93ce350453b61b502de0f87fed794b0d77bb6878225122eee67a1414320f",
"0x679778b1f6732382d834000d24a94223b69a0a88b56d0c070b659fb2daed668c",
"0x49963e1807e7f45e132a7e3d2cf7c10fa0e1c36aae866a9641cc801ee8d261aa",
"0xa1124f9bf0d2b0ef671ddcfca3a66a86545cac8ca9ecc82631480ca091ccea94",
"0x9ec43a9de16fc83ddf5022891c6f5593796122b9f9c72803373c62888c5f9198",
"0x5af071f137c5584bc1766ef4ef092fdd8f4a3a3a64ebaca50b169a22e32d2542",
"0x5b3ada30dc686e15bac396821debd08d8a96fe1450e5180170241cd6527b4bbd",
"0xe56f8e15e3f74d77427424811c6d03b2bc98f010750c6bc83c34b8eb94bee0d1",
"0x5dbe293dc9f09c20091e29ec20249a9b1e52e28ec863afce106f03a75b88b111",
"0xd61adfaf9d822c3d8e981725a42113a13abeb8f887f16e0ae021cb23d7255a2f",
"0x1efdd0a60ad05c11faecde65b02f3ba3fb85bce685a9b89ee4e6a94ddde4b7d5",
"0x60613e04232a203fe161398acf4346652a9b6b9a07837fcc06f53a950136d911",
"0x1b9f0c43d87ba4efaf7781da46f52a6eff60b8c9ca6d81dbe02bf6774fa80047",
"0x41aab71c01968d0cb73fad35b9839f6ba2e8d807852ac9c6f1220d5aef866f74",
"0x67ca5da2f269bfea45e0ec5037bcb1e467d5938eff17760f6b3c5ef74448af69",
"0xc16c2d3a36275d3123d5d95b6ace3bf131af1e6e07de185a8f4e335c5a3cfc1d",
"0xa70dd20159272a4d8e5efe456500a1f710a271b690334e98862a24d31d4427f4",
"0xeb932d05a4e57bd9cbe363a96cc616d0aed481298cb38183bafbaed9384ed27e",
"0xad772cc01c6537fddff8eacd182680e1e8b0d203bbbbc317a4ad9c1e7c1e4b71",
"0x81d7acf3f3760b06a68257654e4b0c466883e3198c61ad71decae53963435817",
"0x33cbfe14923923214b2047d445696b34251f70d53005e84f43e383fa1dd791fe",
"0x8a74d3f3c775f619f9225388fb5172b187141a8ed35ad794c40b2d278e6a388c",
"0x9db16af2961834b804e6330a9f587512c92a137b8656bc5baffb227686fea9db",
"0xa23c0d4f859ad30a4b7d3863ad16926faf41b4623e6adf9c7f2a59815890f4ee",
"0x97da87b047a43970a8e537ed5cb15c0f28885812262e8119c659a3d1a92f8aab",
"0xe0a2d92c83b8ab1bfaad4bd1e717fb5dda967c001ec7662815042a3544bef441",
"0xc70983fb6257a34bd43862c405023db2112f0b1c4a11aebc23ba17eee3ecd1e5",
"0x05798069ba546f61fec26ddc4b260fcadad3a84d612900ee2afc84e10dd13358",
"0x1d12ca65d3a55ecdc19fa4135e47bf470bc6ca85fa6639eeeabe951d9d0ddfa2",
"0xd47f4b22fc0326df733607783934b1be3818fe057afe802216178a450f507c17",
"0x4d71d9619222c0c4ebd0fb25da7e53358ddf4ab2cbd962ad88b37fbb331442ce",
"0x2be4b69114e307d117df01cb568d35f79588ea70e9016f865f641614691cf7c8",
"0xa87d1304e2462cabcf90207b81a058ae766273007821ac98b718467792eff05c",
"0xd94b7d41761d34a27c5cf565f0e92fbb65ccc3e8aeb5b1c1d9d233b032f071ba",
"0x6079df72e53c3f1793bcf5a4d22ed2035e31662d45bfd210c4bdee475335039f",
"0x85506dcffd6342df61e673ac01219c58198558bcaf7759eb2e4b19925ddae8e6",
"0x6a19a7212075395bba890eeaf4709c7025af6ef3087ca86671da478c7e49ed83",
"0x62c52d8ad2b6c000462358d31c652b280bce3676f103d7182fd3646a7f007604",
"0xa600ffa0e6d161287d9b9bfb13ee9dba74699e542aede1278d5344e6688f0382",
"0x7404c9ba05ab64a8e88847dc725b132b627686f4531248ebdd76dc76d42a8b36",
"0xff0198b39d39660cb3c74d455b4019ae0f23fb181378c207bbcb3b79587b8558",
"0xf47db7ef987a8cc32dd3f61b44e6812c940592337c056570d265e1604ef49f4b",
"0xfbf7eeb0951ed5c4704fff2e5d121b831637a86472e32c24a7b85e9daed5e1e5",
"0xdc560bf4b2d849ecb777a4d2d8a3b3bfd12c1a4a295531573fd1d493af34042c",
"0xce32751e3958436d8aa727ab6f89d1354cd0373f288b40395e9105aa905a1713",
"0xdfb4595b9c8bce6108ed0b550f920fd098f6757a3e64734fa97fd5a640c962d8",
"0xfc557009bbfc0b2a47eb486002568e963a32eb664f7a55d81335ef6efa79c804",
"0x9dd310e9b00e69b7d0b0d91db5095065c78bc91f2321df8b5622a490ef940626",
"0xd4ca936ec7acd0d54c6efd71cc6c808573482f2510175ac6251f1cffd7a12ade",
"0x465a05fb5c4c66d0bfa64097c705eccb50bafe9d2ba223ee69111b16c2014c02",
"0x634d4372ed9478b3afaaeb35e316f71cc5d371548260eefe273c236501d5616e",
"0x16ebd07c2e0032fb1c3722df3647e74650b7c1c81f4e7084149a30524846ccf3",
"0x32ee5ef340cf87e26642d11d619eff9ab9e5a1518815b9897b6a95007e2b7572",
"0x47ed528e27c42d8a4100a84957ef81a4784c0272f5e3cb6a68212af492a844fd",
"0xcc376aa2c1b0b49f96bde6390d5ec296fe7d5671d6bb5b5df31cdff2eb5f08f6",
"0xdde8938b019a5e587a28eaf579b5e21892bfc3475ce75112c4f1d9a5ef65dad7",
"0xd0b4c6d8ca3d95851c34e729d9228cfb0f4c4efa7fdcac3d96ea4e4d3e0c0189",
"0xb441266ed512646050c73207c3d88869ccceb7584f3325125a5511d5b05bf5e2",
"0xf05a1a620f1179a6ebe9281fac034638620155bf9260bba7df47d59b54789bd6",
"0xdba9596e7229cee4c339fbd182b0ebd076309e3c8d3653060a94dff252ceca19",
"0x30142242a511348d48171bd65aa191fea095446cefc49967fc7ac88964efb4c9",
"0xed1b743e8baa487193935a6d974a7c417cd42fb761007e5ef168f35486cdc2d2",
"0xfe54e8161aa159b9873dfd4f2d3b7bfd5cc70c4625855b70348684c7a19acdb6",
"0x7993784b62dec4dbdc595450f114290152676cb6938fca76e956968367e34519",
"0x2efca2f1900c2ae1f572342a077afd97fccde2b2305ee0b60fbce8240d6779eb",
"0x99ec617f5f447a4608d5bd96ca375a33a15894270ce22091b60f308298ac51e3",
"0xa38427232204d3f8e58dacb6495799a6c21e60746d26a438d8504dadab3a9bbc",
"0x8c39c623cd06d598ef78e2c46f7506523ab9ae5fba5a7273366ce9a3d9bb977f",
"0x9e15df3655d1a3acc064309382a41e0f7db24925ebf1df51e23e0693d9b119b1",
"0x69b4a6a1cdae2b0f84a18b712286ee304995f6073b6c81fe7ee544ab1d17539f",
"0xe395574bbbc54fbc2e3dc7f363abb34dc760bc2f6fa92c980d26d5c9df5681f5",
"0x1f863b9112535a87fa2e28cecbe0af5c22dbeb41558b93cac0dead527affb06c",
"0x78229983620efa77087391d04057e1971b2ecde2c9f9d959f769e18c1e07a8c5",
"0xcb72a2403046e54d6babc6cb9e2db5f79f09a9c45f983dcf595dae3fece77570",
"0x5267de76947667220d218ec4d1c3db31213d991e59cd0f8e4e547197e4f99205",
"0x55b03de02f92b3210a614f8d0eed98e056a348dce7dc03dc46dec5f7ffa942df",
"0xc2e6b807b1baf078a962a9bf2d92f91c0b326cce0ba6ff59c834b812e55278cb",
"0x94073fbeb062a2fc6f1a0450776b598b1a26aaabb1c1b07e79ba0a816f63ea26",
"0x2521e9b0d16b0129ae594dbea0a2fdc115c379c6c754933ae4dbd20091e8d148",
"0xd2e288fcb68b22fb80e5591bca2524d7a21eef199c3c333a80218a4eb698550c",
"0xc92539e422408c2bbf932556b096d90cea0caeb81e29c2c92552d156c2bf8399",
"0x5ffcc95004131253c4b32e34f7e1db552938b092f7343f501e15554cebe914e4",
"0xea70a44b30ed6d5a7e8e9f85eb8b70aaa05320489054faa40e15989e01ba789e",
"0xcccead6845a28d610af1674a474bd77a5042ce93f682f0c4e879cb0c3e836320",
"0x3ee01f8d3f6948da18f0212ee7c990bdc2ba2eedd020d29461d9d558ac9155c8",
"0xc5aec3935dcbf93026bcd8e24632e405b56ba1ab003cddc169b41372ea6d3a59",
"0x1a9e0622cb0658017749353e3167f38bb1961c4088442f124c1ceee2dab52945",
"0x2628f184beb5baff725a1918ad222900d41a1c3911eca1f272b484fe103ed4d8",
"0x2a03c227d307eb99185eab66ad4fe4b77ac1a0245ec28bf4d87702092461c275",
"0x4664e5b9b20927813f129a23414f319628243cf2ec6d93b0779f0bab5c602803",
"0xdb8978d3303d1c40d51e1608a24102af93c15ef7a82bb3fa8f9a1ffcccf87bf9",
"0xbe63631e76bae0c7eb4ab34abae21f9c827638954578ab93e823d9db8212c08a",
"0xfcb959859a8eed19f6cfabce408e5207206e8e0f96924328355a279f9fe9779a",
"0xc1f2e02c014167d9456a985c669121d543e39a8957aaf328ec1779de2803ee99",
"0x3261a5631dc254f335cfe69cb835f61e11caaf9b0299f0701ebbfd0470755313",
"0x02d30a73d3a7fec6c2567e1f2861113428fae47abcf76167ec432da20515134b",
"0x312e3cc2897aa8eb766bb4d0a91e160884153c90c266d03bb6efed08c4f48cc1",
"0x00f196dae3153faa0b4ce1bb9b3122f76cf1c1398fb43f8aba95037b8a6d797d",
"0x8e4bb4443854630bf0835c3644270462d9b7e8f3fa409e2c8c420010c8dcf0f6",
"0x3ad0e8f5abb1238702bbd95556ac9a9018f4a4ce107bb2d87b7ebc76b0b723ea",
"0x5c78e87df5d32db813c9e89d4934a18490f9ec5e4f2e5e66941db9e6c8dd1129",
"0xac6749f8a149d465b9d98dda8283425ae7e27eacd803baf2babd9254d2da0e97",
"0xf68f70077a1f7d69e5afbc259adbd51fd97cb78e45a38bcd698922ca0f2c17bc",
"0xc6b1279ce5d96648642dfff31d3bf3d989de50143a69dced098f883f2d58ad36",
"0xc4655ffd7482e52531cef2edc1f259f384d69a3920f699f6443e92386a0b63f0",
"0x28ea7302f04d4ff4b2c40fc150908ffc34403d7e5d756be4e980983e08a72db4",
"0x87d6de7a3cfb49ba01d006bfc051c5d22c2671eb67bf3af87291d34bf84dd328",
"0xd156e6fefece7a5613122c24733683863b9a20f7fae1cd022b093c9dfb53b366",
"0x5501015e22d6086647d60e44df262d70d4d8921648bcf366e8442cfd8421e83c",
"0xfe520098dd0cb9422d83d4a562c099bf8445c25e93b3b9a410319f0300b710dd",
"0xbac6ee3d851c6d574004c6645647b2ffa6a3519f13f3ff9529e5924288815a5e",
"0x3fbbb9d0516549cb952f1be5ab6e69d60ef1a8369cfa4d22152d006d886eb604",
"0xbc1843d922c2e0ccd1403a0da02b4f758fad4f02bb09ab823560308826149cf9",
"0x9ec0d3d14623babe08dbba627c2d478ab34a0a0f46984e528499b86755bab02e",
"0x98715273786d911f75085819b301792d241d005934e2d93e8e689c8a5cebc5f0",
"0x0c25dafe9a23ad5d17e97f23782e11152f548c73a0ff58fba9b3a64aa26cfacb",
"0x7a8fc37c03b6ce7d275c2a4160e883787df5010892fd6ffad54dfdd70a97168f",
"0x342816670945437b66e0a12d5eae2d284176a54cee727a5cff6f5fac83845864",
"0x40f472f8737a813a879eb762f085ea5966934e1a4562b212b11612b5fac059f4",
"0x865b00c472ef94d6d9b038f328aeb2eab1e81cbd2da3c4720257c8b4b8b41e76",
"0xe94ee97f38d8989ab6bbd137ed9bad8529c543910e5a328b01fd5571ed63199f",
"0x57ac21373529bdcb22c053797736b9b600737d91ccaf296ea761bdb9d425ed74",
"0x4c56a968ab57aa36196bca9841e308e4ecf366b21891cfeeeb4a7741caf00bdd",
"0x79e087e68abf35a76d839a0792932730441d2f57506fe7db72b9b91b3fbb50d9",
"0xad2df80333074a637b0afdf1dca51759ebb10d7d443adf507f41a99863b2c7ef",
"0xbdc6c77a8ee0b979cfa93d42e4b87c9aee8b0c19e6f19206008a5d1083909478",
"0x369810909434600983003d17fd321e7e73dc4b8ad0e73d925caf499f2b836690",
"0x4d3749a7865675e8a3ecf2b1af4b7c3250a311ca8d20449e71d6d8ffa33a7536",
"0x7286924c10b2db63e61041976ca7c6bd3d6b1ddc69eac4dac03427e0460333fc",
"0x33edb799e39ee239790c7d3a6349218284a61847a235f9b6978accddbb57467c",
"0x0f131efecd5a1deeb5267f4f99e64ad2dc84532f7698802fe500daa8c306c1e6",
"0x96f48183924cca8948eeb08c3c5320aeceaba747c7f7ccc321cf17ec0704ffd6",
"0x87a8c9e79f17968814cc145bdb1325a2b5740cff68f1ef7fc7ae42f20729287a",
"0x3c9d17093214572bfe4e6438528163d7b6e24228dd15ec1986924f07e8b9e197",
"0xe9c033c63af4230d352ee370bcddbcf79a284e113ff5b8f559d5d958a6648f2a",
"0x331c86081b46499c6c0b23304f562afdfa467ae8b390e22718f2abd96dbb6c2f",
"0xf783b03698791d07c2ce40bcd9f69e6f04a4041cecdc85e17b96e6673f57d9d2",
"0xb886c566152b6f0fb43d8eaae97d8f6698caaca12845f63e6b98872d7be91429",
"0x70abce391cbeb52597c5cd3b3668e33aded768c797a1c27d22ef827c3c82e516",
"0x37b6b2d24a95cf8837b6345b7646e48942b1dfc26bbe8a0026715501e56d1d71",
"0x95d0f6f51d5efafcd395e79b83facd5886c4cd68fd725d68305a8bd3e73fa818",
"0x839db36c5e8d539cd87c2fad2221a95728d201e27aa0f21e48c61a4d50088e6e",
"0x85370ab2418ca50bd86694bebf26c9fd59f7b737282375f1a53c06d1aecdacdf",
"0x42270a3434074b79bf19b043bd5cb7a819d5639461edd5eddc24b336fdb39428",
"0x105f93a4dbaef09de92dcb0fde88051d7cc267ed11ee0433c2840ccea459fc81",
"0x2b97bb02b8447cab790dd30d312471385d233b89dd135c0fa59ed763f7f1a5dd",
"0x39d6aebdd41ddb3937963660a188b9e840166fb249c2859cb442588ddaeaa2f8",
"0x635d327dcea329de7bae55e025d4fee8470ffac2ecc8a87cb2a796b822cfbfdc",
"0x53b87772eb46bcb5dc54ee6f2fe0c8ec1384bf13e02057cf2fc551c657a961c9",
"0x9cf06b583c647f8c5e875c6d0cba5ffff00052620c39d49a04095cec4d4c8c51",
"0x917634c039976e153be529547de0799bfb23b733c5edc42e1e54b3e6ebe55d11",
"0x108e5ff2b56ae17fe3dc92203f454fda904dd4e15f4732397fba95f38b632f98",
"0x4bd32df511cab41fdcd3a502704c74f3c7b0eccd352b82b4c3c28b0a844fdff0",
"0xd8e04779971d970f01a77212d1ee2b8926d12194ecfb756f9f83b524c072abfd",
"0x1f0226a32fd46224ee3d9b7424df992847a711660fa1777ee8ec699a255a3046",
"0x9dbdd6b26f1fa61ae7fa8c31bcb259c754e2827d6c6f6e7a604ea84f54770255",
"0xaa59f69dc2ac48f6e2b06cbf95e68ab1d0971ef6ea4274ac4e24263d01a2d0de",
"0x217ab35702c7c959e994c09f9a8bbd939b9711c3a6c4a57d03b02d615561cd13",
"0x8016f4e0ab60e64c8ece505bc77fd8ae9a73e663200615679692057588706ae7",
"0x1ab438e4d7e7ac9e9157c2a43fcd730f7b3bc70676a302784d22dc6e9d7cc1e8",
"0x902a3b829ef54cd702094667296ff452eff0aabd04f76046cc799331da7296b1",
"0x80d14802bae3c50cda30a6830db5122e72f7dcc67544d33857e1153a49bdd710",
"0xaa73faa4c36e080065a0640acfa4cdf16de65fe6aa1b0ed74d20ab01ef675b32",
"0xf129f354afb67cda78b4f05e531e0553b512f8238278a7388a8ea2a26d4fd5fb",
"0x8ac7e8a496a2c3465ce049ed69c0f1a671714369856d705c1037cbd193106dab",
"0x0167c76291a52cd70b1302ef3bca9e8449d071761c1e5520219d70344e0b39c5",
"0x0796256c466d0f1a706462c642813620e7acb3ba0e17b606bd464edd52e0b491",
"0xf9e68a276fb7585b978ccd0a5d4cb07851fab909fe223e1534897574745ac585",
"0x215b53c58f116b3d45669d5257644b866639eede3eebdef04e171d9415247eb7",
"0x69425708be100d1e7402bea70be42a2dc981ff3a4d7c8c5c859283c06d1283c9",
"0xfb0b4c899f6081eb3e2b4bd4d32554c0c34199731d3f80976ac3885cd62ca5d5",
"0xe07304905487800ca8bc3357236b5b4971ccc884612d4c3a0fa903ca4ea399ae",
"0xfc0e4e84ccf10d44f338d76dfd0562cd47db6758dc7f3eb08006dbcd577c5dbd",
"0xd198d19f531de16e174f85a4cf6d3d2d0f326de398f027223f34534c9a6e8634",
"0xf5f6dd24e48fe4b37a5098700dea861fea66c835e81269ec20b911fa821abc8d",
"0x6930e75f5170de31a5cb2f899db422feb51f080f83f49be83951eecb5f913793",
"0x5a8d5ffc0944ebfa1273e0162e766fdb34fada198583876f0931e331ac7164c8",
"0xc6a5ae3002cccdc6bc302c68ce171dd83c385444ab5c04c66b19bf67255e298c",
"0x05c8c483696d2aaf79f985706ff9e84c9ad08defe8399531aa0fb3d32fea316b",
"0xc226d5d5d4df247a1e5cec4fa6fe43605e9ecd27bb07b9c220c4b6ad5a4e70ad",
"0x312cca0e8c4b55bb84176a54926d1366dd5928d9859f1d2ad2991e0fd9624b79",
"0xd0aac977184cfbdf53ee96ffb2e0bbcb85a202b5c6ea02f9989972c70120468c",
"0xdb3b8102d9a9a363174e138b292ca67020f31fc819cb15c5cb9ee34ccf2d2f8f",
"0x1a50ef2cef7ee171832dd9e9162125e51e6ae7c27d08753c30c4a03cc68cd473",
"0x292ef1d673e8441c3850d68ce27faeb572083864ec22f09220cb9f4fe32d560d",
"0x0cd5290d348d7462f747030cbd8a38636f1549023f8f6379c244b91420312ab5",
"0x2a35347668b072eb67d478dfe9146822e77ac78abb4b69cf57478a87c4f5b794",
"0x70d10e3336ea822d3385352737397cdc660ee71e07158fc1ffd711d249daa841",
"0x1f9d182b5e755e9c0ab2f77a9f302b01241c4d235b5b717237b96247a9157141",
"0x93ef750e15a936c2fd6f047e65affabcc2c0b5bdf3cfb160402dd0696329a654",
"0x17c7f10a273615b0f8df2044396e3f0aa33b46ad053bf6ec6dbc32273e66c4b7",
"0xc249c69c4c2d40dd9d0a7fde388824ff734f3b8c2868d1e824a52b32dc05e58c",
"0xc1c1f0f9ff1c472a7e84ae89f8da22575df60fa7f9479fc3638f2f0d02509010",
"0xb563144ab0b85113b0e30109cfbde500c28faafaf922c81939dcf9f1ea469752",
"0x80f88663065d058d2db7e55df1af8035c810e36a6589f4b1989794bb32e337c6",
"0x25905f6b1188bb66393a10ee044c6bc197627d83301f766f4900d36cbdbdf8e3",
"0xb73cbb759230184289722513df452814de312c90f8726e77b129b6e37e5e803f",
"0xff19c1a15bf598da49fc91d04c7401c88b4aab08fa926e467779fb14d8f8002b",
"0x71d46f2c6a4d7291a9906df0beb183d495248599e40c41da6ad30ca3fe37f43c",
"0x5a00726405d2db913571b141053892aa41faf26644c6788c16c8f417df49ede2",
"0xbb046094f514ccd722d224a2bc4b6b473c760224a7b36ba09a21f149cc244e1d",
"0x8b0d483f156f390376c526acc219070a9c393df731b7115753e934af20940621",
"0xead2c2100390e48bf720d19378964dfc1d0071e28c1d799b2d5d529b118290e8",
"0xa4169df4e2f8662b43845598c58a591e6fd17574c0d567d7b702d3f12d4b74e7",
"0xe14c4be058238b81d8025fa71abb580aeaf52d4cc3aa4f05bd5b24be77479fe8",
"0x81e58c707025a640a9b014046559ee7f827142474606ac24ccbd61557b0a7745",
"0xc1717626f785ffd170697d0bd148226d1916f16461796dee609f59ee5eed3423",
"0xdbe52fc3e71b136881136693f3a318d9e3257e6a0384d17768cba6c84b1e3ec3",
"0x7596e35148892b5831e2111a168ea56a59ede2f2222a08f8d82fd235f09cb267",
"0x130fdf1383873279e44ba21c7d1d6f962ab3d71031270a0e5f57f12f90eedcde",
"0x0d52be29476a3b4ec79a432554198255be617f50ddfa6d614ff5b73302c44067",
"0x3f1edff4b943e5fa15bddad5ab9e3248db0335359af255fd6efb66c8b63bce69",
"0xad9909d1fdd9e1de3e6cbca641e42a87e3fa254a0498085790b3e44e6ee42045",
"0xaa166286f4e1799f9ed1033861eb8b2117810d08dcb29cc3f7a3fdcb05989780",
"0x11401b423d204a1df2e918882c3f795e9cd1695ad0badd77532bd2512eb7d1a8",
"0xa738bfb7ad265db50854afc6d8988d5342ba77d7021ad5d5a45efd582b6b6bec",
"0x25051016399b94cef771f16cef661de81bca5f3803c96c602dac42d395679c15",
"0xeec18e2c9d76a98455ea4e50f744926a13b9ac8c6d0f575128787cd134ade901",
"0xaa4a38ed3e461643c1acc765ed8f27262eae8ed1dfd6659c4e4e1ea080f42363",
"0x42760a8066850088424917edca117faf1df6a05221216479aaead8ba11286400",
"0xb3503c3841ccf8bc2853eaa618435036b976c9e77d1e1081a5fceb036091f9d4",
"0xcf5979cabf525d5b6cc1199358688fe0bde640f6ed95dd7c30a6f42a38337cc2",
"0x713df6a565efbb13da4161b545908ac4255af1ce8ab229146ed00954b3c58e4b",
"0x9ff3a78a18a59687eb99e54ac79df1ac920a3361b3b5416dbe95126f8de3074b",
"0xbaa888556f1a519b1b1acd01b4ebcd9132dd55bfec1bef0ffae9408152333fce",
"0x5ced4fedd95a4742ee250948c233f59587eb1624e3adcfb6662f9d81b5517bad",
"0xac1d2706dd82b142b8a629b42ea5c4f13286af59d24f21b3bc36ebdb4eaaeeb6",
"0x1d99ca18dd1d872a4be8ed45385d0898215041f54e7c8e7f3252ca212b4eba3a",
"0x1dc60cc7789fb6b25c3d27868ac49136e09f6bfeb09a20061781ef14cb7c670e",
"0xaec01b8047a0693e78b6ed445396dfe6dea247997ad32747896ba0e30a20d2ea",
"0x977779b6e2da8fde03c1151537d2e03facfd217650e862c3fef07af71f34b507",
"0xa1634dc9c2bdb48762a7bf7b41b74a2e8d4d731b15792044cff1ac3b416fb28b",
"0xc36b6333c28344a360214708798c125adb5e2cf8a2145a216e303186b85a8f91",
"0x1196ee872385c8fea747eba6f5b4fc6f30817714e86c28b657c24593ded2e0ef",
"0x8dc3ccff642a29b46266eee8782b9a9ebcb171ba154c5dca0ca5f73fe24969b0",
"0xa9dbea651bb7a362e526744229b3e1807705ceb492a8e4bc54a9a1f36102a9c3",
"0x0bc82693277412688a6577a6bc95ce99504a1a50904f49b4b4588538f506fbf9",
"0x8df943b0847f1de48f76d6dcaec5cc7b0d7d839ec5e6c8c887f6e5cd785f53cd",
"0x92f4a5577743eb6c34134fa7867cc7d8836fdfd4000abec8cbf1460d136054cc",
"0x047f5f8332e788d1b6be8a3ecbebffa80ad6df670cf4eb4e76a6f22c5781ac14",
"0x392652a55a85300848f43879d9a45d8b7fe5897467743d51a9208b2ac0dc029d",
"0xfa2e6a2cdf4949028be0772f9513169815fa9af20c53ce188680f09f57efa671",
"0x0b86c1c1e683a9e6debddb8ef516b16fb15709b87dcd780ad6cd7f9b9080f4d8",
"0xc8e942935b64b294ff66d4fddc51fc83b0097772bca50140e738d4c034b09cb4",
"0x0b783f8b64650bad1753e4f86fd66b99d7ad03d2da0460bf44965a1f443b70d9",
"0x8a9aa339e78f09ad3d2ffe3999c22684d519219b787ac3cc64c772d1e6508392",
"0xb8a2303cb9d927badda947a962311c699a290545b597f0d242f669392076facf",
"0x34a1bd076dd55dc6eb2e675c5231b3cc8f2a197194c86242c9c5c052a6859d28",
"0x0623254a886ba8bb191d3340e9705ae52e71df2717c6e84bd07a759d1f415d91",
"0x37d451749a48d1cf4780f28360c5445d3b749d8b24f065db07b8df89facab6b9",
"0xd73f2404b935580681cd7f6060b17ff569f7419196e67596f101b6b1d1d913e3",
"0x45029ea3cd0d90900c46df72e6b182bba69ecac1a9289a4719b2f6008f11ffd0",
"0x23315337a4609580ca1835f370575bbe025d2ba5447b61e583119757debfe35a",
"0x581bb3ed8dac28e597d89e9a211bce6b011a4b6dabf001597b68e5e8c6ab7c8f",
"0xb71f91dc1a2eae9ff7e0aacbdcd3d8a77302437ba0e9d327790c5b92c7603ac2",
"0xde661510c4713c64961a0ce9db1eaaecfa509e66446998450178c0afb4f5a670",
"0x9070334bbe9fbda52e42939155c43daa239833ed2d952eaa5eb4d5fa8d56b708",
"0x7dc07b309fa5e188f2e417525e9228b80f84c6c36ac00cd3e49defa0e0146e15",
"0x2e9ecefa3e28f4b31b876e5d9214877ac00be6e7eb65a26990fdd5a2799dec54",
"0x6c4b8dc62fdb63d5da2e1387a50759e82f00f7b3cb9c4306d98fa1a4630e0136",
"0x1244fa807ba8ff8a27b88ea1146c3386e96995ab1d7b0f491efedb89a2400028",
"0x7b18bd023a26e920b03e517b3399304c2d277045d2bc62ea7ca0ff8dff1e453c",
"0xa71afca6a9475974486a698a897c34cd6b5a7dec8023c62bf252f60b3d63c306",
"0x4162c46dcf1961704d020fb0bbee7f9c0ea85f4dfc58d6db2c09f5ef0df543ec",
"0x651d2fdf296254f97528a2f7b2d2395438b1f58ed11f4d1cc076f1fd04912824",
"0xc2705774d530011afebc9430c39aaa28e27962427e46164822bfd6da9948887e",
"0x9c88eb61fae9cc442bb10503b32a439b771f8ed67d626c4980ccb3d53cd24fde",
"0x8f86c85d3df630b1f292217035ede6ab978d9388fb6bfff402419c3de0a8406e",
"0xf8946728a1deb862861627606bbfb887e66d743d47fe03048b9b1799e083c5b3",
"0x023cc1ee86a5dc550b934e28e668e3de2c0a925c9c0dc9fcabec34d33da07a75",
"0xa40e3c2eb6531a40239499165490be2d6a986f356c3e50c4449a81a9ee037df2",
"0xe85b21c59987f25bad5ae1ee09dadf22ab33530cd907ed72819ebade1e2b84f7",
"0x9acd8cc33e4e79adffd4fd50fab9ba6025822f2510b165d547c3bdc037cb7629",
"0xb07c7c23039d83efb37b63873d4c7dabcb4e9265bad35f9a1667114159cbefe9",
"0x3b470afc97f674222850a489a3c845a1c68384c88c03ee3946ceb90924c7554e",
"0x669492bc00a496fcfa5920c9617f74170242d2382c4cd231d22e48e991b12687",
"0x0e4a605fed37c87fe9bb0de8ee63f571785aa3da8767093cda45da51414a38ea",
"0x5a25cabd5470cf246164f60ca6c963a3960550e684ca051958c2f768af92e227",
"0xf6dc542a83245efdddccc4527ce125c5e4409045afb2e57e11941d4d5c21015d",
"0xca22cafbdd6ce48b7cd3700090a5b9ce0dcc267a16e5a6e55df4bcbf681f7e88",
"0x9d89784fcd3cd9a0fe85b82d2329a1561d46026abf132289126d001cd6507bdb",
"0x7fe02ef1e87c7b1294501dcf0fb97fcf5b8f2b131ea00b3559dba67feb7431e1",
"0x0c5870d20c5e086520c1a4fe39d09933da794f49b5e4db186b7fba5f55751334",
"0xa6664e2bafcc0b548a41c272568d2a3ffc0328f64c3f4ac80e3c0dca18253ebe",
"0x539fc6955f7ceb8b9b662534e98512be388ed59e3e3b2fc21226569c3a85f272",
"0x1f4a0c45d47e378f8c0cbe4603e6e8ef3131ca7cbd4a732a4c5a081bab3cb381",
"0x1be1bc472e060fbaeedee56fe03a42cd74afef7321904c64ca7d384ecdf39be2",
"0x3a74f2b96cd47864ee7b113651a176c328c23059e9b8f8bc2111a071895d2bb8",
"0xdc05d7314a2fe10122a1a4f037b96e960ce344202328932e8f069d3801881606",
"0xf5b2462912f2a53b8261d4f63e788289213ca566ca915f59969c79b6698aac80",
"0x8febf165b4673b4762bfc7d1c4f8a82cdc5649065f080bf00e843a0ae3f3dd53",
"0x1ed2f84e593f6356522b0bd4606209b1291518a7ff708d21ad8765572292f3ad",
"0xb7af3b32db199c91881f8b7d23f53376c310cc1cee191cd62a1878a229dbef3b",
"0xd5711bb07409bb27c5fb8164cb2860c0d6583e5f5f5882c6e6e74b0cfca540a0",
"0xa8d7cc512c42b6028121f6114b974163f687ac19a5c71b1c25789a7ba8f38236",
"0x72f3aa7c612ff18149497e90fdc03e766686e37209573a3e5bf144a9a010192e",
"0x6950075793f3170d754bc05fdb31856d6d15fa389281c7e4f73d8c597b1aa4da",
"0x34f1a8805f65b0a09f1e5523a53d35cfc12dfdecc22e47efc80ce209d40dd514",
"0xc348d949ce4bd0299853e6d616dc292a8d33485ad93924f7b9ce64666594a44a",
"0x0f828822e7a2250d0b8f2b819ff27631f5d50a3168874ba1c1922babce345fe5",
"0x92c5275a7bb840f9ea612340bca5275dee489cc7e2b13e6037ed49b3606ec01e",
"0x29e227f64c8446f49611f9d2dbe04b8328b8165193b5a0a2ad8c337e60d7ae74",
"0x4032647c4576c6e4f23dcf87377e7a403ccccb4785e276d404bc8e6fd66aebf4",
"0x971070530b371733bf83599364270fde641d64155807d36c8ec79e73e3c990ac",
"0x52d8cb01d3999e01141667df6f11143754e7cdc1b12f5b5bbe5e16f51af1acce",
"0xdd821e13bef48af8e79041e7a5e28db421502e98aa41382d2a89480dadd0e7e5",
"0xa785dea19433b90dac8703f0b075df9d3c91394826e6b8b89abd806f5cec6ce0",
"0xe82804babcdbf1af8f6fac1dd0076550928c372d0a9dda8c0560a6f378e2c970",
"0x1dd41ff3d620b1ae3725debcb26edec36cc219292bf651fe9305a0fd08523042",
"0x9e2d84e8a10b32fae0b29b150f747041b8eed743d2e3026991c31c607839ba09",
"0x79ca039f12ab21e7ecb6d6629a501515d94a56a3c24d669474624603a0ed0c90",
"0x7cd387f75eadccb5aea925124377d09be0e7b4a9af6463dd649213c5af521236",
"0x31fa2bb5eb784c0dcbdeedc7d439704bd44294ec2bb1b4f49e6bf508381ed521",
"0xd0772b6dccbe61b5b2cbec0a95a9542fb9b89e9a75b8324e05855039c2914dcc",
"0xddcb84f63b7469935bd4f6ec405ecd619a5539c89c2cd28250065ba9b4984838",
"0xd866486a928c2a69b054339b5e57bde41149c63e6e16c066046e3fe8018cba2b",
"0x7246af9a036f7b773bff1b2f9b388618402738e6bcd03c354816c507aa7fdebe",
"0xd16bd03e80088d51f007a7068697e19cc91a0daa96816ab336135b0e1bda7e1a",
"0x3571d1fe22f56864df7584f73958b5cf9336b6afe6702cc4ec9d1f097c4fc58d",
"0x74e19b61d2a511e2b067662bb61bf93241bf538d74face662561a5d170c8c2ad",
"0x01720ba8bf55fe1caac98a1cc5843f24a1376bbd08cf630c9a39fe219ec31b68",
"0xe2d0a0e01f6557e5ea96808c0cdb7618d36bb5bdbbd1d9e2fbffc07672a120cd",
"0x0ff2e856f17849a4349c70aa6fe2c04d7fffcc6e41860774210c2c2a0208f2c0",
"0xfbe09f759660388a823894be477df3491bb6c51ef7df038dbf12ab9c122b358f",
"0x9e610db00a109f0b4a4cbb094b88680f62dfe5d3526bc83377645cfcf6c03b18",
"0xe7460e14d9b5365c3b1306eaca86ffe4f996f07909c16bfbd731443d91df1931",
"0xe7c05451729b5eb5b61a3f159d522424fefa1b30f3929366289a89b714f59609",
"0x28055b2961079028d017758cd43b12e4046fca9a1ef53e09c3a4e0da3f8ff197",
"0xac65523c531d9ca6551cb6b9336d1e78671c7aeee7208f30548b3c010d79b15a",
"0x3c6939d2ef02c1c6e9aaf6aa1119fd4fa2682b71d5b010708a59144641b794ae",
"0x40cc42a031994649aa861a544d6fb7c02aabd574a5b14d26e7802d5cf2574e36",
"0x054cfeb8044d5dffd1577bf0e45dcdc53d15c308cadcc4d022d3c0dbc292efc2",
"0x337dd5519a0f33011f3d27da8e1d2cf43dc249597f199d5388cefa6200e9e3b6",
"0x3263b6e7d5c31f7873fe32542124bf2b11ce9520c629bc8b277e1dc9152717cf",
"0xce5e58922cf860beff17177cea7aa6c0e789233ba1b15cfaab6896c45dab7e3e",
"0x7b5bd2a6e19812524fc1c1c9c6ee8b970ddc3684b4a5bc3fe865dc28726032f3",
"0xbb76c2c12be46fb4a8d18e15817f9e77547acea67f71cd3bf0f13ebcf674080c",
"0x300838c866e4c8ec4e7d130a3191f3122795c26757ebeac2d51eb69f19319624",
"0x53b73eb4f155c5f126802db8f2a64ba08d93972743f3308454be1c0c68c7f4e5",
"0x4e0de18b8bb30adcd9770ee1cab2e0fb45225737e382b4376b08d4e64fab577e",
"0x3a6ca6bdeee957b6ed7297760bbcf53bc5b9945ef1fecfe8c9dbc077926d519a",
"0x014dea0c5dfe7db3b67349ebed21bae42f40f02857456827c72ace435b6b8632",
"0xa0b1b3f7f3883d34cb1ee9789c36b607ada517c526eea23193a786d72196ee1d",
"0x2bc8ee35c612ac2a9c9e5b97d6d3b9c458f7d8825c89c2d593faba38ca116357",
"0x6d61cf0212c61b9c608d7b0a5b2395e9ff41a815f429ed05abecfe350fa5c22b",
"0xcd284b589d6f3ea56a8eac1f7e17d4932c809ebe955300c3b1da554f7d0998cc",
"0x56b3afb245b853cb2cd2a9e6b938819db181b7541003fc298347b646cd0bd894",
"0xe24a047cf216f0837c52bfaccbcf4810026bc374618465d94480d5d222c37ec4",
"0x5e80313f3a14f41e63ae80192b79456d742e0a43d89e505d938e5d0b164a2b6c",
"0xcacdae3d23fd91db005624bd007f1f0c9bc48ee212e6ca2aab8b189b687b9f0d",
"0x2a0f603aeadf258feaf46805767fd42a61ccc3f031f42f131c4548875a887ba5",
"0xf90ac12554e9929db35620b33a5b61cef0cea7209a83f9ab44937dddb4c96bb3",
"0x1a4eb8628a48f763284900ffbd01107879f41c9479bc76c139db520d34295fc4",
"0xe0b600503c7f112ccc29a447ccd1c85285a304b403aaf0d227b3a7c7ffa4d9b8",
"0x1ecc791b207e1d79e10a9252fcb35591b0cabf71910eb50bde734ff7a364945c",
"0x7dc509f4b620ccc2de77ee7064b910a831a577008b8f099b76c2c9382c4ab31a",
"0xe94bf1b965b4a10ea548653cfccc63720c9945b3f02785b650c9ed26047855c6",
"0x19001b2e4a67c28e925ee2656aa6b8918c3b6d785101f4810ac9ba46cbd80d0a",
"0x717a34a0113fba177f11307a4b06f467fe4bff06f1bb38fea0c272ccd9256db6",
"0x1f8815eb7335b0a2b0b4d0cabc9f9fd97ec2fca78a69fe7c048ca540cdd303e3",
"0x56897445682734394c0e6923826b78222719c51dc288529d2ad2ffede4649f34",
"0x3c059f0c0e1809877da2fc06b1384e1ab651dee6b373980b0c5c64da57dc137e",
"0x7a0a2968b2b0458e653fda06a611c892ea1983ca852e31d916415244f06142a7",
"0x4711f167a6332b0dcd27e4530a498d2d5585dbad9b6a5d5e71d4dd07ad57adce",
"0xbdc064506c9f16e3a9607e7864ad1b4471c1fc9e0be5f98aefc5a330a33ba805",
"0x16d54ff57301af6239313e4b98e163d1a23ce6a0aa82d08e989edd31b24ba999",
"0x225a99bdb550da94a9a4717ae178f7def59f799ef36fe9d392a31a344ef6fe4a",
"0x3e502698ef85c6246dd7040f311f277f705bc028644a873df537b80b98d1fea1",
"0xe6969b55177b17b69d45c8e569fa83d00a75723ce5ba8a4b5ca67202ac5c353c",
"0x4358581c44a2caf58f64b86802c3729cf77f2b14df54c18ceac805b219440b0e",
"0xab33a0104b936b5e1be1e9d197619872eda67745ecd61f864149ff6932acfc3c",
"0x9da92be95e0f0d0e284bd8d2d3ee01b53b60482878b1434726df51e270fdf603",
"0x9543a4c4fcbe9d86084fc4b9431cfb8124919413c03f83e8666f2ec6376f0982",
"0x7ede3504ac4981e29634f703ac85e69ab389df3ee6f6ae62f6721b500fdddd20",
"0xe2ccb0b4c4114f266c9cbb387d255ee86971496aecfb57bd98f7ff1808384e06",
"0x971d50027dcde0cc2443d898438b181c772699bc7d4ed5d501258c4a8ba32de7",
"0x449ebd55963c7777e5d5523521810f69a5d4bcd6b20f558a2a5f904646dea0a0",
"0x5379acbafaa3c16ee514482e0497d4f3938399788f207adc9a77312c11d4aeb9",
"0x704ed53672d490277a0fe111fcd7790cd2fb53d94ef9d65196e315d788e38f60",
"0xfb0ff7818c21bd9883af9e04f5a2b9e5bb43173c8f791972d410d302b5dbf674",
"0x80a5bdb23c110c6acf90e6efc194eabf88d054cf1f27588ca77fbec650878544",
"0xdecf2911a31b325760b1df7fc9d9df80f28a6bca798f5503b2f73f93a4404a38",
"0x5bf29b9b96265b010a33a4bc05967edfac53c6fb3e8a8000d8c60fa869a8e8f0",
"0x24e0a4762cac65712ea029233970aded11c859dc4a5abf9c673664c35078ac1f",
"0x68327c02f690d8edd22330efefdb6233e2c8bbcb0c0ec4905694b1833adec387",
"0xbef7609a716a8d2623ead6eb31daebfbd9421816c467a4f80d027ba7dc1902cd",
"0xed29b3bc58c2dac4b2874e34dcbb83e32fff33b28437260d17edefa4ea1cbdbd",
"0x1c11469afb27568d93adc3d9af95075530067a6411b06431016efc05b021e6c3",
"0x1c1b432281eaea836c78fc78edc7ba02b3a5d6451a13c556fb46b682b02504c6",
"0xeebaab0904bfa1331f72dbc02e73b05303b4a71f2bea6b8e1b9855dd9b2d67d0",
"0xad36e72940ba9dfab81721c33d05bad5b412c774026a76ca0caaa8c6819e2f4d",
"0x5101be8446b66c40c7c375a663001070c6aaac7ccb559bc088e773f3370e8d97",
"0x3be827089ad34a73b9f6f8bbe1c7c414cdbcafc6573f6d987c3fe3e39f8fc043",
"0x16d5eca9c07ad9a133cf54c455d27030121482a1db142988d71770d083090dd5",
"0x4c2f8374663d94c4677d199b463f16916d307430ca39d36650be11e8dfe39c91",
"0xc26e2080ec735af4b67f9058e2289477ad970625d2e8cd7c4724d3844ee68936",
"0x49b9428a3cfb02fab5ecd3b603a68df495e36219f5c5a7335237137c9855c70f",
"0x55a4f76f8dc95a2a84666954727057845eb0ecf6ee456295739255c8fef23b81",
"0xe2efe0ae812195d68c6f8f846ad0fb90240984a444a2b2b5ba1096e8d299c96c",
"0x585d1f644a9802cb9a742d373a711616ff5ab0f3ba0a5f685d3dea11b041d289",
"0xaf87cda7cde3ff36e1a4a0a3a90e42052a72983f21331d78aba1e4c681eeb591",
"0x4f2cc01d0e07e9634505030847ed039ddbe4138ea4b2425e7b24188043b6fdfe",
"0x13a10286bc58803a4dbbd59c59dbf3c9ebb605d4ed0417a525fe30575331f4cd",
"0x9b54f33798b2d69512c527b1e92017351ea98f7edd956a1744d7ae00acdd096e",
"0xd5d636fd588c85c54d6f797ffa674e526caf5dab6e4e87f26c70c4462eef6c8c",
"0x47a182d7f196f6cd6f8b8818a9be457ce06fe8b93ef53c5669c756b23a07c5f1",
"0x2cebac7f3796b470e9c75693b1a8596bdbd2a89de862ab60ece1957d7b5383f3",
"0x7ce7e3078c683ec1573b2cd41b0b5fc62c28af48a23454b177699fec9ab322de",
"0x7d4f2be3a45bad9abc61edcbba9d86234f0460145e358dc6566ef623c50b91f2",
"0xfdaba3ce59b5e7ccd1f4a9e84bdd5feeb2b135603ffa49b86a7ce89eac635ce6",
"0x8c72f673640ed0564c3de1280414dabeb89cfe0ce6f49ebb81c3d7f0b1e6d55a",
"0xacacfcbe5ae3d3a9d1b3886bf8ec26bff6f84a23ae5dae8820ea138edb974c3b",
"0x3f2339582dc6834395622db187e6798edbcbe2f2e8458c2216779c1bb14d45dc",
"0x73a444fa697c736d392cd6d2b347d98734f5329d5910520419f391a443fdbd44",
"0xe03bb06673dd6d6e82f2d21c71053e62d3b1dd649d5e7a38150b83b0f085a473",
"0xc68461b94228db05a62a234ad0569aefbf31fa59fdba3d144c3a619d05fea871",
"0xb44575ebdc05026549326e837692dd60253155f001c7fa6f789568b7a136e8db",
"0xad0159409b99c1dead470cd92b3a9d4bfe25266d7400595c93f9276d8d580312",
"0x545c4abba819ad9a1d719991a5a0ca289932466fbc62471250e6c9148727a02e",
"0x5fa8b86faf4cec2e9de78f071822dc0af0198fcec23e1693e35ebb765d97d12c",
"0x2159886570715c7aa819fafea2166c045832707f76958fe456cf7af5ce8d73b6",
"0xff22db024b0e036d81383646db787cb0b1aeb713dc3387b788fd43a283a4a27c",
"0x7f229da8a815b51cdeb7b3662b7c902238b540ded6f224ce5568514032832ec3",
"0xa5e57b07a872a68d2cf2ee6fe73baeffdd4b5c3a423d2a819e67dd73dd36fb83",
"0xf0ad72ee27fb47af398972ea5ee5d07ff21091a0ee610a015da1f677ac04beeb",
"0xdbca73f967cd079e0c863e9be4194acfd63857fa71ab93c3d4c44dec0f88f9f8",
"0x29f4dafd87f712ebbe677193aa86ac807dc933cf0ab895c95feb8c19a46a78c8",
"0xef79cedefe4aab625ea24882c8e5493ac4540ddfa7ec8ac72d06d6c264a2a43f",
"0x377ad1711a2818e94eff19e349d34a5a7c0eaf3ad514b918efa58d48980f8dc7",
"0xca40524371fd62f82dfc73b74acd6f103bad8e81c22dcfe2c3b56d0941a2bf03",
"0x14f6e3daa8495585abf5030e856f742b63e2c3b8fab950fbcf61438d203b3481",
"0xfab710e7caecd295113ae04e2da94fd089d0cf2ed1bb804fc961bbda414fc78a",
"0x6a4ea10fee2a5029011fe25fc6788d1ffd6cdaeca4105b146745883ca457f7f2",
"0x3d16f801b58a8a0362178a2de3667967ac8e8e5600dec667098c56534e95c51e",
"0xe6b91400dbbe1279d8001c9ebbb951b85ae815e0812b3d706a257fd7cafc72a9",
"0x833f7223f1f9c216001b67fc3c5869c012ac7bdadf07a750bf5d504b8da9dac8",
"0x1dadfa642e018d46c90e4c9b45e7d22f964c713c829f28e7dd94456efb5ba769",
"0x9b0b0f0f9255c2ff2b0c0d9b70baea541997a2981b3e1cec904420c02c8e68f9",
"0x0ab920eab62b4a0fa9751d42b4656be510a8724337fe0adf54224cfea0b0e3b9",
"0x1669cc89308825fbcf62478c1d6d4a979d730bde70c1512afc0926e0d4e23929",
"0x66b011d44e8e971ad3063722cf5d6238c519d57c0a94c760e5c307a3158e4161",
"0x0a4ac475f2b54e24784b10b18df0086a92c407e2474479357baccd46086ea81c",
"0x988a166c64baeb21ff5ade5d2c563ef93ad0452c67015a1c472b2fc14944fcb7",
"0xac583c02f23326514085d3b816973c5907541f1efdb31373b399a67807ad1322",
"0x51d7e2b08d025386fb4b335b0d0e2d07f55b9208fff10d3a362832dc6a7547e0",
"0x6c4e553f3ce7b7c80cbce8d3c107cdcb8a7b4c89ebca8f1057e526552f1c979c",
"0x870d63c54b37873abfc8b0c8cc7bfa2b41261f77550251ab59a8f304417dbcd5",
"0x6db3c454f0583e94ba43aeca2c4ef413f80555eaef5829b1c4c1708d63d3b4e6",
"0x6cc1ddaf69d050d9b492d559de84c69232e43b7607cb6807933b1801cb4beea4",
"0xc7c0aa117b17ceef132579c731956b015ebaf3e802b85ee0a6c825f124a4451e",
"0x8bf5ba7ba1184ca6aa5f6915e418e455bb096403d43746ade9b5895fa8d0e69a",
"0x13bb12782984d634332842ce7b72a981a17bdd34ee6acd9adbf65844b96d7b48",
"0x88a59590e8e1366ec65ddf718dedbb5540a06317613a7dbe130c4a570f7f2963",
"0x8a89daffb49834fc7f2341d00151f952ef7d1a7299ab92b3fc926e442d9dad74",
"0x78afc35edc10009ad9fa1b51bb7774a48d7e53a960ebdd8818e51899fd8f5cc5",
"0x0e25764281bb700a43644ed3455c279969b80f5c537f4096934413a7904863a0",
"0xdad129d76c4fe2fc61c1af14ed7556321989efaef6824aee0436216504a36e1a",
"0x9e4fc1c9dea1e18cc4147cfc52cab7eaa90930a2b393a442238a8c5378cd4274",
"0x08c8c7dc91c967fdb900953d543b4975ec90b8def04eadcf7885c555c782ba5f",
"0x07d599a0c521f72463b80cbb534bf4dc605bf345dc1c5de1db13b55486d382d7",
"0x420c5f035c465ba9127bc832eb0f757814a6769dd9fce22b28f4a3a3e9cdfd33",
"0x2dc76172b77b50b249a5a5b9d5e23595b3310aff6199d7335eb94881d8d24906",
"0xd2fbcd5e757bd9eec8698e53088491d63b36854d315d278d1a2bd81988485077",
"0x3544b07abaf58fa8c4aa0dd1f0060c11e0de7cc1ed04b18f5f90cc196d3c99b3",
"0xe238c7374ba22d723699269c9c943eba814aa1afdb95d5e00707b3cac06a5f2a",
"0x1cfadf02760942304c47e07d07a7acbdfe7417c62d330b5802f598a7f550863f",
"0x65ad9de6d69c6e80c1cabd34f49c4c9d74b5986ecdf2e3bac30833a599cb792c",
"0x27f8b2a3a019abec3e4487fb353bd9ec0ac11a160c6c3a83df6ca959d404aa6d",
"0x6c814f0081795e7cdcf730b0807a3c91c7c656132d0d9ec2d9e39f1bb8f57526",
"0xec686e5d76bb74cc369ce26db62b742235bcf6ad7e7c5ef6872d62c45bdfd5d7",
"0x09941fefe99a62e910b1a0ab5751c36eef7d21b1740f2b9e25d814af27169649",
"0xc0cf4f22b4e05e192421baa0af9c888bd976239e70046a62cfb5b018d9205378",
"0x6c45ab7adedfa0a6a133d288a7b8ba2d213fce73124d78b0fa12e1360d930714",
"0x85872e50c368df9ce35b61d5363ce8db27f123661ae528334c6424a953197d00",
"0x6869696612636971deda05c67f663242977351aaaea43d9cdb718be5948f080b",
"0x291097a53461b3ec1740b0b61c129d827f0cf731e16defcfede2d7a544bf52f2",
"0x438259d8150e73fc0d2ec553a2143e1fa5d3e53e27b0533ca20ab37991050b4b",
"0xb1889369c5a7f3385258a7d63dcbe5b05ae2e2ff4ff1e5cf82e5b582a02e895b",
"0x3b03ee5f95e9588caaf54878d8b6c746dbeea3e695bf768651fd3c8e3255cade",
"0x60443bf8bbbec8f21d35a3d16c5cdafec1dd3bdf4b9c447bbeda74fd92655efd",
"0x61bbd3649fd7f9bdab23d6693135ec6dcf07adf1560d9bda68cbc97ae4917b42",
"0xc019e34634d76e06d2984f7201c445cf6fa3f72f3164c148de2b1827eed0b6b9",
"0x3031e3e27af9bcca0902254143e3a440d40dfed6bd69ee5095387347559fd231",
"0x6600ccda7d374610e0c8d0b7fb012bf5cb59966aa0d93f65850db3c6e4544bab",
"0x8e692bc730330a2f4bacebaae77983a1831372e64fb9578d42701a305f972ddf",
"0xb504ec0ea7de6f102f2b59f698d9f7a63893fa352fbe7d17bf05f9c0e0c7c0ea",
"0x8e8d3763f75dfb8c07fc5f609bd6becf34b6a19cadcf52a593cca1098bb2e56e",
"0xa30d9cca760ef7f64b647573f17adefe0da9694567c0948c677024388ff51617",
"0x61a0157d34d3474a167146c9dee2870b409cd9f96c9d2e530764a296b3b33d0d",
"0x625183a74036771889d7177b16cb7bc6982b1a68814c5140b4a31157ff953a2b",
"0x9c1fe65834f3733fef1fc14c47fbcbb270c01384975490ec7a483b5a29ab6a7d",
"0xf334351dae09bcd536fcf96d031457d0c1158d422adb8980b194da88670ffcbb",
"0xa9a92557684b04bfda34805c6588e1cb9fa44d7c73803c28a12a4cce0e46d222",
"0x9e5c9a5df1dfb47ea6cf46f0421492ed1613039789ab91d237ce65a1ef6826ec",
"0xc3fe546f606cee75b2c28ad343ae67da95b99b507742aa1814fcf472a8874bed",
"0x73a429e5ad90697799123575999fa28922436600934689457b0b5ae787e3aa20",
"0xbd8ce8cb98c7f263a6b8cb909b671782cb57ee111180f565c988bd97c9369ce1",
"0x45a0254dd0944f5419fa6a658a124de3a8fdf53dd799d2ff71fb1256b6648273",
"0x598cba26ab789de29b9043f53d02872d6fa2fc86df238d54786b14e4ad8bcbe9"
]
},
"nodes": [
@@ -2734,11 +3391,13 @@
"nonce": "0x0",
"builtin": {
"name": "alt_bn128_add",
"activate_at": "0x19f0a0",
"pricing": {
"linear": {
"base": 500,
"word": 0
"0x19f0a0": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x62f756": {
"info": "EIP 1108 transition at block 6_485_846 (0x62f756)",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
@@ -2748,11 +3407,13 @@
"nonce": "0x0",
"builtin": {
"name": "alt_bn128_mul",
"activate_at": "0x19f0a0",
"pricing": {
"linear": {
"base": 40000,
"word": 0
"0x19f0a0": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x62f756": {
"info": "EIP 1108 transition at block 6_485_846 (0x62f756)",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
@@ -2762,17 +3423,28 @@
"nonce": "0x0",
"builtin": {
"name": "alt_bn128_pairing",
"activate_at": "0x19f0a0",
"pricing": {
"alt_bn128_pairing": {
"base": 100000,
"pair": 80000
"0x19f0a0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x62f756": {
"info": "EIP 1108 transition at block 6_485_846 (0x62f756)",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"0x0000000000000000000000000000000000000009": {
"balance": "0x1"
"balance": "0x1",
"builtin": {
"name": "blake2_f",
"activate_at": "0x62f756",
"pricing": {
"blake2_f": {
"gas_per_round": 1
}
}
}
},
"0x000000000000000000000000000000000000000a": {
"balance": "0x0"

View File

@@ -36,6 +36,7 @@
"eip145Transition": "0x0",
"eip1014Transition": "0x0",
"eip1052Transition": "0x0",
"eip1283Transition": "0x0",
"eip1283DisableTransition": "0x0"
},
"genesis": {
@@ -58,8 +59,47 @@
"0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": "0x00", "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "builtin": { "name": "alt_bn128_add", "activate_at": "0x00", "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "builtin": { "name": "alt_bn128_mul", "activate_at": "0x00", "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "builtin": { "name": "alt_bn128_pairing", "activate_at": "0x00", "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } }
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
}
}
}

View File

@@ -1,4 +1,57 @@
{
"block": [],
"state": []
"block": [
{
"reference": "Issue https://github.com/paritytech/parity-ethereum/issues/11073 (also see https://github.com/paritytech/parity-ethereum/pull/10923)",
"failing": "stRevertTest",
"subtests": [
"RevertPrecompiledTouch_d0g0v0_Byzantium",
"RevertPrecompiledTouch_d0g0v0_Constantinople",
"RevertPrecompiledTouch_d0g0v0_ConstantinopleFix",
"RevertPrecompiledTouch_d0g0v0_EIP158",
"RevertPrecompiledTouch_d3g0v0_ConstantinopleFix",
"RevertPrecompiledTouchCC_d0g0v0_Byzantium",
"RevertPrecompiledTouchCC_d0g0v0_Constantinople",
"RevertPrecompiledTouchCC_d0g0v0_EIP158",
"RevertPrecompiledTouchDC_d0g0v0_Byzantium",
"RevertPrecompiledTouchDC_d0g0v0_Constantinople",
"RevertPrecompiledTouchDC_d0g0v0_EIP158",
"RevertPrecompiledTouchExactOOG_d7g1v0_ConstantinopleFix",
"RevertPrecompiledTouchExactOOG_d31g1v0_ConstantinopleFix",
"RevertPrecompiledTouch_storage_d3g0v0_ConstantinopleFix",
"RevertPrecompiledTouch_storage_d0g0v0_ConstantinopleFix"
]
}
],
"state": [
{
"reference": "Issue https://github.com/paritytech/parity-ethereum/issues/11078 (also see https://github.com/paritytech/parity-ethereum/pull/10923)",
"failing": "stRevertTest",
"subtests": {
"RevertPrecompiledTouch_storage": {
"subnumbers": ["1", "2"],
"chain": "St. Peter's (test)"
}
}
},
{
"reference": "Issue https://github.com/paritytech/parity-ethereum/issues/11079 (also see https://github.com/paritytech/parity-ethereum/pull/10923)",
"failing": "stRevertTest",
"subtests": {
"RevertPrecompiledTouchExactOOG": {
"subnumbers": ["61", "64"],
"chain": "St. Peter's (test)"
}
}
},
{
"reference": "Issue https://github.com/paritytech/parity-ethereum/issues/11080 (also see https://github.com/paritytech/parity-ethereum/pull/10923)",
"failing": "stRevertTest",
"subtests": {
"RevertPrecompiledTouch": {
"subnumbers": ["1", "2"],
"chain": "St. Peter's (test)"
}
}
}
]
}

File diff suppressed because one or more lines are too long

View File

@@ -57,9 +57,47 @@
"0000000000000000000000000000000000000002": { "balance": "1", "builtin": { "name": "sha256", "pricing": { "linear": { "base": 60, "word": 12 } } } },
"0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": "5", "pricing": { "modexp": { "divisor": 100 } } } },
"0000000000000000000000000000000000000006": { "builtin": { "name": "alt_bn128_add", "activate_at": "5", "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "builtin": { "name": "alt_bn128_mul", "activate_at": "5", "pricing": { "linear": { "base": 2000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "builtin": { "name": "alt_bn128_pairing", "activate_at": "5", "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } }
"0000000000000000000000000000000000000006": {
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"5": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"5": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"5": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
}
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -36,9 +36,51 @@
"0000000000000000000000000000000000000003": { "balance": "1", "nonce": "0", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "nonce": "0", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"0000000000000000000000000000000000000005": { "balance": "1", "builtin": { "name": "modexp", "activate_at": 0, "pricing": { "modexp": { "divisor": 20 } } } },
"0000000000000000000000000000000000000006": { "balance": "1", "builtin": { "name": "alt_bn128_add", "activate_at": 0, "pricing": { "linear": { "base": 500, "word": 0 } } } },
"0000000000000000000000000000000000000007": { "balance": "1", "builtin": { "name": "alt_bn128_mul", "activate_at": 0, "pricing": { "linear": { "base": 40000, "word": 0 } } } },
"0000000000000000000000000000000000000008": { "balance": "1", "builtin": { "name": "alt_bn128_pairing", "activate_at": 0, "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } } },
"0000000000000000000000000000000000000006": {
"balance": "1",
"builtin": {
"name": "alt_bn128_add",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 500 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 150 }}
}
}
}
},
"0000000000000000000000000000000000000007": {
"balance": "1",
"builtin": {
"name": "alt_bn128_mul",
"pricing": {
"0": {
"price": { "alt_bn128_const_operations": { "price": 40000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_const_operations": { "price": 6000 }}
}
}
}
},
"0000000000000000000000000000000000000008": {
"balance": "1",
"builtin": {
"name": "alt_bn128_pairing",
"pricing": {
"0": {
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
},
"0x7fffffffffffff": {
"info": "EIP 1108 transition",
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
}
}
}
},
"9cce34f7ab185c7aba1b7c8140d620b4bda941d6": { "balance": "1606938044258990275541962092341162602522202993782792835301376", "nonce": "0" }
}
}

View File

@@ -0,0 +1,38 @@
{
"name": "Morden",
"engine": {
"null": {
"params": {
"immediateFinalization": true
}
}
},
"params": {
"gasLimitBoundDivisor": "0x0400",
"accountStartNonce": "0x0",
"maximumExtraDataSize": "0x20",
"minGasLimit": "0x1388",
"networkID" : "0x2"
},
"genesis": {
"seal": {
"ethereum": {
"nonce": "0x00006d6f7264656e",
"mixHash": "0x00000000000000000000000000000000000000647572616c65787365646c6578"
}
},
"difficulty": "0x20000",
"author": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x",
"gasLimit": "0x2fefd8"
},
"accounts": {
"0000000000000000000000000000000000000001": { "balance": "1", "nonce": "1048576", "builtin": { "name": "ecrecover", "pricing": { "linear": { "base": 3000, "word": 0 } } } },
"0000000000000000000000000000000000000002": { "balance": "1", "nonce": "1048576", "builtin": { "name": "sha256", "pricing": { "linear": { "base": 60, "word": 12 } } } },
"0000000000000000000000000000000000000003": { "balance": "1", "nonce": "1048576", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
"0000000000000000000000000000000000000004": { "balance": "1", "nonce": "1048576", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
"102e61f5d8f9bc71d0ad4a084df4e65e05ce0e1c": { "balance": "1606938044258990275541962092341162602522202993782792835301376", "nonce": "1048576" }
}
}

View File

@@ -0,0 +1,155 @@
{
"name": "Volta",
"engine": {
"authorityRound": {
"params": {
"stepDuration": "5",
"validators": {
"contract": "0x1204700000000000000000000000000000000000"
},
"maximumUncleCountTransition": "0",
"maximumUncleCount": "0",
"blockRewardContractAddress": "0x1204700000000000000000000000000000000002",
"blockRewardContractTransition": "0"
}
}
},
"params": {
"networkID": "0x12047",
"maximumExtraDataSize": "0x20",
"gasLimitBoundDivisor": "0x400",
"minGasLimit": "0x1388",
"maxCodeSize": "0x6000",
"eip140Transition": "0x0",
"eip211Transition": "0x0",
"eip214Transition": "0x0",
"eip658Transition": "0x0",
"eip145Transition": "0x0",
"eip1014Transition": "0x0",
"eip1052Transition": "0x0",
"registrar": "0x1204700000000000000000000000000000000006"
},
"genesis": {
"seal": {
"authorityRound": {
"step": "0x0",
"signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
}
},
"difficulty": "0x20000",
"gasLimit": "0x5B8D80"
},
"accounts": {
"0x0000000000000000000000000000000000000001": {
"balance": "1",
"builtin": {
"name": "ecrecover",
"activate_at": "0",
"pricing": {
"linear": {
"base": 3000,
"word": 0
}
}
}
},
"0x0000000000000000000000000000000000000002": {
"balance": "1",
"builtin": {
"name": "sha256",
"activate_at": "0",
"pricing": {
"linear": {
"base": 60,
"word": 12
}
}
}
},
"0x0000000000000000000000000000000000000003": {
"balance": "1",
"builtin": {
"name": "ripemd160",
"activate_at": "0",
"pricing": {
"linear": {
"base": 600,
"word": 120
}
}
}
},
"0x0000000000000000000000000000000000000004": {
"balance": "1",
"builtin": {
"name": "identity",
"activate_at": "0",
"pricing": {
"linear": {
"base": 15,
"word": 3
}
}
}
},
"0x0000000000000000000000000000000000000005": {
"balance": "1",
"builtin": {
"name": "modexp",
"activate_at": "0",
"pricing": {
"modexp": {
"divisor": 20
}
}
}
},
"0x0000000000000000000000000000000000000006": {
"balance": "1",
"builtin": {
"name": "alt_bn128_add",
"activate_at": "0",
"pricing": {
"linear": {
"base": 500,
"word": 0
}
}
}
},
"0x0000000000000000000000000000000000000007": {
"balance": "1",
"builtin": {
"name": "alt_bn128_mul",
"activate_at": "0",
"pricing": {
"linear": {
"base": 40000,
"word": 0
}
}
}
},
"0x0000000000000000000000000000000000000008": {
"balance": "1",
"builtin": {
"name": "alt_bn128_pairing",
"activate_at": "0",
"pricing": {
"alt_bn128_pairing": {
"base": 100000,
"pair": 80000
}
}
}
}
},
"nodes": [
"enode://59c9250cb805409e84c9cd0038e97d8e5e4605b928663675869ebdfd4c251d80ccad76267a5eb2f4362ddceb5ec671f7595463adfc0a12e9f68dbf233072db41@54.70.158.106:30303",
"enode://e487ebacbdad3418905d2ed7f009fa5dbd17d73880854884acc604c0afc1a60a396aa90cb2741278c555a4e30ffc6ffc1c29e83840aa22009ec92fe53f81ec04@99.81.92.124:30303",
"enode://563f12602a117201b39ebeea108185abb15d9286830c074640c9fccbaaaabcc7fe2c95682cc43f95b95059f6d0dc4c9becbc1b2bd78e0c5ef5fddff07d85ba0e@54.201.62.74:30303",
"enode://5903b3acebdc4a34800f6923e5f3aec3ca7e5d1285bec4adb9f20ebb0f87a3bebdd748b1849ca1108a9f1e37ff9ced0b475292b8effc29e95d49ec438f244b02@3.121.165.10:30303",
"enode://8f8e35a6dcacfee946f46447b4703c84f4e485e478143997f86b1834e1b0bb78dab363d700dff3147442b9d3e2a1c521f79340c436eb7245a97c7fe385b89a5d@54.93.159.98:30303",
"enode://bd228aa03cf4a88491c81c5f3ab4a1437df3b463081cc93943c4d3ab37f1e4f8081c6995eca076f717d4fdf9a277c750bd0289477ac151f1e2b024747dcd1747@52.31.129.130:30303"
]
}

View File

@@ -20,4 +20,4 @@ trace-time = "0.1"
ethcore-db = { path = "../db" }
ethcore = { path = "..", features = ["test-helpers"] }
tempdir = "0.3"
kvdb-rocksdb = "0.1.3"
kvdb-rocksdb = "0.1.5"

View File

@@ -250,14 +250,12 @@ impl IoHandler<ClientIoMessage> for ClientIoHandler {
ClientIoMessage::TakeSnapshot(num) => {
let client = self.client.clone();
let snapshot = self.snapshot.clone();
let res = thread::Builder::new().name("Periodic Snapshot".into()).spawn(move || {
if let Err(e) = snapshot.take_snapshot(&*client, num) {
match e {
EthcoreError::Snapshot(SnapshotError::SnapshotAborted) => info!("Snapshot aborted"),
_ => warn!("Failed to take snapshot at block #{}: {}", num, e),
}
}
});

File diff suppressed because it is too large Load Diff

View File

@@ -15,77 +15,99 @@
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
use std::cmp;
use std::collections::{HashSet, BTreeMap, VecDeque};
use std::sync::atomic::{AtomicUsize, AtomicBool, Ordering as AtomicOrdering};
use std::collections::{BTreeMap, HashSet, VecDeque};
use std::convert::TryFrom;
use std::io::{BufRead, BufReader};
use std::str::from_utf8;
use std::sync::{Arc, Weak};
use std::time::{Instant, Duration};
use std::sync::atomic::{AtomicBool, AtomicI64, Ordering as AtomicOrdering, Ordering, AtomicU64};
use std::time::{Duration, Instant};
use blockchain::{BlockReceipts, BlockChain, BlockChainDB, BlockProvider, TreeRoute, ImportRoute, TransactionAddress, ExtrasInsert, BlockNumberKey};
use ansi_term::Colour;
use bytes::Bytes;
use call_contract::{CallContract, RegistryInfo};
use ethcore_miner::pool::VerifiedTransaction;
use ethereum_types::{H256, H264, Address, U256};
use evm::Schedule;
use bytes::ToPretty;
use ethereum_types::{Address, H256, H264, U256};
use hash::keccak;
use io::IoChannel;
use hash_db::EMPTY_PREFIX;
use itertools::Itertools;
use journaldb;
use kvdb::{DBValue, KeyValueDB, DBTransaction};
use kvdb::{DBTransaction, DBValue, KeyValueDB};
use parking_lot::{Mutex, RwLock};
use rand::rngs::OsRng;
use types::transaction::{self, LocalizedTransaction, UnverifiedTransaction, SignedTransaction, Action};
use trie::{TrieSpec, TrieFactory, Trie};
use types::ancestry_action::AncestryAction;
use types::encoded;
use types::filter::Filter;
use types::log_entry::LocalizedLogEntry;
use types::receipt::{Receipt, LocalizedReceipt};
use types::{BlockNumber, header::{Header, ExtendedHeader}};
use vm::{EnvInfo, LastHashes};
use hash_db::EMPTY_PREFIX;
use block::{LockedBlock, Drain, ClosedBlock, OpenBlock, enact_verified, SealedBlock};
use client::ancient_import::AncientVerifier;
use rlp::PayloadInfo;
use rustc_hex::FromHex;
use trie::{Trie, TrieFactory, TrieSpec};
use block::{ClosedBlock, Drain, enact_verified, LockedBlock, OpenBlock, SealedBlock};
use blockchain::{
BlockChain,
BlockChainDB,
BlockNumberKey,
BlockProvider,
BlockReceipts,
ExtrasInsert,
ImportRoute,
TransactionAddress,
TreeRoute
};
use call_contract::{CallContract, RegistryInfo};
use client::bad_blocks;
use client::{
Nonce, Balance, ChainInfo, BlockInfo, TransactionInfo,
ReopenBlock, PrepareOpenBlock, ScheduleInfo, ImportSealedBlock,
BroadcastProposalBlock, ImportBlock, StateOrBlock, StateInfo, StateClient, Call,
AccountData, BlockChain as BlockChainTrait, BlockProducer, SealedBlockImporter,
ClientIoMessage, BlockChainReset
ClientIoMessage, BlockChainReset, ImportExportBlocks, ForceUpdateSealing
};
use client::{
BlockId, TransactionId, UncleId, TraceId, ClientConfig, BlockChainClient,
TraceFilter, CallAnalytics, Mode,
ChainNotify, NewBlocks, ChainRoute, PruningInfo, ProvingBlockChainClient, EngineInfo, ChainMessageType,
IoClient, BadBlocks,
IoClient, BadBlocks
};
use client::bad_blocks;
use client::ancient_import::AncientVerifier;
use db::{keys::BlockDetails, Readable, Writable};
use engines::{MAX_UNCLE_AGE, Engine, EpochTransition, ForkChoice, EngineError, SealingState};
use engines::epoch::PendingTransition;
use error::{
ImportError, ExecutionError, CallError, BlockError,
QueueError, Error as EthcoreError, EthcoreResult,
QueueError, Error as EthcoreError, EthcoreResult
};
use ethcore_miner::pool::VerifiedTransaction;
use evm::Schedule;
use executive::{Executive, Executed, TransactOptions, contract_address};
use factory::{Factories, VmFactory};
use io::IoChannel;
use journaldb;
use miner::{Miner, MinerService};
use snapshot::{self, io as snapshot_io, SnapshotClient};
use snapshot::{self, io as snapshot_io, SnapshotClient, Error as SnapshotError, Progress};
use snapshot::io::SnapshotWriter;
use spec::Spec;
use state::{self, State};
use state_db::StateDB;
use trace::{self, TraceDB, ImportRequest as TraceImportRequest, LocalizedTrace, Database as TraceDatabase};
use trace::{self, Database as TraceDatabase, ImportRequest as TraceImportRequest, LocalizedTrace, TraceDB};
use transaction_ext::Transaction;
use verification::queue::kind::BlockLike;
use verification::queue::kind::blocks::Unverified;
use verification::{PreverifiedBlock, Verifier, BlockQueue};
use types::{
ancestry_action::AncestryAction,
BlockNumber,
encoded,
data_format::DataFormat,
filter::Filter,
header::{Header, ExtendedHeader},
log_entry::LocalizedLogEntry,
receipt::{LocalizedReceipt, Receipt},
transaction::{self, Action, LocalizedTransaction, SignedTransaction, UnverifiedTransaction},
};
use verification;
use ansi_term::Colour;
use verification::{BlockQueue, Verifier, PreverifiedBlock};
use verification::queue::kind::blocks::Unverified;
use verification::queue::kind::BlockLike;
use vm::{CreateContractAddress, EnvInfo, LastHashes};
// re-export
pub use types::blockchain_info::BlockChainInfo;
pub use types::block_status::BlockStatus;
pub use blockchain::CacheSize as BlockChainCacheSize;
pub use verification::QueueInfo as BlockQueueInfo;
use db::{Writable, Readable, keys::BlockDetails};
use_contract!(registry, "res/contracts/registrar.json");
@@ -194,6 +216,9 @@ pub struct Client {
/// Database pruning strategy to use for StateDB
pruning: journaldb::Algorithm,
/// Don't prune the state we're currently snapshotting
snapshotting_at: AtomicU64,
/// Client uses this to store blocks, traces, etc.
db: RwLock<Arc<dyn BlockChainDB>>,
@@ -773,6 +798,7 @@ impl Client {
tracedb,
engine,
pruning: config.pruning.clone(),
snapshotting_at: AtomicU64::new(0),
db: RwLock::new(db.clone()),
state_db: RwLock::new(state_db),
report: RwLock::new(Default::default()),
@@ -957,31 +983,47 @@ impl Client {
}
// prune ancient states until below the memory limit or only the minimum amount remain.
fn prune_ancient(&self, mut state_db: StateDB, chain: &BlockChain) -> Result<(), ::error::Error> {
let number = match state_db.journal_db().latest_era() {
fn prune_ancient(&self, mut state_db: StateDB, chain: &BlockChain) -> Result<(), EthcoreError> {
if !state_db.journal_db().is_pruned() {
return Ok(())
}
let latest_era = match state_db.journal_db().latest_era() {
Some(n) => n,
None => return Ok(()),
};
// prune all ancient eras until we're below the memory target,
// but have at least the minimum number of states.
// Prune all ancient eras until we're below the memory target (default: 32Mb),
// but have at least the minimum number of states, i.e. `history`.
// If a snapshot is under way, no pruning happens and memory consumption is allowed to
// increase above the memory target until the snapshot has finished.
loop {
let needs_pruning = state_db.journal_db().is_pruned() &&
state_db.journal_db().journal_size() >= self.config.history_mem;
if !needs_pruning { break }
match state_db.journal_db().earliest_era() {
Some(era) if era + self.history <= number => {
trace!(target: "client", "Pruning state for ancient era {}", era);
match chain.block_hash(era) {
Some(earliest_era) if earliest_era + self.history <= latest_era => {
let freeze_at = self.snapshotting_at.load(Ordering::SeqCst);
if freeze_at > 0 && freeze_at == earliest_era {
// Note: journal_db().mem_used() can be used for a more accurate memory
// consumption measurement but it can be expensive so sticking with the
// faster `journal_size()` instead.
trace!(target: "pruning", "Pruning is paused at era {} (snapshot under way); earliest era={}, latest era={}, journal_size={} Not pruning.",
freeze_at, earliest_era, latest_era, state_db.journal_db().journal_size());
break;
}
trace!(target: "pruning", "Pruning state for ancient era #{}; latest era={}, journal_size={}",
earliest_era, latest_era, state_db.journal_db().journal_size());
match chain.block_hash(earliest_era) {
Some(ancient_hash) => {
let mut batch = DBTransaction::new();
state_db.mark_canonical(&mut batch, era, &ancient_hash)?;
state_db.mark_canonical(&mut batch, earliest_era, &ancient_hash)?;
self.db.read().key_value().write_buffered(batch);
state_db.journal_db().flush();
}
None =>
debug!(target: "client", "Missing expected hash for block {}", era),
debug!(target: "pruning", "Missing expected hash for block {}", earliest_era),
}
}
_ => break, // means that every era is kept, no pruning necessary.
@@ -1023,15 +1065,16 @@ impl Client {
}
/// Get a copy of the best block's state.
pub fn latest_state(&self) -> State<StateDB> {
pub fn latest_state_and_header(&self) -> (State<StateDB>, Header) {
let header = self.best_block_header();
State::from_existing(
let state = State::from_existing(
self.state_db.read().boxed_clone_canon(&header.hash()),
*header.state_root(),
self.engine.account_start_nonce(header.number()),
self.factories.clone()
)
.expect("State root of best block header always valid.")
.expect("State root of best block header always valid.");
(state, header)
}
/// Attempt to get a copy of a specific block's final state.
@@ -1041,9 +1084,9 @@ impl Client {
/// is unknown.
pub fn state_at(&self, id: BlockId) -> Option<State<StateDB>> {
// fast path for latest state.
match id.clone() {
BlockId::Latest => return Some(self.latest_state()),
_ => {},
if let BlockId::Latest = id {
let (state, _) = self.latest_state_and_header();
return Some(state)
}
let block_number = match self.block_number(id) {
@@ -1077,8 +1120,9 @@ impl Client {
}
/// Get a copy of the best block's state.
pub fn state(&self) -> Box<dyn StateInfo> {
Box::new(self.latest_state()) as Box<_>
pub fn state(&self) -> impl StateInfo {
let (state, _) = self.latest_state_and_header();
state
}
/// Get info on the cache.
@@ -1531,8 +1575,8 @@ impl ImportBlock for Client {
impl StateClient for Client {
type State = State<::state_db::StateDB>;
fn latest_state(&self) -> Self::State {
Client::latest_state(self)
fn latest_state_and_header(&self) -> (Self::State, Header) {
Client::latest_state_and_header(self)
}
fn state_at(&self, id: BlockId) -> Option<Self::State> {
@@ -1749,6 +1793,10 @@ impl BlockChainClient for Client {
self.config.spec_name.clone()
}
fn chain(&self) -> Arc<BlockProvider> {
self.chain.read().clone()
}
fn set_spec_name(&self, new_spec_name: String) -> Result<(), ()> {
trace!(target: "mode", "Client::set_spec_name({:?})", new_spec_name);
if !self.enabled.load(AtomicOrdering::Relaxed) {
@@ -2081,7 +2129,7 @@ impl BlockChainClient for Client {
blocks
};
Ok(self.chain.read().logs(blocks, |entry| filter.matches(entry), filter.limit))
Ok(chain.logs(blocks, |entry| filter.matches(entry), filter.limit))
}
fn filter_traces(&self, filter: TraceFilter) -> Option<Vec<LocalizedTrace>> {
@@ -2402,7 +2450,9 @@ impl ImportSealedBlock for Client {
let raw = block.rlp_bytes();
let header = block.header.clone();
let hash = header.hash();
self.notify(|n| n.block_pre_import(&raw, &hash, header.difficulty()));
self.notify(|n| {
n.block_pre_import(&raw, &hash, header.difficulty())
});
let route = {
// Do a super duper basic verification to detect potential bugs
@@ -2490,19 +2540,22 @@ impl ::miner::TransactionVerifierClient for Client {}
impl ::miner::BlockChainClient for Client {}
impl super::traits::EngineClient for Client {
fn update_sealing(&self) {
self.importer.miner.update_sealing(self)
fn update_sealing(&self, force: ForceUpdateSealing) {
self.importer.miner.update_sealing(self, force)
}
fn submit_seal(&self, block_hash: H256, seal: Vec<Bytes>) {
let import = self.importer.miner.submit_seal(block_hash, seal).and_then(|block| self.import_sealed_block(block));
let import = self.importer.miner.submit_seal(block_hash, seal)
.and_then(|block| self.import_sealed_block(block));
if let Err(err) = import {
warn!(target: "poa", "Wrong internal seal submission! {:?}", err);
}
}
fn broadcast_consensus_message(&self, message: Bytes) {
self.notify(|notify| notify.broadcast(ChainMessageType::Consensus(message.clone())));
self.notify(|notify| {
notify.broadcast(ChainMessageType::Consensus(message.clone()))
});
}
fn epoch_transition_for(&self, parent_hash: H256) -> Option<::engines::EpochTransition> {
@@ -2559,6 +2612,141 @@ impl ProvingBlockChainClient for Client {
impl SnapshotClient for Client {}
impl ImportExportBlocks for Client {
fn export_blocks<'a>(
&self,
mut out: Box<dyn std::io::Write + 'a>,
from: BlockId,
to: BlockId,
format: Option<DataFormat>
) -> Result<(), String> {
let from = self.block_number(from).ok_or("Starting block could not be found")?;
let to = self.block_number(to).ok_or("End block could not be found")?;
let format = format.unwrap_or_default();
for i in from..=to {
if i % 10000 == 0 {
info!("#{}", i);
}
let b = self.block(BlockId::Number(i))
.ok_or("Error exporting incomplete chain")?
.into_inner();
match format {
DataFormat::Binary => {
out.write(&b)
.map_err(|e| {
format!("Couldn't write to stream. Cause: {}", e)
})?;
}
DataFormat::Hex => {
out.write_fmt(format_args!("{}\n", b.pretty()))
.map_err(|e| {
format!("Couldn't write to stream. Cause: {}", e)
})?;
}
}
}
Ok(())
}
fn import_blocks<'a>(
&self,
mut source: Box<dyn std::io::Read + 'a>,
format: Option<DataFormat>
) -> Result<(), String> {
const READAHEAD_BYTES: usize = 8;
let mut first_bytes: Vec<u8> = vec![0; READAHEAD_BYTES];
let mut first_read = 0;
let format = match format {
Some(format) => format,
None => {
first_read = source.read(&mut first_bytes)
.map_err(|_| {
"Error reading from the file/stream."
})?;
match first_bytes[0] {
0xf9 => DataFormat::Binary,
_ => DataFormat::Hex,
}
}
};
let do_import = |bytes: Vec<u8>| {
let block = Unverified::from_rlp(bytes).map_err(|_| "Invalid block rlp")?;
let number = block.header.number();
while self.queue_info().is_full() {
std::thread::sleep(Duration::from_secs(1));
}
match self.import_block(block) {
Err(EthcoreError::Import(ImportError::AlreadyInChain)) => {
trace!("Skipping block #{}: already in chain.", number);
}
Err(e) => {
return Err(format!("Cannot import block #{}: {:?}", number, e));
},
Ok(_) => {},
}
Ok(())
};
match format {
DataFormat::Binary => {
loop {
let (mut bytes, n) = if first_read > 0 {
(first_bytes.clone(), first_read)
} else {
let mut bytes = vec![0; READAHEAD_BYTES];
let n = source.read(&mut bytes)
.map_err(|err| {
format!("Error reading from the file/stream: {:?}", err)
})?;
(bytes, n)
};
if n == 0 { break; }
first_read = 0;
let s = PayloadInfo::from(&bytes)
.map_err(|e| {
format!("Invalid RLP in the file/stream: {:?}", e)
})?.total();
bytes.resize(s, 0);
source.read_exact(&mut bytes[n..])
.map_err(|err| {
format!("Error reading from the file/stream: {:?}", err)
})?;
do_import(bytes)?;
}
}
DataFormat::Hex => {
for line in BufReader::new(source).lines() {
let s = line
.map_err(|err| {
format!("Error reading from the file/stream: {:?}", err)
})?;
let s = if first_read > 0 {
from_utf8(&first_bytes)
.map_err(|err| {
format!("Invalid UTF-8: {:?}", err)
})?
.to_owned() + &(s[..])
} else {
s
};
first_read = 0;
let bytes = s.from_hex()
.map_err(|err| {
format!("Invalid hex in file/stream: {:?}", err)
})?;
do_import(bytes)?;
}
}
};
self.flush_queue();
Ok(())
}
}
/// Returns `LocalizedReceipt` given `LocalizedTransaction`
/// and a vector of receipts from given block up to transaction index.
fn transaction_receipt(
@@ -2606,7 +2794,28 @@ fn transaction_receipt(
#[cfg(test)]
mod tests {
use ethereum_types::{H256, Address};
use std::sync::Arc;
use std::sync::atomic::{AtomicBool, Ordering};
use std::thread;
use std::time::Duration;
use ethereum_types::{Address, H256};
use hash::keccak;
use kvdb::DBTransaction;
use blockchain::{ExtrasInsert, BlockProvider};
use super::{BlockChainClient, ChainInfo};
use ethkey::KeyPair;
use types::{
encoded,
engines::ForkChoice,
ids::{BlockId, TransactionId},
log_entry::{LocalizedLogEntry, LogEntry},
receipt::{LocalizedReceipt, Receipt, TransactionOutcome},
transaction::{Action, LocalizedTransaction, Transaction},
};
use test_helpers::{generate_dummy_client, generate_dummy_client_with_data, generate_dummy_client_with_spec_and_data, get_good_dummy_block_hash};
use super::transaction_receipt;
#[test]
fn should_not_cache_details_before_commit() {
@@ -2760,42 +2969,64 @@ mod tests {
outcome: TransactionOutcome::StateRoot(state_root),
});
}
#[test]
fn should_mark_finalization_correctly_for_parent() {
let client = generate_dummy_client_with_spec_and_data(::spec::Spec::new_test_with_finality, 2, 0, &[]);
let chain = client.chain();
let block1_details = chain.block_hash(1).and_then(|h| chain.block_details(&h));
assert!(block1_details.is_some());
let block1_details = block1_details.unwrap();
assert_eq!(block1_details.children.len(), 1);
assert!(block1_details.is_finalized);
let block2_details = chain.block_hash(2).and_then(|h| chain.block_details(&h));
assert!(block2_details.is_some());
let block2_details = block2_details.unwrap();
assert_eq!(block2_details.children.len(), 0);
assert!(!block2_details.is_finalized);
}
}
/// Queue some items to be processed by IO client.
struct IoChannelQueue {
currently_queued: Arc<AtomicUsize>,
limit: usize,
/// Using a *signed* integer for counting currently queued messages since the
/// order in which the counter is incremented and decremented is not defined.
/// Using an unsigned integer can (and will) result in integer underflow,
/// incorrectly rejecting messages and returning a FullQueue error.
currently_queued: Arc<AtomicI64>,
limit: i64,
}
impl IoChannelQueue {
pub fn new(limit: usize) -> Self {
let limit = i64::try_from(limit).unwrap_or(i64::max_value());
IoChannelQueue {
currently_queued: Default::default(),
limit,
}
}
pub fn queue<F>(&self, channel: &IoChannel<ClientIoMessage>, count: usize, fun: F) -> Result<(), QueueError> where
pub fn queue<F>(&self, channel: &IoChannel<ClientIoMessage>, count: usize, fun: F) -> EthcoreResult<()> where
F: Fn(&Client) + Send + Sync + 'static,
{
let queue_size = self.currently_queued.load(AtomicOrdering::Relaxed);
if queue_size >= self.limit {
return Err(QueueError::Full(self.limit))
let err_limit = usize::try_from(self.limit).unwrap_or(usize::max_value());
return Err(EthcoreError::Queue(QueueError::Full(err_limit)))
};
let count = i64::try_from(count).unwrap_or(i64::max_value());
let currently_queued = self.currently_queued.clone();
let result = channel.send(ClientIoMessage::execute(move |client| {
let _ok = channel.send(ClientIoMessage::execute(move |client| {
currently_queued.fetch_sub(count, AtomicOrdering::SeqCst);
fun(client);
}));
}))?;
match result {
Ok(_) => {
self.currently_queued.fetch_add(count, AtomicOrdering::SeqCst);
Ok(())
},
Err(e) => return Err(QueueError::Channel(e)),
}
self.currently_queued.fetch_add(count, AtomicOrdering::SeqCst);
Ok(())
}
}

View File

@@ -117,7 +117,7 @@ pub struct ClientConfig {
pub history: u64,
/// Ideal memory usage for state pruning history.
pub history_mem: usize,
/// Check seal valididity on block import
/// Check seal validity on block import
pub check_seal: bool,
/// Maximal number of transactions queued for verification in a separate thread.
pub transaction_verification_queue_size: usize,

View File

@@ -94,6 +94,7 @@ impl<'a> EvmTestClient<'a> {
ForkSpec::Byzantium => Some(ethereum::new_byzantium_test()),
ForkSpec::Constantinople => Some(ethereum::new_constantinople_test()),
ForkSpec::ConstantinopleFix => Some(ethereum::new_constantinople_fix_test()),
ForkSpec::Istanbul => Some(ethereum::new_istanbul_test()),
ForkSpec::EIP158ToByzantiumAt5 => Some(ethereum::new_transition_test()),
ForkSpec::FrontierToHomesteadAt5 | ForkSpec::HomesteadToDaoAt5 | ForkSpec::HomesteadToEIP150At5 => None,
}

View File

@@ -33,12 +33,12 @@ pub use self::config::{Mode, ClientConfig, DatabaseCompactionProfile, BlockChain
pub use self::evm_test_client::{EvmTestClient, EvmTestError, TransactErr, TransactSuccess};
pub use self::io_message::ClientIoMessage;
#[cfg(any(test, feature = "test-helpers"))]
pub use self::test_client::{TestBlockChainClient, EachBlockWith};
pub use self::test_client::{TestBlockChainClient, TestState, EachBlockWith};
pub use self::chain_notify::{ChainNotify, NewBlocks, ChainRoute, ChainRouteType, ChainMessageType};
pub use self::traits::{
Nonce, Balance, ChainInfo, BlockInfo, ReopenBlock, PrepareOpenBlock, TransactionInfo, ScheduleInfo, ImportSealedBlock, BroadcastProposalBlock, ImportBlock,
StateOrBlock, StateClient, Call, EngineInfo, AccountData, BlockChain, BlockProducer, SealedBlockImporter, BadBlocks,
BlockChainReset
BlockChainReset, ImportExportBlocks, ForceUpdateSealing
};
pub use state::StateInfo;
pub use self::traits::{BlockChainClient, EngineClient, ProvingBlockChainClient, IoClient};
@@ -54,7 +54,7 @@ pub use vm::{LastHashes, EnvInfo};
pub use error::TransactionImportError;
pub use verification::VerifierType;
mod traits;
pub mod traits;
mod chain_notify;
mod private_notify;

View File

@@ -20,6 +20,7 @@ use std::str::FromStr;
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering as AtomicOrder};
use std::sync::Arc;
use std::collections::{HashMap, BTreeMap};
use blockchain::BlockProvider;
use std::mem;
use blockchain::{TreeRoute, BlockReceipts};
@@ -57,7 +58,7 @@ use client::{
TransactionId, UncleId, TraceId, TraceFilter, LastHashes, CallAnalytics,
ProvingBlockChainClient, ScheduleInfo, ImportSealedBlock, BroadcastProposalBlock, ImportBlock, StateOrBlock,
Call, StateClient, EngineInfo, AccountData, BlockChain, BlockProducer, SealedBlockImporter, IoClient,
BadBlocks
BadBlocks, ForceUpdateSealing
};
use engines::Engine;
use error::{Error, EthcoreResult};
@@ -586,7 +587,7 @@ impl ImportBlock for TestBlockChainClient {
impl Call for TestBlockChainClient {
// State will not be used by test client anyway, since all methods that accept state are mocked
type State = ();
type State = TestState;
fn call(&self, _t: &SignedTransaction, _analytics: CallAnalytics, _state: &mut Self::State, _header: &Header) -> Result<Executed, CallError> {
self.execution_result.read().clone().unwrap()
@@ -605,26 +606,30 @@ impl Call for TestBlockChainClient {
}
}
impl StateInfo for () {
impl StateClient for TestBlockChainClient {
// State will not be used by test client anyway, since all methods that accept state are mocked
type State = TestState;
fn latest_state_and_header(&self) -> (Self::State, Header) {
(TestState, self.best_block_header())
}
fn state_at(&self, _id: BlockId) -> Option<Self::State> {
Some(TestState)
}
}
/// NewType wrapper around `()` to impersonate `State` in trait impls. State will not be used by
/// test client, since all methods that accept state are mocked.
pub struct TestState;
impl StateInfo for TestState {
fn nonce(&self, _address: &Address) -> ethtrie::Result<U256> { unimplemented!() }
fn balance(&self, _address: &Address) -> ethtrie::Result<U256> { unimplemented!() }
fn storage_at(&self, _address: &Address, _key: &H256) -> ethtrie::Result<H256> { unimplemented!() }
fn code(&self, _address: &Address) -> ethtrie::Result<Option<Arc<Bytes>>> { unimplemented!() }
}
impl StateClient for TestBlockChainClient {
// State will not be used by test client anyway, since all methods that accept state are mocked
type State = ();
fn latest_state(&self) -> Self::State {
()
}
fn state_at(&self, _id: BlockId) -> Option<Self::State> {
Some(())
}
}
impl EngineInfo for TestBlockChainClient {
fn engine(&self) -> &dyn Engine {
unimplemented!()
@@ -699,6 +704,10 @@ impl BlockChainClient for TestBlockChainClient {
}
}
fn chain(&self) -> Arc<BlockProvider> {
unimplemented!()
}
fn list_accounts(&self, _id: BlockId, _after: Option<&Address>, _count: u64) -> Option<Vec<Address>> {
None
}
@@ -933,8 +942,8 @@ impl ProvingBlockChainClient for TestBlockChainClient {
}
impl super::traits::EngineClient for TestBlockChainClient {
fn update_sealing(&self) {
self.miner.update_sealing(self)
fn update_sealing(&self, force: ForceUpdateSealing) {
self.miner.update_sealing(self, force)
}
fn submit_seal(&self, block_hash: H256, seal: Vec<Bytes>) {

View File

@@ -17,7 +17,7 @@
use std::collections::BTreeMap;
use std::sync::Arc;
use blockchain::{BlockReceipts, TreeRoute};
use blockchain::{BlockReceipts, TreeRoute, BlockProvider};
use bytes::Bytes;
use call_contract::{CallContract, RegistryInfo};
use ethcore_miner::pool::VerifiedTransaction;
@@ -31,6 +31,7 @@ use types::basic_account::BasicAccount;
use types::block_status::BlockStatus;
use types::blockchain_info::BlockChainInfo;
use types::call_analytics::CallAnalytics;
use types::data_format::DataFormat;
use types::encoded;
use types::filter::Filter;
use types::header::Header;
@@ -145,7 +146,7 @@ pub trait StateClient {
type State: StateInfo;
/// Get a copy of the best block's state.
fn latest_state(&self) -> Self::State;
fn latest_state_and_header(&self) -> (Self::State, Header);
/// Attempt to get a copy of a specific block's final state.
///
@@ -237,6 +238,8 @@ pub trait BlockChainClient : Sync + Send + AccountData + BlockChain + CallContra
.expect("code will return Some if given BlockId::Latest; qed")
}
fn chain(&self) -> Arc<BlockProvider>;
/// Get block queue information.
fn queue_info(&self) -> BlockQueueInfo;
@@ -419,10 +422,19 @@ pub trait BroadcastProposalBlock {
/// Provides methods to import sealed block and broadcast a block proposal
pub trait SealedBlockImporter: ImportSealedBlock + BroadcastProposalBlock {}
/// Do we want to force update sealing?
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum ForceUpdateSealing {
/// Ideally you want to use `No` at all times as `Yes` skips `reseal_required` checks.
Yes,
/// Don't skip `reseal_required` checks
No
}
/// Client facilities used by internally sealing Engines.
pub trait EngineClient: Sync + Send + ChainInfo {
/// Make a new block and seal it.
fn update_sealing(&self);
fn update_sealing(&self, force: ForceUpdateSealing);
/// Submit a seal for a block in the mining queue.
fn submit_seal(&self, block_hash: H256, seal: Vec<Bytes>);
@@ -474,3 +486,29 @@ pub trait BlockChainReset {
/// reset to best_block - n
fn reset(&self, num: u32) -> Result<(), String>;
}
/// Provides a method for importing/exporting blocks
pub trait ImportExportBlocks {
/// Export blocks to destination, with the given from, to and format argument.
/// destination could be a file or stdout.
/// If the format is hex, each block is written on a new line.
/// For binary exports, all block data is written to the same line.
fn export_blocks<'a>(
&self,
destination: Box<dyn std::io::Write + 'a>,
from: BlockId,
to: BlockId,
format: Option<DataFormat>
) -> Result<(), String>;
/// Import blocks from destination, with the given format argument
/// Source could be a file or stdout.
/// For hex format imports, it attempts to read the blocks on a line by line basis.
/// For binary format imports, reads the 8 byte RLP header in order to decode the block
/// length to be read.
fn import_blocks<'a>(
&self,
source: Box<dyn std::io::Read + 'a>,
format: Option<DataFormat>
) -> Result<(), String>;
}

View File

@@ -25,7 +25,7 @@ use std::sync::{Weak, Arc};
use std::time::{UNIX_EPOCH, Duration};
use block::*;
use client::EngineClient;
use client::{EngineClient, ForceUpdateSealing};
use engines::{Engine, Seal, SealingState, EngineError, ConstructedVerifier};
use engines::block_reward;
use engines::block_reward::{BlockRewardContract, RewardKind};
@@ -929,7 +929,7 @@ impl IoHandler<()> for TransitionHandler {
self.step.can_propose.store(true, AtomicOrdering::SeqCst);
if let Some(ref weak) = *self.client.read() {
if let Some(c) = weak.upgrade() {
c.update_sealing();
c.update_sealing(ForceUpdateSealing::No);
}
}
}
@@ -957,7 +957,7 @@ impl Engine for AuthorityRound {
self.step.can_propose.store(true, AtomicOrdering::SeqCst);
if let Some(ref weak) = *self.client.read() {
if let Some(c) = weak.upgrade() {
c.update_sealing();
c.update_sealing(ForceUpdateSealing::No);
}
}
}

View File

@@ -67,7 +67,7 @@ use std::time;
use std::time::{Instant, Duration, SystemTime, UNIX_EPOCH};
use block::ExecutedBlock;
use client::{BlockId, EngineClient};
use client::{BlockId, EngineClient, ForceUpdateSealing};
use engines::clique::util::{extract_signers, recover_creator};
use engines::{Engine, EngineError, Seal, SealingState};
use error::{BlockError, Error};
@@ -750,7 +750,7 @@ impl Engine for Clique {
if self.signer.read().is_some() {
if let Some(ref weak) = *self.client.read() {
if let Some(c) = weak.upgrade() {
c.update_sealing();
c.update_sealing(ForceUpdateSealing::No);
}
}
}

View File

@@ -19,6 +19,8 @@ use machine::Machine;
use types::header::{Header, ExtendedHeader};
use block::ExecutedBlock;
use error::Error;
use std::sync::atomic::{AtomicU64, Ordering};
/// `InstantSeal` params.
#[derive(Default, Debug, PartialEq)]
@@ -40,6 +42,7 @@ impl From<::ethjson::spec::InstantSealParams> for InstantSealParams {
pub struct InstantSeal {
params: InstantSealParams,
machine: Machine,
last_sealed_block: AtomicU64,
}
impl InstantSeal {
@@ -48,6 +51,7 @@ impl InstantSeal {
InstantSeal {
params,
machine,
last_sealed_block: AtomicU64::new(0),
}
}
}
@@ -61,12 +65,27 @@ impl Engine for InstantSeal {
fn sealing_state(&self) -> SealingState { SealingState::Ready }
fn should_reseal_on_update(&self) -> bool {
// We would like for the miner to `update_sealing` if there are local_pending_transactions
// in the pool to prevent transactions sent in parallel from stalling in the transaction
// pool. (see #9660)
true
}
fn generate_seal(&self, block: &ExecutedBlock, _parent: &Header) -> Seal {
if block.transactions.is_empty() {
Seal::None
} else {
Seal::Regular(Vec::new())
if !block.transactions.is_empty() {
let block_number = block.header.number();
let last_sealed_block = self.last_sealed_block.load(Ordering::SeqCst);
// Return a regular seal if the given block is _higher_ than
// the last sealed one
if block_number > last_sealed_block {
let prev_last_sealed_block = self.last_sealed_block.compare_and_swap(last_sealed_block, block_number, Ordering::SeqCst);
if prev_last_sealed_block == last_sealed_block {
return Seal::Regular(Vec::new())
}
}
}
Seal::None
}
fn verify_local_seal(&self, _header: &Header) -> Result<(), Error> {

View File

@@ -321,6 +321,14 @@ pub trait Engine: Sync + Send {
/// Returns the engine's current sealing state.
fn sealing_state(&self) -> SealingState { SealingState::External }
/// Called in `miner.chain_new_blocks` if the engine wishes to `update_sealing`
/// after a block was recently sealed.
///
/// returns false by default
fn should_reseal_on_update(&self) -> bool {
false
}
/// Attempt to seal the block internally.
///
/// If `Some` is returned, then you get a valid seal.

View File

@@ -17,23 +17,29 @@
use engines::Engine;
use engines::block_reward::{self, RewardKind};
use ethereum_types::U256;
use machine::Machine;
use types::BlockNumber;
use types::header::{Header, ExtendedHeader};
use block::ExecutedBlock;
use error::Error;
use machine::Machine;
use types::BlockNumber;
use types::{
ancestry_action::AncestryAction,
header::{Header, ExtendedHeader},
};
/// Params for a null engine.
#[derive(Clone, Default)]
pub struct NullEngineParams {
/// base reward for a block.
pub block_reward: U256,
/// Immediate finalization.
pub immediate_finalization: bool
}
impl From<::ethjson::spec::NullEngineParams> for NullEngineParams {
fn from(p: ::ethjson::spec::NullEngineParams) -> Self {
NullEngineParams {
block_reward: p.block_reward.map_or_else(Default::default, Into::into),
immediate_finalization: p.immediate_finalization.unwrap_or(false)
}
}
}
@@ -105,4 +111,13 @@ impl Engine for NullEngine {
fn fork_choice(&self, new: &ExtendedHeader, current: &ExtendedHeader) -> super::ForkChoice {
super::total_difficulty_fork_choice(new, current)
}
fn ancestry_actions(&self, _header: &Header, ancestry: &mut dyn Iterator<Item=ExtendedHeader>) -> Vec<AncestryAction> {
if self.params.immediate_finalization {
// always mark parent finalized
ancestry.take(1).map(|e| AncestryAction::MarkFinalized(e.header.hash())).collect()
} else {
Vec::new()
}
}
}

View File

@@ -151,7 +151,7 @@ mod tests {
use std::collections::BTreeMap;
use hash::keccak;
use accounts::AccountProvider;
use client::{BlockChainClient, ChainInfo, BlockInfo, ImportBlock};
use client::{BlockChainClient, ChainInfo, BlockInfo, EngineClient, ImportBlock, ForceUpdateSealing};
use engines::EpochChange;
use engines::validator_set::ValidatorSet;
use ethkey::Secret;
@@ -181,24 +181,24 @@ mod tests {
let signer = Box::new((tap.clone(), v1, "".into()));
client.miner().set_author(miner::Author::Sealer(signer));
client.transact_contract(Default::default(), Default::default()).unwrap();
::client::EngineClient::update_sealing(&*client);
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
assert_eq!(client.chain_info().best_block_number, 0);
// Right signer for the first block.
let signer = Box::new((tap.clone(), v0, "".into()));
client.miner().set_author(miner::Author::Sealer(signer));
::client::EngineClient::update_sealing(&*client);
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
assert_eq!(client.chain_info().best_block_number, 1);
// This time v0 is wrong.
client.transact_contract(Default::default(), Default::default()).unwrap();
::client::EngineClient::update_sealing(&*client);
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
assert_eq!(client.chain_info().best_block_number, 1);
let signer = Box::new((tap.clone(), v1, "".into()));
client.miner().set_author(miner::Author::Sealer(signer));
::client::EngineClient::update_sealing(&*client);
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
assert_eq!(client.chain_info().best_block_number, 2);
// v1 is still good.
client.transact_contract(Default::default(), Default::default()).unwrap();
::client::EngineClient::update_sealing(&*client);
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
assert_eq!(client.chain_info().best_block_number, 3);
// Check syncing.

View File

@@ -453,7 +453,7 @@ mod tests {
use spec::Spec;
use accounts::AccountProvider;
use types::transaction::{Transaction, Action};
use client::{ChainInfo, BlockInfo, ImportBlock};
use client::{ChainInfo, BlockInfo, EngineClient, ImportBlock, ForceUpdateSealing};
use ethkey::Secret;
use miner::{self, MinerService};
use test_helpers::{generate_dummy_client_with_spec, generate_dummy_client_with_spec_and_data};
@@ -495,7 +495,7 @@ mod tests {
data: "bfc708a000000000000000000000000082a978b3f5962a5b0957d9ee9eef472ee55b42f1".from_hex().unwrap(),
}.sign(&s0, Some(chain_id));
client.miner().import_own_transaction(client.as_ref(), tx.into()).unwrap();
::client::EngineClient::update_sealing(&*client);
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
assert_eq!(client.chain_info().best_block_number, 1);
// Add "1" validator back in.
let tx = Transaction {
@@ -507,14 +507,14 @@ mod tests {
data: "4d238c8e00000000000000000000000082a978b3f5962a5b0957d9ee9eef472ee55b42f1".from_hex().unwrap(),
}.sign(&s0, Some(chain_id));
client.miner().import_own_transaction(client.as_ref(), tx.into()).unwrap();
::client::EngineClient::update_sealing(&*client);
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
// The transaction is not yet included so still unable to seal.
assert_eq!(client.chain_info().best_block_number, 1);
// Switch to the validator that is still there.
let signer = Box::new((tap.clone(), v0, "".into()));
client.miner().set_author(miner::Author::Sealer(signer));
::client::EngineClient::update_sealing(&*client);
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
assert_eq!(client.chain_info().best_block_number, 2);
// Switch back to the added validator, since the state is updated.
let signer = Box::new((tap.clone(), v1, "".into()));
@@ -528,7 +528,7 @@ mod tests {
data: Vec::new(),
}.sign(&s0, Some(chain_id));
client.miner().import_own_transaction(client.as_ref(), tx.into()).unwrap();
::client::EngineClient::update_sealing(&*client);
EngineClient::update_sealing(&*client, ForceUpdateSealing::No);
// Able to seal again.
assert_eq!(client.chain_info().best_block_number, 3);

View File

@@ -57,9 +57,19 @@ pub fn new_poanet<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
load(params.into(), include_bytes!("../../res/ethereum/poacore.json"))
}
/// Create a new Tobalaba mainnet chain spec.
pub fn new_tobalaba<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
load(params.into(), include_bytes!("../../res/ethereum/tobalaba.json"))
/// Create a new xDai mainnet chain spec.
pub fn new_xdai<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
load(params.into(), include_bytes!("../../res/ethereum/xdai.json"))
}
/// Create a new Volta mainnet chain spec.
pub fn new_volta<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
load(params.into(), include_bytes!("../../res/ethereum/volta.json"))
}
/// Create a new EWC mainnet chain spec.
pub fn new_ewc<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
load(params.into(), include_bytes!("../../res/ethereum/ewc.json"))
}
/// Create a new Expanse mainnet chain spec.
@@ -124,6 +134,11 @@ pub fn new_sokol<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
load(params.into(), include_bytes!("../../res/ethereum/poasokol.json"))
}
/// Create a new Mordor testnet chain spec.
pub fn new_mordor<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
load(params.into(), include_bytes!("../../res/ethereum/mordor.json"))
}
// For tests
/// Create a new Foundation Frontier-era chain spec as though it never changes to Homestead.
@@ -156,6 +171,9 @@ pub fn new_constantinople_test() -> Spec { load(None, include_bytes!("../../res/
/// Create a new Foundation St. Peter's (Contantinople Fix) era spec.
pub fn new_constantinople_fix_test() -> Spec { load(None, include_bytes!("../../res/ethereum/st_peters_test.json")) }
/// Create a new Foundation Istanbul era spec.
pub fn new_istanbul_test() -> Spec { load(None, include_bytes!("../../res/ethereum/istanbul_test.json")) }
/// Create a new Musicoin-MCIP3-era spec.
pub fn new_mcip3_test() -> Spec { load(None, include_bytes!("../../res/ethereum/mcip3_test.json")) }

View File

@@ -34,7 +34,7 @@ use externalities::*;
use trace::{self, Tracer, VMTracer};
use types::transaction::{Action, SignedTransaction};
use transaction_ext::Transaction;
use crossbeam;
use crossbeam_utils::thread;
pub use executed::{Executed, ExecutionResult};
#[cfg(debug_assertions)]
@@ -396,7 +396,8 @@ impl<'a> CallCreateExecutive<'a> {
let default = [];
let data = if let Some(ref d) = params.data { d as &[u8] } else { &default as &[u8] };
let cost = builtin.cost(data);
// NOTE(niklasad1): block number is used by `builtin alt_bn128 ops` to enable eip1108
let cost = builtin.cost(data, self.info.number);
if cost <= params.gas {
let mut builtin_out_buffer = Vec::new();
let result = {
@@ -406,7 +407,7 @@ impl<'a> CallCreateExecutive<'a> {
if let Err(e) = result {
state.revert_to_checkpoint();
Err(e.into())
Err(vm::Error::BuiltIn(e))
} else {
state.discard_checkpoint();
@@ -977,11 +978,18 @@ impl<'a, B: 'a + StateBackend> Executive<'a, B> {
if stack_depth != depth_threshold {
self.call_with_stack_depth(params, substate, stack_depth, tracer, vm_tracer)
} else {
crossbeam::scope(|scope| {
scope.builder().stack_size(::std::cmp::max(self.schedule.max_depth.saturating_sub(depth_threshold) * STACK_SIZE_PER_DEPTH, local_stack_size)).spawn(move || {
self.call_with_stack_depth(params, substate, stack_depth, tracer, vm_tracer)
}).expect("Sub-thread creation cannot fail; the host might run out of resources; qed")
}).join().expect("Sub-thread never panics; qed")
thread::scope(|scope| {
let stack_size = cmp::max(self.schedule.max_depth.saturating_sub(depth_threshold) * STACK_SIZE_PER_DEPTH, local_stack_size);
scope.builder()
.stack_size(stack_size)
.spawn(|_| {
self.call_with_stack_depth(params, substate, stack_depth, tracer, vm_tracer)
})
.expect("Sub-thread creation cannot fail; the host might run out of resources; qed")
.join()
})
.expect("Sub-thread never panics; qed")
.expect("Sub-thread never panics; qed")
}
}
@@ -1061,11 +1069,18 @@ impl<'a, B: 'a + StateBackend> Executive<'a, B> {
if stack_depth != depth_threshold {
self.create_with_stack_depth(params, substate, stack_depth, tracer, vm_tracer)
} else {
crossbeam::scope(|scope| {
scope.builder().stack_size(::std::cmp::max(self.schedule.max_depth.saturating_sub(depth_threshold) * STACK_SIZE_PER_DEPTH, local_stack_size)).spawn(move || {
self.create_with_stack_depth(params, substate, stack_depth, tracer, vm_tracer)
}).expect("Sub-thread creation cannot fail; the host might run out of resources; qed")
}).join().expect("Sub-thread never panics; qed")
thread::scope(|scope| {
let stack_size = cmp::max(self.schedule.max_depth.saturating_sub(depth_threshold) * STACK_SIZE_PER_DEPTH, local_stack_size);
scope.builder()
.stack_size(stack_size)
.spawn(|_| {
self.create_with_stack_depth(params, substate, stack_depth, tracer, vm_tracer)
})
.expect("Sub-thread creation cannot fail; the host might run out of resources; qed")
.join()
})
.expect("Sub-thread never panics; qed")
.expect("Sub-thread never panics; qed")
}
}

View File

@@ -400,6 +400,10 @@ impl<'a, T: 'a, V: 'a, B: 'a> Ext for Externalities<'a, T, V, B>
self.env_info
}
fn chain_id(&self) -> u64 {
self.machine.params().chain_id
}
fn depth(&self) -> usize {
self.depth
}
@@ -420,6 +424,10 @@ impl<'a, T: 'a, V: 'a, B: 'a> Ext for Externalities<'a, T, V, B>
self.vm_tracer.trace_prepare_execute(pc, instruction, gas_cost, mem_written, store_written)
}
fn trace_failed(&mut self) {
self.vm_tracer.trace_failed();
}
fn trace_executed(&mut self, gas_used: U256, stack_push: &[U256], mem: &[u8]) {
self.vm_tracer.trace_executed(gas_used, stack_push, mem)
}

View File

@@ -18,49 +18,49 @@ use std::path::Path;
use std::sync::Arc;
use client::{EvmTestClient, Client, ClientConfig, ChainInfo, ImportBlock};
use spec::Genesis;
use ethjson;
use ethjson::test_helpers::blockchain;
use miner::Miner;
use io::IoChannel;
use test_helpers;
use verification::queue::kind::blocks::Unverified;
use verification::VerifierType;
use super::SKIP_TEST_STATE;
use verification::{VerifierType, queue::kind::BlockLike, queue::kind::blocks::Unverified};
use super::SKIP_TESTS;
use super::HookType;
/// Run chain jsontests on a given folder.
pub fn run_test_path<H: FnMut(&str, HookType)>(p: &Path, skip: &[&'static str], h: &mut H) {
::json_tests::test_common::run_test_path(p, skip, json_chain_test, h)
}
/// Run chain jsontests on a given file.
pub fn run_test_file<H: FnMut(&str, HookType)>(p: &Path, h: &mut H) {
::json_tests::test_common::run_test_file(p, json_chain_test, h)
}
#[allow(dead_code)]
fn skip_test(name: &String) -> bool {
SKIP_TEST_STATE.block.iter().any(|block_test|block_test.subtests.contains(name))
SKIP_TESTS
.block
.iter()
.any(|block_test|block_test.subtests.contains(name))
}
pub fn json_chain_test<H: FnMut(&str, HookType)>(json_data: &[u8], start_stop_hook: &mut H) -> Vec<String> {
#[allow(dead_code)]
pub fn json_chain_test<H: FnMut(&str, HookType)>(path: &Path, json_data: &[u8], start_stop_hook: &mut H) -> Vec<String> {
let _ = ::env_logger::try_init();
let tests = ethjson::blockchain::Test::load(json_data).unwrap();
let tests = blockchain::Test::load(json_data)
.expect(&format!("Could not parse JSON chain test data from {}", path.display()));
let mut failed = Vec::new();
for (name, blockchain) in tests.into_iter() {
if skip_test(&name) {
println!(" - {} | {:?} Ignoring tests because in skip list", name, blockchain.network);
println!(" - {} | {:?}: SKIPPED", name, blockchain.network);
continue;
}
start_stop_hook(&name, HookType::OnStart);
let mut fail = false;
{
let mut fail_unless = |cond: bool| if !cond && !fail {
failed.push(name.clone());
flushln!("FAIL");
fail = true;
true
} else {false};
let mut fail_unless = |cond: bool| {
if !cond && !fail {
failed.push(name.clone());
flushln!("FAIL");
fail = true;
true
} else {
false
}
};
flush!(" - {}...", name);
@@ -68,7 +68,7 @@ pub fn json_chain_test<H: FnMut(&str, HookType)>(json_data: &[u8], start_stop_ho
let mut spec = match EvmTestClient::spec_from_json(&blockchain.network) {
Some(spec) => spec,
None => {
println!(" - {} | {:?} Ignoring tests because of missing spec", name, blockchain.network);
println!(" - {} | {:?} Ignoring tests because of missing chainspec", name, blockchain.network);
continue;
}
};
@@ -77,30 +77,44 @@ pub fn json_chain_test<H: FnMut(&str, HookType)>(json_data: &[u8], start_stop_ho
let state = From::from(blockchain.pre_state.clone());
spec.set_genesis_state(state).expect("Failed to overwrite genesis state");
spec.overwrite_genesis_params(genesis);
assert!(spec.is_state_root_valid());
// assert!(spec.is_state_root_valid());
spec
};
{
let db = test_helpers::new_db();
let mut config = ClientConfig::default();
if ethjson::blockchain::Engine::NoProof == blockchain.engine {
if ethjson::test_helpers::blockchain::Engine::NoProof == blockchain.engine {
config.verifier_type = VerifierType::CanonNoSeal;
config.check_seal = false;
}
config.history = 8;
config.queue.verifier_settings.num_verifiers = 1;
let client = Client::new(
config,
&spec,
db,
Arc::new(Miner::new_for_tests(&spec, None)),
IoChannel::disconnected(),
).unwrap();
).expect("Failed to instantiate a new Client");
for b in blockchain.blocks_rlp() {
if let Ok(block) = Unverified::from_rlp(b) {
let _ = client.import_block(block);
client.flush_queue();
client.import_verified_blocks();
let bytes_len = b.len();
let block = Unverified::from_rlp(b);
match block {
Ok(block) => {
let num = block.header.number();
let hash = block.hash();
trace!(target: "json-tests", "{} Importing {} bytes. Block #{}/{}", name, bytes_len, num, hash);
let res = client.import_block(block);
if let Err(e) = res {
warn!(target: "json-tests", "{} Error importing block #{}/{}: {:?}", name, num, hash, e);
}
client.flush_queue();
},
Err(decoder_err) => {
warn!(target: "json-tests", "Error decoding test block: {:?} ({} bytes)", decoder_err, bytes_len);
}
}
}
fail_unless(client.chain_info().best_block_hash == blockchain.best_block.into());
@@ -109,24 +123,31 @@ pub fn json_chain_test<H: FnMut(&str, HookType)>(json_data: &[u8], start_stop_ho
if !fail {
flushln!("ok");
} else {
flushln!("fail");
}
start_stop_hook(&name, HookType::OnStop);
}
println!("!!! {:?} tests from failed.", failed.len());
if failed.len() > 0 {
println!("!!! {:?} tests failed.", failed.len());
}
failed
}
#[cfg(test)]
mod block_tests {
use std::path::Path;
use super::json_chain_test;
use json_tests::HookType;
fn do_json_test<H: FnMut(&str, HookType)>(json_data: &[u8], h: &mut H) -> Vec<String> {
json_chain_test(json_data, h)
fn do_json_test<H: FnMut(&str, HookType)>(path: &Path, json_data: &[u8], h: &mut H) -> Vec<String> {
json_chain_test(path, json_data, h)
}
//todo[dvdplm] do these tests match all folders in `res/` or are there tests we're missing?
//Issue: https://github.com/paritytech/parity-ethereum/issues/11085
declare_test!{BlockchainTests_bcBlockGasLimitTest, "BlockchainTests/bcBlockGasLimitTest"}
declare_test!{BlockchainTests_bcExploitTest, "BlockchainTests/bcExploitTest"}
declare_test!{BlockchainTests_bcForgedTest, "BlockchainTests/bcForgedTest"}
@@ -173,7 +194,12 @@ mod block_tests {
declare_test!{BlockchainTests_GeneralStateTest_stRandom2, "BlockchainTests/GeneralStateTests/stRandom2/"}
declare_test!{BlockchainTests_GeneralStateTest_stRecursiveCreate, "BlockchainTests/GeneralStateTests/stRecursiveCreate/"}
declare_test!{BlockchainTests_GeneralStateTest_stRefundTest, "BlockchainTests/GeneralStateTests/stRefundTest/"}
declare_test!{BlockchainTests_GeneralStateTest_stReturnDataTest, "BlockchainTests/GeneralStateTests/stReturnDataTest/"}
declare_test!{ BlockchainTests_GeneralStateTest_stReturnDataTest, "BlockchainTests/GeneralStateTests/stReturnDataTest/"}
// todo[dvdplm]:
// "RevertPrecompiledTouch_storage" contains 4 tests, only two fails
// "RevertPrecompiledTouchExactOOG" contains a ton of tests, only two fails
// "RevertPrecompiledTouch" has 4 tests, 2 failures
// Ignored in currents.json, issue: https://github.com/paritytech/parity-ethereum/issues/11073
declare_test!{BlockchainTests_GeneralStateTest_stRevertTest, "BlockchainTests/GeneralStateTests/stRevertTest/"}
declare_test!{BlockchainTests_GeneralStateTest_stShift, "BlockchainTests/GeneralStateTests/stShift/"}
declare_test!{BlockchainTests_GeneralStateTest_stSolidityTest, "BlockchainTests/GeneralStateTests/stSolidityTest/"}

View File

@@ -14,16 +14,24 @@
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
use ethjson;
use types::header::Header;
use std::path::Path;
use ethereum_types::U256;
use ethjson::test_helpers::difficulty::DifficultyTest;
use types::header::Header;
use spec::Spec;
use super::HookType;
pub fn json_difficulty_test<H: FnMut(&str, HookType)>(json_data: &[u8], spec: Spec, start_stop_hook: &mut H) -> Vec<String> {
let _ = ::env_logger::try_init();
let tests = ethjson::test::DifficultyTest::load(json_data).unwrap();
pub fn json_difficulty_test<H: FnMut(&str, HookType)>(
path: &Path,
json_data: &[u8],
spec: Spec,
start_stop_hook: &mut H
) -> Vec<String> {
let _ = env_logger::try_init();
let tests = DifficultyTest::load(json_data)
.expect(&format!("Could not parse JSON difficulty test data from {}", path.display()));
let engine = &spec.engine;
for (name, test) in tests.into_iter() {
@@ -54,29 +62,28 @@ pub fn json_difficulty_test<H: FnMut(&str, HookType)>(json_data: &[u8], spec: Sp
macro_rules! difficulty_json_test {
( $spec:ident ) => {
use std::path::Path;
use super::json_difficulty_test;
use tempdir::TempDir;
use json_tests::HookType;
use super::json_difficulty_test;
use tempdir::TempDir;
use json_tests::HookType;
fn do_json_test<H: FnMut(&str, HookType)>(json_data: &[u8], h: &mut H) -> Vec<String> {
let tempdir = TempDir::new("").unwrap();
json_difficulty_test(json_data, ::ethereum::$spec(&tempdir.path()), h)
}
fn do_json_test<H: FnMut(&str, HookType)>(path: &Path, json_data: &[u8], h: &mut H) -> Vec<String> {
let tempdir = TempDir::new("").unwrap();
json_difficulty_test(path, json_data, ::ethereum::$spec(&tempdir.path()), h)
}
}
}
macro_rules! difficulty_json_test_nopath {
( $spec:ident ) => {
use std::path::Path;
use super::json_difficulty_test;
use json_tests::HookType;
fn do_json_test<H: FnMut(&str, HookType)>(json_data: &[u8], h: &mut H) -> Vec<String> {
json_difficulty_test(json_data, ::ethereum::$spec(), h)
}
use super::json_difficulty_test;
use json_tests::HookType;
fn do_json_test<H: FnMut(&str, HookType)>(path: &Path, json_data: &[u8], h: &mut H) -> Vec<String> {
json_difficulty_test(path, json_data, ::ethereum::$spec(), h)
}
}
}

View File

@@ -211,6 +211,8 @@ impl<'a, T: 'a, V: 'a, B: 'a> Ext for TestExt<'a, T, V, B>
self.ext.env_info()
}
fn chain_id(&self) -> u64 { 0 }
fn depth(&self) -> usize {
0
}
@@ -228,16 +230,22 @@ impl<'a, T: 'a, V: 'a, B: 'a> Ext for TestExt<'a, T, V, B>
}
}
fn do_json_test<H: FnMut(&str, HookType)>(json_data: &[u8], h: &mut H) -> Vec<String> {
fn do_json_test<H: FnMut(&str, HookType)>(path: &Path, json_data: &[u8], h: &mut H) -> Vec<String> {
let vms = VMType::all();
vms
.iter()
.flat_map(|vm| do_json_test_for(vm, json_data, h))
.flat_map(|vm| do_json_test_for(path, vm, json_data, h))
.collect()
}
fn do_json_test_for<H: FnMut(&str, HookType)>(vm_type: &VMType, json_data: &[u8], start_stop_hook: &mut H) -> Vec<String> {
let tests = ethjson::vm::Test::load(json_data).unwrap();
fn do_json_test_for<H: FnMut(&str, HookType)>(
path: &Path,
vm_type: &VMType,
json_data: &[u8],
start_stop_hook: &mut H
) -> Vec<String> {
let tests = ethjson::test_helpers::vm::Test::load(json_data)
.expect(&format!("Could not parse JSON executive test data from {}", path.display()));
let mut failed = Vec::new();
for (name, vm) in tests.into_iter() {
@@ -329,15 +337,15 @@ fn do_json_test_for<H: FnMut(&str, HookType)>(vm_type: &VMType, json_data: &[u8]
for (address, account) in vm.post_state.unwrap().into_iter() {
let address = address.into();
let code: Vec<u8> = account.code.into();
let code: Vec<u8> = account.code.expect("code is missing from json; test should have code").into();
let found_code = try_fail!(state.code(&address));
let found_balance = try_fail!(state.balance(&address));
let found_nonce = try_fail!(state.nonce(&address));
fail_unless(found_code.as_ref().map_or_else(|| code.is_empty(), |c| &**c == &code), "code is incorrect");
fail_unless(found_balance == account.balance.into(), "balance is incorrect");
fail_unless(found_nonce == account.nonce.into(), "nonce is incorrect");
for (k, v) in account.storage {
fail_unless(account.balance.as_ref().map_or(false, |b| b.0 == found_balance), "balance is incorrect");
fail_unless(account.nonce.as_ref().map_or(false, |n| n.0 == found_nonce), "nonce is incorrect");
for (k, v) in account.storage.expect("test should have storage") {
let key: U256 = k.into();
let value: U256 = v.into();
let found_storage = try_fail!(state.storage_at(&address, &BigEndianHash::from_uint(&key)));

View File

@@ -30,17 +30,7 @@ mod skip;
mod difficulty;
pub use self::test_common::HookType;
pub use self::transaction::run_test_path as run_transaction_test_path;
pub use self::transaction::run_test_file as run_transaction_test_file;
pub use self::executive::run_test_path as run_executive_test_path;
pub use self::executive::run_test_file as run_executive_test_file;
pub use self::state::run_test_path as run_state_test_path;
pub use self::state::run_test_file as run_state_test_file;
pub use self::chain::run_test_path as run_chain_test_path;
pub use self::chain::run_test_file as run_chain_test_file;
pub use self::trie::run_generic_test_path as run_generic_trie_test_path;
pub use self::trie::run_generic_test_file as run_generic_trie_test_file;
pub use self::trie::run_secure_test_path as run_secure_trie_test_path;
pub use self::trie::run_secure_test_file as run_secure_trie_test_file;
use self::skip::SKIP_TEST_STATE;
use self::skip::SKIP_TESTS;

View File

@@ -14,21 +14,30 @@
// You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
//! State tests to skip.
//! State or blockchain tests to skip.
//!
//! Looks in the `ethereum/tests/test-issues/currents.json` file. This file contains two
//! collections, `block` and `state`, each with a different format to specify single tests to skip.
//!
//! To skip a blockchain test, add a JSON object to the `block` array, where `failing` names the
//! leaf folder with the tests to skip. The `subtests` array contains the names of the tests to skip.
//! Note that this does not handle duplicate folder names, e.g. `ValidBlocks/funTests/` and
//! `Something/funTests` would both be matched when `failing` is set to `funTests`.
//!
//! To skip a state test, add a JSON object to the `state` array. The `failing` works like for block
//! tests, but the `subtests` key is an object on the form:
//! "testName": {"subnumbers": [INDEX_OF_SKIPPED_SUBTESTS | "*"], "chain": "Blockchain name (informational)"}`
//!
//! Use the `reference` key to point to the github issue tracking to solution to the problem.
//!
//! Note: the `declare_test!` macro can also be use to skip tests, but skips entire files rather
//! than single tests.
use ethjson;
use ethjson::test_helpers::skip::SkipTests;
#[cfg(feature="ci-skip-tests")]
lazy_static!{
pub static ref SKIP_TEST_STATE: ethjson::test::SkipStates = {
lazy_static! {
pub static ref SKIP_TESTS: SkipTests = {
let skip_data = include_bytes!("../../res/ethereum/tests-issues/currents.json");
ethjson::test::SkipStates::load(&skip_data[..]).expect("No invalid json allowed")
};
}
#[cfg(not(feature="ci-skip-tests"))]
lazy_static!{
pub static ref SKIP_TEST_STATE: ethjson::test::SkipStates = {
ethjson::test::SkipStates::empty()
SkipTests::load(&skip_data[..]).expect("JSON from disk is valid")
};
}

Some files were not shown because too many files have changed in this diff Show More