From a3e65f3ce978f5f723fcd415d188f2d42273c492 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Tue, 10 Dec 2024 05:06:42 +0800 Subject: [PATCH] Sync celestia-integration with integration (#359) * Clean the espresso crypto lib (#317) * Add SwitchSequencer * Fix the switch function * Create SwitchSequencer * Update the espresso-sequencer-go * Use light client as the trigger * Add the switch test * Make the linter happy * Add the switch test to the e2e ci * Increase the limit * Clean the log with the log helper * more mock code * Fix the e2e test * serialize proof variables correctly * update espresso-go version * wasm compatibility * remove stale file, lint fix * update to recent espresso go version * refactor block merkle verification * work on E2E * progress on merkle tree verification * add test vectors, fetch proofs at the correct indicies * cleanup, remove outfiles, fetch merkle proof at the correct justified height * add logic to compare circuit field * check that circuit representation equals u256 representation in the test * send byte slice to wasm instead of byte array which lives on the stack * cleanup, remove debug statements, add documentation * remove error logs * fix build * lint fix * progress on e2e tests, comment out vid stuff for now because of wasm io issues * update espresso-sequencer-go tag, lint ci fix * cleanup, add issues for unresolved problems * remove block that spams transactions * comment out unused txns * add test for advz equivalence and use a smaller srs * Allow dead code in validation * Specify foundry version * Add random_get stub in wasi_snapshot_preview1 * Add stubs required in wasi_snapshot_preview1 * Fix `make lint` * Enable prover service to talk to L1 on host * Add builder timeout This allows the sequencer to make progress past block 1. These env vars have been changed in espresso-sequencer. * Add missing env var, more logging in e2e test * Revert "Fix `make lint`" This reverts commit 8be940c2ce941e7d65cd44400d4e161bb7c70cc7. * Fix go linting * Parse espresso messages * Add timeout limit * Fix the e2e test * Add timeout limit * Run the e2e test and switch test in 1 thread * Update the e2e workflow * Increase time limit * Specify the foundryup version in Dockerfile * Add sock_accept stub * Increase timeout limit * Build successfully * move ark-srs to dev dependencies * remove debug statements * remove out.txt * Fix the machine test * Fix CI * Fix switch test * Fix CI * Increase CI time limie * update lockfile * remove commented out replaces * newline * Use the latest foundry * RESET ME: debug * RESET ME: not run the CI in a container * RESET ME: remove the parallel * Update script to run tests locally - Run the same commands as on CI. - Add ability to run `cargo +nightly` to dev shell. - make clean: remove brotli build files. * set -parallel=2 * Fix e2e test * Skip some tests in CI * Skip tests in stylus * Remove parallelism restriction * Impl escape hatch on validator side * Fix tests * Generate the osp of hotshot liveness * Fix the fraud proof (#124) * Update contracts submodule * Upgrade go client * Fix the staker challenge tests --------- Co-authored-by: sveitser * Use espresso dev node * attempt to fix dockerfile * newline * WIP * WIP * download latest espresso module root * incorporate vid common data * Fix the validation pipeline * update go modules, e2e build step * add cbrotli wasm * ci fix attempt * dont build all test deps for e2e test * lint fixes * Use the self-hosted runner and install cbindgen in CI * Add time limit * Remove parallel in building * Fix the switch test * Decrease the waiting hotshot blocks * Use the ubuntu * Specify the foundry version * Enable -j * update foundry version * module root update * Fix the staker test * increase validation timeout for switch test * pin espresso-sequencer-go to new release v0.0.20 * Commit go.sum from running go mod tidy * sequencer info logs * Add escape hatch test in e2e test * Check the reactivate hotshot * Update validator to handle preconditions and panics before entering the espresso STF logic. * Improve readability of conditions in `handleEspressoPreConditions` and update the functions comments. * Further improve readability * Fix lint issue * Update the nitro testnode * Fix tests * Update contracts * Fix CI * Changes to `handleEspressoPreConditions` in `espresso_validation.go` to fix incorrect logic, and give more granular control to where and how the generated panic is handled in the validators STF via returned closures. * return nil when we need a no-op panic handler * Fix lint errors * Update contracts * Fix the validation * Remove the switch test * Fix CI * Remove postgres in espresso e2e test * Codeowners: add Alysia, Zach, Sneh (#154) For #146 * Remove Dockerfile.espresso (#156) * Remove Dockerfile.espresso * address review comments * add new line * Release 20240723 with 20240723-consensus This should include all our changes for nitro v3.1. - Check that the module root matches when downloading releases from github. * Check all "not found" errors Currently only the leveldb not found errors are handled. If a pebble not found error is returned by the backend it is propagated, causing the batchposter to fail to send transactions. With this change all DB not found errors are handled the same way. * Submit L2 Message to espresso network (#173) * Submit L2 Message to espresso network * add context timeout * check for hotshot liveness and add a polling interval to see if transactions were included in an espresso block * cleanup * lint * Draft the sovereign sequencer test * Add espresso transaction queue * Draft the espresso submission * Set a new l2 message type for the sovereign sequencer transactions * Attempt to write messages again * Fix typos and add some comments * Fix typo * add header to jst and submit transaction to espresso * Update go client for development * Confirm the transaction inclusion in hotshot * Fix the test * Unblock the building blocks * Update go client * Fix the sovereign test * add logs * cleanup * lint * Updage go client * not to fetch merkle proof if hotshot height is 0 * Cleanup * Fix CI * Add CI skip tests * remove unwanted variable * skipping some tests to make ci pass * skipping some tests to make ci pass --------- Co-authored-by: ImJeremyHe * Persistent storage for sovereign builder (#180) * Persistence storage for sovereign builder * add unit test * add unit test to ci and add mutex * Optional header in jst * initialize pending transactions if not present * remove unwanted test * resolve bugs * remove nil pointer panic * cleanup * revert to strings.contains * fix isErrNotFound --------- Co-authored-by: ImJeremyHe * Save digest artifacts into own directory per run (#182) * Save digest artifacts into own directory per run Currently it seems that we have too many digests in the folder and I think this breaks the assembly of the multiarch docker image. With this change only digests for the same run are saved in the same directory. * Fail docker image merge on wrong number of digests * Clean digests dir * Add dependabot rule to update nitro-testnode (#189) * Fix build (#191) * Add missing dependency * Use renamed variable, fix typo * dependabot: update contracts submodule (#193) * Pin the golint version in CI * Fix pebble panic (#192) * Fix pebble panic * lint * Update some outdated help on flags (#203) * Improve help texts for flags * Update e2e tests to use Sovereign sequencer (#204) * Update e2e tests to use Sovereign sequencer Co-authored-by: ImJeremyHe * Remove the global state for HotShot height (#210) * Remove the global state * Update the submodule * CI: use buildjet instead of self-hosted runner (#212) * CI: use buildjet instead of self-hosted runner * CI: use public runner / buildjet for docker build This removes usage of our self-hosted github runners. * CI: more disk space on public runner * Check disk space at end of runs * Try running CI tests from different directory This may avoid failures due to IPC paths being too long * Make workspace dir a symlink to /tmp/gha-work * Fix redis URL * Move redis tests to own workflow * CI: fix rust and go cache (#217) * rust-cache: add more target dirs * Don't set custom TMPDIR This seems to be the culprit for the extremely long path names that are too long for IPC paths. * modify arbosstate.go to allow for upgrade to arbOS version 35 (#216) * modify arbosstate.go to allow for upgrade to arbOS version 35 * Fix lint * Modify the chain config during the ArbOS upgrade --------- Co-authored-by: sveitser * CI: make more space (#218) * Store transaction pos in batch poster (#219) * Move submit transaction pos from tx_streamer to batch poster * Remove espresso sequencer (#214) * Remove espresso sequencer * lint * remove enable espresso * commit go-ethereum * fix solgen/gen.go * fix build * revert .gitmodules * revert go.mod * add enable espresso to validation check * re-add enable espresso to tests --------- Co-authored-by: Mathis * Update espresso-sequencer-go with new LC ABI (#230) * Update espresso-sequencer-go with new LC ABI Instead of using the block height from the first snapshot after the height in the justification it uses the latest height in the LC contract. Currently not 100% convinced about correctness but also believe it should work because any newer tree still contains the header of interest. * Undo LC ABI changes We're not comfortable with the previous change because making a proof w.r.t to the newest finalized state may cause issues if the batch poster is lagging behind. This is currently not easy to test so we decided to revert back to the old flow. * Use tag of espresso-sequencer-go * Stop setting the chain config during ArbOS upgrade in favor of setting it manually during migration process. (#234) * Use the tag before marketplace update (#238) * Sign payload for sovereign builder (#181) * Sign payload for sovereign builder * save signed payload to db * change parsing logic to include signature * add some comments * skip tests * address comments * add signature payload test * test working * fix logging and comments * move placement of log * fix ci * fix ci * only submit transaction if jst nil * add log to debug ci * use the latest instead of main for espresso-dev-node * pin to legacy lc version * pin to before marketplace version * remove log * Full node with espresso finality (#237) * wip * wip * Add espresso finality node test * fix ci * fix ci * pin to before marketplace version * fix tests * add comments * address comments * address comments * address comments * cleanup * fix test * fmt * rerun ci * ci skip tests * Update to sequencer.go to remove `EnableEspressoSovereign` flag, and instead sequence based on hotshot liveness at l1 block height. * Update node.go to remove reference to `EnableEspressoSovereign` * update Espresso tests to reflect removed config variables, and add escape hatch test to e2e test. * Add wait for hotshot liveness in sovereign sequencer test to ensure sovereign sequencer is enabled. * go fmt * Add comment to explain changes needed in replay binary when panics are no longer an issue. * Fix lint issues * Modify construction of lightClientReader in sequencer.go to allow for nil `l1Reader` * Update test configs to align with changes. * Update comments according to feedback. * Bump nitro-testnode from `03095e0` to `884a63c` (#240) Bumps [nitro-testnode](https://github.com/EspressoSystems/nitro-testnode) from `03095e0` to `884a63c`. - [Commits](https://github.com/EspressoSystems/nitro-testnode/compare/03095e0bb682dc404526611f8f14d380477c5f04...884a63cd9895295ea06d864f7e2e1e7741529141) --- updated-dependencies: - dependency-name: nitro-testnode dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mathis * Revert removal of `EnableEspressoSovereign` * Add additional check to ensure that if EnableEspressoSovereign is on we can't construct a sequencer with a nil lightClientReader * Add `EnableEspressoSovereign` config flag to test configs. * Bump contracts from `d226e9d` to `2ae1bbd` (#244) Bumps [contracts](https://github.com/EspressoSystems/nitro-contracts) from `d226e9d` to `2ae1bbd`. - [Release notes](https://github.com/EspressoSystems/nitro-contracts/releases) - [Commits](https://github.com/EspressoSystems/nitro-contracts/compare/d226e9da617a52ebd2dccd0680715812f1071446...2ae1bbd0761d9d54a5aeb13dc26ef038caf87857) --- updated-dependencies: - dependency-name: contracts dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Pin rust to 1.81.0 See https://github.com/EspressoSystems/nitro-espresso-integration/issues/257 * Set cargo config for espresso_crypto wasm build This was recently added for the other wasm compilation steps. * Pin rust in E2E test * CI: remove deprecated rust toolchain action * Fix if statement * Regenerate data-poster external-signer test certs (cherry picked from commit 8f961b0fc9f3ba5997c0d957759fb60a08552802) * Use ArbOS chain config as the cannonial chain config. (#252) * Add checks to sequencer.go and transaction_streamer.go to utilize the chain config switch * Update interface.go to export interface for `GetArbOSConfigAtHeight()` * Add implementation of `GetArbOSConfigAtHeight()` for `ExecutionEngine` * Add implementation of `GetArbOSConfigAtHeight()` for `ExecutionNode` * Update `sequencer.go` and `transaction_streamer.go` to read from the `ArbOS` `chainConfig` as the cannonical `chainConfig` rather than the `chainConfig` held by the `Blockchain` struct. * Add ArbOS chain config check in batch poster to stop adding espresso messages to the transaction streamers DB if EnableEspresso is false. * Add missing error check in sequencer.go and nil check on arbos config in sequencer.go and batch_poster.go. * Remove ineffectual assignment in sequencer.go * Add test for new GetArbOSConfigAtHeight() method in ExecutionNode This commit adds an integration test for the GetArbOSConfigAtHeight() method on the Execution node that grabs the initial config, and validates it, then updates the config and ensures that the new method will fetch the updated config. * restore nitro-testnode to proper commit * Fix trie node node found error during recording I'm not exactly clear why we need to do this or if it's indeed the right approach to solving the issue however it does seem to make it possible to validate again. Without it we get errors like INFO [10-30|12:24:29.127] DelayedSequencer: Sequenced msgnum=1 startpos=1 INFO [10-30|12:24:30.143] Reading message result remotely. count=3 WARN [10-30|12:24:32.143] prepareblocks failed to get state for block hdrNum=0 err="moved beyond genesis looking for state 0, genesis 0: missing trie node 147a5a93c0202b07e7d7e3c936a36a8d97913056045be3af23b95b0aa0b356c7 (path ) state 0x147a5a93c0202b07e7d7e3c936a36a8d97913056045be3af23b95b0aa0b356c7 is not available, not found" ERROR[10-30|12:24:32.143] Error while recording err="moved beyond genesis looking for state 0, genesis 0: missing trie node 147a5a93c0202b07e7d7e3c936a36a8d97913056045be3af23b95b0aa0b356c7 (path ) state 0x147a5a93c0202b07e7d7e3c936a36a8d97913056045be3af23b95b0aa0b356c7 is not available, not found" status=2 * Fix the OSP test - Enable 4844 blobs to avoid contract deployment error - Fix address of OSP entry * Disable batch poster in Espresso finality node We don't need this type of node to have a batch poster. Enabling it now causes the test to fail because there's a check to ensure that redis is used for the batch poster on the second node. * Re-allow setting L1 stack config for tests After the sync the code would always use the default values. Don't think this is very clean but I couldn't think of something better yet. * CI: increase parallelism * Fix linting - Run `golang-lint run --fix` - Check error after `waitForConfigUpdate` * Move finality node test to espresso tests The race test detected a data race in https://github.com/EspressoSystems/nitro-espresso-integration/actions/runs/11705919237/job/32601803846?pr=254 * Update contracts submodule * Fix typo * Add wabt and cmake in wasm shell * Skip tests * Add tags in ci * Add ci skip tests * Add ci skip tests * Remove rerun-fails This flag in gotestsum causes some bugs which multiple the test time. https://github.com/gotestyourself/gotestsum/issues/417 https://github.com/gotestyourself/gotestsum/issues/423 * Revert "Remove rerun-fails" This reverts commit 6bef1c3c8707d0a9375566c910de3e37b67a4f8c. * CI: simplify - Add scripts to debug more easily locally. - Skip tests by substring match instead of exact match. - Don't run coverage on CI, we never look at it. - Move all Espresso tests to Espresso CI job. * Fix build with nix on macos (#296) * CI: install latest gotestsum This enables the --hide-summary argument * Update submodule forks with merge commits * Bump nitro-testnode from `07a25f1` to `77d1447` (#297) Bumps [nitro-testnode](https://github.com/EspressoSystems/nitro-testnode) from `07a25f1` to `77d1447`. - [Commits](https://github.com/EspressoSystems/nitro-testnode/compare/07a25f1df5fcfe2c65c0a772e9a60b701f2f1fbe...77d144747675f2a4c843bd068ac81175245ca813) --- updated-dependencies: - dependency-name: nitro-testnode dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add FFI bindings for Espresso validation (#294) * Example call to espresso-crypto function stub in batch poster. This commit includes a log line and example call to the espresso-crypto function stubs in batch_poster.go * Result of `make fmt` Run `make fmt` to clean up formatting not apparent in editor * Make current lib.rs c abi compatible * result of make fmt * Add C ABI ffi between rust crypto lib and espressocrypto go module. This commit adds FFI support between exsisting Rust crypto helper code and the exsisting espressocrypto go module in native.go These functions will now serve as utility functions to use in the integration that will handle ffi to the Rust code. This commit also moves the espresso-crypto-helper code to the espressocrypto directory as we no longer need it for the arbitrator. * Build native.go successfully * Update the espresso-crypto and add test for merkle proof verification * update flake.nix to new go version and fix errors * Current state of work The current state of my work revolves around editing the Makefile to include the new espressocrypto ffi functions in the build process. Additionally, this commit restores some espressocrypto code to the arbitrator in an attempt to get a docker image built via the test node. I felt as though this would be easier for this PR as opposed to ripping out all of the code from the arbitrator. * Update the flake.lock * Add the namespace proof test * Current state of build system changes This commit represents the current state of the build system after testing today. Currently things compile locally, but not when building an image from the docker file. There are errors related to duplicate function definitions from what seem to be the FFI lib that stylus exposes. * Build nitro docker image sucessfully - Modify makefile to have a file target. Since the build artifact of our static library is a file we should use this as the make target (instead of only having PHONY targets). - Use rust 1.81 to build all shared rust libraries in docker. Our crate requires a minimum version of 1.81. However the other libraries like libstylus.a are currently compiled with 1.75 and this seems to cause issues with duplicate symbol definitions during linking. For example: 8.718 go build -ldflags="-extldflags '-ldl' -X github.com/offchainlabs/nitro/cmd/util/confighelpers.version= -X github.com/offchainlabs/nitro/cmd/util/confighelpers.datetime= -X github.com/offchainlabs/nitro/cmd/util/confighelpers.modified=" -o target/bin/nitro "/workspace/cmd/nitro" 42.74 # github.com/offchainlabs/nitro/cmd/nitro 42.74 /usr/local/go/pkg/tool/linux_amd64/link: running clang failed: exit status 1 42.74 /usr/bin/ld: /workspace/espressocrypto/lib/espresso-crypto-helper/target/release/libespresso_crypto_helper.a(std-1c4b19562077c20d.std.1f2242ed6435445e-cgu.0.rcgu.o): in function `__rdl_alloc': 42.74 /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/alloc.rs:397: multiple definition of `__rdl_alloc'; /workspace/execution/gethexec/../../target/lib/libstylus.a(std-90f6ddbf82de36ec.std.409886f6357001f0-cgu.0.rcgu.o):/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/alloc.rs:389: first defined here Bump the rust version of the prover-header-builder to 1.81 and compile the espresso crypto library in the same container. * Fix LDFLAGS, remove unnecessary CFLAGS * Fix some merge errors - We need rust 1.81 to compile the espresso crypto lib - Re-add makefile rules * Fix merge errors * Remove FFI call in batch poster to expidite merge. * Update bf submodule in arbitrator to match upstream version (This was set to a different commit during my erroneous merge) * Remove extra change in espressocrypto_wasm.go * Fix error with temporary espressocryptowasm directory preventing CI from running * fix error of missing function definitions in espressocryptowasm directory to allow CI to run * Re-add nosec comment about gosec error that will be removed soon * result of make fmt --------- Co-authored-by: Zach Showalter Co-authored-by: ImJeremyHe * Update the go client (#256) Still using the legacy dev node * ci: fix `git ls-remote` error in docker build (#304) * Use path context instead of git context With the default git context the repository is re-cloned at the start of the docker build and the .dockerignore file is ignored. > Be careful because any file mutation in the steps that precede the > build step will be ignored, including processing of the .dockerignore > file since the context is based on the Git reference. https://github.com/docker/build-push-action?tab=readme-ov-file#git-context This leads to some `.git` worktree files showing up inside the dockerbuild with triggers a bug in yarn. See https://github.com/yarnpkg/yarn/issues/7537#issuecomment-1099584308 for more details about the yarn bug. * Use the latest espresso dev node (#303) * Use the latest espresso dev node - Fix an issue that may cause the validation reorg - Waiting for L1 to be ready can avoid some potential bugs in dev node * Add proof validation to batch poster (#301) * Add espresso proof validation to batch poster Adds calls to the espresso validation code to the batch poster to validate the namespace proof and merkle proof in a TEE * result of make fmt * Fix lint errors * Add better logging * Fix batch poster after merge of upstream/integration * Remove espresso replay binary modifications (#307) * Remove espresso validation in the replay binary * Remove espresso-crypto related dependencies in arbitrator * remove espressocryptowasm * Update Makefile and Dockerfile to remove references to unused espresso crypto wasm lib * remove batch_poster.go.orig file * Fixes from make fmt * Remove espresso_ops_test * Remove additional code related to espresso validation in the staker * Remove changes on stateless block validator * Undo the stopwaiter Previous modifications on this was because we had to stop and start the seuquencers to function the escape hatch. Right now we don't need that anymore. These changes are from the upstream * Rename test flag --------- Co-authored-by: ImJeremyHe * Add attestation quote in batch poster (#306) * Add attestation quote in batch poster * write file * update batch poster * use read file * update to userDataHash * reduce file permissions * nit * Submit multiple messages in one transaction (#308) * Submit multiple messages in one transaction * Remove the espresso_transaction_payload_signature_test.go * Update go client * Remove signature and data signer * Remove arbitrator/espresso-crypto-helper * Add size limit to hotshot transaction --------- Co-authored-by: Sneh Koul * Use espresso-types instead of hard coded files * WIP: locally failed * Use upstream contracts submodule (#310) We no longer need the customizations in nitro-contracts (except potentially some deployment tools) so this commit resets it to the before the celestia contracts were added https://github.com/celestiaorg/nitro-contracts/commit/4f8c65c163a25296777d30813a10022b1d287b65 and makes the nitro code work with that version by removing the hotshot / light client address passed to the OSP. * Remove the legacy code and fix the batch poster (#318) * Remove the legacy code and fix the test * fix nix build on linux - flake: add openssl, pkg-config - rust: update espresso-types to latest to not require testing features * nix: fix build on darwin - Update nixpkgs - Set NIX_LDFLAGS to find missing symbols - Leave note about updating flake since the apple SDKs in nixpkgs have been changed substantially. * Transmute nstable * add celestia-integration branch to the ci --------- Signed-off-by: dependabot[bot] Co-authored-by: nomaxg Co-authored-by: sveitser Co-authored-by: Zach Showalter Co-authored-by: Sneh Koul <35871990+Sneh1999@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sneh Koul * Remove the oudated WASM binary (#329) * Add escape hatch (#330) * Clean flags (#335) * Checkout submodules recursively * Remove unnecessary flags in tx-streamer and sequencer * Remove redundant code (#340) * fix docker build (#338) * docker: install openssl, pkg-config Needed to compile openssl-sys crate. * ci: run amd64 docker build on PRs * Revert "ci: run amd64 docker build on PRs" This reverts commit 0974e29f0ca6ce778479de52f5fd4013f3eef158. * Avoid ARM build on PRs GitHub actions makes this really complicated. * ci: exclude: needs a list * symbol -> string * Fix conditional * Fix PR trigger * Update contracts submodule * Run yarn and forge install * Run yarn and forge install for espresso e2e as well * Run yarn and forge install for espresso e2e as well * fix e2e * fix tests * cleanup * comment out multiplatform build * fix tests * ci: skip multiplatform build on PRs * ci: fix indentation * ci: skip wavm extraction on PRs We don't push the image so we can't extract the wavm root. * ci: remove wavm machine release We are not planning to have an STF that differs from upstream. So this shouldn't be needed anymore. --------- Co-authored-by: Sneh Koul * Use verifier address (#341) * WIP: use geth submodule * replace EnableEspresso flag into verifier address * Update geth submodule * Nit * Increase the poll interval * Fix arbos test * DelayThreshold * Stop processing if no verifier address in chain config * chores * Lint * Fix tests * Fix * Clean up (#351) * Clean up * Remove changes to parse_l2.go * Clean up * remove attestation log --------- Co-authored-by: Sneh Koul * Fix logs for when espresso should not be enabled (#357) * Fix logs for when espresso should not be enabled * fix transacion_streamer * Add dockerfiles and other files needed to decode attestation quote (#358) * Update contract submodule * Update espresso dev node docker file * Remove unnecessary directory * Remove unnecessary changes * skip failing test --------- Signed-off-by: dependabot[bot] Co-authored-by: nomaxg Co-authored-by: sveitser Co-authored-by: Zach Showalter Co-authored-by: Sneh Koul <35871990+Sneh1999@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sneh Koul --- .github/actions/docker-image/action.yml | 5 +- .github/workflows/ci.yml | 6 +- .github/workflows/espresso-docker.yml | 61 +- .github/workflows/espresso-e2e.yml | 23 +- Dockerfile | 12 +- Dockerfile.sgx-poster | 17 + Makefile | 3 +- arbnode/batch_poster.go | 204 +- arbnode/inbox_test.go | 1 + arbnode/node.go | 3 +- arbnode/schema.go | 1 + arbnode/sequencer_inbox.go | 2 +- arbnode/transaction_streamer.go | 471 +- arbos/block_processor.go | 3 - arbos/parse_l2.go | 22 - ci_skip_tests | 1 + cmd/deploy/deploy.go | 8 +- cmd/replay/main.go | 1 - config/jwt.hex | 1 - config/l2_chain_info.json | 49 - config/sequencer_config.json | 77 - config/val_jwt.hex | 1 - config/validation_node_config.json | 19 - config/validator_config.json | 84 - contracts | 2 +- das/syncing_fallback_storage.go | 2 +- decode_report_data.sh | 12 + entrypoint.sh | 33 + .../lib/espresso-crypto-helper/Cargo.lock | 10644 ++++++++++++++-- .../lib/espresso-crypto-helper/Cargo.toml | 36 +- .../lib/espresso-crypto-helper/src/bytes.rs | 160 - .../src/full_payload.rs | 8 - .../src/full_payload/ns_proof.rs | 87 - .../src/full_payload/ns_table.rs | 277 - .../src/full_payload/payload.rs | 64 - .../src/hotshot_types.rs | 264 - .../lib/espresso-crypto-helper/src/lib.rs | 83 +- .../src/mock_data/header.json | 37 - .../src/mock_data/test_header.json | 31 - .../src/mock_data/test_merkle_path.json | 461 - .../src/namespace_payload.rs | 8 - .../src/namespace_payload/iter.rs | 8 - .../src/namespace_payload/ns_payload.rs | 116 - .../src/namespace_payload/ns_payload_range.rs | 34 - .../src/namespace_payload/tx_proof.rs | 24 - .../src/namespace_payload/types.rs | 382 - .../src/sequencer_data_structures.rs | 797 -- .../espresso-crypto-helper/src/uint_bytes.rs | 107 - .../lib/espresso-crypto-helper/src/utils.rs | 75 - .../src/v0_3/auction.rs | 130 - .../src/v0_3/chain_config.rs | 109 - .../espresso-crypto-helper/src/v0_3/header.rs | 70 - .../espresso-crypto-helper/src/v0_3/mod.rs | 13 - .../lib/espresso-crypto-helper/vid_srs.json | 1 - execution/gethexec/espresso_finality_node.go | 2 +- execution/gethexec/executionengine.go | 8 +- execution/gethexec/node.go | 3 +- execution/gethexec/sequencer.go | 89 +- execution/interface.go | 8 +- flake.lock | 19 +- flake.nix | 33 +- go-ethereum | 2 +- scripts/download-machine-espresso.sh | 32 - system_tests/batch_poster_test.go | 2 +- system_tests/common_test.go | 10 +- system_tests/espresso-e2e/docker-compose.yaml | 7 + .../espresso-e2e/validation_input.json | 120 - system_tests/espresso_arbos_test.go | 21 +- system_tests/espresso_e2e_test.go | 72 +- system_tests/espresso_escape_hatch_test.go | 143 + system_tests/espresso_finality_node_test.go | 4 +- .../espresso_sovereign_sequencer_test.go | 20 +- system_tests/full_challenge_impl_test.go | 10 +- system_tests/meaningless_reorg_test.go | 6 +- system_tests/seqinbox_test.go | 8 +- 75 files changed, 10243 insertions(+), 5526 deletions(-) create mode 100644 Dockerfile.sgx-poster delete mode 100644 config/jwt.hex delete mode 100644 config/l2_chain_info.json delete mode 100644 config/sequencer_config.json delete mode 100644 config/val_jwt.hex delete mode 100644 config/validation_node_config.json delete mode 100644 config/validator_config.json create mode 100644 decode_report_data.sh create mode 100644 entrypoint.sh delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/bytes.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/full_payload.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/full_payload/ns_proof.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/full_payload/ns_table.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/full_payload/payload.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/hotshot_types.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/mock_data/header.json delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/mock_data/test_header.json delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/mock_data/test_merkle_path.json delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/namespace_payload.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/iter.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/ns_payload.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/ns_payload_range.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/tx_proof.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/types.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/sequencer_data_structures.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/uint_bytes.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/utils.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/v0_3/auction.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/v0_3/chain_config.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/v0_3/header.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/src/v0_3/mod.rs delete mode 100644 espressocrypto/lib/espresso-crypto-helper/vid_srs.json delete mode 100755 scripts/download-machine-espresso.sh delete mode 100644 system_tests/espresso-e2e/validation_input.json create mode 100644 system_tests/espresso_escape_hatch_test.go diff --git a/.github/actions/docker-image/action.yml b/.github/actions/docker-image/action.yml index e2a34d66b6..6e50abbb3a 100644 --- a/.github/actions/docker-image/action.yml +++ b/.github/actions/docker-image/action.yml @@ -16,6 +16,9 @@ inputs: file: required: true type: string + push: + required: true + type: boolean outputs: digest: @@ -46,7 +49,7 @@ runs: platforms: ${{ inputs.platforms }} cache-from: type=registry,ref=${{ steps.metadata.outputs.tags }} cache-to: type=inline - outputs: type=image,name=${{ inputs.images }},push-by-digest=true,name-canonical=true,push=true + outputs: type=image,name=${{ inputs.images }},push-by-digest=true,name-canonical=true,push=${{ inputs.push }} # This will upload the digest for each architecture to the same artifact, # Note: upload-artifact@v4 will no longer support this. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c0c4d28f95..40526b1298 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,6 +10,7 @@ on: - master - develop - integration + - celestia-integration concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -55,7 +56,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - submodules: true + submodules: recursive - uses: cargo-bins/cargo-binstall@main - name: Make more disk space available on public runner @@ -180,6 +181,9 @@ jobs: if: steps.cache-cbrotli.outputs.cache-hit != 'true' run: ./scripts/build-brotli.sh -w -d + - name: Install solidty dependencies + run: cd contracts && yarn install && forge install + - name: Build run: make build -j diff --git a/.github/workflows/espresso-docker.yml b/.github/workflows/espresso-docker.yml index 371fb384b0..badba609ad 100644 --- a/.github/workflows/espresso-docker.yml +++ b/.github/workflows/espresso-docker.yml @@ -6,21 +6,19 @@ # so it's possible this was always the culprit. # # After building, the images are merged together to make a multiplatform image. -# -# The latest wavm machine is also copied and exported as an artifact. In nitro -# this seems to be later used as machine for the non-dev nitro-node build. -# For more details on that see the Dockerfile and ./scripts/download.sh name: Espresso Docker build CI run-name: Docker build CI triggered from @${{ github.actor }} of ${{ github.head_ref }} on: workflow_dispatch: merge_group: + pull_request: push: branches: - master - develop - integration + - celestia-integration tags: # YYYYMMDD - "20[0-9][0-9][0-1][0-9][0-3][0-9]*" @@ -34,21 +32,19 @@ jobs: strategy: matrix: platform: [linux/amd64, linux/arm64] - include: - - platform: linux/amd64 - runs-on: ubuntu-latest - - platform: linux/arm64 - runs-on: buildjet-4vcpu-ubuntu-2204-arm + # Don't run arm build on PRs, "exclude:" is processed before "include:", + # so we avoid using `include:`. + exclude: + - platform: ${{ github.event_name == 'pull_request' && 'linux/arm64' }} - runs-on: ${{ matrix.runs-on }} + runs-on: ${{ matrix.platform == 'linux/amd64' && 'ubuntu-latest' || 'buildjet-4vcpu-ubuntu-2204-arm' }} steps: - - uses: cargo-bins/cargo-binstall@main - if: matrix.runs-on == 'ubuntu-latest' + if: ${{ runner.arch != 'ARM64' }} - name: Make more disk space available on public runner - if: matrix.runs-on == 'ubuntu-latest' + if: ${{ runner.arch != 'ARM64' }} run: | # rmz seems to be faster at deleting files than rm cargo binstall -y rmz @@ -94,6 +90,7 @@ jobs: - name: Login to Github Container Repo uses: docker/login-action@v3 + if: github.event_name != 'pull_request' with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -107,6 +104,7 @@ jobs: images: ghcr.io/espressosystems/nitro-espresso-integration/nitro-node target: nitro-node platforms: ${{ matrix.platform }} + push: ${{ github.event_name != 'pull_request' }} - name: Build nitro-node-dev image uses: ./.github/actions/docker-image @@ -117,40 +115,10 @@ jobs: images: ghcr.io/espressosystems/nitro-espresso-integration/nitro-node-dev target: nitro-node-dev platforms: ${{ matrix.platform }} - - # The module root is not identical for the ARM build so we upload - # the binary only for AMD64. - - - name: Extract WAVM machine from container and print its root - if: matrix.platform == 'linux/amd64' - id: module-root - run: | - # Unfortunately, `docker cp` seems to always result in a "permission denied" - # We work around this by piping a tarball through stdout - digest="${{ steps.nitro-node-dev.outputs.digest }}" - image=ghcr.io/espressosystems/nitro-espresso-integration/nitro-node-dev@$digest - docker run --rm --entrypoint tar $image -cf - target/machines/latest | tar xf - - ls -lah target/machines/latest - module_root="$(cat "target/machines/latest/module-root.txt")" - echo "module-root=$module_root" >> $GITHUB_OUTPUT - echo -e "\x1b[1;34mWAVM module root:\x1b[0m $module_root" - - - name: Upload WAVM machine as artifact - uses: actions/upload-artifact@v3 - if: matrix.platform == 'linux/amd64' - with: - name: wavm-machine-${{ steps.module-root.outputs.module-root }} - path: target/machines/latest/* - if-no-files-found: error - - - name: Release wasm binary - uses: softprops/action-gh-release@v1 - if: matrix.platform == 'linux/amd64' && startsWith(github.ref, 'refs/tags/') - with: - files: target/machines/latest/* + push: ${{ github.event_name != 'pull_request' }} - name: Check available space after CI run - if: '!cancelled()' + if: "!cancelled()" run: | sudo df -h @@ -158,7 +126,10 @@ jobs: # # For documentation refer to # https://docs.docker.com/build/ci/github-actions/multi-platform/#distribute-build-across-multiple-runners + # Only building for AMD64 merge_into_multiplatform_images: + # We only build the ARM images for non-PR builds, so skip this job if we're on PRs. + if: github.event_name != 'pull_request' needs: - docker_build strategy: diff --git a/.github/workflows/espresso-e2e.yml b/.github/workflows/espresso-e2e.yml index 9a7e30feb3..6ec55e2258 100644 --- a/.github/workflows/espresso-e2e.yml +++ b/.github/workflows/espresso-e2e.yml @@ -7,6 +7,7 @@ on: push: branches: - integration + - celestia-integration concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -21,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - submodules: true + submodules: recursive - name: Install dependencies run: > @@ -46,9 +47,9 @@ jobs: - name: Setup nodejs uses: actions/setup-node@v3 with: - node-version: '18' - cache: 'yarn' - cache-dependency-path: '**/yarn.lock' + node-version: "18" + cache: "yarn" + cache-dependency-path: "**/yarn.lock" - name: Install go uses: actions/setup-go@v4 @@ -64,8 +65,8 @@ jobs: uses: dtolnay/rust-toolchain@stable with: # TODO: remove pinning: https://github.com/EspressoSystems/nitro-espresso-integration/issues/257 - toolchain: '1.81.0' - targets: 'wasm32-unknown-unknown, wasm32-wasi' + toolchain: "1.81.0" + targets: "wasm32-unknown-unknown, wasm32-wasi" - name: Install Foundry uses: foundry-rs/foundry-toolchain@v1 @@ -76,9 +77,9 @@ jobs: uses: dtolnay/rust-toolchain@nightly id: install-rust-nightly with: - toolchain: 'nightly-2024-08-06' - targets: 'wasm32-wasi, wasm32-unknown-unknown' - components: 'rust-src, rustfmt, clippy' + toolchain: "nightly-2024-08-06" + targets: "wasm32-wasi, wasm32-unknown-unknown" + components: "rust-src, rustfmt, clippy" - name: Cache Build Products uses: actions/cache@v3 @@ -123,6 +124,8 @@ jobs: if: steps.cache-cbrotli.outputs.cache-hit != 'true' run: ./scripts/build-brotli.sh -w -d + - name: Install solidty dependencies + run: cd contracts && yarn install && forge install - name: Build run: make build build-replay-env -j @@ -130,7 +133,7 @@ jobs: - name: Install docker-compose uses: KengoTODA/actions-setup-docker-compose@v1.2.1 with: - version: '2.22.0' + version: "2.22.0" - name: Run Espresso tests run: | diff --git a/Dockerfile b/Dockerfile index 97ba80ad29..5f0b4584e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -117,6 +117,8 @@ COPY scripts/build-brotli.sh scripts/ COPY brotli brotli RUN apt-get update && apt-get install -y cmake RUN NITRO_BUILD_IGNORE_TIMESTAMPS=1 make build-prover-header + +RUN apt-get install -y libssl-dev pkg-config RUN NITRO_BUILD_IGNORE_TIMESTAMPS=1 make build-espresso-crypto-lib FROM scratch AS prover-header-export @@ -222,16 +224,6 @@ RUN ./download-machine.sh consensus-v30 0xb0de9cb89e4d944ae6023a3b62276e54804c24 RUN ./download-machine.sh consensus-v31 0x260f5fa5c3176a856893642e149cf128b5a8de9f828afec8d11184415dd8dc69 RUN ./download-machine.sh consensus-v32 0x184884e1eb9fefdc158f6c8ac912bb183bf3cf83f0090317e0bc4ac5860baa39 -#Download Espresso WASM machine -COPY ./scripts/download-machine-espresso.sh . -# To use a new wasm machine -# 1. Create a release on github: for example YYYYMMDD-consensus -# 2. Find the module module-root.txt in the release artifacts on -# https://github.com/EspressoSystems/nitro-espresso-integration/releases -# and add the corresponding download step below. -# 3. Create a new release on github with the change: for example YYYYMMDD -RUN ./download-machine-espresso.sh 20240723-consensus 0x2422802a7cda99737209430b103689205bc8e56eab8b08c6ad409e65e45c3145 - FROM golang:1.21.10-bookworm AS node-builder WORKDIR /workspace ARG version="" diff --git a/Dockerfile.sgx-poster b/Dockerfile.sgx-poster new file mode 100644 index 0000000000..df463e6703 --- /dev/null +++ b/Dockerfile.sgx-poster @@ -0,0 +1,17 @@ +FROM ghcr.io/espressosystems/nitro-espresso-integration/nitro-node:20241203-celestia + +RUN curl -L -o kzg10-aztec20-srs-1048584.bin https://github.com/EspressoSystems/ark-srs/releases/download/v0.2.0/kzg10-aztec20-srs-1048584.bin + + +EXPOSE 8547 +EXPOSE 8548 + +ENV AZTEC_SRS_PATH=/home/user/kzg10-aztec20-srs-1048584.bin +ENV HOME=/home/user + +COPY --chown=user:user entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +USER user + +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/Makefile b/Makefile index 3da58a79ca..e2c83f32e3 100644 --- a/Makefile +++ b/Makefile @@ -571,8 +571,7 @@ contracts/test/prover/proofs/%.json: $(arbitrator_cases)/%.wasm $(prover_bin) .make/solidity: $(DEP_PREDICATE) safe-smart-account/contracts/*/*.sol safe-smart-account/contracts/*.sol contracts/src/*/*.sol .make/yarndeps $(ORDER_ONLY_PREDICATE) .make yarn --cwd safe-smart-account build - yarn --cwd contracts build - yarn --cwd contracts build:forge:yul + yarn --cwd contracts build:all @touch $@ .make/yarndeps: $(DEP_PREDICATE) contracts/package.json contracts/yarn.lock $(ORDER_ONLY_PREDICATE) .make diff --git a/arbnode/batch_poster.go b/arbnode/batch_poster.go index bd2c431057..18123f582e 100644 --- a/arbnode/batch_poster.go +++ b/arbnode/batch_poster.go @@ -55,7 +55,6 @@ import ( "github.com/offchainlabs/nitro/util" "github.com/offchainlabs/nitro/util/arbmath" "github.com/offchainlabs/nitro/util/blobs" - "github.com/offchainlabs/nitro/util/dbutil" "github.com/offchainlabs/nitro/util/headerreader" "github.com/offchainlabs/nitro/util/redisutil" "github.com/offchainlabs/nitro/util/stopwaiter" @@ -88,7 +87,8 @@ var ( const ( batchPosterSimpleRedisLockKey = "node.batch-poster.redis-lock.simple-lock-key" - sequencerBatchPostMethodName = "addSequencerL2BatchFromOrigin0" + oldSequencerBatchPostMethodName = "addSequencerL2BatchFromOrigin1" + newSequencerBatchPostMethodName = "addSequencerL2BatchFromOrigin" sequencerBatchPostWithBlobsMethodName = "addSequencerL2BatchFromBlobs" ) @@ -183,13 +183,20 @@ type BatchPosterConfig struct { gasRefunder common.Address l1BlockBound l1BlockBound // Espresso specific flags - LightClientAddress string `koanf:"light-client-address"` - HotShotUrl string `koanf:"hotshot-url"` - UserDataAttestationFile string `koanf:"user-data-attestation-file"` - QuoteFile string `koanf:"quote-file"` + LightClientAddress string `koanf:"light-client-address"` + HotShotUrl string `koanf:"hotshot-url"` + UserDataAttestationFile string `koanf:"user-data-attestation-file"` + QuoteFile string `koanf:"quote-file"` + UseEscapeHatch bool `koanf:"use-escape-hatch"` + EspressoTxnsPollingInterval time.Duration `koanf:"espresso-txns-polling-interval"` + EspressoSwitchDelayThreshold uint64 `koanf:"espresso-switch-delay-threshold"` } func (c *BatchPosterConfig) Validate() error { + if (c.LightClientAddress == "") != (c.HotShotUrl == "") { + return errors.New("light client address and hotshot URL must both be set together, or both left unset") + + } if len(c.GasRefunderAddress) > 0 && !common.IsHexAddress(c.GasRefunderAddress) { return fmt.Errorf("invalid gas refunder address \"%v\"", c.GasRefunderAddress) } @@ -241,6 +248,9 @@ func BatchPosterConfigAddOptions(prefix string, f *pflag.FlagSet) { f.Bool(prefix+".check-batch-correctness", DefaultBatchPosterConfig.CheckBatchCorrectness, "setting this to true will run the batch against an inbox multiplexer and verifies that it produces the correct set of messages") f.String(prefix+".user-data-attestation-file", DefaultBatchPosterConfig.UserDataAttestationFile, "specifies the file containing the user data attestation") f.String(prefix+".quote-file", DefaultBatchPosterConfig.QuoteFile, "specifies the file containing the quote") + f.Bool(prefix+".use-escape-hatch", DefaultBatchPosterConfig.UseEscapeHatch, "if true, batches will be posted without doing the espresso verification when hotshot is down. If false, wait for hotshot being up") + f.Duration(prefix+".espresso-txns-polling-interval", DefaultBatchPosterConfig.EspressoTxnsPollingInterval, "interval between polling for transactions to be included in the block") + f.Uint64(prefix+".espresso-switch-delay-threshold", DefaultBatchPosterConfig.EspressoSwitchDelayThreshold, "specifies the switch delay threshold used to determine hotshot liveness") redislock.AddConfigOptions(prefix+".redis-lock", f) dataposter.DataPosterConfigAddOptions(prefix+".data-poster", f, dataposter.DefaultDataPosterConfig) genericconf.WalletConfigAddOptions(prefix+".parent-chain-wallet", f, DefaultBatchPosterConfig.ParentChainWallet.Pathname) @@ -274,6 +284,11 @@ var DefaultBatchPosterConfig = BatchPosterConfig{ CheckBatchCorrectness: true, UserDataAttestationFile: "", QuoteFile: "", + UseEscapeHatch: false, + EspressoTxnsPollingInterval: time.Millisecond * 500, + EspressoSwitchDelayThreshold: 350, + LightClientAddress: "", + HotShotUrl: "", } var DefaultBatchPosterL1WalletConfig = genericconf.WalletConfig{ @@ -305,6 +320,11 @@ var TestBatchPosterConfig = BatchPosterConfig{ UseAccessLists: true, GasEstimateBaseFeeMultipleBips: arbmath.OneInUBips * 3 / 2, CheckBatchCorrectness: true, + UseEscapeHatch: false, + EspressoTxnsPollingInterval: time.Millisecond * 500, + EspressoSwitchDelayThreshold: 10, + LightClientAddress: "", + HotShotUrl: "", } type BatchPosterOpts struct { @@ -366,6 +386,9 @@ func NewBatchPoster(ctx context.Context, opts *BatchPosterOpts) (*BatchPoster, e return nil, err } opts.Streamer.lightClientReader = lightClientReader + opts.Streamer.UseEscapeHatch = opts.Config().UseEscapeHatch + opts.Streamer.espressoTxnsPollingInterval = opts.Config().EspressoTxnsPollingInterval + opts.Streamer.espressoSwitchDelayThreshold = opts.Config().EspressoSwitchDelayThreshold } b := &BatchPoster{ @@ -536,12 +559,16 @@ func AccessList(opts *AccessListOpts) types.AccessList { return l } +var EspressoFetchMerkleRootErr = errors.New("failed to fetch the espresso merkle roof") +var EspressoFetchTransactionErr = errors.New("failed to fetch the espresso transaction") + // Adds a block merkle proof to an Espresso justification, providing a proof that a set of transactions // hashes to some light client state root. func (b *BatchPoster) checkEspressoValidation( msg *arbostypes.MessageWithMetadata, ) error { - if !b.streamer.chainConfig.ArbitrumChainParams.EnableEspresso { + if b.streamer.espressoClient == nil && b.streamer.lightClientReader == nil { + // We are not using espresso mode since these haven't been set return nil } // We only submit the user transactions to hotshot. Only those messages created by @@ -554,43 +581,60 @@ func (b *BatchPoster) checkEspressoValidation( return nil } - arbOSConfig, err := b.arbOSVersionGetter.GetArbOSConfigAtHeight(0) + lastConfirmed, err := b.streamer.getLastConfirmedPos() if err != nil { - return fmt.Errorf("Failed call to GetArbOSConfigAtHeight: %w", err) - } - if arbOSConfig == nil { - return fmt.Errorf("Cannot use a nil ArbOSConfig") + log.Error("failed call to get last confirmed pos", "err", err) + return err } - if !arbOSConfig.ArbitrumChainParams.EnableEspresso { + + // This message has passed the espresso verification + if lastConfirmed != nil && b.building.msgCount <= *lastConfirmed { return nil } - hasNotSubmitted, err := b.streamer.HasNotSubmitted(b.building.msgCount) - if err != nil { - return err - } - if hasNotSubmitted { - // Store the pos in the database to be used later to submit the message - // to hotshot for finalization. - log.Info("submitting pos", "pos", b.building.msgCount) - err = b.streamer.SubmitEspressoTransactionPos(b.building.msgCount, b.streamer.db.NewBatch()) + if b.streamer.UseEscapeHatch { + skip, err := b.streamer.getSkipVerificationPos() if err != nil { - log.Error("failed to submit espresso transaction pos", "pos", b.building.msgCount, "err", err) + log.Error("failed call to get skip verification pos", "err", err) return err } - return fmt.Errorf("this msg has not been included in hotshot") + + // Skip checking espresso validation due to hotshot failure + if skip != nil { + if b.building.msgCount <= *skip { + log.Warn("skipped espresso verification due to hotshot failure", "pos", b.building.msgCount) + return nil + } + // TODO: if current position is greater than the `skip`, should set the + // the skip value to nil. This should contribute to better efficiency. + } } - lastConfirmed, err := b.streamer.getLastConfirmedPos() - if dbutil.IsErrNotFound(err) { - return fmt.Errorf("no confirmed message has been found") + if b.streamer.HotshotDown && b.streamer.UseEscapeHatch { + log.Warn("skipped espresso verification due to hotshot failure", "pos", b.building.msgCount) + return nil } + + return fmt.Errorf("%w (height: %d)", EspressoFetchMerkleRootErr, b.building.msgCount) +} + +func (b *BatchPoster) submitEspressoTransactionPos(pos arbutil.MessageIndex) error { + hasNotSubmitted, err := b.streamer.HasNotSubmitted(pos) if err != nil { return err } - if lastConfirmed < b.building.msgCount { - return fmt.Errorf("this msg has not been finalized on L1 or validated") + if !hasNotSubmitted { + return nil + } + + // Store the pos in the database to be used later to submit the message + // to hotshot for finalization. + err = b.streamer.SubmitEspressoTransactionPos(pos, b.streamer.db.NewBatch()) + if err != nil { + log.Error("failed to submit espresso transaction pos", "pos", pos, "err", err) + return err } + return nil } @@ -1052,27 +1096,20 @@ func (b *BatchPoster) encodeAddBatch( delayedMsg uint64, use4844 bool, ) ([]byte, []kzg4844.Blob, error) { - methodName := sequencerBatchPostMethodName - if use4844 { - methodName = sequencerBatchPostWithBlobsMethodName - } - method, ok := b.seqInboxABI.Methods[methodName] - if !ok { - return nil, nil, errors.New("failed to find add batch method") - } + var calldata []byte var kzgBlobs []kzg4844.Blob + fullCalldata := make([]byte, 0) var err error - var userData []byte if use4844 { + method, ok := b.seqInboxABI.Methods[sequencerBatchPostWithBlobsMethodName] + if !ok { + return nil, nil, errors.New("failed to find add batch method") + } kzgBlobs, err = blobs.EncodeBlobs(l2MessageData) if err != nil { return nil, nil, fmt.Errorf("failed to encode blobs: %w", err) } - _, blobHashes, err := blobs.ComputeCommitmentsAndHashes(kzgBlobs) - if err != nil { - return nil, nil, fmt.Errorf("failed to compute blob hashes: %w", err) - } // EIP4844 transactions to the sequencer inbox will not use transaction calldata for L2 info. calldata, err = method.Inputs.Pack( seqNum, @@ -1082,25 +1119,41 @@ func (b *BatchPoster) encodeAddBatch( new(big.Int).SetUint64(uint64(newMsgNum)), ) if err != nil { - return nil, nil, fmt.Errorf("failed to pack calldata: %w", err) + return nil, nil, fmt.Errorf("failed to pack calldata for eip-4844: %w", err) + } + fullCalldata = append(fullCalldata, method.ID...) + fullCalldata = append(fullCalldata, calldata...) + } else { + // initially constructing the calldata using the old oldSequencerBatchPostMethodName method + // This will allow us to get the attestation quote on the hash of the data + method, ok := b.seqInboxABI.Methods[oldSequencerBatchPostMethodName] + if !ok { + return nil, nil, errors.New("failed to find add batch method") } - // userData has blobHashes along with other calldata for EIP-4844 transactions - userData, err = method.Inputs.Pack( + calldata, err = method.Inputs.Pack( seqNum, + l2MessageData, new(big.Int).SetUint64(delayedMsg), b.config().gasRefunder, new(big.Int).SetUint64(uint64(prevMsgNum)), new(big.Int).SetUint64(uint64(newMsgNum)), - blobHashes, ) + if err != nil { - return nil, nil, fmt.Errorf("failed to pack user data: %w", err) + return nil, nil, fmt.Errorf("failed to pack calldata without attestation quote: %w", err) } - _, err = b.getAttestationQuote(userData) + + attestationQuote, err := b.getAttestationQuote(calldata) if err != nil { return nil, nil, fmt.Errorf("failed to get attestation quote: %w", err) } - } else { + + // construct the calldata with attestation quote + method, ok = b.seqInboxABI.Methods[newSequencerBatchPostMethodName] + if !ok { + return nil, nil, errors.New("failed to find add batch method") + } + calldata, err = method.Inputs.Pack( seqNum, l2MessageData, @@ -1108,20 +1161,16 @@ func (b *BatchPoster) encodeAddBatch( b.config().gasRefunder, new(big.Int).SetUint64(uint64(prevMsgNum)), new(big.Int).SetUint64(uint64(newMsgNum)), + attestationQuote, ) if err != nil { - return nil, nil, fmt.Errorf("failed to pack calldata: %w", err) - } - - _, err = b.getAttestationQuote(calldata) - if err != nil { - return nil, nil, fmt.Errorf("failed to get attestation quote: %w", err) + return nil, nil, fmt.Errorf("failed to pack calldata with attestation quote: %w", err) } + fullCalldata = append([]byte{}, method.ID...) + fullCalldata = append(fullCalldata, calldata...) } - // TODO: when contract is updated add attestationQuote to the calldata - fullCalldata := append([]byte{}, method.ID...) - fullCalldata = append(fullCalldata, calldata...) + return fullCalldata, kzgBlobs, nil } @@ -1157,7 +1206,6 @@ func (b *BatchPoster) getAttestationQuote(userData []byte) ([]byte, error) { return []byte{}, fmt.Errorf("failed to read quote file: %w", err) } - log.Info("Attestation quote generated", "quote", hex.EncodeToString(attestationQuote)) return attestationQuote, nil } @@ -1419,6 +1467,31 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) } } + // Submit message positions to pending queue + shouldSubmit := b.streamer.shouldSubmitEspressoTransaction() + if !b.streamer.UseEscapeHatch || shouldSubmit { + for p := b.building.msgCount; p < msgCount; p += 1 { + msg, err := b.streamer.GetMessage(p) + if err != nil { + log.Error("error getting message from streamer", "error", err) + break + } + // We only submit the user transactions to hotshot. + if msg.Message.Header.Kind != arbostypes.L1MessageType_L2Message { + continue + } + kind := msg.Message.L2msg[0] + if kind != arbos.L2MessageKind_Batch && kind != arbos.L2MessageKind_SignedTx { + continue + } + err = b.submitEspressoTransactionPos(p) + if err != nil { + log.Error("error submitting position", "error", err, "pos", p) + break + } + } + } + for b.building.msgCount < msgCount { msg, err := b.streamer.GetMessage(b.building.msgCount) if err != nil { @@ -1579,6 +1652,7 @@ func (b *BatchPoster) maybePostSequencerBatch(ctx context.Context) (bool, error) return false, fmt.Errorf("produced %v blobs for batch but a block can only hold %v (compressed batch was %v bytes long)", len(kzgBlobs), params.MaxBlobGasPerBlock/params.BlobTxBlobGasPerBlob, len(sequencerMsg)) } accessList := b.accessList(batchPosition.NextSeqNum, b.building.segments.delayedMsg) + // On restart, we may be trying to estimate gas for a batch whose successor has // already made it into pending state, if not latest state. // In that case, we might get a revert with `DelayedBackwards()`. @@ -1735,15 +1809,26 @@ func (b *BatchPoster) Start(ctxIn context.Context) { storageRaceEphemeralErrorHandler := util.NewEphemeralErrorHandler(5*time.Minute, storage.ErrStorageRace.Error(), time.Minute) normalGasEstimationFailedEphemeralErrorHandler := util.NewEphemeralErrorHandler(5*time.Minute, ErrNormalGasEstimationFailed.Error(), time.Minute) accumulatorNotFoundEphemeralErrorHandler := util.NewEphemeralErrorHandler(5*time.Minute, AccumulatorNotFoundErr.Error(), time.Minute) + espressoEphemeralErrorHandler := util.NewEphemeralErrorHandler(80*time.Minute, EspressoFetchMerkleRootErr.Error(), time.Hour) resetAllEphemeralErrs := func() { commonEphemeralErrorHandler.Reset() exceedMaxMempoolSizeEphemeralErrorHandler.Reset() storageRaceEphemeralErrorHandler.Reset() normalGasEstimationFailedEphemeralErrorHandler.Reset() accumulatorNotFoundEphemeralErrorHandler.Reset() + espressoEphemeralErrorHandler.Reset() } b.CallIteratively(func(ctx context.Context) time.Duration { var err error + espresso, _ := b.streamer.isEspressoMode() + if !espresso { + if b.streamer.lightClientReader != nil && b.streamer.espressoClient != nil { + // This mostly happens when a non-espresso nitro is upgrading to espresso nitro. + // The batch poster is set a espresso client and a light client reader, but waiting + // for the upgrade action + return b.config().PollInterval + } + } if common.HexToAddress(b.config().GasRefunderAddress) != (common.Address{}) { gasRefunderBalance, err := b.l1Reader.Client().BalanceAt(ctx, common.HexToAddress(b.config().GasRefunderAddress), nil) if err != nil { @@ -1786,6 +1871,7 @@ func (b *BatchPoster) Start(ctxIn context.Context) { // Likely the inbox tracker just isn't caught up. // Let's see if this error disappears naturally. logLevel = commonEphemeralErrorHandler.LogLevel(err, logLevel) + logLevel = espressoEphemeralErrorHandler.LogLevel(err, logLevel) // If the error matches one of these, it's only logged at debug for the first minute, // then at warn for the next 4 minutes, then at error. If the error isn't one of these, // it'll be logged at warn for the first minute, then at error. diff --git a/arbnode/inbox_test.go b/arbnode/inbox_test.go index a1703d2fd1..d579b7c278 100644 --- a/arbnode/inbox_test.go +++ b/arbnode/inbox_test.go @@ -59,6 +59,7 @@ func NewTransactionStreamerForTest(t *testing.T, ownerAddress common.Address) (* chainDb := rawdb.NewMemoryDatabase() arbDb := rawdb.NewMemoryDatabase() initReader := statetransfer.NewMemoryInitDataReader(&initData) + cacheConfig := core.DefaultCacheConfigWithScheme(env.GetTestStateScheme()) bc, err := gethexec.WriteOrTestBlockChain(chainDb, cacheConfig, initReader, chainConfig, arbostypes.TestInitMessage, gethexec.ConfigDefault.TxLookupLimit, 0) diff --git a/arbnode/node.go b/arbnode/node.go index a9da4ea24b..4d3ad5d8c7 100644 --- a/arbnode/node.go +++ b/arbnode/node.go @@ -49,7 +49,7 @@ import ( "github.com/offchainlabs/nitro/wsbroadcastserver" ) -func GenerateRollupConfig(prod bool, wasmModuleRoot common.Hash, rollupOwner common.Address, chainConfig *params.ChainConfig, serializedChainConfig []byte, loserStakeEscrow common.Address) rollupgen.Config { +func GenerateRollupConfig(prod bool, wasmModuleRoot common.Hash, rollupOwner common.Address, chainConfig *params.ChainConfig, serializedChainConfig []byte, loserStakeEscrow common.Address, espressoTEEVerifier common.Address) rollupgen.Config { var confirmPeriod uint64 if prod { confirmPeriod = 45818 @@ -65,6 +65,7 @@ func GenerateRollupConfig(prod bool, wasmModuleRoot common.Hash, rollupOwner com Owner: rollupOwner, LoserStakeEscrow: loserStakeEscrow, ChainId: chainConfig.ChainID, + EspressoTEEVerifier: espressoTEEVerifier, // TODO could the ChainConfig be just []byte? ChainConfig: string(serializedChainConfig), SequencerInboxMaxTimeVariation: rollupgen.ISequencerInboxMaxTimeVariation{ diff --git a/arbnode/schema.go b/arbnode/schema.go index 0a1ca02372..3ce1a3e871 100644 --- a/arbnode/schema.go +++ b/arbnode/schema.go @@ -21,6 +21,7 @@ var ( espressoSubmittedHash []byte = []byte("_espressoSubmittedHash") // contains the hash of the last submitted txn espressoPendingTxnsPositions []byte = []byte("_espressoPendingTxnsPositions") // contains the index of the pending txns that need to be submitted to espresso espressoLastConfirmedPos []byte = []byte("_espressoLastConfirmedPos") // contains the position of the last confirmed message + espressoSkipVerificationPos []byte = []byte("_espressoSkipVerificationPos") // contains the position of the latest message that should skip the validation due to hotshot liveness failure ) const currentDbSchemaVersion uint64 = 1 diff --git a/arbnode/sequencer_inbox.go b/arbnode/sequencer_inbox.go index 73e52ded53..9797b132d7 100644 --- a/arbnode/sequencer_inbox.go +++ b/arbnode/sequencer_inbox.go @@ -45,7 +45,7 @@ func init() { } batchDeliveredID = sequencerBridgeABI.Events["SequencerBatchDelivered"].ID sequencerBatchDataABI = sequencerBridgeABI.Events[sequencerBatchDataEvent] - addSequencerL2BatchFromOriginCallABI = sequencerBridgeABI.Methods["addSequencerL2BatchFromOrigin0"] + addSequencerL2BatchFromOriginCallABI = sequencerBridgeABI.Methods["addSequencerL2BatchFromOrigin"] } type SequencerInbox struct { diff --git a/arbnode/transaction_streamer.go b/arbnode/transaction_streamer.go index 82ba8fb864..4a7296caf5 100644 --- a/arbnode/transaction_streamer.go +++ b/arbnode/transaction_streamer.go @@ -19,6 +19,7 @@ import ( lightclient "github.com/EspressoSystems/espresso-sequencer-go/light-client" tagged_base64 "github.com/EspressoSystems/espresso-sequencer-go/tagged-base64" "github.com/offchainlabs/nitro/espressocrypto" + "github.com/offchainlabs/nitro/util" espressoClient "github.com/EspressoSystems/espresso-sequencer-go/client" espressoTypes "github.com/EspressoSystems/espresso-sequencer-go/types" @@ -32,7 +33,6 @@ import ( "github.com/ethereum/go-ethereum/rlp" flag "github.com/spf13/pflag" - "github.com/offchainlabs/nitro/arbos" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbutil" "github.com/offchainlabs/nitro/broadcaster" @@ -77,51 +77,41 @@ type TransactionStreamer struct { broadcastServer *broadcaster.Broadcaster inboxReader *InboxReader delayedBridge *DelayedBridge - espressoClient *espressoClient.Client - lightClientReader lightclient.LightClientReaderInterface + // Espresso specific fields. These fields are set from batch poster + espressoClient *espressoClient.Client + lightClientReader lightclient.LightClientReaderInterface + espressoTxnsPollingInterval time.Duration + espressoSwitchDelayThreshold uint64 + // Public these fields for testing + HotshotDown bool + UseEscapeHatch bool } type TransactionStreamerConfig struct { MaxBroadcasterQueueSize int `koanf:"max-broadcaster-queue-size"` MaxReorgResequenceDepth int64 `koanf:"max-reorg-resequence-depth" reload:"hot"` ExecuteMessageLoopDelay time.Duration `koanf:"execute-message-loop-delay" reload:"hot"` - - // Espresso specific fields - SovereignSequencerEnabled bool `koanf:"sovereign-sequencer-enabled"` - HotShotUrl string `koanf:"hotshot-url"` - EspressoNamespace uint64 `koanf:"espresso-namespace"` - EspressoTxnsPollingInterval time.Duration `koanf:"espresso-txns-polling-interval"` } type TransactionStreamerConfigFetcher func() *TransactionStreamerConfig var DefaultTransactionStreamerConfig = TransactionStreamerConfig{ - MaxBroadcasterQueueSize: 50_000, - MaxReorgResequenceDepth: 1024, - ExecuteMessageLoopDelay: time.Millisecond * 100, - SovereignSequencerEnabled: false, - HotShotUrl: "", - EspressoTxnsPollingInterval: time.Millisecond * 100, + MaxBroadcasterQueueSize: 50_000, + MaxReorgResequenceDepth: 1024, + ExecuteMessageLoopDelay: time.Millisecond * 100, } var TestTransactionStreamerConfig = TransactionStreamerConfig{ - MaxBroadcasterQueueSize: 10_000, - MaxReorgResequenceDepth: 128 * 1024, - ExecuteMessageLoopDelay: time.Millisecond, - SovereignSequencerEnabled: false, - HotShotUrl: "", - EspressoTxnsPollingInterval: time.Millisecond * 100, + MaxBroadcasterQueueSize: 10_000, + MaxReorgResequenceDepth: 128 * 1024, + ExecuteMessageLoopDelay: time.Millisecond, } func TransactionStreamerConfigAddOptions(prefix string, f *flag.FlagSet) { f.Int(prefix+".max-broadcaster-queue-size", DefaultTransactionStreamerConfig.MaxBroadcasterQueueSize, "maximum cache of pending broadcaster messages") f.Int64(prefix+".max-reorg-resequence-depth", DefaultTransactionStreamerConfig.MaxReorgResequenceDepth, "maximum number of messages to attempt to resequence on reorg (0 = never resequence, -1 = always resequence)") f.Duration(prefix+".execute-message-loop-delay", DefaultTransactionStreamerConfig.ExecuteMessageLoopDelay, "delay when polling calls to execute messages") - f.Bool(prefix+".sovereign-sequencer-enabled", DefaultTransactionStreamerConfig.SovereignSequencerEnabled, "if true, transactions will be sent to espresso's sovereign sequencer to be notarized by espresso network") - f.String(prefix+".hotshot-url", DefaultTransactionStreamerConfig.HotShotUrl, "url of the hotshot sequencer") - f.Uint64(prefix+".espresso-namespace", DefaultTransactionStreamerConfig.EspressoNamespace, "espresso namespace that corresponds the L2 chain") - f.Duration(prefix+".espresso-txns-polling-interval", DefaultTransactionStreamerConfig.EspressoTxnsPollingInterval, "interval between polling for transactions to be included in the block") } func NewTransactionStreamer( @@ -144,12 +134,6 @@ func NewTransactionStreamer( snapSyncConfig: snapSyncConfig, } - if config().SovereignSequencerEnabled { - espressoClient := espressoClient.NewClient(config().HotShotUrl) - streamer.espressoClient = espressoClient - - } - err := streamer.cleanupInconsistentState() if err != nil { return nil, err @@ -686,6 +670,21 @@ func (s *TransactionStreamer) AddFakeInitMessage() error { }}) } +func (s *TransactionStreamer) isEspressoMode() (bool, error) { + config, err := s.exec.GetArbOSConfigAtHeight(0) // Pass 0 to get the ArbOS config at current block height. + if err != nil { + return false, fmt.Errorf("error obtaining arbos config: %w", err) + } + if config == nil { + return false, fmt.Errorf("arbos config is not defined") + } + isSetInConfig := config.ArbitrumChainParams.EspressoTEEVerifierAddress != common.Address{} + if !isSetInConfig { + return false, nil + } + return true, nil +} + // Used in redis tests func (s *TransactionStreamer) GetMessageCountSync(t *testing.T) (arbutil.MessageIndex, error) { s.insertionMutex.Lock() @@ -1252,102 +1251,101 @@ func (s *TransactionStreamer) executeMessages(ctx context.Context, ignored struc return s.config().ExecuteMessageLoopDelay } -func (s *TransactionStreamer) pollSubmittedTransactionForFinality(ctx context.Context) time.Duration { +// Check if the latest submitted transaction has been finalized on L1 and verify it. +// Return a bool indicating whether a new transaction can be submitted to HotShot +func (s *TransactionStreamer) pollSubmittedTransactionForFinality(ctx context.Context) error { submittedTxnPos, err := s.getEspressoSubmittedPos() if err != nil { - log.Warn("submitted pos not found", "err", err) - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("submitted pos not found: %w", err) } if len(submittedTxnPos) == 0 { - return s.config().EspressoTxnsPollingInterval + return nil // no submitted transaction, treated as successful } + submittedTxHash, err := s.getEspressoSubmittedHash() if err != nil { - log.Warn("submitted hash not found", "err", err) - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("submitted hash not found: %w", err) + } + + if submittedTxHash == nil { + // this should not happen + return errors.New("missing the tx hash while the submitted txn position exists") } - data, err := s.espressoClient.FetchTransactionByHash(ctx, &submittedTxHash) + data, err := s.espressoClient.FetchTransactionByHash(ctx, submittedTxHash) if err != nil { - log.Warn("failed to fetch the submitted transaction hash", "err", err, "hash", submittedTxHash.String()) - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("failed to fetch the submitted transaction hash (hash: %s): %w", submittedTxHash.String(), err) } height := data.BlockHeight header, err := s.espressoClient.FetchHeaderByHeight(ctx, height) if err != nil { - log.Warn("could not get the header", "height", height, "err", err) - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("could not get the header (height: %d): %w", height, err) } // Verify the namespace proof - resp, err := s.espressoClient.FetchTransactionsInBlock(ctx, height, s.config().EspressoNamespace) + resp, err := s.espressoClient.FetchTransactionsInBlock(ctx, height, s.chainConfig.ChainID.Uint64()) if err != nil { - log.Warn("failed to fetch the transactions in block, will retry", "err", err) - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("failed to fetch the transactions in block (height: %d): %w", height, err) } msgs := []arbostypes.L1IncomingMessage{} for _, p := range submittedTxnPos { msg, err := s.GetMessage(p) if err != nil { - log.Error("failed to get the message in tx streamer", "pos", p) - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("failed to get the message in tx streamer (pos: %d): %w", p, err) } if msg.Message != nil { msgs = append(msgs, *msg.Message) } } - // Rebuild the hotshot payload with messages to check if it is finalizied - payload, length := arbos.BuildHotShotPayload(&msgs) + payload, length := buildHotShotPayload(&msgs) if length != len(msgs) { - log.Error("failed to rebuild the hotshot payload, it is expected rebuild the transaction within all messages") - return s.config().EspressoTxnsPollingInterval + return errors.New("failed to rebuild the hotshot payload; the number of messages does not match the expected length") } - namespaceOk := espressocrypto.VerifyNamespace(s.chainConfig.ChainID.Uint64(), resp.Proof, *header.Header.GetPayloadCommitment(), *header.Header.GetNsTable(), []espressoTypes.Bytes{payload}, resp.VidCommon) + namespaceOk := espressocrypto.VerifyNamespace( + s.chainConfig.ChainID.Uint64(), + resp.Proof, + *header.Header.GetPayloadCommitment(), + *header.Header.GetNsTable(), + []espressoTypes.Bytes{payload}, + resp.VidCommon, + ) if !namespaceOk { - log.Error("error validating namespace proof", "height", height) - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("error validating namespace proof (height: %d)", height) } - // Verify the merkle tree proof snapshot, err := s.lightClientReader.FetchMerkleRoot(height, nil) if err != nil { - log.Warn("could not get the merkle root", "height", height, "err", err) - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("%w (height: %d): %w", EspressoFetchMerkleRootErr, height, err) } if snapshot.Height <= height { - log.Error("got a wrong snapshot whose root height is not greater than the leaf", "height", height, "root height", snapshot.Height) - return s.config().EspressoTxnsPollingInterval + return errors.New("snapshot height is less than or equal to transaction height") } nextHeader, err := s.espressoClient.FetchHeaderByHeight(ctx, snapshot.Height) if err != nil { - log.Warn("error fetching the snapshot header", "height", snapshot.Height, "err", err) - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("error fetching the snapshot header (height: %d): %w", snapshot.Height, err) } proof, err := s.espressoClient.FetchBlockMerkleProof(ctx, snapshot.Height, height) if err != nil { - log.Warn("error fetching the block merkle proof", "height", height, "root height", snapshot.Height) - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("error fetching the block merkle proof (height: %d, root height: %d): %w", height, snapshot.Height, err) } blockMerkleTreeRoot := nextHeader.Header.GetBlockMerkleTreeRoot() jstHeader, err := json.Marshal(header) if err != nil { - log.Error("Failed to Marshal the header") - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("failed to marshal the header: %w", err) } ok := espressocrypto.VerifyMerkleProof(proof.Proof, jstHeader, *blockMerkleTreeRoot, snapshot.Root) if !ok { - log.Error("error validating merkle proof", "height", height, "snapshot height", snapshot.Height) - return s.config().EspressoTxnsPollingInterval + return fmt.Errorf("error validating merkle proof (height: %d, snapshot height: %d)", height, snapshot.Height) } // Validation completed. Update the database @@ -1355,35 +1353,30 @@ func (s *TransactionStreamer) pollSubmittedTransactionForFinality(ctx context.Co defer s.espressoTxnsStateInsertionMutex.Unlock() batch := s.db.NewBatch() - err = s.setEspressoSubmittedPos(batch, nil) - if err != nil { - log.Warn("failed to set the submitted pos to nil", "err", err) - return s.config().EspressoTxnsPollingInterval + if err := s.setEspressoSubmittedPos(batch, nil); err != nil { + return fmt.Errorf("failed to set the submitted pos to nil: %w", err) } - err = s.setEspressoSubmittedHash(batch, tagged_base64.TaggedBase64{}) - if err != nil { - log.Warn("failed to set the submitted hash to nil", "err", err) - return s.config().EspressoTxnsPollingInterval + if err := s.setEspressoSubmittedHash(batch, nil); err != nil { + return fmt.Errorf("failed to set the submitted hash to nil: %w", err) } lastConfirmedPos := submittedTxnPos[len(submittedTxnPos)-1] - err = s.setEspressoLastConfirmedPos(batch, lastConfirmedPos) - if err != nil { - log.Warn("failed to set the last confirmed position", "err", err, "pos", lastConfirmedPos) - return s.config().EspressoTxnsPollingInterval + if err := s.setEspressoLastConfirmedPos(batch, &lastConfirmedPos); err != nil { + return fmt.Errorf("failed to set the last confirmed position (pos: %d): %w", lastConfirmedPos, err) } - err = batch.Write() - if err != nil { - log.Error("failed to write to db", "err", err) - return s.config().EspressoTxnsPollingInterval + if err := batch.Write(); err != nil { + return fmt.Errorf("failed to write to db: %w", err) } - log.Info("Finality message", "pos", submittedTxnPos, "tx", submittedTxHash.String()) - return time.Duration(0) + + return nil } func (s *TransactionStreamer) getEspressoSubmittedPos() ([]arbutil.MessageIndex, error) { posBytes, err := s.db.Get(espressoSubmittedPos) if err != nil { + if dbutil.IsErrNotFound(err) { + return nil, nil + } return nil, err } @@ -1397,43 +1390,68 @@ func (s *TransactionStreamer) getEspressoSubmittedPos() ([]arbutil.MessageIndex, return pos, nil } -func (s *TransactionStreamer) getEspressoSubmittedHash() (espressoTypes.TaggedBase64, error) { +func (s *TransactionStreamer) getEspressoSubmittedHash() (*espressoTypes.TaggedBase64, error) { posBytes, err := s.db.Get(espressoSubmittedHash) if err != nil { - return espressoTypes.TaggedBase64{}, err + if dbutil.IsErrNotFound(err) { + return nil, nil + } + return nil, err } var hash string err = rlp.DecodeBytes(posBytes, &hash) if err != nil { - return espressoTypes.TaggedBase64{}, err + return nil, err } hashParsed, err := tagged_base64.Parse(hash) if hashParsed == nil { - return espressoTypes.TaggedBase64{}, err + return nil, err } - return espressoTypes.TaggedBase64(*hashParsed), nil + return hashParsed, nil } -func (s *TransactionStreamer) getLastConfirmedPos() (arbutil.MessageIndex, error) { +func (s *TransactionStreamer) getLastConfirmedPos() (*arbutil.MessageIndex, error) { lastConfirmedBytes, err := s.db.Get(espressoLastConfirmedPos) if err != nil { - return 0, err + if dbutil.IsErrNotFound(err) { + return nil, nil + } + return nil, err } var lastConfirmed arbutil.MessageIndex err = rlp.DecodeBytes(lastConfirmedBytes, &lastConfirmed) if err != nil { - return 0, err + return nil, err } - return lastConfirmed, nil + return &lastConfirmed, nil } -func (s *TransactionStreamer) getEspressoPendingTxnsPos() ([]*arbutil.MessageIndex, error) { +func (s *TransactionStreamer) getSkipVerificationPos() (*arbutil.MessageIndex, error) { + lastConfirmedBytes, err := s.db.Get(espressoSkipVerificationPos) + if err != nil { + if dbutil.IsErrNotFound(err) { + return nil, nil + } + return nil, err + } + var skipPos arbutil.MessageIndex + err = rlp.DecodeBytes(lastConfirmedBytes, &skipPos) + if err != nil { + return nil, err + } + return &skipPos, nil +} + +func (s *TransactionStreamer) getEspressoPendingTxnsPos() ([]arbutil.MessageIndex, error) { pendingTxnsBytes, err := s.db.Get(espressoPendingTxnsPositions) if err != nil { + if dbutil.IsErrNotFound(err) { + return nil, nil + } return nil, err } - var pendingTxnsPos []*arbutil.MessageIndex + var pendingTxnsPos []arbutil.MessageIndex err = rlp.DecodeBytes(pendingTxnsBytes, &pendingTxnsPos) if err != nil { return nil, err @@ -1441,7 +1459,7 @@ func (s *TransactionStreamer) getEspressoPendingTxnsPos() ([]*arbutil.MessageInd return pendingTxnsPos, nil } -func (s *TransactionStreamer) setEspressoSubmittedPos(batch ethdb.KeyValueWriter, pos []*arbutil.MessageIndex) error { +func (s *TransactionStreamer) setEspressoSubmittedPos(batch ethdb.KeyValueWriter, pos []arbutil.MessageIndex) error { // if pos is nil, delete the key if pos == nil { err := batch.Delete(espressoSubmittedPos) @@ -1460,7 +1478,7 @@ func (s *TransactionStreamer) setEspressoSubmittedPos(batch ethdb.KeyValueWriter return nil } -func (s *TransactionStreamer) setEspressoLastConfirmedPos(batch ethdb.KeyValueWriter, pos arbutil.MessageIndex) error { +func (s *TransactionStreamer) setEspressoLastConfirmedPos(batch ethdb.KeyValueWriter, pos *arbutil.MessageIndex) error { posBytes, err := rlp.EncodeToBytes(pos) if err != nil { return err @@ -1473,9 +1491,22 @@ func (s *TransactionStreamer) setEspressoLastConfirmedPos(batch ethdb.KeyValueWr return nil } -func (s *TransactionStreamer) setEspressoSubmittedHash(batch ethdb.KeyValueWriter, hash espressoTypes.TaggedBase64) error { +func (s *TransactionStreamer) setSkipVerifiactionPos(batch ethdb.KeyValueWriter, pos *arbutil.MessageIndex) error { + posBytes, err := rlp.EncodeToBytes(pos) + if err != nil { + return err + } + err = batch.Put(espressoSkipVerificationPos, posBytes) + if err != nil { + return err + + } + return nil +} + +func (s *TransactionStreamer) setEspressoSubmittedHash(batch ethdb.KeyValueWriter, hash *espressoTypes.TaggedBase64) error { // if hash is nil, delete the key - if hash.Value() == nil { + if hash == nil { err := batch.Delete(espressoSubmittedHash) return err } @@ -1492,7 +1523,7 @@ func (s *TransactionStreamer) setEspressoSubmittedHash(batch ethdb.KeyValueWrite return nil } -func (s *TransactionStreamer) setEspressoPendingTxnsPos(batch ethdb.KeyValueWriter, pos []*arbutil.MessageIndex) error { +func (s *TransactionStreamer) setEspressoPendingTxnsPos(batch ethdb.KeyValueWriter, pos []arbutil.MessageIndex) error { if pos == nil { err := batch.Delete(espressoPendingTxnsPositions) return err @@ -1512,7 +1543,7 @@ func (s *TransactionStreamer) setEspressoPendingTxnsPos(batch ethdb.KeyValueWrit func (s *TransactionStreamer) HasNotSubmitted(pos arbutil.MessageIndex) (bool, error) { submitted, err := s.getEspressoSubmittedPos() - if err != nil && !dbutil.IsErrNotFound(err) { + if err != nil { return false, err } @@ -1521,11 +1552,11 @@ func (s *TransactionStreamer) HasNotSubmitted(pos arbutil.MessageIndex) (bool, e } lastConfirmed, err := s.getLastConfirmedPos() - if err != nil && !dbutil.IsErrNotFound(err) { + if err != nil { return false, err } - if pos <= lastConfirmed { + if lastConfirmed != nil && pos <= *lastConfirmed { return false, nil } @@ -1534,7 +1565,7 @@ func (s *TransactionStreamer) HasNotSubmitted(pos arbutil.MessageIndex) (bool, e return false, err } - if len(pendingTxnsPos) > 0 && pos <= *pendingTxnsPos[len(pendingTxnsPos)-1] { + if len(pendingTxnsPos) > 0 && pos <= pendingTxnsPos[len(pendingTxnsPos)-1] { return false, nil } @@ -1544,16 +1575,15 @@ func (s *TransactionStreamer) HasNotSubmitted(pos arbutil.MessageIndex) (bool, e // Append a position to the pending queue. Please ensure this position is valid beforehand. func (s *TransactionStreamer) SubmitEspressoTransactionPos(pos arbutil.MessageIndex, batch ethdb.Batch) error { pendingTxnsPos, err := s.getEspressoPendingTxnsPos() - if err != nil && !dbutil.IsErrNotFound(err) { - log.Error("failed to get the pending txns position", "err", err) + if err != nil { return err } - if err != nil && dbutil.IsErrNotFound(err) { + if pendingTxnsPos == nil { // if the key doesn't exist, create a new array with the pos - pendingTxnsPos = []*arbutil.MessageIndex{&pos} + pendingTxnsPos = []arbutil.MessageIndex{pos} } else { - pendingTxnsPos = append(pendingTxnsPos, &pos) + pendingTxnsPos = append(pendingTxnsPos, pos) } err = s.setEspressoPendingTxnsPos(batch, pendingTxnsPos) if err != nil { @@ -1569,56 +1599,43 @@ func (s *TransactionStreamer) SubmitEspressoTransactionPos(pos arbutil.MessageIn return nil } -func (s *TransactionStreamer) submitEspressoTransactions(ctx context.Context, ignored struct{}) time.Duration { - - _, err := s.getEspressoSubmittedPos() - - if err != nil && !dbutil.IsErrNotFound(err) { - log.Warn("error getting submitted pos", "err", err) - return s.config().EspressoTxnsPollingInterval - } - - if err == nil { - if s.pollSubmittedTransactionForFinality(ctx) != time.Duration(0) { - return s.config().EspressoTxnsPollingInterval - } - } +func (s *TransactionStreamer) submitEspressoTransactions(ctx context.Context) time.Duration { pendingTxnsPos, err := s.getEspressoPendingTxnsPos() if err != nil { - return s.config().EspressoTxnsPollingInterval + return s.espressoTxnsPollingInterval } if len(pendingTxnsPos) > 0 { // get the message at the pending txn position msgs := []arbostypes.L1IncomingMessage{} for _, pos := range pendingTxnsPos { - msg, err := s.GetMessage(*pos) + msg, err := s.GetMessage(pos) if err != nil { log.Error("failed to get espresso submitted pos", "err", err) - return s.config().EspressoTxnsPollingInterval + return s.espressoTxnsPollingInterval } if msg.Message != nil { msgs = append(msgs, *msg.Message) } } - payload, msgCnt := arbos.BuildHotShotPayload(&msgs) + payload, msgCnt := buildHotShotPayload(&msgs) if msgCnt == 0 { log.Error("failed to build the hotshot transaction: a large message has exceeded the size limit") - return s.config().EspressoTxnsPollingInterval + return s.espressoTxnsPollingInterval } - log.Info("submitting transaction to espresso using sovereign sequencer") + log.Info("submitting transaction to hotshot for finalization") // Note: same key should not be used for two namespaces for this to work hash, err := s.espressoClient.SubmitTransaction(ctx, espressoTypes.Transaction{ Payload: payload, - Namespace: s.config().EspressoNamespace, + Namespace: s.chainConfig.ChainID.Uint64(), }) if err != nil { log.Error("failed to submit transaction to espresso", "err", err) - return s.config().EspressoTxnsPollingInterval + return s.espressoTxnsPollingInterval } s.espressoTxnsStateInsertionMutex.Lock() @@ -1629,55 +1646,209 @@ func (s *TransactionStreamer) submitEspressoTransactions(ctx context.Context, ig err = s.setEspressoSubmittedPos(batch, submittedPos) if err != nil { log.Error("failed to set the submitted txn pos", "err", err) - return s.config().EspressoTxnsPollingInterval + return s.espressoTxnsPollingInterval } pendingTxnsPos = pendingTxnsPos[msgCnt:] err = s.setEspressoPendingTxnsPos(batch, pendingTxnsPos) if err != nil { log.Error("failed to set the pending txns", "err", err) - return s.config().EspressoTxnsPollingInterval + return s.espressoTxnsPollingInterval } - err = s.setEspressoSubmittedHash(batch, *hash) + err = s.setEspressoSubmittedHash(batch, hash) if err != nil { log.Error("failed to set the submitted hash", "err", err) - return s.config().EspressoTxnsPollingInterval + return s.espressoTxnsPollingInterval } err = batch.Write() if err != nil { log.Error("failed to write to db", "err", err) - return s.config().EspressoTxnsPollingInterval + return s.espressoTxnsPollingInterval } } - return s.config().EspressoTxnsPollingInterval + return s.espressoTxnsPollingInterval } -func (s *TransactionStreamer) espressoSwitch(ctx context.Context, ignored struct{}) time.Duration { - retryRate := s.config().EspressoTxnsPollingInterval * 50 - config, err := s.exec.GetArbOSConfigAtHeight(0) // Pass 0 to get the ArbOS config at current block height. +func (s *TransactionStreamer) toggleEscapeHatch(ctx context.Context) error { + live, err := s.lightClientReader.IsHotShotLive(s.espressoSwitchDelayThreshold) if err != nil { - log.Error("Error Obtaining ArbOS Config ", "err", err) - return retryRate + return err } - if config == nil { - log.Error("ArbOS Config is nil") + // If hotshot is down, escape hatch is activated, the only thing is to check if hotshot is live again + if s.HotshotDown { + if live { + log.Info("HotShot is up, disabling the escape hatch") + s.HotshotDown = false + } + return nil + } + + // If hotshot is up, escape hatch is disabled + // - check if escape hatch should be activated + // - check if the submitted transaction should be skipped from espresso verification + if !live { + log.Warn("enabling the escape hatch, hotshot is down") + s.HotshotDown = true + } + + submittedHash, err := s.getEspressoSubmittedHash() + if err != nil { + return err + } + + if submittedHash == nil { + return nil + } + + // If a submitted transaction is waiting for being finalized, check if hotshot is live at + // the corresponding L1 height. + data, err := s.espressoClient.FetchTransactionByHash(ctx, submittedHash) + if err != nil { + return err + } + + header, err := s.espressoClient.FetchHeaderByHeight(ctx, data.BlockHeight) + if err != nil { + return err + } + + l1Height := header.Header.GetL1Head() + hotshotLive, err := s.lightClientReader.IsHotShotLiveAtHeight(l1Height, s.espressoSwitchDelayThreshold) + if err != nil { + return err + } + if hotshotLive { + return nil + } + submitted, err := s.getEspressoSubmittedPos() + if err != nil { + return err + } + if len(submitted) == 0 { + return fmt.Errorf("submitted messages should not have the length of 0") + } + + last := submitted[len(submitted)-1] + + s.espressoTxnsStateInsertionMutex.Lock() + defer s.espressoTxnsStateInsertionMutex.Unlock() + + batch := s.db.NewBatch() + if s.UseEscapeHatch { + // If escape hatch is used, write down the allowed skip position + // to the database. Batch poster will read this and circumvent the espresso validation + // for certain messages + err = s.setEspressoSubmittedHash(batch, nil) + if err != nil { + return err + } + err = s.setEspressoSubmittedPos(batch, nil) + if err != nil { + return err + } + err = s.setEspressoPendingTxnsPos(batch, nil) + if err != nil { + return err + } + log.Warn("setting last skip verification position", "pos", last) + err = s.setSkipVerifiactionPos(batch, &last) + if err != nil { + return err + } + } + err = batch.Write() + if err != nil { + return err + } + + return nil +} + +var espressoMerkleProofEphemeralErrorHandler = util.NewEphemeralErrorHandler(80*time.Minute, EspressoFetchMerkleRootErr.Error(), time.Hour) +var espressoTransactionEphemeralErrorHandler = util.NewEphemeralErrorHandler(3*time.Minute, EspressoFetchTransactionErr.Error(), time.Minute) + +func getLogLevel(err error) func(string, ...interface{}) { + logLevel := log.Error + logLevel = espressoMerkleProofEphemeralErrorHandler.LogLevel(err, logLevel) + logLevel = espressoTransactionEphemeralErrorHandler.LogLevel(err, logLevel) + return logLevel +} + +func (s *TransactionStreamer) espressoSwitch(ctx context.Context, ignored struct{}) time.Duration { + retryRate := s.espressoTxnsPollingInterval * 50 + enabledEspresso, err := s.isEspressoMode() + if err != nil { return retryRate } - if config.ArbitrumChainParams.EnableEspresso { - return s.submitEspressoTransactions(ctx, ignored) + if enabledEspresso { + err := s.toggleEscapeHatch(ctx) + if err != nil { + if ctx.Err() != nil { + return 0 + } + logLevel := getLogLevel(err) + logLevel("error checking escape hatch, will retry", "err", err) + return retryRate + } + err = s.pollSubmittedTransactionForFinality(ctx) + if err != nil { + if ctx.Err() != nil { + return 0 + } + logLevel := getLogLevel(err) + logLevel("error polling finality", "err", err) + return retryRate + } else { + espressoMerkleProofEphemeralErrorHandler.Reset() + } + + shouldSubmit := s.shouldSubmitEspressoTransaction() + if shouldSubmit { + return s.submitEspressoTransactions(ctx) + } + + return s.espressoTxnsPollingInterval } else { return retryRate } } +func (s *TransactionStreamer) shouldSubmitEspressoTransaction() bool { + return !s.HotshotDown +} + func (s *TransactionStreamer) Start(ctxIn context.Context) error { s.StopWaiter.Start(ctxIn, s) - err := stopwaiter.CallIterativelyWith[struct{}](&s.StopWaiterSafe, s.espressoSwitch, s.newSovereignTxNotifier) - if err != nil { - return err + if s.lightClientReader != nil && s.espressoClient != nil { + err := stopwaiter.CallIterativelyWith[struct{}](&s.StopWaiterSafe, s.espressoSwitch, s.newSovereignTxNotifier) + if err != nil { + return err + } + } else { + log.Warn("light client reader or espresso client not set, skipping espresso verification") } return stopwaiter.CallIterativelyWith[struct{}](&s.StopWaiterSafe, s.executeMessages, s.newMessageNotifier) } + +const ESPRESSO_TRANSACTION_SIZE_LIMIT int = 10 * 1024 + +func buildHotShotPayload(msgs *[]arbostypes.L1IncomingMessage) (espressoTypes.Bytes, int) { + payload := []byte{} + msgCnt := 0 + + sizeBuf := make([]byte, 8) + for _, msg := range *msgs { + if len(payload) >= ESPRESSO_TRANSACTION_SIZE_LIMIT { + break + } + msgByte := msg.L2msg + binary.BigEndian.PutUint64(sizeBuf, uint64(len(msgByte))) + payload = append(payload, sizeBuf...) + payload = append(payload, msgByte...) + msgCnt += 1 + } + return payload, msgCnt +} diff --git a/arbos/block_processor.go b/arbos/block_processor.go index e14397897e..b180405c43 100644 --- a/arbos/block_processor.go +++ b/arbos/block_processor.go @@ -38,8 +38,6 @@ var L2ToL1TxEventID common.Hash var EmitReedeemScheduledEvent func(*vm.EVM, uint64, uint64, [32]byte, [32]byte, common.Address, *big.Int, *big.Int) error var EmitTicketCreatedEvent func(*vm.EVM, [32]byte) error -const NOT_EXPECTED_BUILDER_ERROR string = "This transaction is part of a block not built by the desired builder" - // A helper struct that implements String() by marshalling to JSON. // This is useful for logging because it's lazy, so if the log level is too high to print the transaction, // it doesn't waste compute marshalling the transaction when the result wouldn't be used. @@ -154,7 +152,6 @@ func ProduceBlock( } hooks := NoopSequencingHooks() - return ProduceBlockAdvanced( message.Header, txes, delayedMessagesRead, lastBlockHeader, statedb, chainContext, chainConfig, hooks, isMsgForPrefetch, ) diff --git a/arbos/parse_l2.go b/arbos/parse_l2.go index 9d372ff803..06722e4063 100644 --- a/arbos/parse_l2.go +++ b/arbos/parse_l2.go @@ -2,14 +2,12 @@ package arbos import ( "bytes" - "encoding/binary" "errors" "fmt" "io" "math/big" "time" - espressoTypes "github.com/EspressoSystems/espresso-sequencer-go/types" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" @@ -19,8 +17,6 @@ import ( "github.com/offchainlabs/nitro/util/arbmath" ) -const ESPRESSO_TRANSACTION_SIZE_LIMIT int = 10 * 1024 - func ParseL2Transactions(msg *arbostypes.L1IncomingMessage, chainId *big.Int) (types.Transactions, error) { if len(msg.L2msg) > arbostypes.MaxL2MessageSize { // ignore the message if l2msg is too large @@ -397,21 +393,3 @@ func parseBatchPostingReportMessage(rd io.Reader, chainId *big.Int, msgBatchGasC // don't need to fill in the other fields, since they exist only to ensure uniqueness, and batchNum is already unique }), nil } - -func BuildHotShotPayload(msgs *[]arbostypes.L1IncomingMessage) (espressoTypes.Bytes, int) { - payload := []byte{} - msgCnt := 0 - - sizeBuf := make([]byte, 8) - for _, msg := range *msgs { - if len(payload) >= ESPRESSO_TRANSACTION_SIZE_LIMIT { - break - } - msgByte := msg.L2msg - binary.BigEndian.PutUint64(sizeBuf, uint64(len(msgByte))) - payload = append(payload, sizeBuf...) - payload = append(payload, msgByte...) - msgCnt += 1 - } - return payload, msgCnt -} diff --git a/ci_skip_tests b/ci_skip_tests index df3ff44ab9..99a3e0dc6f 100644 --- a/ci_skip_tests +++ b/ci_skip_tests @@ -41,6 +41,7 @@ TestChallengeToTimeout TestStylusUpgrade TestChallengeToFailedTooFar TestTwoNodesLong +TestStylusOpcodeTraceEquivalence # These tests are specific to Espresso and we have a dedicated # CI workflow for them. See: .github/workflows/espresso-e2e.yml diff --git a/cmd/deploy/deploy.go b/cmd/deploy/deploy.go index c70ceb1d94..eb50310dcc 100644 --- a/cmd/deploy/deploy.go +++ b/cmd/deploy/deploy.go @@ -44,6 +44,7 @@ func main() { deployAccount := flag.String("l1DeployAccount", "", "l1 seq account to use (default is first account in keystore)") ownerAddressString := flag.String("ownerAddress", "", "the rollup owner's address") sequencerAddressString := flag.String("sequencerAddress", "", "the sequencer's address") + espressoTEEVerifierAddressString := flag.String("espressoTEEVerifierAddress", "", "the address of the espressoTEEVerifier contract") batchPostersString := flag.String("batchPosters", "", "the comma separated array of addresses of batch posters. Defaults to sequencer address") batchPosterManagerAddressString := flag.String("batchPosterManger", "", "the batch poster manger's address. Defaults to owner address") nativeTokenAddressString := flag.String("nativeTokenAddress", "0x0000000000000000000000000000000000000000", "address of the ERC20 token which is used as native L2 currency") @@ -97,6 +98,11 @@ func main() { if !common.IsHexAddress(*sequencerAddressString) && len(*sequencerAddressString) > 0 { panic("specified sequencer address is invalid") } + + esperssoTEEVerifierAddress := common.HexToAddress(*espressoTEEVerifierAddressString) + if !common.IsHexAddress(esperssoTEEVerifierAddress.String()) { + panic("specified espressoTEEVerifier address is invalid") + } sequencerAddress := common.HexToAddress(*sequencerAddressString) if !common.IsHexAddress(*ownerAddressString) { @@ -186,7 +192,7 @@ func main() { batchPosters, batchPosterManagerAddress, *authorizevalidators, - arbnode.GenerateRollupConfig(*prod, moduleRoot, ownerAddress, &chainConfig, chainConfigJson, loserEscrowAddress), + arbnode.GenerateRollupConfig(*prod, moduleRoot, ownerAddress, &chainConfig, chainConfigJson, loserEscrowAddress, esperssoTEEVerifierAddress), nativeToken, maxDataSize, true, diff --git a/cmd/replay/main.go b/cmd/replay/main.go index e56f9a030d..0fe56eb4c9 100644 --- a/cmd/replay/main.go +++ b/cmd/replay/main.go @@ -291,7 +291,6 @@ func main() { message := readMessage(chainConfig.ArbitrumChainParams.DataAvailabilityCommittee) chainContext := WavmChainContext{} - newBlock, _, err = arbos.ProduceBlock(message.Message, message.DelayedMessagesRead, lastBlockHeader, statedb, chainContext, chainConfig, false) if err != nil { panic(err) diff --git a/config/jwt.hex b/config/jwt.hex deleted file mode 100644 index 1bd47a74b1..0000000000 --- a/config/jwt.hex +++ /dev/null @@ -1 +0,0 @@ -0x98d21b33e6a0bc6e397099b2432d903a4da49860be17b0d4ff7ada22a578f2b5 \ No newline at end of file diff --git a/config/l2_chain_info.json b/config/l2_chain_info.json deleted file mode 100644 index 6abf12df1f..0000000000 --- a/config/l2_chain_info.json +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "chain-name": "arb-dev-test", - "parent-chain-id": 1337, - "parent-chain-is-arbitrum": false, - "sequencer-url": "", - "feed-url": "", - "das-index-url": "", - "has-genesis-state": false, - "chain-config": { - "chainId": 412346, - "homesteadBlock": 0, - "daoForkSupport": true, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "muirGlacierBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "clique": { - "period": 0, - "epoch": 0 - }, - "arbitrum": { - "EnableArbOS": true, - "AllowDebugPrecompiles": true, - "DataAvailabilityCommittee": false, - "InitialArbOSVersion": 11, - "InitialChainOwner": "0x3f1eae7d46d88f08fc2f8ed27fcb2ab183eb2d0e", - "GenesisBlockNum": 0 - } - }, - "rollup": { - "bridge": "0xa0b42a9290c538cdb0b1881daff0a6773a5674f0", - "inbox": "0x43ba959be67c2f02888feadb0e7edfaf9745cef9", - "sequencer-inbox": "0xe164a81e921c4b5ca1d617676dbf16f973555278", - "rollup": "0x98a056618d31e5f1938ab4268645775a4ebb4e64", - "native-token": "0x0000000000000000000000000000000000000000", - "upgrade-executor": "0x829a5256071a912ef81b9d0a4d2b028dcbeb9d69", - "validator-utils": "0xc648c0d1ff8d4fae04404df7088c139d2d0c89d0", - "validator-wallet-creator": "0x7a7dea5d505e60d232b5b7ca8410f0c7d4897f35", - "deployed-at": 124 - } - } -] \ No newline at end of file diff --git a/config/sequencer_config.json b/config/sequencer_config.json deleted file mode 100644 index 05258b73a9..0000000000 --- a/config/sequencer_config.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "parent-chain": { - "connection": { - "url": "ws://localhost:8546" - }, - "wallet": { - "account": "", - "password": "passphrase", - "pathname": "/home/user/l1keystore" - } - }, - "chain": { - "id": 412346, - "info-files": [ - "./config/l2_chain_info.json" - ] - }, - "execution": { - "sequencer": { - "enable": true - } - }, - "node": { - "staker": { - "dangerous": { - "without-block-validator": false - }, - "disable-challenge": false, - "enable": false, - "staker-interval": "10s", - "make-assertion-interval": "10s", - "strategy": "MakeNodes" - }, - "sequencer": true, - "delayed-sequencer": { - "enable": true - }, - "seq-coordinator": { - "enable": true, - "redis-url": "redis://localhost:6379", - "lockout-duration": "30s", - "lockout-spare": "1s", - "my-url": "", - "retry-interval": "0.5s", - "seq-num-duration": "24h0m0s", - "update-interval": "3s" - }, - "batch-poster": { - "enable": false, - "redis-url": "redis://localhost:6379", - "max-delay": "30s", - "data-poster": { - "redis-signer": { - "signing-key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" - }, - "wait-for-l1-finality": false - } - }, - "block-validator": { - "validation-server": { - "url": "ws://localhost:8949", - "jwtsecret": "./config/val_jwt.hex" - } - } - }, - "persistent": { - "chain": "local" - }, - "ws": { - "addr": "0.0.0.0" - }, - "http": { - "addr": "0.0.0.0", - "vhosts": "*", - "corsdomain": "*" - } -} \ No newline at end of file diff --git a/config/val_jwt.hex b/config/val_jwt.hex deleted file mode 100644 index 33959c35cf..0000000000 --- a/config/val_jwt.hex +++ /dev/null @@ -1 +0,0 @@ -0x098921412fb98a522c701027ceaba7c13a09519512b0fd54d3bc4362e6df2b64 \ No newline at end of file diff --git a/config/validation_node_config.json b/config/validation_node_config.json deleted file mode 100644 index 08e0211859..0000000000 --- a/config/validation_node_config.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "persistent": { - "chain": "local" - }, - "ws": { - "addr": "" - }, - "http": { - "addr": "" - }, - "validation": { - "api-auth": true, - "api-public": false - }, - "auth": { - "jwtsecret": "./config/val_jwt.hex", - "addr": "0.0.0.0" - } -} \ No newline at end of file diff --git a/config/validator_config.json b/config/validator_config.json deleted file mode 100644 index 38c6650c79..0000000000 --- a/config/validator_config.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "parent-chain": { - "connection": { - "url": "ws://localhost:8546" - }, - "wallet": { - "account": "0xE46fC174A70D204A737689996F6dA33Ed14e1457", - "password": "passphrase", - "pathname": "/Users/ngolub/.arbitrum/local/keystore" - } - }, - "chain": { - "id": 412346, - "info-files": [ - "./config/l2_chain_info.json" - ] - }, - "execution": { - "sequencer": { - "enable": false - }, - "forwarding-target": "null" - }, - "node": { - "parent-chain-reader": { - "enable": true - }, - "staker": { - "dangerous": { - "without-block-validator": false - }, - "disable-challenge": false, - "enable": true, - "staker-interval": "10s", - "make-assertion-interval": "10s", - "strategy": "MakeNodes", - "use-smart-contract-wallet": true - }, - "sequencer": false, - "delayed-sequencer": { - "enable": false - }, - "seq-coordinator": { - "enable": false, - "redis-url": "redis://localhost:6379", - "lockout-duration": "30s", - "lockout-spare": "1s", - "my-url": "", - "retry-interval": "0.5s", - "seq-num-duration": "24h0m0s", - "update-interval": "3s" - }, - "batch-poster": { - "enable": false, - "redis-url": "redis://localhost:6379", - "max-delay": "30s", - "data-poster": { - "redis-signer": { - "signing-key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" - }, - "wait-for-l1-finality": false - } - }, - "block-validator": { - "validation-server": { - "url": "ws://localhost:8549", - "jwtsecret": "./config/val_jwt.hex" - }, - "hotshot-address": "0x217788c286797d56cd59af5e493f3699c39cbbe8", - "espresso": true - } - }, - "persistent": { - "chain": "local" - }, - "ws": { - "addr": "0.0.0.0" - }, - "http": { - "addr": "0.0.0.0", - "vhosts": "*", - "corsdomain": "*" - } -} \ No newline at end of file diff --git a/contracts b/contracts index 7396313311..100536b4e3 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 7396313311ab17cb30e2eef27cccf96f0a9e8f7f +Subproject commit 100536b4e3c64ddb6c66cfce834d1dd5dd5ae0c7 diff --git a/das/syncing_fallback_storage.go b/das/syncing_fallback_storage.go index 43ae6160d7..b387f99686 100644 --- a/das/syncing_fallback_storage.go +++ b/das/syncing_fallback_storage.go @@ -51,7 +51,7 @@ func init() { } BatchDeliveredID = sequencerInboxABI.Events[sequencerBatchDeliveredEvent].ID sequencerBatchDataABI = sequencerInboxABI.Events[sequencerBatchDataEvent] - addSequencerL2BatchFromOriginCallABI = sequencerInboxABI.Methods["addSequencerL2BatchFromOrigin0"] + addSequencerL2BatchFromOriginCallABI = sequencerInboxABI.Methods["addSequencerL2BatchFromOrigin"] } type SyncToStorageConfig struct { diff --git a/decode_report_data.sh b/decode_report_data.sh new file mode 100644 index 0000000000..0bba19a5f4 --- /dev/null +++ b/decode_report_data.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# Read the binary file and convert to hex using xxd +xxd -p report.bin | tr -d '\n' > report.hex + +# Extract the desired byte ranges (64:96 and 128:160) +mr_enclave=$(cut -c 129-192 report.hex) # Extract bytes 64:96 (1-based index) +mr_signer=$(cut -c 257-320 report.hex) # Extract bytes 128:160 (1-based index) + +# Print the hex values +echo "MRENCLAVE: $mr_enclave" +echo "MRSIGNER: $mr_signer" \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000000..9bef7b2695 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Define dummy data +DUMMY_DATA="some-dummy-data" + +# Create the user_report_data structure with dummy data +REPORT_DATA=$(printf "%-64s" "$DUMMY_DATA") + +# Write to /dev/attestation/user_report_data +echo -n "$REPORT_DATA" > /dev/attestation/user_report_data +if [ $? -ne 0 ]; then + echo "Failed to write to /dev/attestation/user_report_data" + exit 1 +fi +echo "Successfully wrote user report data." + +# Attempt to read and print the report as a hex dump +if ! dd if=/dev/attestation/report bs=1 | xxd -p; then + echo "Failed to read from /dev/attestation/report" + exit 1 +fi + +echo "Successfully read attestation report." + +# Adjust ownership for the .arbitrum folder to the 'user' inside the container +if [ -d "/home/user/.arbitrum" ]; then + sudo chown -R user:user /home/user/.arbitrum +fi + +# Start Nitro process +exec /usr/local/bin/nitro \ + --validation.wasm.enable-wasmroots-check=false \ + --conf.file /config/poster_config.json \ No newline at end of file diff --git a/espressocrypto/lib/espresso-crypto-helper/Cargo.lock b/espressocrypto/lib/espresso-crypto-helper/Cargo.lock index 078584aa95..066c4f04d6 100644 --- a/espressocrypto/lib/espresso-crypto-helper/Cargo.lock +++ b/espressocrypto/lib/espresso-crypto-helper/Cargo.lock @@ -2,12 +2,107 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + [[package]] name = "adler2" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "aead" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +dependencies = [ + "generic-array", +] + +[[package]] +name = "aes" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" +dependencies = [ + "aes-soft", + "aesni", + "cipher 0.2.5", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" +dependencies = [ + "aead", + "aes 0.6.0", + "cipher 0.2.5", + "ctr 0.6.0", + "ghash", + "subtle", +] + +[[package]] +name = "aes-soft" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" +dependencies = [ + "cipher 0.2.5", + "opaque-debug", +] + +[[package]] +name = "aesni" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +dependencies = [ + "cipher 0.2.5", + "opaque-debug", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + [[package]] name = "ahash" version = "0.8.11" @@ -31,25 +126,95 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" + +[[package]] +name = "android-tzdata" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +dependencies = [ + "anstyle", + "windows-sys 0.59.0", +] [[package]] name = "anyhow" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f37166d7d48a0284b99dd824694c26119c700b53bf0d1540cdb147dbdaaf13" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" [[package]] name = "arbitrary" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775a8770d29db3dadcb858482cc240af7b2ffde4ac4de67d1d4955728103f0e2" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" dependencies = [ "derive_arbitrary", ] +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + [[package]] name = "ark-bls12-377" version = "0.4.0" @@ -110,8 +275,8 @@ dependencies = [ "ark-std", "blake2", "derivative", - "digest", - "sha2", + "digest 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -179,13 +344,13 @@ dependencies = [ "ark-serialize", "ark-std", "derivative", - "digest", + "digest 0.10.7", "itertools 0.10.5", "num-bigint", "num-traits", "paste", "rayon", - "rustc_version", + "rustc_version 0.4.1", "zeroize", ] @@ -240,7 +405,7 @@ dependencies = [ "ark-serialize", "ark-std", "derivative", - "digest", + "digest 0.10.7", "rayon", ] @@ -264,7 +429,7 @@ checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-serialize-derive", "ark-std", - "digest", + "digest 0.10.7", "num-bigint", ] @@ -306,8 +471,8 @@ dependencies = [ "ark-std", "directories", "hex-literal", - "rand", - "sha2", + "rand 0.8.5", + "sha2 0.10.8", "tracing", "tracing-subscriber 0.3.18", "ureq", @@ -320,333 +485,499 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", "rayon", ] [[package]] -name = "arrayvec" -version = "0.7.6" +name = "arraydeque" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" [[package]] -name = "auto_impl" -version = "1.2.0" +name = "arrayref" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] -name = "autocfg" -version = "1.4.0" +name = "arrayvec" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] -name = "base16ct" -version = "0.2.0" +name = "ascii-canvas" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] [[package]] -name = "base64" -version = "0.22.1" +name = "asn1-rs" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 1.0.69", + "time 0.3.36", +] [[package]] -name = "base64-bytes" -version = "0.1.0" +name = "asn1-rs-derive" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ce54e4e485fa0eed9c3aa5348162be09168f75bb5be7bc6587bcf2a65ee1386" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ - "base64", - "serde", + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure 0.13.1", ] [[package]] -name = "base64ct" -version = "1.6.0" +name = "asn1-rs-impl" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] [[package]] -name = "bitflags" -version = "2.6.0" +name = "asn1_der" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" [[package]] -name = "bitvec" -version = "1.0.1" +name = "async-attributes" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" dependencies = [ - "funty", - "radium", - "tap", - "wyz", + "quote", + "syn 1.0.109", ] [[package]] -name = "blake2" -version = "0.10.6" +name = "async-broadcast" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" dependencies = [ - "digest", + "event-listener 5.3.1", + "event-listener-strategy", + "futures-core", + "pin-project-lite 0.2.15", ] [[package]] -name = "block-buffer" -version = "0.10.4" +name = "async-channel" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ - "generic-array", + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", ] [[package]] -name = "bumpalo" -version = "3.16.0" +name = "async-channel" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite 0.2.15", +] [[package]] -name = "byte-slice-cast" -version = "1.2.2" +name = "async-dup" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +checksum = "7c2886ab563af5038f79ec016dd7b87947ed138b794e8dd64992962c9cca0411" +dependencies = [ + "async-lock 3.4.0", + "futures-io", +] [[package]] -name = "byteorder" -version = "1.5.0" +name = "async-executor" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.2.0", + "futures-lite 2.5.0", + "slab", +] [[package]] -name = "bytes" -version = "1.8.0" +name = "async-global-executor" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "serde", + "async-channel 2.3.1", + "async-executor", + "async-io 2.4.0", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.5.0", + "once_cell", + "tokio", ] [[package]] -name = "bytesize" -version = "1.3.0" +name = "async-h1" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" +checksum = "5d1d1dae8cb2c4258a79d6ed088b7fb9b4763bf4e9b22d040779761e046a2971" +dependencies = [ + "async-channel 1.9.0", + "async-dup", + "async-global-executor", + "async-io 1.13.0", + "futures-lite 1.13.0", + "http-types", + "httparse", + "log", + "pin-project", +] [[package]] -name = "cc" -version = "1.1.34" +name = "async-io" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b9470d453346108f93a59222a9a1a5724db32d0a4727b7ab7ace4b4d822dc9" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "shlex", + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", ] [[package]] -name = "cfg-if" -version = "1.0.0" +name = "async-io" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.5.0", + "parking", + "polling 3.7.4", + "rustix 0.38.40", + "slab", + "tracing", + "windows-sys 0.59.0", +] [[package]] -name = "chrono" -version = "0.4.38" +name = "async-lock" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ - "num-traits", + "event-listener 2.5.3", ] [[package]] -name = "committable" -version = "0.2.4" +name = "async-lock" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05a8809c2761232ce27226ef1ca1bc78b480b558406895848f76ab8fce04076c" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "arbitrary", - "ark-serialize", - "bitvec", - "derivative", - "derive_more 0.99.18", - "funty", - "hex", - "serde", - "sha3", - "tagged-base64", + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite 0.2.15", ] [[package]] -name = "const-hex" -version = "1.13.1" +name = "async-native-tls" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +checksum = "9e9e7a929bd34c68a82d58a4de7f86fffdaf97fb2af850162a7bb19dd7269b33" dependencies = [ - "cfg-if", - "cpufeatures", - "hex", - "proptest", - "serde", + "async-std", + "native-tls", + "thiserror 1.0.69", + "url", ] [[package]] -name = "const-oid" -version = "0.9.6" +name = "async-process" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +dependencies = [ + "async-channel 2.3.1", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.3.1", + "futures-lite 2.5.0", + "rustix 0.38.40", + "tracing", +] [[package]] -name = "convert_case" -version = "0.4.0" +name = "async-signal" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io 2.4.0", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.40", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] [[package]] -name = "cpufeatures" -version = "0.2.14" +name = "async-sse" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "53bba003996b8fd22245cd0c59b869ba764188ed435392cf2796d03b805ade10" dependencies = [ - "libc", + "async-channel 1.9.0", + "async-std", + "http-types", + "log", + "memchr", + "pin-project-lite 0.1.12", ] [[package]] -name = "crc-any" -version = "2.5.0" +name = "async-std" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62ec9ff5f7965e4d7280bd5482acd20aadb50d632cf6c1d74493856b011fa73" +checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +dependencies = [ + "async-attributes", + "async-channel 1.9.0", + "async-global-executor", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-process", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite 2.5.0", + "gloo-timers 0.3.0", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite 0.2.15", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] [[package]] -name = "crc32fast" -version = "1.4.2" +name = "async-stream" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ - "cfg-if", + "async-stream-impl", + "futures-core", + "pin-project-lite 0.2.15", ] [[package]] -name = "crossbeam-deque" -version = "0.8.5" +name = "async-stream-impl" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "crossbeam-epoch" -version = "0.9.18" +name = "async-task" +version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-tls" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400" dependencies = [ - "crossbeam-utils", + "futures-core", + "futures-io", + "rustls 0.19.1", + "webpki", + "webpki-roots 0.21.1", ] [[package]] -name = "crossbeam-utils" -version = "0.8.20" +name = "async-trait" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] [[package]] -name = "crunchy" -version = "0.2.2" +name = "async-tungstenite" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "07b30ef0ea5c20caaa54baea49514a206308989c68be7ecd86c7f956e4da6378" +dependencies = [ + "async-native-tls", + "async-std", + "async-tls", + "futures-io", + "futures-util", + "log", + "pin-project-lite 0.2.15", + "tungstenite 0.13.0", +] [[package]] -name = "crypto-bigint" -version = "0.5.5" +name = "async_io_stream" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", + "futures", + "pharos", + "rustc_version 0.4.1", ] [[package]] -name = "crypto-common" -version = "0.1.6" +name = "asynchronous-codec" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" dependencies = [ - "generic-array", - "typenum", + "bytes 1.8.0", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite 0.2.15", ] [[package]] -name = "der" -version = "0.7.9" +name = "asynchronous-codec" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" dependencies = [ - "const-oid", - "zeroize", + "bytes 1.8.0", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite 0.2.15", ] [[package]] -name = "derivative" -version = "2.2.0" +name = "atoi" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "num-traits", ] [[package]] -name = "derive_arbitrary" -version = "1.4.0" +name = "atomic-waker" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d475dfebcb4854d596b17b09f477616f80f17a550517f2b3615d8c205d5c802b" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atomic_store" +version = "0.1.3" +source = "git+https://github.com/EspressoSystems/atomicstore.git?tag=0.1.4#64c092596e889b9f376fd4bae8974404c43cd12c" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", + "ark-serialize", + "bincode", + "regex", + "serde", + "snafu 0.7.5", + "tracing", ] [[package]] -name = "derive_more" -version = "0.99.18" +name = "attohttpc" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" +dependencies = [ + "http 0.2.12", + "log", + "url", +] + +[[package]] +name = "auto_impl" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ - "convert_case", "proc-macro2", "quote", - "rustc_version", "syn 2.0.87", ] [[package]] -name = "derive_more" -version = "1.0.0" +name = "autocfg" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl", -] +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] -name = "derive_more-impl" -version = "1.0.0" +name = "automod" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +checksum = "edf3ee19dbc0a46d740f6f0926bde8c50f02bdbc7b536842da28f6ac56513a8b" dependencies = [ "proc-macro2", "quote", @@ -654,1812 +985,9293 @@ dependencies = [ ] [[package]] -name = "digest" -version = "0.10.7" +name = "axum" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes 1.8.0", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.31", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite 0.2.15", + "rustversion", + "serde", + "sync_wrapper 0.1.2", + "tower", + "tower-layer", + "tower-service", ] [[package]] -name = "directories" -version = "5.0.1" +name = "axum-core" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" dependencies = [ - "dirs-sys", + "async-trait", + "bytes 1.8.0", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", ] [[package]] -name = "dirs-sys" -version = "0.4.1" +name = "backoff" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", + "getrandom 0.2.15", + "instant", + "rand 0.8.5", ] [[package]] -name = "displaydoc" -version = "0.2.5" +name = "backtrace" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] -name = "downcast-rs" -version = "1.2.1" +name = "base-x" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" [[package]] -name = "dyn-clone" -version = "1.0.17" +name = "base16ct" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] -name = "ecdsa" -version = "0.16.9" +name = "base64" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature", - "spki", -] +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] -name = "either" -version = "1.13.0" +name = "base64" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-bytes" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ce54e4e485fa0eed9c3aa5348162be09168f75bb5be7bc6587bcf2a65ee1386" dependencies = [ + "base64 0.22.1", "serde", ] [[package]] -name = "elliptic-curve" -version = "0.13.8" +name = "base64ct" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "pkcs8", - "rand_core", - "sec1", - "subtle", - "zeroize", -] +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] -name = "equivalent" -version = "1.0.1" +name = "bech32" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" [[package]] -name = "errno" -version = "0.3.9" +name = "bimap" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" [[package]] -name = "espresso-crypto-helper" -version = "0.1.0" +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "ark-bn254", - "ark-ed-on-bn254", - "ark-ff", - "ark-serialize", - "ark-srs", - "ark-std", - "base64", - "base64-bytes", - "bytesize", - "committable", - "derivative", - "derive_more 0.99.18", - "digest", - "either", - "ethereum-types", - "ethers-core", - "itertools 0.12.1", - "jf-crhf", - "jf-merkle-tree", - "jf-pcs", - "jf-rescue", - "jf-utils", - "jf-vid", - "lazy_static", - "libc", - "num-traits", - "paste", "serde", - "serde_json", - "sha2", - "tagged-base64", - "trait-set", - "typenum", ] [[package]] -name = "ethabi" -version = "18.0.0" +name = "bit-set" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ - "ethereum-types", - "hex", - "once_cell", - "regex", - "serde", - "serde_json", - "sha3", - "thiserror", - "uint", + "bit-vec", ] [[package]] -name = "ethbloom" -version = "0.13.0" +name = "bit-vec" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" -dependencies = [ - "crunchy", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "scale-info", - "tiny-keccak", -] +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] -name = "ethereum-types" -version = "0.14.1" +name = "bitflags" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" -dependencies = [ - "ethbloom", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "primitive-types", - "scale-info", - "uint", -] +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "ethers-core" -version = "2.0.14" +name = "bitflags" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" dependencies = [ - "arrayvec", - "bytes", - "chrono", - "const-hex", - "elliptic-curve", - "ethabi", - "generic-array", - "k256", - "num_enum", - "open-fastrlp", - "rand", - "rlp", "serde", - "serde_json", - "strum", - "tempfile", - "thiserror", - "tiny-keccak", - "unicode-xid", ] [[package]] -name = "fastrand" -version = "2.1.1" +name = "bitvec" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "serde", + "tap", + "wyz", +] [[package]] -name = "ff" -version = "0.13.0" +name = "blake2" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "rand_core", - "subtle", + "digest 0.10.7", ] [[package]] -name = "fixed-hash" -version = "0.8.0" +name = "blake3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" dependencies = [ - "byteorder", - "rand", - "rustc-hex", - "static_assertions", + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq 0.3.1", ] [[package]] -name = "flate2" -version = "1.0.34" +name = "block-buffer" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "crc32fast", - "miniz_oxide", + "generic-array", ] [[package]] -name = "form_urlencoded" -version = "1.2.1" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "percent-encoding", + "generic-array", ] [[package]] -name = "funty" -version = "2.0.0" +name = "blocking" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.5.0", + "piper", +] [[package]] -name = "generic-array" -version = "0.14.7" +name = "blst" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" dependencies = [ - "serde", - "typenum", - "version_check", + "cc", + "glob", + "threadpool", "zeroize", ] [[package]] -name = "getrandom" -version = "0.2.15" +name = "bs58" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ - "cfg-if", - "libc", - "wasi", + "sha2 0.10.8", + "tinyvec", ] [[package]] -name = "group" -version = "0.13.0" +name = "bumpalo" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core", - "subtle", -] +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] -name = "hashbrown" -version = "0.13.2" +name = "byte-slice-cast" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" dependencies = [ - "ahash", + "bytecheck_derive", + "ptr_meta", + "simdutf8", ] [[package]] -name = "hashbrown" -version = "0.14.5" +name = "bytecheck_derive" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" dependencies = [ - "ahash", - "allocator-api2", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "hashbrown" -version = "0.15.1" +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] -name = "heck" -version = "0.5.0" +name = "bytes" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] -name = "hex" -version = "0.4.3" +name = "bytes" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +dependencies = [ + "serde", +] [[package]] -name = "hex-literal" -version = "0.4.1" +name = "bytesize" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" [[package]] -name = "hmac" -version = "0.12.1" +name = "bzip2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" dependencies = [ - "digest", + "bzip2-sys", + "libc", ] [[package]] -name = "icu_collections" -version = "1.5.0" +name = "bzip2-sys" +version = "0.1.11+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" dependencies = [ - "displaydoc", - "yoke", - "zerofrom", - "zerovec", + "cc", + "libc", + "pkg-config", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "camino" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", + "serde", ] [[package]] -name = "icu_locid_transform" -version = "1.5.0" +name = "capnp" +version = "0.19.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +checksum = "4e985a566bdaae9a428a957d12b10c318d41b2afddb54cfbb764878059df636e" dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", + "embedded-io", ] [[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - -[[package]] -name = "icu_normalizer" -version = "1.5.0" +name = "capnpc" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "c75ba30e0f08582d53c2f3710cf4bb65ff562614b1ba86906d7391adffe189ec" dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec", + "capnp", ] [[package]] -name = "icu_normalizer_data" -version = "1.5.0" +name = "cargo-platform" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] [[package]] -name = "icu_properties" -version = "1.5.1" +name = "cargo_metadata" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ - "displaydoc", - "icu_collections", - "icu_locid_transform", - "icu_properties_data", - "icu_provider", - "tinystr", - "zerovec", + "camino", + "cargo-platform", + "semver 1.0.23", + "serde", + "serde_json", + "thiserror 1.0.69", ] [[package]] -name = "icu_properties_data" -version = "1.5.0" +name = "cbor4ii" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "472931dd4dfcc785075b09be910147f9c6258883fc4591d0dac6116392b2daa6" +dependencies = [ + "serde", +] [[package]] -name = "icu_provider" -version = "1.5.0" +name = "cc" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerovec", + "jobserver", + "libc", + "shlex", ] [[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +name = "cdn-broker" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", + "cdn-proto", + "clap", + "console-subscriber", + "dashmap", + "derivative", + "jf-signature 0.1.0", + "lazy_static", + "local-ip-address", + "parking_lot", + "portpicker", + "prometheus", + "rand 0.8.5", + "rkyv", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", ] [[package]] -name = "idna" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", +name = "cdn-client" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" +dependencies = [ + "cdn-proto", + "clap", + "jf-signature 0.1.0", + "parking_lot", + "rand 0.8.5", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", ] [[package]] -name = "idna_adapter" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +name = "cdn-marshal" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" dependencies = [ - "icu_normalizer", - "icu_properties", + "cdn-proto", + "clap", + "jf-signature 0.1.0", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", ] [[package]] -name = "impl-codec" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +name = "cdn-proto" +version = "0.4.0" +source = "git+https://github.com/EspressoSystems/Push-CDN?tag=0.4.7#5406fde54e61058428a7b55e1a98b699f0f606f1" dependencies = [ - "parity-scale-codec", + "anyhow", + "ark-serialize", + "async-trait", + "capnp", + "capnpc", + "derivative", + "jf-signature 0.1.0", + "kanal", + "lazy_static", + "mnemonic", + "num_enum", + "pem 3.0.4", + "prometheus", + "quinn", + "rand 0.8.5", + "rcgen 0.13.1", + "redis", + "rkyv", + "rustls 0.23.17", + "rustls-pki-types", + "sqlx", + "thiserror 1.0.69", + "tokio", + "tokio-rustls 0.26.0", + "tracing", + "url", + "warp", ] [[package]] -name = "impl-rlp" -version = "0.3.0" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ - "rlp", + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.6", ] [[package]] -name = "impl-serde" -version = "0.4.0" +name = "cipher" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" dependencies = [ - "serde", + "generic-array", ] [[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" +name = "cipher" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "crypto-common", + "inout", ] [[package]] -name = "indexmap" -version = "2.6.0" +name = "clap" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" dependencies = [ - "equivalent", - "hashbrown 0.15.1", + "clap_builder", + "clap_derive", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "clap_builder" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" dependencies = [ - "either", + "anstream", + "anstyle", + "clap_lex", + "strsim", ] [[package]] -name = "itertools" -version = "0.12.1" +name = "clap_derive" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ - "either", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "itoa" -version = "1.0.11" +name = "clap_lex" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" [[package]] -name = "jf-commitment" -version = "0.1.0" -source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +name = "cld" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "021080b0a3dbefcf1c1f0b3ad6a923b81f16801d874ec338c168ac0b0762baf5" + +[[package]] +name = "coins-bip32" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" dependencies = [ - "ark-std", + "bs58", + "coins-core", + "digest 0.10.7", + "hmac 0.12.1", + "k256", + "serde", + "sha2 0.10.8", + "thiserror 1.0.69", ] [[package]] -name = "jf-crhf" -version = "0.1.0" -source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +name = "coins-bip39" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ - "ark-serialize", - "ark-std", + "bitvec", + "coins-bip32", + "hmac 0.12.1", + "once_cell", + "pbkdf2 0.12.2", + "rand 0.8.5", + "sha2 0.10.8", + "thiserror 1.0.69", ] [[package]] -name = "jf-merkle-tree" -version = "0.1.0" -source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +name = "coins-core" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" dependencies = [ - "ark-bls12-377", - "ark-bls12-381", - "ark-bn254", - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "displaydoc", - "hashbrown 0.14.5", - "itertools 0.12.1", - "jf-relation", - "jf-rescue", - "jf-utils", - "num-bigint", - "num-traits", + "base64 0.21.7", + "bech32", + "bs58", + "digest 0.10.7", + "generic-array", + "hex", + "ripemd", "serde", + "serde_derive", + "sha2 0.10.8", "sha3", - "tagged-base64", + "thiserror 1.0.69", ] [[package]] -name = "jf-pcs" -version = "0.1.0" -source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "displaydoc", - "itertools 0.12.1", - "jf-utils", - "merlin", -] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] -name = "jf-prf" -version = "0.1.0" -source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ - "ark-serialize", - "ark-std", + "bytes 1.8.0", + "futures-core", + "memchr", + "pin-project-lite 0.2.15", + "tokio", + "tokio-util", ] [[package]] -name = "jf-relation" -version = "0.4.4" -source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +name = "committable" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05a8809c2761232ce27226ef1ca1bc78b480b558406895848f76ab8fce04076c" dependencies = [ - "ark-bls12-377", - "ark-bls12-381", - "ark-bn254", - "ark-bw6-761", - "ark-ec", - "ark-ff", - "ark-poly", + "arbitrary", "ark-serialize", - "ark-std", + "bitvec", "derivative", - "displaydoc", - "downcast-rs", - "dyn-clone", - "hashbrown 0.14.5", - "itertools 0.12.1", - "jf-utils", - "num-bigint", - "rand_chacha", + "derive_more 0.99.18", + "funty", + "hex", + "serde", + "sha3", + "tagged-base64", ] [[package]] -name = "jf-rescue" -version = "0.1.0" -source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ - "ark-bls12-377", - "ark-bls12-381", - "ark-bn254", - "ark-bw6-761", - "ark-crypto-primitives", - "ark-ed-on-bls12-377", - "ark-ed-on-bls12-381", - "ark-ed-on-bn254", - "ark-ff", - "ark-std", - "displaydoc", - "itertools 0.12.1", - "jf-commitment", - "jf-crhf", - "jf-prf", - "jf-relation", - "jf-utils", + "crossbeam-utils", ] [[package]] -name = "jf-utils" -version = "0.4.4" -source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +name = "config" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" dependencies = [ - "ark-ec", - "ark-ed-on-bls12-377", - "ark-ed-on-bls12-381", - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "digest", - "displaydoc", - "rand_chacha", + "async-trait", + "convert_case 0.6.0", + "json5", + "nom", + "pathdiff", + "ron", + "rust-ini", "serde", - "sha2", - "tagged-base64", + "serde_json", + "toml", + "yaml-rust2", ] [[package]] -name = "jf-vid" -version = "0.1.0" -source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +name = "console-api" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a257c22cd7e487dd4a13d413beabc512c5052f0bc048db0da6a84c3d8a6142fd" dependencies = [ - "anyhow", - "ark-ec", - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "digest", - "displaydoc", - "generic-array", - "itertools 0.12.1", - "jf-merkle-tree", - "jf-pcs", - "jf-utils", - "serde", - "tagged-base64", + "futures-core", + "prost", + "prost-types", + "tonic", + "tracing-core", ] [[package]] -name = "k256" -version = "0.13.4" +name = "console-subscriber" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +checksum = "31c4cc54bae66f7d9188996404abdf7fdfa23034ef8e43478c8810828abad758" dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2", + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures-task", + "hdrhistogram", + "humantime", + "prost", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "const-hex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "const_fn" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373e9fafaa20882876db20562275ff58d50e0caa2590077fe7ce7bef90211d0d" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "contract-bindings" +version = "0.1.0" +source = "git+https://github.com/espressosystems/espresso-sequencer?branch=main#5795d5a02678e4307f0cce79293a686f32b7abd9" +dependencies = [ + "ethers", + "serde", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" +dependencies = [ + "aes-gcm", + "base64 0.13.1", + "hkdf 0.10.0", + "hmac 0.10.1", + "percent-encoding", + "rand 0.8.5", + "sha2 0.9.9", + "time 0.2.27", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + +[[package]] +name = "cpufeatures" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +dependencies = [ + "libc", +] + +[[package]] +name = "cpuid-bool" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" + +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-any" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62ec9ff5f7965e4d7280bd5482acd20aadb50d632cf6c1d74493856b011fa73" + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "csv" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +dependencies = [ + "memchr", +] + +[[package]] +name = "ctr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" +dependencies = [ + "cipher 0.2.5", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "curl" +version = "0.4.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9fb4d13a1be2b58f14d60adba57c9834b78c62fd86c3e76a148f732686e9265" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2 0.5.7", + "windows-sys 0.52.0", +] + +[[package]] +name = "curl-sys" +version = "0.4.78+curl-8.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eec768341c5c7789611ae51cf6c459099f22e64a5d5d0ce4892434e33821eaf" +dependencies = [ + "cc", + "libc", + "libnghttp2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.52.0", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "custom_debug" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89e0ae2c2a42be29595d05c50e3ce6096c0698a97e021c3289790f0750cc8e2" +dependencies = [ + "custom_debug_derive 0.5.1", +] + +[[package]] +name = "custom_debug" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e715bf0e503e909c7076c052e39dd215202e8edeb32f1c194fd630c314d256" +dependencies = [ + "custom_debug_derive 0.6.1", +] + +[[package]] +name = "custom_debug_derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a9f3941234c9f62ceaa2782974827749de9b0a8a6487275a278da068e1baf7" +dependencies = [ + "proc-macro2", + "syn 1.0.109", + "synstructure 0.12.6", +] + +[[package]] +name = "custom_debug_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f731440b39c73910e253cb465ec1fac97732b3c7af215639881ec0c2a38f4f69" +dependencies = [ + "darling", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure 0.13.1", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.87", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "data-encoding-macro" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1559b6cba622276d6d63706db152618eeb15b89b3e4041446b05876e352e639" +dependencies = [ + "data-encoding", + "data-encoding-macro-internal", +] + +[[package]] +name = "data-encoding-macro-internal" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "332d754c0af53bc87c108fed664d121ecf59207ec4196041f04d6ab9002ad33f" +dependencies = [ + "data-encoding", + "syn 1.0.109", +] + +[[package]] +name = "delegate" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc2323e10c92e1cf4d86e11538512e6dc03ceb586842970b6332af3d4046a046" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "der-parser" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn 2.0.87", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version 0.4.1", + "syn 2.0.87", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 2.0.87", + "unicode-xid", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "diff-test-bn254" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/solidity-bn254.git#050a98a3b389862c50d0bbbea620d8dc278c275a" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-std", + "clap", + "ethers", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "discard" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dtoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.8", + "subtle", + "zeroize", +] + +[[package]] +name = "edit-distance" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3f497e87b038c09a155dfd169faa5ec940d0644635555ef6bd464ac20e97397" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +dependencies = [ + "serde", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "ena" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +dependencies = [ + "log", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enr" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" +dependencies = [ + "base64 0.21.7", + "bytes 1.8.0", + "hex", + "k256", + "log", + "rand 0.8.5", + "rlp", + "serde", + "sha3", + "zeroize", +] + +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "espresso-crypto-helper" +version = "0.1.0" +dependencies = [ + "ark-ed-on-bn254", + "ark-ff", + "ark-serialize", + "committable", + "espresso-types", + "ethers-core", + "hotshot-types", + "jf-crhf", + "jf-merkle-tree", + "jf-rescue", + "serde", + "serde_json", + "sha2 0.10.8", + "tagged-base64", +] + +[[package]] +name = "espresso-systems-common" +version = "0.4.0" +source = "git+https://github.com/espressosystems/espresso-systems-common?tag=0.4.0#5abd890f79014a86db31286e1f3a529f161e69de" + +[[package]] +name = "espresso-systems-common" +version = "0.4.1" +source = "git+https://github.com/espressosystems/espresso-systems-common?tag=0.4.1#2e889e878866c2a5cce1daaab947f7c93d5811ae" + +[[package]] +name = "espresso-types" +version = "0.1.0" +source = "git+https://github.com/espressosystems/espresso-sequencer?branch=main#5795d5a02678e4307f0cce79293a686f32b7abd9" +dependencies = [ + "anyhow", + "ark-serialize", + "async-broadcast", + "async-trait", + "base64-bytes", + "bincode", + "blake3", + "bytesize", + "clap", + "cld", + "committable", + "contract-bindings", + "derive_more 1.0.0", + "dyn-clone", + "ethers", + "fluent-asserter", + "futures", + "hotshot", + "hotshot-orchestrator", + "hotshot-query-service", + "hotshot-types", + "itertools 0.12.1", + "jf-merkle-tree", + "jf-utils", + "jf-vid", + "lru 0.12.5", + "num-traits", + "paste", + "pretty_assertions", + "rand 0.8.5", + "sequencer-utils", + "serde", + "serde_json", + "sha2 0.10.8", + "static_assertions", + "surf-disco", + "tagged-base64", + "thiserror 1.0.69", + "tide-disco", + "time 0.3.36", + "tokio", + "tracing", + "url", + "vbs", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "eth-keystore" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" +dependencies = [ + "aes 0.8.4", + "ctr 0.9.2", + "digest 0.10.7", + "hex", + "hmac 0.12.1", + "pbkdf2 0.11.0", + "rand 0.8.5", + "scrypt", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3", + "thiserror 1.0.69", + "uuid 0.8.2", +] + +[[package]] +name = "ethabi" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" +dependencies = [ + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3", + "thiserror 1.0.69", + "uint", +] + +[[package]] +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "scale-info", + "uint", +] + +[[package]] +name = "ethers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "816841ea989f0c69e459af1cf23a6b0033b19a55424a1ea3a30099becdb8dec0" +dependencies = [ + "ethers-addressbook", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-middleware", + "ethers-providers", + "ethers-signers", + "ethers-solc", +] + +[[package]] +name = "ethers-addressbook" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5495afd16b4faa556c3bba1f21b98b4983e53c1755022377051a975c3b021759" +dependencies = [ + "ethers-core", + "once_cell", + "serde", + "serde_json", +] + +[[package]] +name = "ethers-contract" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fceafa3578c836eeb874af87abacfb041f92b4da0a78a5edd042564b8ecdaaa" +dependencies = [ + "const-hex", + "ethers-contract-abigen", + "ethers-contract-derive", + "ethers-core", + "ethers-providers", + "futures-util", + "once_cell", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "ethers-contract-abigen" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04ba01fbc2331a38c429eb95d4a570166781f14290ef9fdb144278a90b5a739b" +dependencies = [ + "Inflector", + "const-hex", + "dunce", + "ethers-core", + "ethers-etherscan", + "eyre", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "reqwest 0.11.27", + "serde", + "serde_json", + "syn 2.0.87", + "toml", + "walkdir", +] + +[[package]] +name = "ethers-contract-derive" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87689dcabc0051cde10caaade298f9e9093d65f6125c14575db3fd8c669a168f" +dependencies = [ + "Inflector", + "const-hex", + "ethers-contract-abigen", + "ethers-core", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.87", +] + +[[package]] +name = "ethers-core" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" +dependencies = [ + "arrayvec", + "bytes 1.8.0", + "cargo_metadata", + "chrono", + "const-hex", + "elliptic-curve", + "ethabi", + "generic-array", + "k256", + "num_enum", + "once_cell", + "open-fastrlp", + "rand 0.8.5", + "rlp", + "serde", + "serde_json", + "strum", + "syn 2.0.87", + "tempfile", + "thiserror 1.0.69", + "tiny-keccak", + "unicode-xid", +] + +[[package]] +name = "ethers-etherscan" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79e5973c26d4baf0ce55520bd732314328cabe53193286671b47144145b9649" +dependencies = [ + "chrono", + "ethers-core", + "ethers-solc", + "reqwest 0.11.27", + "semver 1.0.23", + "serde", + "serde_json", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "ethers-middleware" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f9fdf09aec667c099909d91908d5eaf9be1bd0e2500ba4172c1d28bfaa43de" +dependencies = [ + "async-trait", + "auto_impl", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-providers", + "ethers-signers", + "futures-channel", + "futures-locks", + "futures-util", + "instant", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tracing", + "tracing-futures", + "url", +] + +[[package]] +name = "ethers-providers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6434c9a33891f1effc9c75472e12666db2fa5a0fec4b29af6221680a6fe83ab2" +dependencies = [ + "async-trait", + "auto_impl", + "base64 0.21.7", + "bytes 1.8.0", + "const-hex", + "enr", + "ethers-core", + "futures-channel", + "futures-core", + "futures-timer", + "futures-util", + "hashers", + "http 0.2.12", + "instant", + "jsonwebtoken", + "once_cell", + "pin-project", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-tungstenite", + "tracing", + "tracing-futures", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "ws_stream_wasm", +] + +[[package]] +name = "ethers-signers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" +dependencies = [ + "async-trait", + "coins-bip32", + "coins-bip39", + "const-hex", + "elliptic-curve", + "eth-keystore", + "ethers-core", + "rand 0.8.5", + "sha2 0.10.8", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "ethers-solc" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66244a771d9163282646dbeffe0e6eca4dda4146b6498644e678ac6089b11edd" +dependencies = [ + "cfg-if", + "const-hex", + "dirs", + "dunce", + "ethers-core", + "glob", + "home", + "md-5", + "num_cpus", + "once_cell", + "path-slash", + "rayon", + "regex", + "semver 1.0.23", + "serde", + "serde_json", + "solang-parser", + "svm-rs", + "thiserror 1.0.69", + "tiny-keccak", + "tokio", + "tracing", + "walkdir", + "yansi 0.5.1", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.1", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fluent-asserter" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62cd2a1243f15c8c9d37acc8ab4ba837e50823561cb124af8406a6f676d04341" +dependencies = [ + "lazy_static", + "num", +] + +[[package]] +name = "flume" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bebadab126f8120d410b677ed95eee4ba6eb7c6dd8e34a5ec88a08050e26132" +dependencies = [ + "futures-core", + "futures-sink", + "spinning_top", +] + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin 0.9.8", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-bounded" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" +dependencies = [ + "futures-timer", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite 0.2.15", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +dependencies = [ + "fastrand 2.2.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "futures-locks" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" +dependencies = [ + "futures-channel", + "futures-task", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "futures-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" +dependencies = [ + "futures-io", + "rustls 0.23.17", + "rustls-pki-types", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-ticker" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9763058047f713632a52e916cc7f6a4b3fc6e9fc1ff8c5b1dc49e5a89041682e" +dependencies = [ + "futures", + "futures-timer", + "instant", +] + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers 0.2.6", + "send_wrapper 0.4.0", +] + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite 0.2.15", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "serde", + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes 1.8.0", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.6.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +dependencies = [ + "atomic-waker", + "bytes 1.8.0", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap 2.6.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashers" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" +dependencies = [ + "fxhash", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64 0.21.7", + "byteorder", + "flate2", + "nom", + "num-traits", +] + +[[package]] +name = "headers" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +dependencies = [ + "base64 0.21.7", + "bytes 1.8.0", + "headers-core", + "http 0.2.12", + "httpdate", + "mime", + "sha1 0.10.6", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http 0.2.12", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hex_fmt" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" + +[[package]] +name = "hickory-proto" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.4.0", + "ipnet", + "once_cell", + "rand 0.8.5", + "socket2 0.5.7", + "thiserror 1.0.69", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand 0.8.5", + "resolv-conf", + "smallvec", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "hkdf" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" +dependencies = [ + "digest 0.9.0", + "hmac 0.10.1", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" +dependencies = [ + "crypto-mac 0.10.0", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + +[[package]] +name = "hotshot" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-broadcast", + "async-lock 3.4.0", + "async-trait", + "bimap", + "bincode", + "blake3", + "cdn-broker", + "cdn-client", + "cdn-marshal", + "chrono", + "committable", + "custom_debug 0.5.1", + "dashmap", + "derive_more 1.0.0", + "either", + "ethereum-types", + "futures", + "hotshot-task", + "hotshot-task-impls", + "hotshot-types", + "jf-signature 0.2.0", + "libp2p-identity", + "libp2p-networking", + "lru 0.12.5", + "num_enum", + "parking_lot", + "portpicker", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "surf-disco", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", + "url", + "utils", + "vbs", +] + +[[package]] +name = "hotshot-builder-api" +version = "0.1.7" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "async-trait", + "clap", + "committable", + "derive_more 1.0.0", + "futures", + "hotshot-types", + "serde", + "tagged-base64", + "thiserror 1.0.69", + "tide-disco", + "toml", + "vbs", +] + +[[package]] +name = "hotshot-contract-adapter" +version = "0.1.0" +source = "git+https://github.com/espressosystems/espresso-sequencer?branch=main#5795d5a02678e4307f0cce79293a686f32b7abd9" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ec", + "ark-ed-on-bn254", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "contract-bindings", + "diff-test-bn254", + "ethers", + "hotshot-types", + "jf-pcs", + "jf-plonk", + "jf-utils", + "num-bigint", + "num-traits", +] + +[[package]] +name = "hotshot-example-types" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-broadcast", + "async-lock 3.4.0", + "async-trait", + "bitvec", + "committable", + "either", + "ethereum-types", + "futures", + "hotshot", + "hotshot-builder-api", + "hotshot-task", + "hotshot-task-impls", + "hotshot-types", + "jf-vid", + "rand 0.8.5", + "reqwest 0.12.9", + "serde", + "sha2 0.10.8", + "sha3", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tracing", + "url", + "vbs", +] + +[[package]] +name = "hotshot-fakeapi" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-lock 3.4.0", + "async-trait", + "futures", + "hotshot-example-types", + "hotshot-types", + "rand 0.8.5", + "serde", + "tide-disco", + "tokio", + "toml", + "tracing", + "vbs", +] + +[[package]] +name = "hotshot-macros" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "derive_builder", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "hotshot-orchestrator" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-lock 3.4.0", + "bincode", + "blake3", + "clap", + "csv", + "futures", + "hotshot-types", + "libp2p", + "multiaddr", + "serde", + "serde_json", + "surf-disco", + "thiserror 1.0.69", + "tide-disco", + "tokio", + "toml", + "tracing", + "vbs", + "vec1", +] + +[[package]] +name = "hotshot-query-service" +version = "0.1.62" +source = "git+https://github.com/EspressoSystems/hotshot-query-service?tag=0.1.71#5411200c73e25b56f5a87fd67465ad596c6d649d" +dependencies = [ + "anyhow", + "ark-serialize", + "async-lock 3.4.0", + "async-trait", + "atomic_store", + "backoff", + "bincode", + "chrono", + "committable", + "custom_debug 0.6.1", + "derivative", + "derive_more 0.99.18", + "either", + "futures", + "hotshot", + "hotshot-testing", + "hotshot-types", + "include_dir", + "itertools 0.12.1", + "jf-merkle-tree", + "jf-vid", + "log", + "prometheus", + "refinery", + "refinery-core", + "serde", + "serde_json", + "snafu 0.8.5", + "sqlx", + "surf-disco", + "tagged-base64", + "tide-disco", + "time 0.3.36", + "tokio", + "toml", + "tracing", + "tracing-subscriber 0.3.18", + "trait-variant", + "typenum", + "url", + "vbs", + "vec1", +] + +[[package]] +name = "hotshot-task" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-broadcast", + "async-trait", + "futures", + "tokio", + "tracing", + "utils", +] + +[[package]] +name = "hotshot-task-impls" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-broadcast", + "async-lock 3.4.0", + "async-trait", + "bincode", + "bitvec", + "cdn-proto", + "chrono", + "committable", + "either", + "futures", + "hotshot-builder-api", + "hotshot-task", + "hotshot-types", + "jf-signature 0.2.0", + "jf-vid", + "lru 0.12.5", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "surf-disco", + "tagged-base64", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tracing", + "url", + "utils", + "vbs", + "vec1", +] + +[[package]] +name = "hotshot-testing" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-broadcast", + "async-lock 3.4.0", + "async-trait", + "automod", + "bitvec", + "committable", + "either", + "ethereum-types", + "futures", + "hotshot", + "hotshot-builder-api", + "hotshot-example-types", + "hotshot-fakeapi", + "hotshot-macros", + "hotshot-orchestrator", + "hotshot-task", + "hotshot-task-impls", + "hotshot-types", + "itertools 0.13.0", + "jf-signature 0.2.0", + "jf-vid", + "lru 0.12.5", + "portpicker", + "rand 0.8.5", + "reqwest 0.12.9", + "serde", + "sha2 0.10.8", + "sha3", + "tagged-base64", + "thiserror 1.0.69", + "tide-disco", + "tokio", + "tracing", + "url", + "vbs", + "vec1", +] + +[[package]] +name = "hotshot-types" +version = "0.1.11" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ed-on-bn254", + "ark-ff", + "ark-serialize", + "ark-srs", + "ark-std", + "async-lock 3.4.0", + "async-trait", + "bincode", + "bitvec", + "blake3", + "cdn-proto", + "clap", + "committable", + "custom_debug 0.5.1", + "derivative", + "digest 0.10.7", + "displaydoc", + "dyn-clone", + "either", + "espresso-systems-common 0.4.1", + "ethereum-types", + "futures", + "jf-pcs", + "jf-signature 0.2.0", + "jf-utils", + "jf-vid", + "lazy_static", + "libp2p", + "memoize", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest 0.12.9", + "serde", + "serde-inline-default", + "serde_bytes", + "serde_json", + "sha2 0.10.8", + "surf-disco", + "tagged-base64", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "toml", + "tracing", + "typenum", + "url", + "utils", + "vbs", + "vec1", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes 1.8.0", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes 1.8.0", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes 1.8.0", + "http 0.2.12", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes 1.8.0", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes 1.8.0", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite 0.2.15", +] + +[[package]] +name = "http-client" +version = "6.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1947510dc91e2bf586ea5ffb412caad7673264e14bb39fb9078da114a94ce1a5" +dependencies = [ + "async-std", + "async-trait", + "cfg-if", + "http-types", + "isahc", + "log", +] + +[[package]] +name = "http-types" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" +dependencies = [ + "anyhow", + "async-channel 1.9.0", + "async-std", + "base64 0.13.1", + "cookie", + "futures-lite 1.13.0", + "infer", + "pin-project-lite 0.2.15", + "rand 0.7.3", + "serde", + "serde_json", + "serde_qs", + "serde_urlencoded", + "url", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +dependencies = [ + "bytes 1.8.0", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite 0.2.15", + "socket2 0.5.7", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" +dependencies = [ + "bytes 1.8.0", + "futures-channel", + "futures-util", + "h2 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "itoa", + "pin-project-lite 0.2.15", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.31", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.5.0", + "hyper-util", + "rustls 0.23.17", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.31", + "pin-project-lite 0.2.15", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes 1.8.0", + "http-body-util", + "hyper 1.5.0", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes 1.8.0", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.5.0", + "pin-project-lite 0.2.15", + "socket2 0.5.7", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "if-addrs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "if-watch" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" +dependencies = [ + "async-io 2.4.0", + "core-foundation", + "fnv", + "futures", + "if-addrs", + "ipnet", + "log", + "rtnetlink", + "system-configuration 0.5.1", + "tokio", + "windows", +] + +[[package]] +name = "igd-next" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064d90fec10d541084e7b39ead8875a5a80d9114a2b18791565253bae25f49e4" +dependencies = [ + "async-trait", + "attohttpc", + "bytes 1.8.0", + "futures", + "http 0.2.12", + "hyper 0.14.31", + "log", + "rand 0.8.5", + "tokio", + "url", + "xmltree", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown 0.15.1", + "serde", +] + +[[package]] +name = "infer" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "input_buffer" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413" +dependencies = [ + "bytes 1.8.0", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.7", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "isahc" +version = "0.9.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2948a0ce43e2c2ef11d7edf6816508998d99e13badd1150be0914205df9388a" +dependencies = [ + "bytes 0.5.6", + "crossbeam-utils", + "curl", + "curl-sys", + "flume 0.9.2", + "futures-lite 1.13.0", + "http 0.2.12", + "log", + "once_cell", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jf-commitment" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-std", +] + +[[package]] +name = "jf-crhf" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-serialize", + "ark-std", +] + +[[package]] +name = "jf-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "displaydoc", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-relation", + "jf-rescue", + "jf-utils", + "num-bigint", + "num-traits", + "serde", + "sha3", + "tagged-base64", +] + +[[package]] +name = "jf-pcs" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "displaydoc", + "itertools 0.12.1", + "jf-utils", + "merlin", + "rayon", +] + +[[package]] +name = "jf-plonk" +version = "0.5.1" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=jf-plonk-v0.5.1#7e2eeef8c06a12f17015d457f1b3ea80b0de3333" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "displaydoc", + "downcast-rs", + "dyn-clone", + "espresso-systems-common 0.4.0", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-crhf", + "jf-pcs", + "jf-relation", + "jf-rescue", + "jf-utils", + "merlin", + "num-bigint", + "rand_chacha 0.3.1", + "rayon", + "serde", + "sha3", + "tagged-base64", +] + +[[package]] +name = "jf-prf" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-serialize", + "ark-std", +] + +[[package]] +name = "jf-relation" +version = "0.4.4" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-bn254", + "ark-bw6-761", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "displaydoc", + "downcast-rs", + "dyn-clone", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-utils", + "num-bigint", + "rand_chacha 0.3.1", + "rayon", +] + +[[package]] +name = "jf-rescue" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-bn254", + "ark-bw6-761", + "ark-crypto-primitives", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-381", + "ark-ed-on-bn254", + "ark-ff", + "ark-std", + "displaydoc", + "itertools 0.12.1", + "jf-commitment", + "jf-crhf", + "jf-prf", + "jf-relation", + "jf-utils", +] + +[[package]] +name = "jf-signature" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "blst", + "derivative", + "digest 0.10.7", + "displaydoc", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-crhf", + "jf-relation", + "jf-rescue", + "jf-utils", + "num-bigint", + "num-traits", + "serde", + "sha3", + "tagged-base64", + "zeroize", +] + +[[package]] +name = "jf-signature" +version = "0.2.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=jf-signature-v0.2.0#ca160ce3452b560cad512b750a742a87c48c5881" +dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "blst", + "derivative", + "digest 0.10.7", + "displaydoc", + "hashbrown 0.14.5", + "itertools 0.12.1", + "jf-crhf", + "jf-relation", + "jf-rescue", + "jf-utils", + "num-bigint", + "num-traits", + "serde", + "sha3", + "tagged-base64", + "zeroize", +] + +[[package]] +name = "jf-utils" +version = "0.4.4" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-381", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "digest 0.10.7", + "displaydoc", + "rand_chacha 0.3.1", + "rayon", + "serde", + "sha2 0.10.8", + "tagged-base64", +] + +[[package]] +name = "jf-vid" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/jellyfish?tag=0.4.5#7d71dbeff14f1a501b0b0dc391f1dffa1b8374fb" +dependencies = [ + "anyhow", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "displaydoc", + "generic-array", + "itertools 0.12.1", + "jf-merkle-tree", + "jf-pcs", + "jf-utils", + "rayon", + "serde", + "tagged-base64", +] + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.7", + "pem 1.1.1", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "kanal" +version = "0.1.0-pre8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05d55519627edaf7fd0f29981f6dc03fb52df3f5b257130eb8d0bf2801ea1d7" +dependencies = [ + "futures-core", + "lock_api", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "lalrpop" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" +dependencies = [ + "ascii-canvas", + "bit-set", + "ena", + "itertools 0.11.0", + "lalrpop-util", + "petgraph", + "regex", + "regex-syntax 0.8.5", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", + "walkdir", +] + +[[package]] +name = "lalrpop-util" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" +dependencies = [ + "regex-automata 0.4.9", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin 0.9.8", +] + +[[package]] +name = "libc" +version = "0.2.164" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "libnghttp2-sys" +version = "0.1.10+1.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "959c25552127d2e1fa72f0e52548ec04fc386e827ba71a7bd01db46a447dc135" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "libp2p" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681fb3f183edfbedd7a57d32ebe5dcdc0b9f94061185acf3c30249349cc6fc99" +dependencies = [ + "bytes 1.8.0", + "either", + "futures", + "futures-timer", + "getrandom 0.2.15", + "instant", + "libp2p-allow-block-list", + "libp2p-autonat", + "libp2p-connection-limits", + "libp2p-core", + "libp2p-dns", + "libp2p-gossipsub", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-mdns", + "libp2p-metrics", + "libp2p-quic", + "libp2p-request-response", + "libp2p-swarm", + "libp2p-tcp", + "libp2p-upnp", + "multiaddr", + "pin-project", + "rw-stream-sink", + "thiserror 1.0.69", +] + +[[package]] +name = "libp2p-allow-block-list" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "107b238b794cb83ab53b74ad5dcf7cca3200899b72fe662840cfb52f5b0a32e6" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-autonat" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95151726170e41b591735bf95c42b888fe4aa14f65216a9fbf0edcc04510586" +dependencies = [ + "async-trait", + "asynchronous-codec 0.6.2", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-request-response", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec 0.2.0", + "rand 0.8.5", + "tracing", +] + +[[package]] +name = "libp2p-connection-limits" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7cd50a78ccfada14de94cbacd3ce4b0138157f376870f13d3a8422cd075b4fd" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-core" +version = "0.41.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5a8920cbd8540059a01950c1e5c96ea8d89eb50c51cd366fc18bdf540a6e48f" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "libp2p-identity", + "multiaddr", + "multihash", + "multistream-select", + "once_cell", + "parking_lot", + "pin-project", + "quick-protobuf", + "rand 0.8.5", + "rw-stream-sink", + "serde", + "smallvec", + "thiserror 1.0.69", + "tracing", + "unsigned-varint 0.8.0", + "void", + "web-time", +] + +[[package]] +name = "libp2p-dns" +version = "0.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d17cbcf7160ff35c3e8e560de4a068fe9d6cb777ea72840e48eb76ff9576c4b6" +dependencies = [ + "async-trait", + "futures", + "hickory-resolver", + "libp2p-core", + "libp2p-identity", + "parking_lot", + "smallvec", + "tracing", +] + +[[package]] +name = "libp2p-gossipsub" +version = "0.46.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d665144a616dadebdc5fff186b1233488cdcd8bfb1223218ff084b6d052c94f7" +dependencies = [ + "asynchronous-codec 0.7.0", + "base64 0.21.7", + "byteorder", + "bytes 1.8.0", + "either", + "fnv", + "futures", + "futures-ticker", + "getrandom 0.2.15", + "hex_fmt", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "prometheus-client", + "quick-protobuf", + "quick-protobuf-codec 0.3.1", + "rand 0.8.5", + "regex", + "serde", + "sha2 0.10.8", + "smallvec", + "tracing", + "void", +] + +[[package]] +name = "libp2p-identify" +version = "0.44.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5d635ebea5ca0c3c3e77d414ae9b67eccf2a822be06091b9c1a0d13029a1e2f" +dependencies = [ + "asynchronous-codec 0.7.0", + "either", + "futures", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "lru 0.12.5", + "quick-protobuf", + "quick-protobuf-codec 0.3.1", + "smallvec", + "thiserror 1.0.69", + "tracing", + "void", +] + +[[package]] +name = "libp2p-identity" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cca1eb2bc1fd29f099f3daaab7effd01e1a54b7c577d0ed082521034d912e8" +dependencies = [ + "asn1_der", + "bs58", + "ed25519-dalek", + "hkdf 0.12.4", + "libsecp256k1", + "multihash", + "quick-protobuf", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "thiserror 1.0.69", + "tracing", + "zeroize", +] + +[[package]] +name = "libp2p-kad" +version = "0.45.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc5767727d062c4eac74dd812c998f0e488008e82cce9c33b463d38423f9ad2" +dependencies = [ + "arrayvec", + "asynchronous-codec 0.7.0", + "bytes 1.8.0", + "either", + "fnv", + "futures", + "futures-bounded", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec 0.3.1", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "smallvec", + "thiserror 1.0.69", + "tracing", + "uint", + "void", +] + +[[package]] +name = "libp2p-mdns" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49007d9a339b3e1d7eeebc4d67c05dbf23d300b7d091193ec2d3f26802d7faf2" +dependencies = [ + "data-encoding", + "futures", + "hickory-proto", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "smallvec", + "socket2 0.5.7", + "tokio", + "tracing", + "void", +] + +[[package]] +name = "libp2p-metrics" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdac91ae4f291046a3b2660c039a2830c931f84df2ee227989af92f7692d3357" +dependencies = [ + "futures", + "instant", + "libp2p-core", + "libp2p-gossipsub", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-swarm", + "pin-project", + "prometheus-client", +] + +[[package]] +name = "libp2p-networking" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" +dependencies = [ + "anyhow", + "async-lock 3.4.0", + "async-trait", + "bincode", + "blake3", + "cbor4ii", + "custom_debug 0.5.1", + "delegate", + "derive_builder", + "either", + "futures", + "hotshot-types", + "lazy_static", + "libp2p", + "libp2p-identity", + "libp2p-swarm-derive", + "pin-project", + "portpicker", + "rand 0.8.5", + "serde", + "serde_bytes", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", + "tracing-subscriber 0.3.18", + "void", +] + +[[package]] +name = "libp2p-quic" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c67296ad4e092e23f92aea3d2bdb6f24eab79c0929ed816dfb460ea2f4567d2b" +dependencies = [ + "bytes 1.8.0", + "futures", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-tls", + "parking_lot", + "quinn", + "rand 0.8.5", + "ring 0.17.8", + "rustls 0.23.17", + "socket2 0.5.7", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-request-response" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c314fe28368da5e3a262553fb0ad575c1c8934c461e10de10265551478163836" +dependencies = [ + "async-trait", + "cbor4ii", + "futures", + "futures-bounded", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "serde", + "smallvec", + "tracing", + "void", +] + +[[package]] +name = "libp2p-swarm" +version = "0.44.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80cae6cb75f89dbca53862f9ebe0b9f463aa7b302762fcfaafb9e51dcc9b0f7e" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm-derive", + "lru 0.12.5", + "multistream-select", + "once_cell", + "rand 0.8.5", + "smallvec", + "tokio", + "tracing", + "void", +] + +[[package]] +name = "libp2p-swarm-derive" +version = "0.34.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5daceb9dd908417b6dfcfe8e94098bc4aac54500c282e78120b885dadc09b999" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "libp2p-tcp" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2460fc2748919adff99ecbc1aab296e4579e41f374fb164149bd2c9e529d4c" +dependencies = [ + "futures", + "futures-timer", + "if-watch", + "libc", + "libp2p-core", + "libp2p-identity", + "socket2 0.5.7", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-tls" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b7b831e55ce2aa6c354e6861a85fdd4dd0a2b97d5e276fabac0e4810a71776" +dependencies = [ + "futures", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "rcgen 0.11.3", + "ring 0.17.8", + "rustls 0.23.17", + "rustls-webpki 0.101.7", + "thiserror 1.0.69", + "x509-parser", + "yasna", +] + +[[package]] +name = "libp2p-upnp" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccf04b0e3ff3de52d07d5fd6c3b061d0e7f908ffc683c32d9638caedce86fc8" +dependencies = [ + "futures", + "futures-timer", + "igd-next", + "libp2p-core", + "libp2p-swarm", + "tokio", + "tracing", + "void", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.5", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + +[[package]] +name = "local-ip-address" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3669cf5561f8d27e8fc84cc15e58350e70f557d4d65f70e3154e54cd2f8e1782" +dependencies = [ + "libc", + "neli", + "thiserror 1.0.69", + "windows-sys 0.59.0", +] + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +dependencies = [ + "value-bag", +] + +[[package]] +name = "log-panics" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f9dd8546191c1850ecf67d22f5ff00a935b890d0e84713159a55495cc2ac5f" +dependencies = [ + "backtrace", + "log", +] + +[[package]] +name = "lru" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.1", +] + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "markdown" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef3aab6a1d529b112695f72beec5ee80e729cb45af58663ec902c8fac764ecdd" +dependencies = [ + "lazy_static", + "pipeline", + "regex", +] + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "maud" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df518b75016b4289cdddffa1b01f2122f4a49802c93191f3133f6dc2472ebcaa" +dependencies = [ + "itoa", + "maud_macros", + "tide", +] + +[[package]] +name = "maud_macros" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa453238ec218da0af6b11fc5978d3b5c3a45ed97b722391a2a11f3306274e18" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5df4051db13d0816cf23196d3baa216385ae099339f5d0645a8d9ff2305e82b8" +dependencies = [ + "lazy_static", + "lru 0.7.8", + "memoize-inner", +] + +[[package]] +name = "memoize-inner" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27bdece7e91f0d1e33df7b46ec187a93ea0d4e642113a1039ac8bfdd4a3273ac" +dependencies = [ + "lazy_static", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "mnemonic" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b8f3a258db515d5e91a904ce4ae3f73e091149b90cadbdb93d210bee07f63b" + +[[package]] +name = "multiaddr" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "libp2p-identity", + "multibase", + "multihash", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint 0.8.0", + "url", +] + +[[package]] +name = "multibase" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +dependencies = [ + "base-x", + "data-encoding", + "data-encoding-macro", +] + +[[package]] +name = "multihash" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc41f430805af9d1cf4adae4ed2149c759b877b01d909a1f40256188d09345d2" +dependencies = [ + "core2", + "serde", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "multistream-select" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" +dependencies = [ + "bytes 1.8.0", + "futures", + "log", + "pin-project", + "smallvec", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "neli" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1100229e06604150b3becd61a4965d5c70f3be1759544ea7274166f4be41ef43" +dependencies = [ + "byteorder", + "libc", + "log", + "neli-proc-macros", +] + +[[package]] +name = "neli-proc-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c168194d373b1e134786274020dae7fc5513d565ea2ebb9bc9ff17ffb69106d4" +dependencies = [ + "either", + "proc-macro2", + "quote", + "serde", + "syn 1.0.109", +] + +[[package]] +name = "netlink-packet-core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" +dependencies = [ + "anyhow", + "byteorder", + "libc", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", +] + +[[package]] +name = "netlink-proto" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" +dependencies = [ + "bytes 1.8.0", + "futures", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "netlink-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416060d346fbaf1f23f9512963e3e878f1a78e707cb699ba9215761754244307" +dependencies = [ + "bytes 1.8.0", + "futures", + "libc", + "log", + "tokio", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +dependencies = [ + "asn1-rs", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "open-fastrlp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes 1.8.0", + "ethereum-types", + "open-fastrlp-derive", +] + +[[package]] +name = "open-fastrlp-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" +dependencies = [ + "bytes 1.8.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "openssl" +version = "0.10.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-multimap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" +dependencies = [ + "dlv-list", + "hashbrown 0.14.5", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parity-scale-codec" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" + +[[package]] +name = "pathdiff" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", + "password-hash", + "sha2 0.10.8", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", +] + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "pem" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +dependencies = [ + "memchr", + "thiserror 1.0.69", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "pest_meta" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.8", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.6.0", +] + +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version 0.4.1", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "pin-project" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pipeline" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.2.0", + "futures-io", +] + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite 0.2.15", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite 0.2.15", + "rustix 0.38.40", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "polyval" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" +dependencies = [ + "cpuid-bool", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portpicker" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be97d76faf1bfab666e1375477b23fde79eccf0276e9b63b92a39d676a889ba9" +dependencies = [ + "rand 0.8.5", +] + +[[package]] +name = "postgres-protocol" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acda0ebdebc28befa84bee35e651e4c5f09073d668c7aed4cf7e23c3cda84b23" +dependencies = [ + "base64 0.22.1", + "byteorder", + "bytes 1.8.0", + "fallible-iterator", + "hmac 0.12.1", + "md-5", + "memchr", + "rand 0.8.5", + "sha2 0.10.8", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f66ea23a2d0e5734297357705193335e0a957696f34bed2f2faefacb2fec336f" +dependencies = [ + "bytes 1.8.0", + "fallible-iterator", + "postgres-protocol", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi 1.0.1", +] + +[[package]] +name = "prettyplease" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn 2.0.87", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "protobuf", + "thiserror 1.0.69", +] + +[[package]] +name = "prometheus-client" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" +dependencies = [ + "dtoa", + "itoa", + "parking_lot", + "prometheus-client-derive-encode", +] + +[[package]] +name = "prometheus-client-derive-encode" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "proptest" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +dependencies = [ + "bitflags 2.6.0", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.8.5", + "unarray", +] + +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes 1.8.0", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + +[[package]] +name = "quick-protobuf-codec" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98" +dependencies = [ + "asynchronous-codec 0.6.2", + "bytes 1.8.0", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "quick-protobuf-codec" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" +dependencies = [ + "asynchronous-codec 0.7.0", + "bytes 1.8.0", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes 1.8.0", + "futures-io", + "pin-project-lite 0.2.15", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.17", + "socket2 0.5.7", + "thiserror 2.0.3", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes 1.8.0", + "getrandom 0.2.15", + "rand 0.8.5", + "ring 0.17.8", + "rustc-hash", + "rustls 0.23.17", + "rustls-pki-types", + "slab", + "thiserror 2.0.3", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.7", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rcgen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6" +dependencies = [ + "pem 3.0.4", + "ring 0.16.20", + "time 0.3.36", + "yasna", +] + +[[package]] +name = "rcgen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" +dependencies = [ + "pem 3.0.4", + "ring 0.17.8", + "rustls-pki-types", + "time 0.3.36", + "x509-parser", + "yasna", +] + +[[package]] +name = "redis" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e902a69d09078829137b4a5d9d082e0490393537badd7c91a3d69d14639e115f" +dependencies = [ + "arc-swap", + "async-trait", + "bytes 1.8.0", + "combine", + "futures", + "futures-util", + "itoa", + "num-bigint", + "percent-encoding", + "pin-project-lite 0.2.15", + "ryu", + "tokio", + "tokio-retry", + "tokio-util", + "url", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "refinery" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0904191f0566c3d3e0091d5cc8dec22e663d77def2d247b16e7a438b188bf75d" +dependencies = [ + "refinery-core", + "refinery-macros", +] + +[[package]] +name = "refinery-core" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bf253999e1899ae476c910b994959e341d84c4389ba9533d3dacbe06df04825" +dependencies = [ + "async-trait", + "cfg-if", + "log", + "regex", + "serde", + "siphasher 1.0.1", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tokio-postgres", + "toml", + "url", + "walkdir", +] + +[[package]] +name = "refinery-macros" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd81f69687fe8a1fa10995108b3ffc7cdbd63e682a4f8fbfd1020130780d7e17" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "refinery-core", + "regex", + "syn 2.0.87", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes 1.8.0", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.31", + "hyper-rustls 0.24.2", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite 0.2.15", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-rustls 0.24.1", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 0.25.4", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +dependencies = [ + "base64 0.22.1", + "bytes 1.8.0", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.5.0", + "hyper-rustls 0.27.3", + "hyper-tls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite 0.2.15", + "rustls-pemfile 2.2.0", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "system-configuration 0.6.1", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-registry", +] + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes 1.8.0", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid 1.11.0", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes 1.8.0", + "rlp-derive", + "rustc-hex", +] + +[[package]] +name = "rlp-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.7", + "bitflags 2.6.0", + "serde", + "serde_derive", +] + +[[package]] +name = "route-recognizer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56770675ebc04927ded3e60633437841581c285dc6236109ea25fbf3beb7b59e" + +[[package]] +name = "routefinder" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0971d3c8943a6267d6bd0d782fdc4afa7593e7381a92a3df950ff58897e066b5" +dependencies = [ + "smartcow", + "smartstring", +] + +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "rtnetlink" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" +dependencies = [ + "futures", + "log", + "netlink-packet-route", + "netlink-proto", + "nix", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "rust-ini" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a" +dependencies = [ + "cfg-if", + "ordered-multimap", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.23", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys 0.4.14", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64 0.13.1", + "log", + "ring 0.16.20", + "sct 0.6.1", + "webpki", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki 0.101.7", + "sct 0.7.1", +] + +[[package]] +name = "rustls" +version = "0.23.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f1a745511c54ba6d4465e8d5dfbd81b45791756de28d4981af70d6dca128f1e" +dependencies = [ + "log", + "once_cell", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +dependencies = [ + "web-time", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "rw-stream-sink" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +dependencies = [ + "futures", + "pin-project", + "static_assertions", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scale-info" +version = "2.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa7ffc1c0ef49b0452c6e2986abf2b07743320641ffd5fc63d552458e3b779b" +dependencies = [ + "cfg-if", + "derive_more 1.0.0", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46385cc24172cf615450267463f937c10072516359b3ff1cb24228a4a08bf951" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "schannel" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac 0.12.1", + "pbkdf2 0.11.0", + "salsa20", + "sha2 0.10.8", +] + +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + +[[package]] +name = "sequencer-utils" +version = "0.1.0" +source = "git+https://github.com/espressosystems/espresso-sequencer?branch=main#5795d5a02678e4307f0cce79293a686f32b7abd9" +dependencies = [ + "anyhow", + "ark-serialize", + "async-trait", + "clap", + "committable", + "contract-bindings", + "derive_more 1.0.0", + "ethers", + "futures", + "hotshot", + "hotshot-contract-adapter", + "log-panics", + "portpicker", + "reqwest 0.11.27", + "serde", + "serde_json", + "surf", + "tempfile", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-inline-default" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3acbd21cb24261fc36f595b38d3b34d0ff4e31a6b42edd6a43387d27c5787c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "serde_bytes" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "serde_fmt" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d4ddca14104cd60529e8c7f7ba71a2c8acd8f7f5cfcdc2faf97eeb7c3010a4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_qs" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" +dependencies = [ + "percent-encoding", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.6.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time 0.3.36", +] + +[[package]] +name = "serde_with_macros" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha1" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +dependencies = [ + "sha1_smol", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shellexpand" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-async-std" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4aa94397e2023af5b7cff5b8d4785e935cfb77f0e4aab0cae3b26258ace556" +dependencies = [ + "async-io 1.13.0", + "futures-lite 1.13.0", + "libc", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 1.0.69", + "time 0.3.36", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "sluice" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" +dependencies = [ + "async-channel 1.9.0", + "futures-core", + "futures-io", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] + +[[package]] +name = "smartcow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "656fcb1c1fca8c4655372134ce87d8afdf5ec5949ebabe8d314be0141d8b5da2" +dependencies = [ + "smartstring", +] + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "backtrace", + "doc-comment", + "snafu-derive 0.7.5", +] + +[[package]] +name = "snafu" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +dependencies = [ + "snafu-derive 0.8.5", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "snafu-derive" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "solang-parser" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" +dependencies = [ + "itertools 0.11.0", + "lalrpop", + "lalrpop-util", + "phf", + "thiserror 1.0.69", + "unicode-xid", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spinning_top" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9eb1a2f4c41445a3a0ff9abc5221c5fcd28e1f13cd7c0397706f9ac938ddb0" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlformat" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" +dependencies = [ + "nom", + "unicode_categories", +] + +[[package]] +name = "sqlx" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e" +dependencies = [ + "atoi", + "bit-vec", + "byteorder", + "bytes 1.8.0", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.3.1", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.14.5", + "hashlink 0.9.1", + "hex", + "indexmap 2.6.0", + "log", + "memchr", + "native-tls", + "once_cell", + "paste", + "percent-encoding", + "serde", + "serde_json", + "sha2 0.10.8", + "smallvec", + "sqlformat", + "thiserror 1.0.69", + "time 0.3.36", + "tokio", + "tokio-stream", + "tracing", + "url", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.87", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5" +dependencies = [ + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.8", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.87", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a" +dependencies = [ + "atoi", + "base64 0.22.1", + "bitflags 2.6.0", + "byteorder", + "bytes 1.8.0", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf 0.12.4", + "hmac 0.12.1", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1 0.10.6", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 1.0.69", + "time 0.3.36", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8" +dependencies = [ + "atoi", + "base64 0.22.1", + "bit-vec", + "bitflags 2.6.0", + "byteorder", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf 0.12.4", + "hmac 0.12.1", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 1.0.69", + "time 0.3.36", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680" +dependencies = [ + "atoi", + "flume 0.11.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "time 0.3.36", + "tracing", + "url", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "standback" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" +dependencies = [ + "version_check", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stdweb" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" +dependencies = [ + "discard", + "rustc_version 0.2.3", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", +] + +[[package]] +name = "stdweb-derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_derive", + "syn 1.0.109", +] + +[[package]] +name = "stdweb-internal-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +dependencies = [ + "base-x", + "proc-macro2", + "quote", + "serde", + "serde_derive", + "serde_json", + "sha1 0.6.1", + "syn 1.0.109", +] + +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", +] + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.87", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "surf" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718b1ae6b50351982dedff021db0def601677f2120938b070eadb10ba4038dd7" +dependencies = [ + "async-std", + "async-trait", + "cfg-if", + "encoding_rs", + "futures-util", + "getrandom 0.2.15", + "http-client", + "http-types", + "log", + "mime_guess", + "once_cell", + "pin-project-lite 0.2.15", + "serde", + "serde_json", + "web-sys", +] + +[[package]] +name = "surf-disco" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e00ab9d939d04110f14281d5a1e45b6c8acdfbc42e720cbfaef33007c907e6" +dependencies = [ + "async-std", + "async-tungstenite", + "derivative", + "futures", + "hex", + "reqwest 0.12.9", + "serde", + "serde_json", + "tide-disco", + "tracing", + "vbs", +] + +[[package]] +name = "sval" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6dc0f9830c49db20e73273ffae9b5240f63c42e515af1da1fceefb69fceafd8" + +[[package]] +name = "sval_buffer" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "429922f7ad43c0ef8fd7309e14d750e38899e32eb7e8da656ea169dd28ee212f" +dependencies = [ + "sval", + "sval_ref", +] + +[[package]] +name = "sval_dynamic" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f16ff5d839396c11a30019b659b0976348f3803db0626f736764c473b50ff4" +dependencies = [ + "sval", +] + +[[package]] +name = "sval_fmt" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c01c27a80b6151b0557f9ccbe89c11db571dc5f68113690c1e028d7e974bae94" +dependencies = [ + "itoa", + "ryu", + "sval", ] [[package]] -name = "keccak" -version = "0.1.5" +name = "sval_json" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "0deef63c70da622b2a8069d8600cf4b05396459e665862e7bdb290fd6cf3f155" dependencies = [ - "cpufeatures", + "itoa", + "ryu", + "sval", ] [[package]] -name = "lazy_static" -version = "1.5.0" +name = "sval_nested" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "a39ce5976ae1feb814c35d290cf7cf8cd4f045782fe1548d6bc32e21f6156e9f" +dependencies = [ + "sval", + "sval_buffer", + "sval_ref", +] [[package]] -name = "libc" -version = "0.2.161" +name = "sval_ref" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "bb7c6ee3751795a728bc9316a092023529ffea1783499afbc5c66f5fabebb1fa" +dependencies = [ + "sval", +] [[package]] -name = "libm" -version = "0.2.11" +name = "sval_serde" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "2a5572d0321b68109a343634e3a5d576bf131b82180c6c442dee06349dfc652a" +dependencies = [ + "serde", + "sval", + "sval_nested", +] [[package]] -name = "libredox" -version = "0.1.3" +name = "svm-rs" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "11297baafe5fa0c99d5722458eac6a5e25c01eb1b8e5cd137f54079093daa7a4" dependencies = [ - "bitflags", - "libc", + "dirs", + "fs2", + "hex", + "once_cell", + "reqwest 0.11.27", + "semver 1.0.23", + "serde", + "serde_json", + "sha2 0.10.8", + "thiserror 1.0.69", + "url", + "zip", ] [[package]] -name = "linux-raw-sys" -version = "0.4.14" +name = "syn" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] -name = "litemap" -version = "0.7.3" +name = "syn" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] -name = "log" -version = "0.4.22" +name = "sync_wrapper" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] -name = "memchr" -version = "2.7.4" +name = "sync_wrapper" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] -name = "merlin" -version = "3.0.0" +name = "synstructure" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "byteorder", - "keccak", - "rand_core", - "zeroize", + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", ] [[package]] -name = "miniz_oxide" -version = "0.8.0" +name = "synstructure" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ - "adler2", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "nu-ansi-term" -version = "0.46.0" +name = "system-configuration" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ - "overload", - "winapi", + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys 0.5.0", ] [[package]] -name = "num-bigint" -version = "0.4.6" +name = "system-configuration" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "num-integer", - "num-traits", + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys 0.6.0", ] [[package]] -name = "num-integer" -version = "0.1.46" +name = "system-configuration-sys" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" dependencies = [ - "num-traits", + "core-foundation-sys", + "libc", ] [[package]] -name = "num-traits" -version = "0.2.19" +name = "system-configuration-sys" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ - "autocfg", - "libm", + "core-foundation-sys", + "libc", ] [[package]] -name = "num_enum" -version = "0.7.3" +name = "tagged-base64" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +checksum = "7b74bbf1db405a3fd2c6f8cd403bfa14727faa145925efe3012fa270b61551f1" dependencies = [ - "num_enum_derive", + "ark-serialize", + "ark-std", + "base64 0.22.1", + "crc-any", + "serde", + "snafu 0.8.5", + "tagged-base64-macros", + "wasm-bindgen", ] [[package]] -name = "num_enum_derive" -version = "0.7.3" +name = "tagged-base64-macros" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "bcdea3c0150898fad2f7196a173ec3264f7fc455ba570939163c558f48ae85ac" dependencies = [ - "proc-macro-crate", - "proc-macro2", "quote", - "syn 2.0.87", + "syn 1.0.109", ] [[package]] -name = "once_cell" -version = "1.20.2" +name = "tap" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] -name = "open-fastrlp" -version = "0.1.4" +name = "tempfile" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ - "arrayvec", - "auto_impl", - "bytes", - "ethereum-types", - "open-fastrlp-derive", + "cfg-if", + "fastrand 2.2.0", + "once_cell", + "rustix 0.38.40", + "windows-sys 0.59.0", ] [[package]] -name = "open-fastrlp-derive" -version = "0.1.1" +name = "term" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" dependencies = [ - "bytes", - "proc-macro2", - "quote", - "syn 1.0.109", + "dirs-next", + "rustversion", + "winapi", ] [[package]] -name = "option-ext" -version = "0.2.0" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] [[package]] -name = "overload" -version = "0.1.1" +name = "thiserror" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", +] [[package]] -name = "parity-scale-codec" -version = "3.6.12" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "arrayvec", - "bitvec", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "parity-scale-codec-derive" -version = "3.6.12" +name = "thiserror-impl" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" dependencies = [ - "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] [[package]] -name = "paste" -version = "1.0.15" +name = "thread_local" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] [[package]] -name = "percent-encoding" -version = "2.3.1" +name = "threadpool" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] [[package]] -name = "pin-project-lite" -version = "0.2.15" +name = "tide" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "c459573f0dd2cc734b539047f57489ea875af8ee950860ded20cf93a79a1dee0" +dependencies = [ + "async-h1", + "async-sse", + "async-std", + "async-trait", + "futures-util", + "http-client", + "http-types", + "kv-log-macro", + "log", + "pin-project-lite 0.2.15", + "route-recognizer", + "serde", + "serde_json", +] [[package]] -name = "pkcs8" -version = "0.10.2" +name = "tide-disco" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "9819433f7ede35c0ef6dd1dc669b39663e48fdb58653712cc39db272e4589978" dependencies = [ - "der", - "spki", + "anyhow", + "async-h1", + "async-lock 3.4.0", + "async-std", + "async-trait", + "clap", + "config", + "derivative", + "derive_more 0.99.18", + "dirs", + "edit-distance", + "futures", + "futures-util", + "http 1.1.0", + "include_dir", + "itertools 0.12.1", + "lazy_static", + "libc", + "markdown", + "maud", + "parking_lot", + "pin-project", + "prometheus", + "rand 0.8.5", + "reqwest 0.12.9", + "routefinder", + "semver 1.0.23", + "serde", + "serde_json", + "serde_with", + "shellexpand", + "signal-hook", + "signal-hook-async-std", + "snafu 0.8.5", + "strum", + "strum_macros", + "tagged-base64", + "tide", + "tide-websockets", + "toml", + "tracing", + "tracing-distributed", + "tracing-futures", + "tracing-log", + "tracing-subscriber 0.3.18", + "url", + "vbs", ] [[package]] -name = "ppv-lite86" -version = "0.2.20" +name = "tide-websockets" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "3592c5cb5cb1b7a2ff3a0e5353170c1bb5b104b2f66dd06f73304169b52cc725" dependencies = [ - "zerocopy", + "async-dup", + "async-std", + "async-tungstenite", + "base64 0.13.1", + "futures-util", + "pin-project", + "serde", + "serde_json", + "sha-1", + "tide", ] [[package]] -name = "primitive-types" -version = "0.12.2" +name = "time" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" dependencies = [ - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "scale-info", - "uint", + "const_fn", + "libc", + "standback", + "stdweb", + "time-macros 0.1.1", + "version_check", + "winapi", ] [[package]] -name = "proc-macro-crate" -version = "3.2.0" +name = "time" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ - "toml_edit", + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros 0.2.18", ] [[package]] -name = "proc-macro2" -version = "1.0.89" +name = "time-core" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" -dependencies = [ - "unicode-ident", -] +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] -name = "proptest" -version = "1.5.0" +name = "time-macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" dependencies = [ - "bitflags", - "lazy_static", - "num-traits", - "rand", - "rand_chacha", - "rand_xorshift", - "regex-syntax", - "unarray", + "proc-macro-hack", + "time-macros-impl", ] [[package]] -name = "quote" -version = "1.0.37" +name = "time-macros" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ - "proc-macro2", + "num-conv", + "time-core", ] [[package]] -name = "radium" -version = "0.7.0" +name = "time-macros-impl" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" +dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "standback", + "syn 1.0.109", +] [[package]] -name = "rand" -version = "0.8.5" +name = "tiny-keccak" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ - "libc", - "rand_chacha", - "rand_core", + "crunchy", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "ppv-lite86", - "rand_core", + "displaydoc", + "zerovec", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "tinyvec" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ - "getrandom", + "tinyvec_macros", ] [[package]] -name = "rand_xorshift" -version = "0.3.0" +name = "tinyvec_macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" -dependencies = [ - "rand_core", -] +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] -name = "rayon" -version = "1.10.0" +name = "tokio" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" dependencies = [ - "either", - "rayon-core", + "backtrace", + "bytes 1.8.0", + "libc", + "mio", + "parking_lot", + "pin-project-lite 0.2.15", + "socket2 0.5.7", + "tokio-macros", + "tracing", + "windows-sys 0.52.0", ] [[package]] -name = "rayon-core" -version = "1.12.1" +name = "tokio-io-timeout" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" dependencies = [ - "crossbeam-deque", - "crossbeam-utils", + "pin-project-lite 0.2.15", + "tokio", ] [[package]] -name = "redox_users" -version = "0.4.6" +name = "tokio-macros" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ - "getrandom", - "libredox", - "thiserror", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "regex" -version = "1.11.1" +name = "tokio-native-tls" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", + "native-tls", + "tokio", ] [[package]] -name = "regex-automata" -version = "0.4.8" +name = "tokio-postgres" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "3b5d3742945bc7d7f210693b0c58ae542c6fd47b17adbbda0885f3dcb34a6bdb" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", + "async-trait", + "byteorder", + "bytes 1.8.0", + "fallible-iterator", + "futures-channel", + "futures-util", + "log", + "parking_lot", + "percent-encoding", + "phf", + "pin-project-lite 0.2.15", + "postgres-protocol", + "postgres-types", + "rand 0.8.5", + "socket2 0.5.7", + "tokio", + "tokio-util", + "whoami", ] [[package]] -name = "regex-syntax" -version = "0.8.5" +name = "tokio-retry" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" +dependencies = [ + "pin-project", + "rand 0.8.5", + "tokio", +] [[package]] -name = "rfc6979" -version = "0.4.0" +name = "tokio-rustls" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "hmac", - "subtle", + "rustls 0.21.12", + "tokio", ] [[package]] -name = "ring" -version = "0.17.8" +name = "tokio-rustls" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "cc", - "cfg-if", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.52.0", + "rustls 0.23.17", + "rustls-pki-types", + "tokio", ] [[package]] -name = "rlp" -version = "0.5.2" +name = "tokio-stream" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" dependencies = [ - "bytes", - "rlp-derive", - "rustc-hex", + "futures-core", + "pin-project-lite 0.2.15", + "tokio", ] [[package]] -name = "rlp-derive" -version = "0.1.0" +name = "tokio-tungstenite" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "futures-util", + "log", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", + "tungstenite 0.20.1", + "webpki-roots 0.25.4", ] [[package]] -name = "rustc-hex" -version = "2.1.0" +name = "tokio-util" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes 1.8.0", + "futures-core", + "futures-sink", + "pin-project-lite 0.2.15", + "tokio", +] [[package]] -name = "rustc_version" -version = "0.4.1" +name = "toml" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ - "semver", + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", ] [[package]] -name = "rustix" -version = "0.38.38" +name = "toml_datetime" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa260229e6538e52293eeb577aabd09945a09d6d9cc0fc550ed7529056c2e32a" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", + "serde", ] [[package]] -name = "rustls" -version = "0.23.16" +name = "toml_edit" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", + "indexmap 2.6.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", ] [[package]] -name = "rustls-pki-types" -version = "1.10.0" +name = "tonic" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.21.7", + "bytes 1.8.0", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.31", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] [[package]] -name = "rustls-webpki" -version = "0.102.8" +name = "tower" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite 0.2.15", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "rustversion" -version = "1.0.18" +name = "tower-layer" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] -name = "ryu" -version = "1.0.18" +name = "tower-service" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] -name = "scale-info" -version = "2.11.5" +name = "tracing" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aa7ffc1c0ef49b0452c6e2986abf2b07743320641ffd5fc63d552458e3b779b" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", - "derive_more 1.0.0", - "parity-scale-codec", - "scale-info-derive", + "log", + "pin-project-lite 0.2.15", + "tracing-attributes", + "tracing-core", ] [[package]] -name = "scale-info-derive" -version = "2.11.5" +name = "tracing-attributes" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46385cc24172cf615450267463f937c10072516359b3ff1cb24228a4a08bf951" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ - "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.87", ] [[package]] -name = "sec1" -version = "0.7.3" +name = "tracing-core" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", + "once_cell", + "valuable", ] [[package]] -name = "semver" -version = "1.0.23" +name = "tracing-distributed" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "de30b98573d9e63e82996b3c9bf950210ba3f2dcf363f7eec000acebef1a4377" +dependencies = [ + "itertools 0.9.0", + "tracing", + "tracing-core", + "tracing-subscriber 0.3.18", +] [[package]] -name = "serde" -version = "1.0.214" +name = "tracing-futures" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ - "serde_derive", + "pin-project", + "tracing", ] [[package]] -name = "serde_derive" -version = "1.0.214" +name = "tracing-log" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", + "log", + "once_cell", + "tracing-core", ] [[package]] -name = "serde_json" -version = "1.0.132" +name = "tracing-serde" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" dependencies = [ - "itoa", - "memchr", - "ryu", "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", ] [[package]] -name = "sha2" -version = "0.10.8" +name = "trait-variant" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" dependencies = [ - "cfg-if", - "cpufeatures", - "digest", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] -name = "sha3" -version = "0.10.8" +name = "try-lock" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest", - "keccak", -] +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] -name = "sharded-slab" -version = "0.1.7" +name = "tungstenite" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +checksum = "5fe8dada8c1a3aeca77d6b51a4f1314e0f4b8e438b7b1b71e3ddaca8080e4093" dependencies = [ - "lazy_static", + "base64 0.13.1", + "byteorder", + "bytes 1.8.0", + "http 0.2.12", + "httparse", + "input_buffer", + "log", + "native-tls", + "rand 0.8.5", + "sha-1", + "thiserror 1.0.69", + "url", + "utf-8", ] [[package]] -name = "shlex" -version = "1.3.0" +name = "tungstenite" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes 1.8.0", + "data-encoding", + "http 0.2.12", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.21.12", + "sha1 0.10.6", + "thiserror 1.0.69", + "url", + "utf-8", +] [[package]] -name = "signature" -version = "2.2.0" +name = "typeid" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest", - "rand_core", -] +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" [[package]] -name = "smallvec" -version = "1.13.2" +name = "typenum" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] -name = "snafu" -version = "0.8.5" +name = "ucd-trie" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" -dependencies = [ - "snafu-derive", -] +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] -name = "snafu-derive" -version = "0.8.5" +name = "uint" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.87", + "byteorder", + "crunchy", + "hex", + "static_assertions", ] [[package]] -name = "spin" -version = "0.9.8" +name = "unarray" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] -name = "spki" -version = "0.7.3" +name = "unicase" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" [[package]] -name = "stable_deref_trait" -version = "1.2.0" +name = "unicode-bidi" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] -name = "static_assertions" -version = "1.1.0" +name = "unicode-ident" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] -name = "strum" -version = "0.26.3" +name = "unicode-normalization" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ - "strum_macros", + "tinyvec", ] [[package]] -name = "strum_macros" -version = "0.26.4" +name = "unicode-properties" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.87", -] +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" [[package]] -name = "subtle" -version = "2.6.1" +name = "unicode-segmentation" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] -name = "syn" -version = "1.0.109" +name = "unicode-xid" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] -name = "syn" -version = "2.0.87" +name = "unicode_categories" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" [[package]] -name = "synstructure" -version = "0.13.1" +name = "universal-hash" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", + "generic-array", + "subtle", ] [[package]] -name = "tagged-base64" -version = "0.4.0" +name = "unsigned-varint" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b74bbf1db405a3fd2c6f8cd403bfa14727faa145925efe3012fa270b61551f1" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" dependencies = [ - "ark-serialize", - "ark-std", - "base64", - "crc-any", - "serde", - "snafu", - "tagged-base64-macros", - "wasm-bindgen", + "asynchronous-codec 0.6.2", + "bytes 1.8.0", ] [[package]] -name = "tagged-base64-macros" -version = "0.4.0" +name = "unsigned-varint" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcdea3c0150898fad2f7196a173ec3264f7fc455ba570939163c558f48ae85ac" -dependencies = [ - "quote", - "syn 1.0.109", -] +checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" [[package]] -name = "tap" -version = "1.0.1" +name = "untrusted" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] -name = "tempfile" -version = "3.13.0" +name = "untrusted" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" -dependencies = [ - "cfg-if", - "fastrand", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] -name = "thiserror" -version = "1.0.68" +name = "ureq" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" +checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" dependencies = [ - "thiserror-impl", + "base64 0.22.1", + "flate2", + "log", + "once_cell", + "rustls 0.23.17", + "rustls-pki-types", + "url", + "webpki-roots 0.26.6", ] [[package]] -name = "thiserror-impl" -version = "1.0.68" +name = "url" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", + "form_urlencoded", + "idna 1.0.3", + "percent-encoding", + "serde", ] [[package]] -name = "thread_local" -version = "1.1.8" +name = "utf-8" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" -dependencies = [ - "cfg-if", - "once_cell", -] +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] -name = "tiny-keccak" -version = "2.0.2" +name = "utf16_iter" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" [[package]] -name = "tinystr" -version = "0.7.6" +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" -dependencies = [ - "displaydoc", - "zerovec", -] +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] -name = "toml_datetime" -version = "0.6.8" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] -name = "toml_edit" -version = "0.22.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +name = "utils" +version = "0.5.81" +source = "git+https://github.com/EspressoSystems/hotshot?tag=0.5.81#4ed1df20f793b947d5c9f90a1cb10e4177f8521d" dependencies = [ - "indexmap", - "toml_datetime", - "winnow", + "tracing", ] [[package]] -name = "tracing" -version = "0.1.40" +name = "uuid" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", + "getrandom 0.2.15", + "serde", ] [[package]] -name = "tracing-attributes" -version = "0.1.27" +name = "uuid" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" [[package]] -name = "tracing-core" -version = "0.1.32" +name = "valuable" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] -name = "tracing-log" -version = "0.2.0" +name = "value-bag" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" dependencies = [ - "log", - "once_cell", - "tracing-core", + "value-bag-serde1", + "value-bag-sval2", ] [[package]] -name = "tracing-subscriber" -version = "0.2.25" +name = "value-bag-serde1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +checksum = "4bb773bd36fd59c7ca6e336c94454d9c66386416734817927ac93d81cb3c5b0b" dependencies = [ - "tracing-core", + "erased-serde", + "serde", + "serde_fmt", ] [[package]] -name = "tracing-subscriber" -version = "0.3.18" +name = "value-bag-sval2" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "53a916a702cac43a88694c97657d449775667bcd14b70419441d05b7fea4a83a" dependencies = [ - "nu-ansi-term", - "sharded-slab", - "smallvec", - "thread_local", - "tracing-core", - "tracing-log", + "sval", + "sval_buffer", + "sval_dynamic", + "sval_fmt", + "sval_json", + "sval_ref", + "sval_serde", ] [[package]] -name = "trait-set" -version = "0.3.0" +name = "vbs" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625" +checksum = "9cf4ed425fa4976d51e35f5882764612c5f735457118d6ef7b6c684b7d34a74d" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "anyhow", + "bincode", + "derive_more 0.99.18", + "serde", ] [[package]] -name = "typenum" -version = "1.17.0" +name = "vcpkg" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] -name = "uint" -version = "0.9.5" +name = "vec1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +checksum = "eab68b56840f69efb0fefbe3ab6661499217ffdc58e2eef7c3f6f69835386322" dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", + "serde", ] [[package]] -name = "unarray" -version = "0.1.4" +name = "version_check" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "unicode-ident" -version = "1.0.13" +name = "void" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] -name = "unicode-xid" -version = "0.2.6" +name = "waker-fn" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] -name = "untrusted" -version = "0.9.0" +name = "walkdir" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] [[package]] -name = "ureq" -version = "2.10.1" +name = "want" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "base64", - "flate2", - "log", - "once_cell", - "rustls", - "rustls-pki-types", - "url", - "webpki-roots", + "try-lock", ] [[package]] -name = "url" -version = "2.5.3" +name = "warp" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" dependencies = [ - "form_urlencoded", - "idna", + "bytes 1.8.0", + "futures-channel", + "futures-util", + "headers", + "http 0.2.12", + "hyper 0.14.31", + "log", + "mime", + "mime_guess", "percent-encoding", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-util", + "tower-service", + "tracing", ] [[package]] -name = "utf16_iter" -version = "1.0.5" +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] -name = "utf8_iter" -version = "1.0.4" +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] -name = "valuable" +name = "wasite" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" @@ -2489,6 +10301,18 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.95" @@ -2518,6 +10342,51 @@ version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +[[package]] +name = "web-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[package]] +name = "webpki-roots" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" +dependencies = [ + "webpki", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "webpki-roots" version = "0.26.6" @@ -2527,6 +10396,23 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "whoami" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" +dependencies = [ + "redox_syscall", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + [[package]] name = "winapi" version = "0.3.9" @@ -2543,12 +10429,79 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core 0.51.1", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -2706,6 +10659,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "write16" version = "1.0.0" @@ -2718,6 +10681,25 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +[[package]] +name = "ws_stream_wasm" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version 0.4.1", + "send_wrapper 0.6.0", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "wyz" version = "0.5.1" @@ -2727,6 +10709,71 @@ dependencies = [ "tap", ] +[[package]] +name = "x509-parser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +dependencies = [ + "asn1-rs", + "data-encoding", + "der-parser", + "lazy_static", + "nom", + "oid-registry", + "ring 0.17.8", + "rusticata-macros", + "thiserror 1.0.69", + "time 0.3.36", +] + +[[package]] +name = "xml-rs" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af310deaae937e48a26602b730250b4949e125f468f11e6990be3e5304ddd96f" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", +] + +[[package]] +name = "yaml-rust2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink 0.8.4", +] + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time 0.3.36", +] + [[package]] name = "yoke" version = "0.7.4" @@ -2748,7 +10795,7 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.87", - "synstructure", + "synstructure 0.13.1", ] [[package]] @@ -2790,7 +10837,7 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.87", - "synstructure", + "synstructure 0.13.1", ] [[package]] @@ -2834,3 +10881,52 @@ dependencies = [ "quote", "syn 2.0.87", ] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes 0.8.4", + "byteorder", + "bzip2", + "constant_time_eq 0.1.5", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac 0.12.1", + "pbkdf2 0.11.0", + "sha1 0.10.6", + "time 0.3.36", + "zstd", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/espressocrypto/lib/espresso-crypto-helper/Cargo.toml b/espressocrypto/lib/espresso-crypto-helper/Cargo.toml index 5a2116c86b..5aec09ce7e 100644 --- a/espressocrypto/lib/espresso-crypto-helper/Cargo.toml +++ b/espressocrypto/lib/espresso-crypto-helper/Cargo.toml @@ -10,49 +10,21 @@ rust-version = "1.81" crate-type = ["staticlib"] [dependencies] -ark-bn254 = "0.4" ark-ed-on-bn254 = "0.4" ark-ff = "0.4" -ark-serialize = { version = "0.4", features = ["derive"] } -ark-std = { version = "0.4", default-features = false } -base64 = "0.22" -bytesize = "1.3" -derive_more = "0.99.17" -digest = "0.10" +ark-serialize = "0.4" ethers-core = "2.0.14" -libc = "0.2" sha2 = "0.10" -base64-bytes = "0.1" -paste = "1.0" serde_json = "1.0" committable = {version = "0.2", features = ["ark-serialize"]} -ethereum-types = "0.14.1" +serde = "1" tagged-base64 = "0.4" -lazy_static = "1.4" -serde = { version = "1.0.195", features = ["derive"] } -itertools = "0.12" -either = {version = "1.11.0", features = ["serde"]} - jf-crhf = { version = "0.1.0", git = "https://github.com/EspressoSystems/jellyfish", tag = "0.4.5" } -jf-utils = { git = "https://github.com/EspressoSystems/jellyfish", tag = "0.4.5", features = [], default-features = false} -jf-vid = { version = "0.1.0", git = "https://github.com/EspressoSystems/jellyfish", tag = "0.4.5", features = [ - "std", -], default-features = false} +espresso-types = { git = "https://github.com/espressosystems/espresso-sequencer", branch = "main" } jf-merkle-tree = { version = "0.1.0", git = "https://github.com/EspressoSystems/jellyfish", tag = "0.4.5", features = [ "std", ], default-features = false} -jf-pcs = { version = "0.1.0", git = "https://github.com/EspressoSystems/jellyfish", tag = "0.4.5", features = [ - "std", -], default-features = false } jf-rescue = { version = "0.1.0", git = "https://github.com/EspressoSystems/jellyfish", tag = "0.4.5", features = [ "std", ], default-features = false} -trait-set = "0.3.0" -typenum = { version = "1.15.0", default-features = false, features = [ - "no_std", -] } -num-traits = "0.2.17" -derivative = "2.2" - -[dev-dependencies] -ark-srs = { version = "0.3.1" } +hotshot-types = { git = "https://github.com/EspressoSystems/hotshot", tag = "0.5.81", default-features = false } diff --git a/espressocrypto/lib/espresso-crypto-helper/src/bytes.rs b/espressocrypto/lib/espresso-crypto-helper/src/bytes.rs deleted file mode 100644 index 5859c871d7..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/bytes.rs +++ /dev/null @@ -1,160 +0,0 @@ -//! Convenient serialization for binary blobs. - -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize}; -use base64::{engine::general_purpose::STANDARD as BASE64, Engine}; -use derive_more::{From, Into}; -use serde::{ - de::{Deserialize, Deserializer, Error}, - ser::{Serialize, Serializer}, -}; -use std::{ - ops::{Deref, DerefMut}, - slice::SliceIndex, -}; - -/// An unstructured byte array with smart serialization. -/// -/// [`Bytes`] mostly acts as a simple byte array, `Vec`. It can easily be converted to and from -/// a `Vec`, and it implements many of the same traits as [`Vec`]. In fact internally it merely -/// wraps a `Vec`. -/// -/// The only difference is in how it serializes. `Vec` serializes very efficiently using -/// `bincode`, but using `serde_json`, it serializes as a JSON array of integers, which is -/// unconventional and inefficient. It is better, in JSON, to serialize binary data as a -/// base64-encoded string. [`Bytes`] uses the [`is_human_readable`](Serializer::is_human_readable) -/// property of a [`Serializer`] to detect whether we are serializing for a compact binary format -/// (like `bincode`) or a human-readable format (like JSON). In the former cases, it serializes -/// directly as an array of bytes. In the latter case, it serializes as a string using base 64. -#[derive( - Clone, - Debug, - Default, - PartialEq, - Eq, - Hash, - PartialOrd, - Ord, - From, - Into, - CanonicalSerialize, - CanonicalDeserialize, -)] -pub struct Bytes(Vec); - -impl Bytes { - pub fn get(&self, index: I) -> Option<&I::Output> - where - I: SliceIndex<[u8]>, - { - self.0.get(index) - } -} - -impl Serialize for Bytes { - fn serialize(&self, s: S) -> Result { - if s.is_human_readable() { - BASE64.encode(self).serialize(s) - } else { - self.0.serialize(s) - } - } -} - -impl<'a> Deserialize<'a> for Bytes { - fn deserialize>(d: D) -> Result { - if d.is_human_readable() { - Ok(Self(BASE64.decode(String::deserialize(d)?).map_err( - |err| D::Error::custom(format!("invalid base64: {err}")), - )?)) - } else { - Ok(Self(Vec::deserialize(d)?)) - } - } -} - -impl From<&[u8]> for Bytes { - fn from(bytes: &[u8]) -> Self { - Self(bytes.into()) - } -} - -impl From<[u8; N]> for Bytes { - fn from(bytes: [u8; N]) -> Self { - Self(bytes.into()) - } -} - -impl From<&[u8; N]> for Bytes { - fn from(bytes: &[u8; N]) -> Self { - Self((*bytes).into()) - } -} - -impl FromIterator for Bytes { - fn from_iter>(iter: I) -> Self { - Self(iter.into_iter().collect()) - } -} - -impl AsRef<[u8]> for Bytes { - fn as_ref(&self) -> &[u8] { - self.0.as_ref() - } -} - -impl AsMut<[u8]> for Bytes { - fn as_mut(&mut self) -> &mut [u8] { - self.0.as_mut() - } -} - -impl Deref for Bytes { - type Target = [u8]; - - fn deref(&self) -> &[u8] { - self.as_ref() - } -} - -impl DerefMut for Bytes { - fn deref_mut(&mut self) -> &mut [u8] { - self.as_mut() - } -} - -impl PartialEq<[u8]> for Bytes { - fn eq(&self, other: &[u8]) -> bool { - self.as_ref() == other - } -} - -impl PartialEq<[u8; N]> for Bytes { - fn eq(&self, other: &[u8; N]) -> bool { - self.as_ref() == other - } -} - -impl PartialEq> for Bytes { - fn eq(&self, other: &Vec) -> bool { - self.0 == *other - } -} - -impl Extend for Bytes -where - Vec: Extend, -{ - fn extend>(&mut self, iter: I) { - self.0.extend(iter); - } -} - -#[macro_export] -macro_rules! bytes { - [$($elem:expr),* $(,)?] => { - $crate::bytes::Bytes::from(vec![$($elem),*]) - }; - [$elem:expr; $size:expr] => { - $crate::bytes::Bytes::from(vec![$elem; $size]) - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/full_payload.rs b/espressocrypto/lib/espresso-crypto-helper/src/full_payload.rs deleted file mode 100644 index dba15e03c3..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/full_payload.rs +++ /dev/null @@ -1,8 +0,0 @@ -mod ns_proof; -mod ns_table; -mod payload; - -pub use ns_proof::NsProof; -pub use ns_table::{NsIndex, NsTable}; - -pub use payload::PayloadByteLen; diff --git a/espressocrypto/lib/espresso-crypto-helper/src/full_payload/ns_proof.rs b/espressocrypto/lib/espresso-crypto-helper/src/full_payload/ns_proof.rs deleted file mode 100644 index a263ca935d..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/full_payload/ns_proof.rs +++ /dev/null @@ -1,87 +0,0 @@ -use crate::hotshot_types::{ - vid_scheme, LargeRangeProofType, VidCommitment, VidCommon, VidSchemeType, -}; -use crate::{ - full_payload::{NsIndex, NsTable, PayloadByteLen}, - namespace_payload::NsPayloadOwned, - NamespaceId, Transaction, -}; -use jf_vid::{ - payload_prover::{PayloadProver, Statement}, - VidScheme, -}; -use serde::{Deserialize, Serialize}; - -/// Proof of correctness for namespace payload bytes in a block. -#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] -pub struct NsProof { - ns_index: NsIndex, - ns_payload: NsPayloadOwned, - ns_proof: Option, // `None` if ns_payload is empty -} - -impl NsProof { - /// Verify a [`NsProof`] against a payload commitment. Returns `None` on - /// error or if verification fails. - /// - /// There is no [`NsPayload`](crate::block::namespace_payload::NsPayload) - /// arg because this data is already included in the [`NsProof`]. See - /// [`NsProof::new`] for discussion. - /// - /// If verification is successful then return `(Vec, - /// NamespaceId)` obtained by post-processing the underlying - /// [`NsPayload`](crate::block::namespace_payload::NsPayload). Why? This - /// method might be run by a client in a WASM environment who might be - /// running non-Rust code, in which case the client is unable to perform - /// this post-processing himself. - pub fn verify( - &self, - ns_table: &NsTable, - commit: &VidCommitment, - common: &VidCommon, - ) -> Option<(Vec, NamespaceId)> { - VidSchemeType::is_consistent(commit, common).ok()?; - if !ns_table.in_bounds(&self.ns_index) { - return None; // error: index out of bounds - } - - let range = ns_table - .ns_range(&self.ns_index, &PayloadByteLen::from_vid_common(common)) - .as_block_range(); - - match (&self.ns_proof, range.is_empty()) { - (Some(proof), false) => { - // TODO vid_scheme() arg should be u32 to match get_num_storage_nodes - // https://github.com/EspressoSystems/HotShot/issues/3298 - let vid = vid_scheme( - VidSchemeType::get_num_storage_nodes(common) - .try_into() - .ok()?, // error: failure to convert u32 to usize - ); - - vid.payload_verify( - Statement { - payload_subslice: self.ns_payload.as_bytes_slice(), - range, - commit, - common, - }, - proof, - ) - .ok()? // error: internal to payload_verify() - .ok()?; // verification failure - } - (None, true) => {} // 0-length namespace, nothing to verify - (None, false) => { - return None; - } - (Some(_), true) => { - return None; - } - } - - // verification succeeded, return some data - let ns_id = ns_table.read_ns_id_unchecked(&self.ns_index); - Some((self.ns_payload.export_all_txs(&ns_id), ns_id)) - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/full_payload/ns_table.rs b/espressocrypto/lib/espresso-crypto-helper/src/full_payload/ns_table.rs deleted file mode 100644 index c6fae5ce80..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/full_payload/ns_table.rs +++ /dev/null @@ -1,277 +0,0 @@ -//! Types related to a namespace table. -//! -//! All code that needs to know the binary format of a namespace table is -//! restricted to this file. -//! -//! See [`NsTable`] for a full specification of the binary format of a namespace -//! table. -use crate::{ - full_payload::payload::PayloadByteLen, - namespace_payload::NsPayloadRange, - uint_bytes::{bytes_serde_impl, u32_from_bytes, usize_from_bytes, usize_to_bytes}, - NamespaceId, -}; -use committable::{Commitment, Committable, RawCommitmentBuilder}; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use std::{collections::HashSet, sync::Arc}; - -/// Byte lengths for the different items that could appear in a namespace table. -const NUM_NSS_BYTE_LEN: usize = 4; -const NS_OFFSET_BYTE_LEN: usize = 4; - -// TODO prefer [`NS_ID_BYTE_LEN`] set to `8` because [`NamespaceId`] is a `u64` -// but we need to maintain serialization compatibility. -// https://github.com/EspressoSystems/espresso-sequencer/issues/1574 -const NS_ID_BYTE_LEN: usize = 4; - -/// Raw binary data for a namespace table. -/// -/// Any sequence of bytes is a valid [`NsTable`]. -/// -/// # Binary format of a namespace table -/// -/// Byte lengths for the different items that could appear in a namespace table -/// are specified in local private constants [`NUM_NSS_BYTE_LEN`], -/// [`NS_OFFSET_BYTE_LEN`], [`NS_ID_BYTE_LEN`]. -/// -/// ## Number of entries in the namespace table -/// -/// The first [`NUM_NSS_BYTE_LEN`] bytes of the namespace table indicate the -/// number `n` of entries in the table as a little-endian unsigned integer. If -/// the entire table length is smaller than [`NUM_NSS_BYTE_LEN`] then the -/// missing bytes are zero-padded. -/// -/// The bytes in the namespace table beyond the first [`NUM_NSS_BYTE_LEN`] bytes -/// encode table entries. Each entry consumes exactly [`NS_ID_BYTE_LEN`] `+` -/// [`NS_OFFSET_BYTE_LEN`] bytes. -/// -/// The number `n` could be anything, including a number much larger than the -/// number of entries that could fit in the namespace table. As such, the actual -/// number of entries in the table is defined as the minimum of `n` and the -/// maximum number of whole entries that could fit in the table. -/// -/// See [`Self::in_bounds`] for clarification. -/// -/// ## Namespace table entry -/// -/// ### Namespace ID -/// -/// The first [`NS_ID_BYTE_LEN`] bytes of each table entry indicate the -/// [`NamespaceId`] for this namespace. Any table entry whose [`NamespaceId`] is -/// a duplicate of a previous entry is ignored. A correct count of the number of -/// *unique* (non-ignored) entries is given by `NsTable::iter().count()`. -/// -/// ### Namespace offset -/// -/// The next [`NS_OFFSET_BYTE_LEN`] bytes of each table entry indicate the -/// end-index of a namespace in the block payload bytes -/// [`Payload`](super::payload::Payload). This end-index is a little-endian -/// unsigned integer. -/// -/// # How to deduce a namespace's byte range -/// -/// In order to extract the payload bytes of a single namespace `N` from the -/// block payload one needs both the start- and end-indices for `N`. -/// -/// See [`Self::ns_range`] for clarification. What follows is a description of -/// what's implemented in [`Self::ns_range`]. -/// -/// If `N` occupies the `i`th entry in the namespace table for `i>0` then the -/// start-index for `N` is defined as the end-index of the `(i-1)`th entry in -/// the table. -/// -/// Even if the `(i-1)`the entry would otherwise be ignored (due to a duplicate -/// [`NamespaceId`] or any other reason), that entry's end-index still defines -/// the start-index of `N`. This rule guarantees that both start- and -/// end-indices for any namespace `N` can be read from a constant-size byte -/// range in the namespace table, and it eliminates the need to traverse an -/// unbounded number of previous entries of the namespace table looking for a -/// previous non-ignored entry. -/// -/// The start-index of the 0th entry in the table is implicitly defined to be -/// `0`. -/// -/// The start- and end-indices `(declared_start, declared_end)` declared in the -/// namespace table could be anything. As such, the actual start- and -/// end-indices `(start, end)` are defined so as to ensure that the byte range -/// is well-defined and in-bounds for the block payload: -/// ```ignore -/// end = min(declared_end, block_payload_byte_length) -/// start = min(declared_start, end) -/// ``` -/// -/// In a "honestly-prepared" namespace table the end-index of the final -/// namespace equals the byte length of the block payload. (Otherwise the block -/// payload might have bytes that are not included in any namespace.) -/// -/// It is possible that a namespace table could indicate two distinct namespaces -/// whose byte ranges overlap, though no "honestly-prepared" namespace table -/// would do this. -/// -/// TODO prefer [`NsTable`] to be a newtype like this -/// ```ignore -/// #[repr(transparent)] -/// #[derive(Clone, Debug, Default, Deserialize, Eq, Hash, PartialEq, Serialize)] -/// #[serde(transparent)] -/// pub struct NsTable(#[serde(with = "base64_bytes")] Vec); -/// ``` -/// but we need to maintain serialization compatibility. -/// -#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, PartialEq, Serialize)] -pub struct NsTable { - #[serde(with = "base64_bytes")] - pub bytes: Vec, -} - -impl NsTable { - /// Search the namespace table for the ns_index belonging to `ns_id`. - pub fn find_ns_id(&self, ns_id: &NamespaceId) -> Option { - self.iter() - .find(|index| self.read_ns_id_unchecked(index) == *ns_id) - } - - /// Iterator over all unique namespaces in the namespace table. - pub fn iter(&self) -> impl Iterator + '_ { - NsIter::new(self) - } - - /// Read the namespace id from the `index`th entry from the namespace table. - /// Returns `None` if `index` is out of bounds. - /// - /// TODO I want to restrict visibility to `pub(crate)` or lower but this - /// method is currently used in `nasty-client`. - pub fn read_ns_id(&self, index: &NsIndex) -> Option { - if !self.in_bounds(index) { - None - } else { - Some(self.read_ns_id_unchecked(index)) - } - } - - /// Like [`Self::read_ns_id`] except `index` is not checked. Use [`Self::in_bounds`] as needed. - pub fn read_ns_id_unchecked(&self, index: &NsIndex) -> NamespaceId { - let start = index.0 * (NS_ID_BYTE_LEN + NS_OFFSET_BYTE_LEN) + NUM_NSS_BYTE_LEN; - - // TODO hack to deserialize `NamespaceId` from `NS_ID_BYTE_LEN` bytes - // https://github.com/EspressoSystems/espresso-sequencer/issues/1574 - NamespaceId::from(u32_from_bytes::( - &self.bytes[start..start + NS_ID_BYTE_LEN], - )) - } - - /// Does the `index`th entry exist in the namespace table? - pub fn in_bounds(&self, index: &NsIndex) -> bool { - // The number of entries in the namespace table, including all duplicate - // namespace IDs. - let num_nss_with_duplicates = std::cmp::min( - // Number of namespaces declared in the ns table - self.read_num_nss(), - // Max number of entries that could fit in the namespace table - self.bytes.len().saturating_sub(NUM_NSS_BYTE_LEN) - / NS_ID_BYTE_LEN.saturating_add(NS_OFFSET_BYTE_LEN), - ); - - index.0 < num_nss_with_duplicates - } - - // CRATE-VISIBLE HELPERS START HERE - - /// Read subslice range for the `index`th namespace from the namespace - /// table. - pub fn ns_range(&self, index: &NsIndex, payload_byte_len: &PayloadByteLen) -> NsPayloadRange { - let end = self.read_ns_offset(index).min(payload_byte_len.as_usize()); - let start = if index.0 == 0 { - 0 - } else { - self.read_ns_offset(&NsIndex(index.0 - 1)) - } - .min(end); - NsPayloadRange::new(start, end) - } - - // PRIVATE HELPERS START HERE - - /// Read the number of namespaces declared in the namespace table. This - /// quantity might exceed the number of entries that could fit in the - /// namespace table. - /// - /// For a correct count of the number of unique namespaces in this - /// namespace table use `iter().count()`. - fn read_num_nss(&self) -> usize { - let num_nss_byte_len = NUM_NSS_BYTE_LEN.min(self.bytes.len()); - usize_from_bytes::(&self.bytes[..num_nss_byte_len]) - } - - /// Read the namespace offset from the `index`th entry from the namespace table. - fn read_ns_offset(&self, index: &NsIndex) -> usize { - let start = - index.0 * (NS_ID_BYTE_LEN + NS_OFFSET_BYTE_LEN) + NUM_NSS_BYTE_LEN + NS_ID_BYTE_LEN; - usize_from_bytes::(&self.bytes[start..start + NS_OFFSET_BYTE_LEN]) - } - - pub fn encode(&self) -> Arc<[u8]> { - Arc::from(self.bytes.as_ref()) - } -} - -impl Committable for NsTable { - fn commit(&self) -> Commitment { - RawCommitmentBuilder::new(&Self::tag()) - .var_size_bytes(&self.bytes) - .finalize() - } - - fn tag() -> String { - "NSTABLE".into() - } -} - -/// Index for an entry in a ns table. -#[derive(Clone, Debug, Eq, Hash, PartialEq)] -pub struct NsIndex(usize); -bytes_serde_impl!(NsIndex, to_bytes, [u8; NUM_NSS_BYTE_LEN], from_bytes); - -impl NsIndex { - pub fn to_bytes(&self) -> [u8; NUM_NSS_BYTE_LEN] { - usize_to_bytes::(self.0) - } - fn from_bytes(bytes: &[u8]) -> Self { - Self(usize_from_bytes::(bytes)) - } -} - -/// Return type for [`Payload::ns_iter`]. -pub struct NsIter<'a> { - cur_index: usize, - repeat_nss: HashSet, - ns_table: &'a NsTable, -} - -impl<'a> NsIter<'a> { - pub fn new(ns_table: &'a NsTable) -> Self { - Self { - cur_index: 0, - repeat_nss: HashSet::new(), - ns_table, - } - } -} - -impl<'a> Iterator for NsIter<'a> { - type Item = NsIndex; - - fn next(&mut self) -> Option { - loop { - let candidate_result = NsIndex(self.cur_index); - let ns_id = self.ns_table.read_ns_id(&candidate_result)?; - self.cur_index += 1; - - // skip duplicate namespace IDs - if !self.repeat_nss.insert(ns_id) { - continue; - } - - break Some(candidate_result); - } - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/full_payload/payload.rs b/espressocrypto/lib/espresso-crypto-helper/src/full_payload/payload.rs deleted file mode 100644 index 43080bc60c..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/full_payload/payload.rs +++ /dev/null @@ -1,64 +0,0 @@ -use crate::full_payload::ns_table::NsTable; -use crate::hotshot_types::{VidCommon, VidSchemeType}; -use jf_vid::VidScheme; -use serde::{Deserialize, Serialize}; -use std::fmt::Display; - -/// Raw payload data for an entire block. -/// -/// A block consists of two sequences of arbitrary bytes: -/// - `ns_table`: namespace table -/// - `ns_payloads`: namespace payloads -/// -/// Any sequence of bytes is a valid `ns_table`. Any sequence of bytes is a -/// valid `ns_payloads`. The contents of `ns_table` determine how to interpret -/// `ns_payload`. -/// -/// # Namespace table -/// -/// See [`NsTable`] for the format of a namespace table. -/// -/// # Namespace payloads -/// -/// A concatenation of payload bytes for multiple individual namespaces. -/// Namespace boundaries are dictated by `ns_table`. See [`NsPayload`] for the -/// format of a namespace payload. -#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] -pub struct Payload { - // Concatenated payload bytes for each namespace - #[serde(with = "base64_bytes")] - ns_payloads: Vec, - - ns_table: NsTable, -} - -impl Display for Payload { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{self:#?}") - } -} - -/// Byte length of a block payload, which includes all namespaces but *not* the -/// namespace table. -pub struct PayloadByteLen(usize); - -impl PayloadByteLen { - /// Extract payload byte length from a [`VidCommon`] and construct a new [`Self`] from it. - pub fn from_vid_common(common: &VidCommon) -> Self { - Self(usize::try_from(VidSchemeType::get_payload_byte_len(common)).unwrap()) - } - - /// Is the payload byte length declared in a [`VidCommon`] equal [`Self`]? - pub fn is_consistent(&self, common: &VidCommon) -> Result<(), ()> { - // failure to convert to usize implies that `common` cannot be - // consistent with `self`. - let expected = - usize::try_from(VidSchemeType::get_payload_byte_len(common)).map_err(|_| ())?; - - (self.0 == expected).then_some(()).ok_or(()) - } - - pub fn as_usize(&self) -> usize { - self.0 - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/hotshot_types.rs b/espressocrypto/lib/espresso-crypto-helper/src/hotshot_types.rs deleted file mode 100644 index 5ee3bcfc81..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/hotshot_types.rs +++ /dev/null @@ -1,264 +0,0 @@ -use committable::{Commitment, Committable, RawCommitmentBuilder}; -use std::ops::Range; -use tagged_base64::tagged; - -use ark_bn254::Bn254; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize}; -use digest::OutputSizeUser; -use jf_pcs::{ - prelude::UnivariateUniversalParams, univariate_kzg::UnivariateKzgPCS, - PolynomialCommitmentScheme, -}; -use jf_vid::advz::payload_prover::{LargeRangeProof, SmallRangeProof}; -use jf_vid::{ - advz, - payload_prover::{PayloadProver, Statement}, - precomputable::Precomputable, - VidDisperse, VidResult, VidScheme, -}; -use lazy_static::lazy_static; -use serde::{Deserialize, Serialize}; -use sha2::Sha256; -use typenum::Unsigned; - -/// Private type alias for the EC pairing type parameter for [`Advz`]. -type E = Bn254; -/// Private type alias for the hash type parameter for [`Advz`]. -type H = Sha256; - -type Advz = advz::Advz; - -pub type VidCommitment = ::Commit; -pub type VidCommon = ::Common; -type Sha256Digest = [u8; ::OutputSize::USIZE]; - -#[tagged("BUILDER_COMMITMENT")] -#[derive(Clone, Debug, Hash, PartialEq, Eq, CanonicalDeserialize, CanonicalSerialize)] -/// Commitment that builders use to sign block options. -/// A thin wrapper around a Sha256 digest. -pub struct BuilderCommitment(Sha256Digest); - -impl AsRef for BuilderCommitment { - fn as_ref(&self) -> &Sha256Digest { - &self.0 - } -} - -/// Type-safe wrapper around `u64` so we know the thing we're talking about is a view number. -#[derive( - Copy, - Clone, - Debug, - PartialEq, - Eq, - PartialOrd, - Ord, - Hash, - Serialize, - Deserialize, - CanonicalSerialize, - CanonicalDeserialize, -)] -pub struct ViewNumber(pub u64); - -impl Committable for ViewNumber { - fn commit(&self) -> Commitment { - let builder = RawCommitmentBuilder::new("View Number Commitment"); - builder.u64(self.0).finalize() - } -} - -pub struct VidSchemeType(Advz); - -impl VidScheme for VidSchemeType { - type Commit = ::Commit; - type Share = ::Share; - type Common = ::Common; - - fn commit_only(&mut self, payload: B) -> VidResult - where - B: AsRef<[u8]>, - { - self.0.commit_only(payload) - } - - fn disperse(&mut self, payload: B) -> VidResult> - where - B: AsRef<[u8]>, - { - self.0.disperse(payload).map(vid_disperse_conversion) - } - - fn verify_share( - &self, - share: &Self::Share, - common: &Self::Common, - commit: &Self::Commit, - ) -> VidResult> { - self.0.verify_share(share, common, commit) - } - - fn recover_payload(&self, shares: &[Self::Share], common: &Self::Common) -> VidResult> { - self.0.recover_payload(shares, common) - } - - fn is_consistent(commit: &Self::Commit, common: &Self::Common) -> VidResult<()> { - ::is_consistent(commit, common) - } - - fn get_payload_byte_len(common: &Self::Common) -> u32 { - ::get_payload_byte_len(common) - } - - fn get_num_storage_nodes(common: &Self::Common) -> u32 { - ::get_num_storage_nodes(common) - } - - fn get_multiplicity(common: &Self::Common) -> u32 { - ::get_multiplicity(common) - } -} - -impl PayloadProver for VidSchemeType { - fn payload_proof(&self, payload: B, range: Range) -> VidResult - where - B: AsRef<[u8]>, - { - self.0 - .payload_proof(payload, range) - .map(SmallRangeProofType) - } - - fn payload_verify( - &self, - stmt: Statement<'_, Self>, - proof: &SmallRangeProofType, - ) -> VidResult> { - self.0.payload_verify(stmt_conversion(stmt), &proof.0) - } -} - -impl PayloadProver for VidSchemeType { - fn payload_proof(&self, payload: B, range: Range) -> VidResult - where - B: AsRef<[u8]>, - { - self.0 - .payload_proof(payload, range) - .map(LargeRangeProofType) - } - - fn payload_verify( - &self, - stmt: Statement<'_, Self>, - proof: &LargeRangeProofType, - ) -> VidResult> { - self.0.payload_verify(stmt_conversion(stmt), &proof.0) - } -} - -impl Precomputable for VidSchemeType { - type PrecomputeData = ::PrecomputeData; - - fn commit_only_precompute( - &self, - payload: B, - ) -> VidResult<(Self::Commit, Self::PrecomputeData)> - where - B: AsRef<[u8]>, - { - self.0.commit_only_precompute(payload) - } - - fn disperse_precompute( - &self, - payload: B, - data: &Self::PrecomputeData, - ) -> VidResult> - where - B: AsRef<[u8]>, - { - self.0 - .disperse_precompute(payload, data) - .map(vid_disperse_conversion) - } -} - -lazy_static! { - // Initialize the byte array from JSON content - pub static ref KZG_SRS: UnivariateUniversalParams = { - let json_content = include_str!("../vid_srs.json"); - let s: Vec = serde_json::from_str(json_content).expect("Failed to deserialize"); - UnivariateUniversalParams::::deserialize_uncompressed_unchecked(s.as_slice()) - .unwrap() - }; -} - -#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] -pub struct LargeRangeProofType( - // # Type complexity - // - // Jellyfish's `LargeRangeProof` type has a prime field generic parameter `F`. - // This `F` is determined by the type parameter `E` for `Advz`. - // Jellyfish needs a more ergonomic way for downstream users to refer to this type. - // - // There is a `KzgEval` type alias in jellyfish that helps a little, but it's currently private: - // - // If it were public then we could instead use - // `LargeRangeProof>` - // but that's still pretty crufty. - LargeRangeProof< as PolynomialCommitmentScheme>::Evaluation>, -); - -/// Newtype wrapper for a small payload range proof. -/// -/// Useful for transaction proofs. -#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] -pub struct SmallRangeProofType( - // # Type complexity - // - // Similar to the comments in `LargeRangeProofType`. - SmallRangeProof< as PolynomialCommitmentScheme>::Proof>, -); - -#[must_use] -pub fn vid_scheme(num_storage_nodes: usize) -> VidSchemeType { - // recovery_threshold is currently num_storage_nodes rounded down to a power of two - // TODO recovery_threshold should be a function of the desired erasure code rate - // https://github.com/EspressoSystems/HotShot/issues/2152 - let recovery_threshold = 1 << num_storage_nodes.ilog2(); - - #[allow(clippy::panic)] - let num_storage_nodes = u32::try_from(num_storage_nodes).unwrap_or_else(|err| { - panic!( - "num_storage_nodes {num_storage_nodes} should fit into u32; \ - error: {err}" - ) - }); - - // TODO panic, return `Result`, or make `new` infallible upstream (eg. by panicking)? - #[allow(clippy::panic)] - VidSchemeType( - Advz::new(num_storage_nodes, recovery_threshold, &*KZG_SRS).unwrap_or_else(|err| { - panic!("advz construction failure: (num_storage nodes,recovery_threshold)=({num_storage_nodes},{recovery_threshold}); \ - error: {err}") - }) - ) -} - -fn stmt_conversion(stmt: Statement<'_, VidSchemeType>) -> Statement<'_, Advz> { - Statement { - payload_subslice: stmt.payload_subslice, - range: stmt.range, - commit: stmt.commit, - common: stmt.common, - } -} - -fn vid_disperse_conversion(vid_disperse: VidDisperse) -> VidDisperse { - VidDisperse { - shares: vid_disperse.shares, - common: vid_disperse.common, - commit: vid_disperse.commit, - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/lib.rs b/espressocrypto/lib/espresso-crypto-helper/src/lib.rs index c691e64f1d..14b9cb4673 100644 --- a/espressocrypto/lib/espresso-crypto-helper/src/lib.rs +++ b/espressocrypto/lib/espresso-crypto-helper/src/lib.rs @@ -1,60 +1,19 @@ -mod bytes; -mod full_payload; -mod hotshot_types; -mod namespace_payload; -mod sequencer_data_structures; -mod uint_bytes; -mod utils; -mod v0_3; - -use ark_ff::PrimeField; -use ark_serialize::{CanonicalDeserialize, CanonicalSerialize}; +use ark_ff::{BigInteger, PrimeField}; +use ark_serialize::CanonicalSerialize; use committable::{Commitment, Committable}; +use espresso_types::{ + BlockMerkleCommitment, BlockMerkleTree, Header, NsProof, NsTable, Transaction, +}; use ethers_core::types::U256; -use full_payload::{NsProof, NsTable}; -use hotshot_types::{VidCommitment, VidCommon}; +use hotshot_types::vid::{VidCommitment, VidCommon}; use jf_crhf::CRHF; use jf_merkle_tree::prelude::{ MerkleCommitment, MerkleNode, MerkleProof, MerkleTreeScheme, Sha3Node, }; use jf_rescue::{crhf::VariableLengthRescueCRHF, RescueError}; -use sequencer_data_structures::{ - field_to_u256, BlockMerkleCommitment, BlockMerkleTree, Header, Transaction, -}; -use serde::{Deserialize, Serialize}; use sha2::{Digest, Sha256}; use tagged_base64::TaggedBase64; -#[derive( - Clone, - Copy, - Debug, - PartialEq, - Eq, - Hash, - Default, - CanonicalDeserialize, - CanonicalSerialize, - PartialOrd, - Ord, - Serialize, - Deserialize, -)] -pub struct NamespaceId(u64); - -impl From for u32 { - fn from(value: NamespaceId) -> Self { - value.0 as Self - } -} - -impl From for NamespaceId { - fn from(value: u32) -> Self { - Self(value as u64) - } -} - -// pub type VidScheme = Advz; pub type Proof = Vec, u64, Sha3Node>>; pub type CircuitField = ark_ed_on_bn254::Fq; @@ -80,14 +39,12 @@ pub extern "C" fn verify_merkle_proof_helper( let circuit_block_bytes = unsafe { std::slice::from_raw_parts(circuit_block_ptr, circuit_block_len) }; - let proof_str = std::str::from_utf8(proof_bytes).unwrap(); - let header_str = std::str::from_utf8(header_bytes).unwrap(); let block_comm_str = std::str::from_utf8(block_comm_bytes).unwrap(); let tagged = TaggedBase64::parse(&block_comm_str).unwrap(); let block_comm: BlockMerkleCommitment = tagged.try_into().unwrap(); - let proof: Proof = serde_json::from_str(proof_str).unwrap(); - let header: Header = serde_json::from_str(header_str).unwrap(); + let proof: Proof = serde_json::from_slice(proof_bytes).unwrap(); + let header: Header = serde_json::from_slice(header_bytes).unwrap(); let header_comm: Commitment
= header.commit(); let proof = MerkleProof::new(header.height(), proof.to_vec()); @@ -104,9 +61,6 @@ pub extern "C" fn verify_merkle_proof_helper( let local_block_comm_u256 = field_to_u256(field_bytes); let circuit_block_comm_u256 = U256::from_little_endian(circuit_block_bytes); - //assert!(proved_comm == header_comm); - //assert!(local_block_comm_u256 == circuit_block_comm_u256); - if (proved_comm == header_comm) && (local_block_comm_u256 == circuit_block_comm_u256) { return true; } @@ -140,26 +94,20 @@ pub extern "C" fn verify_namespace_helper( let tx_comm_bytes = unsafe { std::slice::from_raw_parts(tx_comm_ptr, tx_comm_len) }; let common_data_bytes = unsafe { std::slice::from_raw_parts(common_data_ptr, common_data_len) }; - let proof_str = std::str::from_utf8(proof_bytes).unwrap(); let commit_str = std::str::from_utf8(commit_bytes).unwrap(); let txn_comm_str = std::str::from_utf8(tx_comm_bytes).unwrap(); - let common_data_str = std::str::from_utf8(common_data_bytes).unwrap(); - let proof: NsProof = serde_json::from_str(proof_str).unwrap(); - let ns_table: NsTable = NsTable { - bytes: ns_table_bytes.to_vec(), - }; + let proof: NsProof = serde_json::from_slice(proof_bytes).unwrap(); + let ns_table: NsTable = unsafe { std::mem::transmute(ns_table_bytes.to_vec()) }; let tagged = TaggedBase64::parse(&commit_str).unwrap(); let commit: VidCommitment = tagged.try_into().unwrap(); - let vid_common: VidCommon = serde_json::from_str(common_data_str).unwrap(); + let vid_common: VidCommon = serde_json::from_slice(common_data_bytes).unwrap(); let (txns, ns) = proof.verify(&ns_table, &commit, &vid_common).unwrap(); let namespace: u32 = namespace.try_into().unwrap(); let txns_comm = hash_txns(namespace, &txns); - //assert!(ns == namespace.into()); - //assert!(txns_comm == txn_comm_str); if (ns == namespace.into()) && (txns_comm == txn_comm_str) { return true; } @@ -171,7 +119,7 @@ fn hash_txns(namespace: u32, txns: &[Transaction]) -> String { let mut hasher = Sha256::new(); hasher.update(namespace.to_le_bytes()); for txn in txns { - hasher.update(&txn.payload); + hasher.update(txn.payload()); } let hash_result = hasher.finalize(); format!("{:x}", hash_result) @@ -186,3 +134,10 @@ fn hash_bytes_to_field(bytes: &[u8]) -> Result { .collect::>(); Ok(VariableLengthRescueCRHF::<_, 1>::evaluate(elem)?[0]) } + +pub fn field_to_u256(f: F) -> U256 { + if F::MODULUS_BIT_SIZE > 256 { + panic!("Shouldn't convert a >256-bit field to U256"); + } + U256::from_little_endian(&f.into_bigint().to_bytes_le()) +} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/mock_data/header.json b/espressocrypto/lib/espresso-crypto-helper/src/mock_data/header.json deleted file mode 100644 index 78ffc95fbf..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/mock_data/header.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "block_merkle_tree_root": "MERKLE_COMM~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAQA", - "builder_commitment": "BUILDER_COMMITMENT~PfISPEAHYbCXqJ08RqlK74d9aSrtrZkKHdnoX7crymG5", - "builder_signature": { - "r": "0xca39647d5e159ebf62e0efd163ddb2b7946f437948e6c31accdb5360a9f2da17", - "s": "0x610e51dced89ede20e3dcc5e9e26fff580738e785371df53389f2f84dadbdb87", - "v": 28 - }, - "chain_config": { - "chain_config": { - "Left": { - "base_fee": "0", - "chain_id": "35353", - "fee_contract": "0x0000000000000000000000000000000000000000", - "fee_recipient": "0x0000000000000000000000000000000000000000", - "max_block_size": "10240" - } - } - }, - "fee_info": { - "account": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "amount": "0" - }, - "fee_merkle_tree_root": "MERKLE_COMM~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAKA", - "height": 42, - "l1_finalized": { - "hash": "0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", - "number": 123, - "timestamp": "0x456" - }, - "l1_head": 124, - "ns_table": { - "bytes": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" - }, - "payload_commitment": "HASH~AazstQer_ho1SqgGT0r10_Gs0BnjfbPBHJdSO3HHbp29", - "timestamp": 789 -} \ No newline at end of file diff --git a/espressocrypto/lib/espresso-crypto-helper/src/mock_data/test_header.json b/espressocrypto/lib/espresso-crypto-helper/src/mock_data/test_header.json deleted file mode 100644 index 6def47976b..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/mock_data/test_header.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "chain_config": { - "chain_config": { - "Right": "CHAIN_CONFIG~E_LT4O8oRs3FoSL7pVT1iVaN9Y2XAHNYnKmJuHcz2mXE" - } - }, - "height": 1, - "timestamp": 1714012810, - "l1_head": 40, - "l1_finalized": { - "number": 32, - "timestamp": "0x6629c282", - "hash": "0x086c2d889dfc549acffa6ecd53b4df088e770ac87e26e3726d09f849c17db536" - }, - "payload_commitment": "HASH~CcLCyX4_jMHMT_UXK_FsGF8Shvw7pgFj5Og2mjW2y7ao", - "builder_commitment": "BUILDER_COMMITMENT~qfiL_spBvy7D19-v1bjtjhB_Yg1oH84s5xE1A5YgMn42", - "ns_table": { - "bytes": "CgAAABgnAACUCAAAGScAAG4TAAASJwAAcx4AABQnAADQIgAAECcAAOAmAAAWJwAARy8AABMnAABTLwAAEScAALsyAAAXJwAATjoAABonAAAJRQAA" - }, - "block_merkle_tree_root": "MERKLE_COMM~Y9ufYrqN9PnWxV7sGibwrfdNKXkgGzmL2TZDrLZgo1AgAAAAAAAAAAEAAAAAAAAAJA", - "fee_merkle_tree_root": "MERKLE_COMM~bYMmugVZtniEfwFcBGTEbMpBnkPHHWmt8YAW5ygWSKAUAAAAAAAAAAYAAAAAAAAAvQ", - "builder_signature": { - "r": "0x95824a15bb9e854bfbbab2b4ea27c82102078691281b1dc24fb5d63bb2deb663", - "s": "0x4419db237be39bfc44cb37f2f69ed78cd1709fe4b01ec15c0bbd08ddd309d7b8", - "v": 27 - }, - "fee_info": { - "account": "0xdf3e18d64bc6a983f673ab319ccae4f1a57c7097", - "amount": "0" - } -} \ No newline at end of file diff --git a/espressocrypto/lib/espresso-crypto-helper/src/mock_data/test_merkle_path.json b/espressocrypto/lib/espresso-crypto-helper/src/mock_data/test_merkle_path.json deleted file mode 100644 index 5e2bf3a4c2..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/mock_data/test_merkle_path.json +++ /dev/null @@ -1,461 +0,0 @@ -[ - { - "Leaf": { - "value": "FIELD~6VQrizdRaPzfmROuCvnc0QOwBdhcwKY_3EPHynjDyILQ", - "pos": "FIELD~AQAAAAAAAADo", - "elem": "FIELD~RSru5Twf7bIO0OjFSgP51vzmoK0F-8hRzT2PupCj0tMI" - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~xscaz6FruKxsBoKEACvNF1wnTW6V0rH0j29ig-bAbUwd" - } - }, - { - "ForgettenSubtree": { - "value": "FIELD~6VQrizdRaPzfmROuCvnc0QOwBdhcwKY_3EPHynjDyILQ" - } - }, - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~pQJi6QyIJsBp2QjXewKEnmX69AlAUDcJn91qDQOBu0d5" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~xVk0KVx9gGlqJezxTFWJb5VY0W5HR0fGOpU4jA7jCZZK" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~gl-2rVZixvayTCL9oF_JqaGLaa_wE_mbFOqFZjqPCzZA" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~xL0xIv0h68mYL11kWao6rYmSTEWi3fRbyQWHfPyEn_iE" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~h-cXbgHjUsA5UdjCKElfotbH_sFojDsr-Yi1OCZfJqt6" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~5szgmqzQUFqVqv-KMC23Lge1V4VX283P7AL4TzccF7Nj" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~sFf1-LCN8CKAqF1_qiJtg_2C8vUQ4Hsqc234C4114Fcv" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~oSrlsy2v9cJ-JSq2S5C-vFmLLhU65TwQ3NCyfbYdtqT6" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~0peohqKgYojAT6KNF1bBsRNmlygaKQzLaw07j6Z2PMRv" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~z9CXaMo00duLJpu-oy9wRt3E8CO1pous0G8cF9RaK9H7" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~jta1zsZ3wwspHq6kPdlLJnUuq6OZLQXfpVcTBFIwrP33" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~M_1B3DZvnKF-pCIWkA1EPaAJ9fbKvXATbuVKfFaViMUR" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~FvTrLXCDsQsXcSaw0dXXI6IGZvgERzlICbYOrIg9HDc5" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~i5GrTe_LAyQ-l9xC1-Z8PNRVGLQlvtlOXkDPXsC8uPzS" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~hflM-xcou4mbpNssmyi0psXcmLsdKHYbNIsOUwfq-kX9" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~k8zu7RN20jkn1HZhC8rZs4Blg4m4ot2UHYOKPFqVsrmv" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~aVOpFFV-GDvlEMuccVQs58g5OLC1Yh8m6mjRwRVWKZ-i" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~qsrtaYOIFWg45Xm9Gjy8a9OdjIn4lKv3RSN3AtxBsik0" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~7xmzCbMCAbgamlgx05_WjSlxB477ITa-pZb2bL2raPYH" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~SOiYDaqzZK2_F6Gf9lTzhVG_4StGIRSPIBiMFhe-RQG1" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~TSDISEgvVqX6tmEkvDtvH-fYVIPdA7XuQ2MwotMdzArQ" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~lMFy8dCVMzxI1ZW1mzrHRlTw3tMwAbGKROTYwEMLwSkA" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~pgXvTrhjfZeoviD2eaU2V2Fw_ChA2wX8kcQo0957y389" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~FjM7j4P8ceGWUnHI6Yj6HBfJKund6Ydpp9cjoC3j1a8P" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~YK-KU5izKQQesnWJ-e_0BDqlHQRcU_SF7GHF7W0KRK01" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~TClCNKKoFWIqeb0vgib8Ec0b6rZuYspnsfpuss8qRgqA" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~d2r9j_P8ej-NZioHkgplpNr2e8cIWqUUvdTHV5LSimuL" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~7f4ZkitmDas3uutCpjF7KBKWIugwSM9lCfw0UOaIV2er" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~Atx2Q-bXGa4dUQ2z3vf5TDixMjTyHelLEwdCoNu-cXjr" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~YJRraa2xh7phTgoIDWDxN5UVIYRpUlQy_FhhCHrsPKqX" - } - }, - "Empty", - "Empty" - ] - } - }, - { - "Branch": { - "value": "FIELD~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-", - "children": [ - { - "ForgettenSubtree": { - "value": "FIELD~Y-tbmH2qO7bCByGa0XidyQJKeC1-ZYrtnn_AIPEzTnBW" - } - }, - "Empty", - "Empty" - ] - } - } -] \ No newline at end of file diff --git a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload.rs b/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload.rs deleted file mode 100644 index 222cabc3ff..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload.rs +++ /dev/null @@ -1,8 +0,0 @@ -mod iter; -mod ns_payload; -mod ns_payload_range; -mod tx_proof; -mod types; - -pub use ns_payload::NsPayloadOwned; -pub use ns_payload_range::NsPayloadRange; diff --git a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/iter.rs b/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/iter.rs deleted file mode 100644 index 572e2c518d..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/iter.rs +++ /dev/null @@ -1,8 +0,0 @@ -use crate::{full_payload::NsIndex, namespace_payload::types::TxIndex}; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] -pub struct Index { - ns_index: NsIndex, - tx_index: TxIndex, -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/ns_payload.rs b/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/ns_payload.rs deleted file mode 100644 index 77dd322a4e..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/ns_payload.rs +++ /dev/null @@ -1,116 +0,0 @@ -use crate::{ - namespace_payload::types::{ - FromNsPayloadBytes, NsPayloadByteLen, NsPayloadBytesRange, NumTxs, NumTxsRange, - NumTxsUnchecked, TxIndex, TxIter, TxPayloadRange, TxTableEntriesRange, - }, - NamespaceId, Transaction, -}; -use serde::{Deserialize, Serialize}; - -/// Raw binary data for a single namespace's payload. -/// -/// Any sequence of bytes is a valid [`NsPayload`]. -/// -/// See module-level documentation [`types`](super::types) for a full -/// specification of the binary format of a namespace. -pub struct NsPayload([u8]); - -impl NsPayload { - pub fn as_bytes_slice(&self) -> &[u8] { - &self.0 - } - pub fn byte_len(&self) -> NsPayloadByteLen { - NsPayloadByteLen::from_usize(self.0.len()) - } - - /// Read and parse bytes from the ns payload. - /// - /// Arg `range: &R` is convertible into a `Range` via - /// [`NsPayloadBytesRange`]. The payload bytes are parsed into a `R::Output` - /// via [`FromNsPayloadBytes`]. - pub fn read<'a, R>(&'a self, range: &R) -> R::Output - where - R: NsPayloadBytesRange<'a>, - { - >::from_payload_bytes(&self.0[range.ns_payload_range()]) - } - - /// Return all transactions in this namespace. The namespace ID for each - /// returned [`Transaction`] is set to `ns_id`. - pub fn export_all_txs(&self, ns_id: &NamespaceId) -> Vec { - let num_txs = self.read_num_txs(); - self.iter_from_num_txs(&num_txs) - .map(|i| self.tx_from_num_txs(ns_id, &i, &num_txs)) - .collect() - } - - /// Private helper. (Could be pub if desired.) - fn read_num_txs(&self) -> NumTxsUnchecked { - self.read(&NumTxsRange::new(&self.byte_len())) - } - - /// Private helper - fn iter_from_num_txs(&self, num_txs: &NumTxsUnchecked) -> TxIter { - let num_txs = NumTxs::new(num_txs, &self.byte_len()); - TxIter::new(&num_txs) - } - - /// Private helper - fn tx_from_num_txs( - &self, - ns_id: &NamespaceId, - index: &TxIndex, - num_txs_unchecked: &NumTxsUnchecked, - ) -> Transaction { - let tx_table_entries = self.read(&TxTableEntriesRange::new(index)); - let tx_range = TxPayloadRange::new(num_txs_unchecked, &tx_table_entries, &self.byte_len()); - - // TODO don't copy the tx bytes into the return value - // https://github.com/EspressoSystems/hotshot-query-service/issues/267 - let tx_payload = self.read(&tx_range).to_payload_bytes().to_vec(); - Transaction::new(*ns_id, tx_payload) - } -} - -#[repr(transparent)] -#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] -#[serde(transparent)] -pub struct NsPayloadOwned(#[serde(with = "base64_bytes")] Vec); - -/// Crazy boilerplate code to make it so that [`NsPayloadOwned`] is to -/// [`NsPayload`] as [`Vec`] is to `[T]`. See [How can I create newtypes for -/// an unsized type and its owned counterpart (like `str` and `String`) in safe -/// Rust? - Stack Overflow](https://stackoverflow.com/q/64977525) -mod ns_payload_owned { - use super::{NsPayload, NsPayloadOwned}; - use std::borrow::Borrow; - use std::ops::Deref; - - impl NsPayload { - // pub(super) because I want it visible everywhere in this file but I - // also want this boilerplate code quarrantined in `ns_payload_owned`. - pub(super) fn new_private(p: &[u8]) -> &NsPayload { - unsafe { &*(p as *const [u8] as *const NsPayload) } - } - } - - impl Deref for NsPayloadOwned { - type Target = NsPayload; - fn deref(&self) -> &NsPayload { - NsPayload::new_private(&self.0) - } - } - - impl Borrow for NsPayloadOwned { - fn borrow(&self) -> &NsPayload { - self.deref() - } - } - - impl ToOwned for NsPayload { - type Owned = NsPayloadOwned; - fn to_owned(&self) -> NsPayloadOwned { - NsPayloadOwned(self.0.to_owned()) - } - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/ns_payload_range.rs b/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/ns_payload_range.rs deleted file mode 100644 index 3846223839..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/ns_payload_range.rs +++ /dev/null @@ -1,34 +0,0 @@ -use super::types::{NsPayloadByteLen, NsPayloadBytesRange}; -use std::ops::Range; - -/// Index range for a namespace payload inside a block payload. -#[derive(Clone, Debug, Eq, Hash, PartialEq)] -pub struct NsPayloadRange(Range); - -impl NsPayloadRange { - /// TODO restrict visibility? - pub fn new(start: usize, end: usize) -> Self { - Self(start..end) - } - - /// Access the underlying index range for this namespace inside a block - /// payload. - pub fn as_block_range(&self) -> Range { - self.0.clone() - } - - /// Return the byte length of this namespace. - pub fn byte_len(&self) -> NsPayloadByteLen { - NsPayloadByteLen::from_usize(self.0.len()) - } - - /// Convert a [`NsPayloadBytesRange`] into a range that's relative to the - /// entire block payload. - pub fn block_range<'a, R>(&self, range: &R) -> Range - where - R: NsPayloadBytesRange<'a>, - { - let range = range.ns_payload_range(); - range.start + self.0.start..range.end + self.0.start - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/tx_proof.rs b/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/tx_proof.rs deleted file mode 100644 index 5c066f8e21..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/tx_proof.rs +++ /dev/null @@ -1,24 +0,0 @@ -use crate::hotshot_types::SmallRangeProofType; -use crate::namespace_payload::types::{NumTxsUnchecked, TxIndex, TxTableEntries}; -use serde::{Deserialize, Serialize}; - -/// Proof of correctness for transaction bytes in a block. -#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] -pub struct TxProof { - // Naming conventions for this struct's fields: - // - `payload_x`: bytes from the payload - // - `payload_proof_x`: a proof of those bytes from the payload - tx_index: TxIndex, - - // Number of txs declared in the tx table - payload_num_txs: NumTxsUnchecked, - payload_proof_num_txs: SmallRangeProofType, - - // Tx table entries for this tx - payload_tx_table_entries: TxTableEntries, - payload_proof_tx_table_entries: SmallRangeProofType, - - // This tx's payload bytes. - // `None` if this tx has zero length. - payload_proof_tx: Option, -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/types.rs b/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/types.rs deleted file mode 100644 index 8c21e02759..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/namespace_payload/types.rs +++ /dev/null @@ -1,382 +0,0 @@ -//! Types related to a namespace payload and its transaction table. -//! -//! All code that needs to know the binary format of a namespace payload and its -//! transaction table is restricted to this file. -//! -//! There are many newtypes in this file to facilitate transaction proofs. -//! -//! # Binary format of a namespace payload -//! -//! Any sequence of bytes is a valid [`NsPayload`]. -//! -//! A namespace payload consists of two concatenated byte sequences: -//! - `tx_table`: transaction table -//! - `tx_payloads`: transaction payloads -//! -//! # Transaction table -//! -//! Byte lengths for the different items that could appear in a `tx_table` are -//! specified in local private constants [`NUM_TXS_BYTE_LEN`], -//! [`TX_OFFSET_BYTE_LEN`]. -//! -//! ## Number of entries in the transaction table -//! -//! The first [`NUM_TXS_BYTE_LEN`] bytes of the `tx_table` indicate the number -//! `n` of entries in the table as a little-endian unsigned integer. If the -//! entire namespace payload byte length is smaller than [`NUM_TXS_BYTE_LEN`] -//! then the missing bytes are zero-padded. -//! -//! The bytes in the namespace payload beyond the first [`NUM_TXS_BYTE_LEN`] -//! bytes encode entries in the `tx_table`. Each entry consumes exactly -//! [`TX_OFFSET_BYTE_LEN`] bytes. -//! -//! The number `n` could be anything, including a number much larger than the -//! number of entries that could fit in the namespace payload. As such, the -//! actual number of entries in the `tx_table` is defined as the minimum of `n` -//! and the maximum number of whole `tx_table` entries that could fit in the -//! namespace payload. -//! -//! The `tx_payloads` consist of any bytes in the namespace payload beyond the -//! `tx_table`. -//! -//! ## Transaction table entry -//! -//! Each entry in the `tx_table` is exactly [`TX_OFFSET_BYTE_LEN`] bytes. These -//! bytes indicate the end-index of a transaction in the namespace payload -//! bytes. This end-index is a little-endian unsigned integer. -//! -//! This offset is relative to the end of the `tx_table` within the current -//! namespace. -//! -//! ### Example -//! -//! Suppose a block payload has 3000 bytes and 3 namespaces of 1000 bytes each. -//! Suppose the `tx_table` for final namespace in the block has byte length 100, -//! and suppose an entry in that `tx_table` indicates an end-index of `10`. The -//! actual end-index of that transaction relative to the current namespace is -//! `110`: `10` bytes for the offset plus `100` bytes for the `tx_table`. -//! Relative to the entire block payload, the end-index of that transaction is -//! `2110`: `10` bytes for the offset plus `100` bytes for the `tx_table` plus -//! `2000` bytes for this namespace. -//! -//! # How to deduce a transaction's byte range -//! -//! In order to extract the payload bytes of a single transaction `T` from the -//! namespace payload one needs both the start- and end-indices for `T`. -//! -//! See [`TxPayloadRange::new`] for clarification. What follows is a description -//! of what's implemented in [`TxPayloadRange::new`]. -//! -//! If `T` occupies the `i`th entry in the `tx_table` for `i>0` then the -//! start-index for `T` is defined as the end-index of the `(i-1)`th entry in -//! the table. -//! -//! Thus, both start- and end-indices for any transaction `T` can be read from a -//! contiguous, constant-size byte range in the `tx_table`. This property -//! facilitates transaction proofs. -//! -//! The start-index of the 0th entry in the table is implicitly defined to be -//! `0`. -//! -//! The start- and end-indices `(declared_start, declared_end)` declared in the -//! `tx_table` could be anything. As such, the actual start- and end-indices -//! `(start, end)` are defined so as to ensure that the byte range is -//! well-defined and in-bounds for the namespace payload: -//! ```ignore -//! end = min(declared_end, namespace_payload_byte_length) -//! start = min(declared_start, end) -//! ``` -//! -//! To get the byte range for `T` relative to the current namespace, the above -//! range is translated by the byte length of the `tx_table` *as declared in the -//! `tx_table` itself*, suitably truncated to fit within the current namespace. -//! -//! In particular, if the `tx_table` declares a huge number `n` of entries that -//! cannot fit into the namespace payload then all transactions in this -//! namespace have a zero-length byte range whose start- and end-indices are -//! both `namespace_payload_byte_length`. -//! -//! In a "honestly-prepared" `tx_table` the end-index of the final transaction -//! equals the byte length of the namespace payload minus the byte length of the -//! `tx_table`. (Otherwise the namespace payload might have bytes that are not -//! included in any transaction.) -//! -//! It is possible that a `tx_table` table could indicate two distinct -//! transactions whose byte ranges overlap, though no "honestly-prepared" -//! `tx_table` would do this. -use crate::uint_bytes::{bytes_serde_impl, usize_from_bytes, usize_to_bytes}; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use std::ops::Range; - -/// Byte lengths for the different items that could appear in a tx table. -const NUM_TXS_BYTE_LEN: usize = 4; -const TX_OFFSET_BYTE_LEN: usize = 4; - -/// Data that can be deserialized from a subslice of namespace payload bytes. -/// -/// Companion trait for [`NsPayloadBytesRange`], which specifies the subslice of -/// namespace payload bytes to read. -pub trait FromNsPayloadBytes<'a> { - /// Deserialize `Self` from namespace payload bytes. - fn from_payload_bytes(bytes: &'a [u8]) -> Self; -} - -/// Specifies a subslice of namespace payload bytes to read. -/// -/// Companion trait for [`FromNsPayloadBytes`], which holds data that can be -/// deserialized from that subslice of bytes. -pub trait NsPayloadBytesRange<'a> { - type Output: FromNsPayloadBytes<'a>; - - /// Range relative to this ns payload - fn ns_payload_range(&self) -> Range; -} - -/// Number of txs in a namespace. -/// -/// Like [`NumTxsUnchecked`] but checked against a [`NsPayloadByteLen`]. -pub struct NumTxs(usize); - -impl NumTxs { - /// Returns the minimum of: - /// - `num_txs` - /// - The maximum number of tx table entries that could fit in a namespace - /// whose byte length is `byte_len`. - pub fn new(num_txs: &NumTxsUnchecked, byte_len: &NsPayloadByteLen) -> Self { - Self(std::cmp::min( - // Number of txs declared in the tx table - num_txs.0, - // Max number of tx table entries that could fit in the namespace payload - byte_len.0.saturating_sub(NUM_TXS_BYTE_LEN) / TX_OFFSET_BYTE_LEN, - )) - } -} - -/// Byte length of a namespace payload. -pub struct NsPayloadByteLen(usize); - -impl NsPayloadByteLen { - // TODO restrict visibility? - pub fn from_usize(n: usize) -> Self { - Self(n) - } -} - -/// The part of a tx table that declares the number of txs in the payload. -/// -/// "Unchecked" because this quantity might exceed the number of tx table -/// entries that could fit into the namespace that contains it. -/// -/// Use [`NumTxs`] for the actual number of txs in this namespace. -#[derive(Clone, Debug, Eq, PartialEq)] -pub struct NumTxsUnchecked(usize); -bytes_serde_impl!( - NumTxsUnchecked, - to_payload_bytes, - [u8; NUM_TXS_BYTE_LEN], - from_payload_bytes -); - -impl NumTxsUnchecked { - pub fn to_payload_bytes(&self) -> [u8; NUM_TXS_BYTE_LEN] { - usize_to_bytes::(self.0) - } -} - -impl FromNsPayloadBytes<'_> for NumTxsUnchecked { - fn from_payload_bytes(bytes: &[u8]) -> Self { - Self(usize_from_bytes::(bytes)) - } -} - -/// Byte range for the part of a tx table that declares the number of txs in the -/// payload. -pub struct NumTxsRange(Range); - -impl NumTxsRange { - pub fn new(byte_len: &NsPayloadByteLen) -> Self { - Self(0..NUM_TXS_BYTE_LEN.min(byte_len.0)) - } -} - -impl NsPayloadBytesRange<'_> for NumTxsRange { - type Output = NumTxsUnchecked; - - fn ns_payload_range(&self) -> Range { - self.0.clone() - } -} - -/// Entries from a tx table in a namespace for use in a transaction proof. -/// -/// Contains either one or two entries according to whether it was derived from -/// the first transaction in the namespace. -#[derive(Clone, Debug, Eq, PartialEq)] -pub struct TxTableEntries { - cur: usize, - prev: Option, // `None` if derived from the first transaction -} - -// This serde impl uses Vec. We could save space by using an array of -// length `TWO_ENTRIES_BYTE_LEN`, but then we need a way to distinguish -// `prev=Some(0)` from `prev=None`. -bytes_serde_impl!( - TxTableEntries, - to_payload_bytes, - Vec, - from_payload_bytes -); - -impl TxTableEntries { - const TWO_ENTRIES_BYTE_LEN: usize = 2 * TX_OFFSET_BYTE_LEN; - - pub fn to_payload_bytes(&self) -> Vec { - let mut bytes = Vec::with_capacity(Self::TWO_ENTRIES_BYTE_LEN); - if let Some(prev) = self.prev { - bytes.extend(usize_to_bytes::(prev)); - } - bytes.extend(usize_to_bytes::(self.cur)); - bytes - } -} - -impl FromNsPayloadBytes<'_> for TxTableEntries { - fn from_payload_bytes(bytes: &[u8]) -> Self { - match bytes.len() { - TX_OFFSET_BYTE_LEN => Self { - cur: usize_from_bytes::(bytes), - prev: None, - }, - Self::TWO_ENTRIES_BYTE_LEN => Self { - cur: usize_from_bytes::(&bytes[TX_OFFSET_BYTE_LEN..]), - prev: Some(usize_from_bytes::( - &bytes[..TX_OFFSET_BYTE_LEN], - )), - }, - len => panic!( - "unexpected bytes len {} should be either {} or {}", - len, - TX_OFFSET_BYTE_LEN, - Self::TWO_ENTRIES_BYTE_LEN - ), - } - } -} - -/// Byte range for entries from a tx table for use in a transaction proof. -/// -/// This range covers either one or two entries from a tx table according to -/// whether it was derived from the first transaction in the namespace. -pub struct TxTableEntriesRange(Range); - -impl TxTableEntriesRange { - pub fn new(index: &TxIndex) -> Self { - let start = if index.0 == 0 { - // Special case: the desired range includes only one entry from - // the tx table: the first entry. This entry starts immediately - // following the bytes that encode the tx table length. - NUM_TXS_BYTE_LEN - } else { - // The desired range starts at the beginning of the previous tx - // table entry. - (index.0 - 1) - .saturating_mul(TX_OFFSET_BYTE_LEN) - .saturating_add(NUM_TXS_BYTE_LEN) - }; - // The desired range ends at the end of this transaction's tx table entry - let end = index - .0 - .saturating_add(1) - .saturating_mul(TX_OFFSET_BYTE_LEN) - .saturating_add(NUM_TXS_BYTE_LEN); - Self(start..end) - } -} - -impl NsPayloadBytesRange<'_> for TxTableEntriesRange { - type Output = TxTableEntries; - - fn ns_payload_range(&self) -> Range { - self.0.clone() - } -} - -/// A transaction's payload data. -pub struct TxPayload<'a>(&'a [u8]); - -impl<'a> TxPayload<'a> { - pub fn to_payload_bytes(&self) -> &'a [u8] { - self.0 - } -} - -impl<'a> FromNsPayloadBytes<'a> for TxPayload<'a> { - fn from_payload_bytes(bytes: &'a [u8]) -> Self { - Self(bytes) - } -} - -/// Byte range for a transaction's payload data. -pub struct TxPayloadRange(Range); - -impl TxPayloadRange { - pub fn new( - num_txs: &NumTxsUnchecked, - tx_table_entries: &TxTableEntries, - byte_len: &NsPayloadByteLen, - ) -> Self { - let tx_table_byte_len = num_txs - .0 - .saturating_mul(TX_OFFSET_BYTE_LEN) - .saturating_add(NUM_TXS_BYTE_LEN); - let end = tx_table_entries - .cur - .saturating_add(tx_table_byte_len) - .min(byte_len.0); - let start = tx_table_entries - .prev - .unwrap_or(0) - .saturating_add(tx_table_byte_len) - .min(end); - Self(start..end) - } -} - -impl<'a> NsPayloadBytesRange<'a> for TxPayloadRange { - type Output = TxPayload<'a>; - - fn ns_payload_range(&self) -> Range { - self.0.clone() - } -} - -/// Index for an entry in a tx table. -#[derive(Clone, Debug, Eq, Hash, PartialEq)] -pub struct TxIndex(usize); -bytes_serde_impl!(TxIndex, to_bytes, [u8; NUM_TXS_BYTE_LEN], from_bytes); - -impl TxIndex { - pub fn to_bytes(&self) -> [u8; NUM_TXS_BYTE_LEN] { - usize_to_bytes::(self.0) - } - fn from_bytes(bytes: &[u8]) -> Self { - Self(usize_from_bytes::(bytes)) - } -} - -pub struct TxIter(Range); - -impl TxIter { - pub fn new(num_txs: &NumTxs) -> Self { - Self(0..num_txs.0) - } -} - -// Simple `impl Iterator` delegates to `Range`. -impl Iterator for TxIter { - type Item = TxIndex; - - fn next(&mut self) -> Option { - self.0.next().map(TxIndex) - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/sequencer_data_structures.rs b/espressocrypto/lib/espresso-crypto-helper/src/sequencer_data_structures.rs deleted file mode 100644 index 19ed706eb5..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/sequencer_data_structures.rs +++ /dev/null @@ -1,797 +0,0 @@ -// TODO import from sequencer: https://github.com/EspressoSystems/nitro-espresso-integration/issues/87 -// This module is essentially copy and pasted VID logic from the sequencer repo. It is an unfortunate workaround -// until the VID portion of the sequencer repo is WASM-compatible. -use ark_ff::{BigInteger, PrimeField}; -use ark_serialize::{ - CanonicalDeserialize, CanonicalSerialize, Compress, Read, SerializationError, Valid, Validate, -}; -use bytesize::ByteSize; -use committable::{Commitment, Committable, RawCommitmentBuilder}; -use derive_more::Deref; -use derive_more::{Add, Display, From, Into, Sub}; -use digest::OutputSizeUser; -use either::Either; -use ethers_core::{ - types::{Address, Signature, H256, U256}, - utils::{parse_units, ParseUnits}, -}; -use jf_merkle_tree::{ - prelude::{LightWeightSHA3MerkleTree, Sha3Digest, Sha3Node}, - universal_merkle_tree::UniversalMerkleTree, - MerkleTreeScheme, ToTraversalPath, -}; -use num_traits::PrimInt; -use serde::Serializer; -use serde::{ - de::{self, MapAccess, SeqAccess, Visitor}, - Deserialize, Deserializer, Serialize, -}; -use serde_json::{Map, Value}; -use std::{default::Default, fmt, str::FromStr}; -use tagged_base64::tagged; -use trait_set::trait_set; -use typenum::Unsigned; - -use crate::v0_3; -use crate::{full_payload::NsTable, hotshot_types::VidCommitment}; -use crate::{ - utils::{impl_serde_from_string_or_integer, Err, FromStringOrInteger}, - NamespaceId, -}; - -trait_set! { - pub trait TableWordTraits = CanonicalSerialize - + CanonicalDeserialize - + TryFrom - + TryInto - + Default - + PrimInt - + std::marker::Sync; - - // Note: this trait is not used yet as for now the Payload structs are only parametrized with the TableWord parameter. - pub trait OffsetTraits = CanonicalSerialize - + CanonicalDeserialize - + TryFrom - + TryInto - + Default - + std::marker::Sync; - - // Note: this trait is not used yet as for now the Payload structs are only parametrized with the TableWord parameter. - pub trait NsIdTraits =CanonicalSerialize + CanonicalDeserialize + Default + std::marker::Sync; -} - -pub struct Transaction { - pub _namespace: NamespaceId, - pub payload: Vec, -} - -impl Transaction { - pub fn new(namespace: NamespaceId, payload: Vec) -> Self { - Self { - _namespace: namespace, - payload, - } - } -} - -#[derive(Default, Hash, Copy, Clone, Debug, PartialEq, Eq, From, Into, Display)] -#[display(fmt = "{_0}")] - -pub struct ChainId(U256); - -impl From for ChainId { - fn from(id: u64) -> Self { - Self(id.into()) - } -} - -impl FromStringOrInteger for ChainId { - type Binary = U256; - type Integer = u64; - - fn from_binary(b: Self::Binary) -> Result { - Ok(Self(b)) - } - - fn from_integer(i: Self::Integer) -> Result { - Ok(i.into()) - } - - fn from_string(s: String) -> Result { - if s.starts_with("0x") { - Ok(Self(U256::from_str(&s).unwrap())) - } else { - Ok(Self(U256::from_dec_str(&s).unwrap())) - } - } - - fn to_binary(&self) -> Result { - Ok(self.0) - } - - fn to_string(&self) -> Result { - Ok(format!("{self}")) - } -} - -macro_rules! impl_to_fixed_bytes { - ($struct_name:ident, $type:ty) => { - impl $struct_name { - pub(crate) fn to_fixed_bytes(self) -> [u8; core::mem::size_of::<$type>()] { - let mut bytes = [0u8; core::mem::size_of::<$type>()]; - self.0.to_little_endian(&mut bytes); - bytes - } - } - }; -} - -impl_serde_from_string_or_integer!(ChainId); -impl_to_fixed_bytes!(ChainId, U256); - -impl From for ChainId { - fn from(id: u16) -> Self { - Self(id.into()) - } -} - -#[derive(Hash, Copy, Clone, Debug, Default, Display, PartialEq, Eq, From, Into, Deref)] -#[display(fmt = "{_0}")] -pub struct BlockSize(u64); - -impl_serde_from_string_or_integer!(BlockSize); - -impl FromStringOrInteger for BlockSize { - type Binary = u64; - type Integer = u64; - - fn from_binary(b: Self::Binary) -> Result { - Ok(Self(b)) - } - - fn from_integer(i: Self::Integer) -> Result { - Ok(Self(i)) - } - - fn from_string(s: String) -> Result { - Ok(BlockSize(s.parse::().unwrap().0)) - } - - fn to_binary(&self) -> Result { - Ok(self.0) - } - - fn to_string(&self) -> Result { - Ok(format!("{self}")) - } -} - -/// Global variables for an Espresso blockchain. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub struct ChainConfig { - /// Espresso chain ID - chain_id: ChainId, - /// Maximum size in bytes of a block - max_block_size: BlockSize, - /// Minimum fee in WEI per byte of payload - base_fee: FeeAmount, - fee_contract: Option
, - fee_recipient: FeeAccount, -} - -impl Committable for ChainConfig { - fn tag() -> String { - "CHAIN_CONFIG".to_string() - } - - fn commit(&self) -> Commitment { - let comm = committable::RawCommitmentBuilder::new(&Self::tag()) - .fixed_size_field("chain_id", &self.chain_id.to_fixed_bytes()) - .u64_field("max_block_size", self.max_block_size.0) - .fixed_size_field("base_fee", &self.base_fee.to_fixed_bytes()) - .fixed_size_field("fee_recipient", &self.fee_recipient.to_fixed_bytes()); - let comm = if let Some(addr) = self.fee_contract { - comm.u64_field("fee_contract", 1).fixed_size_bytes(&addr.0) - } else { - comm.u64_field("fee_contract", 0) - }; - comm.finalize() - } -} - -#[derive(Clone, Debug, Copy, PartialEq, Deserialize, Serialize, Eq, Hash)] -pub struct ResolvableChainConfig { - chain_config: Either>, -} - -impl ResolvableChainConfig { - pub fn commit(&self) -> Commitment { - match self.chain_config { - Either::Left(config) => config.commit(), - Either::Right(commitment) => commitment, - } - } - pub fn resolve(self) -> Option { - match self.chain_config { - Either::Left(config) => Some(config), - Either::Right(_) => None, - } - } -} - -impl From> for ResolvableChainConfig { - fn from(value: Commitment) -> Self { - Self { - chain_config: Either::Right(value), - } - } -} - -impl From for ResolvableChainConfig { - fn from(value: ChainConfig) -> Self { - Self { - chain_config: Either::Left(value), - } - } -} - -pub type BlockMerkleTree = LightWeightSHA3MerkleTree>; -pub type BlockMerkleCommitment = ::Commitment; - -#[tagged("BUILDER_COMMITMENT")] -#[derive(Clone, Debug, Hash, PartialEq, Eq, CanonicalSerialize, CanonicalDeserialize)] -/// Commitment that builders use to sign block options. -/// A thin wrapper around a Sha256 digest. -pub struct BuilderCommitment(Sha256Digest); - -impl AsRef for BuilderCommitment { - fn as_ref(&self) -> &Sha256Digest { - &self.0 - } -} - -pub enum Header { - V1(Header0_1), - V2(Header0_1), - V3(v0_3::Header), -} - -impl Header { - pub fn height(&self) -> u64 { - match self { - Header::V1(header0_1) => header0_1.height, - Header::V2(header0_1) => header0_1.height, - Header::V3(header) => header.height, - } - } -} - -impl<'de> Deserialize<'de> for Header { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - struct HeaderVisitor; - - impl<'de> Visitor<'de> for HeaderVisitor { - type Value = Header; - - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("Header") - } - - fn visit_seq(self, mut seq: V) -> Result - where - V: SeqAccess<'de>, - { - let chain_config_or_version: EitherOrVersion = seq - .next_element()? - .ok_or_else(|| de::Error::missing_field("chain_config"))?; - - match chain_config_or_version { - // For v0.1, the first field in the sequence of fields is the first field of the struct, so we call a function to get the rest of - // the fields from the sequence and pack them into the struct. - EitherOrVersion::Left(cfg) => Ok(Header::V1( - Header0_1::deserialize_with_chain_config(cfg.into(), seq)?, - )), - EitherOrVersion::Right(commit) => Ok(Header::V1( - Header0_1::deserialize_with_chain_config(commit.into(), seq)?, - )), - // For all versions > 0.1, the first "field" is not actually part of the `Header` struct. - // We just delegate directly to the derived deserialization impl for the appropriate version. - EitherOrVersion::Version(Version { major: 0, minor: 2 }) => Ok(Header::V2( - seq.next_element()? - .ok_or_else(|| de::Error::missing_field("fields"))?, - )), - EitherOrVersion::Version(Version { major: 0, minor: 3 }) => Ok(Header::V3( - seq.next_element()? - .ok_or_else(|| de::Error::missing_field("fields"))?, - )), - EitherOrVersion::Version(v) => { - Err(serde::de::Error::custom(format!("invalid version {v:?}"))) - } - } - } - - fn visit_map(self, mut map: V) -> Result - where - V: MapAccess<'de>, - { - // insert all the fields in the serde_map as the map may have out of order fields. - let mut serde_map: Map = Map::new(); - - while let Some(key) = map.next_key::()? { - serde_map.insert(key.trim().to_owned(), map.next_value()?); - } - - if let Some(v) = serde_map.get("version") { - let fields = serde_map - .get("fields") - .ok_or_else(|| de::Error::missing_field("fields"))?; - - let version = serde_json::from_value::(v.clone()) - .map_err(de::Error::custom)?; - let result = match version { - EitherOrVersion::Version(Version { major: 0, minor: 2 }) => Ok(Header::V2( - serde_json::from_value(fields.clone()).map_err(de::Error::custom)?, - )), - EitherOrVersion::Version(Version { major: 0, minor: 3 }) => Ok(Header::V3( - serde_json::from_value(fields.clone()).map_err(de::Error::custom)?, - )), - EitherOrVersion::Version(v) => { - Err(de::Error::custom(format!("invalid version {v:?}"))) - } - chain_config => Err(de::Error::custom(format!( - "expected version, found chain_config {chain_config:?}" - ))), - }; - return result; - } - - Ok(Header::V1( - serde_json::from_value(serde_map.into()).map_err(de::Error::custom)?, - )) - } - } - - // List of all possible fields of all versions of the `Header`. - // serde's `deserialize_struct` works by deserializing to a struct with a specific list of fields. - // The length of the fields list we provide is always going to be greater than the length of the target struct. - // In our case, we are deserializing to either a V1 Header or a VersionedHeader for versions > 0.1. - // We use serde_json and bincode serialization in the sequencer. - // Fortunately, serde_json ignores fields parameter and only cares about our Visitor implementation. - // - https://docs.rs/serde_json/1.0.120/serde_json/struct.Deserializer.html#method.deserialize_struct - // Bincode uses the length of the fields list, but the bincode deserialization only cares that the length of the fields - // is an upper bound of the target struct's fields length. - // - https://docs.rs/bincode/1.3.3/src/bincode/de/mod.rs.html#313 - // This works because the bincode deserializer only consumes the next field when `next_element` is called, - // and our visitor calls it the correct number of times. - // This would, however, break if the bincode deserializer implementation required an exact match of the field's length, - // consuming one element for each field. - let fields: &[&str] = &[ - "fields", - "chain_config", - "version", - "height", - "timestamp", - "l1_head", - "l1_finalized", - "payload_commitment", - "builder_commitment", - "ns_table", - "block_merkle_tree_root", - "fee_merkle_tree_root", - "fee_info", - "builder_signature", - ]; - - deserializer.deserialize_struct("Header", fields, HeaderVisitor) - } -} - -impl Committable for Header { - fn commit(&self) -> Commitment { - match self { - Self::V1(header) => header.commit(), - Self::V2(fields) => RawCommitmentBuilder::new(&Self::tag()) - .u64_field("version_major", 0) - .u64_field("version_minor", 2) - .field("fields", fields.commit()) - .finalize(), - Self::V3(fields) => RawCommitmentBuilder::new(&Self::tag()) - .u64_field("version_major", 0) - .u64_field("version_minor", 3) - .field("fields", fields.commit()) - .finalize(), - } - } - - fn tag() -> String { - // We use the tag "BLOCK" since blocks are identified by the hash of their header. This will - // thus be more intuitive to users than "HEADER". - "BLOCK".into() - } -} - -impl Serialize for Header { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - match self { - Self::V1(header) => header.serialize(serializer), - Self::V2(fields) => VersionedHeader { - version: EitherOrVersion::Version(Version { major: 0, minor: 2 }), - fields: fields.clone(), - } - .serialize(serializer), - Self::V3(fields) => VersionedHeader { - version: EitherOrVersion::Version(Version { major: 0, minor: 3 }), - fields: fields.clone(), - } - .serialize(serializer), - } - } -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct VersionedHeader { - pub(crate) version: EitherOrVersion, - pub(crate) fields: Fields, -} - -#[derive(Deserialize, Serialize, Debug)] -pub enum EitherOrVersion { - Left(ChainConfig), - Right(Commitment), - Version(Version), -} - -// Header values -#[derive(Clone, Debug, Deserialize, Serialize, Hash, PartialEq, Eq)] -pub struct Header0_1 { - pub chain_config: ResolvableChainConfig, - pub height: u64, - pub timestamp: u64, - pub l1_head: u64, - pub l1_finalized: Option, - pub payload_commitment: VidCommitment, - pub builder_commitment: BuilderCommitment, - pub ns_table: NsTable, - pub block_merkle_tree_root: BlockMerkleCommitment, - pub fee_merkle_tree_root: FeeMerkleCommitment, - pub builder_signature: Option, - pub fee_info: FeeInfo, -} - -impl Header0_1 { - fn commit(&self) -> Commitment
{ - let mut bmt_bytes = vec![]; - self.block_merkle_tree_root - .serialize_with_mode(&mut bmt_bytes, ark_serialize::Compress::Yes) - .unwrap(); - let mut fmt_bytes = vec![]; - self.fee_merkle_tree_root - .serialize_with_mode(&mut fmt_bytes, ark_serialize::Compress::Yes) - .unwrap(); - - RawCommitmentBuilder::new(&Self::tag()) - .field("chain_config", self.chain_config.commit()) - .u64_field("height", self.height) - .u64_field("timestamp", self.timestamp) - .u64_field("l1_head", self.l1_head) - .optional("l1_finalized", &self.l1_finalized) - .constant_str("payload_commitment") - .fixed_size_bytes(self.payload_commitment.as_ref().as_ref()) - .constant_str("builder_commitment") - .fixed_size_bytes(self.builder_commitment.as_ref()) - .field("ns_table", self.ns_table.commit()) - .var_size_field("block_merkle_tree_root", &bmt_bytes) - .var_size_field("fee_merkle_tree_root", &fmt_bytes) - .field("fee_info", self.fee_info.commit()) - .finalize() - } - - fn tag() -> String { - // We use the tag "BLOCK" since blocks are identified by the hash of their header. This will - // thus be more intuitive to users than "HEADER". - "BLOCK".into() - } -} - -impl Header0_1 { - pub fn deserialize_with_chain_config<'de, A>( - chain_config: ResolvableChainConfig, - mut seq: A, - ) -> Result - where - A: SeqAccess<'de>, - { - macro_rules! element { - ($seq:expr, $field:ident) => { - $seq.next_element()? - .ok_or_else(|| de::Error::missing_field(stringify!($field)))? - }; - } - let height = element!(seq, height); - let timestamp = element!(seq, timestamp); - let l1_head = element!(seq, l1_head); - let l1_finalized = element!(seq, l1_finalized); - let payload_commitment = element!(seq, payload_commitment); - let builder_commitment = element!(seq, builder_commitment); - let ns_table = element!(seq, ns_table); - let block_merkle_tree_root = element!(seq, block_merkle_tree_root); - let fee_merkle_tree_root = element!(seq, fee_merkle_tree_root); - let fee_info = element!(seq, fee_info); - let builder_signature = element!(seq, builder_signature); - - Ok(Self { - chain_config, - height, - timestamp, - l1_head, - l1_finalized, - payload_commitment, - builder_commitment, - ns_table, - block_merkle_tree_root, - fee_merkle_tree_root, - fee_info, - builder_signature, - }) - } -} - -/// Type for protocol version number -#[derive(Deserialize, Serialize, Debug)] -pub struct Version { - /// major version number - pub major: u16, - /// minor version number - pub minor: u16, -} - -pub type FeeMerkleTree = UniversalMerkleTree; -pub type FeeMerkleCommitment = ::Commitment; - -/// Type alias for byte array of SHA256 digest length -type Sha256Digest = [u8; ::OutputSize::USIZE]; - -#[derive(Default, Hash, Copy, Clone, Debug, PartialEq, Eq, Add, Sub, From, Into, Display)] -#[display(fmt = "{_0}")] -pub struct FeeAmount(U256); - -impl FromStringOrInteger for FeeAmount { - type Binary = U256; - type Integer = u64; - - fn from_binary(b: Self::Binary) -> Result { - Ok(Self(b)) - } - - fn from_integer(i: Self::Integer) -> Result { - Ok(i.into()) - } - - fn from_string(s: String) -> Result { - // For backwards compatibility, we have an ad hoc parser for WEI amounts represented as hex - // strings. - if let Some(s) = s.strip_prefix("0x") { - return Ok(Self(s.parse().unwrap())); - } - - // Strip an optional non-numeric suffix, which will be interpreted as a unit. - let (base, unit) = s - .split_once(char::is_whitespace) - .unwrap_or((s.as_str(), "wei")); - match parse_units(base, unit).unwrap() { - ParseUnits::U256(n) => Ok(Self(n)), - ParseUnits::I256(_) => panic!("amount cannot be negative"), - } - } - - fn to_binary(&self) -> Result { - Ok(self.0) - } - - fn to_string(&self) -> Result { - Ok(format!("{self}")) - } -} - -impl_serde_from_string_or_integer!(FeeAmount); -impl_to_fixed_bytes!(FeeAmount, U256); - -impl From for FeeAmount { - fn from(amt: u64) -> Self { - Self(amt.into()) - } -} - -impl CanonicalSerialize for FeeAmount { - fn serialize_with_mode( - &self, - mut writer: W, - _compress: Compress, - ) -> Result<(), SerializationError> { - Ok(writer.write_all(&self.to_fixed_bytes())?) - } - - fn serialized_size(&self, _compress: Compress) -> usize { - core::mem::size_of::() - } -} -impl CanonicalDeserialize for FeeAmount { - fn deserialize_with_mode( - mut reader: R, - _compress: Compress, - _validate: Validate, - ) -> Result { - let mut bytes = [0u8; core::mem::size_of::()]; - reader.read_exact(&mut bytes)?; - let value = U256::from_little_endian(&bytes); - Ok(Self(value)) - } -} - -impl CanonicalSerialize for FeeAccount { - fn serialize_with_mode( - &self, - mut writer: W, - _compress: Compress, - ) -> Result<(), SerializationError> { - Ok(writer.write_all(&self.0.to_fixed_bytes())?) - } - - fn serialized_size(&self, _compress: Compress) -> usize { - core::mem::size_of::
() - } -} - -impl CanonicalDeserialize for FeeAccount { - fn deserialize_with_mode( - mut reader: R, - _compress: Compress, - _validate: Validate, - ) -> Result { - let mut bytes = [0u8; core::mem::size_of::
()]; - reader.read_exact(&mut bytes)?; - let value = Address::from_slice(&bytes); - Ok(Self(value)) - } -} - -#[derive( - Default, - Hash, - Copy, - Clone, - Debug, - Display, - Deserialize, - Serialize, - PartialEq, - Eq, - PartialOrd, - Ord, - From, - Into, -)] -#[display(fmt = "{_0:x}")] -pub struct FeeAccount(Address); - -impl FeeAccount { - /// Return inner `Address` - pub fn address(&self) -> Address { - self.0 - } - /// Return byte slice representation of inner `Address` type - pub fn as_bytes(&self) -> &[u8] { - self.0.as_bytes() - } - /// Return array containing underlying bytes of inner `Address` type - pub fn to_fixed_bytes(self) -> [u8; 20] { - self.0.to_fixed_bytes() - } -} - -impl ToTraversalPath<256> for FeeAccount { - fn to_traversal_path(&self, height: usize) -> Vec { - self.0 - .to_fixed_bytes() - .into_iter() - .take(height) - .map(|i| i as usize) - .collect() - } -} - -impl Valid for FeeAmount { - fn check(&self) -> Result<(), SerializationError> { - Ok(()) - } -} - -impl Valid for FeeAccount { - fn check(&self) -> Result<(), SerializationError> { - Ok(()) - } -} - -#[derive( - Hash, - Copy, - Clone, - Debug, - Deserialize, - Serialize, - PartialEq, - Eq, - CanonicalSerialize, - CanonicalDeserialize, -)] -pub struct FeeInfo { - account: FeeAccount, - amount: FeeAmount, -} - -#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, Hash, PartialEq, Eq)] -pub struct L1BlockInfo { - pub number: u64, - pub timestamp: U256, - pub hash: H256, -} - -impl Committable for L1BlockInfo { - fn commit(&self) -> Commitment { - let mut timestamp = [0u8; 32]; - self.timestamp.to_little_endian(&mut timestamp); - - RawCommitmentBuilder::new(&Self::tag()) - .u64_field("number", self.number) - // `RawCommitmentBuilder` doesn't have a `u256_field` method, so we simulate it: - .constant_str("timestamp") - .fixed_size_bytes(×tamp) - .constant_str("hash") - .fixed_size_bytes(&self.hash.0) - .finalize() - } - - fn tag() -> String { - "L1BLOCK".into() - } -} - -impl Committable for FeeInfo { - fn commit(&self) -> Commitment { - RawCommitmentBuilder::new(&Self::tag()) - .fixed_size_field("account", &self.account.to_fixed_bytes()) - .fixed_size_field("amount", &self.amount.to_fixed_bytes()) - .finalize() - } - fn tag() -> String { - "FEE_INFO".into() - } -} - -pub fn field_to_u256(f: F) -> U256 { - if F::MODULUS_BIT_SIZE > 256 { - panic!("Shouldn't convert a >256-bit field to U256"); - } - U256::from_little_endian(&f.into_bigint().to_bytes_le()) -} - -#[cfg(test)] -mod tests { - - use super::Header0_1; - - #[test] - fn header_test() { - let header_str = include_str!("./mock_data/header.json"); - let header = serde_json::from_str::(&header_str).unwrap(); - // Copied from espresso sequencer reference test - let expected = "BLOCK~6Ol30XYkdKaNFXw0QAkcif18Lk8V8qkC4M81qTlwL707"; - assert_eq!(header.commit().to_string(), expected); - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/uint_bytes.rs b/espressocrypto/lib/espresso-crypto-helper/src/uint_bytes.rs deleted file mode 100644 index a1bd0ea49d..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/uint_bytes.rs +++ /dev/null @@ -1,107 +0,0 @@ -//! Serialization (and deserialization) of primitive unsigned integer types to -//! (and from) an arbitrary fixed-length byte array. -//! -use paste::paste; -use std::mem::size_of; - -// Use an ugly macro because it's difficult or impossible to be generic over -// primitive types such as `usize`, `u64`. -macro_rules! uint_bytes_impl { - ($T:ty) => { - paste! { - /// Serialize `n` into `BYTE_LEN` bytes in little-endian form, padding with - /// 0 as needed. - /// - /// # Panics - /// If `n` cannot fit into `BYTE_LEN` bytes. - #[allow(dead_code)] - pub fn [<$T _to_bytes>](n: $T) -> [u8; BYTE_LEN] { - if size_of::<$T>() > BYTE_LEN { - assert!( - [<$T _fits>](n, BYTE_LEN), - "n {n} cannot fit into {BYTE_LEN} bytes" - ); - n.to_le_bytes()[..BYTE_LEN].try_into().unwrap() // panic is impossible - } else { - // convert `n` to bytes and pad with 0 - let mut result = [0; BYTE_LEN]; - result[..size_of::<$T>()].copy_from_slice(&n.to_le_bytes()[..]); - result - } - } - - /// Deserialize `bytes` in little-endian form into a `$T`, padding with 0 - /// as needed. - /// - /// # Panics - /// If `bytes.len()` is too large to fit into a `$T`. - pub fn [<$T _from_bytes>](bytes: &[u8]) -> $T { - assert!(bytes.len() <= BYTE_LEN, "bytes len {} exceeds BYTE_LEN {BYTE_LEN}", bytes.len()); - assert!( - BYTE_LEN <= size_of::<$T>(), - "BYTE_LEN {BYTE_LEN} cannot fit into {}", - stringify!($T) - ); - let mut [<$T _bytes>] = [0; size_of::<$T>()]; - [<$T _bytes>][..bytes.len()].copy_from_slice(bytes); - $T::from_le_bytes([<$T _bytes>]) - } - - /// Return the largest `$T` value that can fit into `byte_len` bytes. - pub const fn [<$T _max_from_byte_len>](byte_len: usize) -> $T { - if byte_len >= size_of::<$T>() { - $T::MAX - } else { - // overflow cannot occur because `byte_len < size_of::<$T>()` - (1 << (byte_len * 8)) - 1 - } - } - - /// Can `n` fit into `byte_len` bytes? - pub const fn [<$T _fits>](n: $T, byte_len: usize) -> bool { - n <= [<$T _max_from_byte_len>](byte_len) - } - } - }; - } - -uint_bytes_impl!(usize); -uint_bytes_impl!(u32); - -/// Impl [`serde`] for type `$T` with methods named `$to_bytes`, `$from_bytes` -/// of the form -/// ```ignore -/// $T::$to_bytes(&self) -> $B -/// $T::$from_bytes(bytes: &[u8]) -> Self -/// ``` -/// where `$B` is any type that impls [`serde::Deserialize`] and has a method -/// `as_ref` of the form -/// ```ignore -/// $B::as_ref(&self) -> &[u8] -/// ``` -/// Typical examples of `$B` include array `[u8; N]`, slice `&[u8]`, or -/// `Vec`. -macro_rules! bytes_serde_impl { - ($T:ty, $to_bytes:ident, $B:ty, $from_bytes:ident) => { - impl Serialize for $T { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - self.$to_bytes().serialize(serializer) - } - } - - impl<'de> Deserialize<'de> for $T { - fn deserialize(deserializer: D) -> Result<$T, D::Error> - where - D: Deserializer<'de>, - { - <$B as Deserialize>::deserialize(deserializer) - .map(|bytes| <$T>::$from_bytes(bytes.as_ref())) - } - } - }; -} - -pub(super) use bytes_serde_impl; diff --git a/espressocrypto/lib/espresso-crypto-helper/src/utils.rs b/espressocrypto/lib/espresso-crypto-helper/src/utils.rs deleted file mode 100644 index 23bd000055..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/utils.rs +++ /dev/null @@ -1,75 +0,0 @@ -use serde::{ - de::{DeserializeOwned, Deserializer, Error as _}, - ser::Serializer, - Deserialize, Serialize, -}; - -pub type Err = u8; - -/// Basically copied from sequencer repo. Just removed the error types to avoid introducing other crate -pub trait FromStringOrInteger: Sized { - type Binary: Serialize + DeserializeOwned; - type Integer: Serialize + DeserializeOwned; - - fn from_binary(b: Self::Binary) -> Result; - fn from_string(s: String) -> Result; - fn from_integer(i: Self::Integer) -> Result; - - fn to_binary(&self) -> Result; - fn to_string(&self) -> Result; -} - -#[macro_export] -macro_rules! impl_serde_from_string_or_integer { - ($t:ty) => { - impl serde::Serialize for $t { - fn serialize(&self, s: S) -> Result { - $crate::utils::string_or_integer::serialize(self, s) - } - } - - impl<'de> serde::Deserialize<'de> for $t { - fn deserialize>(d: D) -> Result { - $crate::utils::string_or_integer::deserialize(d) - } - } - }; -} - -pub use crate::impl_serde_from_string_or_integer; - -pub mod string_or_integer { - - use super::*; - - #[derive(Debug, Deserialize)] - #[serde(untagged)] - enum StringOrInteger { - String(String), - Integer(I), - } - - pub fn serialize( - t: &T, - s: S, - ) -> Result { - if s.is_human_readable() { - t.to_string().unwrap().serialize(s) - } else { - t.to_binary().unwrap().serialize(s) - } - } - - pub fn deserialize<'a, T: FromStringOrInteger, D: Deserializer<'a>>( - d: D, - ) -> Result { - if d.is_human_readable() { - match StringOrInteger::deserialize(d)? { - StringOrInteger::String(s) => T::from_string(s).map_err(D::Error::custom), - StringOrInteger::Integer(i) => T::from_integer(i).map_err(D::Error::custom), - } - } else { - T::from_binary(T::Binary::deserialize(d)?).map_err(D::Error::custom) - } - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/v0_3/auction.rs b/espressocrypto/lib/espresso-crypto-helper/src/v0_3/auction.rs deleted file mode 100644 index 9c3209c89e..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/v0_3/auction.rs +++ /dev/null @@ -1,130 +0,0 @@ -use super::super::hotshot_types::ViewNumber; -use super::{FeeAccount, FeeAmount}; -use crate::NamespaceId; -use committable::{Commitment, Committable}; -use ethers_core::types::Signature; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize, Hash)] -/// Wrapper enum for Full Network Transactions. Each transaction type -/// will be a variant of this enum. -pub enum FullNetworkTx { - Bid(BidTx), -} - -#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize, Hash)] -/// A transaction to bid for the sequencing rights of a namespace. It -/// is the `signed` form of `BidTxBody`. Expected usage is *build* -/// it by calling `signed` on `BidTxBody`. -pub struct BidTx { - pub(crate) body: BidTxBody, - pub(crate) signature: Signature, -} - -/// A transaction body holding data required for bid submission. -#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize, Hash)] -pub struct BidTxBody { - /// Account responsible for the signature - pub(crate) account: FeeAccount, - /// Fee to be sequenced in the network. Different than the bid_amount fee - // FULL_NETWORK_GAS * MINIMUM_GAS_PRICE - pub(crate) gas_price: FeeAmount, - /// The bid amount designated in Wei. This is different than - /// the sequencing fee (gas price) for this transaction - pub(crate) bid_amount: FeeAmount, - /// The URL the HotShot leader will use to request a bundle - /// from this sequencer if they win the auction - pub(crate) url: String, - /// The slot this bid is for - pub(crate) view: ViewNumber, - /// The set of namespace ids the sequencer is bidding for - pub(crate) namespaces: Vec, -} - -/// The results of an Auction -#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize, Hash)] -pub struct SolverAuctionResults { - /// view number the results are for - pub(crate) view_number: ViewNumber, - /// A list of the bid txs that won - pub(crate) winning_bids: Vec, - /// A list of reserve sequencers being used - pub(crate) reserve_bids: Vec<(NamespaceId, String)>, -} - -impl Committable for SolverAuctionResults { - fn tag() -> String { - "SOLVER_AUCTION_RESULTS".to_string() - } - - fn commit(&self) -> Commitment { - let comm = committable::RawCommitmentBuilder::new(&Self::tag()) - .fixed_size_field("view_number", &self.view_number.commit().into()) - .array_field( - "winning_bids", - &self - .winning_bids - .iter() - .map(Committable::commit) - .collect::>(), - ) - .array_field( - "reserve_bids", - &self - .reserve_bids - .iter() - .map(|(nsid, url)| { - // Set a phantom type to make the compiler happy - committable::RawCommitmentBuilder::::new( - "RESERVE_BID", - ) - .u64(nsid.0) - .constant_str(url.as_str()) - .finalize() - }) - .collect::>(), - ); - comm.finalize() - } -} - -impl Committable for BidTx { - fn tag() -> String { - "BID_TX".to_string() - } - - fn commit(&self) -> Commitment { - let comm = committable::RawCommitmentBuilder::new(&Self::tag()) - .field("body", self.body.commit()) - .fixed_size_field("signature", &self.signature.into()); - comm.finalize() - } -} - -impl Committable for BidTxBody { - fn tag() -> String { - "BID_TX_BODY".to_string() - } - - fn commit(&self) -> Commitment { - let comm = committable::RawCommitmentBuilder::new(&Self::tag()) - .fixed_size_field("account", &self.account.to_fixed_bytes()) - .fixed_size_field("gas_price", &self.gas_price.to_fixed_bytes()) - .fixed_size_field("bid_amount", &self.bid_amount.to_fixed_bytes()) - .var_size_field("url", self.url.as_str().as_ref()) - .u64_field("view", self.view.0) - .array_field( - "namespaces", - &self - .namespaces - .iter() - .map(|e| { - committable::RawCommitmentBuilder::::new("namespace") - .u64(e.0) - .finalize() - }) - .collect::>(), - ); - comm.finalize() - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/v0_3/chain_config.rs b/espressocrypto/lib/espresso-crypto-helper/src/v0_3/chain_config.rs deleted file mode 100644 index 47198d6115..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/v0_3/chain_config.rs +++ /dev/null @@ -1,109 +0,0 @@ -use super::{BlockSize, ChainId, FeeAccount, FeeAmount}; -use committable::{Commitment, Committable}; -use ethers_core::types::{Address, U256}; -use itertools::Either; -use serde::{Deserialize, Serialize}; - -/// Global variables for an Espresso blockchain. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub struct ChainConfig { - /// Espresso chain ID - pub chain_id: ChainId, - - /// Maximum size in bytes of a block - pub max_block_size: BlockSize, - - /// Minimum fee in WEI per byte of payload - pub base_fee: FeeAmount, - - /// Fee contract address on L1. - /// - /// This is optional so that fees can easily be toggled on/off, with no need to deploy a - /// contract when they are off. In a future release, after fees are switched on and thoroughly - /// tested, this may be made mandatory. - pub fee_contract: Option
, - - /// Account that receives sequencing fees. - /// - /// This account in the Espresso fee ledger will always receive every fee paid in Espresso, - /// regardless of whether or not their is a `fee_contract` deployed. Once deployed, the fee - /// contract can decide what to do with tokens locked in this account in Espresso. - pub fee_recipient: FeeAccount, - - /// Account that receives sequencing bids. - pub bid_recipient: Option, -} - -#[derive(Clone, Debug, Copy, PartialEq, Deserialize, Serialize, Eq, Hash)] -/// A commitment to a ChainConfig or a full ChainConfig. -pub struct ResolvableChainConfig { - pub(crate) chain_config: Either>, -} - -impl Committable for ChainConfig { - fn tag() -> String { - "CHAIN_CONFIG".to_string() - } - - fn commit(&self) -> Commitment { - let comm = committable::RawCommitmentBuilder::new(&Self::tag()) - .fixed_size_field("chain_id", &self.chain_id.to_fixed_bytes()) - .u64_field("max_block_size", *self.max_block_size) - .fixed_size_field("base_fee", &self.base_fee.to_fixed_bytes()) - .fixed_size_field("fee_recipient", &self.fee_recipient.to_fixed_bytes()); - let comm = if let Some(addr) = self.fee_contract { - comm.u64_field("fee_contract", 1).fixed_size_bytes(&addr.0) - } else { - comm.u64_field("fee_contract", 0) - }; - - // With `ChainConfig` upgrades we want commitments w/out - // fields added >= v0_3 to have the same commitment as <= v0_3 - // commitment. Therefore `None` values are simply ignored. - let comm = if let Some(bid_recipient) = self.bid_recipient { - comm.fixed_size_field("bid_recipient", &bid_recipient.to_fixed_bytes()) - } else { - comm - }; - - comm.finalize() - } -} - -impl ResolvableChainConfig { - pub fn commit(&self) -> Commitment { - match self.chain_config { - Either::Left(config) => config.commit(), - Either::Right(commitment) => commitment, - } - } -} - -impl From> for ResolvableChainConfig { - fn from(value: Commitment) -> Self { - Self { - chain_config: Either::Right(value), - } - } -} - -impl From for ResolvableChainConfig { - fn from(value: ChainConfig) -> Self { - Self { - chain_config: Either::Left(value), - } - } -} - -impl Default for ChainConfig { - fn default() -> Self { - Self { - chain_id: U256::from(35353).into(), // arbitrarily chosen chain ID - max_block_size: 30720.into(), - base_fee: 0.into(), - fee_contract: None, - fee_recipient: Default::default(), - bid_recipient: None, - } - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/v0_3/header.rs b/espressocrypto/lib/espresso-crypto-helper/src/v0_3/header.rs deleted file mode 100644 index ef88bb666a..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/v0_3/header.rs +++ /dev/null @@ -1,70 +0,0 @@ -use super::{ - BlockMerkleCommitment, FeeInfo, FeeMerkleCommitment, L1BlockInfo, ResolvableChainConfig, - SolverAuctionResults, -}; -use crate::hotshot_types::{BuilderCommitment, VidCommitment}; -use crate::NsTable; -use ark_serialize::CanonicalSerialize; -use committable::{Commitment, Committable, RawCommitmentBuilder}; -use ethers_core::types::Signature as BuilderSignature; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Debug, Deserialize, Serialize, Hash, PartialEq, Eq)] -/// A header is like a [`Block`] with the body replaced by a digest. -pub struct Header { - /// A commitment to a ChainConfig or a full ChainConfig. - pub(crate) chain_config: ResolvableChainConfig, - pub(crate) height: u64, - pub(crate) timestamp: u64, - pub(crate) l1_head: u64, - pub(crate) l1_finalized: Option, - pub(crate) payload_commitment: VidCommitment, - pub(crate) builder_commitment: BuilderCommitment, - pub(crate) ns_table: NsTable, - pub(crate) block_merkle_tree_root: BlockMerkleCommitment, - pub(crate) fee_merkle_tree_root: FeeMerkleCommitment, - pub(crate) fee_info: Vec, - pub(crate) builder_signature: Vec, - pub(crate) auction_results: SolverAuctionResults, -} - -impl Committable for Header { - fn commit(&self) -> Commitment { - let mut bmt_bytes = vec![]; - self.block_merkle_tree_root - .serialize_with_mode(&mut bmt_bytes, ark_serialize::Compress::Yes) - .unwrap(); - let mut fmt_bytes = vec![]; - self.fee_merkle_tree_root - .serialize_with_mode(&mut fmt_bytes, ark_serialize::Compress::Yes) - .unwrap(); - - RawCommitmentBuilder::new(&Self::tag()) - .field("chain_config", self.chain_config.commit()) - .u64_field("height", self.height) - .u64_field("timestamp", self.timestamp) - .u64_field("l1_head", self.l1_head) - .optional("l1_finalized", &self.l1_finalized) - .constant_str("payload_commitment") - .fixed_size_bytes(self.payload_commitment.as_ref().as_ref()) - .constant_str("builder_commitment") - .fixed_size_bytes(self.builder_commitment.as_ref()) - .field("ns_table", self.ns_table.commit()) - .var_size_field("block_merkle_tree_root", &bmt_bytes) - .var_size_field("fee_merkle_tree_root", &fmt_bytes) - .array_field( - "fee_info", - &self - .fee_info - .iter() - .map(Committable::commit) - .collect::>(), - ) - .field("auction_results", self.auction_results.commit()) - .finalize() - } - - fn tag() -> String { - "BLOCK".into() - } -} diff --git a/espressocrypto/lib/espresso-crypto-helper/src/v0_3/mod.rs b/espressocrypto/lib/espresso-crypto-helper/src/v0_3/mod.rs deleted file mode 100644 index e568b23500..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/src/v0_3/mod.rs +++ /dev/null @@ -1,13 +0,0 @@ -// Re-export types which haven't changed since the last minor version. -pub use super::sequencer_data_structures::{ - BlockMerkleCommitment, BlockSize, ChainId, FeeAccount, FeeAmount, FeeInfo, FeeMerkleCommitment, - L1BlockInfo, -}; - -mod auction; -mod chain_config; -mod header; - -pub use auction::SolverAuctionResults; -pub use chain_config::*; -pub use header::Header; diff --git a/espressocrypto/lib/espresso-crypto-helper/vid_srs.json b/espressocrypto/lib/espresso-crypto-helper/vid_srs.json deleted file mode 100644 index aa0532dceb..0000000000 --- a/espressocrypto/lib/espresso-crypto-helper/vid_srs.json +++ /dev/null @@ -1 +0,0 @@ -[5,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,230,49,207,189,34,111,38,253,239,131,186,97,251,231,171,98,78,190,123,168,209,107,255,67,249,159,40,40,6,54,45,170,10,112,5,212,123,240,59,100,176,247,78,203,61,211,248,240,162,236,254,231,204,82,130,244,195,99,229,121,42,185,166,219,137,228,207,21,151,128,212,130,59,138,190,25,73,54,189,135,81,200,124,137,67,158,163,166,72,205,60,228,214,10,2,67,69,158,23,152,197,51,106,108,140,24,44,111,20,97,192,10,96,210,7,20,82,156,180,146,61,234,226,186,158,167,161,118,140,215,125,138,226,57,182,7,222,71,91,232,103,156,194,54,190,135,208,45,8,92,144,114,46,122,185,203,237,11,33,101,226,121,255,196,55,110,254,210,246,234,12,28,192,114,52,238,47,69,188,187,4,105,47,171,163,58,184,49,228,209,152,214,96,132,233,17,76,177,73,144,41,127,136,58,178,129,238,30,130,27,98,71,103,194,185,19,190,176,246,65,206,86,42,124,44,239,166,174,161,44,209,192,86,134,199,56,99,125,130,213,222,37,231,228,109,143,125,84,218,221,227,45,143,169,154,237,246,146,217,92,189,222,70,221,218,94,247,212,34,67,103,121,68,92,94,102,0,106,66,118,30,31,18,239,222,0,24,194,18,243,174,183,133,228,151,18,231,169,53,51,73,170,241,37,93,251,49,183,191,96,114,58,72,13,146,147,147,142,25,170,125,250,102,1,204,230,76,123,211,67,12,105,231,209,227,143,64,203,141,128,113,171,74,235,109,140,219,165,94,200,18,91,151,34,209,220,218,172,85,243,142,179,112,51,49,75,188,149,51,12,105,173,153,158,236,117,240,95,88,208,137,6,9,176,131,136,147,236,31,35,126,139,7,50,59,7,68,89,159,78,151,181,152,179,181,137,188,194,188,55,184,213,196,24,1,193,131,147,192,250,48,254,78,139,3,142,53,122,216,81,234,232,222,145,7,88,78,255,231,199,241,246,81,178,1,14,38,85,94,204,218,212,135,74,133,162,206,230,150,63,221,230,17,94,97,229,20,66,91,71,86,42,99,192,192,163,189,254,34,228,95,106,218,128,60,65,238,164,155,249,65,70,160,242,156,133,114,154,187,193,86,81,210,227,15,17,247,105,99,252,4,2,0,0,0,0,0,0,0,237,246,146,217,92,189,222,70,221,218,94,247,212,34,67,103,121,68,92,94,102,0,106,66,118,30,31,18,239,222,0,24,194,18,243,174,183,133,228,151,18,231,169,53,51,73,170,241,37,93,251,49,183,191,96,114,58,72,13,146,147,147,142,25,170,125,250,102,1,204,230,76,123,211,67,12,105,231,209,227,143,64,203,141,128,113,171,74,235,109,140,219,165,94,200,18,91,151,34,209,220,218,172,85,243,142,179,112,51,49,75,188,149,51,12,105,173,153,158,236,117,240,95,88,208,137,6,9,176,131,136,147,236,31,35,126,139,7,50,59,7,68,89,159,78,151,181,152,179,181,137,188,194,188,55,184,213,196,24,1,193,131,147,192,250,48,254,78,139,3,142,53,122,216,81,234,232,222,145,7,88,78,255,231,199,241,246,81,178,1,14,38,85,94,204,218,212,135,74,133,162,206,230,150,63,221,230,17,94,97,229,20,66,91,71,86,42,99,192,192,163,189,254,34,228,95,106,218,128,60,65,238,164,155,249,65,70,160,242,156,133,114,154,187,193,86,81,210,227,15,17,247,105,99,252,4] \ No newline at end of file diff --git a/execution/gethexec/espresso_finality_node.go b/execution/gethexec/espresso_finality_node.go index e30830e484..f85b24aa63 100644 --- a/execution/gethexec/espresso_finality_node.go +++ b/execution/gethexec/espresso_finality_node.go @@ -96,7 +96,7 @@ func (n *EspressoFinalityNode) createBlock(ctx context.Context) (returnValue boo } hooks := arbos.NoopSequencingHooks() - _, err = n.execEngine.SequenceTransactions(arbHeader, txes, hooks, false) + _, err = n.execEngine.SequenceTransactions(arbHeader, txes, hooks) if err != nil { log.Error("espresso finality node: failed to sequence transactions", "err", err) return false diff --git a/execution/gethexec/executionengine.go b/execution/gethexec/executionengine.go index 87a48ca6ee..be431b0f74 100644 --- a/execution/gethexec/executionengine.go +++ b/execution/gethexec/executionengine.go @@ -382,7 +382,6 @@ func (s *ExecutionEngine) NextDelayedMessageNumber() (uint64, error) { func MessageFromTxes(header *arbostypes.L1IncomingMessageHeader, txes types.Transactions, txErrors []error) (*arbostypes.L1IncomingMessage, error) { var l2Message []byte - if len(txes) == 1 && txErrors[0] == nil { txBytes, err := txes[0].MarshalBinary() if err != nil { @@ -474,7 +473,6 @@ func (s *ExecutionEngine) sequencerWrapper(sequencerFunc func() (*types.Block, e attempts := 0 for { s.createBlocksMutex.Lock() - log.Info("locking block mutex, attempting to sequence transactions") block, err := sequencerFunc() s.createBlocksMutex.Unlock() if !errors.Is(err, execution.ErrSequencerInsertLockTaken) { @@ -500,7 +498,7 @@ func (s *ExecutionEngine) sequencerWrapper(sequencerFunc func() (*types.Block, e } } -func (s *ExecutionEngine) SequenceTransactions(header *arbostypes.L1IncomingMessageHeader, txes types.Transactions, hooks *arbos.SequencingHooks, espressoSovereign bool) (*types.Block, error) { +func (s *ExecutionEngine) SequenceTransactions(header *arbostypes.L1IncomingMessageHeader, txes types.Transactions, hooks *arbos.SequencingHooks) (*types.Block, error) { return s.sequencerWrapper(func() (*types.Block, error) { hooks.TxErrors = nil return s.sequenceTransactionsWithBlockMutex(header, txes, hooks) @@ -510,7 +508,7 @@ func (s *ExecutionEngine) SequenceTransactions(header *arbostypes.L1IncomingMess // SequenceTransactionsWithProfiling runs SequenceTransactions with tracing and // CPU profiling enabled. If the block creation takes longer than 2 seconds, it // keeps both and prints out filenames in an error log line. -func (s *ExecutionEngine) SequenceTransactionsWithProfiling(header *arbostypes.L1IncomingMessageHeader, txes types.Transactions, hooks *arbos.SequencingHooks, espressoSovereign bool) (*types.Block, error) { +func (s *ExecutionEngine) SequenceTransactionsWithProfiling(header *arbostypes.L1IncomingMessageHeader, txes types.Transactions, hooks *arbos.SequencingHooks) (*types.Block, error) { pprofBuf, traceBuf := bytes.NewBuffer(nil), bytes.NewBuffer(nil) if err := pprof.StartCPUProfile(pprofBuf); err != nil { log.Error("Starting CPU profiling", "error", err) @@ -519,7 +517,7 @@ func (s *ExecutionEngine) SequenceTransactionsWithProfiling(header *arbostypes.L log.Error("Starting tracing", "error", err) } start := time.Now() - res, err := s.SequenceTransactions(header, txes, hooks, espressoSovereign) + res, err := s.SequenceTransactions(header, txes, hooks) elapsed := time.Since(start) pprof.StopCPUProfile() trace.Stop() diff --git a/execution/gethexec/node.go b/execution/gethexec/node.go index 29b2d5eb37..9102c439af 100644 --- a/execution/gethexec/node.go +++ b/execution/gethexec/node.go @@ -4,7 +4,6 @@ import ( "context" "errors" "fmt" - "github.com/ethereum/go-ethereum/params" "reflect" "sort" "sync/atomic" @@ -20,6 +19,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" "github.com/offchainlabs/nitro/arbos/arbostypes" "github.com/offchainlabs/nitro/arbos/programs" @@ -395,7 +395,6 @@ func (n *ExecutionNode) StopAndWait() { if n.TxPublisher.Started() { n.TxPublisher.StopAndWait() } - n.Recorder.OrderlyShutdown() if n.ParentChainReader != nil && n.ParentChainReader.Started() { n.ParentChainReader.StopAndWait() diff --git a/execution/gethexec/sequencer.go b/execution/gethexec/sequencer.go index 052e19cf69..4bdd081f62 100644 --- a/execution/gethexec/sequencer.go +++ b/execution/gethexec/sequencer.go @@ -7,10 +7,10 @@ import ( "context" "errors" "fmt" - lightclient "github.com/EspressoSystems/espresso-sequencer-go/light-client" "math" "math/big" "runtime/debug" + "strconv" "sync" "sync/atomic" "time" @@ -80,12 +80,9 @@ type SequencerConfig struct { expectedSurplusHardThreshold int // Espresso specific flags - LightClientAddress string `koanf:"light-client-address"` - SwitchDelayThreshold uint64 `koanf:"switch-delay-threshold"` EspressoFinalityNodeConfig EspressoFinalityNodeConfig `koanf:"espresso-finality-node-config"` // Espresso Finality Node creates blocks with finalized hotshot transactions EnableEspressoFinalityNode bool `koanf:"enable-espresso-finality-node"` - EnableEspressoSovereign bool `koanf:"enable-espresso-sovereign"` } func (c *SequencerConfig) Validate() error { @@ -97,6 +94,20 @@ func (c *SequencerConfig) Validate() error { return fmt.Errorf("sequencer sender whitelist entry \"%v\" is not a valid address", address) } } + var err error + if c.ExpectedSurplusSoftThreshold != "default" { + if c.expectedSurplusSoftThreshold, err = strconv.Atoi(c.ExpectedSurplusSoftThreshold); err != nil { + return fmt.Errorf("invalid expected-surplus-soft-threshold value provided in batchposter config %w", err) + } + } + if c.ExpectedSurplusHardThreshold != "default" { + if c.expectedSurplusHardThreshold, err = strconv.Atoi(c.ExpectedSurplusHardThreshold); err != nil { + return fmt.Errorf("invalid expected-surplus-hard-threshold value provided in batchposter config %w", err) + } + } + if c.expectedSurplusSoftThreshold < c.expectedSurplusHardThreshold { + return errors.New("expected-surplus-soft-threshold cannot be lower than expected-surplus-hard-threshold") + } if c.MaxTxDataSize > arbostypes.MaxL2MessageSize-50000 { return errors.New("max-tx-data-size too large for MaxL2MessageSize") } @@ -131,7 +142,6 @@ var DefaultSequencerConfig = SequencerConfig{ EnableProfiling: false, EnableEspressoFinalityNode: false, - EnableEspressoSovereign: false, } func SequencerConfigAddOptions(prefix string, f *flag.FlagSet) { @@ -153,7 +163,6 @@ func SequencerConfigAddOptions(prefix string, f *flag.FlagSet) { // Espresso specific flags f.Bool(prefix+".enable-espresso-finality-node", DefaultSequencerConfig.EnableEspressoFinalityNode, "enable espresso finality node") - f.Bool(prefix+".enable-espresso-sovereign", DefaultSequencerConfig.EnableEspressoSovereign, "enable sovereign sequencer mode for the Espresso integration") } type txQueueItem struct { @@ -322,8 +331,6 @@ type Sequencer struct { expectedSurplusMutex sync.RWMutex expectedSurplus int64 expectedSurplusUpdated bool - - lightClientReader *lightclient.LightClientReader } func NewSequencer(execEngine *ExecutionEngine, l1Reader *headerreader.HeaderReader, configFetcher SequencerConfigFetcher) (*Sequencer, error) { @@ -339,37 +346,16 @@ func NewSequencer(execEngine *ExecutionEngine, l1Reader *headerreader.HeaderRead senderWhitelist[common.HexToAddress(address)] = struct{}{} } - // For the sovereign sequencer to have an escape hatch, we need to be able to read the state of the light client. - // To accomplish this, we introduce a requirement on the l1Reader/ParentChainReader to not be null. This is a soft - // requirement as the sequencer will still run if we don't have this reader, but it will not create espresso messages. - var ( - lightClientReader *lightclient.LightClientReader - err error - ) - - if l1Reader == nil && config.EnableEspressoSovereign { - return nil, fmt.Errorf("Cannot enable espresso sequencing mode in the sovereign sequencer with no l1 reader") - } - - if l1Reader != nil { - lightClientReader, err = lightclient.NewLightClientReader(common.HexToAddress(config.LightClientAddress), l1Reader.Client()) - if err != nil { - log.Error("Could not construct light client reader for sequencer. Failing.", "err", err) - return nil, err - } - } - s := &Sequencer{ - execEngine: execEngine, - txQueue: make(chan txQueueItem, config.QueueSize), - l1Reader: l1Reader, - config: configFetcher, - senderWhitelist: senderWhitelist, - nonceCache: newNonceCache(config.NonceCacheSize), - l1Timestamp: 0, - pauseChan: nil, - onForwarderSet: make(chan struct{}, 1), - lightClientReader: lightClientReader, + execEngine: execEngine, + txQueue: make(chan txQueueItem, config.QueueSize), + l1Reader: l1Reader, + config: configFetcher, + senderWhitelist: senderWhitelist, + nonceCache: newNonceCache(config.NonceCacheSize), + l1Timestamp: 0, + pauseChan: nil, + onForwarderSet: make(chan struct{}, 1), } s.nonceFailures = &nonceFailureCache{ containers.NewLruCacheWithOnEvict(config.NonceCacheSize, s.onNonceFailureEvict), @@ -939,33 +925,14 @@ func (s *Sequencer) createBlock(ctx context.Context) (returnValue bool) { start := time.Now() var ( - block *types.Block - err error - shouldSequenceWithEspresso bool + block *types.Block + err error ) - arbOSconfig, err := s.execEngine.GetArbOSConfigAtHeight(0) // pass 0 to get the current ArbOS config. - if err != nil { - log.Warn("Error fetching ArbOS chainConfig in sequencer.") - } - - // Initialize shouldSequenceWithEspresso to false and if we have a light client reader then give it a value based on hotshot liveness - // This is a side effect of the sequencer having the capability to run without an L1 reader. For the Espresso integration this is a necessary component of the sequencer. - // However, many tests use the case of having a nil l1 reader - if s.lightClientReader != nil && arbOSconfig != nil { - isHotShotLive, err := s.lightClientReader.IsHotShotLiveAtHeight(l1Block, s.config().SwitchDelayThreshold) - if err != nil { - log.Warn("An error occurred while attempting to determine if hotshot is live at l1 block, sequencing transactions without espresso", "l1Block", l1Block, "err", err) - } - shouldSequenceWithEspresso = isHotShotLive && arbOSconfig.ArbitrumChainParams.EnableEspresso - - log.Info("After escape-hatch and chain config logic in sequencer", "ShouldSequenceWithEspresso", shouldSequenceWithEspresso, "EnableEspresso", arbOSconfig.ArbitrumChainParams.EnableEspresso, "isHotShotLive", isHotShotLive) - } - if config.EnableProfiling { - block, err = s.execEngine.SequenceTransactionsWithProfiling(header, txes, hooks, shouldSequenceWithEspresso) + block, err = s.execEngine.SequenceTransactionsWithProfiling(header, txes, hooks) } else { - block, err = s.execEngine.SequenceTransactions(header, txes, hooks, shouldSequenceWithEspresso) + block, err = s.execEngine.SequenceTransactions(header, txes, hooks) } elapsed := time.Since(start) blockCreationTimer.Update(elapsed) diff --git a/execution/interface.go b/execution/interface.go index 718b497f7a..bfae28e9dd 100644 --- a/execution/interface.go +++ b/execution/interface.go @@ -3,9 +3,10 @@ package execution import ( "context" "errors" - "github.com/ethereum/go-ethereum/params" "testing" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" "github.com/offchainlabs/nitro/arbos/arbostypes" @@ -13,9 +14,8 @@ import ( ) type MessageResult struct { - BlockHash common.Hash - SendRoot common.Hash - HotShotHeight uint64 + BlockHash common.Hash + SendRoot common.Hash } type RecordResult struct { diff --git a/flake.lock b/flake.lock index 424c92e423..04982f8194 100644 --- a/flake.lock +++ b/flake.lock @@ -21,11 +21,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -85,17 +85,16 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1727777479, - "narHash": "sha256-V653pzkf/HmMIlNHUUGVMetwG0Kry5EpVLTtftnQZjU=", + "lastModified": 1732007969, + "narHash": "sha256-530sUANi9KkS8LgdUu/GIAn8hCoM2MzP0KIus2yWN7w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "aae672db41edf5e11c970db7089191877db3fd7f", + "rev": "dc1239e65db0e2429f948d1349b4a85db8a6ff70", "type": "github" }, "original": { "owner": "NixOS", "repo": "nixpkgs", - "rev": "aae672db41edf5e11c970db7089191877db3fd7f", "type": "github" } }, @@ -129,11 +128,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1730946479, - "narHash": "sha256-AxGJ3BRc44o3RBcfXxZqjVYftVtJ2sl+/WEjiLUmXRY=", + "lastModified": 1731983527, + "narHash": "sha256-JECaBgC0pQ91Hq3W4unH6K9to8s2Zl2sPNu7bLOv4ek=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "7fba269fe89ffad47206e0afba233d337c04cf08", + "rev": "71287228d96e9568e1e70c6bbfa3f992d145947b", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 040ac022c4..eaddfacb71 100644 --- a/flake.nix +++ b/flake.nix @@ -1,12 +1,7 @@ { - description = "A Nix-flake-based Go 1.21 development environment"; - - # go v1.21 has been removed from nixpkgs-unstable due to end-of-life so we pin - # an older revision because as of nitro v3.2.1 they still use go-lang v1.21, - # when upgrading the go-lang version this pinnning should be removed, e. g. - # changed back to: - # inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - inputs.nixpkgs.url = "github:NixOS/nixpkgs/aae672db41edf5e11c970db7089191877db3fd7f"; + description = "A Nix-flake-based Nitro development environment"; + + inputs.nixpkgs.url = "github:NixOS/nixpkgs"; inputs.flake-utils.url = "github:numtide/flake-utils"; inputs.flake-compat.url = "github:edolstra/flake-compat"; inputs.flake-compat.flake = false; @@ -95,8 +90,6 @@ llvmPackages_16.bintools # provides wasm-ld cmake wabt # wasm2wat, wat2wasm, etc - cmake - wabt # wasm2wat, wat2wasm, etc. # Docker docker-compose # provides the `docker-compose` command @@ -129,6 +122,8 @@ cmake cargo-with-nightly stableToolchain + openssl + pkg-config llvmPkgs.clang llvmPkgs.bintools # provides wasm-ld @@ -160,9 +155,7 @@ # provides abigen go-ethereum ] ++ lib.optionals stdenv.isDarwin [ - darwin.libobjc - darwin.IOKit - darwin.apple_sdk.frameworks.CoreFoundation + apple-sdk_11 ] ++ lib.optionals (! stdenv.isDarwin) [ glibc_multi.dev # provides gnu/stubs-32.h ]; @@ -170,7 +163,19 @@ export LIBCLANG_PATH="${pkgs.llvmPackages_16.libclang.lib}/lib" export CC="${pkgs.clang-tools_16.clang}/bin/clang" export AR="${pkgs.llvm_16}/bin/llvm-ar" - ''; + '' + # The clang wrapper cannot find SystemConfiguration symbols on darwin + # Undefined symbols for architecture arm64: "_SCDynamicStoreCopyProxies", referenced from: + # system_configuration::dynamic_store::SCDynamicStore::get_proxies::h29c4032f420db6e7 + # in libespresso_crypto_helper.a(system_configuration-0133a45c6b0a8ed2.system_configuration.3319bd173d7021d9-cgu.0.rcgu.o) + # + # TODO: I think this shouldn't be required. We should probably + # re-think how this flake works on darwin after the changes in + # https://github.com/NixOS/nixpkgs/pull/346043 + + pkgs.lib.optionalString pkgs.stdenv.isDarwin + '' + export NIX_LDFLAGS="-framework SystemConfiguration $NIX_LDFLAGS" + ''; }; }; }); diff --git a/go-ethereum b/go-ethereum index 68d108296d..bbfe2a6822 160000 --- a/go-ethereum +++ b/go-ethereum @@ -1 +1 @@ -Subproject commit 68d108296d69027ff7b1e0a4d44f1b70af010e2b +Subproject commit bbfe2a6822915a75e232ea771356f0a4d5e57d07 diff --git a/scripts/download-machine-espresso.sh b/scripts/download-machine-espresso.sh deleted file mode 100755 index d59c29893f..0000000000 --- a/scripts/download-machine-espresso.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -# Same as ./download-machine.sh but for the espresso integration. -# -# The url_base has been changed to point to the espresso integration repo such -# that it downloads the replay wasm binary for the integration instead. -# -# For this to work there needs to be a tagged github release that exported the -# wasm machine. Then, run -# -# ./download-machine-espresso.sh GIT_RELEASE_TAG WASM_MACHINE_ROOT -# ./download-machine-espresso.sh 20231211 0xb2ec17fe4ae788f2c81cd1d28242dfa47696598ea0f18cd78f64c7e2e8b75434 -set -euxo pipefail - -mkdir "$2" -ln -sfT "$2" latest -cd "$2" - -url_base="https://github.com/EspressoSystems/nitro-espresso-integration/releases/download/$1" - -# Download the module root from the release page -wget "$url_base/module-root.txt" - -# Check that the module root specified matches the release -grep -q "$2" module-root.txt || - (echo "Module root mismatch: specified $2 != release $(cat module-root.txt)" && exit 1) - -wget "$url_base/machine.wavm.br" - -status_code="$(curl -LI "$url_base/replay.wasm" -so /dev/null -w '%{http_code}')" -if [ "$status_code" -ne 404 ]; then - wget "$url_base/replay.wasm" -fi diff --git a/system_tests/batch_poster_test.go b/system_tests/batch_poster_test.go index 0ec03e84c4..c616de4620 100644 --- a/system_tests/batch_poster_test.go +++ b/system_tests/batch_poster_test.go @@ -309,7 +309,7 @@ func testAllowPostingFirstBatchWhenSequencerMessageCountMismatch(t *testing.T, e seqInbox, err := bridgegen.NewSequencerInbox(builder.L1Info.GetAddress("SequencerInbox"), builder.L1.Client) Require(t, err) seqOpts := builder.L1Info.GetDefaultTransactOpts("Sequencer", ctx) - tx, err := seqInbox.AddSequencerL2Batch(&seqOpts, big.NewInt(1), nil, big.NewInt(1), common.Address{}, big.NewInt(1), big.NewInt(10)) + tx, err := seqInbox.AddSequencerL2Batch99020501(&seqOpts, big.NewInt(1), nil, big.NewInt(1), common.Address{}, big.NewInt(1), big.NewInt(10), []byte{}) Require(t, err) _, err = builder.L1.EnsureTxSucceeded(tx) Require(t, err) diff --git a/system_tests/common_test.go b/system_tests/common_test.go index 524c369189..535ef416b9 100644 --- a/system_tests/common_test.go +++ b/system_tests/common_test.go @@ -570,7 +570,6 @@ func (b *NodeBuilder) BuildL2OnL1(t *testing.T) func() { // Requires precompiles.AllowDebugPrecompiles = true func (b *NodeBuilder) BuildL2(t *testing.T) func() { b.L2 = NewTestClient(b.ctx) - AddValNodeIfNeeded(t, b.ctx, b.nodeConfig, true, "", b.valnodeConfig.Wasm.RootPath) var chainDb ethdb.Database @@ -1268,6 +1267,13 @@ func deployOnParentChain( nativeToken := common.Address{} maxDataSize := big.NewInt(117964) + + // Deploy a espressoTEEVerifierMock contract + espressoTEEVerifierAddress, tx, _, err := mocksgen.DeployEspressoTEEVerifierMock(&parentChainTransactionOpts, parentChainClient) + Require(t, err) + + _, err = parentChainReader.WaitForTxApproval(ctx, tx) + Require(t, err) addresses, err := deploy.DeployOnParentChain( ctx, parentChainReader, @@ -1275,7 +1281,7 @@ func deployOnParentChain( []common.Address{parentChainInfo.GetAddress("Sequencer")}, parentChainInfo.GetAddress("RollupOwner"), 0, - arbnode.GenerateRollupConfig(prodConfirmPeriodBlocks, wasmModuleRoot, parentChainInfo.GetAddress("RollupOwner"), chainConfig, serializedChainConfig, common.Address{}), + arbnode.GenerateRollupConfig(prodConfirmPeriodBlocks, wasmModuleRoot, parentChainInfo.GetAddress("RollupOwner"), chainConfig, serializedChainConfig, common.Address{}, espressoTEEVerifierAddress), nativeToken, maxDataSize, chainSupportsBlobs, diff --git a/system_tests/espresso-e2e/docker-compose.yaml b/system_tests/espresso-e2e/docker-compose.yaml index ffe1fed66e..1592d2dc34 100644 --- a/system_tests/espresso-e2e/docker-compose.yaml +++ b/system_tests/espresso-e2e/docker-compose.yaml @@ -13,7 +13,14 @@ services: - ESPRESSO_SEQUENCER_API_PORT - ESPRESSO_SEQUENCER_ETH_MNEMONIC - ESPRESSO_SEQUENCER_L1_PROVIDER + - ESPRESSO_SEQUENCER_DATABASE_MAX_CONNECTIONS=25 + - ESPRESSO_SEQUENCER_STORAGE_PATH=/data/espresso - RUST_LOG=info - RUST_LOG_FORMAT + volumes: + - espresso_storage:/data/espresso extra_hosts: - "host.docker.internal:host-gateway" + +volumes: + espresso_storage: diff --git a/system_tests/espresso-e2e/validation_input.json b/system_tests/espresso-e2e/validation_input.json deleted file mode 100644 index 691ebbcf00..0000000000 --- a/system_tests/espresso-e2e/validation_input.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "Id": 43, - "HasDelayedMsg": false, - "DelayedMsgNr": 0, - "Preimages": { - "0": { - "0x0b7da7aabec1a512a7347f971a2d86b6f3942a711cf3e60857cda4c76f0eac63": "+HGAgKA/XwsUbPdK2/CDA0dJcNQQUOXzhXLCqbemaEprF3SarICAgICAoHl2AxdEHlWycCZx3kJVW6NLymfipr66Pw2toH4cIxhmgICAgICAoNKDK6OkWIPQPAmhpcBElMMAB2ORKTFYc4KtzKfeLs2qgA==", - "0x17b4e2119e319c6b0ec1aa7f3e90dd13e4257cd4d9a6645825bb2487b76783eb": "4qAgtobEh4+Cel0m/kRhESVvA1MkdTc3e4HZrGyeD6/x/wI=", - "0x17c295c4a9f965eae4637d2573da221d7cfd3a013eddd7ba474fc96458d45379": "+QHRoAJ2LN2cz2FwnTqQ6smZZGhM2ggb3GKSaofN3+l/MVvFoBaxyvhNiY32ZSpUj+UkpvNSXHndQSAZo0wPi/LPlDIUoPbyw2wW3enDwnv6XwQmWRaUyZcBI0JLYqrK5rWzUWNvoI5cfT9PpYE8bA1E6upXcQeBCx60wAZ5WXFCbMzhTKujoHORZnO2umHBEnmFNwvLTqSxRCzFlXJMCpPlde4Pfk2+oLI5HZjZGU5c+TXzQ0tqn8AXniml2oWEjcH8zUTRKEfIoK0sRKCbM7P94laBHqtQjEOLaXFFTknP7u4W69TlWeYdoH/2+tJRdeMsB6DKHYTkCzZFrZF3mBLZmgOK8CScTGhooHy6MzHoa2NM2WuWYJcJLNBkjhNUNzZuW7A6dT/kGftbgICgycODZFws0/oVHZ6zpseGdpjeE9PJrZPWKYSdTv+NuR+gdKCH1lclUHQPLRpRY51wYiFnYDcp0FxWF0/xz0qO3tKgOAcGQQJAdWRsdFboQecF+upU/xGQXF4LyrpN1FVhPBmgsthtqf+nnM/9KftHf9sEiXGfGxiSdQCn15r+I1A1t0ig9Dojmi9cOEMZUWBXSb0AatojroavPfTk+QOxop62rJmA", - "0x1804ea724636165578bb4b624e72f565acea89edaa6c079ef5151b1828c0b661": "5J83zDlwd3Zzc3a+GAXcdA28YLV8j/VhK+jsQ/Ur/O1Fg4IB9A==", - "0x1f34fc03cdf5454399e6276addd94c8694abf22c8ee810a17c2064958a843e91": "+EOgIDjrKrO5pGKH+YfN6CEIyjSftQkTfruel8zOslPsgSmhoHJHbGFjaWVyQmxvY2siOjAsImJlcmxpbkJsb2NrIjow", - "0x203da3321706637d9e9add48e95bb73d6d70e180018e5fa69738262756766de1": "4qAghcjGmIrHq/rPo2JB9O47LJ/VWmZehrm/i0+gEweZygI=", - "0x23f8b1987739fecfa68b2c2fb73f363e3ac34e7f6f950a07f3a1f446142ba7a2": "5qAgnJhrpejteNkfUNMc9YRcDXqb8ki6X0NKzbWOLmAsmYSDas/A", - "0x242656b050fb8de3e94e2b5fb70f5fa188d266b91fe74bc5213969534ee367d1": "+NGAoGAMJXjbNctYrZ7LzMzJ727jv8IeT19Txg2SYO5LfjEogKC3NA903DQ+hIV1uerFmUVRS7l4eUHEros5CmP+LHPC0qCeLWWcVf5jkXtBG9iAwyKAwY8P5vUorEnpENP8fZG1oICAgICAoCixZQy2vcW2O6KqG7WN2e2rtMz4zihqK8VfNhzLuA30gKDeU9TP7u2Kn6y0kvGcf//zU6bnr9yC8RxvAlGsnm10EqBeXRhi8dbJz27ioLoK5WJ2ER0RfPRN3oWAex61YnxAgICAgA==", - "0x28512bf4017e6b8de51290e1807e88d14cd200901cee14a18209a81dbc5349f9": "+FGAgICAgICAgICg6mV+jSQpLRdcT1SZ6/W2v3fYGiSuO7GxCkTv+5tQmVSAgICAoBgE6nJGNhZVeLtLYk5y9WWs6ontqmwHnvUVGxgowLZhgIA=", - "0x2c0d69d4472eb109b377291a2239381954ccaac62df609365ea2b0165d257b19": "+FGAgICAgICAgICgCENEDGFZ6dJ2I4p5JH2JLJ4L1sXKkvyb5Pjr96n7T1GAgICgXWgKAZju1WNvy2MFhKXT2wPJX3ZPS1I8WnDz2vrirjCAgIA=", - "0x2c69e0eeffb68bff637cf2248bbc8787f92a24dc9e0827df5aa7d6f803ae671c": "+NGgvzO3yumlwUuyXp7hWieAkIJWqZ9qQ6ruct1WVQo2yeyAoG0KtJPjFMLupcHHUdvCLkzdyNpnJFUL3CnEqE9OJRUIgICAgKAdC4rmmMYjbMu26XHY7+AR9OED9dfSIPq1KBL0yfWB9qBOIHe0UMjCRPDyRzBwJZodMFKmLnLi1w6TradSFvkZmqAYEam6IoFvxmJMAp5dRl4HUWZX7oyzUJanRzFudx8JMoCAoH685mExqvza+zwEQySlgii6li83NUeOJ4kbcq3VZ5L3gICAgA==", - "0x2d382520fd35581f3ff1aac5a9ff60cd104b35867317d8cc0b1dbaadccdd441f": "+EOgIDiCgRJhbI8QAZAI5U2U/brCatoZSYPb5flPQR/BjxWhoDU4QmxvY2siOjAsImJ5emFudGl1bUJsb2NrIjowLCJj", - "0x31f2b0a2fbc74f41fec89726b4914762ba3aa6058f27923313c3b0e7e4252508": "+EKfNZUsxum0Cp1/KGzPIWCuUQmqvXqp6vNanV64s0dFxaGgb25zdGFudGlub3BsZUJsb2NrIjowLCJwZXRlcnNidXI=", - "0x32107d1bbbf88c0f7a9efeac65c09a820a895cd81a736ccf08d661321299ad3e": "+EKfMCs0zUhggQyA09yo3M9lblF6lxjOlue1I2hPMlSqYaGgLCJsb25kb25CbG9jayI6MCwiY2xpcXVlIjp7InBlcmk=", - "0x341643e66231b26aab5ac3036295b2b643b7c950a9f5c3fc8b7bea5c3cafd3b6": "4qAgn7rEah2ic87FZAOEg1Eca65vL1sVk8DQDnkRH8R8oyo=", - "0x3b624f5b59e55498f258d615ecde142e96411baf6a6465d094bd58b2f89e23db": "+PGg+WniGCsri2LFViSPD2AI60v5EgNhM2k9ug2q/McmbweAoGWB1/+BaWV6hcxd86mDlX985CoPRdpIyqqc0tfPbi8FgICAgICgbPnCnWjLc9dbMYduQoo+EkB7i26HlS8rh4ZEw8wdJCGAoE4VnAsH5tV6a4BruhlkD7np/YL4wEHf3a4LaGAkcU2GoK0rKDAreO4X8TZC8zi3CljjtTYsRRwc4Dc2LWu/mpvFoHcOAmlOcOKQMGWUmryLcwHpEFyazg5j2QsiOaq/3hlkoCP4sZh3Of7PpossL7c/Nj46w05/b5UKB/Oh9EYUK6eigICA", - "0x3f465333b2c81d203633e4d4ec7e9bd07083c8f3c9c11573912c3dfe04455782": "+EOgIMZ1AuPLNtGlYjd6gdpmROdRmPLSFoxJ0cQrKXfrfHehoGlvbiI6MzAsIkluaXRpYWxDaGFpbk93bmVyIjoiMHgw", - "0x4c87875cd3ff68af1593a2e4f85eb4ac50366124b238a0164e9ef08965ad84d8": "96AgIIavw53Qwo/f+up1DUPOEaWUgP38tYv8VdTECGmIuJWUYWJsZUVzcHJlc3NvIjp0cnVlfX0=", - "0x4e2077b450c8c244f0f2473070259a1d3052a62e72e2d70e93ada75216f9199a": "+EOgINv2WDSH/niY/t0p9sJ1u51PMGzwjSo0TP1KNFlSWM6hoG9kIjowLCJlcG9jaCI6MH0sImFyYml0cnVtIjp7IkVu", - "0x4fb9d92bbf4e0cff3b4f414cb084e39d50024afd2548d990cdbce26fdd77b95c": "4hug5qNFLPz/fLYNiYyMA8on2i4w4gV9H+rzr5YkGEJgIvQ=", - "0x50682c66b80df7b583962e261ed4b2e5e36b89523615c88b8e34460fdc104821": "+FGAgICAgICAgICAgICgMhB9G7v4jA96nv6sZcCaggqJXNgac2zPCNZhMhKZrT6AoOQEyTP4LX27AuOBOvBatXCzth7FoltcBcmE8lTPMR7egIA=", - "0x513ebe2de2b910415e45b8c655bd010d9f87ff660b2b58bcb069cd0779cb458f": "+HGgLqAZ5cAwgcwd7M2aISwCd5/2aCKaY2UE7M/JzI/3oDCAgICAgICAgICgNp9MjtdTQKJKULlg55rtf//k4AAI3u7NfvkrB1V60ROg61UhCk/48Zh/SL20MXDy3pzprNPZv9gPBJvGJz+b6q6AgICAgA==", - "0x535f847acf14dff05c33f2dda8f151525ceb0cf5271cc11a146d800e75663294": "4qAgEr3YLiIfen37rrBoFjCKfYxwBO4G6+jvvNiRdrtqZh4=", - "0x5d680a0198eed5636fcb630584a5d3db03c95f764f4b523c5a70f3dafae2ae30": "+GifMU7InCAcI6pg4jHjmTs5ZrM/8fVdGY7CWYCVerMgZbhG+EQBgKCSmoe0YddojWms1qYttF/CCIe1Hp1+9HjZ5s3UQs/kEqDF0kYBhvcjPJJ+fbLcxwPA5QC2U8qCJzt7+tgEXYWkcA==", - "0x5e5d1862f1d6c9cf6ee2a0ba0ae56276111d117cf44dde85807b1eb5627c4080": "56Ag7YHaAaqqO2S+9FQ0CTRs1QMz4z2gynCUpfTjj2hGu4WEBfXhAA==", - "0x631a9ebbd3c92f3a57424323b879f7a0b989f54b633e7a9f2f444b87186015d9": "+EOgIIzOE607Vcvsp238hPhYj8UCpHIyYEvxHVoDEsEscsqhoG1waWxlcyI6dHJ1ZSwiRGF0YUF2YWlsYWJpbGl0eUNv", - "0x63448c4bbccffa3209029078c2fe231d966dbf9e8bbd2ce53166f14c1ece2516": "+JGAoFk1bD5mhMIIeAWKxUbVQoMQu+7jQSnt4iV4zNufWFoBgICAgICAoL+l7HeCQAmfvTpr3iUE5WKucXn8w1hGjcHImeOUuZRUoKgZlnn77ntY4QWqcL7X4JUlMdnFDYZMoPwZ524qfFd1gICg8BLGMnnJsyI1LmOJSAq3iCDgE2g07tltmyPO9BUWK8eAgICA", - "0x6c1804b00f60ab535a00ff29e49a262234cc48eb5390330c18894e76b4625cc5": "+EOgIFJ4l4RQaLBXVkGB2nTHzk4JkizHgRXzJ99b0oeCilyhoDAwMDAwMDAiLCJHZW5lc2lzQmxvY2tOdW0iOjAsIkVu", - "0x6e82b9bbcbb31b27d5d02bfaa9d03e19604a992d4ae6c33adef9f1c3eda3f58f": "+JGggf+x9ilrm1chICUHQAgAu3Gi0NBa7uGZ2KIkPYkHwGyAgICAoFb2Oi/YyNanvMTaMScaOkvAHA7HzXJ6QiOkHz693Q9OgICAgICAoC04JSD9NVgfP/Gqxan/YM0QSzWGcxfYzAsduq3M3UQfgICgbBgEsA9gq1NaAP8p5JomIjTMSOtTkDMMGIlOdrRiXMWA", - "0x79b8933e203f9d74f6ead23d2d9dee2b4daa71b1be9a941033bbbfb1e6d811ec": "+QIdoOr0k6CaiNJc8P5AUlc1JkxgAK565VPgkyJu97iLuU0EoB3MTejex116q4W1Z7bM1BrTEkUblIp0E/ChQv1A1JNHlKSwAAAAAAAAAAAAc2VxdWVuY2VyoBfClcSp+WXq5GN9JXPaIh18/ToBPt3XukdPyWRY1FN5oFg/hhQPgOSf+hcl6uboyBQxuBcvAMTxaE7qCZMi0pO2oJinYwwfgcD7GCQuehsNSZZkE3P2QUHHDi/4+03IsmDfuQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEqhwQAAAAAAACAhGZw/iWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAKgAAAAAAAAAeAAAAAAAAACqIAAAAAAAAAAGEBfXhAA==", - "0x7a6a6d93e8c0dc2a3291fd191438314aa1181caf351914b98be0d5fedd2ba7f7": "5p8/vCBpa8LarkQ5v//FfL0hCCNs9PjMhF8V6ZZd7roBhYQF9eEA", - "0x7b2ae35cefca39fcac954af69948a4274e37eb6e96b919008d41c18efcb2f116": "+NGgiAoEB/D8cmJp2LuNgLxTk5whHZiwVZEcF1DpnePtBqOAgICAgKCB8Ea0qY59dMPZ1EvqojstfXI0q7vKVV3NL6FcxCFY+4CAgKCxgWJdWP6LmHSTvkfvzF5x5I7Mnx9tQUjWg/k/5O5lioCAoNdH5FYBhAGOZvTb2wDbS4UiTCR6hCYCcLppGJyUvBd6oLXgufoJstfIr67g+JeKwY+zFIKaS9WGtxlF3Fpd7qtpoJcSe0x8l6XSXae0gp++lol657/FNfSRmVepbhHAirfPgA==", - "0x81f046b4a98e7d74c3d9d44beaa23b2d7d7234abbbca555dcd2fa15cc42158fb": "+EOgIIBzjzlIbl+Sb84y26s+3m8wqB6NWpiKKmdTUmpPqLahoGdCbG9jayI6MCwiaXN0YW5idWxCbG9jayI6MCwibXVp", - "0x81ffb1f6296b9b5721202507400800bb71a2d0d05aeee199d8a2243d8907c06c": "+EOgIGGjC1AKR52t7JqtzTEPH5hMnctqby9txb20aZBgjE2hoGFibGVBcmJPUyI6dHJ1ZSwiQWxsb3dEZWJ1Z1ByZWNv", - "0x83a6c4e555a58b8009e5ebff5db5377043f2700ef7ae563c95e58f8857bdb2ae": "+NGAgICgF7TiEZ4xnGsOwap/PpDdE+QlfNTZpmRYJbskh7dng+uAoNXwiDan2jdoL7Zma2G1uzzLXwgTssHuXUHn43UAn/K+gICgkVdFv0T36wQwZzQZLAuhdU3s24tQFtaHr9keTR/wYAagVMqLQnQPSQRaE35Bsu88WxfQbz/GSfxqGUQd4QtLhHag/sEmowDfbXG1aQwQqPMSY4D60/5bk8Q4FESvPeLmauGAoP7QogjpLkn479HKj3i5qByeFMqZFJ0d83JWjAuU9uPygICAgA==", - "0x880a0407f0fc726269d8bb8d80bc53939c211d98b055911c1750e99de3ed06a3": "+FGAgICgMfKwovvHT0H+yJcmtJFHYro6pgWPJ5IzE8Ow5+QlJQiAgICg5+GN+clyEXYaTpEaZ3O+McdMuYO892YPaeVkmLMagI2AgICAgICAgIA=", - "0x923750cd63c4c4fa8034b75a1ae8c273e40da7e47f382826e9b84245e3b1d325": "+LGAgICgUGgsZrgN97WDli4mHtSy5eNriVI2FciLjjRGD9wQSCGg4uW+2bfOCbnVnRsODB8EcslhwI9Bw4pBSE0hWX0rsN+AgKDSrmQjKp/y7OFHY7ieSat3dcKwoFMTh/63Qt/OpWZjlKCznUANpP6nM8epBPe4jZcandMuDdU5xyaaEGuBJs18doCAoO/FaHPRT0OdcXCeui5wmni7cfR766nOIYfM2S9fwuSCgICAgIA=", - "0x929a87b461d7688d69acd6a62db45fc20887b51e9d7ef478d9e6cdd442cfe412": "+QIRoAt9p6q+waUSpzR/lxothrbzlCpxHPPmCFfNpMdvDqxjoJK66RmVcnlQkDPtb9SpjSqvTm4cTdw+qXB5cq8tmtv3oOO0hePj9T5uY/E23rk4QNbUPgLRfrKXs+h6QABKa5YKoNaUsadg82F7VBOg7howknRO4LnlmJG914rrlZICMbSRoCxp4O7/tov/Y3zyJIu8h4f5KiTcnggn31qn1vgDrmccoHsq41zvyjn8rJVK9plIpCdON+tulrkZAI1BwY78svEWoG6CubvLsxsn1dAr+qnQPhlgSpktSubDOt758cPto/WPoFE+vi3iuRBBXkW4xlW9AQ2fh/9mCytYvLBpzQd5y0WPoJI3UM1jxMT6gDS3WhrownPkDafkfzgoJum4QkXjsdMloCQmVrBQ+43j6U4rX7cPX6GI0ma5H+dLxSE5aVNO42fRoDtiT1tZ5VSY8ljWFezeFC6WQRuvamRl0JS9WLL4niPboM19l1+JO+jWw1WUII9Di0EiLffM24wUdwWv0GWUd9Q8oNDWLDYsX2xz8CesEESFd0xBc1RDTwKLCeru4GlKC4croGNEjEu8z/oyCQKQeML+Ix2Wbb+ei70s5TFm8UweziUWoIOmxOVVpYuACeXr/121N3BD8nAO965WPJXlj4hXvbKuoM6ve4DuVxj45Q8jz2EsxRAclcSp0DGQT6waOBLKOTWegA==", - "0x92bae919957279509033ed6fd4a98d2aaf4e6e1c4ddc3ea9707972af2d9adbf7": "+JGAgICgm8+ZF5swXx1UGFUItHzGH7D4uATdRJqbYO0Givex1i+AgKCqSZWMdhdzVBRCYVAaHS2p+Tnf0aOalMrmsVRuBhoaqICgYxqeu9PJLzpXQkMjuHn3oLmJ9UtjPnqfL0RLhxhgFdmAgICAgICgCGWdPF5EIoEC+//l62MuRCN4NXlsBKQTKFXGMr6ZFtWA", - "0x9bcf99179b305f1d54185508b47cc61fb0f8b804dd449a9b60ed068af7b1d62f": "4qAgTekhWDdyi/Jw3FkGldWMkaUaungCdxT+3I29E9BhDQE=", - "0xa1dc3d3e2d17fa3885ad491bd8962a108558ffb95e2c6bf75dfbbce9984f83c1": "56AgT4KR6c9uV1ojjGBJbTOyhJ76SUgjaxvvdMoDHmAX04WEAehIAA==", - "0xa8199679fbee7b58e105aa70bed7e0952531d9c50d864ca0fc19e76e2a7c5775": "56Ag1INQeIC/JIgdFBIu31SzY4AFeVpxZc+Un4HvmruJEYWEqAWIqg==", - "0xb10c69de97d754bc5ab619f97531a41d1f31247bb5eaaa07a1edbad3db90ea5b": "+EOgIJ4+kkzrpv5T3VZRoUyI659vuebJdjNppgjjMQ/lcJqhoG1taXR0ZWUiOmZhbHNlLCJJbml0aWFsQXJiT1NWZXJz", - "0xbfa5ec778240099fbd3a6bde2504e562ae7179fcc358468dc1c899e394b99454": "+FGAgICAgICAgICAgICgVSZcqG5/JjeVfDSniLtFiv47Xi6zJtt+p4uaJEPj9y2AoHpqbZPowNwqMpH9GRQ4MUqhGByvNRkUuYvg1f7dK6f3gIA=", - "0xc35375fcb9edd9ed3ea5c8ebd86429ef1002d5eb7a9185a3f1c36070e7f3704f": "+EKfICTsYlac8Hf07+EmnYOsWzO3uXmRR5cP61e7a41Q/aGgayI6MCwiZGFvRm9ya1N1cHBvcnQiOnRydWUsImVpcDE=", - "0xc705688414328dcec2054679d3b1290a99052d490932cde04e7573a7d13163cc": "4qAgBVWqMVfyPq9BYjWvYOWYfoC7evQ6AIWaQQ4xLLWkIQo=", - "0xc9c383645c2cd3fa151d9eb3a6c7867698de13d3c9ad93d629849d4eff8db91f": "+FGAgICAoCwNadRHLrEJs3cpGiI5OBlUzKrGLfYJNl6isBZdJXsZgICAgICAgICgL8jNDVqHOgQ1+CYrZZXb67pOWfI+6EmcP0H3ucyD0oqAgIA=", - "0xcd7d975f893be8d6c35594208f438b41222df7ccdb8c147705afd0659477d43c": "+JGAoMcFaIQUMo3OwgVGedOxKQqZBS1JCTLN4E51c6fRMWPMgKA0FkPmYjGyaqtawwNilbK2Q7fJUKn1w/yLe+pcPK/TtoCAgICAgKBTX4R6zxTf8Fwz8t2o8VFSXOsM9SccwRoUbYAOdWYylICAgKBzB0aPubLhCj/sedC8D5PpgJwGoALacauT33KjPuWT9YCA", - "0xceaf7b80ee5718f8e50f23cf612cc5101c95c4a9d031904fac1a3812ca39359e": "+JGgT7nZK79ODP87T0FMsITjnVACSv0lSNmQzbzib913uVyAgKBmRbYRva5xyneuxgViQ5fpzWjmGP7JgIh6kpLpiVibeICgDoAuLw6YGNfZtC2AXcC7CLGVHYGkS7WKxxlIRRiGW6yAgICAoB80/APN9UVDmeYnat3ZTIaUq/IsjugQoXwgZJWKhD6RgICAgICA", - "0xd0d62c362c5f6c73f027ac104485774c417354434f028b09eaeee0694a0b872b": "+HGAgICAgKB+vCKOiA7OTazHGGgEzhqFSUAszYLn/uhdZ2nJSQ5jZICAgKBMh4dc0/9orxWTouT4XrSsUDZhJLI4oBZOnvCJZa2E2ICAgICAoBu6if+hQn7sCZOuecy9mPJNAJHXkqygtICF7PNygcM8gA==", - "0xd694b1a760f3617b5413a0ee1a3092744ee0b9e59891bdd78aeb95920231b491": "+NGgGEZbng8BaVhm+1anw9sttFIAECkf4doy3moDqUidVtKAgICAoDRspog7lwDsL/yTv88sQswPORBzZdT92/mZqjiChMiVoCA9ozIXBmN9nprdSOlbtz1tcOGAAY5fppc4JidWdm3hgICgodw9Pi0X+jiFrUkb2JYqEIVY/7leLGv3Xfu86ZhPg8GAgICgPHKXITJKaTIxa95b1Ng/acVFMFMOewvLRw4x+H0lcvOAoHcDcxsQOmUBTIe+RmifPWr8VLrM0JvdQvk+hl9rgakrgA==", - "0xde53d4cfeeed8a9facb492f19c7ffff353a6e7afdc82f11c6f0251ac9e6d7412": "5qAgtioVwzR2bB+a0BX80gbybPyeVB5lDExEyHgQcJ7gIISDBkq6", - "0xe3b485e3e3f53e6e63f136deb93840d6d43e02d17eb297b3e87a40004a6b960a": "+JGgoZtNdx3Vm+EfbvepfvlxGxUm3p2u1IHGyFzVhxKfj/WgP0ZTM7LIHSA2M+TU7H6b0HCDyPPJwRVzkSw9/gRFV4KAgICAgICAoLEMad6X11S8WrYZ+XUxpB0fMSR7teqqB6HtutPbkOpbgICAgKAoUSv0AX5rjeUSkOGAfojRTNIAkBzuFKGCCagdvFNJ+YCA", - "0xe404c933f82d7dbb02e3813af05ab570b3b61ec5a25b5c05c984f254cf311ede": "+EKfMac3BAKInN3RCqOBIiEYHRLUZfXloOdpZxOv/MBbOaGgeyJjaGFpbklkIjo0MTIzNDYsImhvbWVzdGVhZEJsb2M=", - "0xe6a3452cfcff7cb60d898c8c03ca27da2e30e2057d1feaf3af962418426022f4": "+FGAgKAvyIN+KVcfMthpWD6HbcC+jvYv3T4D2epXi3KTPzXYa4CAgICAgICgw1N1/Lnt2e0+pcjr2GQp7xAC1et6kYWj8cNgcOfzcE+AgICAgIA=", - "0xefc56873d14f439d71709eba2e709a78bb71f47beba9ce2187ccd92f5fc2e482": "4qAgoMck4u+rLTfzAlELAfMmZx4WJpJzg39SjJIMG9rqe2Y=", - "0xf969e2182b2b8b62c556248f0f6008eb4bf912036133693dba0daafcc7266f07": "+EOgIIRPBOJCTGZwtGyApze6fAuimDWGj0//iS2kogBFF6WhoDUwQmxvY2siOjAsImVpcDE1NUJsb2NrIjowLCJlaXAx", - "0xfed0a208e92e49f8efd1ca8f78b9a81c9e14ca99149d1df372568c0b94f6e3f2": "+EOgIP4+RlG26qvgBENz2PjFXiVeO2nnuQv5mNs24kidDOqhoDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw" - } - }, - "UserWasms": {}, - "BatchInfo": [ - { - "Number": 43, - "BlockHash": "0xd0f199f0d787eb68878b458c27c3aea60a463c1f24d29162bbaafeb329b72849", - "Data": "AAAAAGZvrOQAAAAAZnEMdAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAQAb0h0AgKqqquq/AbpPfbjXRQ99aHAHsGUNgDqom5mbmdvqZm7uZtbQYLCpLW5uy+7mAZGHhoY+3gugz3099gAcjAWRmCQGuNMmtP/587/z/v9/+9df/v7Hb//701//RNSev/33j9/++AYKijM0gq9vkJZx1UZp1+ZVoSyLcaqinMEXEBSompFgmWdV/rUrktobax1gvBRQN/5zL57rxdA5ObfxnuzF43u3JJt65VoGfn4OoESGSkwUeQBz1aBpjpsefOEszjEcjhPMAbzwqERxBr4ogqvYedXGr+qDMvD1DdqlSdAIvkjCGJEBsDfDsFiOMAQOoIynUvmTd0zSlKCwjKG5OEMMImkyTjAWYzGC4eOczRksxfI4Syg2RimGETGXsnjKkAnN0TmJY+DnAPp4f3VxFqVd01Rzg9oZfAEFusovebNGQcTs+URLuCpiz/vCyKd3ZcOHt8by8BzS2CLyhGOlDRxAslSvDI1R2jVNNTeoncEXOHmqLkpOJFiGod4Mybz9mqV1wsb3YFWGsOaIcLCuMc24L92XV0nimBADpoa9kxYwAgfQTtEcJy8Evr5Bss9oAl8AQggh/P138HMAyatL66hBY/1C0TwiFI1dN4MvYEiOpkuRYBnGr2frP29irDXh9JEs226SajcSq73IT0KoESXlltQpR1u+FgWEEEIIIRQmCCGEEEJYbeAAcoSiBo31C0XziJC5kquF+r63xjw+CfjattebfyU8zQ+4i27R7kRhD2N1BLVeHMMDoEMVKgUDX7V5B76+QZym3eI0kzX2TrA0jylEczyJYywieJ7mWQrlGEnwNMvSRJLQBIN4cABxo6dgLzMa7bHrcvDVLq/XAdyrTOiapmsVanZ6dWltOMSSuizTXOVVGs9V14Kvb/VCDRTub9B3E/gCZ1XSxV/aBgVqKHAAvXaa/eMb6CjWQf0avxaEN2FX5XMcbDfbtAe68/j27AuWbNpnsH+K9WPgfcRgch186K65goPZlKMXatS3NmKFduumtFGPFONubj1tSrJ8li855RXWsHiSOqRadirbJQc/P4dvcBrjNi0t0hxBQWCP4ADSsnplI2ptu7Sdu7FA84xad0nmESEzJMnzXnFx5t6eb7JHmvdozYtejUYdpDhUpUSS7zPT4dql6HhrNUrjGjvHaizAGz4N+Vh2rojxu2fTkmSUtR3WTALuv/D5IXNzqtUEIxvrnVQq8PPzzx+wmYosksEzaadX8+yGEo9KGdMyxjOZfmja4zVbkn30bzW19VIHNFNZJJvIbwu+LmYjkI9CrYNmGq3mWZFFhEO5dB9kILuMwQczcEPNjv3wbcrz37gQP45XeRIyzZemMcSKFy5OeQ/XahOb3RMlG2imIqxUypvXxr+IuvlBKaQ6C7vjPnTa43mqeagRxp0pjgtHTUAirUxede8JCjyH7K7slSxOtrwImqMdyY/X1sGy3NqcMea3mAAbWyA1/bwDR9EsJ6GEc6g82r1VXk86b+9UKrp8ucwxDIZzJc/BXpVzqthJ7HPdSAOOhS4/5M9Bu/Q7v1zciT9qPsW/o8c8Qp1Gkd8uzOceshwJNtDEQH8eaO7FwbnKMelkMuftUC1W0zgTx9mBHw09L3k46l1n2cKkB1rLv5Emm9GNdKycKG6/0aK5jsr21D9KjWjeLKVb7reXPVHmSQjPJ+BGmgwsG36UWraT2LueA+SItozx8Nz3DM+s7mskTNQylkdYsgfcSBMznZwKz4fuHHa+saVTHQfYq3x/5k2rstNZ1CnS3wwNP1MlcCNN9Fmf9cZ5uMPSGv68jleJNWhC+PD5MbQhI5ZxocNmDCn1BtxIk8GpxsW6xKGAN3R/5vOc4s9dJmtz36fDbHj2YJloWQdRwIAbaXKlJ/eu5DPcMYtu8AW7Y/crtazVMPf1vcbZ9YQrotCl9ukO3EgTzeYC91GUHRzOl4xTlPr5MDdRNxUhL6vidFWfAVwShlBFDriRJsrb15wCn4yzlO1+zxDCCpO7AdU7kTM0LhRlN9vNEG+kGAE30uRYDUda+xgdnZ2YQcceb8r6cHEj3DDqDZ/2GXXvsTuFdXJKgBtpskuJVGaf3GUa4e6mVhwrBnb7pBmytrlRfF6Y2hd2NIouGoEbaUIGGDZDk9zds+X0JC4+Ar/tZkb3tIvJOu35SM95fxUZhXeAG6VieiM3leFtacoH+Rm4xQ4Tb0t85i55e9erhpHY93eLB4UaMXAjTZKJahkn1Of5VCX6/oiZWJGocXOSYZz12dzUy3HDL2+XMo7AjTQh6IH2ROpRGCK/0K5Tp1ht72puvxF+etiqLvC5xvfmO0k/wI00uePDkJbYai1TudnHGwU3L9QCtkRJRrJv3aJCbE5u1vmxI+BGmhBCag06YYdHH7NJq+MEr7BDK+CyMOXcfFs/3cqcHWNfiBW4USqMPU326zj43LvoGenkW/DyoGH7NmgPC44DVmkTH7/OjDCFUW+kybiElSnLFuSfr1DUq5TDumtdZ5Z2wpzIsHg9oD/vCO2ytwA3SmVpVyM+z1btcQaFrRhhN+xjEEk1DxzWKVE3+TgWc0yYP8EbaRJJvB+blckJt+BiuHWMPT2c1G4aPi3y5aQ68ngabmprtPMFuJEmkLArOqQiN1Tq8SKpcuBGeETsFTF1Ie5KfuoPG1uzIf2RgRtpUk4zal2+thmGnAIK5VqdRUTmEtKm9ikK6CRPnPSqN897C9woFWeT357jp+sQYWzwDJGBb85ne+6PYVIW0X9dsTHLmw06XrD9RppkJhP7TNDxlyB9HVNpY022n3P/slnscxPIS//Zzzk9+nklADfSxO+y3s1ITRRaBS3jsivnW+pWGqKkCfuw4jEPwo9X9VogQ+BGqcwn9Kjh6cW8xTT18vlo1+qbqu13Frsk7+EIyxIrjQT3zjr5JoqSKExWHfiVd7csdhJ8f8C3vLe3p66s+kNXOZGQpc7WUn4GLP7nTwoiRwld06TzSq6OHJ6KaXbCqaDfH3rLBN8iC6Y1tv6CJVxVXOx+zl1GZLYCgC5gmtcbOAAdT70kVkl9qoijfn4A" - } - ], - "DelayedMsg": null, - "StartState": { - "BlockHash": "0x79b8933e203f9d74f6ead23d2d9dee2b4daa71b1be9a941033bbbfb1e6d811ec", - "SendRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "Batch": 43, - "PosInBatch": 0, - "HotShotHeight": 42 - }, - "DebugChain": true, - "BlockHeight": 43, - "HotShotCommitment": [ - 28, - 178, - 89, - 57, - 232, - 249, - 126, - 164, - 18, - 33, - 26, - 190, - 47, - 120, - 77, - 27, - 42, - 63, - 81, - 189, - 249, - 231, - 124, - 139, - 92, - 109, - 122, - 31, - 62, - 5, - 195, - 8 - ], - "HotShotLiveness": true -} \ No newline at end of file diff --git a/system_tests/espresso_arbos_test.go b/system_tests/espresso_arbos_test.go index 4655a79688..91474e132a 100644 --- a/system_tests/espresso_arbos_test.go +++ b/system_tests/espresso_arbos_test.go @@ -39,12 +39,12 @@ func EspressoArbOSTestChainConfig() *params.ChainConfig { } func EspressoTestChainParams() params.ArbitrumChainParams { return params.ArbitrumChainParams{ - EnableArbOS: true, - AllowDebugPrecompiles: true, - DataAvailabilityCommittee: false, - InitialArbOSVersion: 31, - InitialChainOwner: common.Address{}, - EnableEspresso: false, + EnableArbOS: true, + AllowDebugPrecompiles: true, + DataAvailabilityCommittee: false, + InitialArbOSVersion: 31, + InitialChainOwner: common.Address{}, + EspressoTEEVerifierAddress: common.Address{}, } } @@ -54,7 +54,8 @@ func waitForConfigUpdate(t *testing.T, ctx context.Context, builder *NodeBuilder newArbOSConfig, err := builder.L2.ExecNode.GetArbOSConfigAtHeight(0) Require(t, err) - if newArbOSConfig.ArbitrumChainParams.EnableEspresso != false { + emptyAddress := common.Address{} + if newArbOSConfig.ArbitrumChainParams.EspressoTEEVerifierAddress != emptyAddress { return false } Require(t, err) @@ -66,7 +67,7 @@ func TestEspressoArbOSConfig(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - builder, cleanup := createL1AndL2Node(ctx, t) + builder, cleanup := createL1AndL2Node(ctx, t, true) defer cleanup() err := waitForL1Node(ctx) @@ -98,8 +99,8 @@ func TestEspressoArbOSConfig(t *testing.T) { Require(t, err) // assert that espresso is initially enabled - if initialArbOSConfig.ArbitrumChainParams.EnableEspresso != true { - err = fmt.Errorf("Initial config should have EnableEspresso == true!") + if initialArbOSConfig.ArbitrumChainParams.EspressoTEEVerifierAddress != common.HexToAddress(verifierAddress) { + err = fmt.Errorf("Initial config should have EspressoTEEVerifierAddress == common.HexToAddress(verifierAddress)!") } Require(t, err) diff --git a/system_tests/espresso_e2e_test.go b/system_tests/espresso_e2e_test.go index f48bcb2bf6..8a6784eb29 100644 --- a/system_tests/espresso_e2e_test.go +++ b/system_tests/espresso_e2e_test.go @@ -4,16 +4,14 @@ import ( "context" "encoding/json" "math/big" - "os" "os/exec" "testing" "time" lightclient "github.com/EspressoSystems/espresso-sequencer-go/light-client" - lightclientmock "github.com/EspressoSystems/espresso-sequencer-go/light-client-mock" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/offchainlabs/nitro/arbutil" @@ -26,8 +24,10 @@ var workingDir = "./espresso-e2e" // light client proxy var lightClientAddress = "0x60571c8f4b52954a24a5e7306d435e951528d963" +// TODO: espresso TEE verifier address +var verifierAddress = "0x60571c8f4b52954a24a5e7306d435e951528d963" + var hotShotUrl = "http://127.0.0.1:41000" -var delayThreshold uint64 = 10 var ( jitValidationPort = 54320 @@ -36,7 +36,7 @@ var ( func runEspresso() func() { shutdown := func() { - p := exec.Command("docker", "compose", "down") + p := exec.Command("docker", "compose", "down", "--volumes") p.Dir = workingDir err := p.Run() if err != nil { @@ -185,7 +185,7 @@ func TestEspressoE2E(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - builder, cleanup := createL1AndL2Node(ctx, t) + builder, cleanup := createL1AndL2Node(ctx, t, true) defer cleanup() err := waitForL1Node(ctx) @@ -279,66 +279,6 @@ func TestEspressoE2E(t *testing.T) { return balance2.Cmp(transferAmount) >= 0 }) Require(t, err) - - // Pause l1 height and verify that the escape hatch is working - checkEscapeHatch := os.Getenv("E2E_SKIP_ESCAPE_HATCH_TEST") - if checkEscapeHatch == "" { - log.Info("Checking the escape hatch") - // Start to check the escape hatch - address := common.HexToAddress(lightClientAddress) - - txOpts := builder.L1Info.GetDefaultTransactOpts("Faucet", ctx) - - // Freeze the l1 height - err := lightclientmock.FreezeL1Height(t, builder.L1.Client, address, &txOpts) - log.Info("waiting for light client to report hotshot is down") - Require(t, err) - err = waitForWith(ctx, 10*time.Minute, 1*time.Second, func() bool { - isLive, err := lightclientmock.IsHotShotLive(t, builder.L1.Client, address, uint64(delayThreshold)) - if err != nil { - return false - } - return !isLive - }) - Require(t, err) - log.Info("light client has reported that hotshot is down") - // Wait for the switch to be totally finished - currMsg, err := builder.L2.ConsensusNode.TxStreamer.GetMessageCount() - Require(t, err) - log.Info("waiting for message count", "currMsg", currMsg) - var validatedMsg arbutil.MessageIndex - err = waitForWith(ctx, 6*time.Minute, 60*time.Second, func() bool { - validatedCnt := builder.L2.ConsensusNode.BlockValidator.Validated(t) - log.Info("Validation status", "validatedCnt", validatedCnt, "msgCnt", msgCnt) - if validatedCnt >= currMsg { - validatedMsg = validatedCnt - return true - } - return false - }) - Require(t, err) - err = checkTransferTxOnL2(t, ctx, l2Node, "User12", l2Info) - Require(t, err) - err = checkTransferTxOnL2(t, ctx, l2Node, "User13", l2Info) - Require(t, err) - - err = waitForWith(ctx, 3*time.Minute, 20*time.Second, func() bool { - validated := builder.L2.ConsensusNode.BlockValidator.Validated(t) - return validated >= validatedMsg - }) - Require(t, err) - - // Unfreeze the l1 height - err = lightclientmock.UnfreezeL1Height(t, builder.L1.Client, address, &txOpts) - Require(t, err) - - // Check if the validated count is increasing - err = waitForWith(ctx, 3*time.Minute, 20*time.Second, func() bool { - validated := builder.L2.ConsensusNode.BlockValidator.Validated(t) - return validated >= validatedMsg+10 - }) - Require(t, err) - } } func checkTransferTxOnL2( diff --git a/system_tests/espresso_escape_hatch_test.go b/system_tests/espresso_escape_hatch_test.go new file mode 100644 index 0000000000..735bcaab77 --- /dev/null +++ b/system_tests/espresso_escape_hatch_test.go @@ -0,0 +1,143 @@ +package arbtest + +import ( + "context" + "encoding/json" + "os/exec" + "testing" + "time" + + lightclientmock "github.com/EspressoSystems/espresso-sequencer-go/light-client-mock" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/offchainlabs/nitro/arbutil" +) + +func TestEspressoEscapeHatch(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // Disabling the delayed sequencer helps up check the + // message count easily + builder, cleanup := createL1AndL2Node(ctx, t, false) + defer cleanup() + + err := waitForL1Node(ctx) + Require(t, err) + + cleanEspresso := runEspresso() + defer cleanEspresso() + + // wait for the builder + err = waitForEspressoNode(ctx) + Require(t, err) + + l2Node := builder.L2 + l2Info := builder.L2Info + + // wait for the latest hotshot block + err = waitFor(ctx, func() bool { + out, err := exec.Command("curl", "http://127.0.0.1:41000/status/block-height", "-L").Output() + if err != nil { + return false + } + h := 0 + err = json.Unmarshal(out, &h) + if err != nil { + return false + } + // Wait for the hotshot to generate some blocks to better simulate the real-world environment. + // Chosen based on intuition; no empirical data supports this value. + return h > 10 + }) + Require(t, err) + + address := common.HexToAddress(lightClientAddress) + txOpts := builder.L1Info.GetDefaultTransactOpts("Faucet", ctx) + + if builder.L2.ConsensusNode.TxStreamer.UseEscapeHatch { + t.Fatal("testing not using escape hatch first") + } + log.Info("Checking turning off the escape hatch") + + // Start to check the escape hatch + + // Freeze the l1 height + err = lightclientmock.FreezeL1Height(t, builder.L1.Client, address, &txOpts) + Require(t, err) + log.Info("waiting for light client to report hotshot is down") + err = waitForWith(ctx, 10*time.Minute, 10*time.Second, func() bool { + log.Info("waiting for hotshot down") + return builder.L2.ConsensusNode.TxStreamer.HotshotDown + }) + Require(t, err) + + log.Info("light client has reported that hotshot is down") + + // Wait for the switch to be totally finished + currMsg, err := builder.L2.ConsensusNode.TxStreamer.GetMessageCount() + Require(t, err) + + log.Info("waiting for message count", "currMsg", currMsg) + var validatedMsg arbutil.MessageIndex + err = waitForWith(ctx, 6*time.Minute, 60*time.Second, func() bool { + validatedCnt := builder.L2.ConsensusNode.BlockValidator.Validated(t) + log.Info("Validation status", "validatedCnt", validatedCnt, "currCnt", currMsg) + if validatedCnt >= currMsg { + validatedMsg = validatedCnt + return true + } + return false + }) + Require(t, err) + err = checkTransferTxOnL2(t, ctx, l2Node, "User12", l2Info) + Require(t, err) + err = checkTransferTxOnL2(t, ctx, l2Node, "User13", l2Info) + Require(t, err) + + time.Sleep(20 * time.Second) + validated := builder.L2.ConsensusNode.BlockValidator.Validated(t) + if validated > validatedMsg { + t.Fatal("Escape hatch is not used. Validated messages should not increase anymore") + } + + log.Info("setting hotshot back") + // Unfreeze the l1 height + err = lightclientmock.UnfreezeL1Height(t, builder.L1.Client, address, &txOpts) + Require(t, err) + + // Check if the validated count is increasing after hotshot goes back live + err = waitForWith(ctx, 3*time.Minute, 20*time.Second, func() bool { + validated := builder.L2.ConsensusNode.BlockValidator.Validated(t) + return validated > validatedMsg + }) + Require(t, err) + + log.Info("testing escape hatch") + // Modify it manually + builder.L2.ConsensusNode.TxStreamer.UseEscapeHatch = true + + err = lightclientmock.FreezeL1Height(t, builder.L1.Client, address, &txOpts) + Require(t, err) + + err = waitForWith(ctx, 10*time.Minute, 10*time.Second, func() bool { + log.Info("waiting for hotshot down") + return builder.L2.ConsensusNode.TxStreamer.HotshotDown + }) + Require(t, err) + + err = checkTransferTxOnL2(t, ctx, l2Node, "User14", l2Info) + Require(t, err) + err = checkTransferTxOnL2(t, ctx, l2Node, "User15", l2Info) + Require(t, err) + currMsg, err = builder.L2.ConsensusNode.TxStreamer.GetMessageCount() + Require(t, err) + // Escape hatch is on, so the validated count should keep increasing + err = waitForWith(ctx, 10*time.Minute, 10*time.Second, func() bool { + validated := builder.L2.ConsensusNode.BlockValidator.Validated(t) + return validated >= currMsg + }) + Require(t, err) + // TODO: Find a way to check if any hotshot transaction is submitted, + // then set the hotshot live again. +} diff --git a/system_tests/espresso_finality_node_test.go b/system_tests/espresso_finality_node_test.go index 947312a682..f46637a40d 100644 --- a/system_tests/espresso_finality_node_test.go +++ b/system_tests/espresso_finality_node_test.go @@ -28,8 +28,6 @@ func createEspressoFinalityNode(t *testing.T, builder *NodeBuilder) (*TestClient execConfig.Sequencer.EspressoFinalityNodeConfig.StartBlock = 1 execConfig.Sequencer.EspressoFinalityNodeConfig.HotShotUrl = hotShotUrl - builder.nodeConfig.TransactionStreamer.SovereignSequencerEnabled = false - return builder.Build2ndNode(t, &SecondNodeParams{ nodeConfig: nodeConfig, execConfig: execConfig, @@ -43,7 +41,7 @@ func TestEspressoFinalityNode(t *testing.T) { valNodeCleanup := createValidationNode(ctx, t, true) defer valNodeCleanup() - builder, cleanup := createL1AndL2Node(ctx, t) + builder, cleanup := createL1AndL2Node(ctx, t, true) defer cleanup() err := waitForL1Node(ctx) diff --git a/system_tests/espresso_sovereign_sequencer_test.go b/system_tests/espresso_sovereign_sequencer_test.go index 39b2106076..3d203cf20c 100644 --- a/system_tests/espresso_sovereign_sequencer_test.go +++ b/system_tests/espresso_sovereign_sequencer_test.go @@ -11,7 +11,11 @@ import ( "github.com/ethereum/go-ethereum/common" ) -func createL1AndL2Node(ctx context.Context, t *testing.T) (*NodeBuilder, func()) { +func createL1AndL2Node( + ctx context.Context, + t *testing.T, + delayedSequencer bool, +) (*NodeBuilder, func()) { builder := NewNodeBuilder(ctx).DefaultConfig(t, true) builder.useL1StackConfig = true // Do not overwrite the L1 stack config when building builder.l1StackConfig.HTTPPort = 8545 @@ -21,7 +25,7 @@ func createL1AndL2Node(ctx context.Context, t *testing.T) (*NodeBuilder, func()) builder.l1StackConfig.WSHost = "0.0.0.0" builder.l1StackConfig.DataDir = t.TempDir() builder.l1StackConfig.WSModules = append(builder.l1StackConfig.WSModules, "eth") - builder.chainConfig.ArbitrumChainParams.EnableEspresso = true + builder.chainConfig.ArbitrumChainParams.EspressoTEEVerifierAddress = common.HexToAddress(verifierAddress) // poster config builder.nodeConfig.BatchPoster.Enable = true @@ -36,25 +40,17 @@ func createL1AndL2Node(ctx context.Context, t *testing.T) (*NodeBuilder, func()) builder.nodeConfig.BlockValidator.Enable = true builder.nodeConfig.BlockValidator.ValidationPoll = 2 * time.Second builder.nodeConfig.BlockValidator.ValidationServer.URL = fmt.Sprintf("ws://127.0.0.1:%d", arbValidationPort) - builder.nodeConfig.DelayedSequencer.Enable = true + builder.nodeConfig.DelayedSequencer.Enable = delayedSequencer builder.nodeConfig.DelayedSequencer.FinalizeDistance = 1 // sequencer config builder.nodeConfig.Sequencer = true builder.nodeConfig.ParentChainReader.Enable = true // This flag is necessary to enable sequencing transactions with espresso behavior builder.nodeConfig.Dangerous.NoSequencerCoordinator = true - builder.execConfig.Sequencer.EnableEspressoSovereign = true builder.execConfig.Sequencer.Enable = true - builder.execConfig.Sequencer.LightClientAddress = lightClientAddress - builder.execConfig.Sequencer.SwitchDelayThreshold = 5 builder.execConfig.Caching.StateScheme = "hash" builder.execConfig.Caching.Archive = true - // transaction stream config - builder.nodeConfig.TransactionStreamer.SovereignSequencerEnabled = true - builder.nodeConfig.TransactionStreamer.EspressoNamespace = builder.chainConfig.ChainID.Uint64() - builder.nodeConfig.TransactionStreamer.HotShotUrl = hotShotUrl - cleanup := builder.Build(t) mnemonic := "indoor dish desk flag debris potato excuse depart ticket judge file exit" @@ -72,7 +68,7 @@ func TestEspressoSovereignSequencer(t *testing.T) { valNodeCleanup := createValidationNode(ctx, t, true) defer valNodeCleanup() - builder, cleanup := createL1AndL2Node(ctx, t) + builder, cleanup := createL1AndL2Node(ctx, t, true) defer cleanup() err := waitForL1Node(ctx) diff --git a/system_tests/full_challenge_impl_test.go b/system_tests/full_challenge_impl_test.go index ddc229074c..6fe0a0e6af 100644 --- a/system_tests/full_challenge_impl_test.go +++ b/system_tests/full_challenge_impl_test.go @@ -160,7 +160,7 @@ func makeBatch(t *testing.T, l2Node *arbnode.Node, l2Info *BlockchainTestInfo, b seqNum := new(big.Int).Lsh(common.Big1, 256) seqNum.Sub(seqNum, common.Big1) - tx, err := seqInbox.AddSequencerL2BatchFromOrigin8f111f3c(sequencer, seqNum, message, big.NewInt(1), common.Address{}, big.NewInt(0), big.NewInt(0)) + tx, err := seqInbox.AddSequencerL2Batch99020501(sequencer, seqNum, message, big.NewInt(1), common.Address{}, big.NewInt(0), big.NewInt(0), []byte{}) Require(t, err) receipt, err := EnsureTxSucceeded(ctx, backend, tx) Require(t, err) @@ -206,6 +206,13 @@ func setupSequencerInboxStub(ctx context.Context, t *testing.T, l1Info *Blockcha DelaySeconds: big.NewInt(10000), FutureSeconds: big.NewInt(10000), } + + // Deploy EspressoTEEVerifier Mock + espressoTEEVerifierAddr, tx, _, err := mocksgen.DeployEspressoTEEVerifierMock(&txOpts, l1Client) + Require(t, err) + _, err = EnsureTxSucceeded(ctx, l1Client, tx) + Require(t, err) + seqInboxAddr, tx, seqInbox, err := mocksgen.DeploySequencerInboxStub( &txOpts, l1Client, @@ -215,6 +222,7 @@ func setupSequencerInboxStub(ctx context.Context, t *testing.T, l1Info *Blockcha big.NewInt(117964), reader4844, false, + espressoTEEVerifierAddr, ) Require(t, err) _, err = EnsureTxSucceeded(ctx, l1Client, tx) diff --git a/system_tests/meaningless_reorg_test.go b/system_tests/meaningless_reorg_test.go index 06a5d3d2b3..dba8b9cbe9 100644 --- a/system_tests/meaningless_reorg_test.go +++ b/system_tests/meaningless_reorg_test.go @@ -22,12 +22,10 @@ func TestMeaninglessBatchReorg(t *testing.T) { builder.nodeConfig.BatchPoster.Enable = false cleanup := builder.Build(t) defer cleanup() - seqInbox, err := bridgegen.NewSequencerInbox(builder.L1Info.GetAddress("SequencerInbox"), builder.L1.Client) Require(t, err) seqOpts := builder.L1Info.GetDefaultTransactOpts("Sequencer", ctx) - - tx, err := seqInbox.AddSequencerL2BatchFromOrigin8f111f3c(&seqOpts, big.NewInt(1), nil, big.NewInt(1), common.Address{}, common.Big0, common.Big0) + tx, err := seqInbox.AddSequencerL2BatchFromOrigin37501551(&seqOpts, big.NewInt(1), nil, big.NewInt(1), common.Address{}, common.Big0, common.Big0, nil) Require(t, err) batchReceipt, err := builder.L1.EnsureTxSucceeded(tx) Require(t, err) @@ -71,7 +69,7 @@ func TestMeaninglessBatchReorg(t *testing.T) { // Produce a new l1Block so that the batch ends up in a different l1Block than before builder.L1.TransferBalance(t, "User", "User", common.Big1, builder.L1Info) - tx, err = seqInbox.AddSequencerL2BatchFromOrigin8f111f3c(&seqOpts, big.NewInt(1), nil, big.NewInt(1), common.Address{}, common.Big0, common.Big0) + tx, err = seqInbox.AddSequencerL2Batch99020501(&seqOpts, big.NewInt(1), nil, big.NewInt(1), common.Address{}, common.Big0, common.Big0, nil) Require(t, err) newBatchReceipt, err := builder.L1.EnsureTxSucceeded(tx) Require(t, err) diff --git a/system_tests/seqinbox_test.go b/system_tests/seqinbox_test.go index a9f66b0e2f..48f590bef9 100644 --- a/system_tests/seqinbox_test.go +++ b/system_tests/seqinbox_test.go @@ -43,9 +43,9 @@ type blockTestState struct { const seqInboxTestIters = 40 func encodeAddBatch(seqABI *abi.ABI, seqNum *big.Int, message []byte, afterDelayedMsgRead *big.Int, gasRefunder common.Address) ([]byte, error) { - method, ok := seqABI.Methods["addSequencerL2BatchFromOrigin0"] + method, ok := seqABI.Methods["addSequencerL2BatchFromOrigin"] if !ok { - return nil, errors.New("failed to find add addSequencerL2BatchFromOrigin0 method") + return nil, errors.New("failed to find add addSequencerL2BatchFromOrigin method") } inputData, err := method.Inputs.Pack( seqNum, @@ -356,9 +356,9 @@ func testSequencerInboxReaderImpl(t *testing.T, validator bool) { t.Errorf("Access list mistmatch:\n%s\n", diff) } if i%5 == 0 { - tx, err = seqInbox.AddSequencerL2Batch(&seqOpts, big.NewInt(int64(len(blockStates))), batchData, big.NewInt(1), gasRefunderAddr, big.NewInt(0), big.NewInt(0)) + tx, err = seqInbox.AddSequencerL2Batch99020501(&seqOpts, big.NewInt(int64(len(blockStates))), batchData, big.NewInt(1), gasRefunderAddr, big.NewInt(0), big.NewInt(0), []byte{}) } else { - tx, err = seqInbox.AddSequencerL2BatchFromOrigin8f111f3c(&seqOpts, big.NewInt(int64(len(blockStates))), batchData, big.NewInt(1), gasRefunderAddr, common.Big0, common.Big0) + tx, err = seqInbox.AddSequencerL2BatchFromOrigin37501551(&seqOpts, big.NewInt(int64(len(blockStates))), batchData, big.NewInt(1), gasRefunderAddr, common.Big0, common.Big0, []byte{}) } Require(t, err) txRes, err := builder.L1.EnsureTxSucceeded(tx)