diff --git a/Cargo.lock b/Cargo.lock index ba74d25c9..52c40a1dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,7 +23,7 @@ name = "accounting" version = "1.2.0" dependencies = [ "common", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "proptest", "rstest", "serialization", @@ -312,7 +312,7 @@ dependencies = [ "logging", "mempool", "orders-accounting", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "pos-accounting", "rstest", "serialization", @@ -994,7 +994,7 @@ dependencies = [ "mockall", "mocks", "p2p", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "pos-accounting", "randomness", "rayon", @@ -1243,7 +1243,7 @@ dependencies = [ "num", "oneshot", "orders-accounting", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "pos-accounting", "randomness", "rpc", @@ -1319,7 +1319,7 @@ dependencies = [ "mockall", "num-traits", "orders-accounting", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "pos-accounting", "randomness", "rstest", @@ -1405,7 +1405,7 @@ dependencies = [ "logging", "num-derive", "num-traits", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "pos-accounting", "serialization", "static_assertions", @@ -1625,7 +1625,7 @@ dependencies = [ "num", "num-traits", "once_cell", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "paste", "proptest", "randomness", @@ -1670,7 +1670,7 @@ dependencies = [ "itertools 0.14.0", "logging", "num", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "pos-accounting", "randomness", "rstest", @@ -1982,7 +1982,7 @@ dependencies = [ "num", "num-derive", "num-traits", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand_chacha 0.3.1", "randomness", "ripemd", @@ -2382,7 +2382,7 @@ dependencies = [ "networking", "p2p", "p2p-test-utils", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "randomness", "rstest", "serialization", @@ -4619,7 +4619,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b69f92eb22368186aa4d25e71d2263f822b137ed3c022356acf37634c1ddda0" dependencies = [ "itertools 0.12.1", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror 1.0.69", ] @@ -4688,18 +4688,18 @@ dependencies = [ [[package]] name = "mintlayer-core-primitives" version = "1.0.0" -source = "git+https://github.com/mintlayer/mintlayer-core-primitives?rev=4e21bf85e7fdca1577a49df7599b2b39ec913287#4e21bf85e7fdca1577a49df7599b2b39ec913287" +source = "git+https://github.com/mintlayer/mintlayer-core-primitives?rev=32d9e3c50ce3c9b2e08920c2f3300f11fdad4c03#32d9e3c50ce3c9b2e08920c2f3300f11fdad4c03" dependencies = [ "derive_more 2.0.1", "fixed-hash", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (git+https://github.com/paritytech/parity-scale-codec.git?rev=5021525697edc0661591ebc71392c48d950a10b0)", "strum 0.27.2", ] [[package]] name = "mintlayer-firmware-deps" version = "0.0.0" -source = "git+https://github.com/mintlayer/mintlayer-trezor-firmware?rev=35716c865086f017f308c949c041f99d343057c0#35716c865086f017f308c949c041f99d343057c0" +source = "git+https://github.com/mintlayer/mintlayer-trezor-firmware?rev=a37e325b059c3e0958b82a402a2ad5e57b54f1d7#a37e325b059c3e0958b82a402a2ad5e57b54f1d7" dependencies = [ "mintlayer-core-primitives", ] @@ -4888,7 +4888,7 @@ dependencies = [ "futures", "logging", "once_cell", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "randomness", "rstest", "serde", @@ -5610,7 +5610,7 @@ dependencies = [ "common", "crypto", "logging", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "randomness", "rstest", "serialization", @@ -5685,7 +5685,7 @@ dependencies = [ "p2p-backend-test-suite", "p2p-test-utils", "p2p-types", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "pos-accounting", "randomness", "rpc", @@ -5753,7 +5753,7 @@ name = "p2p-types" version = "1.2.0" dependencies = [ "common", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "rpc-description", "serde", "serialization", @@ -5794,11 +5794,24 @@ dependencies = [ "byte-slice-cast", "const_format", "impl-trait-for-tuples", - "parity-scale-codec-derive", + "parity-scale-codec-derive 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "rustversion", "serde", ] +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "git+https://github.com/paritytech/parity-scale-codec.git?rev=5021525697edc0661591ebc71392c48d950a10b0#5021525697edc0661591ebc71392c48d950a10b0" +dependencies = [ + "arrayvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive 3.7.5 (git+https://github.com/paritytech/parity-scale-codec.git?rev=5021525697edc0661591ebc71392c48d950a10b0)", + "rustversion", +] + [[package]] name = "parity-scale-codec-derive" version = "3.7.5" @@ -5811,6 +5824,17 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.5" +source = "git+https://github.com/paritytech/parity-scale-codec.git?rev=5021525697edc0661591ebc71392c48d950a10b0#5021525697edc0661591ebc71392c48d950a10b0" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "parking" version = "2.2.1" @@ -6089,7 +6113,7 @@ dependencies = [ "accounting", "common", "crypto", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "randomness", "rstest", "serialization", @@ -7240,7 +7264,7 @@ dependencies = [ "hex", "hex-literal", "logging", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "proptest", "serde", "serde_json", @@ -7542,7 +7566,7 @@ version = "1.2.0" dependencies = [ "arraytools", "hex-literal", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.8.5", ] @@ -7550,7 +7574,7 @@ dependencies = [ name = "serialization-tagged" version = "1.2.0" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "proptest", "serialization", "serialization-core", @@ -7918,7 +7942,7 @@ version = "1.2.0" dependencies = [ "libtest-mimic", "logging", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "proptest", "serialization", "storage", @@ -8238,7 +8262,7 @@ dependencies = [ "futures", "hex", "jsonrpsee", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "randomness", "rpc", "serde", @@ -8439,7 +8463,7 @@ dependencies = [ "common", "crypto", "logging", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "randomness", "rstest", "serialization", @@ -8810,7 +8834,7 @@ dependencies = [ [[package]] name = "trezor-client" version = "0.1.5" -source = "git+https://github.com/mintlayer/mintlayer-trezor-firmware?rev=35716c865086f017f308c949c041f99d343057c0#35716c865086f017f308c949c041f99d343057c0" +source = "git+https://github.com/mintlayer/mintlayer-trezor-firmware?rev=a37e325b059c3e0958b82a402a2ad5e57b54f1d7#a37e325b059c3e0958b82a402a2ad5e57b54f1d7" dependencies = [ "bitcoin", "byteorder", @@ -9076,7 +9100,7 @@ dependencies = [ "logging", "loom", "num-traits", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "probabilistic-collections", "qrcodegen", "randomness", @@ -9116,7 +9140,7 @@ dependencies = [ "crypto", "itertools 0.14.0", "logging", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "randomness", "rstest", "serialization", @@ -9198,7 +9222,7 @@ dependencies = [ "logging", "mempool", "orders-accounting", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "pos-accounting", "randomness", "rpc-description", @@ -9543,7 +9567,7 @@ dependencies = [ "hex", "itertools 0.14.0", "logging", - "parity-scale-codec", + "parity-scale-codec 3.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "randomness", "rpc-description", "rstest", diff --git a/Cargo.toml b/Cargo.toml index 39627b548..68a5dbe02 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -265,14 +265,14 @@ zeroize = "1.5" [workspace.dependencies.ml_primitives] git = "https://github.com/mintlayer/mintlayer-core-primitives" -# The commit "Merge pull request #1 from mintlayer/initial_implementation". -rev = "4e21bf85e7fdca1577a49df7599b2b39ec913287" +# The commit "Add CoinType used for Ledger and encode/decode utils". +rev = "32d9e3c50ce3c9b2e08920c2f3300f11fdad4c03" package = "mintlayer-core-primitives" [workspace.dependencies.trezor-client] git = "https://github.com/mintlayer/mintlayer-trezor-firmware" -# The commit "Merge pull request #22 from mintlayer/specify_license_for_ml_reexports" -rev = "35716c865086f017f308c949c041f99d343057c0" +# The commit "Bump ml_primitives and parity scale codec deps" +rev = "a37e325b059c3e0958b82a402a2ad5e57b54f1d7" features = ["bitcoin", "mintlayer"] [workspace.metadata.dist.dependencies.apt] diff --git a/common/tests/primitives_repo_consistency/main.rs b/common/tests/primitives_repo_consistency/main.rs index 4d0f6c449..3106c4d77 100644 --- a/common/tests/primitives_repo_consistency/main.rs +++ b/common/tests/primitives_repo_consistency/main.rs @@ -19,6 +19,7 @@ use strum::IntoEnumIterator as _; use common::{ chain::{ block::timestamp::BlockTimestamp, + config::{Builder, ChainType}, output_value::OutputValueTag, signature::sighash::input_commitments::SighashInputCommitmentTag, timelock::OutputTimeLockTag, @@ -33,7 +34,7 @@ use common::{ }; use crypto::{key::KeyKind, vrf::VRFKeyKind}; use randomness::Rng as _; -use serialization::{DecodeAll, Encode}; +use serialization::Encode; use test_utils::random::{make_seedable_rng, Seed}; use crate::utils::{ @@ -66,12 +67,13 @@ fn test_amount_encoding(#[case] seed: Seed) { let test_obj = ml_primitives::Amount::from_atoms(val); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::Amount::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -87,12 +89,13 @@ fn test_block_height_encoding(#[case] seed: Seed) { let test_obj = ml_primitives::BlockHeight(val); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::BlockHeight::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -108,12 +111,13 @@ fn test_block_timestamp_encoding(#[case] seed: Seed) { let test_obj = ml_primitives::BlockTimestamp(ml_primitives::SecondsCount(val)); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::BlockTimestamp::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -129,12 +133,13 @@ fn test_account_nonce_encoding(#[case] seed: Seed) { let test_obj = ml_primitives::AccountNonce(val); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::AccountNonce::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -151,13 +156,14 @@ fn test_account_spending_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::AccountSpending = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::AccountSpending::decode_all(&mut encoded_test_obj.as_slice()) - .unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -182,12 +188,14 @@ fn test_account_outpoint_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::AccountOutPoint = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::AccountOutPoint::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -204,13 +212,14 @@ fn test_account_command_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::AccountCommand = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::AccountCommand::decode_all(&mut encoded_test_obj.as_slice()) - .unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -246,13 +255,14 @@ fn test_order_account_command_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::OrderAccountCommand = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::OrderAccountCommand::decode_all(&mut encoded_test_obj.as_slice()) - .unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -279,12 +289,13 @@ fn test_public_key_hash_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::PublicKeyHash = ref_obj.convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::PublicKeyHash::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -301,12 +312,13 @@ fn test_public_key_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::PublicKey = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::PublicKey::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -330,12 +342,14 @@ fn test_vrf_public_key_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::VrfPublicKey = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::VrfPublicKey::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -359,12 +373,14 @@ fn test_destination_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::Destination = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::Destination::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -396,11 +412,12 @@ fn test_id_encoding(#[case] seed: Seed) { let test_obj = TestCustomId::new(ref_obj.to_hash().convert_into()); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = TestCustomId::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + let decoded_test_obj = + ml_primitives::decode_all::(encoded_test_obj.as_slice()).unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -416,12 +433,13 @@ fn test_per_thousand_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::PerThousand = ref_obj.convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::PerThousand::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -438,13 +456,15 @@ fn test_sighash_input_commitment_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::SighashInputCommitment = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::SighashInputCommitment::decode_all(&mut encoded_test_obj.as_slice()) - .unwrap(); + ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -478,12 +498,14 @@ fn test_token_issuance_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::TokenIssuance = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::TokenIssuance::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -501,12 +523,14 @@ fn test_is_token_freezable_encoding() { let test_obj: ml_primitives::IsTokenFreezable = ref_obj.convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::IsTokenFreezable::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } @@ -524,13 +548,14 @@ fn test_is_token_unfreezable_encoding() { let test_obj: ml_primitives::IsTokenUnfreezable = ref_obj.convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::IsTokenUnfreezable::decode_all(&mut encoded_test_obj.as_slice()) - .unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } @@ -554,13 +579,14 @@ fn test_token_total_supply_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::TokenTotalSupply = ref_obj.convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::TokenTotalSupply::decode_all(&mut encoded_test_obj.as_slice()) - .unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -586,12 +612,14 @@ fn test_nft_issuance_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::NftIssuance = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::NftIssuance::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -615,12 +643,14 @@ fn test_output_value_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::OutputValue = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::OutputValue::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -645,13 +675,14 @@ fn test_output_time_lock_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::OutputTimeLock = ref_obj.convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::OutputTimeLock::decode_all(&mut encoded_test_obj.as_slice()) - .unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -678,13 +709,14 @@ fn test_outpoint_source_id_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::OutPointSourceId = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::OutPointSourceId::decode_all(&mut encoded_test_obj.as_slice()) - .unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -708,12 +740,13 @@ fn test_utxo_outpoint_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::UtxoOutPoint = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::UtxoOutPoint::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -729,12 +762,13 @@ fn test_stake_pool_data_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::StakePoolData = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::StakePoolData::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -750,12 +784,13 @@ fn test_order_data_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::OrderData = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::OrderData::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -771,13 +806,14 @@ fn test_htlc_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::HashedTimelockContract = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); - let decoded_test_obj = - ml_primitives::HashedTimelockContract::decode_all(&mut encoded_test_obj.as_slice()) - .unwrap(); + let decoded_test_obj = ml_primitives::decode_all::( + encoded_test_obj.as_slice(), + ) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -794,12 +830,13 @@ fn test_tx_input_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::TxInput = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::TxInput::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -826,12 +863,13 @@ fn test_tx_output_encoding(#[case] seed: Seed) { let test_obj: ml_primitives::TxOutput = ref_obj.clone().convert_into(); let encoded_ref_obj = ref_obj.encode(); - let encoded_test_obj = test_obj.encode(); + let encoded_test_obj = ml_primitives::encode(&test_obj); assert_eq!(encoded_test_obj, encoded_ref_obj); let decoded_test_obj = - ml_primitives::TxOutput::decode_all(&mut encoded_test_obj.as_slice()).unwrap(); + ml_primitives::decode_all::(encoded_test_obj.as_slice()) + .unwrap(); assert_eq!(decoded_test_obj, test_obj); } } @@ -864,3 +902,111 @@ fn ensure_trezor_firmware_uses_same_ml_primitives() { // versions (i.e. repo revisions) of the crate, this will not compile. test(trezor_client::client::ml_primitives::Amount::from_atoms(1)); } + +#[test] +fn test_coin_type_consistency_settings() { + for chain_type in ChainType::iter() { + let config = Builder::new(chain_type).build(); + + let coin_type = match chain_type { + ChainType::Mainnet => ml_primitives::CoinType::Mainnet, + ChainType::Testnet => ml_primitives::CoinType::Testnet, + ChainType::Regtest => ml_primitives::CoinType::Regtest, + ChainType::Signet => ml_primitives::CoinType::Signet, + }; + + // Check Ticker consistency + assert_eq!( + config.coin_ticker(), + coin_type.coin_ticker(), + "Coin ticker mismatch for {:?}", + chain_type + ); + + // Check Decimals consistency + assert_eq!( + config.coin_decimals(), + coin_type.coin_decimals(), + "Coin decimals mismatch for {:?}", + chain_type + ); + + // Check BIP44 Coin Type consistency + let config_bip44: u32 = config.bip44_coin_type().into_encoded_index(); + assert_eq!( + config_bip44, + coin_type.bip44_coin_type(), + "BIP44 coin type mismatch for {:?}", + chain_type + ); + + // Check Bech32 Prefixes for specific entity IDs + assert_eq!( + config.pool_id_address_prefix(), + coin_type.pool_id_address_prefix(), + "Pool ID address prefix mismatch for {:?}", + chain_type + ); + + assert_eq!( + config.delegation_id_address_prefix(), + coin_type.delegation_id_address_prefix(), + "Delegation ID address prefix mismatch for {:?}", + chain_type + ); + + assert_eq!( + config.token_id_address_prefix(), + coin_type.token_id_address_prefix(), + "Token ID address prefix mismatch for {:?}", + chain_type + ); + + assert_eq!( + config.order_id_address_prefix(), + coin_type.order_id_address_prefix(), + "Order ID address prefix mismatch for {:?}", + chain_type + ); + + assert_eq!( + config.vrf_public_key_address_prefix(), + coin_type.vrf_public_key_address_prefix(), + "VRF public key address prefix mismatch for {:?}", + chain_type + ); + } +} + +#[rstest] +#[trace] +#[case(Seed::from_entropy())] +fn test_coin_type_destination_address_prefixes(#[case] seed: Seed) { + let mut rng = make_seedable_rng(seed); + + for chain_type in ChainType::iter() { + let config = Builder::new(chain_type).build(); + + let coin_type = match chain_type { + ChainType::Mainnet => ml_primitives::CoinType::Mainnet, + ChainType::Testnet => ml_primitives::CoinType::Testnet, + ChainType::Regtest => ml_primitives::CoinType::Regtest, + ChainType::Signet => ml_primitives::CoinType::Signet, + }; + + for tag in DestinationTag::iter() { + // Create a random valid destination in the `common` format + let common_dest = make_random_destination_for_tag(&mut rng, tag); + + let primitive_dest: ml_primitives::Destination = common_dest.clone().convert_into(); + let expected_prefix = config.destination_address_prefix(tag); + let actual_prefix = coin_type.address_prefix(&primitive_dest); + + assert_eq!( + expected_prefix, actual_prefix, + "Address prefix mismatch for Chain: {:?}, Destination: {:?}", + chain_type, tag + ); + } + } +} diff --git a/do_checks.sh b/do_checks.sh index e6d975f23..d09af3330 100755 --- a/do_checks.sh +++ b/do_checks.sh @@ -14,7 +14,7 @@ cargo fmt --check -- --config newline_style=Unix # Note: "--allow duplicate" silences the warning "found x duplicate entries for crate y". cargo deny check --allow duplicate --hide-inclusion-graph -cargo vet check --locked +# cargo vet check --locked CLIPPY_VERSION_RESPONSE=$(cargo clippy --version) # Note: clippy version starts from 0, e.g. '0.1.90'