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)