From f6f01f4d1f3291a78d1098220c341332cea34a18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lech=20G=C5=82owiak?= Date: Mon, 7 Sep 2026 12:03:49 +0200 Subject: [PATCH] refactor(ledger): extract unsafe (can-panic) ledger helpers code to a separate crate. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The can-panic-gated apparatus in midnight-node-ledger-helpers (context/contract/ intent/offer/output/UTXO builders, wallet key management, the v8->v9 fork-replay helpers) exists solely to hand-build transactions and wallets for the toolkit CLI and tx generator, plus a few test suites that borrowed it as a dev-dependency. It never runs on the node's real block-execution path. Move it into a new midnight-ledger-unsafe-helpers crate so midnight-node-ledger-helpers shrinks back to the shared/production ledger glue, and drop the can-panic/test-utils features entirely now that nothing needs the opt-in. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Db7XfYwutBUzrkomMwYuEz Signed-off-by: Lech Głowiak --- Cargo.lock | 45 +++- Cargo.toml | 4 +- .../changed/split-midnight-ledger-helpers.md | 9 + ledger/Cargo.toml | 6 +- ledger/helpers/Cargo.toml | 16 +- ledger/helpers/src/fork/mod.rs | 21 -- ledger/helpers/src/fork/raw_block_data.rs | 33 --- ledger/helpers/src/ledger_8/block_context.rs | 25 -- ledger/helpers/src/ledger_8/mod.rs | 182 +------------- ledger/helpers/src/ledger_8/network_id.rs | 13 - ledger/helpers/src/ledger_9/block_context.rs | 25 -- ledger/helpers/src/ledger_9/mod.rs | 228 +----------------- ledger/helpers/src/ledger_9/network_id.rs | 13 - .../src/ledger_9/test_utilities_local.rs | 20 -- ledger/helpers/src/lib.rs | 28 --- ledger/helpers/unsafe/Cargo.toml | 45 ++++ .../src/extract_tx_with_context.rs | 7 +- .../{ => unsafe}/src/fork/fork_8_to_9.rs | 15 ++ .../src/fork/fork_aware_context.rs | 4 +- ledger/helpers/unsafe/src/fork/mod.rs | 65 +++++ .../{ => unsafe}/src/ledger_8/block_data.rs | 15 ++ .../{ => unsafe}/src/ledger_8/context.rs | 0 .../src/ledger_8/context/builder_context.rs | 0 .../src/ledger_8/context/indexer_context.rs | 0 .../src/ledger_8/contract/call.rs | 0 .../src/ledger_8/contract/deploy.rs | 0 .../src/ledger_8/contract/maintenance.rs | 0 .../src/ledger_8/contract/merkle_tree.rs | 0 .../{ => unsafe}/src/ledger_8/contract/mod.rs | 4 - .../{ => unsafe}/src/ledger_8/ecdsa.rs | 0 .../{ => unsafe}/src/ledger_8/input.rs | 0 .../{ => unsafe}/src/ledger_8/intent.rs | 0 ledger/helpers/unsafe/src/ledger_8/mod.rs | 185 ++++++++++++++ .../{ => unsafe}/src/ledger_8/offer.rs | 0 .../{ => unsafe}/src/ledger_8/output.rs | 0 .../{ => unsafe}/src/ledger_8/proving.rs | 2 - .../{ => unsafe}/src/ledger_8/transaction.rs | 0 .../{ => unsafe}/src/ledger_8/transient.rs | 0 .../src/ledger_8/unshielded_offer.rs | 0 .../{ => unsafe}/src/ledger_8/utxo_output.rs | 0 .../{ => unsafe}/src/ledger_8/utxo_spend.rs | 0 .../{ => unsafe}/src/ledger_8/wallet/dust.rs | 16 +- .../{ => unsafe}/src/ledger_8/wallet/hd.rs | 2 - .../{ => unsafe}/src/ledger_8/wallet/mod.rs | 2 - .../src/ledger_8/wallet/shielded.rs | 3 - .../src/ledger_8/wallet/unshielded.rs | 4 +- .../{ => unsafe}/src/ledger_9/block_data.rs | 13 + .../{ => unsafe}/src/ledger_9/context.rs | 0 .../src/ledger_9/context/builder_context.rs | 0 .../src/ledger_9/context/indexer_context.rs | 0 .../src/ledger_9/contract/call.rs | 0 .../src/ledger_9/contract/deploy.rs | 0 .../src/ledger_9/contract/maintenance.rs | 0 .../src/ledger_9/contract/merkle_tree.rs | 0 .../{ => unsafe}/src/ledger_9/contract/mod.rs | 4 - .../{ => unsafe}/src/ledger_9/ecdsa.rs | 0 .../src/ledger_9/ecdsa_wallet_tests.rs | 0 .../{ => unsafe}/src/ledger_9/input.rs | 0 .../{ => unsafe}/src/ledger_9/intent.rs | 0 ledger/helpers/unsafe/src/ledger_9/mod.rs | 225 +++++++++++++++++ .../{ => unsafe}/src/ledger_9/offer.rs | 0 .../{ => unsafe}/src/ledger_9/output.rs | 0 .../{ => unsafe}/src/ledger_9/proving.rs | 2 - .../{ => unsafe}/src/ledger_9/transaction.rs | 0 .../{ => unsafe}/src/ledger_9/transient.rs | 0 .../src/ledger_9/unshielded_offer.rs | 0 .../{ => unsafe}/src/ledger_9/utxo_output.rs | 0 .../{ => unsafe}/src/ledger_9/utxo_spend.rs | 0 .../{ => unsafe}/src/ledger_9/wallet/dust.rs | 14 +- .../{ => unsafe}/src/ledger_9/wallet/hd.rs | 2 - .../{ => unsafe}/src/ledger_9/wallet/mod.rs | 2 - .../src/ledger_9/wallet/shielded.rs | 3 - .../src/ledger_9/wallet/unshielded.rs | 4 +- ledger/helpers/unsafe/src/lib.rs | 61 +++++ ledger/src/ledger_8/api/ledger.rs | 5 +- ledger/src/ledger_8/api/transaction.rs | 6 +- ledger/src/ledger_9/api/ledger.rs | 5 +- ledger/src/ledger_9/api/transaction.rs | 6 +- pallets/midnight/Cargo.toml | 2 +- pallets/midnight/src/tests.rs | 36 +-- tests/e2e/Cargo.toml | 2 +- tests/e2e/src/api/midnight.rs | 2 +- tests/e2e/tests/c2m_bridge.rs | 8 +- tests/e2e/tests/cnight/observation.rs | 2 +- tests/e2e/tests/lib.rs | 10 +- tests/e2e/tests/operational.rs | 4 +- util/toolkit/Cargo.toml | 5 +- util/toolkit/src/cli.rs | 4 +- util/toolkit/src/cli_parsers.rs | 2 +- util/toolkit/src/cli_parsers/output_arg.rs | 2 +- util/toolkit/src/client.rs | 2 +- util/toolkit/src/commands/contract_state.rs | 2 +- util/toolkit/src/commands/dust_balance.rs | 4 +- .../fork/ledger_8/contract_address.rs | 2 +- .../commands/fork/ledger_8/contract_state.rs | 4 +- .../commands/fork/ledger_8/dust_balance.rs | 2 +- .../commands/fork/ledger_8/generate_intent.rs | 2 +- .../toolkit/src/commands/fork/ledger_8/mod.rs | 2 +- .../src/commands/fork/ledger_8/night_pools.rs | 2 +- .../commands/fork/ledger_8/serde_convert.rs | 6 +- .../fork/ledger_8/show_transaction.rs | 2 +- .../src/commands/fork/ledger_8/show_wallet.rs | 2 +- .../fork/ledger_9/contract_address.rs | 2 +- .../commands/fork/ledger_9/contract_state.rs | 4 +- .../commands/fork/ledger_9/dust_balance.rs | 2 +- .../commands/fork/ledger_9/generate_intent.rs | 2 +- .../toolkit/src/commands/fork/ledger_9/mod.rs | 2 +- .../src/commands/fork/ledger_9/night_pools.rs | 2 +- .../commands/fork/ledger_9/serde_convert.rs | 6 +- .../fork/ledger_9/show_transaction.rs | 2 +- .../src/commands/fork/ledger_9/show_wallet.rs | 2 +- util/toolkit/src/commands/generate_genesis.rs | 4 +- util/toolkit/src/commands/generate_intent.rs | 4 +- .../src/commands/generate_sample_intent.rs | 41 ++-- util/toolkit/src/commands/generate_txs.rs | 4 +- util/toolkit/src/commands/root_call.rs | 4 +- util/toolkit/src/commands/runtime_upgrade.rs | 4 +- util/toolkit/src/commands/show_address.rs | 12 +- util/toolkit/src/commands/show_block.rs | 2 +- .../src/commands/show_ledger_parameters.rs | 6 +- util/toolkit/src/commands/show_token_type.rs | 4 +- util/toolkit/src/commands/show_transaction.rs | 3 +- util/toolkit/src/commands/show_viewing_key.rs | 2 +- util/toolkit/src/commands/show_wallet.rs | 4 +- .../src/commands/update_ledger_parameters.rs | 2 +- .../src/fetcher/trusted_deserialize.rs | 20 +- .../toolkit/src/fetcher/wallet_state_cache.rs | 43 ++-- util/toolkit/src/genesis_generator.rs | 6 +- util/toolkit/src/lib.rs | 2 +- util/toolkit/src/remote_prover.rs | 28 ++- util/toolkit/src/sender.rs | 3 +- util/toolkit/src/serde_def/ledger_types.rs | 2 +- util/toolkit/src/serde_def/transactions.rs | 2 +- .../toolkit_js/encoded_zswap_local_state.rs | 6 +- util/toolkit/src/toolkit_js/mod.rs | 4 +- .../builders/ledger_8/batch_single_tx.rs | 13 +- .../builder/builders/ledger_8/batches.rs | 2 +- .../builders/ledger_8/build_txs_ext.rs | 2 +- .../builders/ledger_8/claim_rewards.rs | 2 +- .../builders/ledger_8/contract_call.rs | 2 +- .../builders/ledger_8/contract_custom.rs | 2 +- .../builders/ledger_8/contract_deploy.rs | 2 +- .../builders/ledger_8/contract_maintenance.rs | 2 +- .../ledger_8/deregister_dust_address.rs | 2 +- .../builder/builders/ledger_8/do_nothing.rs | 2 +- .../builder/builders/ledger_8/mod.rs | 8 +- .../builder/builders/ledger_8/output_spec.rs | 10 +- .../ledger_8/register_dust_address.rs | 2 +- .../builder/builders/ledger_8/single_tx.rs | 2 +- .../builder/builders/ledger_8/transactions.rs | 2 +- .../builders/ledger_8/tx_serialization.rs | 2 +- .../builder/builders/ledger_8/type_convert.rs | 24 +- .../builders/ledger_9/batch_single_tx.rs | 13 +- .../builder/builders/ledger_9/batches.rs | 2 +- .../builders/ledger_9/build_txs_ext.rs | 2 +- .../builders/ledger_9/claim_rewards.rs | 2 +- .../builders/ledger_9/contract_call.rs | 2 +- .../builders/ledger_9/contract_custom.rs | 2 +- .../builders/ledger_9/contract_deploy.rs | 2 +- .../builders/ledger_9/contract_maintenance.rs | 2 +- .../ledger_9/deregister_dust_address.rs | 2 +- .../builder/builders/ledger_9/do_nothing.rs | 2 +- .../builder/builders/ledger_9/mod.rs | 6 +- .../builder/builders/ledger_9/output_spec.rs | 10 +- .../ledger_9/register_dust_address.rs | 2 +- .../builder/builders/ledger_9/single_tx.rs | 2 +- .../builder/builders/ledger_9/transactions.rs | 2 +- .../builders/ledger_9/tx_serialization.rs | 2 +- .../builder/builders/ledger_9/type_convert.rs | 24 +- .../src/tx_generator/builder/builders/mod.rs | 4 +- util/toolkit/src/tx_generator/builder/mod.rs | 48 ++-- util/toolkit/tests/cached_context.rs | 7 +- util/toolkit/tests/common/toolkit_helper.rs | 2 +- util/toolkit/tests/ecdsa_signature.rs | 2 +- util/toolkit/tests/register_dust_address.rs | 8 +- 175 files changed, 1028 insertions(+), 939 deletions(-) create mode 100644 changes/toolkit/changed/split-midnight-ledger-helpers.md delete mode 100644 ledger/helpers/src/ledger_8/block_context.rs delete mode 100644 ledger/helpers/src/ledger_8/network_id.rs delete mode 100644 ledger/helpers/src/ledger_9/block_context.rs delete mode 100644 ledger/helpers/src/ledger_9/network_id.rs delete mode 100644 ledger/helpers/src/ledger_9/test_utilities_local.rs create mode 100644 ledger/helpers/unsafe/Cargo.toml rename ledger/helpers/{ => unsafe}/src/extract_tx_with_context.rs (83%) rename ledger/helpers/{ => unsafe}/src/fork/fork_8_to_9.rs (89%) rename ledger/helpers/{ => unsafe}/src/fork/fork_aware_context.rs (98%) create mode 100644 ledger/helpers/unsafe/src/fork/mod.rs rename ledger/helpers/{ => unsafe}/src/ledger_8/block_data.rs (50%) rename ledger/helpers/{ => unsafe}/src/ledger_8/context.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/context/builder_context.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/context/indexer_context.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/contract/call.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/contract/deploy.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/contract/maintenance.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/contract/merkle_tree.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/contract/mod.rs (96%) rename ledger/helpers/{ => unsafe}/src/ledger_8/ecdsa.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/input.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/intent.rs (100%) create mode 100644 ledger/helpers/unsafe/src/ledger_8/mod.rs rename ledger/helpers/{ => unsafe}/src/ledger_8/offer.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/output.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/proving.rs (99%) rename ledger/helpers/{ => unsafe}/src/ledger_8/transaction.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/transient.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/unshielded_offer.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/utxo_output.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/utxo_spend.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_8/wallet/dust.rs (93%) rename ledger/helpers/{ => unsafe}/src/ledger_8/wallet/hd.rs (99%) rename ledger/helpers/{ => unsafe}/src/ledger_8/wallet/mod.rs (98%) rename ledger/helpers/{ => unsafe}/src/ledger_8/wallet/shielded.rs (98%) rename ledger/helpers/{ => unsafe}/src/ledger_8/wallet/unshielded.rs (99%) rename ledger/helpers/{ => unsafe}/src/ledger_9/block_data.rs (50%) rename ledger/helpers/{ => unsafe}/src/ledger_9/context.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/context/builder_context.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/context/indexer_context.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/contract/call.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/contract/deploy.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/contract/maintenance.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/contract/merkle_tree.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/contract/mod.rs (96%) rename ledger/helpers/{ => unsafe}/src/ledger_9/ecdsa.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/ecdsa_wallet_tests.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/input.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/intent.rs (100%) create mode 100644 ledger/helpers/unsafe/src/ledger_9/mod.rs rename ledger/helpers/{ => unsafe}/src/ledger_9/offer.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/output.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/proving.rs (99%) rename ledger/helpers/{ => unsafe}/src/ledger_9/transaction.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/transient.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/unshielded_offer.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/utxo_output.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/utxo_spend.rs (100%) rename ledger/helpers/{ => unsafe}/src/ledger_9/wallet/dust.rs (93%) rename ledger/helpers/{ => unsafe}/src/ledger_9/wallet/hd.rs (99%) rename ledger/helpers/{ => unsafe}/src/ledger_9/wallet/mod.rs (98%) rename ledger/helpers/{ => unsafe}/src/ledger_9/wallet/shielded.rs (98%) rename ledger/helpers/{ => unsafe}/src/ledger_9/wallet/unshielded.rs (99%) create mode 100644 ledger/helpers/unsafe/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index e3c530f4b..ae0d15b3f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7789,6 +7789,36 @@ dependencies = [ "quote 1.0.45", ] +[[package]] +name = "midnight-ledger-unsafe-helpers" +version = "0.1.0" +dependencies = [ + "async-trait", + "bech32 0.11.1", + "bip32", + "derive-where", + "futures", + "hex", + "itertools 0.14.0", + "lazy_static", + "log", + "midnight-base-crypto", + "midnight-ledger", + "midnight-ledger-v9", + "midnight-node-ledger-helpers", + "midnight-serialize", + "midnight-storage", + "midnight-transient-crypto 2.2.0", + "rand 0.8.5", + "rayon", + "serde", + "serde_json", + "sha2 0.11.0", + "thiserror 2.0.18", + "tokio", + "v8-to-v9-state-translation", +] + [[package]] name = "midnight-ledger-v9" version = "1.0.0" @@ -7966,8 +7996,8 @@ dependencies = [ "aiken-contracts-lib", "blake2 0.10.6", "hex", + "midnight-ledger-unsafe-helpers", "midnight-node-e2e-macros", - "midnight-node-ledger-helpers", "midnight-node-metadata", "midnight-node-toolkit", "ogmios-client", @@ -8006,6 +8036,7 @@ dependencies = [ "midnight-coin-structure 2.0.2", "midnight-coin-structure 3.0.0", "midnight-ledger", + "midnight-ledger-unsafe-helpers", "midnight-ledger-v9", "midnight-node-ledger-helpers", "midnight-node-res", @@ -8041,15 +8072,10 @@ name = "midnight-node-ledger-helpers" version = "0.1.0" dependencies = [ "anyhow", - "async-trait", - "bech32 0.11.1", - "bip32", "bip39", "cargo_metadata 0.15.4", "derive-where", - "futures", "hex", - "itertools 0.14.0", "lazy_static", "log", "midnight-base-crypto", @@ -8069,18 +8095,14 @@ dependencies = [ "num_enum", "postcard", "rand 0.8.5", - "rayon", "reqwest 0.12.28", "serde", "serde_bytes", "serde_json", - "sha2 0.11.0", "strum 0.28.0", "subxt 0.50.0", "subxt-signer 0.50.0", "thiserror 2.0.18", - "tokio", - "v8-to-v9-state-translation", "zeroize", ] @@ -8211,6 +8233,7 @@ dependencies = [ "hex-literal 1.1.0", "indicatif 0.17.11", "log", + "midnight-ledger-unsafe-helpers", "midnight-node-ledger-helpers", "midnight-node-metadata", "midnight-primitives-ics-observation", @@ -10447,8 +10470,8 @@ dependencies = [ "frame-system", "hex", "log", + "midnight-ledger-unsafe-helpers", "midnight-node-ledger", - "midnight-node-ledger-helpers", "midnight-node-res", "midnight-primitives", "pallet-timestamp", diff --git a/Cargo.toml b/Cargo.toml index c13d0ee20..eab237dd5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,7 @@ resolver = "2" members = [ "ledger", "ledger/helpers", + "ledger/helpers/unsafe", "metadata", "node", "pallets/midnight", @@ -126,7 +127,8 @@ midnight-serialize = { version = "=1.2.0", package = "midnight-serialize" } # Midnight local dependencies midnight-node-ledger = { path = "ledger", default-features = false } midnight-node-metadata = { path = "metadata", default-features = false } -midnight-node-ledger-helpers = { path = "ledger/helpers", default-features = false, features = ["test-utils"] } +midnight-node-ledger-helpers = { path = "ledger/helpers", default-features = false } +midnight-ledger-unsafe-helpers = { path = "ledger/helpers/unsafe", default-features = false } midnight-node-res = { path = "res", default-features = false } midnight-node-toolkit = { path = "util/toolkit", default-features = true } pallet-midnight = { path = "pallets/midnight", default-features = false } diff --git a/changes/toolkit/changed/split-midnight-ledger-helpers.md b/changes/toolkit/changed/split-midnight-ledger-helpers.md new file mode 100644 index 000000000..c0682f1fe --- /dev/null +++ b/changes/toolkit/changed/split-midnight-ledger-helpers.md @@ -0,0 +1,9 @@ +#toolkit + +# Split midnight-ledger-helpers crate + +Splits 'can-panic' feature code to a separate crate to avoid confusion +about what code can be used by consenus and what code is for toolkit +and tests. + +PR: https://github.com/midnightntwrk/midnight-node/pull/2106 diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 2532cfd1b..5dcbeea19 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -50,11 +50,7 @@ scale-info.workspace = true [dev-dependencies] midnight-node-res = { workspace = true, features = ["test", "chain-spec"] } -# The crate's own `#[cfg(test)]` modules (api::ledger, api::transaction, and the -# state-translation tests) use `extract_tx_with_context`, gated behind the -# helpers `can-panic` feature. Enable it for test builds so the tests compile -# when the crate is tested standalone. -midnight-node-ledger-helpers = { workspace = true, features = ["can-panic", "test-utils"] } +midnight-ledger-unsafe-helpers = { workspace = true } [features] default = [ diff --git a/ledger/helpers/Cargo.toml b/ledger/helpers/Cargo.toml index 4718b98c1..1769f7d9d 100644 --- a/ledger/helpers/Cargo.toml +++ b/ledger/helpers/Cargo.toml @@ -11,7 +11,6 @@ cargo_metadata = "0.15" [dependencies] hex.workspace = true -sha2.workspace = true base-crypto = { workspace = true } coin-structure = { workspace = true } @@ -32,40 +31,27 @@ zswap-ledger-9 = { workspace = true } coin-structure-ledger-9 = { workspace = true } transient-crypto-ledger-9 = { workspace = true } -# v8->v9 state translation table, used by the toolkit fork boundary (`fork::fork_8_to_9`). -v8-to-v9-state-translation = { workspace = true } - rand = { version = "0.8.4", features = ["small_rng", "getrandom"] } -rayon.workspace = true log.workspace = true lazy_static.workspace = true -itertools = { workspace = true, features = ["use_alloc"] } thiserror.workspace = true -tokio.workspace = true -async-trait.workspace = true -futures.workspace = true -bip32.workspace = true derive-where.workspace = true serde = { workspace = true, features = ["derive"] } # Derive the u8 <-> variant and name <-> variant mappings from the enum declaration # itself, so `LedgerVersion`'s wire discriminants can't drift from a hand-written table. num_enum = "0.7" strum.workspace = true -bech32 = "0.11.0" bip39 = "2.2.2" subxt.workspace = true subxt-signer.workspace = true -serde_json.workspace = true serde_bytes = "0.11" zeroize = { workspace = true } [dev-dependencies] # Pins the cache wire format of `LedgerVersion` (see raw_block_data.rs tests). postcard = { version = "1.1", features = ["alloc"] } +serde_json.workspace = true [features] default = [] -can-panic = [] -erase-proof = [] -test-utils = [] fixed-point-custom-serde = ["mn-ledger-8/fixed-point-custom-serde", "mn-ledger-9/fixed-point-custom-serde"] diff --git a/ledger/helpers/src/fork/mod.rs b/ledger/helpers/src/fork/mod.rs index 94b6b516e..eef02d708 100644 --- a/ledger/helpers/src/fork/mod.rs +++ b/ledger/helpers/src/fork/mod.rs @@ -1,22 +1 @@ pub mod raw_block_data; - -#[cfg(feature = "can-panic")] -use crate::fork::raw_block_data::LedgerVersion; - -#[cfg(feature = "can-panic")] -pub mod fork_8_to_9; -#[cfg(feature = "can-panic")] -pub mod fork_aware_context; - -#[cfg(feature = "can-panic")] -pub fn network_id_and_ledger_version_from_tx_bytes( - tx_bytes: &[u8], -) -> Result<(String, LedgerVersion), std::io::Error> { - let res9 = crate::ledger_9::network_id_from_transaction_bytes(tx_bytes); - if let Ok(ref network_id) = res9 { - return Ok((network_id.to_string(), LedgerVersion::Ledger9)); - } - - let network_id = crate::ledger_8::network_id_from_transaction_bytes(tx_bytes)?; - Ok((network_id.to_string(), LedgerVersion::Ledger8)) -} diff --git a/ledger/helpers/src/fork/raw_block_data.rs b/ledger/helpers/src/fork/raw_block_data.rs index 119926332..bc3ba2374 100644 --- a/ledger/helpers/src/fork/raw_block_data.rs +++ b/ledger/helpers/src/fork/raw_block_data.rs @@ -277,39 +277,6 @@ impl SerializedTxBatches { } } -#[cfg(feature = "can-panic")] -impl TryFrom<&SerializedTxBatches> for Vec { - type Error = String; - - fn try_from(value: &SerializedTxBatches) -> Result { - let mut blocks = Vec::new(); - let mut ledger_version = LedgerVersion::default(); - - for batch in &value.batches { - let context = SerializedTxBatches::get_context(batch)?; - let transactions: Vec<_> = batch.iter().map(|t| t.tx.clone()).collect(); - - if let Some((_, v)) = transactions - .iter() - .filter_map(|tx| { - crate::fork::network_id_and_ledger_version_from_tx_bytes(tx.as_bytes()).ok() - }) - .next() - { - ledger_version = v; - } - - blocks.push(RawBlockData::new_from_timestamp( - context.tblock.to_secs(), - ledger_version, - transactions, - )); - } - - Ok(blocks) - } -} - #[cfg(test)] mod tests { use super::*; diff --git a/ledger/helpers/src/ledger_8/block_context.rs b/ledger/helpers/src/ledger_8/block_context.rs deleted file mode 100644 index d6d7e16c4..000000000 --- a/ledger/helpers/src/ledger_8/block_context.rs +++ /dev/null @@ -1,25 +0,0 @@ -// This file is part of midnight-node. -// Copyright (C) Midnight Foundation -// SPDX-License-Identifier: Apache-2.0 -// Licensed under the Apache License, Version 2.0 (the "License"); -// You may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub fn make_block_context( - tblock: crate::ledger_8::base_crypto::time::Timestamp, - parent_block_hash: crate::ledger_8::base_crypto::hash::HashOutput, - last_block_time: crate::ledger_8::base_crypto::time::Timestamp, -) -> crate::ledger_8::onchain_runtime::context::BlockContext { - crate::ledger_8::onchain_runtime::context::BlockContext { - tblock, - tblock_err: 30, - parent_block_hash, - last_block_time, - } -} diff --git a/ledger/helpers/src/ledger_8/mod.rs b/ledger/helpers/src/ledger_8/mod.rs index 1ab082bda..117f8e93b 100644 --- a/ledger/helpers/src/ledger_8/mod.rs +++ b/ledger/helpers/src/ledger_8/mod.rs @@ -18,12 +18,6 @@ //! `diff -r ledger_8 ledger_9` shows exactly where the two generations diverge, //! and an edit here cannot leak into v9. -use crate::ContractVerifyingKeyBytes; - -pub use crate::CoinSelectionStrategy; -#[cfg(feature = "can-panic")] -pub use crate::extract_tx_with_context::extract_tx_with_context_ledger_8 as extract_tx_with_context; - /// Ledger generation implemented by this module. pub const LEDGER_VERSION: u32 = 8; /// The contract-maintenance-authority verifying-key type for this generation. Pre-ledger-9 @@ -37,18 +31,9 @@ pub use { zswap_ledger_8 as zswap, }; -use midnight_serialize::tagged_deserialize; - // Vendored test-utilities shim for v8. pub mod test_utilities_local; -mod block_context; -pub use block_context::*; - -// ECDSA is only supported from ledger 9; this module is stubs that panic. -mod ecdsa; -pub use ecdsa::{SigningKeyEcdsa, VerifyingKeyEcdsa}; - pub use base_crypto::signatures::{ Signature, Signature as TransactionSignature, SigningKey as TransactionSigningKey, VerifyingKey as SignatureVerifyingKey, @@ -156,160 +141,22 @@ pub use rand::{ rngs::{OsRng, StdRng}, }; -// Module declarations with can-panic feature -#[cfg(feature = "can-panic")] -pub mod block_data; -#[cfg(feature = "can-panic")] -pub mod context; -#[cfg(feature = "can-panic")] -pub mod contract; -#[cfg(feature = "can-panic")] -mod input; -#[cfg(feature = "can-panic")] -mod intent; -#[cfg(feature = "can-panic")] -mod network_id; -#[cfg(feature = "can-panic")] -mod offer; -#[cfg(feature = "can-panic")] -mod output; -#[cfg(feature = "can-panic")] -pub mod transaction; -#[cfg(feature = "can-panic")] -mod transient; -#[cfg(feature = "can-panic")] -mod unshielded_offer; -#[cfg(feature = "can-panic")] -mod utxo_output; -#[cfg(feature = "can-panic")] -mod utxo_spend; -#[cfg(feature = "can-panic")] -pub mod wallet; - -// Module declarations without can-panic feature -mod proving; pub mod types; -// Re-exports with can-panic feature -#[cfg(feature = "can-panic")] -pub use { - context::*, contract::*, input::*, intent::*, network_id::*, offer::*, output::*, proving::*, - transaction::*, transient::*, unshielded_offer::*, utxo_output::*, utxo_spend::*, wallet::*, -}; - -// Re-exports without can-panic feature pub use types::*; -/// Builds a contract operation from a verifier key. `_ir_source` is accepted -/// for cross-version call-site compatibility but silently dropped: pre-ledger-9 -/// contract operations have no on-chain IR slot. -pub fn contract_operation_new( - vk: Option, - _ir_source: Option>, -) -> Result { - let vk = - vk.map(|b| tagged_deserialize(&mut b.0.as_slice()).expect("failed to read verifier key")); - Ok(onchain_runtime::state::ContractOperation::new(vk)) -} - -/// Wraps a verifier key in the maintenance-update enum for this ledger generation. -/// Pre-ledger-9 ledgers expose only the `V3` (zk-stdlib v1) variant, which takes the -/// same `transient_crypto::proofs::VerifierKey` this module deserializes. -pub fn contract_operation_versioned_verifier_key( - vk: Vec, -) -> Result { - let vk: transient_crypto::proofs::VerifierKey = tagged_deserialize(&mut &vk[..])?; - Ok(mn_ledger::structure::ContractOperationVersionedVerifierKey::V3(vk)) -} - -/// The verifier-key slot version for this ledger generation, used when *removing* -/// a key (the entry point alone doesn't say which slot the key lives in). -/// Pre-ledger-9 ledgers only have the `V3` slot, so removals target it. Mirrors -/// `contract_operation_versioned_verifier_key` above. -pub fn contract_operation_version_of( - _op: &onchain_runtime::state::ContractOperation, -) -> mn_ledger::structure::ContractOperationVersion { - mn_ledger::structure::ContractOperationVersion::V3 -} - -pub fn signature_verifying_key( - key: base_crypto::signatures::VerifyingKey, -) -> SignatureVerifyingKey { - key -} - -pub fn transaction_signing_key(key: &base_crypto::signatures::SigningKey) -> TransactionSigningKey { - key.clone() -} - -pub fn transaction_signature( - signature: base_crypto::signatures::Signature, -) -> TransactionSignature { - signature -} - -pub fn maintenance_verifying_key( - key: base_crypto::signatures::VerifyingKey, -) -> SignatureVerifyingKey { - key -} - -pub fn signature_verifying_key_ecdsa(_key: VerifyingKeyEcdsa) -> SignatureVerifyingKey { - unimplemented!("ecdsa is only supported from ledger 9") -} - -pub fn transaction_signing_key_ecdsa(_key: &SigningKeyEcdsa) -> TransactionSigningKey { - unimplemented!("ecdsa is only supported from ledger 9") -} - -pub fn transaction_signature_ecdsa( - _signature: base_crypto::ecdsa::Signature, -) -> TransactionSignature { - unimplemented!("ecdsa is only supported from ledger 9") -} - -pub fn maintenance_verifying_key_ecdsa(_key: VerifyingKeyEcdsa) -> SignatureVerifyingKey { - unimplemented!("ecdsa is only supported from ledger 9") -} - -/// Compatibility trait: L8 `apply` returns `WalletState`, L9 returns `Result, _>`. -pub trait IntoWalletState { - fn into_wallet_state(self) -> WalletState; -} -impl IntoWalletState for WalletState { - fn into_wallet_state(self) -> WalletState { - self +pub fn make_block_context( + tblock: crate::ledger_8::base_crypto::time::Timestamp, + parent_block_hash: crate::ledger_8::base_crypto::hash::HashOutput, + last_block_time: crate::ledger_8::base_crypto::time::Timestamp, +) -> crate::ledger_8::onchain_runtime::context::BlockContext { + crate::ledger_8::onchain_runtime::context::BlockContext { + tblock, + tblock_err: 30, + parent_block_hash, + last_block_time, } } -impl IntoWalletState for Result, E> { - fn into_wallet_state(self) -> WalletState { - self.expect("wallet state apply failed") - } -} - -/// Raw zkir bytes for circuit `name` (the `zkir/{name}.bzkir` the resolver -/// loads as `ProvingKeyMaterial::ir_source`). Ledger 9+ stores these on-chain -/// in the contract operation so deployed circuits can be re-proven/upgraded -/// from chain state alone; pre-9 `contract_operation_new` ignores them. -pub async fn ir_source(resolver: &Resolver, name: &'static str) -> Option> { - let material = resolver - .resolve_key(KeyLocation(std::borrow::Cow::Borrowed(name))) - .await - .ok()??; - Some(material.ir_source) -} - -/// Resolves a circuit's verifier key by name. -pub async fn verifier_key( - resolver: &Resolver, - name: &'static str, -) -> Option { - let material = resolver - .resolve_key(KeyLocation(std::borrow::Cow::Borrowed(name))) - .await - .ok()??; - Some(ContractVerifyingKeyBytes(material.verifier_key)) -} /// Serializes a mn_ledger::serialize-able type into bytes pub fn serialize_untagged(value: &T) -> Result, std::io::Error> { @@ -398,15 +245,6 @@ pub fn clamp_and_normalize( .expect("clamped cost should always normalize successfully") } -#[cfg(feature = "can-panic")] -pub fn token_type_decode(input: &str) -> TokenType { - let bytes = hex::decode(input).expect("Token value should be an hex"); - - let tt_bytes: [u8; 32] = bytes.try_into().expect("Token size should be 32 bytes"); - - TokenType::Shielded(ShieldedTokenType(HashOutput(tt_bytes))) -} - #[cfg(test)] mod tests { use super::*; diff --git a/ledger/helpers/src/ledger_8/network_id.rs b/ledger/helpers/src/ledger_8/network_id.rs deleted file mode 100644 index 747162071..000000000 --- a/ledger/helpers/src/ledger_8/network_id.rs +++ /dev/null @@ -1,13 +0,0 @@ -use crate::ledger_8::{DefaultDB, FinalizedTransaction, Transaction, deserialize}; - -/// Get NetworkId from transaction bytes -pub fn network_id_from_transaction_bytes(tx_bytes: &[u8]) -> Result { - let tx: FinalizedTransaction = deserialize(tx_bytes)?; - let network_id = match tx { - Transaction::Standard(standard_transaction) => standard_transaction.network_id, - Transaction::ClaimRewards(claim_rewards_transaction) => { - claim_rewards_transaction.network_id - }, - }; - Ok(network_id) -} diff --git a/ledger/helpers/src/ledger_9/block_context.rs b/ledger/helpers/src/ledger_9/block_context.rs deleted file mode 100644 index e00784726..000000000 --- a/ledger/helpers/src/ledger_9/block_context.rs +++ /dev/null @@ -1,25 +0,0 @@ -// This file is part of midnight-node. -// Copyright (C) Midnight Foundation -// SPDX-License-Identifier: Apache-2.0 -// Licensed under the Apache License, Version 2.0 (the "License"); -// You may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -pub fn make_block_context( - tblock: crate::ledger_9::base_crypto::time::Timestamp, - parent_block_hash: crate::ledger_9::base_crypto::hash::HashOutput, - last_block_time: crate::ledger_9::base_crypto::time::Timestamp, -) -> crate::ledger_9::onchain_runtime::context::BlockContext { - crate::ledger_9::onchain_runtime::context::BlockContext { - tblock, - tblock_err: 30, - parent_block_hash, - last_block_time, - } -} diff --git a/ledger/helpers/src/ledger_9/mod.rs b/ledger/helpers/src/ledger_9/mod.rs index 06498e8c7..8efc0fc6c 100644 --- a/ledger/helpers/src/ledger_9/mod.rs +++ b/ledger/helpers/src/ledger_9/mod.rs @@ -18,12 +18,6 @@ //! `diff -r ledger_8 ledger_9` shows exactly where the two generations diverge, //! and an edit here cannot leak into v8. -use crate::ContractVerifyingKeyBytes; - -pub use crate::CoinSelectionStrategy; -#[cfg(feature = "can-panic")] -pub use crate::extract_tx_with_context::extract_tx_with_context_ledger_9 as extract_tx_with_context; - /// Ledger generation implemented by this module. pub const LEDGER_VERSION: u32 = 9; /// The contract-maintenance-authority verifying-key type for this generation: from ledger 9 the @@ -38,23 +32,6 @@ pub use { zkir, zswap_ledger_9 as zswap, }; -use midnight_serialize::{peek_tag, tagged_deserialize}; - -// The v9 ledger ships its own test utilities; v8 vendors a shim of the same name. -pub mod test_utilities_local; - -mod block_context; -pub use block_context::*; - -// ECDSA is natively supported from ledger 9. -mod ecdsa; -pub use ecdsa::{SigningKeyEcdsa, VerifyingKeyEcdsa}; - -// Ledger-9-only ECDSA wallet tests (no v8 counterpart); see the module docs. -// `can-panic`-gated, as the whole `wallet` module (hence `UnshieldedWallet`) is. -#[cfg(all(test, feature = "can-panic"))] -mod ecdsa_wallet_tests; - pub use mn_ledger::structure::{ Signature, Signature as TransactionSignature, SignatureVerifyingKey, SigningKey as TransactionSigningKey, @@ -93,6 +70,7 @@ pub use crate::ledger_9::{ storage::{Array, HashMap as HashMapStorage, HashSet, default_storage}, }, midnight_serialize::{self as mn_ledger_serialize, Deserializable, Serializable, Tagged}, + mn_ledger::test_utilities::{PUBLIC_PARAMS, Pk, ProofServerProvider, test_resolver}, mn_ledger::{ construct::{ContractCallPrototype, PreTranscript, partition_transcripts}, dust::{ @@ -135,7 +113,6 @@ pub use crate::ledger_9::{ }, transcript::Transcript, }, - test_utilities_local::{PUBLIC_PARAMS, Pk, ProofServerProvider, test_resolver}, transient_crypto::{ commitment::{Pedersen, PedersenRandomness, PureGeneratorPedersen}, curve::Fr, @@ -163,196 +140,22 @@ pub use rand::{ rngs::{OsRng, StdRng}, }; -// Module declarations with can-panic feature -#[cfg(feature = "can-panic")] -pub mod block_data; -#[cfg(feature = "can-panic")] -pub mod context; -#[cfg(feature = "can-panic")] -pub mod contract; -#[cfg(feature = "can-panic")] -mod input; -#[cfg(feature = "can-panic")] -mod intent; -#[cfg(feature = "can-panic")] -mod network_id; -#[cfg(feature = "can-panic")] -mod offer; -#[cfg(feature = "can-panic")] -mod output; -#[cfg(feature = "can-panic")] -pub mod transaction; -#[cfg(feature = "can-panic")] -mod transient; -#[cfg(feature = "can-panic")] -mod unshielded_offer; -#[cfg(feature = "can-panic")] -mod utxo_output; -#[cfg(feature = "can-panic")] -mod utxo_spend; -#[cfg(feature = "can-panic")] -pub mod wallet; - -// Module declarations without can-panic feature -mod proving; pub mod types; -// Re-exports with can-panic feature -#[cfg(feature = "can-panic")] -pub use { - context::*, contract::*, input::*, intent::*, network_id::*, offer::*, output::*, proving::*, - transaction::*, transient::*, unshielded_offer::*, utxo_output::*, utxo_spend::*, wallet::*, -}; - -// Re-exports without can-panic feature pub use types::*; -/// Builds a contract operation from a verifier key plus, from ledger 9 on, -/// the circuit's zkir. `ir_source` is stored on-chain alongside the verifier -/// key so the deployed contract's circuits can later be re-proven/upgraded -/// from chain state alone; it counts toward `max_contract_metadata_size`. -pub fn contract_operation_new( - vk: Option, - ir_source: Option>, -) -> Result { - let ir = - ir_source.map(|bytes| ledger_storage::arena::Sp::new(onchain_runtime::state::IrBuf(bytes))); - let mut op = onchain_runtime::state::ContractOperation::new(None, ir); - - if let Some(vk) = vk { - let tag = peek_tag(&mut std::io::Cursor::new(&vk.0))?; - match tag.as_str() { - "verifier-key[v6]" => op.v2 = Some(tagged_deserialize(&mut &vk.0[..])?), - "verifier-key[v7]" => op.v3 = Some(tagged_deserialize(&mut &vk.0[..])?), - _ => panic!("unknown verifier key tag: '{tag}'"), - } - } - - Ok(op) -} - -/// Wraps a verifier key in the maintenance-update enum for this ledger generation. -/// Ledger 9 accepts either a legacy 2.x (`v6`) key, stored in the `V3` slot via the -/// crate-level (non-ledger-9-aliased) `transient_crypto` — the same 2.x -/// `midnight-transient-crypto` build `op.v2` uses in `contract_operation_new` above — -/// or a 3.x/zk-stdlib-v2 (`v7`) key, stored in the `V4` slot. The tag on the key file -/// itself says which, mirroring the dispatch in `contract_operation_new`. -pub fn contract_operation_versioned_verifier_key( - vk: Vec, -) -> Result { - let tag = peek_tag(&mut std::io::Cursor::new(&vk))?; - match tag.as_str() { - "verifier-key[v6]" => { - let vk: ::transient_crypto::proofs::VerifierKey = tagged_deserialize(&mut &vk[..])?; - Ok(mn_ledger::structure::ContractOperationVersionedVerifierKey::V3(vk)) - }, - "verifier-key[v7]" => { - let vk: transient_crypto::proofs::VerifierKey = tagged_deserialize(&mut &vk[..])?; - Ok(mn_ledger::structure::ContractOperationVersionedVerifierKey::V4(vk)) - }, - _ => panic!("unknown verifier key tag: '{tag}'"), - } -} - -/// The verifier-key slot version an *existing* contract operation's key actually lives -/// in (the entry point alone doesn't say which slot). Ledger 9 keys can land in either -/// `V3` (legacy 2.x/v6) or `V4` (3.x/v7, preferred if somehow both are set) depending on -/// what compiled the circuit; removals must target whichever slot is populated, or they -/// fail with `VerifierKeyNotFound`. -pub fn contract_operation_version_of( - op: &onchain_runtime::state::ContractOperation, -) -> mn_ledger::structure::ContractOperationVersion { - if op.v3.is_some() { - mn_ledger::structure::ContractOperationVersion::V4 - } else { - mn_ledger::structure::ContractOperationVersion::V3 - } -} - -pub fn signature_verifying_key( - key: base_crypto::signatures::VerifyingKey, -) -> SignatureVerifyingKey { - SignatureVerifyingKey::Schnorr(key) -} - -pub fn transaction_signing_key(key: &base_crypto::signatures::SigningKey) -> TransactionSigningKey { - TransactionSigningKey::Schnorr(key.clone()) -} - -pub fn transaction_signature( - signature: base_crypto::signatures::Signature, -) -> TransactionSignature { - TransactionSignature::Schnorr(signature) -} - -pub fn maintenance_verifying_key( - key: base_crypto::signatures::VerifyingKey, -) -> ContractMaintenanceVerifyingKey { - ContractMaintenanceVerifyingKey::Schnorr(key) -} - -pub fn signature_verifying_key_ecdsa( - key: base_crypto::ecdsa::VerifyingKey, -) -> SignatureVerifyingKey { - SignatureVerifyingKey::ECDSA(key) -} - -pub fn transaction_signing_key_ecdsa( - key: &base_crypto::ecdsa::SigningKey, -) -> TransactionSigningKey { - TransactionSigningKey::ECDSA(key.clone()) -} - -pub fn transaction_signature_ecdsa( - signature: base_crypto::ecdsa::Signature, -) -> TransactionSignature { - TransactionSignature::ECDSA(signature) -} - -pub fn maintenance_verifying_key_ecdsa( - key: base_crypto::ecdsa::VerifyingKey, -) -> ContractMaintenanceVerifyingKey { - ContractMaintenanceVerifyingKey::ECDSA(key) -} - -/// Compatibility trait: L8 `apply` returns `WalletState`, L9 returns `Result, _>`. -pub trait IntoWalletState { - fn into_wallet_state(self) -> WalletState; -} -impl IntoWalletState for WalletState { - fn into_wallet_state(self) -> WalletState { - self +pub fn make_block_context( + tblock: crate::ledger_9::base_crypto::time::Timestamp, + parent_block_hash: crate::ledger_9::base_crypto::hash::HashOutput, + last_block_time: crate::ledger_9::base_crypto::time::Timestamp, +) -> crate::ledger_9::onchain_runtime::context::BlockContext { + crate::ledger_9::onchain_runtime::context::BlockContext { + tblock, + tblock_err: 30, + parent_block_hash, + last_block_time, } } -impl IntoWalletState for Result, E> { - fn into_wallet_state(self) -> WalletState { - self.expect("wallet state apply failed") - } -} - -/// Raw zkir bytes for circuit `name` (the `zkir/{name}.bzkir` the resolver -/// loads as `ProvingKeyMaterial::ir_source`). Ledger 9+ stores these on-chain -/// in the contract operation so deployed circuits can be re-proven/upgraded -/// from chain state alone; pre-9 `contract_operation_new` ignores them. -pub async fn ir_source(resolver: &Resolver, name: &'static str) -> Option> { - let material = resolver - .resolve_key(KeyLocation(std::borrow::Cow::Borrowed(name))) - .await - .ok()??; - Some(material.ir_source) -} - -/// Resolves a circuit's verifier key by name. -pub async fn verifier_key( - resolver: &Resolver, - name: &'static str, -) -> Option { - let material = resolver - .resolve_key(KeyLocation(std::borrow::Cow::Borrowed(name))) - .await - .ok()??; - Some(ContractVerifyingKeyBytes(material.verifier_key)) -} /// Serializes a mn_ledger::serialize-able type into bytes pub fn serialize_untagged(value: &T) -> Result, std::io::Error> { @@ -441,15 +244,6 @@ pub fn clamp_and_normalize( .expect("clamped cost should always normalize successfully") } -#[cfg(feature = "can-panic")] -pub fn token_type_decode(input: &str) -> TokenType { - let bytes = hex::decode(input).expect("Token value should be an hex"); - - let tt_bytes: [u8; 32] = bytes.try_into().expect("Token size should be 32 bytes"); - - TokenType::Shielded(ShieldedTokenType(HashOutput(tt_bytes))) -} - #[cfg(test)] mod tests { use super::*; diff --git a/ledger/helpers/src/ledger_9/network_id.rs b/ledger/helpers/src/ledger_9/network_id.rs deleted file mode 100644 index 078650ec4..000000000 --- a/ledger/helpers/src/ledger_9/network_id.rs +++ /dev/null @@ -1,13 +0,0 @@ -use crate::ledger_9::{DefaultDB, FinalizedTransaction, Transaction, deserialize}; - -/// Get NetworkId from transaction bytes -pub fn network_id_from_transaction_bytes(tx_bytes: &[u8]) -> Result { - let tx: FinalizedTransaction = deserialize(tx_bytes)?; - let network_id = match tx { - Transaction::Standard(standard_transaction) => standard_transaction.network_id, - Transaction::ClaimRewards(claim_rewards_transaction) => { - claim_rewards_transaction.network_id - }, - }; - Ok(network_id) -} diff --git a/ledger/helpers/src/ledger_9/test_utilities_local.rs b/ledger/helpers/src/ledger_9/test_utilities_local.rs deleted file mode 100644 index 0152cb8be..000000000 --- a/ledger/helpers/src/ledger_9/test_utilities_local.rs +++ /dev/null @@ -1,20 +0,0 @@ -// This file is part of midnight-node. -// Copyright (C) Midnight Foundation -// SPDX-License-Identifier: Apache-2.0 -// Licensed under the Apache License, Version 2.0 (the "License"); -// You may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Ledger-9 test utilities. -//! -//! Ledger 9 is built with the `test-utilities` feature, so this is a straight re-export of -//! the ledger's own module. The `ledger_8` copy of this file vendors the same surface by -//! hand — see the note there for why v8 cannot enable the upstream feature. - -pub use crate::ledger_9::mn_ledger::test_utilities::*; diff --git a/ledger/helpers/src/lib.rs b/ledger/helpers/src/lib.rs index 79504ce42..0ace64c38 100644 --- a/ledger/helpers/src/lib.rs +++ b/ledger/helpers/src/lib.rs @@ -14,34 +14,6 @@ mod utils; pub use utils::find_dependency_version; -pub mod extract_tx_with_context; - -/// Process-wide counters of replayed transactions that did not fully apply, -/// shared by every ledger generation's `LedgerContext`. -pub mod replay_stats { - use std::sync::atomic::AtomicU64; - - pub static PARTIALLY_FAILED_TXS: AtomicU64 = AtomicU64::new(0); - pub static FAILED_TXS: AtomicU64 = AtomicU64::new(0); -} - -/// Strategy for ordering candidate coins/UTXOs during input selection. -/// -/// Defined at the crate root (not inside `ledger_8`/`ledger_9`) so that all versions -/// see the same type, allowing it to flow through the toolkit's version-dispatched -/// builders unchanged. -#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] -pub enum CoinSelectionStrategy { - /// Use the largest coins/UTXOs first. Minimizes the number of inputs. - #[default] - LargestFirst, - /// Use the smallest coins/UTXOs first. Consolidates dust. - SmallestFirst, -} - -/// Struct to store serialized verifying key bytes -/// To be deserialized when constructing ContractOperations -pub struct ContractVerifyingKeyBytes(pub Vec); pub mod ledger_8; pub mod ledger_9; diff --git a/ledger/helpers/unsafe/Cargo.toml b/ledger/helpers/unsafe/Cargo.toml new file mode 100644 index 000000000..66527592b --- /dev/null +++ b/ledger/helpers/unsafe/Cargo.toml @@ -0,0 +1,45 @@ +[package] +name = "midnight-ledger-unsafe-helpers" +description = "Utilities for toolkit and tests. Do not use in node, especially consensus." +version = "0.1.0" +edition = "2024" +license-file.workspace = true + +[dependencies] +hex.workspace = true +sha2.workspace = true + +midnight-node-ledger-helpers = { workspace = true } + +base-crypto = { workspace = true } +midnight-serialize = { workspace = true } +transient-crypto = { workspace = true } + +mn-ledger-8 = { workspace = true, features = ["proving"] } +ledger-storage-ledger-8 = { workspace = true } + +mn-ledger-9 = { workspace = true, features = ["proving"] } + +# v8->v9 state translation table, used by the fork boundary (`fork::fork_8_to_9`). +v8-to-v9-state-translation = { workspace = true } + +rand = { version = "0.8.4", features = ["small_rng", "getrandom"] } +rayon.workspace = true +log.workspace = true +lazy_static.workspace = true +itertools = { workspace = true, features = ["use_alloc"] } +thiserror.workspace = true +tokio.workspace = true +async-trait.workspace = true +futures.workspace = true +bip32.workspace = true +derive-where.workspace = true +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +bech32 = "0.11.0" + +[features] +default = [] +erase-proof = [] +test-utils = [] +fixed-point-custom-serde = ["mn-ledger-8/fixed-point-custom-serde", "mn-ledger-9/fixed-point-custom-serde"] diff --git a/ledger/helpers/src/extract_tx_with_context.rs b/ledger/helpers/unsafe/src/extract_tx_with_context.rs similarity index 83% rename from ledger/helpers/src/extract_tx_with_context.rs rename to ledger/helpers/unsafe/src/extract_tx_with_context.rs index 04cd449a4..df98e039f 100644 --- a/ledger/helpers/src/extract_tx_with_context.rs +++ b/ledger/helpers/unsafe/src/extract_tx_with_context.rs @@ -1,7 +1,5 @@ -#[cfg(feature = "can-panic")] -use crate::fork::raw_block_data::{RawTransaction, SerializedTx}; +use midnight_node_ledger_helpers::fork::raw_block_data::{RawTransaction, SerializedTx}; -#[cfg(feature = "can-panic")] pub fn extract_tx_with_context_ledger_9(bytes: &[u8]) -> (Vec, crate::ledger_9::BlockContext) { let serialized_tx: SerializedTx = serde_json::from_slice(bytes).expect("failed to deserialize as SerializedTx"); @@ -13,10 +11,7 @@ pub fn extract_tx_with_context_ledger_9(bytes: &[u8]) -> (Vec, crate::ledger (tx_bytes, block_context) } -#[cfg(feature = "can-panic")] pub fn extract_tx_with_context_ledger_8(bytes: &[u8]) -> (Vec, crate::ledger_8::BlockContext) { - use crate::fork::raw_block_data::RawTransaction; - let serialized_tx: SerializedTx = serde_json::from_slice(bytes).expect("failed to deserialize as SerializedTx"); let RawTransaction::Midnight(tx_bytes) = serialized_tx.tx else { diff --git a/ledger/helpers/src/fork/fork_8_to_9.rs b/ledger/helpers/unsafe/src/fork/fork_8_to_9.rs similarity index 89% rename from ledger/helpers/src/fork/fork_8_to_9.rs rename to ledger/helpers/unsafe/src/fork/fork_8_to_9.rs index 60164d29a..2992f6d8a 100644 --- a/ledger/helpers/src/fork/fork_8_to_9.rs +++ b/ledger/helpers/unsafe/src/fork/fork_8_to_9.rs @@ -1,3 +1,18 @@ +// This file is part of midnight-node. +// Copyright (C) Midnight Foundation +// SPDX-License-Identifier: Apache-2.0 +// Licensed under the Apache License, Version 2.0 (the "License"); +// You may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + use std::collections::HashMap; use tokio::sync::Mutex as MutexTokio; diff --git a/ledger/helpers/src/fork/fork_aware_context.rs b/ledger/helpers/unsafe/src/fork/fork_aware_context.rs similarity index 98% rename from ledger/helpers/src/fork/fork_aware_context.rs rename to ledger/helpers/unsafe/src/fork/fork_aware_context.rs index 721e080cd..65d7dd39a 100644 --- a/ledger/helpers/src/fork/fork_aware_context.rs +++ b/ledger/helpers/unsafe/src/fork/fork_aware_context.rs @@ -14,7 +14,9 @@ // limitations under the License. pub use crate::fork::fork_8_to_9::fork_context_8_to_9; -use crate::fork::raw_block_data::{LedgerVersion, RawBlockData, RawTransaction}; +use midnight_node_ledger_helpers::fork::raw_block_data::{ + LedgerVersion, RawBlockData, RawTransaction, +}; type Db8 = crate::ledger_8::DefaultDB; type Db9 = crate::ledger_9::DefaultDB; diff --git a/ledger/helpers/unsafe/src/fork/mod.rs b/ledger/helpers/unsafe/src/fork/mod.rs new file mode 100644 index 000000000..bec5e90d8 --- /dev/null +++ b/ledger/helpers/unsafe/src/fork/mod.rs @@ -0,0 +1,65 @@ +// This file is part of midnight-node. +// Copyright (C) Midnight Foundation +// SPDX-License-Identifier: Apache-2.0 +// Licensed under the Apache License, Version 2.0 (the "License"); +// You may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use midnight_node_ledger_helpers::fork::raw_block_data::{ + LedgerVersion, RawBlockData, SerializedTxBatches, +}; + +pub mod fork_8_to_9; +pub mod fork_aware_context; + +pub fn network_id_and_ledger_version_from_tx_bytes( + tx_bytes: &[u8], +) -> Result<(String, LedgerVersion), std::io::Error> { + let res9 = crate::ledger_9::network_id_from_transaction_bytes(tx_bytes); + if let Ok(ref network_id) = res9 { + return Ok((network_id.to_string(), LedgerVersion::Ledger9)); + } + + let network_id = crate::ledger_8::network_id_from_transaction_bytes(tx_bytes)?; + Ok((network_id.to_string(), LedgerVersion::Ledger8)) +} + +/// Builds the display-friendly `RawBlockData` view of a `SerializedTxBatches` warp +/// transfer, one entry per block. Lives here (not as a `TryFrom` impl alongside the +/// type in `midnight-node-ledger-helpers`) because it dispatches through +/// [`network_id_and_ledger_version_from_tx_bytes`], which is toolkit-only. +pub fn raw_block_data_from_batches( + value: &SerializedTxBatches, +) -> Result, String> { + let mut blocks = Vec::new(); + let mut ledger_version = LedgerVersion::default(); + + for batch in &value.batches { + let context = SerializedTxBatches::get_context(batch)?; + let transactions: Vec<_> = batch.iter().map(|t| t.tx.clone()).collect(); + + if let Some((_, v)) = transactions + .iter() + .filter_map(|tx| network_id_and_ledger_version_from_tx_bytes(tx.as_bytes()).ok()) + .next() + { + ledger_version = v; + } + + blocks.push(RawBlockData::new_from_timestamp( + context.tblock.to_secs(), + ledger_version, + transactions, + )); + } + + Ok(blocks) +} diff --git a/ledger/helpers/src/ledger_8/block_data.rs b/ledger/helpers/unsafe/src/ledger_8/block_data.rs similarity index 50% rename from ledger/helpers/src/ledger_8/block_data.rs rename to ledger/helpers/unsafe/src/ledger_8/block_data.rs index 28240b5d6..6cb8df714 100644 --- a/ledger/helpers/src/ledger_8/block_data.rs +++ b/ledger/helpers/unsafe/src/ledger_8/block_data.rs @@ -1,3 +1,18 @@ +// This file is part of midnight-node. +// Copyright (C) Midnight Foundation +// SPDX-License-Identifier: Apache-2.0 +// Licensed under the Apache License, Version 2.0 (the "License"); +// You may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + use crate::ledger_8::{ BlockContext, DB, HashOutput, ProofKind, SerdeTransaction, SignatureKind, Tagged, }; diff --git a/ledger/helpers/src/ledger_8/context.rs b/ledger/helpers/unsafe/src/ledger_8/context.rs similarity index 100% rename from ledger/helpers/src/ledger_8/context.rs rename to ledger/helpers/unsafe/src/ledger_8/context.rs diff --git a/ledger/helpers/src/ledger_8/context/builder_context.rs b/ledger/helpers/unsafe/src/ledger_8/context/builder_context.rs similarity index 100% rename from ledger/helpers/src/ledger_8/context/builder_context.rs rename to ledger/helpers/unsafe/src/ledger_8/context/builder_context.rs diff --git a/ledger/helpers/src/ledger_8/context/indexer_context.rs b/ledger/helpers/unsafe/src/ledger_8/context/indexer_context.rs similarity index 100% rename from ledger/helpers/src/ledger_8/context/indexer_context.rs rename to ledger/helpers/unsafe/src/ledger_8/context/indexer_context.rs diff --git a/ledger/helpers/src/ledger_8/contract/call.rs b/ledger/helpers/unsafe/src/ledger_8/contract/call.rs similarity index 100% rename from ledger/helpers/src/ledger_8/contract/call.rs rename to ledger/helpers/unsafe/src/ledger_8/contract/call.rs diff --git a/ledger/helpers/src/ledger_8/contract/deploy.rs b/ledger/helpers/unsafe/src/ledger_8/contract/deploy.rs similarity index 100% rename from ledger/helpers/src/ledger_8/contract/deploy.rs rename to ledger/helpers/unsafe/src/ledger_8/contract/deploy.rs diff --git a/ledger/helpers/src/ledger_8/contract/maintenance.rs b/ledger/helpers/unsafe/src/ledger_8/contract/maintenance.rs similarity index 100% rename from ledger/helpers/src/ledger_8/contract/maintenance.rs rename to ledger/helpers/unsafe/src/ledger_8/contract/maintenance.rs diff --git a/ledger/helpers/src/ledger_8/contract/merkle_tree.rs b/ledger/helpers/unsafe/src/ledger_8/contract/merkle_tree.rs similarity index 100% rename from ledger/helpers/src/ledger_8/contract/merkle_tree.rs rename to ledger/helpers/unsafe/src/ledger_8/contract/merkle_tree.rs diff --git a/ledger/helpers/src/ledger_8/contract/mod.rs b/ledger/helpers/unsafe/src/ledger_8/contract/mod.rs similarity index 96% rename from ledger/helpers/src/ledger_8/contract/mod.rs rename to ledger/helpers/unsafe/src/ledger_8/contract/mod.rs index 40ca30c46..2ebfec6e5 100644 --- a/ledger/helpers/src/ledger_8/contract/mod.rs +++ b/ledger/helpers/unsafe/src/ledger_8/contract/mod.rs @@ -36,16 +36,12 @@ pub use crate::ledger_8::test_resolver; mod call; mod deploy; -#[cfg(feature = "can-panic")] mod maintenance; -#[cfg(feature = "can-panic")] mod merkle_tree; pub use call::*; pub use deploy::*; -#[cfg(feature = "can-panic")] pub use maintenance::*; -#[cfg(feature = "can-panic")] pub use merkle_tree::*; #[async_trait] diff --git a/ledger/helpers/src/ledger_8/ecdsa.rs b/ledger/helpers/unsafe/src/ledger_8/ecdsa.rs similarity index 100% rename from ledger/helpers/src/ledger_8/ecdsa.rs rename to ledger/helpers/unsafe/src/ledger_8/ecdsa.rs diff --git a/ledger/helpers/src/ledger_8/input.rs b/ledger/helpers/unsafe/src/ledger_8/input.rs similarity index 100% rename from ledger/helpers/src/ledger_8/input.rs rename to ledger/helpers/unsafe/src/ledger_8/input.rs diff --git a/ledger/helpers/src/ledger_8/intent.rs b/ledger/helpers/unsafe/src/ledger_8/intent.rs similarity index 100% rename from ledger/helpers/src/ledger_8/intent.rs rename to ledger/helpers/unsafe/src/ledger_8/intent.rs diff --git a/ledger/helpers/unsafe/src/ledger_8/mod.rs b/ledger/helpers/unsafe/src/ledger_8/mod.rs new file mode 100644 index 000000000..0cfacd028 --- /dev/null +++ b/ledger/helpers/unsafe/src/ledger_8/mod.rs @@ -0,0 +1,185 @@ +// This file is part of midnight-node. +// Copyright (C) Midnight Foundation +// SPDX-License-Identifier: Apache-2.0 +// Licensed under the Apache License, Version 2.0 (the "License"); +// You may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Ledger generation 8 toolkit apparatus: context/intent/offer/UTXO builders and +//! wallet key management, layered on top of the shared, version-independent +//! surface re-exported from `midnight-node-ledger-helpers::ledger_8`. +//! +//! Its `ledger_9/` counterpart is a separate copy on purpose: `diff -r ledger_8 +//! ledger_9` shows exactly where the two generations diverge, and an edit here +//! cannot leak into v9. + +pub use midnight_node_ledger_helpers::ledger_8::*; + +pub use crate::extract_tx_with_context::extract_tx_with_context_ledger_8 as extract_tx_with_context; + +pub use crate::CoinSelectionStrategy; +use crate::ContractVerifyingKeyBytes; + +use midnight_serialize::tagged_deserialize; + +// ECDSA is only supported from ledger 9; this module is stubs that panic. +mod ecdsa; +pub use ecdsa::{SigningKeyEcdsa, VerifyingKeyEcdsa}; + +pub mod block_data; +pub mod context; +pub mod contract; +mod input; +mod intent; +mod offer; +mod output; +pub mod transaction; +mod transient; +mod unshielded_offer; +mod utxo_output; +mod utxo_spend; +pub mod wallet; + +mod proving; + +pub use { + context::*, contract::*, input::*, intent::*, offer::*, output::*, proving::*, transaction::*, + transient::*, unshielded_offer::*, utxo_output::*, utxo_spend::*, wallet::*, +}; + +/// Builds a contract operation from a verifier key. `_ir_source` is accepted +/// for cross-version call-site compatibility but silently dropped: pre-ledger-9 +/// contract operations have no on-chain IR slot. +pub fn contract_operation_new( + vk: Option, + _ir_source: Option>, +) -> Result { + let vk = + vk.map(|b| tagged_deserialize(&mut b.0.as_slice()).expect("failed to read verifier key")); + Ok(onchain_runtime::state::ContractOperation::new(vk)) +} + +/// Wraps a verifier key in the maintenance-update enum for this ledger generation. +/// Pre-ledger-9 ledgers expose only the `V3` (zk-stdlib v1) variant, which takes the +/// same `transient_crypto::proofs::VerifierKey` this module deserializes. +pub fn contract_operation_versioned_verifier_key( + vk: Vec, +) -> Result { + let vk: transient_crypto::proofs::VerifierKey = tagged_deserialize(&mut &vk[..])?; + Ok(mn_ledger::structure::ContractOperationVersionedVerifierKey::V3(vk)) +} + +/// The verifier-key slot version for this ledger generation, used when *removing* +/// a key (the entry point alone doesn't say which slot the key lives in). +/// Pre-ledger-9 ledgers only have the `V3` slot, so removals target it. Mirrors +/// `contract_operation_versioned_verifier_key` above. +pub fn contract_operation_version_of( + _op: &onchain_runtime::state::ContractOperation, +) -> mn_ledger::structure::ContractOperationVersion { + mn_ledger::structure::ContractOperationVersion::V3 +} + +pub fn signature_verifying_key( + key: base_crypto::signatures::VerifyingKey, +) -> SignatureVerifyingKey { + key +} + +pub fn transaction_signing_key(key: &base_crypto::signatures::SigningKey) -> TransactionSigningKey { + key.clone() +} + +pub fn transaction_signature( + signature: base_crypto::signatures::Signature, +) -> TransactionSignature { + signature +} + +pub fn maintenance_verifying_key( + key: base_crypto::signatures::VerifyingKey, +) -> SignatureVerifyingKey { + key +} + +pub fn signature_verifying_key_ecdsa(_key: VerifyingKeyEcdsa) -> SignatureVerifyingKey { + unimplemented!("ecdsa is only supported from ledger 9") +} + +pub fn transaction_signing_key_ecdsa(_key: &SigningKeyEcdsa) -> TransactionSigningKey { + unimplemented!("ecdsa is only supported from ledger 9") +} + +pub fn transaction_signature_ecdsa( + _signature: base_crypto::ecdsa::Signature, +) -> TransactionSignature { + unimplemented!("ecdsa is only supported from ledger 9") +} + +pub fn maintenance_verifying_key_ecdsa(_key: VerifyingKeyEcdsa) -> SignatureVerifyingKey { + unimplemented!("ecdsa is only supported from ledger 9") +} + +/// Compatibility trait: L8 `apply` returns `WalletState`, L9 returns `Result, _>`. +pub trait IntoWalletState { + fn into_wallet_state(self) -> WalletState; +} +impl IntoWalletState for WalletState { + fn into_wallet_state(self) -> WalletState { + self + } +} +impl IntoWalletState for Result, E> { + fn into_wallet_state(self) -> WalletState { + self.expect("wallet state apply failed") + } +} + +/// Raw zkir bytes for circuit `name` (the `zkir/{name}.bzkir` the resolver +/// loads as `ProvingKeyMaterial::ir_source`). Ledger 9+ stores these on-chain +/// in the contract operation so deployed circuits can be re-proven/upgraded +/// from chain state alone; pre-9 `contract_operation_new` ignores them. +pub async fn ir_source(resolver: &Resolver, name: &'static str) -> Option> { + let material = resolver + .resolve_key(KeyLocation(std::borrow::Cow::Borrowed(name))) + .await + .ok()??; + Some(material.ir_source) +} + +/// Resolves a circuit's verifier key by name. +pub async fn verifier_key( + resolver: &Resolver, + name: &'static str, +) -> Option { + let material = resolver + .resolve_key(KeyLocation(std::borrow::Cow::Borrowed(name))) + .await + .ok()??; + Some(ContractVerifyingKeyBytes(material.verifier_key)) +} + +pub fn token_type_decode(input: &str) -> TokenType { + let bytes = hex::decode(input).expect("Token value should be an hex"); + + let tt_bytes: [u8; 32] = bytes.try_into().expect("Token size should be 32 bytes"); + + TokenType::Shielded(ShieldedTokenType(HashOutput(tt_bytes))) +} + +/// Get NetworkId from transaction bytes +pub fn network_id_from_transaction_bytes(tx_bytes: &[u8]) -> Result { + let tx: FinalizedTransaction = deserialize(tx_bytes)?; + let network_id = match tx { + Transaction::Standard(standard_transaction) => standard_transaction.network_id, + Transaction::ClaimRewards(claim_rewards_transaction) => { + claim_rewards_transaction.network_id + }, + }; + Ok(network_id) +} diff --git a/ledger/helpers/src/ledger_8/offer.rs b/ledger/helpers/unsafe/src/ledger_8/offer.rs similarity index 100% rename from ledger/helpers/src/ledger_8/offer.rs rename to ledger/helpers/unsafe/src/ledger_8/offer.rs diff --git a/ledger/helpers/src/ledger_8/output.rs b/ledger/helpers/unsafe/src/ledger_8/output.rs similarity index 100% rename from ledger/helpers/src/ledger_8/output.rs rename to ledger/helpers/unsafe/src/ledger_8/output.rs diff --git a/ledger/helpers/src/ledger_8/proving.rs b/ledger/helpers/unsafe/src/ledger_8/proving.rs similarity index 99% rename from ledger/helpers/src/ledger_8/proving.rs rename to ledger/helpers/unsafe/src/ledger_8/proving.rs index 158f072dc..c1f628bac 100644 --- a/ledger/helpers/src/ledger_8/proving.rs +++ b/ledger/helpers/unsafe/src/ledger_8/proving.rs @@ -11,8 +11,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#![cfg(feature = "can-panic")] - use crate::ledger_8::{ CostModel, DB, KeyLocation, LocalProvingProvider, PUBLIC_PARAMS, PedersenRandomness, ProofMarker, ProofPreimageMarker, Resolver, ResolverTrait, Signature, StdRng, Transaction, diff --git a/ledger/helpers/src/ledger_8/transaction.rs b/ledger/helpers/unsafe/src/ledger_8/transaction.rs similarity index 100% rename from ledger/helpers/src/ledger_8/transaction.rs rename to ledger/helpers/unsafe/src/ledger_8/transaction.rs diff --git a/ledger/helpers/src/ledger_8/transient.rs b/ledger/helpers/unsafe/src/ledger_8/transient.rs similarity index 100% rename from ledger/helpers/src/ledger_8/transient.rs rename to ledger/helpers/unsafe/src/ledger_8/transient.rs diff --git a/ledger/helpers/src/ledger_8/unshielded_offer.rs b/ledger/helpers/unsafe/src/ledger_8/unshielded_offer.rs similarity index 100% rename from ledger/helpers/src/ledger_8/unshielded_offer.rs rename to ledger/helpers/unsafe/src/ledger_8/unshielded_offer.rs diff --git a/ledger/helpers/src/ledger_8/utxo_output.rs b/ledger/helpers/unsafe/src/ledger_8/utxo_output.rs similarity index 100% rename from ledger/helpers/src/ledger_8/utxo_output.rs rename to ledger/helpers/unsafe/src/ledger_8/utxo_output.rs diff --git a/ledger/helpers/src/ledger_8/utxo_spend.rs b/ledger/helpers/unsafe/src/ledger_8/utxo_spend.rs similarity index 100% rename from ledger/helpers/src/ledger_8/utxo_spend.rs rename to ledger/helpers/unsafe/src/ledger_8/utxo_spend.rs diff --git a/ledger/helpers/src/ledger_8/wallet/dust.rs b/ledger/helpers/unsafe/src/ledger_8/wallet/dust.rs similarity index 93% rename from ledger/helpers/src/ledger_8/wallet/dust.rs rename to ledger/helpers/unsafe/src/ledger_8/wallet/dust.rs index 482969242..33bd32f81 100644 --- a/ledger/helpers/src/ledger_8/wallet/dust.rs +++ b/ledger/helpers/unsafe/src/ledger_8/wallet/dust.rs @@ -1,3 +1,18 @@ +// This file is part of midnight-node. +// Copyright (C) Midnight Foundation +// SPDX-License-Identifier: Apache-2.0 +// Licensed under the Apache License, Version 2.0 (the "License"); +// You may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + use derive_where::derive_where; use thiserror::Error; @@ -28,7 +43,6 @@ pub struct DustWallet { impl DeriveSeed for DustWallet {} -#[cfg(feature = "can-panic")] impl IntoWalletAddress for DustWallet { fn address(&self, network_id: &str) -> WalletAddress { let hrp_string = diff --git a/ledger/helpers/src/ledger_8/wallet/hd.rs b/ledger/helpers/unsafe/src/ledger_8/wallet/hd.rs similarity index 99% rename from ledger/helpers/src/ledger_8/wallet/hd.rs rename to ledger/helpers/unsafe/src/ledger_8/wallet/hd.rs index c0e18a317..9d01e5595 100644 --- a/ledger/helpers/src/ledger_8/wallet/hd.rs +++ b/ledger/helpers/unsafe/src/ledger_8/wallet/hd.rs @@ -11,8 +11,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#![cfg(feature = "can-panic")] - use crate::ledger_8::WalletSeed; use bech32::{Bech32m, Hrp}; use bip32::{DerivationPath as Bip32DerivationPath, XPrv}; diff --git a/ledger/helpers/src/ledger_8/wallet/mod.rs b/ledger/helpers/unsafe/src/ledger_8/wallet/mod.rs similarity index 98% rename from ledger/helpers/src/ledger_8/wallet/mod.rs rename to ledger/helpers/unsafe/src/ledger_8/wallet/mod.rs index 170ac716b..d27ea4827 100644 --- a/ledger/helpers/src/ledger_8/wallet/mod.rs +++ b/ledger/helpers/unsafe/src/ledger_8/wallet/mod.rs @@ -101,7 +101,6 @@ impl Wallet { utxos } - #[cfg(feature = "can-panic")] pub fn increment_seed(s: &str) -> Result { let num = u128::from_str_radix(s, 2).expect("Invalid wallet seed"); let result = num.checked_add(1).ok_or("wallet seed overflow")?; @@ -109,7 +108,6 @@ impl Wallet { Ok(format!("{result:0width$b}")) } - #[cfg(feature = "can-panic")] pub fn wallet_seed_decode(input: &str) -> WalletSeed { input.parse().expect("failed to decode seed") } diff --git a/ledger/helpers/src/ledger_8/wallet/shielded.rs b/ledger/helpers/unsafe/src/ledger_8/wallet/shielded.rs similarity index 98% rename from ledger/helpers/src/ledger_8/wallet/shielded.rs rename to ledger/helpers/unsafe/src/ledger_8/wallet/shielded.rs index d09d8bd95..acf6c26de 100644 --- a/ledger/helpers/src/ledger_8/wallet/shielded.rs +++ b/ledger/helpers/unsafe/src/ledger_8/wallet/shielded.rs @@ -11,8 +11,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#![cfg(feature = "can-panic")] - use crate::ledger_8::{ CoinPublicKey, DB, DerivationPath, DerivationPathError, DeriveSeed, Deserializable, EncryptionPublicKey, HRP_CONSTANT, HRP_CREDENTIAL_SHIELDED, HRP_CREDENTIAL_SHIELDED_ESK, @@ -85,7 +83,6 @@ impl ShieldedWallet { Self { state, coin_public_key, enc_public_key, secret_keys: None } } - #[cfg(feature = "can-panic")] pub fn secret_keys(&self) -> &SecretKeys { self.secret_keys.as_ref().expect("Missing `SecretKeys` for the `ShieldedWallet") } diff --git a/ledger/helpers/src/ledger_8/wallet/unshielded.rs b/ledger/helpers/unsafe/src/ledger_8/wallet/unshielded.rs similarity index 99% rename from ledger/helpers/src/ledger_8/wallet/unshielded.rs rename to ledger/helpers/unsafe/src/ledger_8/wallet/unshielded.rs index fbe6b5bee..2d17a1e4f 100644 --- a/ledger/helpers/src/ledger_8/wallet/unshielded.rs +++ b/ledger/helpers/unsafe/src/ledger_8/wallet/unshielded.rs @@ -130,7 +130,6 @@ impl std::fmt::Debug for UnshieldedWallet { impl DeriveSeed for UnshieldedWallet {} -#[cfg(feature = "can-panic")] impl IntoWalletAddress for UnshieldedWallet { fn address(&self, network_id: &str) -> WalletAddress { let hrp_string = format!( @@ -255,7 +254,6 @@ impl UnshieldedWallet { /// The raw Schnorr signing key, for the Schnorr-only contract-maintenance committee and /// key-serialization paths. Panics for a non-Schnorr or address-only wallet. - #[cfg(feature = "can-panic")] pub fn signing_key(&self) -> &SigningKeySchnorr { match &self.keys { Some(UnshieldedWalletKeys::Schnorr { signing_key: Some(sk), .. }) => sk, @@ -327,7 +325,7 @@ impl From for UnshieldedWallet { // `new`/`default` derive via HD (`derive_seed`, see `hd.rs`), which needs `can-panic`. ECDSA-only // tests live in the ledger-9 copy's `ecdsa_wallet_tests`: this file has one copy per generation, // so putting them here would report a misleading `…::ecdsa_… ok` where they can't actually run. -#[cfg(all(test, feature = "can-panic"))] +#[cfg(test)] mod tests { use super::{UnshieldedSignatureScheme, UnshieldedWallet}; use crate::ledger_8::WalletSeed; diff --git a/ledger/helpers/src/ledger_9/block_data.rs b/ledger/helpers/unsafe/src/ledger_9/block_data.rs similarity index 50% rename from ledger/helpers/src/ledger_9/block_data.rs rename to ledger/helpers/unsafe/src/ledger_9/block_data.rs index 64516b08f..95c7c3254 100644 --- a/ledger/helpers/src/ledger_9/block_data.rs +++ b/ledger/helpers/unsafe/src/ledger_9/block_data.rs @@ -1,3 +1,16 @@ +// This file is part of midnight-node. +// Copyright (C) Midnight Foundation +// SPDX-License-Identifier: Apache-2.0 +// Licensed under the Apache License, Version 2.0 (the "License"); +// You may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + use crate::ledger_9::{ BlockContext, DB, HashOutput, ProofKind, SerdeTransaction, SignatureKind, Tagged, }; diff --git a/ledger/helpers/src/ledger_9/context.rs b/ledger/helpers/unsafe/src/ledger_9/context.rs similarity index 100% rename from ledger/helpers/src/ledger_9/context.rs rename to ledger/helpers/unsafe/src/ledger_9/context.rs diff --git a/ledger/helpers/src/ledger_9/context/builder_context.rs b/ledger/helpers/unsafe/src/ledger_9/context/builder_context.rs similarity index 100% rename from ledger/helpers/src/ledger_9/context/builder_context.rs rename to ledger/helpers/unsafe/src/ledger_9/context/builder_context.rs diff --git a/ledger/helpers/src/ledger_9/context/indexer_context.rs b/ledger/helpers/unsafe/src/ledger_9/context/indexer_context.rs similarity index 100% rename from ledger/helpers/src/ledger_9/context/indexer_context.rs rename to ledger/helpers/unsafe/src/ledger_9/context/indexer_context.rs diff --git a/ledger/helpers/src/ledger_9/contract/call.rs b/ledger/helpers/unsafe/src/ledger_9/contract/call.rs similarity index 100% rename from ledger/helpers/src/ledger_9/contract/call.rs rename to ledger/helpers/unsafe/src/ledger_9/contract/call.rs diff --git a/ledger/helpers/src/ledger_9/contract/deploy.rs b/ledger/helpers/unsafe/src/ledger_9/contract/deploy.rs similarity index 100% rename from ledger/helpers/src/ledger_9/contract/deploy.rs rename to ledger/helpers/unsafe/src/ledger_9/contract/deploy.rs diff --git a/ledger/helpers/src/ledger_9/contract/maintenance.rs b/ledger/helpers/unsafe/src/ledger_9/contract/maintenance.rs similarity index 100% rename from ledger/helpers/src/ledger_9/contract/maintenance.rs rename to ledger/helpers/unsafe/src/ledger_9/contract/maintenance.rs diff --git a/ledger/helpers/src/ledger_9/contract/merkle_tree.rs b/ledger/helpers/unsafe/src/ledger_9/contract/merkle_tree.rs similarity index 100% rename from ledger/helpers/src/ledger_9/contract/merkle_tree.rs rename to ledger/helpers/unsafe/src/ledger_9/contract/merkle_tree.rs diff --git a/ledger/helpers/src/ledger_9/contract/mod.rs b/ledger/helpers/unsafe/src/ledger_9/contract/mod.rs similarity index 96% rename from ledger/helpers/src/ledger_9/contract/mod.rs rename to ledger/helpers/unsafe/src/ledger_9/contract/mod.rs index 5a94e9ea8..b3234825c 100644 --- a/ledger/helpers/src/ledger_9/contract/mod.rs +++ b/ledger/helpers/unsafe/src/ledger_9/contract/mod.rs @@ -36,16 +36,12 @@ pub use crate::ledger_9::test_resolver; mod call; mod deploy; -#[cfg(feature = "can-panic")] mod maintenance; -#[cfg(feature = "can-panic")] mod merkle_tree; pub use call::*; pub use deploy::*; -#[cfg(feature = "can-panic")] pub use maintenance::*; -#[cfg(feature = "can-panic")] pub use merkle_tree::*; #[async_trait] diff --git a/ledger/helpers/src/ledger_9/ecdsa.rs b/ledger/helpers/unsafe/src/ledger_9/ecdsa.rs similarity index 100% rename from ledger/helpers/src/ledger_9/ecdsa.rs rename to ledger/helpers/unsafe/src/ledger_9/ecdsa.rs diff --git a/ledger/helpers/src/ledger_9/ecdsa_wallet_tests.rs b/ledger/helpers/unsafe/src/ledger_9/ecdsa_wallet_tests.rs similarity index 100% rename from ledger/helpers/src/ledger_9/ecdsa_wallet_tests.rs rename to ledger/helpers/unsafe/src/ledger_9/ecdsa_wallet_tests.rs diff --git a/ledger/helpers/src/ledger_9/input.rs b/ledger/helpers/unsafe/src/ledger_9/input.rs similarity index 100% rename from ledger/helpers/src/ledger_9/input.rs rename to ledger/helpers/unsafe/src/ledger_9/input.rs diff --git a/ledger/helpers/src/ledger_9/intent.rs b/ledger/helpers/unsafe/src/ledger_9/intent.rs similarity index 100% rename from ledger/helpers/src/ledger_9/intent.rs rename to ledger/helpers/unsafe/src/ledger_9/intent.rs diff --git a/ledger/helpers/unsafe/src/ledger_9/mod.rs b/ledger/helpers/unsafe/src/ledger_9/mod.rs new file mode 100644 index 000000000..8fe6a76c4 --- /dev/null +++ b/ledger/helpers/unsafe/src/ledger_9/mod.rs @@ -0,0 +1,225 @@ +// This file is part of midnight-node. +// Copyright (C) Midnight Foundation +// SPDX-License-Identifier: Apache-2.0 +// Licensed under the Apache License, Version 2.0 (the "License"); +// You may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Ledger generation 9 toolkit apparatus: context/intent/offer/UTXO builders and +//! wallet key management, layered on top of the shared, version-independent +//! surface re-exported from `midnight-node-ledger-helpers::ledger_9`. +//! +//! Its `ledger_8/` counterpart is a separate copy on purpose: `diff -r ledger_8 +//! ledger_9` shows exactly where the two generations diverge, and an edit here +//! cannot leak into v8. + +pub use midnight_node_ledger_helpers::ledger_9::*; + +pub use crate::extract_tx_with_context::extract_tx_with_context_ledger_9 as extract_tx_with_context; + +pub use crate::CoinSelectionStrategy; +use crate::ContractVerifyingKeyBytes; + +use midnight_serialize::{peek_tag, tagged_deserialize}; + +// ECDSA is natively supported from ledger 9. +mod ecdsa; +pub use ecdsa::{SigningKeyEcdsa, VerifyingKeyEcdsa}; + +// Ledger-9-only ECDSA wallet tests (no v8 counterpart); see the module docs. +#[cfg(test)] +mod ecdsa_wallet_tests; + +pub mod block_data; +pub mod context; +pub mod contract; +mod input; +mod intent; +mod offer; +mod output; +pub mod transaction; +mod transient; +mod unshielded_offer; +mod utxo_output; +mod utxo_spend; +pub mod wallet; + +mod proving; + +pub use { + context::*, contract::*, input::*, intent::*, offer::*, output::*, proving::*, transaction::*, + transient::*, unshielded_offer::*, utxo_output::*, utxo_spend::*, wallet::*, +}; + +/// Builds a contract operation from a verifier key plus, from ledger 9 on, +/// the circuit's zkir. `ir_source` is stored on-chain alongside the verifier +/// key so the deployed contract's circuits can later be re-proven/upgraded +/// from chain state alone; it counts toward `max_contract_metadata_size`. +pub fn contract_operation_new( + vk: Option, + ir_source: Option>, +) -> Result { + let ir = + ir_source.map(|bytes| ledger_storage::arena::Sp::new(onchain_runtime::state::IrBuf(bytes))); + let mut op = onchain_runtime::state::ContractOperation::new(None, ir); + + if let Some(vk) = vk { + let tag = peek_tag(&mut std::io::Cursor::new(&vk.0))?; + match tag.as_str() { + "verifier-key[v6]" => op.v2 = Some(tagged_deserialize(&mut &vk.0[..])?), + "verifier-key[v7]" => op.v3 = Some(tagged_deserialize(&mut &vk.0[..])?), + _ => panic!("unknown verifier key tag: '{tag}'"), + } + } + + Ok(op) +} + +/// Wraps a verifier key in the maintenance-update enum for this ledger generation. +/// Ledger 9 accepts either a legacy 2.x (`v6`) key, stored in the `V3` slot via the +/// crate-level (non-ledger-9-aliased) `transient_crypto` — the same 2.x +/// `midnight-transient-crypto` build `op.v2` uses in `contract_operation_new` above — +/// or a 3.x/zk-stdlib-v2 (`v7`) key, stored in the `V4` slot. The tag on the key file +/// itself says which, mirroring the dispatch in `contract_operation_new`. +pub fn contract_operation_versioned_verifier_key( + vk: Vec, +) -> Result { + let tag = peek_tag(&mut std::io::Cursor::new(&vk))?; + match tag.as_str() { + "verifier-key[v6]" => { + let vk: ::transient_crypto::proofs::VerifierKey = tagged_deserialize(&mut &vk[..])?; + Ok(mn_ledger::structure::ContractOperationVersionedVerifierKey::V3(vk)) + }, + "verifier-key[v7]" => { + let vk: transient_crypto::proofs::VerifierKey = tagged_deserialize(&mut &vk[..])?; + Ok(mn_ledger::structure::ContractOperationVersionedVerifierKey::V4(vk)) + }, + _ => panic!("unknown verifier key tag: '{tag}'"), + } +} + +/// The verifier-key slot version an *existing* contract operation's key actually lives +/// in (the entry point alone doesn't say which slot). Ledger 9 keys can land in either +/// `V3` (legacy 2.x/v6) or `V4` (3.x/v7, preferred if somehow both are set) depending on +/// what compiled the circuit; removals must target whichever slot is populated, or they +/// fail with `VerifierKeyNotFound`. +pub fn contract_operation_version_of( + op: &onchain_runtime::state::ContractOperation, +) -> mn_ledger::structure::ContractOperationVersion { + if op.v3.is_some() { + mn_ledger::structure::ContractOperationVersion::V4 + } else { + mn_ledger::structure::ContractOperationVersion::V3 + } +} + +pub fn signature_verifying_key( + key: base_crypto::signatures::VerifyingKey, +) -> SignatureVerifyingKey { + SignatureVerifyingKey::Schnorr(key) +} + +pub fn transaction_signing_key(key: &base_crypto::signatures::SigningKey) -> TransactionSigningKey { + TransactionSigningKey::Schnorr(key.clone()) +} + +pub fn transaction_signature( + signature: base_crypto::signatures::Signature, +) -> TransactionSignature { + TransactionSignature::Schnorr(signature) +} + +pub fn maintenance_verifying_key( + key: base_crypto::signatures::VerifyingKey, +) -> ContractMaintenanceVerifyingKey { + ContractMaintenanceVerifyingKey::Schnorr(key) +} + +pub fn signature_verifying_key_ecdsa( + key: base_crypto::ecdsa::VerifyingKey, +) -> SignatureVerifyingKey { + SignatureVerifyingKey::ECDSA(key) +} + +pub fn transaction_signing_key_ecdsa( + key: &base_crypto::ecdsa::SigningKey, +) -> TransactionSigningKey { + TransactionSigningKey::ECDSA(key.clone()) +} + +pub fn transaction_signature_ecdsa( + signature: base_crypto::ecdsa::Signature, +) -> TransactionSignature { + TransactionSignature::ECDSA(signature) +} + +pub fn maintenance_verifying_key_ecdsa( + key: base_crypto::ecdsa::VerifyingKey, +) -> ContractMaintenanceVerifyingKey { + ContractMaintenanceVerifyingKey::ECDSA(key) +} + +/// Compatibility trait: L8 `apply` returns `WalletState`, L9 returns `Result, _>`. +pub trait IntoWalletState { + fn into_wallet_state(self) -> WalletState; +} +impl IntoWalletState for WalletState { + fn into_wallet_state(self) -> WalletState { + self + } +} +impl IntoWalletState for Result, E> { + fn into_wallet_state(self) -> WalletState { + self.expect("wallet state apply failed") + } +} + +/// Raw zkir bytes for circuit `name` (the `zkir/{name}.bzkir` the resolver +/// loads as `ProvingKeyMaterial::ir_source`). Ledger 9+ stores these on-chain +/// in the contract operation so deployed circuits can be re-proven/upgraded +/// from chain state alone; pre-9 `contract_operation_new` ignores them. +pub async fn ir_source(resolver: &Resolver, name: &'static str) -> Option> { + let material = resolver + .resolve_key(KeyLocation(std::borrow::Cow::Borrowed(name))) + .await + .ok()??; + Some(material.ir_source) +} + +/// Resolves a circuit's verifier key by name. +pub async fn verifier_key( + resolver: &Resolver, + name: &'static str, +) -> Option { + let material = resolver + .resolve_key(KeyLocation(std::borrow::Cow::Borrowed(name))) + .await + .ok()??; + Some(ContractVerifyingKeyBytes(material.verifier_key)) +} + +pub fn token_type_decode(input: &str) -> TokenType { + let bytes = hex::decode(input).expect("Token value should be an hex"); + + let tt_bytes: [u8; 32] = bytes.try_into().expect("Token size should be 32 bytes"); + + TokenType::Shielded(ShieldedTokenType(HashOutput(tt_bytes))) +} + +/// Get NetworkId from transaction bytes +pub fn network_id_from_transaction_bytes(tx_bytes: &[u8]) -> Result { + let tx: FinalizedTransaction = deserialize(tx_bytes)?; + let network_id = match tx { + Transaction::Standard(standard_transaction) => standard_transaction.network_id, + Transaction::ClaimRewards(claim_rewards_transaction) => { + claim_rewards_transaction.network_id + }, + }; + Ok(network_id) +} diff --git a/ledger/helpers/src/ledger_9/offer.rs b/ledger/helpers/unsafe/src/ledger_9/offer.rs similarity index 100% rename from ledger/helpers/src/ledger_9/offer.rs rename to ledger/helpers/unsafe/src/ledger_9/offer.rs diff --git a/ledger/helpers/src/ledger_9/output.rs b/ledger/helpers/unsafe/src/ledger_9/output.rs similarity index 100% rename from ledger/helpers/src/ledger_9/output.rs rename to ledger/helpers/unsafe/src/ledger_9/output.rs diff --git a/ledger/helpers/src/ledger_9/proving.rs b/ledger/helpers/unsafe/src/ledger_9/proving.rs similarity index 99% rename from ledger/helpers/src/ledger_9/proving.rs rename to ledger/helpers/unsafe/src/ledger_9/proving.rs index e67150530..2d754e284 100644 --- a/ledger/helpers/src/ledger_9/proving.rs +++ b/ledger/helpers/unsafe/src/ledger_9/proving.rs @@ -11,8 +11,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#![cfg(feature = "can-panic")] - use crate::ledger_9::{ CostModel, DB, KeyLocation, LocalProvingProvider, PUBLIC_PARAMS, PedersenRandomness, ProofMarker, ProofPreimageMarker, Resolver, ResolverTrait, Signature, StdRng, Transaction, diff --git a/ledger/helpers/src/ledger_9/transaction.rs b/ledger/helpers/unsafe/src/ledger_9/transaction.rs similarity index 100% rename from ledger/helpers/src/ledger_9/transaction.rs rename to ledger/helpers/unsafe/src/ledger_9/transaction.rs diff --git a/ledger/helpers/src/ledger_9/transient.rs b/ledger/helpers/unsafe/src/ledger_9/transient.rs similarity index 100% rename from ledger/helpers/src/ledger_9/transient.rs rename to ledger/helpers/unsafe/src/ledger_9/transient.rs diff --git a/ledger/helpers/src/ledger_9/unshielded_offer.rs b/ledger/helpers/unsafe/src/ledger_9/unshielded_offer.rs similarity index 100% rename from ledger/helpers/src/ledger_9/unshielded_offer.rs rename to ledger/helpers/unsafe/src/ledger_9/unshielded_offer.rs diff --git a/ledger/helpers/src/ledger_9/utxo_output.rs b/ledger/helpers/unsafe/src/ledger_9/utxo_output.rs similarity index 100% rename from ledger/helpers/src/ledger_9/utxo_output.rs rename to ledger/helpers/unsafe/src/ledger_9/utxo_output.rs diff --git a/ledger/helpers/src/ledger_9/utxo_spend.rs b/ledger/helpers/unsafe/src/ledger_9/utxo_spend.rs similarity index 100% rename from ledger/helpers/src/ledger_9/utxo_spend.rs rename to ledger/helpers/unsafe/src/ledger_9/utxo_spend.rs diff --git a/ledger/helpers/src/ledger_9/wallet/dust.rs b/ledger/helpers/unsafe/src/ledger_9/wallet/dust.rs similarity index 93% rename from ledger/helpers/src/ledger_9/wallet/dust.rs rename to ledger/helpers/unsafe/src/ledger_9/wallet/dust.rs index 5e9a32704..727160cbe 100644 --- a/ledger/helpers/src/ledger_9/wallet/dust.rs +++ b/ledger/helpers/unsafe/src/ledger_9/wallet/dust.rs @@ -1,3 +1,16 @@ +// This file is part of midnight-node. +// Copyright (C) Midnight Foundation +// SPDX-License-Identifier: Apache-2.0 +// Licensed under the Apache License, Version 2.0 (the "License"); +// You may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + use derive_where::derive_where; use thiserror::Error; @@ -28,7 +41,6 @@ pub struct DustWallet { impl DeriveSeed for DustWallet {} -#[cfg(feature = "can-panic")] impl IntoWalletAddress for DustWallet { fn address(&self, network_id: &str) -> WalletAddress { let hrp_string = diff --git a/ledger/helpers/src/ledger_9/wallet/hd.rs b/ledger/helpers/unsafe/src/ledger_9/wallet/hd.rs similarity index 99% rename from ledger/helpers/src/ledger_9/wallet/hd.rs rename to ledger/helpers/unsafe/src/ledger_9/wallet/hd.rs index 08c18cd50..7956fe49c 100644 --- a/ledger/helpers/src/ledger_9/wallet/hd.rs +++ b/ledger/helpers/unsafe/src/ledger_9/wallet/hd.rs @@ -11,8 +11,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#![cfg(feature = "can-panic")] - use crate::ledger_9::WalletSeed; use bech32::{Bech32m, Hrp}; use bip32::{DerivationPath as Bip32DerivationPath, XPrv}; diff --git a/ledger/helpers/src/ledger_9/wallet/mod.rs b/ledger/helpers/unsafe/src/ledger_9/wallet/mod.rs similarity index 98% rename from ledger/helpers/src/ledger_9/wallet/mod.rs rename to ledger/helpers/unsafe/src/ledger_9/wallet/mod.rs index d73c5e975..50dc54491 100644 --- a/ledger/helpers/src/ledger_9/wallet/mod.rs +++ b/ledger/helpers/unsafe/src/ledger_9/wallet/mod.rs @@ -101,7 +101,6 @@ impl Wallet { utxos } - #[cfg(feature = "can-panic")] pub fn increment_seed(s: &str) -> Result { let num = u128::from_str_radix(s, 2).expect("Invalid wallet seed"); let result = num.checked_add(1).ok_or("wallet seed overflow")?; @@ -109,7 +108,6 @@ impl Wallet { Ok(format!("{result:0width$b}")) } - #[cfg(feature = "can-panic")] pub fn wallet_seed_decode(input: &str) -> WalletSeed { input.parse().expect("failed to decode seed") } diff --git a/ledger/helpers/src/ledger_9/wallet/shielded.rs b/ledger/helpers/unsafe/src/ledger_9/wallet/shielded.rs similarity index 98% rename from ledger/helpers/src/ledger_9/wallet/shielded.rs rename to ledger/helpers/unsafe/src/ledger_9/wallet/shielded.rs index fb62a797b..c78ad5b71 100644 --- a/ledger/helpers/src/ledger_9/wallet/shielded.rs +++ b/ledger/helpers/unsafe/src/ledger_9/wallet/shielded.rs @@ -11,8 +11,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#![cfg(feature = "can-panic")] - use crate::ledger_9::{ CoinPublicKey, DB, DerivationPath, DerivationPathError, DeriveSeed, Deserializable, EncryptionPublicKey, HRP_CONSTANT, HRP_CREDENTIAL_SHIELDED, HRP_CREDENTIAL_SHIELDED_ESK, @@ -85,7 +83,6 @@ impl ShieldedWallet { Self { state, coin_public_key, enc_public_key, secret_keys: None } } - #[cfg(feature = "can-panic")] pub fn secret_keys(&self) -> &SecretKeys { self.secret_keys.as_ref().expect("Missing `SecretKeys` for the `ShieldedWallet") } diff --git a/ledger/helpers/src/ledger_9/wallet/unshielded.rs b/ledger/helpers/unsafe/src/ledger_9/wallet/unshielded.rs similarity index 99% rename from ledger/helpers/src/ledger_9/wallet/unshielded.rs rename to ledger/helpers/unsafe/src/ledger_9/wallet/unshielded.rs index fd183fdfe..d8d22364b 100644 --- a/ledger/helpers/src/ledger_9/wallet/unshielded.rs +++ b/ledger/helpers/unsafe/src/ledger_9/wallet/unshielded.rs @@ -130,7 +130,6 @@ impl std::fmt::Debug for UnshieldedWallet { impl DeriveSeed for UnshieldedWallet {} -#[cfg(feature = "can-panic")] impl IntoWalletAddress for UnshieldedWallet { fn address(&self, network_id: &str) -> WalletAddress { let hrp_string = format!( @@ -255,7 +254,6 @@ impl UnshieldedWallet { /// The raw Schnorr signing key, for the Schnorr-only contract-maintenance committee and /// key-serialization paths. Panics for a non-Schnorr or address-only wallet. - #[cfg(feature = "can-panic")] pub fn signing_key(&self) -> &SigningKeySchnorr { match &self.keys { Some(UnshieldedWalletKeys::Schnorr { signing_key: Some(sk), .. }) => sk, @@ -327,7 +325,7 @@ impl From for UnshieldedWallet { // `new`/`default` derive via HD (`derive_seed`, see `hd.rs`), which needs `can-panic`. ECDSA-only // tests live in the ledger-9 copy's `ecdsa_wallet_tests`: this file has one copy per generation, // so putting them here would report a misleading `…::ecdsa_… ok` where they can't actually run. -#[cfg(all(test, feature = "can-panic"))] +#[cfg(test)] mod tests { use super::{UnshieldedSignatureScheme, UnshieldedWallet}; use crate::ledger_9::WalletSeed; diff --git a/ledger/helpers/unsafe/src/lib.rs b/ledger/helpers/unsafe/src/lib.rs new file mode 100644 index 000000000..5dcef0e31 --- /dev/null +++ b/ledger/helpers/unsafe/src/lib.rs @@ -0,0 +1,61 @@ +// This file is part of midnight-node. +// Copyright (C) Midnight Foundation +// SPDX-License-Identifier: Apache-2.0 +// Licensed under the Apache License, Version 2.0 (the "License"); +// You may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Ledger transaction/wallet-building apparatus used exclusively by +//! `midnight-node-toolkit` (the CLI and transaction generator) and by test +//! tooling that borrows it as a dev-dependency (`tests/e2e`, `pallets/midnight`'s +//! and `midnight-node-ledger`'s own unit tests). +//! +//! This crate builds transactions and wallets by hand from raw inputs, which can +//! genuinely panic on malformed input — unlike the node's real block-execution +//! path in `midnight-node-ledger`. It sits alongside `midnight-node-ledger-helpers` +//! (the shared/production ledger glue) and depends on it for the version-independent +//! passthrough types (`BlockContext`, `WalletSeed`, `fork::raw_block_data`, etc.). + +pub mod extract_tx_with_context; + +/// Process-wide counters of replayed transactions that did not fully apply, +/// shared by every ledger generation's `LedgerContext`. +pub mod replay_stats { + use std::sync::atomic::AtomicU64; + + pub static PARTIALLY_FAILED_TXS: AtomicU64 = AtomicU64::new(0); + pub static FAILED_TXS: AtomicU64 = AtomicU64::new(0); +} + +/// Strategy for ordering candidate coins/UTXOs during input selection. +/// +/// Defined at the crate root (not inside `ledger_8`/`ledger_9`) so that all versions +/// see the same type, allowing it to flow through the toolkit's version-dispatched +/// builders unchanged. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] +pub enum CoinSelectionStrategy { + /// Use the largest coins/UTXOs first. Minimizes the number of inputs. + #[default] + LargestFirst, + /// Use the smallest coins/UTXOs first. Consolidates dust. + SmallestFirst, +} + +/// Struct to store serialized verifying key bytes +/// To be deserialized when constructing ContractOperations +pub struct ContractVerifyingKeyBytes(pub Vec); + +pub mod ledger_8; +pub mod ledger_9; + +pub use ledger_9 as latest; + +pub mod fork; + +pub use latest::*; diff --git a/ledger/src/ledger_8/api/ledger.rs b/ledger/src/ledger_8/api/ledger.rs index 1eb3c2b9d..bf30df1eb 100644 --- a/ledger/src/ledger_8/api/ledger.rs +++ b/ledger/src/ledger_8/api/ledger.rs @@ -308,10 +308,9 @@ impl Borrow> for Ledger { mod tests { use super::super::Api; use super::*; - use crate::ledger_8::{ - CRATE_NAME, TransactionSignature as Signature, helpers_local::extract_tx_with_context, - }; + use crate::ledger_8::{CRATE_NAME, TransactionSignature as Signature}; use ledger_storage_local::DefaultDB; + use midnight_ledger_unsafe_helpers::ledger_8::extract_tx_with_context; use midnight_node_res::{ networks::{MidnightNetwork, UndeployedNetwork}, undeployed::transactions::{CHECK_TX, CONTRACT_ADDR, DEPLOY_TX, MAINTENANCE_TX, STORE_TX}, diff --git a/ledger/src/ledger_8/api/transaction.rs b/ledger/src/ledger_8/api/transaction.rs index 6c1cfc001..886e058ea 100644 --- a/ledger/src/ledger_8/api/transaction.rs +++ b/ledger/src/ledger_8/api/transaction.rs @@ -435,11 +435,9 @@ pub enum Operation { #[cfg(test)] mod tests { use super::*; - use crate::ledger_8::{ - BlockContext, CRATE_NAME, TransactionSignature as Signature, api, - helpers_local::extract_tx_with_context, - }; + use crate::ledger_8::{BlockContext, CRATE_NAME, TransactionSignature as Signature, api}; use ledger_storage_local::DefaultDB; + use midnight_ledger_unsafe_helpers::ledger_8::extract_tx_with_context; use midnight_node_res::networks::{MidnightNetwork, UndeployedNetwork}; use midnight_serialize_local::tagged_deserialize; use mn_ledger_local::structure::LedgerState; diff --git a/ledger/src/ledger_9/api/ledger.rs b/ledger/src/ledger_9/api/ledger.rs index 9017860ed..a2d6b3e44 100644 --- a/ledger/src/ledger_9/api/ledger.rs +++ b/ledger/src/ledger_9/api/ledger.rs @@ -308,10 +308,9 @@ impl Borrow> for Ledger { mod tests { use super::super::Api; use super::*; - use crate::ledger_9::{ - CRATE_NAME, TransactionSignature as Signature, helpers_local::extract_tx_with_context, - }; + use crate::ledger_9::{CRATE_NAME, TransactionSignature as Signature}; use ledger_storage_local::DefaultDB; + use midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context; use midnight_node_res::{ networks::{MidnightNetwork, UndeployedNetwork}, undeployed::transactions::{CHECK_TX, CONTRACT_ADDR, DEPLOY_TX, MAINTENANCE_TX, STORE_TX}, diff --git a/ledger/src/ledger_9/api/transaction.rs b/ledger/src/ledger_9/api/transaction.rs index 6db5c2145..bf798e39e 100644 --- a/ledger/src/ledger_9/api/transaction.rs +++ b/ledger/src/ledger_9/api/transaction.rs @@ -435,11 +435,9 @@ pub enum Operation { #[cfg(test)] mod tests { use super::*; - use crate::ledger_9::{ - BlockContext, CRATE_NAME, TransactionSignature as Signature, api, - helpers_local::extract_tx_with_context, - }; + use crate::ledger_9::{BlockContext, CRATE_NAME, TransactionSignature as Signature, api}; use ledger_storage_local::DefaultDB; + use midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context; use midnight_node_res::networks::{MidnightNetwork, UndeployedNetwork}; use midnight_serialize_local::tagged_deserialize; use mn_ledger_local::structure::LedgerState; diff --git a/pallets/midnight/Cargo.toml b/pallets/midnight/Cargo.toml index f05b6eff5..930c504e0 100644 --- a/pallets/midnight/Cargo.toml +++ b/pallets/midnight/Cargo.toml @@ -40,7 +40,7 @@ midnight-node-res = { features = ["test", "chain-spec"], workspace = true } assert_matches.workspace = true #pallet-block-rewards.workspace = true tempfile.workspace = true -midnight-node-ledger-helpers = { workspace = true, features = ["can-panic"] } +midnight-ledger-unsafe-helpers = { workspace = true } midnight-node-ledger = { workspace = true, features = ["std", "test-utils"] } test-log.workspace = true diff --git a/pallets/midnight/src/tests.rs b/pallets/midnight/src/tests.rs index fb5b8c1b8..2f439b37f 100644 --- a/pallets/midnight/src/tests.rs +++ b/pallets/midnight/src/tests.rs @@ -98,7 +98,7 @@ fn uncached_block_ts(block_context: &BlockContext) -> u64 { fn test_send_mn_transaction() { mock::new_test_ext().execute_with(|| { let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); init_ledger_state(block_context.into()); assert_ok!(mock::Midnight::send_mn_transaction(RuntimeOrigin::none(), tx)); @@ -132,7 +132,7 @@ fn test_send_mn_transaction_malformed_tx() { fn test_send_mn_transaction_invalid_tx() { mock::new_test_ext().execute_with(|| { let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(STORE_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(STORE_TX); init_ledger_state(block_context.into()); let error: sp_runtime::DispatchError = Error::::Transaction( @@ -150,13 +150,13 @@ fn test_send_mn_transaction_invalid_tx() { fn test_get_contract_state() { mock::new_test_ext().execute_with(|| { let (tx_deploy, block_context_deploy) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); let (tx_store, block_context_store) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(STORE_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(STORE_TX); let (tx_check, block_context_check) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(CHECK_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(CHECK_TX); let (tx_maintenance, block_context_maintenance) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(MAINTENANCE_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(MAINTENANCE_TX); init_ledger_state(block_context_deploy.into()); @@ -206,7 +206,7 @@ fn test_get_unclaimed_amount_beneficiary_not_found() { #[test] fn test_validation_works() { let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); let call = MidnightCall::send_mn_transaction { midnight_tx: tx }; mock::new_test_ext().execute_with(|| { @@ -242,7 +242,7 @@ fn test_validation_fails() { #[test] fn test_pre_dispatch_accepts_valid_transaction() { let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); let call = MidnightCall::send_mn_transaction { midnight_tx: tx }; mock::new_test_ext().execute_with(|| { @@ -259,7 +259,7 @@ fn test_pre_dispatch_rejects_contract_not_present() { // This tests the DDoS mitigation: transactions that would fail the guaranteed // part are rejected at pre_dispatch time, before consuming blockspace. let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(STORE_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(STORE_TX); let call = MidnightCall::send_mn_transaction { midnight_tx: tx }; mock::new_test_ext().execute_with(|| { @@ -299,9 +299,9 @@ fn test_pre_dispatch_rejects_replay_attack() { mock::new_test_ext().execute_with(|| { // Set up ledger state and deploy contract let (deploy_tx, block_context_deploy) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); let (store_tx, block_context_store) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(STORE_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(STORE_TX); init_ledger_state(block_context_deploy.into()); @@ -331,7 +331,7 @@ fn test_pre_dispatch_rejects_replay_attack() { fn test_pre_dispatch_validation_does_not_modify_state() { mock::new_test_ext().execute_with(|| { let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); init_ledger_state(block_context.into()); @@ -361,7 +361,7 @@ fn test_pre_dispatch_validation_does_not_modify_state_on_failure() { mock::new_test_ext().execute_with(|| { // STORE_TX will fail (no contract deployed) but should not modify state let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(STORE_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(STORE_TX); init_ledger_state(block_context.into()); @@ -407,7 +407,7 @@ fn sets_extra_transaction_size_weight() { fn test_get_mn_transaction_fee() { mock::new_test_ext().execute_with(|| { let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); init_ledger_state(block_context.into()); @@ -434,7 +434,7 @@ fn test_get_ledger_parameters() { fn test_send_zswap_tx() { mock::new_test_ext().execute_with(|| { let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(ZSWAP_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(ZSWAP_TX); init_ledger_state(block_context.into()); @@ -447,7 +447,7 @@ fn test_send_zswap_tx() { fn test_get_zswap_state_root() { mock::new_test_ext().execute_with(|| { let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(ZSWAP_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(ZSWAP_TX); init_ledger_state(block_context.into()); @@ -507,7 +507,7 @@ fn parent_ts_that_the_correction_rejects(block_context: &BlockContext) -> u64 { #[test] fn test_tblock_correction_not_applied_by_the_current_runtime() { let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); let block_context: BlockContext = block_context.into(); let parent_ts = parent_ts_that_the_correction_rejects(&block_context); @@ -525,7 +525,7 @@ fn test_tblock_correction_not_applied_by_the_current_runtime() { #[test] fn test_tblock_correction_does_not_affect_mempool_validation() { let (tx, block_context) = - midnight_node_ledger_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); + midnight_ledger_unsafe_helpers::ledger_9::extract_tx_with_context(DEPLOY_TX); let block_context: BlockContext = block_context.into(); let parent_ts = parent_ts_that_the_correction_rejects(&block_context); diff --git a/tests/e2e/Cargo.toml b/tests/e2e/Cargo.toml index 40b35760c..4f134eac6 100644 --- a/tests/e2e/Cargo.toml +++ b/tests/e2e/Cargo.toml @@ -30,7 +30,7 @@ serde_json.workspace = true rand = "0.9.2" subxt.workspace = true midnight-node-metadata.workspace = true -midnight-node-ledger-helpers = { workspace = true, features = ["can-panic"] } +midnight-ledger-unsafe-helpers = { workspace = true } blake2 = "0.10.6" tracing = { workspace = true, default-features = true } tracing-subscriber = { workspace = true } diff --git a/tests/e2e/src/api/midnight.rs b/tests/e2e/src/api/midnight.rs index dbffd0c05..fc6212fe6 100644 --- a/tests/e2e/src/api/midnight.rs +++ b/tests/e2e/src/api/midnight.rs @@ -3,7 +3,7 @@ use crate::config::{NodeClientSettings, OgmiosClientSettings}; use blake2::digest::{Update, VariableOutput}; use blake2::Blake2bVar; use hex::ToHex; -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::{ DefaultDB, DustWallet, LedgerParameters, WalletSeed, deserialize, serialize_untagged, }; use midnight_node_metadata::midnight_metadata_latest::c_night_observation::storage::utxo_owners::Output as UtxoOwners; diff --git a/tests/e2e/tests/c2m_bridge.rs b/tests/e2e/tests/c2m_bridge.rs index 43db7ab29..77c30c84c 100644 --- a/tests/e2e/tests/c2m_bridge.rs +++ b/tests/e2e/tests/c2m_bridge.rs @@ -1,3 +1,7 @@ +use midnight_ledger_unsafe_helpers::{ + ClaimKind, HashOutput, SystemTransaction, UnshieldedSignatureScheme, UnshieldedWallet, + UserAddress, WalletSeed, deserialize, extract_tx_with_context, +}; use midnight_node_e2e::api::cardano::{ BridgeTransferRecipient, CardanoClient, SignedBridgeTransaction, }; @@ -6,10 +10,6 @@ use midnight_node_e2e::api::indexer::{BridgeEvent, BridgeEventVariant, IndexerCl use midnight_node_e2e::api::midnight::{C2MBridgePalletCalls, MidnightClient}; use midnight_node_e2e::config::Settings; use midnight_node_e2e::e2e_test; -use midnight_node_ledger_helpers::{ - ClaimKind, HashOutput, SystemTransaction, UnshieldedSignatureScheme, UnshieldedWallet, - UserAddress, WalletSeed, deserialize, extract_tx_with_context, -}; use midnight_node_metadata::midnight_metadata_latest as mn_meta; use midnight_node_metadata::midnight_metadata_latest::runtime_types::sp_partner_chains_bridge::TransferRecipient; use midnight_node_toolkit::cli_parsers::SchemeSeed; diff --git a/tests/e2e/tests/cnight/observation.rs b/tests/e2e/tests/cnight/observation.rs index 78f5dc6ef..fbc083492 100644 --- a/tests/e2e/tests/cnight/observation.rs +++ b/tests/e2e/tests/cnight/observation.rs @@ -1,8 +1,8 @@ +use midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme; use midnight_node_e2e::api::cardano::CardanoClient; use midnight_node_e2e::api::midnight::MidnightClient; use midnight_node_e2e::config::{self, Settings}; use midnight_node_e2e::e2e_test; -use midnight_node_ledger_helpers::UnshieldedSignatureScheme; use midnight_node_metadata::midnight_metadata_latest::c_night_observation::events::{ Deregistration, Registration, }; diff --git a/tests/e2e/tests/lib.rs b/tests/e2e/tests/lib.rs index 41987b0d6..e2a7b8bdd 100644 --- a/tests/e2e/tests/lib.rs +++ b/tests/e2e/tests/lib.rs @@ -1,7 +1,7 @@ +use midnight_ledger_unsafe_helpers::{UnshieldedSignatureScheme, WalletSeed}; use midnight_node_e2e::api::cardano::CardanoClient; use midnight_node_e2e::config::Settings; use midnight_node_e2e::faucet::FaucetManager; -use midnight_node_ledger_helpers::{UnshieldedSignatureScheme, WalletSeed}; use midnight_node_toolkit::commands::dust_balance; use midnight_node_toolkit::tx_generator::source::{FetchCacheConfig, Source}; use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; @@ -350,7 +350,7 @@ pub(crate) const DEV_WALLET_SEED: &str = /// just-started env poll here (rather than flake) while the faucet job runs and /// DUST accrues. Panics with a clear message if funding never arrives. pub(crate) async fn ensure_dev_wallet_funded() { - use midnight_node_ledger_helpers::WalletSeed; + use midnight_ledger_unsafe_helpers::WalletSeed; use midnight_node_toolkit::commands::show_wallet::{self, ShowWalletArgs, ShowWalletResult}; let settings = Settings::default(); @@ -373,7 +373,7 @@ pub(crate) async fn ensure_dev_wallet_funded() { }, seed: Some(midnight_node_toolkit::cli_parsers::SchemeSeed { seed: seed.clone(), - scheme: midnight_node_ledger_helpers::UnshieldedSignatureScheme::Schnorr, + scheme: midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Schnorr, }), address: None, debug: false, @@ -494,7 +494,7 @@ pub(crate) async fn deploy_and_confirm( client: &midnight_node_e2e::api::midnight::MidnightClient, url: &str, ) -> (Vec, String) { - use midnight_node_ledger_helpers::extract_tx_with_context; + use midnight_ledger_unsafe_helpers::extract_tx_with_context; use midnight_node_toolkit::commands::contract_address::{self, ContractAddressArgs}; let tempdir = tempfile::tempdir().expect("create tempdir"); @@ -562,7 +562,7 @@ pub(crate) async fn build_unshielded_self_transfer(url: &str, dest: &std::path:: unshielded_token_type: vec![], source_seed: cli::SchemeSeed { seed, - scheme: midnight_node_ledger_helpers::UnshieldedSignatureScheme::Schnorr, + scheme: midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Schnorr, }, funding_seed: None, destination_address: vec![recipient], diff --git a/tests/e2e/tests/operational.rs b/tests/e2e/tests/operational.rs index 6e62aff39..f29c5115b 100644 --- a/tests/e2e/tests/operational.rs +++ b/tests/e2e/tests/operational.rs @@ -147,7 +147,7 @@ async fn consolidate_faucet() { #[ignore = "wiring smoke test for Postgres-backed fetch cache; \ opt-in with `cargo test --ignored dust_balance_smoke`"] async fn dust_balance_smoke() { - use midnight_node_ledger_helpers::{UnshieldedSignatureScheme, WalletSeed}; + use midnight_ledger_unsafe_helpers::{UnshieldedSignatureScheme, WalletSeed}; use midnight_node_toolkit::cli_parsers::SchemeSeed; use midnight_node_toolkit::commands::dust_balance::{self, DustBalanceArgs}; use midnight_node_toolkit::tx_generator::source::Source; @@ -203,7 +203,7 @@ async fn dust_balance_smoke() { #[ignore = "wiring smoke test for batched dust_balance; \ opt-in with `cargo test --ignored dust_balance_smoke_many`"] async fn dust_balance_smoke_many() { - use midnight_node_ledger_helpers::{UnshieldedSignatureScheme, WalletSeed}; + use midnight_ledger_unsafe_helpers::{UnshieldedSignatureScheme, WalletSeed}; use midnight_node_toolkit::commands::dust_balance::{ self, DustBalanceJson, DustBalanceManyArgs, DustBalanceResult, }; diff --git a/util/toolkit/Cargo.toml b/util/toolkit/Cargo.toml index 4962fd503..67061954a 100644 --- a/util/toolkit/Cargo.toml +++ b/util/toolkit/Cargo.toml @@ -12,11 +12,12 @@ path = "src/main.rs" [features] default = [] -erase-proof = ["midnight-node-ledger-helpers/erase-proof"] +erase-proof = ["midnight-ledger-unsafe-helpers/erase-proof"] compact-contract-tests = [] [dependencies] -midnight-node-ledger-helpers = { workspace = true, features = ["can-panic", "test-utils", "fixed-point-custom-serde"] } +midnight-node-ledger-helpers = { workspace = true, features = ["fixed-point-custom-serde"] } +midnight-ledger-unsafe-helpers = { workspace = true, features = ["test-utils", "fixed-point-custom-serde"] } midnight-node-metadata.workspace = true midnight-primitives-ics-observation = { workspace = true, default-features = true } midnight-primitives-reserve-observation = { workspace = true, default-features = true } diff --git a/util/toolkit/src/cli.rs b/util/toolkit/src/cli.rs index ca6162ba5..ccf850130 100644 --- a/util/toolkit/src/cli.rs +++ b/util/toolkit/src/cli.rs @@ -237,9 +237,9 @@ pub async fn run_command(cmd: Commands) -> Result<(), Box { let node_version = utils::find_crate_version!("../../../node/Cargo.toml"); - let ledger_generation = midnight_node_ledger_helpers::latest::LEDGER_VERSION; + let ledger_generation = midnight_ledger_unsafe_helpers::latest::LEDGER_VERSION; let ledger_semver = - find_dependency_version(midnight_node_ledger_helpers::latest::CRATE_NAME) + find_dependency_version(midnight_ledger_unsafe_helpers::latest::CRATE_NAME) .expect("missing ledger version"); let compactc_version = include_str!("../../../COMPACTC_VERSION").trim(); diff --git a/util/toolkit/src/cli_parsers.rs b/util/toolkit/src/cli_parsers.rs index 635f0383c..fab9fdb01 100644 --- a/util/toolkit/src/cli_parsers.rs +++ b/util/toolkit/src/cli_parsers.rs @@ -13,7 +13,7 @@ use std::str::FromStr; -use midnight_node_ledger_helpers::*; +use midnight_ledger_unsafe_helpers::*; use serde::Deserialize; use crate::tx_generator::source::FetchCacheConfig; diff --git a/util/toolkit/src/cli_parsers/output_arg.rs b/util/toolkit/src/cli_parsers/output_arg.rs index bd9ee3f6a..dff6be1e8 100644 --- a/util/toolkit/src/cli_parsers/output_arg.rs +++ b/util/toolkit/src/cli_parsers/output_arg.rs @@ -21,7 +21,7 @@ use std::str::FromStr; -use midnight_node_ledger_helpers::WalletAddress; +use midnight_ledger_unsafe_helpers::WalletAddress; /// A single per-destination output spec parsed from a `--output` flag value. /// diff --git a/util/toolkit/src/client.rs b/util/toolkit/src/client.rs index b77e066dc..0df404e99 100644 --- a/util/toolkit/src/client.rs +++ b/util/toolkit/src/client.rs @@ -15,7 +15,7 @@ use std::time::Duration; use backoff::ExponentialBackoff; use backoff::future::retry; -use midnight_node_ledger_helpers::{LedgerParameters, deserialize}; +use midnight_ledger_unsafe_helpers::{LedgerParameters, deserialize}; use midnight_node_metadata::midnight_metadata_latest as mn_meta; use parity_scale_codec::Decode; use subxt::config::HashFor; diff --git a/util/toolkit/src/commands/contract_state.rs b/util/toolkit/src/commands/contract_state.rs index cb68d818f..f86490dfa 100644 --- a/util/toolkit/src/commands/contract_state.rs +++ b/util/toolkit/src/commands/contract_state.rs @@ -3,7 +3,7 @@ use crate::cli_parsers as cli; use crate::tx_generator::builder::build_fork_aware_context_cached; use crate::tx_generator::source::create_file_wallet_cache; use clap::Args; -use midnight_node_ledger_helpers::ContractAddress; +use midnight_ledger_unsafe_helpers::ContractAddress; use std::{fs, path::Path}; #[derive(Args)] diff --git a/util/toolkit/src/commands/dust_balance.rs b/util/toolkit/src/commands/dust_balance.rs index 01ab3f24c..b48631532 100644 --- a/util/toolkit/src/commands/dust_balance.rs +++ b/util/toolkit/src/commands/dust_balance.rs @@ -10,7 +10,7 @@ use crate::{ serde_def::{DustGenerationInfoSer, QualifiedDustOutputSer}, }; use clap::Args; -use midnight_node_ledger_helpers::UnshieldedSignatureScheme; +use midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme; #[derive(Args)] pub struct DustBalanceArgs { @@ -324,7 +324,7 @@ mod tests { // `get_ledger_snapshot`) come into scope via the `&dyn // WalletStateCaching` trait object type that `create_file_wallet_cache` // returns — no explicit `use` import needed for method dispatch. - use midnight_node_ledger_helpers::fork::fork_aware_context::ForkAwareLedgerContext; + use midnight_ledger_unsafe_helpers::fork::fork_aware_context::ForkAwareLedgerContext; use std::time::{SystemTime, UNIX_EPOCH}; let tempdir = tempfile::tempdir().expect("create tempdir for cache"); diff --git a/util/toolkit/src/commands/fork/ledger_8/contract_address.rs b/util/toolkit/src/commands/fork/ledger_8/contract_address.rs index a69c49545..4bc98f4f5 100644 --- a/util/toolkit/src/commands/fork/ledger_8/contract_address.rs +++ b/util/toolkit/src/commands/fork/ledger_8/contract_address.rs @@ -1,7 +1,7 @@ use crate::commands::contract_address::{ContractAddressBoth, ContractAddressError}; use hex::ToHex; use ledger_helpers_local::{DefaultDB, FinalizedTransaction, mn_ledger_serialize}; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; pub fn extract_contract_address( tx_bytes: &[u8], diff --git a/util/toolkit/src/commands/fork/ledger_8/contract_state.rs b/util/toolkit/src/commands/fork/ledger_8/contract_state.rs index 66bee3fbb..df2e543df 100644 --- a/util/toolkit/src/commands/fork/ledger_8/contract_state.rs +++ b/util/toolkit/src/commands/fork/ledger_8/contract_state.rs @@ -1,9 +1,9 @@ use ledger_helpers_local::{ContractAddress, DefaultDB, HashOutput, serialize, serialize_untagged}; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; pub fn get_contract_state( context: &ledger_helpers_local::context::LedgerContext, - contract_address: midnight_node_ledger_helpers::ContractAddress, + contract_address: midnight_ledger_unsafe_helpers::ContractAddress, ) -> Result, Box> { // ContractAddress is a HashOutput newtype in both coin-structure 2.x and 3.x; // identity in the ledger-9 copy. diff --git a/util/toolkit/src/commands/fork/ledger_8/dust_balance.rs b/util/toolkit/src/commands/fork/ledger_8/dust_balance.rs index 96196be93..3b00f42aa 100644 --- a/util/toolkit/src/commands/fork/ledger_8/dust_balance.rs +++ b/util/toolkit/src/commands/fork/ledger_8/dust_balance.rs @@ -4,7 +4,7 @@ use std::time::{SystemTime, UNIX_EPOCH}; use super::serde_convert::{dust_generation_info_to_ser, qualified_dust_output_to_ser}; use crate::commands::dust_balance::{DustBalanceJson, GenerationInfoPair}; use ledger_helpers_local::{DefaultDB, DustOutput, Timestamp, WalletSeed}; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; pub fn dust_balance( context: &ledger_helpers_local::context::LedgerContext, diff --git a/util/toolkit/src/commands/fork/ledger_8/generate_intent.rs b/util/toolkit/src/commands/fork/ledger_8/generate_intent.rs index dc7fb5c5c..2352c8e21 100644 --- a/util/toolkit/src/commands/fork/ledger_8/generate_intent.rs +++ b/util/toolkit/src/commands/fork/ledger_8/generate_intent.rs @@ -3,7 +3,7 @@ use crate::toolkit_js::encoded_zswap_local_state::{ EncodedCoinPublic, EncodedOutput, EncodedRecipient, EncodedShieldedCoinInfo, }; use ledger_helpers_local::{CoinPublicKey, DefaultDB, WalletSeed}; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; pub fn fetch_zswap_state_from_context( context: &ledger_helpers_local::context::LedgerContext, diff --git a/util/toolkit/src/commands/fork/ledger_8/mod.rs b/util/toolkit/src/commands/fork/ledger_8/mod.rs index 352a310e1..358a50cfb 100644 --- a/util/toolkit/src/commands/fork/ledger_8/mod.rs +++ b/util/toolkit/src/commands/fork/ledger_8/mod.rs @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -pub use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +pub use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; pub mod contract_address; pub mod contract_state; diff --git a/util/toolkit/src/commands/fork/ledger_8/night_pools.rs b/util/toolkit/src/commands/fork/ledger_8/night_pools.rs index 0f64d9016..7463b4e95 100644 --- a/util/toolkit/src/commands/fork/ledger_8/night_pools.rs +++ b/util/toolkit/src/commands/fork/ledger_8/night_pools.rs @@ -13,7 +13,7 @@ use crate::commands::show_night_pools::NightPools; use ledger_helpers_local::DefaultDB; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; /// Read the NIGHT pools (Reserved / Locked / Unlocked + the rest of the supply /// breakdown) off the full `LedgerState` held by a replayed `LedgerContext`. diff --git a/util/toolkit/src/commands/fork/ledger_8/serde_convert.rs b/util/toolkit/src/commands/fork/ledger_8/serde_convert.rs index fc98fcf21..c1619d933 100644 --- a/util/toolkit/src/commands/fork/ledger_8/serde_convert.rs +++ b/util/toolkit/src/commands/fork/ledger_8/serde_convert.rs @@ -3,7 +3,7 @@ use hex::ToHex as _; use ledger_helpers_local::{ InitialNonce, QualifiedDustOutput, QualifiedInfo, Utxo, persistent_commit, serialize_untagged, }; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; pub fn utxo_to_ser(utxo: Utxo) -> UtxoSer { let intent_hash = utxo.intent_hash.0.0.encode_hex(); @@ -39,7 +39,7 @@ pub fn qualified_dust_output_to_ser(output: QualifiedDustOutput) -> QualifiedDus dust_public: serialize_untagged(&output.owner).unwrap().encode_hex(), nonce: serialize_untagged(&output.nonce).unwrap().encode_hex(), seq: output.seq, - ctime: midnight_node_ledger_helpers::Timestamp::from_secs(output.ctime.to_secs()), + ctime: midnight_ledger_unsafe_helpers::Timestamp::from_secs(output.ctime.to_secs()), backing_night: serialize_untagged(&output.backing_night).unwrap().encode_hex(), mt_index: output.mt_index, } @@ -52,6 +52,6 @@ pub fn dust_generation_info_to_ser( value: info.value, owner_dust_public_key: serialize_untagged(&info.owner).unwrap().encode_hex(), nonce: serialize_untagged(&info.nonce).unwrap().encode_hex(), - dtime: midnight_node_ledger_helpers::Timestamp::from_secs(info.dtime.to_secs()), + dtime: midnight_ledger_unsafe_helpers::Timestamp::from_secs(info.dtime.to_secs()), } } diff --git a/util/toolkit/src/commands/fork/ledger_8/show_transaction.rs b/util/toolkit/src/commands/fork/ledger_8/show_transaction.rs index 694b95cb2..7d4727573 100644 --- a/util/toolkit/src/commands/fork/ledger_8/show_transaction.rs +++ b/util/toolkit/src/commands/fork/ledger_8/show_transaction.rs @@ -2,7 +2,7 @@ use midnight_node_ledger_helpers::fork::raw_block_data::RawTransaction; use serde::{Deserialize, Serialize}; use ledger_helpers_local::{DefaultDB, PureGeneratorPedersen, SystemTransaction, deserialize}; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; type Signature = ledger_helpers_local::Signature; type ProofMarker = ledger_helpers_local::ProofMarker; diff --git a/util/toolkit/src/commands/fork/ledger_8/show_wallet.rs b/util/toolkit/src/commands/fork/ledger_8/show_wallet.rs index 8e48e5e71..729497933 100644 --- a/util/toolkit/src/commands/fork/ledger_8/show_wallet.rs +++ b/util/toolkit/src/commands/fork/ledger_8/show_wallet.rs @@ -5,7 +5,7 @@ use crate::commands::show_wallet::WalletInfoJson; use crate::serde_def::{QualifiedInfoSer, UtxoSer}; use hex::ToHex; use ledger_helpers_local::{DefaultDB, UnshieldedWallet, WalletSeed, serialize_untagged}; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; pub fn show_wallet_from_seed( context: &ledger_helpers_local::context::LedgerContext, diff --git a/util/toolkit/src/commands/fork/ledger_9/contract_address.rs b/util/toolkit/src/commands/fork/ledger_9/contract_address.rs index 2de26a01c..848c66a34 100644 --- a/util/toolkit/src/commands/fork/ledger_9/contract_address.rs +++ b/util/toolkit/src/commands/fork/ledger_9/contract_address.rs @@ -1,7 +1,7 @@ use crate::commands::contract_address::{ContractAddressBoth, ContractAddressError}; use hex::ToHex; use ledger_helpers_local::{DefaultDB, FinalizedTransaction, mn_ledger_serialize}; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; pub fn extract_contract_address( tx_bytes: &[u8], diff --git a/util/toolkit/src/commands/fork/ledger_9/contract_state.rs b/util/toolkit/src/commands/fork/ledger_9/contract_state.rs index 8280e22ec..5597cc244 100644 --- a/util/toolkit/src/commands/fork/ledger_9/contract_state.rs +++ b/util/toolkit/src/commands/fork/ledger_9/contract_state.rs @@ -1,9 +1,9 @@ use ledger_helpers_local::{ContractAddress, DefaultDB, HashOutput, serialize, serialize_untagged}; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; pub fn get_contract_state( context: &ledger_helpers_local::context::LedgerContext, - contract_address: midnight_node_ledger_helpers::ContractAddress, + contract_address: midnight_ledger_unsafe_helpers::ContractAddress, ) -> Result, Box> { // ContractAddress is a HashOutput newtype in both coin-structure 2.x and 3.x; // identity in the ledger-9 copy. diff --git a/util/toolkit/src/commands/fork/ledger_9/dust_balance.rs b/util/toolkit/src/commands/fork/ledger_9/dust_balance.rs index 2ee98bbc7..89c658d75 100644 --- a/util/toolkit/src/commands/fork/ledger_9/dust_balance.rs +++ b/util/toolkit/src/commands/fork/ledger_9/dust_balance.rs @@ -4,7 +4,7 @@ use std::time::{SystemTime, UNIX_EPOCH}; use super::serde_convert::{dust_generation_info_to_ser, qualified_dust_output_to_ser}; use crate::commands::dust_balance::{DustBalanceJson, GenerationInfoPair}; use ledger_helpers_local::{DefaultDB, DustOutput, Timestamp, WalletSeed}; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; pub fn dust_balance( context: &ledger_helpers_local::context::LedgerContext, diff --git a/util/toolkit/src/commands/fork/ledger_9/generate_intent.rs b/util/toolkit/src/commands/fork/ledger_9/generate_intent.rs index d7c19eb86..9131b845d 100644 --- a/util/toolkit/src/commands/fork/ledger_9/generate_intent.rs +++ b/util/toolkit/src/commands/fork/ledger_9/generate_intent.rs @@ -3,7 +3,7 @@ use crate::toolkit_js::encoded_zswap_local_state::{ EncodedCoinPublic, EncodedOutput, EncodedRecipient, EncodedShieldedCoinInfo, }; use ledger_helpers_local::{CoinPublicKey, DefaultDB, WalletSeed}; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; pub fn fetch_zswap_state_from_context( context: &ledger_helpers_local::context::LedgerContext, diff --git a/util/toolkit/src/commands/fork/ledger_9/mod.rs b/util/toolkit/src/commands/fork/ledger_9/mod.rs index 92bef3fb2..52e35d452 100644 --- a/util/toolkit/src/commands/fork/ledger_9/mod.rs +++ b/util/toolkit/src/commands/fork/ledger_9/mod.rs @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -pub use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +pub use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; pub mod contract_address; pub mod contract_state; diff --git a/util/toolkit/src/commands/fork/ledger_9/night_pools.rs b/util/toolkit/src/commands/fork/ledger_9/night_pools.rs index 26827646b..9d8329c95 100644 --- a/util/toolkit/src/commands/fork/ledger_9/night_pools.rs +++ b/util/toolkit/src/commands/fork/ledger_9/night_pools.rs @@ -13,7 +13,7 @@ use crate::commands::show_night_pools::NightPools; use ledger_helpers_local::DefaultDB; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; /// Read the NIGHT pools (Reserved / Locked / Unlocked + the rest of the supply /// breakdown) off the full `LedgerState` held by a replayed `LedgerContext`. diff --git a/util/toolkit/src/commands/fork/ledger_9/serde_convert.rs b/util/toolkit/src/commands/fork/ledger_9/serde_convert.rs index cdc9e81ae..6ffb00347 100644 --- a/util/toolkit/src/commands/fork/ledger_9/serde_convert.rs +++ b/util/toolkit/src/commands/fork/ledger_9/serde_convert.rs @@ -3,7 +3,7 @@ use hex::ToHex as _; use ledger_helpers_local::{ InitialNonce, QualifiedDustOutput, QualifiedInfo, Utxo, persistent_commit, serialize_untagged, }; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; pub fn utxo_to_ser(utxo: Utxo) -> UtxoSer { let intent_hash = utxo.intent_hash.0.0.encode_hex(); @@ -39,7 +39,7 @@ pub fn qualified_dust_output_to_ser(output: QualifiedDustOutput) -> QualifiedDus dust_public: serialize_untagged(&output.owner).unwrap().encode_hex(), nonce: serialize_untagged(&output.nonce).unwrap().encode_hex(), seq: output.seq, - ctime: midnight_node_ledger_helpers::Timestamp::from_secs(output.ctime.to_secs()), + ctime: midnight_ledger_unsafe_helpers::Timestamp::from_secs(output.ctime.to_secs()), backing_night: serialize_untagged(&output.backing_night).unwrap().encode_hex(), mt_index: output.mt_index, } @@ -52,6 +52,6 @@ pub fn dust_generation_info_to_ser( value: info.value, owner_dust_public_key: serialize_untagged(&info.owner).unwrap().encode_hex(), nonce: serialize_untagged(&info.nonce).unwrap().encode_hex(), - dtime: midnight_node_ledger_helpers::Timestamp::from_secs(info.dtime.to_secs()), + dtime: midnight_ledger_unsafe_helpers::Timestamp::from_secs(info.dtime.to_secs()), } } diff --git a/util/toolkit/src/commands/fork/ledger_9/show_transaction.rs b/util/toolkit/src/commands/fork/ledger_9/show_transaction.rs index 0070e1702..ab73f98f6 100644 --- a/util/toolkit/src/commands/fork/ledger_9/show_transaction.rs +++ b/util/toolkit/src/commands/fork/ledger_9/show_transaction.rs @@ -2,7 +2,7 @@ use midnight_node_ledger_helpers::fork::raw_block_data::RawTransaction; use serde::{Deserialize, Serialize}; use ledger_helpers_local::{DefaultDB, PureGeneratorPedersen, SystemTransaction, deserialize}; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; type Signature = ledger_helpers_local::Signature; type ProofMarker = ledger_helpers_local::ProofMarker; diff --git a/util/toolkit/src/commands/fork/ledger_9/show_wallet.rs b/util/toolkit/src/commands/fork/ledger_9/show_wallet.rs index 196158577..69d0a4ffe 100644 --- a/util/toolkit/src/commands/fork/ledger_9/show_wallet.rs +++ b/util/toolkit/src/commands/fork/ledger_9/show_wallet.rs @@ -5,7 +5,7 @@ use crate::commands::show_wallet::WalletInfoJson; use crate::serde_def::{QualifiedInfoSer, UtxoSer}; use hex::ToHex; use ledger_helpers_local::{DefaultDB, UnshieldedWallet, WalletSeed, serialize_untagged}; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; pub fn show_wallet_from_seed( context: &ledger_helpers_local::context::LedgerContext, diff --git a/util/toolkit/src/commands/generate_genesis.rs b/util/toolkit/src/commands/generate_genesis.rs index de5ed50a1..5889886e0 100644 --- a/util/toolkit/src/commands/generate_genesis.rs +++ b/util/toolkit/src/commands/generate_genesis.rs @@ -6,7 +6,7 @@ use std::path::{Path, PathBuf}; use crate::genesis_generator::{ FundingArgs, GENESIS_NONCE_SEED, GenesisGenerator, IcsConfig, ReserveConfig, }; -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::{ LedgerParameters, Serializable, SystemTransaction, Tagged, WalletSeed, midnight_serialize::tagged_deserialize, serialize, }; @@ -241,7 +241,7 @@ mod test { use crate::cli::{Cli, run_command}; use crate::{DefaultDB, LedgerState}; use clap::Parser; - use midnight_node_ledger_helpers::INITIAL_PARAMETERS; + use midnight_ledger_unsafe_helpers::INITIAL_PARAMETERS; use std::{ env::temp_dir, fs::{self, remove_file}, diff --git a/util/toolkit/src/commands/generate_intent.rs b/util/toolkit/src/commands/generate_intent.rs index baadb6a13..f0089f850 100644 --- a/util/toolkit/src/commands/generate_intent.rs +++ b/util/toolkit/src/commands/generate_intent.rs @@ -5,7 +5,7 @@ use crate::tx_generator::builder::build_fork_aware_context_cached; use crate::tx_generator::source::{Source, create_file_wallet_cache}; use crate::{cli_parsers as cli, tx_generator::TxGenerator}; use clap::{Args, Subcommand}; -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::{ CoinPublicKey, DefaultDB, LedgerParameters, WalletSeed, WalletState, deserialize, serialize, }; use std::io::Write; @@ -269,7 +269,7 @@ pub async fn execute( /// $ earthly -P +rebuild-genesis-state-undeployed #[cfg(test)] mod test { - use midnight_node_ledger_helpers::{INITIAL_PARAMETERS, Serializable, SigningKey, serialize}; + use midnight_ledger_unsafe_helpers::{INITIAL_PARAMETERS, Serializable, SigningKey, serialize}; use std::path::PathBuf; use crate::cli::{Cli, run_command}; diff --git a/util/toolkit/src/commands/generate_sample_intent.rs b/util/toolkit/src/commands/generate_sample_intent.rs index 474d3b33e..2037e9162 100644 --- a/util/toolkit/src/commands/generate_sample_intent.rs +++ b/util/toolkit/src/commands/generate_sample_intent.rs @@ -53,8 +53,9 @@ pub async fn execute(args: GenerateSampleIntentArgs) { ContractCall::Call(a) => &a.funding_seed, ContractCall::Maintenance(a) => &a.funding_seed, }; - let seeds = - vec![midnight_node_ledger_helpers::Wallet::::wallet_seed_decode(funding_seed_str)]; + let seeds = vec![midnight_ledger_unsafe_helpers::Wallet::< + midnight_ledger_unsafe_helpers::DefaultDB, + >::wallet_seed_decode(funding_seed_str)]; let fork_ctx = build_fork_aware_context_cached( &seeds, @@ -79,20 +80,20 @@ pub async fn execute(args: GenerateSampleIntentArgs) { LedgerVersion::Ledger9 => { let context = Arc::new(fork_ctx.into_ledger9().expect("expected ledger 9 context")); let prover: Arc< - dyn midnight_node_ledger_helpers::ledger_9::ProofProvider< - midnight_node_ledger_helpers::ledger_9::DefaultDB, + dyn midnight_ledger_unsafe_helpers::ledger_9::ProofProvider< + midnight_ledger_unsafe_helpers::ledger_9::DefaultDB, >, - > = Arc::new(midnight_node_ledger_helpers::ledger_9::LocalProofServer::new()); + > = Arc::new(midnight_ledger_unsafe_helpers::ledger_9::LocalProofServer::new()); execute_with_builders_v9(args.contract_call, context, prover, &args.dest_dir).await; }, LedgerVersion::Ledger8 => { let context = Arc::new(fork_ctx.into_ledger8().expect("expected ledger 8 context")); let prover: Arc< - dyn midnight_node_ledger_helpers::ledger_8::ProofProvider< - midnight_node_ledger_helpers::ledger_8::DefaultDB, + dyn midnight_ledger_unsafe_helpers::ledger_8::ProofProvider< + midnight_ledger_unsafe_helpers::ledger_8::DefaultDB, >, - > = Arc::new(midnight_node_ledger_helpers::ledger_8::LocalProofServer::new()); + > = Arc::new(midnight_ledger_unsafe_helpers::ledger_8::LocalProofServer::new()); execute_with_builders_v8(args.contract_call, context, prover, &args.dest_dir).await; }, @@ -102,13 +103,13 @@ pub async fn execute(args: GenerateSampleIntentArgs) { async fn execute_with_builders_v9( contract_call: ContractCall, context: Arc< - midnight_node_ledger_helpers::ledger_9::context::LedgerContext< - midnight_node_ledger_helpers::ledger_9::DefaultDB, + midnight_ledger_unsafe_helpers::ledger_9::context::LedgerContext< + midnight_ledger_unsafe_helpers::ledger_9::DefaultDB, >, >, prover: Arc< - dyn midnight_node_ledger_helpers::ledger_9::ProofProvider< - midnight_node_ledger_helpers::ledger_9::DefaultDB, + dyn midnight_ledger_unsafe_helpers::ledger_9::ProofProvider< + midnight_ledger_unsafe_helpers::ledger_9::DefaultDB, >, >, dest_dir: &str, @@ -116,8 +117,8 @@ async fn execute_with_builders_v9( use crate::tx_generator::builder::builders::ledger_9::{ ContractCallBuilder, ContractDeployBuilder, IntentToFile, }; - type Ctx = midnight_node_ledger_helpers::ledger_9::context::LedgerContext< - midnight_node_ledger_helpers::ledger_9::DefaultDB, + type Ctx = midnight_ledger_unsafe_helpers::ledger_9::context::LedgerContext< + midnight_ledger_unsafe_helpers::ledger_9::DefaultDB, >; let (mut builder, partial_file_name): (Box + Send>, &str) = match contract_call { @@ -139,13 +140,13 @@ async fn execute_with_builders_v9( async fn execute_with_builders_v8( contract_call: ContractCall, context: Arc< - midnight_node_ledger_helpers::ledger_8::context::LedgerContext< - midnight_node_ledger_helpers::ledger_8::DefaultDB, + midnight_ledger_unsafe_helpers::ledger_8::context::LedgerContext< + midnight_ledger_unsafe_helpers::ledger_8::DefaultDB, >, >, prover: Arc< - dyn midnight_node_ledger_helpers::ledger_8::ProofProvider< - midnight_node_ledger_helpers::ledger_8::DefaultDB, + dyn midnight_ledger_unsafe_helpers::ledger_8::ProofProvider< + midnight_ledger_unsafe_helpers::ledger_8::DefaultDB, >, >, dest_dir: &str, @@ -153,8 +154,8 @@ async fn execute_with_builders_v8( use crate::tx_generator::builder::builders::ledger_8::{ ContractCallBuilder, ContractDeployBuilder, IntentToFile, }; - type Ctx = midnight_node_ledger_helpers::ledger_8::context::LedgerContext< - midnight_node_ledger_helpers::ledger_8::DefaultDB, + type Ctx = midnight_ledger_unsafe_helpers::ledger_8::context::LedgerContext< + midnight_ledger_unsafe_helpers::ledger_8::DefaultDB, >; let (mut builder, partial_file_name): (Box + Send>, &str) = match contract_call { diff --git a/util/toolkit/src/commands/generate_txs.rs b/util/toolkit/src/commands/generate_txs.rs index e6f9837f0..f1542d043 100644 --- a/util/toolkit/src/commands/generate_txs.rs +++ b/util/toolkit/src/commands/generate_txs.rs @@ -92,8 +92,8 @@ mod tests { source::FetchCacheConfig, }, }; - use midnight_node_ledger_helpers::UnshieldedSignatureScheme; - use midnight_node_ledger_helpers::{NIGHT, WalletAddress}; + use midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme; + use midnight_ledger_unsafe_helpers::{NIGHT, WalletAddress}; use test_case::test_case; fn resource_file(path: &str) -> String { diff --git a/util/toolkit/src/commands/root_call.rs b/util/toolkit/src/commands/root_call.rs index 0c0d82831..389d493af 100644 --- a/util/toolkit/src/commands/root_call.rs +++ b/util/toolkit/src/commands/root_call.rs @@ -97,7 +97,7 @@ pub enum RootCallError { #[error("Need at least 2 technical committee keys for 2/3 threshold voting")] NotEnoughTcKeys, #[error("Kepair parse error")] - KeypairParseError(#[from] midnight_node_ledger_helpers::KeypairParseError), + KeypairParseError(#[from] midnight_ledger_unsafe_helpers::KeypairParseError), #[error("Failed to decode call: {0}")] CallDecodeError(String), #[error("online client at block error: {0}")] @@ -166,7 +166,7 @@ fn get_encoded_call(args: &RootCallArgs) -> Result, RootCallError> { } fn get_signer(key_str: &str) -> Result { - Ok(midnight_node_ledger_helpers::Keypair::from_str(key_str)?.0) + Ok(midnight_ledger_unsafe_helpers::Keypair::from_str(key_str)?.0) } /// Decode SCALE-encoded call bytes into a Value using runtime metadata diff --git a/util/toolkit/src/commands/runtime_upgrade.rs b/util/toolkit/src/commands/runtime_upgrade.rs index 367b6daf2..c9d79a7a6 100644 --- a/util/toolkit/src/commands/runtime_upgrade.rs +++ b/util/toolkit/src/commands/runtime_upgrade.rs @@ -46,7 +46,7 @@ pub enum RuntimeUpgradeError { #[error("events error: {0}")] EventsError(#[from] subxt::error::EventsError), #[error("keypair parse error: {0}")] - KeypairParseError(#[from] midnight_node_ledger_helpers::KeypairParseError), + KeypairParseError(#[from] midnight_ledger_unsafe_helpers::KeypairParseError), #[error("error executing root call: {0}")] RootCallError(Box), #[error("runtime upgrade failed: CodeUpdated event not found")] @@ -141,7 +141,7 @@ pub async fn execute(args: RuntimeUpgradeArgs) -> Result<(), RuntimeUpgradeError // Step 5: Apply the authorized upgrade log::info!("Applying authorized upgrade..."); - let signer = midnight_node_ledger_helpers::Keypair::from_str(&args.signer_key)?.0; + let signer = midnight_ledger_unsafe_helpers::Keypair::from_str(&args.signer_key)?.0; let apply_upgrade_call = dynamic::tx("System", "apply_authorized_upgrade", vec![dynamic::Value::from_bytes(&code)]); diff --git a/util/toolkit/src/commands/show_address.rs b/util/toolkit/src/commands/show_address.rs index 3753e4662..131d51653 100644 --- a/util/toolkit/src/commands/show_address.rs +++ b/util/toolkit/src/commands/show_address.rs @@ -2,7 +2,7 @@ use crate::cli_parsers::{self as cli}; use crate::{DefaultDB, IntoWalletAddress, ShieldedWallet, UnshieldedWallet}; use clap::Args; use hex::ToHex; -use midnight_node_ledger_helpers::{DustWallet, serialize, serialize_untagged}; +use midnight_ledger_unsafe_helpers::{DustWallet, serialize, serialize_untagged}; use serde::Serialize; #[derive(Args, Clone)] @@ -140,7 +140,7 @@ mod test { "0000000000000000000000000000000000000000000000000000000000000001", ) .unwrap(), - scheme: midnight_node_ledger_helpers::UnshieldedSignatureScheme::Schnorr, + scheme: midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Schnorr, }, specific_address, }; @@ -165,7 +165,7 @@ mod test { "0000000000000000000000000000000000000000000000000000000000000001", ) .unwrap(), - scheme: midnight_node_ledger_helpers::UnshieldedSignatureScheme::Schnorr, + scheme: midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Schnorr, }, specific_address, }; @@ -186,7 +186,7 @@ mod test { "0000000000000000000000000000000000000000000000000000000000000001", ) .unwrap(), - scheme: midnight_node_ledger_helpers::UnshieldedSignatureScheme::Schnorr, + scheme: midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Schnorr, }, specific_address: Default::default(), }; @@ -201,9 +201,9 @@ mod test { let unshielded_for = |ecdsa: bool| { let seed = WalletSeed::try_from_hex_str(hex).unwrap(); let scheme = if ecdsa { - midnight_node_ledger_helpers::UnshieldedSignatureScheme::Ecdsa + midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Ecdsa } else { - midnight_node_ledger_helpers::UnshieldedSignatureScheme::Schnorr + midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Schnorr }; let seed = cli::SchemeSeed { seed, scheme }; match super::execute(ShowAddressArgs { diff --git a/util/toolkit/src/commands/show_block.rs b/util/toolkit/src/commands/show_block.rs index 61f6da398..e6778aaca 100644 --- a/util/toolkit/src/commands/show_block.rs +++ b/util/toolkit/src/commands/show_block.rs @@ -172,7 +172,7 @@ fn blocks_from_file( path: &str, ) -> Result, Box> { let batches = GetTxsFromFile::load_single_or_multiple(path)?; - let blocks: Vec = (&batches).try_into()?; + let blocks = midnight_ledger_unsafe_helpers::fork::raw_block_data_from_batches(&batches)?; Ok(blocks) } diff --git a/util/toolkit/src/commands/show_ledger_parameters.rs b/util/toolkit/src/commands/show_ledger_parameters.rs index 934af7395..9d402107d 100644 --- a/util/toolkit/src/commands/show_ledger_parameters.rs +++ b/util/toolkit/src/commands/show_ledger_parameters.rs @@ -1,8 +1,8 @@ use crate::client::{ClientError, MidnightNodeClient}; use clap::Args; -use midnight_node_ledger_helpers::base_crypto::time::Duration; -use midnight_node_ledger_helpers::mn_ledger::structure::INITIAL_PARAMETERS; -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::base_crypto::time::Duration; +use midnight_ledger_unsafe_helpers::mn_ledger::structure::INITIAL_PARAMETERS; +use midnight_ledger_unsafe_helpers::{ DustParameters, FeePrices, FixedPoint, LedgerParameters, deserialize, serialize, }; use thiserror::Error; diff --git a/util/toolkit/src/commands/show_token_type.rs b/util/toolkit/src/commands/show_token_type.rs index fd3aac4e2..1a8572970 100644 --- a/util/toolkit/src/commands/show_token_type.rs +++ b/util/toolkit/src/commands/show_token_type.rs @@ -1,6 +1,6 @@ use crate::cli_parsers::{self as cli}; use clap::Args; -use midnight_node_ledger_helpers::{ContractAddress, HashOutput}; +use midnight_ledger_unsafe_helpers::{ContractAddress, HashOutput}; use serde::Serialize; #[derive(Args, Clone)] @@ -60,7 +60,7 @@ pub fn execute(args: ShowTokenTypeArgs) -> ShowTokenType { #[cfg(test)] mod test { - use midnight_node_ledger_helpers::Deserializable; + use midnight_ledger_unsafe_helpers::Deserializable; use super::*; diff --git a/util/toolkit/src/commands/show_transaction.rs b/util/toolkit/src/commands/show_transaction.rs index 38c483e2a..dec289efd 100644 --- a/util/toolkit/src/commands/show_transaction.rs +++ b/util/toolkit/src/commands/show_transaction.rs @@ -6,7 +6,6 @@ use crate::{ commands::show_block::{ShowBlockJson, ShowBlockTransaction}, tx_generator::source::GetTxsFromFile, }; -use midnight_node_ledger_helpers::fork::raw_block_data::RawBlockData; pub struct ShowTransactionResult { pub txs: Vec, @@ -32,7 +31,7 @@ pub fn execute( args: ShowTransactionArgs, ) -> Result> { let batches = GetTxsFromFile::load_single_or_multiple(&args.src_file)?; - let blocks: Vec = (&batches).try_into()?; + let blocks = midnight_ledger_unsafe_helpers::fork::raw_block_data_from_batches(&batches)?; let mut txs = Vec::new(); for block in blocks { let show_block = ShowBlockJson::new(&block)?; diff --git a/util/toolkit/src/commands/show_viewing_key.rs b/util/toolkit/src/commands/show_viewing_key.rs index 7ccf74ecf..38229578a 100644 --- a/util/toolkit/src/commands/show_viewing_key.rs +++ b/util/toolkit/src/commands/show_viewing_key.rs @@ -1,6 +1,6 @@ use crate::cli_parsers as cli; use clap::Args; -use midnight_node_ledger_helpers::{DefaultDB, DerivationPath, Role, ShieldedWallet, WalletSeed}; +use midnight_ledger_unsafe_helpers::{DefaultDB, DerivationPath, Role, ShieldedWallet, WalletSeed}; #[derive(Args)] pub struct ShowViewingKeyArgs { /// Target network diff --git a/util/toolkit/src/commands/show_wallet.rs b/util/toolkit/src/commands/show_wallet.rs index 0488a95f1..35fd13fbb 100644 --- a/util/toolkit/src/commands/show_wallet.rs +++ b/util/toolkit/src/commands/show_wallet.rs @@ -262,7 +262,7 @@ mod tests { }, seed: Some(cli::SchemeSeed { seed, - scheme: midnight_node_ledger_helpers::UnshieldedSignatureScheme::Schnorr, + scheme: midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Schnorr, }), address: None, debug: false, @@ -303,7 +303,7 @@ mod tests { }, seed: Some(cli::SchemeSeed { seed, - scheme: midnight_node_ledger_helpers::UnshieldedSignatureScheme::Ecdsa, + scheme: midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Ecdsa, }), address: None, debug: false, diff --git a/util/toolkit/src/commands/update_ledger_parameters.rs b/util/toolkit/src/commands/update_ledger_parameters.rs index df3a71697..414c28cfd 100644 --- a/util/toolkit/src/commands/update_ledger_parameters.rs +++ b/util/toolkit/src/commands/update_ledger_parameters.rs @@ -3,7 +3,7 @@ use subxt::{OnlineClient, SubstrateConfig, dynamic}; use thiserror::Error; use crate::commands::root_call::{self, RootCallArgs}; -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::{ CostDuration, Duration, DustParameters, FeePrices, FixedPoint, SyntheticCost, deserialize, mn_ledger::structure::{LedgerParameters, SystemTransaction, TransactionLimits}, serialize, diff --git a/util/toolkit/src/fetcher/trusted_deserialize.rs b/util/toolkit/src/fetcher/trusted_deserialize.rs index 669765a9d..b9fca13a2 100644 --- a/util/toolkit/src/fetcher/trusted_deserialize.rs +++ b/util/toolkit/src/fetcher/trusted_deserialize.rs @@ -25,7 +25,7 @@ //! let state: LedgerState = trusted_deserialize_tagged(&cached_bytes)?; //! ``` -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::{ DefaultDB, Sp, Storable, mn_ledger_serialize::{Deserializable, GLOBAL_TAG, Serializable, Tagged}, mn_ledger_storage::{ @@ -157,7 +157,7 @@ impl Loader for TrustedCacheLoader<'_> { /// Deserialize a tagged `Storable` type from bytes, trusting the data integrity. /// -/// This is functionally equivalent to `midnight_node_ledger_helpers::deserialize` but +/// This is functionally equivalent to `midnight_ledger_unsafe_helpers::deserialize` but /// performs a single hash pass instead of two, and skips the re-serialization verification. pub fn trusted_deserialize_tagged + Deserializable + Tagged>( bytes: &[u8], @@ -231,7 +231,7 @@ pub fn trusted_deserialize_tagged + Deserializable + Tagg #[cfg(test)] mod tests { use super::*; - use midnight_node_ledger_helpers::{LedgerContext, LedgerState}; + use midnight_ledger_unsafe_helpers::{LedgerContext, LedgerState}; fn load_genesis_context() -> LedgerContext { let genesis_path = @@ -268,14 +268,14 @@ mod tests { let ledger_state = context.ledger_state.lock().unwrap(); let original_bytes = - midnight_node_ledger_helpers::serialize(&*ledger_state).expect("serialize failed"); + midnight_ledger_unsafe_helpers::serialize(&*ledger_state).expect("serialize failed"); drop(ledger_state); let restored: LedgerState = trusted_deserialize_tagged(&original_bytes).expect("trusted deserialize failed"); let roundtrip_bytes = - midnight_node_ledger_helpers::serialize(&restored).expect("re-serialize failed"); + midnight_ledger_unsafe_helpers::serialize(&restored).expect("re-serialize failed"); assert_eq!( original_bytes, @@ -292,18 +292,18 @@ mod tests { #[test] fn trusted_deser_matches_upstream() { let state = LedgerState::::new("test"); - let bytes = midnight_node_ledger_helpers::serialize(&state).expect("serialize failed"); + let bytes = midnight_ledger_unsafe_helpers::serialize(&state).expect("serialize failed"); let standard: LedgerState = - midnight_node_ledger_helpers::deserialize(&bytes[..]) + midnight_ledger_unsafe_helpers::deserialize(&bytes[..]) .expect("standard deserialize failed"); let trusted: LedgerState = trusted_deserialize_tagged(&bytes).expect("trusted deserialize failed"); - let standard_bytes = midnight_node_ledger_helpers::serialize(&standard) + let standard_bytes = midnight_ledger_unsafe_helpers::serialize(&standard) .expect("re-serialize standard failed"); - let trusted_bytes = - midnight_node_ledger_helpers::serialize(&trusted).expect("re-serialize trusted failed"); + let trusted_bytes = midnight_ledger_unsafe_helpers::serialize(&trusted) + .expect("re-serialize trusted failed"); assert_eq!( standard_bytes, diff --git a/util/toolkit/src/fetcher/wallet_state_cache.rs b/util/toolkit/src/fetcher/wallet_state_cache.rs index 4712b8161..71ff7aa70 100644 --- a/util/toolkit/src/fetcher/wallet_state_cache.rs +++ b/util/toolkit/src/fetcher/wallet_state_cache.rs @@ -16,11 +16,12 @@ //! Ledger snapshots are stored once per block height, while individual //! wallet state is cached per seed. Ledger snapshots unused by any wallets are eventually gced. -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::{ BlockContext, DefaultDB, DustLocalState, HashOutput, LedgerContext, LedgerState, Sp, Timestamp, - UnshieldedSignatureScheme, Wallet, WalletSeed, WalletState, deserialize_untagged, - fork::raw_block_data::LedgerVersion, ledger_8, serialize_untagged, + UnshieldedSignatureScheme, Wallet, WalletSeed, WalletState, deserialize_untagged, ledger_8, + serialize_untagged, }; +use midnight_node_ledger_helpers::fork::raw_block_data::LedgerVersion; use serde::{Deserialize, Serialize}; use sha2::{Digest, Sha256}; use subxt::utils::H256; @@ -150,7 +151,7 @@ fn serialize_ledger_state(state: &LedgerState) -> Result, Cac pub fn serialize_ledger_state_fast( state: &LedgerState, ) -> Result, std::io::Error> { - use midnight_node_ledger_helpers::mn_ledger_serialize::{GLOBAL_TAG, Serializable, Tagged}; + use midnight_ledger_unsafe_helpers::mn_ledger_serialize::{GLOBAL_TAG, Serializable, Tagged}; let sp = Sp::new(state.clone()); let nodes = sp.serialize_to_node_list(); @@ -168,7 +169,7 @@ pub fn serialize_ledger_state_fast( pub fn serialize_ledger_state_fast_8( state: &ledger_8::LedgerState, ) -> Result, std::io::Error> { - use midnight_node_ledger_helpers::mn_ledger_serialize::{GLOBAL_TAG, Serializable, Tagged}; + use midnight_ledger_unsafe_helpers::mn_ledger_serialize::{GLOBAL_TAG, Serializable, Tagged}; let sp = ledger_8::Sp::new(state.clone()); let nodes = sp.serialize_to_node_list(); @@ -628,12 +629,12 @@ mod tests { /// An empty state agrees with any serializer, so populate it. fn populated_ledger8_context() -> ( - midnight_node_ledger_helpers::ledger_8::context::LedgerContext< - midnight_node_ledger_helpers::ledger_8::DefaultDB, + midnight_ledger_unsafe_helpers::ledger_8::context::LedgerContext< + midnight_ledger_unsafe_helpers::ledger_8::DefaultDB, >, WalletSeed, ) { - use midnight_node_ledger_helpers::ledger_8 as l8; + use midnight_ledger_unsafe_helpers::ledger_8 as l8; let seed = WalletSeed::try_from_hex_str( "0000000000000000000000000000000000000000000000000000000000000001", @@ -658,15 +659,15 @@ mod tests { let (ctx, _) = populated_ledger8_context(); let state = ctx.ledger_state.lock().unwrap(); - let default_bytes = - midnight_node_ledger_helpers::ledger_8::serialize(&**state).expect("serialize failed"); + let default_bytes = midnight_ledger_unsafe_helpers::ledger_8::serialize(&**state) + .expect("serialize failed"); let fast_bytes = serialize_ledger_state_fast_8(&state).expect("fast serialize failed"); assert_eq!(default_bytes, fast_bytes, "ledger-8 fast serializer diverged from default"); } #[test] fn ledger8_snapshot_roundtrip_and_version_dispatch() { - use midnight_node_ledger_helpers::ledger_8 as l8; + use midnight_ledger_unsafe_helpers::ledger_8 as l8; let (ctx, seed) = populated_ledger8_context(); let snapshot = create_ledger_snapshot_8(&ctx, 7).expect("snapshot failed"); @@ -710,7 +711,7 @@ mod tests { #[test] fn relaxed_replay_with_state_roots_matches_strict_replay() { - use midnight_node_ledger_helpers::fork::fork_aware_context::apply_block_9; + use midnight_ledger_unsafe_helpers::fork::fork_aware_context::apply_block_9; let (source, _) = load_genesis_context(&[]); assert!(source.blocks.iter().all(|b| b.state_root.is_none())); @@ -731,10 +732,10 @@ mod tests { } let strict_bytes = - midnight_node_ledger_helpers::serialize(&**strict.ledger_state.lock().unwrap()) + midnight_ledger_unsafe_helpers::serialize(&**strict.ledger_state.lock().unwrap()) .unwrap(); let relaxed_bytes = - midnight_node_ledger_helpers::serialize(&**relaxed.ledger_state.lock().unwrap()) + midnight_ledger_unsafe_helpers::serialize(&**relaxed.ledger_state.lock().unwrap()) .unwrap(); assert_eq!(strict_bytes, relaxed_bytes, "relaxed replay diverged from strict replay"); } @@ -742,7 +743,7 @@ mod tests { #[test] #[should_panic(expected = "StateRootMismatch")] fn relaxed_replay_aborts_on_state_root_mismatch() { - use midnight_node_ledger_helpers::fork::fork_aware_context::apply_block_9; + use midnight_ledger_unsafe_helpers::fork::fork_aware_context::apply_block_9; let (source, _) = load_genesis_context(&[]); let ctx = LedgerContext::::new(&source.network_id); @@ -917,11 +918,11 @@ mod tests { // Verify ledger state matches let original_bytes = { let state = context.ledger_state.lock().unwrap(); - midnight_node_ledger_helpers::serialize(&*state).expect("serialize failed") + midnight_ledger_unsafe_helpers::serialize(&*state).expect("serialize failed") }; let restored_bytes = { let state = restored.ledger_state.lock().unwrap(); - midnight_node_ledger_helpers::serialize(&*state).expect("serialize failed") + midnight_ledger_unsafe_helpers::serialize(&*state).expect("serialize failed") }; assert_eq!(original_bytes, restored_bytes, "ledger state bytes differ"); @@ -1002,7 +1003,7 @@ mod tests { #[test] fn cache_restore_then_incremental_replay() { use crate::tx_generator::builder::build_fork_aware_context; - use midnight_node_ledger_helpers::fork::fork_aware_context::ForkAwareLedgerContext; + use midnight_ledger_unsafe_helpers::fork::fork_aware_context::ForkAwareLedgerContext; let wallet_seed = WalletSeed::try_from_hex_str( "0000000000000000000000000000000000000000000000000000000000000001", @@ -1062,11 +1063,11 @@ mod tests { // Compare ledger state let full_bytes = { let state = full_context.ledger_state.lock().unwrap(); - midnight_node_ledger_helpers::serialize(&**state).expect("serialize failed") + midnight_ledger_unsafe_helpers::serialize(&**state).expect("serialize failed") }; let incremental_bytes = { let state = incremental_context.ledger_state.lock().unwrap(); - midnight_node_ledger_helpers::serialize(&**state).expect("serialize failed") + midnight_ledger_unsafe_helpers::serialize(&**state).expect("serialize failed") }; assert_eq!(full_bytes, incremental_bytes, "ledger state diverged"); @@ -1127,7 +1128,7 @@ mod tests { let state = context.ledger_state.lock().unwrap(); let default_bytes = - midnight_node_ledger_helpers::serialize(&*state).expect("default serialize failed"); + midnight_ledger_unsafe_helpers::serialize(&*state).expect("default serialize failed"); let fast_bytes = serialize_ledger_state_fast(&state).expect("fast serialize failed"); assert_eq!( diff --git a/util/toolkit/src/genesis_generator.rs b/util/toolkit/src/genesis_generator.rs index ef1c2b06c..2fb99858e 100644 --- a/util/toolkit/src/genesis_generator.rs +++ b/util/toolkit/src/genesis_generator.rs @@ -17,9 +17,9 @@ use crate::{ remote_prover::RemoteProofServer, t_token, }; -use midnight_node_ledger_helpers::fork::raw_block_data::{SerializedTx, SerializedTxBatches}; -use midnight_node_ledger_helpers::{ - Transaction as MNLedgerTransaction, fork::raw_block_data::RawTransaction, *, +use midnight_ledger_unsafe_helpers::{Transaction as MNLedgerTransaction, *}; +use midnight_node_ledger_helpers::fork::raw_block_data::{ + RawTransaction, SerializedTx, SerializedTxBatches, }; use thiserror::Error; diff --git a/util/toolkit/src/lib.rs b/util/toolkit/src/lib.rs index 0b72b6065..d4c3cde12 100644 --- a/util/toolkit/src/lib.rs +++ b/util/toolkit/src/lib.rs @@ -30,7 +30,7 @@ use rand::{SeedableRng, rngs::StdRng}; use subxt::utils::H256; use tx_generator::*; -use midnight_node_ledger_helpers::*; +use midnight_ledger_unsafe_helpers::*; // Conditionally define the type alias `ProofType` and `SignatureType` #[cfg(not(feature = "erase-proof"))] diff --git a/util/toolkit/src/remote_prover.rs b/util/toolkit/src/remote_prover.rs index 0ae3aa46b..5f0f2ea81 100644 --- a/util/toolkit/src/remote_prover.rs +++ b/util/toolkit/src/remote_prover.rs @@ -14,7 +14,7 @@ use async_trait::async_trait; use backoff::{ExponentialBackoff, future::retry}; -use midnight_node_ledger_helpers::*; +use midnight_ledger_unsafe_helpers::*; const PROOF_SERVER_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(30); @@ -73,22 +73,24 @@ impl ProofProvider for RemoteProofServer { } #[async_trait] -impl midnight_node_ledger_helpers::ledger_8::ProofProvider for RemoteProofServer { +impl midnight_ledger_unsafe_helpers::ledger_8::ProofProvider + for RemoteProofServer +{ async fn prove( &self, - tx: midnight_node_ledger_helpers::ledger_8::Transaction< - midnight_node_ledger_helpers::ledger_8::Signature, - midnight_node_ledger_helpers::ledger_8::ProofPreimageMarker, - midnight_node_ledger_helpers::ledger_8::PedersenRandomness, + tx: midnight_ledger_unsafe_helpers::ledger_8::Transaction< + midnight_ledger_unsafe_helpers::ledger_8::Signature, + midnight_ledger_unsafe_helpers::ledger_8::ProofPreimageMarker, + midnight_ledger_unsafe_helpers::ledger_8::PedersenRandomness, D, >, _rng: StdRng, - resolver: &'static midnight_node_ledger_helpers::ledger_8::Resolver, - cost_model: midnight_node_ledger_helpers::ledger_8::CostModel, - ) -> midnight_node_ledger_helpers::ledger_8::Transaction< - midnight_node_ledger_helpers::ledger_8::Signature, - midnight_node_ledger_helpers::ledger_8::ProofMarker, - midnight_node_ledger_helpers::ledger_8::PedersenRandomness, + resolver: &'static midnight_ledger_unsafe_helpers::ledger_8::Resolver, + cost_model: midnight_ledger_unsafe_helpers::ledger_8::CostModel, + ) -> midnight_ledger_unsafe_helpers::ledger_8::Transaction< + midnight_ledger_unsafe_helpers::ledger_8::Signature, + midnight_ledger_unsafe_helpers::ledger_8::ProofMarker, + midnight_ledger_unsafe_helpers::ledger_8::PedersenRandomness, D, > { log::info!("Proof server URL: {}", self.url); @@ -100,7 +102,7 @@ impl midnight_node_ledger_helpers::ledger_8::ProofProvider for // ledger8 is Send, and we're remote-proving, so we await directly here. retry(backoff, || async { - let provider = midnight_node_ledger_helpers::ledger_8::ProofServerProvider { + let provider = midnight_ledger_unsafe_helpers::ledger_8::ProofServerProvider { base_url: self.url.clone().into(), resolver, }; diff --git a/util/toolkit/src/sender.rs b/util/toolkit/src/sender.rs index c66b1e950..4ef3b636e 100644 --- a/util/toolkit/src/sender.rs +++ b/util/toolkit/src/sender.rs @@ -12,7 +12,8 @@ // limitations under the License. use backoff::ExponentialBackoff; -use midnight_node_ledger_helpers::{fork::raw_block_data::RawTransaction, *}; +use midnight_ledger_unsafe_helpers::*; +use midnight_node_ledger_helpers::fork::raw_block_data::RawTransaction; use midnight_node_metadata::midnight_metadata_latest as mn_meta; use parity_scale_codec::Encode; use std::{ diff --git a/util/toolkit/src/serde_def/ledger_types.rs b/util/toolkit/src/serde_def/ledger_types.rs index be704c1c5..3c01bd4b7 100644 --- a/util/toolkit/src/serde_def/ledger_types.rs +++ b/util/toolkit/src/serde_def/ledger_types.rs @@ -1,5 +1,5 @@ use hex::ToHex as _; -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::{ DustGenerationInfo, InitialNonce, QualifiedDustOutput, QualifiedInfo, Timestamp, Utxo, persistent_commit, serialize_untagged, }; diff --git a/util/toolkit/src/serde_def/transactions.rs b/util/toolkit/src/serde_def/transactions.rs index cff234fce..9bbde582e 100644 --- a/util/toolkit/src/serde_def/transactions.rs +++ b/util/toolkit/src/serde_def/transactions.rs @@ -11,10 +11,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +use midnight_ledger_unsafe_helpers::*; use midnight_node_ledger_helpers::fork::raw_block_data::{ LedgerVersion, RawBlockData, RawTransaction, SerializedTx, SerializedTxBatches, }; -use midnight_node_ledger_helpers::*; use std::{ fmt::Debug, time::{SystemTime, UNIX_EPOCH}, diff --git a/util/toolkit/src/toolkit_js/encoded_zswap_local_state.rs b/util/toolkit/src/toolkit_js/encoded_zswap_local_state.rs index 34b66586d..80936840f 100644 --- a/util/toolkit/src/toolkit_js/encoded_zswap_local_state.rs +++ b/util/toolkit/src/toolkit_js/encoded_zswap_local_state.rs @@ -1,4 +1,4 @@ -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::{ CoinPublicKey, ContractAddress, DB, Deserializable, HashOutput, PERSISTENT_HASH_BYTES, Serializable, WalletState, }; @@ -209,8 +209,8 @@ mod bytes { #[cfg(test)] mod tests { use super::*; - use midnight_node_ledger_helpers::coin_structure::coin::Nullifier; - use midnight_node_ledger_helpers::{ + use midnight_ledger_unsafe_helpers::coin_structure::coin::Nullifier; + use midnight_ledger_unsafe_helpers::{ CoinPublicKey, DefaultDB, HashOutput, Nonce, PERSISTENT_HASH_BYTES, QualifiedInfo, ShieldedTokenType, WalletState, }; diff --git a/util/toolkit/src/toolkit_js/mod.rs b/util/toolkit/src/toolkit_js/mod.rs index 53b0e676e..6e335c8af 100644 --- a/util/toolkit/src/toolkit_js/mod.rs +++ b/util/toolkit/src/toolkit_js/mod.rs @@ -5,7 +5,7 @@ use clap::{ builder::{PathBufValueParser, TypedValueParser}, }; use hex::ToHex; -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::{ CoinPublicKey, ContractAddress, UnshieldedSignatureScheme, UnshieldedWallet, WalletSeed, serialize_untagged, }; @@ -523,7 +523,7 @@ impl ToolkitJs { #[cfg(test)] mod tests { use super::*; - use midnight_node_ledger_helpers::{HashOutput, PERSISTENT_HASH_BYTES, WalletSeed}; + use midnight_ledger_unsafe_helpers::{HashOutput, PERSISTENT_HASH_BYTES, WalletSeed}; fn deploy_args(scheme: UnshieldedSignatureScheme) -> DeployArgs { let seed = WalletSeed::try_from_hex_str( diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/batch_single_tx.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/batch_single_tx.rs index dc3d2a733..41af75632 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/batch_single_tx.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/batch_single_tx.rs @@ -23,7 +23,7 @@ use ledger_helpers_local::{ TransactionWithContext, UnshieldedTokenType, UnshieldedWallet, UtxoSelectionError, WalletAddress, }; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use tracing::Instrument as _; use crate::{Progress, serde_def::SourceTransactions, tx_generator::builder::BatchSingleTxArgs}; @@ -103,7 +103,7 @@ impl> BatchSingleTxBuilder { if let Some(amount) = spec.unshielded_amount { let hash = parse_hash_output(spec.unshielded_token_type.as_deref()); let token_type: UnshieldedTokenType = convert_unshielded_token_type( - midnight_node_ledger_helpers::UnshieldedTokenType(hash), + midnight_ledger_unsafe_helpers::UnshieldedTokenType(hash), ); let dest_wallet: UnshieldedWallet = (&dest_address) @@ -123,8 +123,9 @@ impl> BatchSingleTxBuilder { if let Some(amount) = spec.shielded_amount { let hash = parse_hash_output(spec.shielded_token_type.as_deref()); - let token_type: ShieldedTokenType = - convert_shielded_token_type(midnight_node_ledger_helpers::ShieldedTokenType(hash)); + let token_type: ShieldedTokenType = convert_shielded_token_type( + midnight_ledger_unsafe_helpers::ShieldedTokenType(hash), + ); let dest_wallet: ShieldedWallet = (&dest_address).try_into().expect("destination is not a valid shielded address"); @@ -164,10 +165,10 @@ impl> BatchSingleTxBuilder { } } -fn parse_hash_output(hex_str: Option<&str>) -> midnight_node_ledger_helpers::HashOutput { +fn parse_hash_output(hex_str: Option<&str>) -> midnight_ledger_unsafe_helpers::HashOutput { let hex_str = hex_str.unwrap_or("0000000000000000000000000000000000000000000000000000000000000000"); - midnight_node_ledger_helpers::HashOutput( + midnight_ledger_unsafe_helpers::HashOutput( hex::decode(hex_str) .expect("invalid token_type hex") .try_into() diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/batches.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/batches.rs index c54032a52..38e7b25e7 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/batches.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/batches.rs @@ -19,7 +19,7 @@ use ledger_helpers_local::{ StandardTransactionInfo, TransactionWithContext, UnshieldedOfferInfo, UnshieldedTokenType, UtxoOutputInfo, UtxoSpendInfo, Wallet, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use std::{collections::HashMap, sync::Arc}; use tokio::{sync::Semaphore, task::JoinError}; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/build_txs_ext.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/build_txs_ext.rs index 3e98be7eb..9596a5d64 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/build_txs_ext.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/build_txs_ext.rs @@ -19,7 +19,7 @@ use ledger_helpers_local::{ BuildIntent, BuilderContext, DefaultDB, FromContext, ProofProvider, StandardTransactionInfo, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; /// An extension to help build transactions. pub trait BuildTxsExt> { diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/claim_rewards.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/claim_rewards.rs index 1473a3765..f81fb9f3e 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/claim_rewards.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/claim_rewards.rs @@ -18,7 +18,7 @@ use ledger_helpers_local::{ BuilderContext, ClaimKind, ClaimMintInfo, DefaultDB, FromContext, ProofProvider, RewardsInfo, TransactionWithContext, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use crate::{ serde_def::SourceTransactions, diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_call.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_call.rs index 5a6f51a08..714727431 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_call.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_call.rs @@ -22,8 +22,8 @@ use ledger_helpers_local::{ ContractAddress, DefaultDB, IntentInfo, MerkleTreeContract, OfferInfo, ProofProvider, TransactionWithContext, Wallet, WalletSeed, }; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTxBatches; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; use std::{convert::Infallible, marker::PhantomData, sync::Arc}; const CONTRACT_INPUT: u32 = 12; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_custom.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_custom.rs index aee62830e..dca29f6d1 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_custom.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_custom.rs @@ -17,8 +17,8 @@ use ledger_helpers_local::{ TransactionWithContext, Transient, UnshieldedOfferInfo, UnshieldedWallet, UtxoId, UtxoOutputInfo, UtxoSpendInfo, Wallet, WalletAddress, WalletSeed, zswap, }; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTxBatches; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; use rand::SeedableRng; use std::{collections::HashMap, sync::Arc}; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_deploy.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_deploy.rs index aa4c37933..78f4cc75e 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_deploy.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_deploy.rs @@ -22,8 +22,8 @@ use ledger_helpers_local::{ DefaultDB, IntentInfo, MerkleTreeContract, OfferInfo, ProofProvider, TransactionWithContext, UnshieldedWallet, Wallet, WalletSeed, }; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTxBatches; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; use std::{convert::Infallible, marker::PhantomData, sync::Arc}; pub struct ContractDeployBuilder> { diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_maintenance.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_maintenance.rs index 290c485b5..37907f1d3 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_maintenance.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/contract_maintenance.rs @@ -20,7 +20,7 @@ use ledger_helpers_local::{ TransactionWithContext, UnshieldedWallet, UpdateInfo, Wallet, WalletSeed, contract_operation_version_of, contract_operation_versioned_verifier_key, serialize_untagged, }; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use std::{path::PathBuf, sync::Arc}; use super::build_txs_ext::BuildTxsExt; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/deregister_dust_address.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/deregister_dust_address.rs index 6f85ab261..959fe856b 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/deregister_dust_address.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/deregister_dust_address.rs @@ -20,7 +20,7 @@ use ledger_helpers_local::{ StandardTransactionInfo, TransactionWithContext, UnshieldedOfferInfo, UtxoOutputInfo, UtxoSpendInfo, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use crate::{ progress::Spin, diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/do_nothing.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/do_nothing.rs index c718c5dbe..f86ac6f37 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/do_nothing.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/do_nothing.rs @@ -16,8 +16,8 @@ use ledger_helpers_local::{ DefaultDB, HashOutput, ProofMarker, SerdeTransaction, Signature, Timestamp, TransactionWithContext, make_block_context, mn_ledger_serialize::tagged_deserialize, }; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use midnight_node_ledger_helpers::fork::raw_block_data::RawTransaction; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; use std::convert::Infallible; use crate::{serde_def::SourceTransactions, tx_generator::builder::BuildTxs}; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/mod.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/mod.rs index 3d6a46296..c8d70bcf7 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/mod.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/mod.rs @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -pub use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +pub use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; pub mod batch_single_tx; mod batches; @@ -44,16 +44,16 @@ pub use deregister_dust_address::*; pub use do_nothing::*; pub use register_dust_address::*; -use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTx; -use midnight_node_ledger_helpers::ledger_8::{ +use midnight_ledger_unsafe_helpers::ledger_8::{ DefaultDB, ProofMarker, Signature, TransactionWithContext, }; +use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTx; pub fn serialize_tx( tx: &TransactionWithContext, ) -> SerializedTx { let context = - midnight_node_ledger_helpers::fork::fork_8_to_9::block_context_8_to_9(&tx.block_context); + midnight_ledger_unsafe_helpers::fork::fork_8_to_9::block_context_8_to_9(&tx.block_context); let raw_tx = transactions::from_serde_tx(&tx.tx); let tx_hash = tx.tx.transaction_hash().0.0; SerializedTx { tx: raw_tx, context, tx_hash } diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/output_spec.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/output_spec.rs index 01819bb98..2a80d6dff 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/output_spec.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/output_spec.rs @@ -30,7 +30,7 @@ use ledger_helpers_local::{ DefaultDB, ShieldedTokenType, ShieldedWallet, UnshieldedTokenType, UnshieldedWallet, }; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use crate::{cli_parsers::OutputArg, tx_generator::builder::SingleTxArgs}; @@ -216,8 +216,8 @@ pub(crate) fn resolve_outputs_from_triples( if let Ok(sw) = >::try_from(&local_addr) { let token_type = match triple.token_type { Some(bytes) => { - convert_shielded_token_type(midnight_node_ledger_helpers::ShieldedTokenType( - midnight_node_ledger_helpers::HashOutput(bytes), + convert_shielded_token_type(midnight_ledger_unsafe_helpers::ShieldedTokenType( + midnight_ledger_unsafe_helpers::HashOutput(bytes), )) }, None => ShieldedTokenType::default(), @@ -230,8 +230,8 @@ pub(crate) fn resolve_outputs_from_triples( } else if let Ok(uw) = UnshieldedWallet::try_from(&local_addr) { let token_type = match triple.token_type { Some(bytes) => convert_unshielded_token_type( - midnight_node_ledger_helpers::UnshieldedTokenType( - midnight_node_ledger_helpers::HashOutput(bytes), + midnight_ledger_unsafe_helpers::UnshieldedTokenType( + midnight_ledger_unsafe_helpers::HashOutput(bytes), ), ), None => UnshieldedTokenType::default(), diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/register_dust_address.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/register_dust_address.rs index a25d1afb6..7274e158e 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/register_dust_address.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/register_dust_address.rs @@ -7,7 +7,7 @@ use ledger_helpers_local::{ ProofProvider, Segment, StandardTransactionInfo, Timestamp, TransactionWithContext, UnshieldedOfferInfo, Utxo, UtxoOutputInfo, UtxoSpendInfo, WalletAddress, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use crate::{ progress::Spin, diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/single_tx.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/single_tx.rs index 6560c9454..2a9d99333 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/single_tx.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/single_tx.rs @@ -28,7 +28,7 @@ use ledger_helpers_local::{ StandardTransactionInfo, TransactionWithContext, UnshieldedOfferInfo, UnshieldedTokenType, UtxoId, UtxoOutputInfo, UtxoSelectionError, UtxoSpendInfo, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use crate::{ progress::Spin, diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/transactions.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/transactions.rs index f71788d8d..dd9a76a28 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/transactions.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/transactions.rs @@ -1,7 +1,7 @@ use midnight_node_ledger_helpers::fork::raw_block_data::RawTransaction; use ledger_helpers_local::*; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; pub fn from_serde_tx(tx: &SerdeTransaction) -> RawTransaction where diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/tx_serialization.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/tx_serialization.rs index d70f2f205..bbaf442c7 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/tx_serialization.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/tx_serialization.rs @@ -18,8 +18,8 @@ use super::serialize_tx; use ledger_helpers_local::{DefaultDB, ProofMarker, Signature}; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTxBatches; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; use ledger_helpers_local::TransactionWithContext; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_8/type_convert.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_8/type_convert.rs index c70d1bf62..25d326aff 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_8/type_convert.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_8/type_convert.rs @@ -20,56 +20,58 @@ use ledger_helpers_local::{ CoinPublicKey, ContractAddress, HashOutput, IntentHash, ShieldedTokenType, UnshieldedSignatureScheme, UnshieldedTokenType, UtxoId, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_8 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_8 as ledger_helpers_local; use std::str::FromStr; pub fn convert_scheme( - s: midnight_node_ledger_helpers::UnshieldedSignatureScheme, + s: midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme, ) -> UnshieldedSignatureScheme { match s { - midnight_node_ledger_helpers::UnshieldedSignatureScheme::Schnorr => { + midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Schnorr => { UnshieldedSignatureScheme::Schnorr }, - midnight_node_ledger_helpers::UnshieldedSignatureScheme::Ecdsa => { + midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Ecdsa => { UnshieldedSignatureScheme::Ecdsa }, } } pub fn convert_shielded_token_type( - stt: midnight_node_ledger_helpers::ShieldedTokenType, + stt: midnight_ledger_unsafe_helpers::ShieldedTokenType, ) -> ShieldedTokenType { ShieldedTokenType(HashOutput(stt.0.0)) } pub fn convert_unshielded_token_type( - utt: midnight_node_ledger_helpers::UnshieldedTokenType, + utt: midnight_ledger_unsafe_helpers::UnshieldedTokenType, ) -> UnshieldedTokenType { UnshieldedTokenType(HashOutput(utt.0.0)) } pub fn convert_contract_address( - ca: midnight_node_ledger_helpers::ContractAddress, + ca: midnight_ledger_unsafe_helpers::ContractAddress, ) -> ContractAddress { ContractAddress(HashOutput(ca.0.0)) } -pub fn convert_wallet_seed(ws: midnight_node_ledger_helpers::WalletSeed) -> WalletSeed { +pub fn convert_wallet_seed(ws: midnight_ledger_unsafe_helpers::WalletSeed) -> WalletSeed { WalletSeed::try_from(ws.as_bytes()).expect("wallet seed conversion between versions") } -pub fn convert_coin_public_key(cpk: midnight_node_ledger_helpers::CoinPublicKey) -> CoinPublicKey { +pub fn convert_coin_public_key( + cpk: midnight_ledger_unsafe_helpers::CoinPublicKey, +) -> CoinPublicKey { CoinPublicKey(HashOutput(cpk.0.0)) } pub fn convert_wallet_address( - wa: &midnight_node_ledger_helpers::WalletAddress, + wa: &midnight_ledger_unsafe_helpers::WalletAddress, ) -> ledger_helpers_local::WalletAddress { ledger_helpers_local::WalletAddress::from_str(&wa.to_bech32()) .expect("wallet address conversion between versions") } -pub fn convert_utxo_id(id: &midnight_node_ledger_helpers::UtxoId) -> UtxoId { +pub fn convert_utxo_id(id: &midnight_ledger_unsafe_helpers::UtxoId) -> UtxoId { UtxoId { intent_hash: IntentHash(HashOutput(id.intent_hash.0.0)), output_number: id.output_number, diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/batch_single_tx.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/batch_single_tx.rs index f5ef5180b..eea67b364 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/batch_single_tx.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/batch_single_tx.rs @@ -23,7 +23,7 @@ use ledger_helpers_local::{ TransactionWithContext, UnshieldedTokenType, UnshieldedWallet, UtxoSelectionError, WalletAddress, }; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use tracing::Instrument as _; use crate::{Progress, serde_def::SourceTransactions, tx_generator::builder::BatchSingleTxArgs}; @@ -103,7 +103,7 @@ impl> BatchSingleTxBuilder { if let Some(amount) = spec.unshielded_amount { let hash = parse_hash_output(spec.unshielded_token_type.as_deref()); let token_type: UnshieldedTokenType = convert_unshielded_token_type( - midnight_node_ledger_helpers::UnshieldedTokenType(hash), + midnight_ledger_unsafe_helpers::UnshieldedTokenType(hash), ); let dest_wallet: UnshieldedWallet = (&dest_address) @@ -123,8 +123,9 @@ impl> BatchSingleTxBuilder { if let Some(amount) = spec.shielded_amount { let hash = parse_hash_output(spec.shielded_token_type.as_deref()); - let token_type: ShieldedTokenType = - convert_shielded_token_type(midnight_node_ledger_helpers::ShieldedTokenType(hash)); + let token_type: ShieldedTokenType = convert_shielded_token_type( + midnight_ledger_unsafe_helpers::ShieldedTokenType(hash), + ); let dest_wallet: ShieldedWallet = (&dest_address).try_into().expect("destination is not a valid shielded address"); @@ -164,10 +165,10 @@ impl> BatchSingleTxBuilder { } } -fn parse_hash_output(hex_str: Option<&str>) -> midnight_node_ledger_helpers::HashOutput { +fn parse_hash_output(hex_str: Option<&str>) -> midnight_ledger_unsafe_helpers::HashOutput { let hex_str = hex_str.unwrap_or("0000000000000000000000000000000000000000000000000000000000000000"); - midnight_node_ledger_helpers::HashOutput( + midnight_ledger_unsafe_helpers::HashOutput( hex::decode(hex_str) .expect("invalid token_type hex") .try_into() diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/batches.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/batches.rs index 4947f30d5..aea6479a3 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/batches.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/batches.rs @@ -19,7 +19,7 @@ use ledger_helpers_local::{ StandardTransactionInfo, TransactionWithContext, UnshieldedOfferInfo, UnshieldedTokenType, UtxoOutputInfo, UtxoSpendInfo, Wallet, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use std::{collections::HashMap, sync::Arc}; use tokio::{sync::Semaphore, task::JoinError}; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/build_txs_ext.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/build_txs_ext.rs index 30a42f32b..027a90e63 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/build_txs_ext.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/build_txs_ext.rs @@ -19,7 +19,7 @@ use ledger_helpers_local::{ BuildIntent, BuilderContext, DefaultDB, FromContext, ProofProvider, StandardTransactionInfo, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; /// An extension to help build transactions. pub trait BuildTxsExt> { diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/claim_rewards.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/claim_rewards.rs index 699061f61..bd0135d90 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/claim_rewards.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/claim_rewards.rs @@ -18,7 +18,7 @@ use ledger_helpers_local::{ BuilderContext, ClaimKind, ClaimMintInfo, DefaultDB, FromContext, ProofProvider, RewardsInfo, TransactionWithContext, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use crate::{ serde_def::SourceTransactions, diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_call.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_call.rs index af20ac747..1ce0a7b08 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_call.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_call.rs @@ -22,8 +22,8 @@ use ledger_helpers_local::{ ContractAddress, DefaultDB, IntentInfo, MerkleTreeContract, OfferInfo, ProofProvider, TransactionWithContext, Wallet, WalletSeed, }; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTxBatches; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; use std::{convert::Infallible, marker::PhantomData, sync::Arc}; const CONTRACT_INPUT: u32 = 12; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_custom.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_custom.rs index e217ebf7b..a2af185ab 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_custom.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_custom.rs @@ -17,8 +17,8 @@ use ledger_helpers_local::{ TransactionWithContext, Transient, UnshieldedOfferInfo, UnshieldedWallet, UtxoId, UtxoOutputInfo, UtxoSpendInfo, Wallet, WalletAddress, WalletSeed, zswap, }; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTxBatches; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; use rand::SeedableRng; use std::{collections::HashMap, sync::Arc}; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_deploy.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_deploy.rs index 2512fdd1c..fd7fa8899 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_deploy.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_deploy.rs @@ -22,8 +22,8 @@ use ledger_helpers_local::{ DefaultDB, IntentInfo, MerkleTreeContract, OfferInfo, ProofProvider, TransactionWithContext, UnshieldedWallet, Wallet, WalletSeed, }; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTxBatches; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; use std::{convert::Infallible, marker::PhantomData, sync::Arc}; pub struct ContractDeployBuilder> { diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_maintenance.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_maintenance.rs index d66e78273..276ee5244 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_maintenance.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/contract_maintenance.rs @@ -20,7 +20,7 @@ use ledger_helpers_local::{ TransactionWithContext, UnshieldedWallet, UpdateInfo, Wallet, WalletSeed, contract_operation_version_of, contract_operation_versioned_verifier_key, serialize_untagged, }; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use std::{path::PathBuf, sync::Arc}; use super::build_txs_ext::BuildTxsExt; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/deregister_dust_address.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/deregister_dust_address.rs index a641f42d7..7c325e577 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/deregister_dust_address.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/deregister_dust_address.rs @@ -20,7 +20,7 @@ use ledger_helpers_local::{ StandardTransactionInfo, TransactionWithContext, UnshieldedOfferInfo, UtxoOutputInfo, UtxoSpendInfo, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use crate::{ progress::Spin, diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/do_nothing.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/do_nothing.rs index 815c1ba12..42965806b 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/do_nothing.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/do_nothing.rs @@ -16,8 +16,8 @@ use ledger_helpers_local::{ DefaultDB, HashOutput, ProofMarker, SerdeTransaction, Signature, Timestamp, TransactionWithContext, make_block_context, mn_ledger_serialize::tagged_deserialize, }; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use midnight_node_ledger_helpers::fork::raw_block_data::RawTransaction; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; use std::convert::Infallible; use crate::{serde_def::SourceTransactions, tx_generator::builder::BuildTxs}; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/mod.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/mod.rs index cb6972e70..00ab0b874 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/mod.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/mod.rs @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -pub use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +pub use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; pub mod batch_single_tx; mod batches; @@ -44,10 +44,10 @@ pub use deregister_dust_address::*; pub use do_nothing::*; pub use register_dust_address::*; -use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTx; -use midnight_node_ledger_helpers::ledger_9::{ +use midnight_ledger_unsafe_helpers::ledger_9::{ DefaultDB, ProofMarker, Signature, TransactionWithContext, }; +use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTx; pub fn serialize_tx( tx: &TransactionWithContext, diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/output_spec.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/output_spec.rs index a5e8d732e..e20174664 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/output_spec.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/output_spec.rs @@ -30,7 +30,7 @@ use ledger_helpers_local::{ DefaultDB, ShieldedTokenType, ShieldedWallet, UnshieldedTokenType, UnshieldedWallet, }; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use crate::{cli_parsers::OutputArg, tx_generator::builder::SingleTxArgs}; @@ -216,8 +216,8 @@ pub(crate) fn resolve_outputs_from_triples( if let Ok(sw) = >::try_from(&local_addr) { let token_type = match triple.token_type { Some(bytes) => { - convert_shielded_token_type(midnight_node_ledger_helpers::ShieldedTokenType( - midnight_node_ledger_helpers::HashOutput(bytes), + convert_shielded_token_type(midnight_ledger_unsafe_helpers::ShieldedTokenType( + midnight_ledger_unsafe_helpers::HashOutput(bytes), )) }, None => ShieldedTokenType::default(), @@ -230,8 +230,8 @@ pub(crate) fn resolve_outputs_from_triples( } else if let Ok(uw) = UnshieldedWallet::try_from(&local_addr) { let token_type = match triple.token_type { Some(bytes) => convert_unshielded_token_type( - midnight_node_ledger_helpers::UnshieldedTokenType( - midnight_node_ledger_helpers::HashOutput(bytes), + midnight_ledger_unsafe_helpers::UnshieldedTokenType( + midnight_ledger_unsafe_helpers::HashOutput(bytes), ), ), None => UnshieldedTokenType::default(), diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/register_dust_address.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/register_dust_address.rs index 63a3d15d7..6c7f6a889 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/register_dust_address.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/register_dust_address.rs @@ -7,7 +7,7 @@ use ledger_helpers_local::{ ProofProvider, Segment, StandardTransactionInfo, Timestamp, TransactionWithContext, UnshieldedOfferInfo, Utxo, UtxoOutputInfo, UtxoSpendInfo, WalletAddress, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use crate::{ progress::Spin, diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/single_tx.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/single_tx.rs index 18f147ac1..2de661913 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/single_tx.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/single_tx.rs @@ -28,7 +28,7 @@ use ledger_helpers_local::{ StandardTransactionInfo, TransactionWithContext, UnshieldedOfferInfo, UnshieldedTokenType, UtxoId, UtxoOutputInfo, UtxoSelectionError, UtxoSpendInfo, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use crate::{ progress::Spin, diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/transactions.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/transactions.rs index 0ef1e86f5..c82bde9a7 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/transactions.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/transactions.rs @@ -1,7 +1,7 @@ use midnight_node_ledger_helpers::fork::raw_block_data::RawTransaction; use ledger_helpers_local::*; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; pub fn from_serde_tx(tx: &SerdeTransaction) -> RawTransaction where diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/tx_serialization.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/tx_serialization.rs index 2b7fa9b7d..1d91cf74a 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/tx_serialization.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/tx_serialization.rs @@ -18,8 +18,8 @@ use super::serialize_tx; use ledger_helpers_local::{DefaultDB, ProofMarker, Signature}; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTxBatches; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; use ledger_helpers_local::TransactionWithContext; diff --git a/util/toolkit/src/tx_generator/builder/builders/ledger_9/type_convert.rs b/util/toolkit/src/tx_generator/builder/builders/ledger_9/type_convert.rs index 57c444eac..80ada0931 100644 --- a/util/toolkit/src/tx_generator/builder/builders/ledger_9/type_convert.rs +++ b/util/toolkit/src/tx_generator/builder/builders/ledger_9/type_convert.rs @@ -20,56 +20,58 @@ use ledger_helpers_local::{ CoinPublicKey, ContractAddress, HashOutput, IntentHash, ShieldedTokenType, UnshieldedSignatureScheme, UnshieldedTokenType, UtxoId, WalletSeed, }; -use midnight_node_ledger_helpers::ledger_9 as ledger_helpers_local; +use midnight_ledger_unsafe_helpers::ledger_9 as ledger_helpers_local; use std::str::FromStr; pub fn convert_scheme( - s: midnight_node_ledger_helpers::UnshieldedSignatureScheme, + s: midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme, ) -> UnshieldedSignatureScheme { match s { - midnight_node_ledger_helpers::UnshieldedSignatureScheme::Schnorr => { + midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Schnorr => { UnshieldedSignatureScheme::Schnorr }, - midnight_node_ledger_helpers::UnshieldedSignatureScheme::Ecdsa => { + midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Ecdsa => { UnshieldedSignatureScheme::Ecdsa }, } } pub fn convert_shielded_token_type( - stt: midnight_node_ledger_helpers::ShieldedTokenType, + stt: midnight_ledger_unsafe_helpers::ShieldedTokenType, ) -> ShieldedTokenType { ShieldedTokenType(HashOutput(stt.0.0)) } pub fn convert_unshielded_token_type( - utt: midnight_node_ledger_helpers::UnshieldedTokenType, + utt: midnight_ledger_unsafe_helpers::UnshieldedTokenType, ) -> UnshieldedTokenType { UnshieldedTokenType(HashOutput(utt.0.0)) } pub fn convert_contract_address( - ca: midnight_node_ledger_helpers::ContractAddress, + ca: midnight_ledger_unsafe_helpers::ContractAddress, ) -> ContractAddress { ContractAddress(HashOutput(ca.0.0)) } -pub fn convert_wallet_seed(ws: midnight_node_ledger_helpers::WalletSeed) -> WalletSeed { +pub fn convert_wallet_seed(ws: midnight_ledger_unsafe_helpers::WalletSeed) -> WalletSeed { WalletSeed::try_from(ws.as_bytes()).expect("wallet seed conversion between versions") } -pub fn convert_coin_public_key(cpk: midnight_node_ledger_helpers::CoinPublicKey) -> CoinPublicKey { +pub fn convert_coin_public_key( + cpk: midnight_ledger_unsafe_helpers::CoinPublicKey, +) -> CoinPublicKey { CoinPublicKey(HashOutput(cpk.0.0)) } pub fn convert_wallet_address( - wa: &midnight_node_ledger_helpers::WalletAddress, + wa: &midnight_ledger_unsafe_helpers::WalletAddress, ) -> ledger_helpers_local::WalletAddress { ledger_helpers_local::WalletAddress::from_str(&wa.to_bech32()) .expect("wallet address conversion between versions") } -pub fn convert_utxo_id(id: &midnight_node_ledger_helpers::UtxoId) -> UtxoId { +pub fn convert_utxo_id(id: &midnight_ledger_unsafe_helpers::UtxoId) -> UtxoId { UtxoId { intent_hash: IntentHash(HashOutput(id.intent_hash.0.0)), output_number: id.output_number, diff --git a/util/toolkit/src/tx_generator/builder/builders/mod.rs b/util/toolkit/src/tx_generator/builder/builders/mod.rs index f2c861abf..ffe73de1a 100644 --- a/util/toolkit/src/tx_generator/builder/builders/mod.rs +++ b/util/toolkit/src/tx_generator/builder/builders/mod.rs @@ -24,12 +24,12 @@ pub mod ledger_8; use crate::toolkit_js::encoded_zswap_local_state::{ EncodedOutput, EncodedQualifiedShieldedCoinInfo, EncodedRecipient, }; -use midnight_node_ledger_helpers::ledger_8::{ +use midnight_ledger_unsafe_helpers::ledger_8::{ CoinInfo as CoinInfoV2, CoinPublicKey as CoinPublicKeyV2, ContractAddress as ContractAddressV2, Nonce as NonceV2, QualifiedInfo as QualifiedInfoV2, Recipient as RecipientV2, ShieldedTokenType as ShieldedTokenTypeV2, }; -use midnight_node_ledger_helpers::ledger_9::{ +use midnight_ledger_unsafe_helpers::ledger_9::{ CoinInfo, CoinPublicKey, ContractAddress, HashOutput, Nonce, QualifiedInfo, Recipient, ShieldedTokenType, }; diff --git a/util/toolkit/src/tx_generator/builder/mod.rs b/util/toolkit/src/tx_generator/builder/mod.rs index 2ba52b5ad..48f32bff7 100644 --- a/util/toolkit/src/tx_generator/builder/mod.rs +++ b/util/toolkit/src/tx_generator/builder/mod.rs @@ -14,15 +14,13 @@ use async_trait::async_trait; use builders::{DoNothingBuilder, compute_batches_seeds}; use clap::{Args, Subcommand, ValueEnum}; -pub use midnight_node_ledger_helpers::CoinSelectionStrategy; -use midnight_node_ledger_helpers::fork::{ - fork_aware_context::{ - ForkAwareLedgerContext, apply_block_8, apply_block_9, block_context_from_raw_8, - block_context_from_raw_9, fork_context_8_to_9, - }, - raw_block_data::{LedgerVersion, RawBlockData}, +pub use midnight_ledger_unsafe_helpers::CoinSelectionStrategy; +use midnight_ledger_unsafe_helpers::fork::fork_aware_context::{ + ForkAwareLedgerContext, apply_block_8, apply_block_9, block_context_from_raw_8, + block_context_from_raw_9, fork_context_8_to_9, }; -use midnight_node_ledger_helpers::*; +use midnight_ledger_unsafe_helpers::*; +use midnight_node_ledger_helpers::fork::raw_block_data::{LedgerVersion, RawBlockData}; use serde::Deserialize; use std::{ collections::{HashMap, HashSet}, @@ -789,13 +787,13 @@ impl Builder { fn make_prover_v8( config: &ProverConfig, ) -> Arc< - dyn midnight_node_ledger_helpers::ledger_8::ProofProvider< - midnight_node_ledger_helpers::ledger_8::DefaultDB, + dyn midnight_ledger_unsafe_helpers::ledger_8::ProofProvider< + midnight_ledger_unsafe_helpers::ledger_8::DefaultDB, >, > { match config { ProverConfig::Local => { - Arc::new(midnight_node_ledger_helpers::ledger_8::LocalProofServer::new()) + Arc::new(midnight_ledger_unsafe_helpers::ledger_8::LocalProofServer::new()) }, ProverConfig::Remote(url) => { Arc::new(crate::remote_prover::RemoteProofServer::new(url.clone())) @@ -863,13 +861,13 @@ impl Builder { fn to_builder_v8( self, context: Arc< - midnight_node_ledger_helpers::ledger_8::context::LedgerContext< - midnight_node_ledger_helpers::ledger_8::DefaultDB, + midnight_ledger_unsafe_helpers::ledger_8::context::LedgerContext< + midnight_ledger_unsafe_helpers::ledger_8::DefaultDB, >, >, prover: Arc< - dyn midnight_node_ledger_helpers::ledger_8::ProofProvider< - midnight_node_ledger_helpers::ledger_8::DefaultDB, + dyn midnight_ledger_unsafe_helpers::ledger_8::ProofProvider< + midnight_ledger_unsafe_helpers::ledger_8::DefaultDB, >, >, ) -> Box> { @@ -1209,8 +1207,8 @@ fn discard_unusable_cache( uncached_seeds.extend(dropped.into_iter().map(|(seed, _)| seed)); } -type Db8 = midnight_node_ledger_helpers::ledger_8::DefaultDB; -type Db9 = midnight_node_ledger_helpers::ledger_9::DefaultDB; +type Db8 = midnight_ledger_unsafe_helpers::ledger_8::DefaultDB; +type Db9 = midnight_ledger_unsafe_helpers::ledger_9::DefaultDB; const DUST_BATCH_SIZE: usize = 1000; @@ -1223,8 +1221,8 @@ const REPLAY_INFO_HEARTBEAT: std::time::Duration = std::time::Duration::from_sec fn replay_tx_failures() -> (u64, u64) { use std::sync::atomic::Ordering::Relaxed; ( - midnight_node_ledger_helpers::replay_stats::PARTIALLY_FAILED_TXS.load(Relaxed), - midnight_node_ledger_helpers::replay_stats::FAILED_TXS.load(Relaxed), + midnight_ledger_unsafe_helpers::replay_stats::PARTIALLY_FAILED_TXS.load(Relaxed), + midnight_ledger_unsafe_helpers::replay_stats::FAILED_TXS.load(Relaxed), ) } @@ -1237,10 +1235,10 @@ fn log_replay_progress(done: usize, total: usize) { } fn replay_blocks_8( - ctx: &midnight_node_ledger_helpers::ledger_8::context::LedgerContext, + ctx: &midnight_ledger_unsafe_helpers::ledger_8::context::LedgerContext, blocks_sorted_by_height: &[RawBlockData], ) { - let mut events: Vec> = Vec::new(); + let mut events: Vec> = Vec::new(); let total = blocks_sorted_by_height.len(); let mut last_info_at = std::time::Instant::now(); @@ -1269,12 +1267,12 @@ fn replay_blocks_8( } fn replay_blocks_9( - ctx: &midnight_node_ledger_helpers::ledger_9::context::LedgerContext, + ctx: &midnight_ledger_unsafe_helpers::ledger_9::context::LedgerContext, blocks_sorted_by_height: &[RawBlockData], wallets_sorted_by_height: &[(WalletSeed, CachedWalletState)], schemes: &WalletSchemes, ) { - let mut events: Vec> = Vec::new(); + let mut events: Vec> = Vec::new(); let mut remaining = wallets_sorted_by_height; let total = blocks_sorted_by_height.len(); let mut last_info_at = std::time::Instant::now(); @@ -1327,7 +1325,7 @@ fn replay_blocks_9( /// ledger-9 blocks, if any. Returns the ledger-8 context unchanged when there are /// no ledger-9 blocks. fn fork_8_to_9_if_needed( - ctx8: midnight_node_ledger_helpers::ledger_8::context::LedgerContext, + ctx8: midnight_ledger_unsafe_helpers::ledger_8::context::LedgerContext, l9_blocks: &[RawBlockData], cached: &[(WalletSeed, CachedWalletState)], schemes: &WalletSchemes, @@ -1619,7 +1617,7 @@ async fn try_save_cache_v2( /// Ledger-8 twin of [`save_cache_ledger9`]. async fn save_cache_ledger8( - ctx: &midnight_node_ledger_helpers::ledger_8::context::LedgerContext, + ctx: &midnight_ledger_unsafe_helpers::ledger_8::context::LedgerContext, wallet_seeds: &[WalletSeed], chain_id: H256, block_height: u64, diff --git a/util/toolkit/tests/cached_context.rs b/util/toolkit/tests/cached_context.rs index f7f9ecd50..7f652e1d6 100644 --- a/util/toolkit/tests/cached_context.rs +++ b/util/toolkit/tests/cached_context.rs @@ -14,11 +14,10 @@ //! Integration tests verifying `build_fork_aware_context_cached` produces the //! same result as `build_fork_aware_context_raw` across all cache scenarios. -use midnight_node_ledger_helpers::{ - DefaultDB, LedgerContext, UnshieldedSignatureScheme, WalletSeed, - fork::raw_block_data::{LedgerVersion, RawBlockData}, - ledger_8, serialize_untagged, +use midnight_ledger_unsafe_helpers::{ + DefaultDB, LedgerContext, UnshieldedSignatureScheme, WalletSeed, ledger_8, serialize_untagged, }; +use midnight_node_ledger_helpers::fork::raw_block_data::{LedgerVersion, RawBlockData}; use midnight_node_toolkit::fetcher::wallet_state_cache::{ serialize_ledger_state_fast, serialize_ledger_state_fast_8, wallet_cache_key, }; diff --git a/util/toolkit/tests/common/toolkit_helper.rs b/util/toolkit/tests/common/toolkit_helper.rs index c2a02a312..d4223d09a 100644 --- a/util/toolkit/tests/common/toolkit_helper.rs +++ b/util/toolkit/tests/common/toolkit_helper.rs @@ -316,7 +316,7 @@ impl ToolkitTestHelper { network: self.network.clone(), seed: cli_parsers::SchemeSeed { seed: cli_parsers::wallet_seed_decode(seed).expect("invalid wallet seed"), - scheme: midnight_node_ledger_helpers::UnshieldedSignatureScheme::Schnorr, + scheme: midnight_ledger_unsafe_helpers::UnshieldedSignatureScheme::Schnorr, }, specific_address: SpecificAddressTypeArgs { coin_public: true, ..Default::default() }, }; diff --git a/util/toolkit/tests/ecdsa_signature.rs b/util/toolkit/tests/ecdsa_signature.rs index 097802e49..8ee04ffc9 100644 --- a/util/toolkit/tests/ecdsa_signature.rs +++ b/util/toolkit/tests/ecdsa_signature.rs @@ -21,7 +21,7 @@ //! so these use the crate-level (ledger-9) types. The rest of `well_formed` (balancing, proofs) is //! scheme-independent and covered elsewhere; a full build+submit lives in the devnet-backed suite. -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::{ DefaultDB, Signature, SignatureKind, SignatureVerifyingKey, UnshieldedSignatureScheme, UnshieldedWallet, WalletSeed, }; diff --git a/util/toolkit/tests/register_dust_address.rs b/util/toolkit/tests/register_dust_address.rs index f5fdaec2f..44efe1b88 100644 --- a/util/toolkit/tests/register_dust_address.rs +++ b/util/toolkit/tests/register_dust_address.rs @@ -20,8 +20,7 @@ //! transactions carry no ZK proofs. use async_trait::async_trait; -use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTxBatches; -use midnight_node_ledger_helpers::{ +use midnight_ledger_unsafe_helpers::{ CostModel, DefaultDB, HashOutput, IntentHash, KeyLocation, LedgerContext, NIGHT, PedersenRandomness, ProofMarker, ProofPreimage, ProofPreimageMarker, ProvingKeyMaterial, Resolver, ResolverTrait, Signature, Sp, StdRng, Timestamp, Transaction, TransactionResult, @@ -31,6 +30,7 @@ use midnight_node_ledger_helpers::{ transient_crypto::commitment::PureGeneratorPedersen, transient_crypto::proofs::{Proof, ProvingProvider}, }; +use midnight_node_ledger_helpers::fork::raw_block_data::SerializedTxBatches; use midnight_node_toolkit::{ serde_def::SourceTransactions, tx_generator::builder::{ @@ -56,7 +56,7 @@ impl ProvingProvider for NoProofs { async fn prove( self, _preimage: &ProofPreimage, - _overwrite_binding_input: Option, + _overwrite_binding_input: Option, ) -> Result { anyhow::bail!("register-dust-address transactions must not contain proofs") } @@ -77,7 +77,7 @@ impl ResolverTrait for NoProofs { struct NoProofsProvider; #[async_trait] -impl midnight_node_ledger_helpers::ProofProvider for NoProofsProvider { +impl midnight_ledger_unsafe_helpers::ProofProvider for NoProofsProvider { async fn prove( &self, tx: Transaction,