From 07ea3ac781e5bf63fe1ec96e4b46adeedfc91f97 Mon Sep 17 00:00:00 2001 From: step Date: Tue, 20 May 2025 18:50:49 +0200 Subject: [PATCH 01/22] add test cases for some validation errors --- Cargo.lock | 1 + Cargo.toml | 2 + tests/utils/mod.rs | 30 +- tests/validation.rs | 836 ++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 842 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4d9f893..66ada68 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1974,6 +1974,7 @@ dependencies = [ "bp-std", "bp-wallet", "chrono", + "commit_verify", "descriptors", "file-format", "once_cell", diff --git a/Cargo.toml b/Cargo.toml index 0841166..0631ab6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,6 +47,8 @@ bp-wallet = { path = "./bp-wallet", features = [ "esplora", "fs", ] } +## client_side_validation +commit_verify = { path = "./client_side_validation/commit_verify" } ## rgb rgb-runtime = { path = "./rgb", features = [ "electrum_blocking", diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs index ce9b987..e7a23ad 100644 --- a/tests/utils/mod.rs +++ b/tests/utils/mod.rs @@ -45,8 +45,13 @@ pub use std::{ pub use amplify::{ bmap, bset, - confinement::{Confined, U16}, - map, s, ByteArray, Bytes64, Wrapper, + confinement::{ + Confined, LargeOrdSet, NonEmptyOrdMap, NonEmptyOrdSet, NonEmptyVec, SmallOrdMap, + TinyOrdMap, TinyOrdSet, U16, + }, + map, + num::u24, + s, ByteArray, Bytes64, Wrapper, }; use bitcoin_hashes::{sha256, Hash}; pub use bp::{ @@ -64,6 +69,7 @@ pub use bpwallet::{ Wallet, WalletUtxo, }; pub use chrono::Utc; +pub use commit_verify::mpc; pub use descriptors::Wpkh; pub use electrum::{Client as ElectrumClient, ElectrumApi, Param}; pub use file_format::FileFormat; @@ -79,29 +85,39 @@ pub use psrgbt_altered::{RgbExt, RgbInExt, RgbPsbt, TxParams}; pub use rand::RngCore; #[cfg(not(feature = "altered"))] pub use rgb::{ + assignments::AssignVec, containers::{PubWitness, ValidContract, WitnessBundle}, contract::{AllocatedState, AssignmentsFilter, ContractOp, FilterIncludeAll, OpDirection}, info::ContractInfo, invoice::Pay2Vout, persistence::{MemContract, MemContractState, Stock}, stl::{ContractTerms, OpidRejectUrl}, + validation::Validator, validation::{Failure, ResolveWitness, Scripts, Validity, Warning, WitnessResolverError}, vm::{WitnessOrd, WitnessPos}, - AssignmentType, DescriptorRgb, GenesisSeal, GraphSeal, Identity, OpId, RgbDescr, RgbKeychain, - RgbWallet, StateType, TapretKey, TransferParams, Transition, WalletProvider, + Assign, AssignmentDetails, AssignmentType, BundleId, DescriptorRgb, FungibleState, GenesisSeal, + GlobalDetails, GlobalStateSchema, GraphSeal, Identity, InputOpids, MetaDetails, MetaType, + MetaValue, Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, + RevealedValue, RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, + Transition, TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, }; #[cfg(feature = "altered")] pub use rgb_altered::{ + assignments::AssignVec, containers::{PubWitness, ValidContract, WitnessBundle}, contract::{AllocatedState, AssignmentsFilter, ContractOp, FilterIncludeAll, OpDirection}, info::ContractInfo, invoice::Pay2Vout, persistence::{MemContract, MemContractState, Stock}, stl::{ContractTerms, OpidRejectUrl}, + validation::Validator, validation::{Failure, ResolveWitness, Scripts, Validity, Warning, WitnessResolverError}, vm::{WitnessOrd, WitnessPos}, - AssignmentType, DescriptorRgb, GenesisSeal, GraphSeal, Identity, OpId, RgbDescr, RgbKeychain, - RgbWallet, StateType, TapretKey, TransferParams, Transition, WalletProvider, + Assign, AssignmentDetails, AssignmentType, BundleId, DescriptorRgb, FungibleState, GenesisSeal, + GlobalDetails, GlobalStateSchema, GraphSeal, Identity, InputOpids, MetaDetails, MetaType, + MetaValue, Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, + RevealedValue, RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, + Transition, TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, }; pub use rgbstd::{ containers::{ @@ -132,7 +148,7 @@ pub use schemata::{ }; pub use serial_test::serial; pub use strict_encoding::{fname, tn, FieldName, StrictSerialize, TypeName}; -pub use strict_types::{StrictVal, TypeSystem}; +pub use strict_types::{SemId, StrictDumb, StrictVal, TypeSystem}; pub use strum::IntoEnumIterator; pub use strum_macros::EnumIter; pub use time::OffsetDateTime; diff --git a/tests/validation.rs b/tests/validation.rs index b3c5df6..0156b65 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -2,16 +2,19 @@ pub mod utils; use utils::*; +#[derive(Clone)] enum MockResolvePubWitness { Success(Tx), Error(WitnessResolverError), } +#[derive(Clone)] enum MockResolvePubWitnessOrd { Success(WitnessOrd), Error(WitnessResolverError), } +#[derive(Clone)] struct MockResolver { pub_witnesses: HashMap, pub_witness_ords: HashMap, @@ -47,6 +50,20 @@ impl ResolveWitness for MockResolver { Ok(()) } } +impl MockResolver { + pub fn with_new_transaction(&self, witness: Tx) -> Self { + let mut resolver = self.clone(); + let witness_id = witness.txid(); + resolver + .pub_witnesses + .insert(witness_id, MockResolvePubWitness::Success(witness)); + resolver.pub_witness_ords.insert( + witness_id, + MockResolvePubWitnessOrd::Success(WitnessOrd::Tentative), + ); + resolver + } +} #[derive(Debug, EnumIter, Copy, Clone, PartialEq)] enum Scenario { @@ -107,6 +124,70 @@ impl Scenario { } } +fn replace_transition_in_bundle( + witness_bundle: WitnessBundle, + old_opid: OpId, + transition: Transition, +) -> WitnessBundle { + let mut known_transitions = witness_bundle.bundle.known_transitions.release().clone(); + let contract_id = known_transitions.values().last().unwrap().contract_id; + known_transitions.remove(&old_opid); + let transition_id = transition.id(); + known_transitions.insert(transition_id, transition.clone()); + let mut input_map = BTreeMap::::new(); + for (vin, input_opids) in witness_bundle.bundle.input_map.clone().into_iter() { + input_map.insert( + vin, + NonEmptyOrdSet::from_checked( + input_opids + .into_iter() + .map(|o| if o == old_opid { transition_id } else { o }) + .collect::>(), + ) + .into(), + ); + } + let mut witness_psbt = Psbt::from_tx(witness_bundle.pub_witness.tx().unwrap().clone()); + let idx = witness_psbt + .outputs() + .find(|o| o.script.is_op_return()) + .unwrap() + .index(); + let bundle = TransitionBundle { + input_map: NonEmptyOrdMap::from_checked(input_map), + known_transitions: NonEmptyOrdMap::from_checked(known_transitions), + }; + let protocol_id = mpc::ProtocolId::from(contract_id); + let message = mpc::Message::from(bundle.bundle_id()); + witness_psbt.output_mut(idx).unwrap().script = ScriptPubkey::op_return(&[]); + witness_psbt + .output_mut(idx) + .unwrap() + .set_opret_host() + .unwrap(); + witness_psbt + .output_mut(idx) + .unwrap() + .set_mpc_message(protocol_id, message) + .unwrap(); + let (commitment, proof) = witness_psbt.output_mut(idx).unwrap().mpc_commit().unwrap(); + witness_psbt + .output_mut(idx) + .unwrap() + .opret_commit(commitment) + .unwrap(); + let witness: Tx = witness_psbt.to_unsigned_tx().into(); + + let mut anchor = witness_bundle.anchor.clone(); + anchor.mpc_proof = proof.to_merkle_proof(protocol_id).unwrap(); + let pub_witness = PubWitness::Tx(witness.clone()); + WitnessBundle { + pub_witness, + anchor, + bundle, + } +} + fn get_consignment(scenario: Scenario) -> (Transfer, Vec) { initialize(); @@ -329,9 +410,16 @@ fn validate_consignment_bundles_fail() { #[test] fn validate_consignment_resolver_error() { let scenario = Scenario::A; - let mut resolver = scenario.resolver(); + let base_resolver = scenario.resolver(); + let consignment = get_consignment_from_json("attack_resolver_error"); let txid = Txid::from_str("c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9").unwrap(); + let wbundle = consignment + .bundles + .iter() + .find(|wb| wb.witness_id() == txid) + .unwrap(); + let bundle_id = wbundle.bundle.bundle_id(); struct ConsignmentResolver<'a, 'cons, const TRANSFER: bool> { consignment: &'cons IndexedConsignment<'cons, TRANSFER>, @@ -354,9 +442,10 @@ fn validate_consignment_resolver_error() { } // resolve_pub_witness error + let mut resolver = base_resolver.clone(); + let resolver_error = WitnessResolverError::Other(txid, s!("unexpected error")); *resolver.pub_witnesses.get_mut(&txid).unwrap() = - MockResolvePubWitness::Error(WitnessResolverError::Other(txid, s!("unexpected error"))); - let consignment = get_consignment_from_json("attack_resolver_error"); + MockResolvePubWitness::Error(resolver_error.clone()); let consignment_resolver = ConsignmentResolver { consignment: &IndexedConsignment::new(&consignment), fallback: &resolver, @@ -371,26 +460,29 @@ fn validate_consignment_resolver_error() { }; dbg!(&validation_status); assert_eq!(validation_status.failures.len(), 1); - assert!(matches!( + assert_eq!( validation_status.failures[0], - Failure::SealNoPubWitness(_, _, _) - )); + Failure::SealNoPubWitness(bundle_id, txid, resolver_error) + ); assert!(validation_status.warnings.is_empty()); assert!(validation_status.info.is_empty()); - let validity = validation_status.validity(); - assert_eq!(validity, Validity::Invalid); + assert_eq!(validation_status.validity(), Validity::Invalid); + assert_eq!( + validation_status, + consignment + .clone() + .validate(&resolver, ChainNet::BitcoinRegtest, None) + .unwrap_err() + ); // resolve_pub_witness_ord error + let mut resolver = base_resolver.clone(); + let resolver_error = WitnessResolverError::Other(txid, s!("another unexpected error")); *resolver.pub_witness_ords.get_mut(&txid).unwrap() = - MockResolvePubWitnessOrd::Error(WitnessResolverError::Other(txid, s!("unexpected error"))); - let consignment = get_consignment_from_json("attack_resolver_error"); - let consignment_resolver = ConsignmentResolver { - consignment: &IndexedConsignment::new(&consignment), - fallback: &resolver, - }; + MockResolvePubWitnessOrd::Error(resolver_error.clone()); let res = consignment .clone() - .validate(&consignment_resolver, ChainNet::BitcoinRegtest, None); + .validate(&resolver, ChainNet::BitcoinRegtest, None); assert!(res.is_err()); let validation_status = match res { Ok(validated_consignment) => validated_consignment.validation_status().clone(), @@ -398,12 +490,716 @@ fn validate_consignment_resolver_error() { }; dbg!(&validation_status); assert_eq!(validation_status.failures.len(), 1); - assert!(matches!( + assert_eq!( validation_status.failures[0], - Failure::SealNoPubWitness(_, _, _) - )); + Failure::WitnessUnresolved(bundle_id, txid, resolver_error) + ); assert!(validation_status.warnings.is_empty()); assert!(validation_status.info.is_empty()); - let validity = validation_status.validity(); - assert_eq!(validity, Validity::Invalid); + assert_eq!(validation_status.validity(), Validity::Invalid); +} + +#[cfg(not(feature = "altered"))] +#[test] +fn validate_consignment_schema_fail() { + let scenario = Scenario::B; + let resolver = scenario.resolver(); + + let base_consignment = get_consignment_from_json(&format!("consignment_{scenario}")); + let transition_type = base_consignment.schema.transitions.keys().last().unwrap(); + + // SchemaOpMetaTypeUnknown: schema transition has unknown metatype + let mut consignment = base_consignment.clone(); + consignment + .schema + .transitions + .get_mut(transition_type) + .unwrap() + .transition_schema + .metadata = TinyOrdSet::from_checked(bset![MetaType::with(42)]); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + assert_eq!(failures.len(), 1); + assert!(matches!( + failures[0], + Failure::SchemaOpMetaTypeUnknown(_, _) + )); + + // SchemaOpEmptyInputs: schema transition has no inputs + let mut consignment = base_consignment.clone(); + consignment + .schema + .transitions + .get_mut(transition_type) + .unwrap() + .transition_schema + .inputs = TinyOrdMap::new(); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + assert_eq!(failures.len(), 1); + assert!(matches!(failures[0], Failure::SchemaOpEmptyInputs(_))); + + // SchemaOpGlobalTypeUnknown: schema transition has unknown global type + let mut consignment = base_consignment.clone(); + consignment + .schema + .transitions + .get_mut(transition_type) + .unwrap() + .transition_schema + .globals = TinyOrdMap::from_checked(bmap! { + GlobalStateType::with(42) => Occurrences::Once + }); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + assert_eq!(failures.len(), 1); + assert!(matches!( + failures[0], + Failure::SchemaOpGlobalTypeUnknown(_, _) + )); + + // SchemaOpAssignmentTypeUnknown: schema transition has unknown assignment type + let mut consignment = base_consignment.clone(); + consignment + .schema + .transitions + .get_mut(transition_type) + .unwrap() + .transition_schema + .assignments = TinyOrdMap::from_checked(bmap! { + AssignmentType::with(42) => Occurrences::Once + }); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + assert_eq!(failures.len(), 1); + assert!(matches!( + failures[0], + Failure::SchemaOpAssignmentTypeUnknown(_, _) + )); + + // SchemaMetaSemIdUnknown: schema meta type has unknown sem id + let mut consignment = base_consignment.clone(); + consignment.schema.meta_types = + TinyOrdMap::from_checked(bmap! {MetaType::with(42) => MetaDetails { + sem_id: SemId::from([42u8; 32]), + name: fname!("foo") + }}); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + assert_eq!(failures.len(), 1); + assert!(matches!(failures[0], Failure::SchemaMetaSemIdUnknown(_, _))); + + // SchemaGlobalSemIdUnknown: schema global type has unknown sem id + let mut consignment = base_consignment.clone(); + let mut global_types = consignment.schema.global_types.release(); + global_types.insert( + GlobalStateType::with(42), + GlobalDetails { + global_state_schema: GlobalStateSchema { + sem_id: SemId::from([42u8; 32]), + max_items: u24::from_le_bytes([42u8; 3]), + }, + name: fname!("foo"), + }, + ); + consignment.schema.global_types = TinyOrdMap::from_checked(global_types); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + assert_eq!(failures.len(), 1); + assert!(matches!( + failures[0], + Failure::SchemaGlobalSemIdUnknown(_, _) + )); + + // SchemaOwnedSemIdUnknown: schema owned type has unknown sem id + let mut consignment = base_consignment.clone(); + let mut owned_types = consignment.schema.owned_types.release(); + owned_types.insert( + AssignmentType::with(56), + AssignmentDetails { + owned_state_schema: OwnedStateSchema::Structured(SemId::from([42u8; 32])), + default_transition: TransitionType::with(42), + name: fname!("foo"), + }, + ); + consignment.schema.owned_types = TinyOrdMap::from_checked(owned_types); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + assert_eq!(failures.len(), 1); + dbg!(&failures); + assert!(matches!( + failures[0], + Failure::SchemaOwnedSemIdUnknown(_, _) + )); +} + +#[cfg(not(feature = "altered"))] +#[test] +fn validate_consignment_commitments_fail() { + let scenario = Scenario::B; + let resolver = scenario.resolver(); + + let base_consignment = get_consignment_from_json(&format!("consignment_{scenario}")); + + // CyclicGraph: it's enough to make the same opid appear twice, changing InputMap and + // PubWitness to avoid automated removal of duplicates + let mut consignment = base_consignment.clone(); + let bundle = consignment.bundles.iter().last().unwrap(); + let mut new_bundle = bundle.clone(); + new_bundle.pub_witness = PubWitness::new( + Txid::from_str("a6e7e4775ea6e8b7155f6cfcc8d193df326c468dce99e9c4ee0a26511659feb3").unwrap(), + ); + new_bundle + .bundle + .input_map + .insert(Vout::from_u32(2), InputOpids::strict_dumb()) + .unwrap(); + + consignment.bundles = LargeOrdSet::from_checked(bset![bundle.clone(), new_bundle]); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert!(failures + .iter() + .any(|f| matches!(f, Failure::CyclicGraph(_)))); + + // DoubleSpend: add different transition that spends the same opouts + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let mut new_bundle = bundles.iter().last().unwrap().clone(); + let mut transition = new_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + transition.nonce -= 1; + new_bundle + .bundle + .known_transitions + .insert(transition.id(), transition) + .unwrap(); + bundles.replace(new_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!(failures.len(), 1); + assert!(matches!(failures[0], Failure::DoubleSpend(_))); + + // OperationAbsent: remove a bundle that contains spent assignments + let mut consignment = base_consignment.clone(); + let spent_transitions = consignment + .bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let bundle_id_to_remove = consignment + .bundles + .iter() + .map(|wb| wb.clone().bundle) + .find(|b| { + spent_transitions + .iter() + .any(|st| b.known_transitions.contains_key(st)) + }) + .unwrap() + .bundle_id(); + consignment.bundles = LargeOrdSet::from_checked( + consignment + .bundles + .into_iter() + .filter(|b| b.bundle.bundle_id() != bundle_id_to_remove) + .collect::>(), + ); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert!(failures + .iter() + .any(|f| matches!(f, Failure::OperationAbsent(_)))); + + // NoPrevState: add input with missing assignment type to a transition + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let mut new_bundle = bundles.iter().last().unwrap().clone(); + let mut transition = new_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + let fst_input = *transition.inputs.as_unconfined().first().unwrap(); + transition + .inputs + .push(Opout { + ty: AssignmentType::with(42), + ..fst_input + }) + .unwrap(); + new_bundle + .bundle + .known_transitions + .insert(transition.id(), transition) + .unwrap(); + bundles.replace(new_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert!(failures.iter().any(|f| matches!( + f, + Failure::NoPrevState { + opid: _, + prev_id: _, + state_type: _ + } + ))); + + // NoPrevOut: add input with missing assignment number to a transition + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let mut new_bundle = bundles.iter().last().unwrap().clone(); + let mut transition = new_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + let fst_input = *transition.inputs.as_unconfined().first().unwrap(); + transition + .inputs + .push(Opout { + no: 42, + ..fst_input + }) + .unwrap(); + new_bundle + .bundle + .known_transitions + .insert(transition.id(), transition) + .unwrap(); + bundles.replace(new_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert!(failures + .iter() + .any(|f| matches!(f, Failure::NoPrevOut(_, _)))); + + // ConfidentialSeal: one of the transitions includes blinded assignments + let mut consignment = base_consignment.clone(); + let spent_transitions = consignment + .bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let mut bundles = consignment.bundles.release().clone(); + let mut new_bundle = bundles + .iter() + .find(|wb| { + spent_transitions + .iter() + .any(|st| wb.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); + let mut transitions = new_bundle.clone().bundle.known_transitions.release(); + let (_, mut transition) = transitions + .clone() + .into_iter() + .find(|(id, _)| spent_transitions.contains(id)) + .unwrap(); + let assignments = transition + .assignments + .remove(&AssignmentType::ASSET) + .unwrap() + .unwrap() + .as_fungible() + .iter() + .map(|a| { + let (seal, state) = a.to_revealed().unwrap(); + rgb::Assign::ConfidentialSeal { + seal: seal.to_secret_seal(), + state, + } + }) + .collect::>(); + let assignments = + TypedAssigns::Fungible(AssignVec::with(NonEmptyVec::from_checked(assignments))); + transition + .assignments + .insert(AssignmentType::ASSET, assignments) + .unwrap(); + transitions.insert(transition.id(), transition).unwrap(); + new_bundle.bundle.known_transitions = NonEmptyOrdMap::from_checked(transitions); + bundles.replace(new_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert!(failures + .iter() + .any(|f| matches!(f, Failure::ConfidentialSeal(_)))); + + // BundleExtraTransition: replace known_transition referenced in input map + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let mut new_bundle = bundles.iter().last().unwrap().clone(); + let mut transition = new_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + transition.nonce -= 1; + new_bundle.bundle.known_transitions = + NonEmptyOrdMap::from_checked(bmap! {transition.id() => transition}); + bundles.replace(new_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!(failures.len(), 1); + assert!(matches!(failures[0], Failure::BundleExtraTransition(_, _))); + + // BundleInvalidCommitment: change witness txid in witness_bundle + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let mut new_bundle = bundles.pop_last().unwrap(); + let mut witness = new_bundle.pub_witness.tx().unwrap().clone(); + let fst_input = witness.inputs[0].clone(); + witness.inputs[0].prev_output = Outpoint::strict_dumb(); + witness.inputs.push(fst_input).unwrap(); + let witness_id = witness.txid(); + new_bundle.pub_witness = PubWitness::Txid(witness_id); + bundles.insert(new_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let mut alt_resolver = resolver.clone(); + alt_resolver + .pub_witnesses + .insert(witness_id, MockResolvePubWitness::Success(witness)); + let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!(failures.len(), 1); + assert!(matches!( + failures[0], + Failure::BundleInvalidCommitment(_, _, _, _) + )); +} + +#[cfg(not(feature = "altered"))] +#[test] +fn validate_consignment_logic_fail() { + let scenario = Scenario::B; + let resolver = scenario.resolver(); + + let base_consignment = get_consignment_from_json(&format!("consignment_{scenario}")); + + // SchemaMismatch: replace consignment.schema with a compatible schema with different id + let mut consignment = base_consignment.clone(); + let schema_id = consignment.schema_id(); + let mut alt_schema = NonInflatableAsset::schema(); + alt_schema.name = tn!("NonInflatableAsset2"); + let alt_schema_id = alt_schema.schema_id(); + consignment.schema = alt_schema; + let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!(failures.len(), 1); + assert_eq!( + failures[0], + Failure::SchemaMismatch { + expected: schema_id, + actual: alt_schema_id, + } + ); + + // SchemaUnknownTransitionType: replace transition with unsupported transition type + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let witness_bundle = bundles.pop_last().unwrap(); + let mut transition = witness_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + let old_opid = transition.id(); + transition.transition_type = TransitionType::with(42); + let transition_id = transition.id(); + let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + let alt_resolver = + resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); + bundles.replace(witness_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!(failures.len(), 1); + assert_eq!( + failures[0], + Failure::SchemaUnknownTransitionType(transition_id, TransitionType::with(42)) + ); + + // SchemaUnknownMetaType: replace transition with unsupported meta type + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let witness_bundle = bundles.pop_last().unwrap(); + let mut transition = witness_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + let old_opid = transition.id(); + transition + .metadata + .add_value(MetaType::with(42), MetaValue::strict_dumb()) + .unwrap(); + let transition_id = transition.id(); + let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + let alt_resolver = + resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); + bundles.replace(witness_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!(failures.len(), 1); + assert_eq!( + failures[0], + Failure::SchemaUnknownMetaType(transition_id, MetaType::with(42)) + ); + + // SchemaUnknownGlobalStateType: replace transition with unsupported global state type + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let witness_bundle = bundles.pop_last().unwrap(); + let mut transition = witness_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + let old_opid = transition.id(); + transition + .globals + .add_state(GlobalStateType::with(42), RevealedData::strict_dumb()) + .unwrap(); + let transition_id = transition.id(); + let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + let alt_resolver = + resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); + bundles.replace(witness_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!(failures.len(), 1); + assert_eq!( + failures[0], + Failure::SchemaUnknownGlobalStateType(transition_id, GlobalStateType::with(42)) + ); + + // SchemaUnknownAssignmentType: add unsupported assignment type to transition + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let witness_bundle = bundles.pop_last().unwrap(); + let mut transition = witness_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + let old_opid = transition.id(); + transition + .assignments + .insert(AssignmentType::with(42), TypedAssigns::strict_dumb()) + .unwrap(); + let transition_id = transition.id(); + let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + let alt_resolver = + resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); + bundles.replace(witness_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!(failures.len(), 1); + assert_eq!( + failures[0], + Failure::SchemaUnknownAssignmentType(transition_id, AssignmentType::with(42)) + ); + + // SchemaAssignmentOccurrences: add transition with no assignments + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let witness_bundle = bundles.pop_last().unwrap(); + let mut transition = witness_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + let old_opid = transition.id(); + transition.assignments = SmallOrdMap::new().into(); + let transition_id = transition.id(); + let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + let alt_resolver = + resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); + bundles.replace(witness_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!( + failures[0], + Failure::SchemaAssignmentOccurrences( + transition_id, + AssignmentType::with(4000), + OccurrencesMismatch { + min: 1, + max: 65535, + found: 0 + } + ) + ); + + // StateTypeMismatch + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let witness_bundle = bundles.pop_last().unwrap(); + let mut transition = witness_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + let old_opid = transition.id(); + let assignment_type = AssignmentType::with(4000); + transition + .assignments + .insert( + assignment_type, + TypedAssigns::Declarative( + NonEmptyVec::with(Assign::ConfidentialSeal { + seal: SecretSeal::strict_dumb(), + state: VoidState::strict_dumb(), + }) + .into(), + ), + ) + .unwrap(); + let transition_id = transition.id(); + let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + let alt_resolver = + resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); + bundles.replace(witness_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!( + failures[0], + Failure::StateTypeMismatch { + opid: transition_id, + state_type: assignment_type, + expected: StateType::Fungible, + found: StateType::Void + } + ); + + // ScriptFailure: e.g. one can't do simple inflation + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let witness_bundle = bundles.pop_last().unwrap(); + let mut transition = witness_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + let old_opid = transition.id(); + let assignment_type = AssignmentType::with(4000); + let output_sum = transition + .assignments + .get(&assignment_type) + .unwrap() + .as_fungible() + .iter() + .map(|a| a.as_revealed_state().as_u64()) + .sum::(); + transition + .assignments + .insert( + assignment_type, + TypedAssigns::Fungible( + NonEmptyVec::with(Assign::ConfidentialSeal { + seal: SecretSeal::strict_dumb(), + state: RevealedValue::new(output_sum + 1), + }) + .into(), + ), + ) + .unwrap(); + let transition_id = transition.id(); + let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + let alt_resolver = + resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); + bundles.replace(witness_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!(failures.len(), 1); + assert_eq!( + failures[0], + Failure::ScriptFailure(transition_id, Some(0), None) + ); + + // ContractMismatch: operations should commit to the correct contract + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let witness_bundle = bundles.pop_last().unwrap(); + let mut transition = witness_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .clone(); + let old_opid = transition.id(); + transition.contract_id = ContractId::strict_dumb(); + let transition_id = transition.id(); + let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + let alt_resolver = + resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); + bundles.replace(witness_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + dbg!(&failures); + assert_eq!(failures.len(), 1); + assert_eq!( + failures[0], + Failure::ContractMismatch(transition_id, ContractId::strict_dumb()) + ); } From 4f750e3fa45f3b201d6e1b02b26a7a62e830e849 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Tue, 10 Jun 2025 19:57:45 +0200 Subject: [PATCH 02/22] update rgb-core submodule (prevent panic if invalid global state) --- rgb-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rgb-core b/rgb-core index bbc63f8..2eb1ef7 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit bbc63f8429bf00d3a6588a01311987e4e22631de +Subproject commit 2eb1ef7aa34597abfea4410057ddfd4b8a81d599 From d599674120e7d49d49495682a43765895188df0b Mon Sep 17 00:00:00 2001 From: step Date: Tue, 27 May 2025 19:48:57 +0200 Subject: [PATCH 03/22] add extra_known_transition test --- tests/transfers.rs | 191 +++++++++++++++++++++++++++++++++++++++++ tests/utils/helpers.rs | 8 +- 2 files changed, 197 insertions(+), 2 deletions(-) diff --git a/tests/transfers.rs b/tests/transfers.rs index 1015e4d..eea4084 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -1696,6 +1696,197 @@ fn ifa_replace() { assert_eq!(replace_rights.len(), 1); } +#[cfg(not(feature = "altered"))] +#[should_panic(expected = "BundleExtraTransition")] +#[test] +fn extra_known_transition() { + initialize(); + + let mut wlt_1 = get_wallet(&DescriptorType::Wpkh); + let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); + let mut wlt_3 = get_wallet(&DescriptorType::Wpkh); + + let issued_amt = 900; + let contract_id = wlt_1.issue_nia(issued_amt, None); + let asset_schema = wlt_1.asset_schema(contract_id); + let schema_id = wlt_1.schema_id(contract_id); + let contract = wlt_1.stock().contract_data(contract_id).unwrap(); + let assignment_type = contract + .schema + .assignment_types_for_state(asset_schema.default_state_type())[0]; + let transition_type = contract + .schema + .default_transition_for_assignment(assignment_type); + + let utxo_1 = wlt_1.get_utxo(Some(8000)); + let amt_0 = 500; + let invoice = wlt_1.invoice( + contract_id, + schema_id, + amt_0, + InvoiceType::Blinded(Some(utxo_1)), + ); + let (consignment, tx, _, _) = wlt_1.pay_full(invoice, None, None, true, None); + wlt_1.mine_tx(&tx.txid(), false); + wlt_1.accept_transfer(consignment, None); + wlt_1.sync(); + + let (base_consignment, tx) = wlt_1.send( + &mut wlt_2, + InvoiceType::Blinded(None), + contract_id, + amt_0, + 1000, + None, + ); + let base_txid = tx.txid(); + + // allocate additional assets on spent utxo_1 + let amt_1 = 400; + let invoice = wlt_1.invoice( + contract_id, + schema_id, + amt_1, + InvoiceType::Blinded(Some(utxo_1)), + ); + let (consignment, tx, _, _) = wlt_1.pay_full(invoice, None, None, true, None); + let prev_bundles = consignment.bundles.clone().release(); + wlt_1.mine_tx(&tx.txid(), false); + wlt_1.accept_transfer(consignment, None); + wlt_1.sync(); + + let (opout, _) = wlt_1 + .stock() + .contract_assignments_for(contract_id, vec![utxo_1]) + .unwrap() + .into_values() + .flat_map(|s| s.into_iter()) + .find(|(_, s)| match s { + AllocatedState::Amount(a) => a.as_u64() == amt_1, + _ => { + panic!("unexpected allocatedState"); + } + }) + .unwrap(); + + let mut new_consignment_1 = base_consignment.clone(); + let mut new_consignment_2 = base_consignment.clone(); + let mut bundles_1 = base_consignment.bundles.release().clone(); + let mut bundles_2 = bundles_1.clone(); + + let mut transition_builder = wlt_1 + .stock() + .transition_builder_raw(contract_id, transition_type) + .unwrap(); + let state = asset_schema.allocated_state(amt_1); + transition_builder = transition_builder.add_input(opout, state.clone()).unwrap(); + let secret_seal = wlt_2.get_secret_seal(None, None); + transition_builder = transition_builder + .add_owned_state_raw(*assignment_type, BuilderSeal::Concealed(secret_seal), state) + .unwrap(); + let transition_1 = transition_builder.complete_transition().unwrap(); + let opid_1 = transition_1.id(); + + let mut new_bundle = bundles_1 + .iter() + .find(|b| b.pub_witness.txid() == base_txid) + .unwrap() + .clone(); + let bundle_id = new_bundle.bundle.bundle_id(); + new_bundle + .bundle + .known_transitions + .insert(opid_1, transition_1) + .unwrap(); + assert_eq!(bundle_id, new_bundle.bundle.bundle_id()); + assert!(new_bundle.bundle.known_transitions.contains_key(&opid_1)); + bundles_1.remove(&new_bundle); // otherwise it doesn't replace existing value + bundles_1.insert(new_bundle); + for b in prev_bundles.clone() { + let mut revealed_wbundle = b.clone(); + revealed_wbundle.bundle = wlt_1 + .stock() + .as_stash_provider() + .bundle(b.bundle.bundle_id()) + .unwrap() + .clone(); + bundles_1.insert(revealed_wbundle); + } + new_consignment_1.bundles = LargeOrdSet::from_checked(bundles_1); + let mut secret_seals = new_consignment_1 + .terminals + .remove(&bundle_id) // remove to be sure it's replaced on insert + .unwrap() + .unwrap() + .as_unconfined() + .clone(); + secret_seals.insert(secret_seal); + new_consignment_1 + .terminals + .insert(bundle_id, NonEmptyOrdSet::from_checked(secret_seals).into()) + .unwrap(); + + // double spend opout + let mut transition_builder = wlt_1 + .stock() + .transition_builder_raw(contract_id, transition_type) + .unwrap(); + let state = asset_schema.allocated_state(amt_1); + transition_builder = transition_builder.add_input(opout, state.clone()).unwrap(); + let secret_seal = wlt_3.get_secret_seal(None, None); + transition_builder = transition_builder + .add_owned_state_raw(*assignment_type, BuilderSeal::Concealed(secret_seal), state) + .unwrap(); + let transition_2 = transition_builder.complete_transition().unwrap(); + let opid_2 = transition_2.id(); + + let mut new_bundle = bundles_2 + .iter() + .find(|b| b.pub_witness.txid() == base_txid) + .unwrap() + .clone(); + let bundle_id = new_bundle.bundle.bundle_id(); + new_bundle + .bundle + .known_transitions + .insert(opid_2, transition_2) + .unwrap(); + assert_eq!(bundle_id, new_bundle.bundle.bundle_id()); + assert!(new_bundle.bundle.known_transitions.contains_key(&opid_2)); + bundles_2.remove(&new_bundle); // otherwise it doesn't replace existing value + bundles_2.insert(new_bundle); + for b in prev_bundles { + let mut revealed_wbundle = b.clone(); + revealed_wbundle.bundle = wlt_1 + .stock() + .as_stash_provider() + .bundle(b.bundle.bundle_id()) + .unwrap() + .clone(); + bundles_2.insert(revealed_wbundle); + } + new_consignment_2.bundles = LargeOrdSet::from_checked(bundles_2); + let mut secret_seals = new_consignment_2 + .terminals + .remove(&bundle_id) // remove to be sure it's replaced on insert + .unwrap() + .unwrap() + .as_unconfined() + .clone(); + secret_seals.insert(secret_seal); + new_consignment_2 + .terminals + .insert(bundle_id, NonEmptyOrdSet::from_checked(secret_seals).into()) + .unwrap(); + + wlt_2.accept_transfer(new_consignment_1, None); + wlt_3.accept_transfer(new_consignment_2, None); + + wlt_2.check_allocations(contract_id, asset_schema, vec![amt_0, amt_1], false); + wlt_3.check_allocations(contract_id, asset_schema, vec![amt_1], false); + assert!(issued_amt < amt_0 + amt_1 + amt_1); +} + #[cfg(not(feature = "altered"))] #[rstest] #[case(HistoryType::Linear, ReorgType::ChangeOrder)] diff --git a/tests/utils/helpers.rs b/tests/utils/helpers.rs index 2c9f5f0..ce78749 100644 --- a/tests/utils/helpers.rs +++ b/tests/utils/helpers.rs @@ -202,14 +202,14 @@ impl AssetSchema { kit.validate().unwrap() } - fn default_state_type(&self) -> StateType { + pub fn default_state_type(&self) -> StateType { match self { Self::Cfa | Self::Nia | Self::Pfa | Self::Ifa => StateType::Fungible, Self::Uda => StateType::Structured, } } - fn allocated_state(&self, value: u64) -> AllocatedState { + pub fn allocated_state(&self, value: u64) -> AllocatedState { match self { Self::Cfa | Self::Nia | Self::Pfa | Self::Ifa => AllocatedState::Amount(value.into()), Self::Uda => AllocatedState::Data( @@ -1061,6 +1061,10 @@ impl TestWallet { self.schema_id(contract_id).into() } + pub fn stock(&self) -> &Stock { + self.wallet.stock() + } + pub fn import_contract(&mut self, contract: &ValidContract, resolver: impl ResolveWitness) { self.wallet .stock_mut() From 91148bcad2a92ebb7414a40ff1df10b9aaa3c3e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Tue, 10 Jun 2025 19:51:10 +0200 Subject: [PATCH 04/22] update submodules (prevent extra known transition) --- rgb-core | 2 +- rgb-std | 2 +- tests/transfers.rs | 2 +- tests/validation.rs | 14 ++++++++------ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/rgb-core b/rgb-core index 2eb1ef7..088e790 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit 2eb1ef7aa34597abfea4410057ddfd4b8a81d599 +Subproject commit 088e79074dbc0ab7eb043dc0f7be713f2e5f8f4f diff --git a/rgb-std b/rgb-std index cce223e..ac1d2bf 160000 --- a/rgb-std +++ b/rgb-std @@ -1 +1 @@ -Subproject commit cce223e3a705880e5a882f7a8dbd0ccfb32731d0 +Subproject commit ac1d2bfc793cc70c50309b82cb9438181ecd2ffd diff --git a/tests/transfers.rs b/tests/transfers.rs index eea4084..2338caa 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -1697,7 +1697,7 @@ fn ifa_replace() { } #[cfg(not(feature = "altered"))] -#[should_panic(expected = "BundleExtraTransition")] +#[should_panic(expected = "ExtraKnownTransition")] #[test] fn extra_known_transition() { initialize(); diff --git a/tests/validation.rs b/tests/validation.rs index 0156b65..8d6e415 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -338,7 +338,7 @@ fn validate_consignment_genesis_fail() { )); assert!(matches!( validation_status.failures[2], - Failure::BundleExtraTransition(_, _) + Failure::MissingKnownTransition(_, _) )); assert!(matches!( validation_status.failures[3], @@ -685,8 +685,9 @@ fn validate_consignment_commitments_fail() { let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); - assert_eq!(failures.len(), 1); - assert!(matches!(failures[0], Failure::DoubleSpend(_))); + assert_eq!(failures.len(), 2); + assert!(matches!(failures[0], Failure::ExtraKnownTransition(_))); + assert!(matches!(failures[1], Failure::DoubleSpend(_))); // OperationAbsent: remove a bundle that contains spent assignments let mut consignment = base_consignment.clone(); @@ -850,7 +851,7 @@ fn validate_consignment_commitments_fail() { .iter() .any(|f| matches!(f, Failure::ConfidentialSeal(_)))); - // BundleExtraTransition: replace known_transition referenced in input map + // MissingKnownTransition: replace known_transition referenced in input map let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); let mut new_bundle = bundles.iter().last().unwrap().clone(); @@ -869,8 +870,9 @@ fn validate_consignment_commitments_fail() { let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); - assert_eq!(failures.len(), 1); - assert!(matches!(failures[0], Failure::BundleExtraTransition(_, _))); + assert_eq!(failures.len(), 2); + assert!(matches!(failures[0], Failure::ExtraKnownTransition(_))); + assert!(matches!(failures[1], Failure::MissingKnownTransition(_, _))); // BundleInvalidCommitment: change witness txid in witness_bundle let mut consignment = base_consignment.clone(); From 44deb7c2ca3d4e80cf926313d03ad950ab344851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Tue, 10 Jun 2025 18:58:49 +0200 Subject: [PATCH 05/22] rework TransitionBundle --- rgb | 2 +- rgb-core | 2 +- ...220347df72ce654e0bae12686a236da4399ac.json | 29 +++ ...174710b368ac6e196f15a280388b429a31a54.json | 29 --- ...90e085f9089aa48b7aa685f78ad930142d5a9.json | 29 --- ...134e3cc5bb084451b0489af6d4925cb540f5e.json | 29 +++ ...undles_pubWitness_data_input_sequence.json | 121 +++++----- tests/fixtures/attack_chain.json | 121 +++++----- tests/fixtures/attack_genesis_schema_id.json | 145 ++++++------ tests/fixtures/attack_genesis_testnet.json | 145 ++++++------ tests/fixtures/attack_resolver_error.json | 151 ++++++------ ...680d60b3af847b854ae870b31955bdbd4e2b9.json | 25 ++ ...f103d0183eba1ef2b81fa4f41158697dd4b2a.json | 25 -- ...5f8584cd6451aecd16af1c7ab870937e6a4b9.json | 25 -- tests/fixtures/consignment_A.json | 121 +++++----- tests/fixtures/consignment_B.json | 145 ++++++------ ...91692ee2eba943bb3ec3b86588d816fe965b9.json | 29 --- ...d0d4aadbc4dca96923ab821c837713140f1d0.json | 25 -- ...b232b659601dec610e2604415d50540417745.json | 29 +++ ...9993ded7476ee305466dffa2aee1a11416252.json | 25 ++ ...72a4185fa084c47949395fb0fc35c2908ad23.json | 25 ++ tests/utils/mod.rs | 4 +- tests/validation.rs | 222 +++++++++++++++--- 23 files changed, 794 insertions(+), 709 deletions(-) create mode 100644 tests/fixtures/04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac.json delete mode 100644 tests/fixtures/5259f55018e26bf50bfa1813e1e174710b368ac6e196f15a280388b429a31a54.json delete mode 100644 tests/fixtures/5f61c1f5db43f98b2274e90babd90e085f9089aa48b7aa685f78ad930142d5a9.json create mode 100644 tests/fixtures/89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e.json create mode 100644 tests/fixtures/b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9.json delete mode 100644 tests/fixtures/b7729e80544704769c690e6c5d4f103d0183eba1ef2b81fa4f41158697dd4b2a.json delete mode 100644 tests/fixtures/c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9.json delete mode 100644 tests/fixtures/e031ca3d4cf33f8d003d9362b8c91692ee2eba943bb3ec3b86588d816fe965b9.json delete mode 100644 tests/fixtures/e68c51aede5479db97384efe8f3d0d4aadbc4dca96923ab821c837713140f1d0.json create mode 100644 tests/fixtures/e759afa06dbcb23015ca05447cbb232b659601dec610e2604415d50540417745.json create mode 100644 tests/fixtures/f618e7e385105ddc8bb8b013a449993ded7476ee305466dffa2aee1a11416252.json create mode 100644 tests/fixtures/f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23.json diff --git a/rgb b/rgb index a9bba35..171d9e8 160000 --- a/rgb +++ b/rgb @@ -1 +1 @@ -Subproject commit a9bba35ceed7e0c4bc4e477f663ab022d7b0a23e +Subproject commit 171d9e822694e9d38e8adfc721a52e8211be5f95 diff --git a/rgb-core b/rgb-core index 088e790..128d0ea 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit 088e79074dbc0ab7eb043dc0f7be713f2e5f8f4f +Subproject commit 128d0eac5b42094ac29748a24778245d736fac98 diff --git a/tests/fixtures/04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac.json b/tests/fixtures/04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac.json new file mode 100644 index 0000000..6c51b6d --- /dev/null +++ b/tests/fixtures/04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b:0", + "sigScript": "", + "sequence": 0, + "witness": [ + "3045022100dbcf292b141ca86fb45dd0fe1092b4b17d8886c191cda839d715aa99880731f0022029394f3a56e6910e6c1e4f0339bf1880d987c55abd6c387615bc6365fd9806df01", + "031c73c666a522a34bb57b9263a096247fa4cb40937eaafd3bb288a893b13edb83" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20d1f74348ed624cc8702cf25a7f883f5bbf958a4d8fb3b7902bc09aa77f25d3b8" + }, + { + "value": 9000, + "scriptPubkey": "001495d77ee93015b69a23bb4d0d27c31559a62318b6" + }, + { + "value": 99990600, + "scriptPubkey": "00145799f04cab25bc03964912c755587688af302ba7" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/5259f55018e26bf50bfa1813e1e174710b368ac6e196f15a280388b429a31a54.json b/tests/fixtures/5259f55018e26bf50bfa1813e1e174710b368ac6e196f15a280388b429a31a54.json deleted file mode 100644 index ccd9a41..0000000 --- a/tests/fixtures/5259f55018e26bf50bfa1813e1e174710b368ac6e196f15a280388b429a31a54.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "5f61c1f5db43f98b2274e90babd90e085f9089aa48b7aa685f78ad930142d5a9:2", - "sigScript": "", - "sequence": 0, - "witness": [ - "3044022002bc541ebc51300ffdbb08a6068624c36f0fca5a48f680ce1f6eff55d69f401802202c27f77f1c16fc029f7b8e2ae8c218a065c41fd8c46bafbb1626054d1c30c44001", - "03ee020029bdd3687de6ee181bbe9cca076e38c21f3c41942249e88ce1a0a914b3" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20f165d1e9ce1ee99e0c26a614b060b8ba964d053de9d2591d27fda3a42c4a06ea" - }, - { - "value": 9000, - "scriptPubkey": "0014de56a95f365f2fdfac59c996d911807643318d45" - }, - { - "value": 99981200, - "scriptPubkey": "00140721467af22eceb7c10669839340d36b0550fb51" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/5f61c1f5db43f98b2274e90babd90e085f9089aa48b7aa685f78ad930142d5a9.json b/tests/fixtures/5f61c1f5db43f98b2274e90babd90e085f9089aa48b7aa685f78ad930142d5a9.json deleted file mode 100644 index d43fc13..0000000 --- a/tests/fixtures/5f61c1f5db43f98b2274e90babd90e085f9089aa48b7aa685f78ad930142d5a9.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "2697bf250bfbfdf0232329e1c4d504df0a3afc7f155372c8344d14aa477978eb:1", - "sigScript": "", - "sequence": 0, - "witness": [ - "3045022100b178bb7e6eea5ce23f9685624c6ecdafdc516ba82452361dab5cf304a4b173e402204857057b18e94f1a1220bd2147fff4ad065e4ddbf0df8d89a0f61088353d5bf701", - "025bba6dd99d47e587b4bc1466ec7fbf811b164406e9b2a0254361fdc454732eed" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a207d21d8c4829a93e3b28dc2624ce854dec0393025b252c884e15020be1fafa949" - }, - { - "value": 9000, - "scriptPubkey": "001402bff690f27911f8412cb4047779ebd9eea228db" - }, - { - "value": 99990600, - "scriptPubkey": "0014b31d8f364e330e328c0ab1baed3adb3873e3d9bb" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e.json b/tests/fixtures/89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e.json new file mode 100644 index 0000000..085d796 --- /dev/null +++ b/tests/fixtures/89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac:2", + "sigScript": "", + "sequence": 0, + "witness": [ + "304402203098517cc619ac0dc960836a7f92785f28e5c04a8a7100e88e28bac744a6bcdf0220207302f141703599f33207022a9aa2aa076474eedcd90a1ac2486980e7f2a79e01", + "02c7ffa585ad987207a0ddca3ab715fe14be75b95982e33878609c73f689435218" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a2092035eb78e0b8d589e95e274fb69c85645efbbb091220a25ba23f093d1139705" + }, + { + "value": 9000, + "scriptPubkey": "001478e18e564017d7ff3fc6dcbd994c0bb118bc77dc" + }, + { + "value": 99981200, + "scriptPubkey": "0014e3a0a519a66f044f13c254db465eed969328bea8" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json b/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json index 3f8ea04..9bd5552 100644 --- a/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json +++ b/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "9d4b73f7964529cfd46536f640c40d0ec5ac20bff54e00f7d101b26c16dfae13": [ - "e651af63e80c3584261ab1ce5fde181c730df2baed13569aa3620953ddd140f0" + "9501603f11b556960982c9a59a67457659d16fc7837580feeba5a84f7ff18d61": [ + "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1747745043, + "timestamp": 1749656356, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "aedcde1133e96fdb1a130b5f3899d2a5932ff3d05378c0455f9c858fe7c5ec13", - "vout": 1, - "blinding": 13113921856262959977 + "txid": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114", + "vout": 0, + "blinding": 13403777090925923396 }, "state": 666 } @@ -48,7 +48,7 @@ "version": 2, "inputs": [ { - "prevOutput": "c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9:1", + "prevOutput": "b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9:1", "sigScript": "", "sequence": 0, "witness": [] @@ -57,11 +57,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20f75dffbafa81de29f1b767a81f47e9ace789223e6854b388c8ff72b480e9bc65" + "scriptPubkey": "6a20a9b8418b25785eb52dd485ec0eff0f4713d95219c288a9bcb1e6705cb84edafd" }, { - "value": 99998800, - "scriptPubkey": "0014a6558396fcd09a1cb1773b09e9a7033ffe5f7843" + "value": 99999200, + "scriptPubkey": "0014adbea30c365d0509278cf035fb756c92fb96854e" } ], "lockTime": 0 @@ -72,33 +72,30 @@ "pos": 7, "cofactor": 0, "path": [ - "7584c919969fced81f6309b7a6d817e0e2bc6240e5b41759d90719efec4235c3", - "048867a3370db6815e3a90093e0f3e8a16f19c39953e91af5bb426ab2a3aabfd", - "ad31b376af0d04b0f5088abf077b405cad2f9b9760e0c27dddc463cdad289af2" + "3d06f069df3591e9bb393f22c2769f69922af67530282c2a5fb2d9d208592d68", + "4ea051dddb9739f467250fa6c1926bed02c59ecb8586163d2d17beefcb53c2c1", + "44b2530248e67c0c51d56fa2a7bf309c1db4931263787fcd2f5a8062a48b8fa3" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "a6af59b5b69fbbc490683801a2174ceb9d0531de9133da0aac2350d439a78291" - ] + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0": { + "opid": "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a", + "vin": 0 + } }, "knownTransitions": { - "a6af59b5b69fbbc490683801a2174ceb9d0531de9133da0aac2350d439a78291": { + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d", - "ty": 4000, - "no": 0 - } + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0" ], "assignments": { "4000": { @@ -108,13 +105,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 12961427178433477692 + "blinding": 11344773579385591986 }, - "state": 539 + "state": 616 }, { - "seal": "e651af63e80c3584261ab1ce5fde181c730df2baed13569aa3620953ddd140f0", - "state": 77 + "seal": "fb0e03fdc93227c9097b335c4975ceab4d05bf4e3f70f739c2a9c27242656612", + "state": 50 } ] } @@ -130,7 +127,7 @@ "version": 2, "inputs": [ { - "prevOutput": "e68c51aede5479db97384efe8f3d0d4aadbc4dca96923ab821c837713140f1d0:1", + "prevOutput": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23:1", "sigScript": "", "sequence": 0, "witness": [] @@ -139,11 +136,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a201f129c99327c5cd54125d7c2091bb8962bf04147254459a38070587e1349d89c" + "scriptPubkey": "6a20a382ff389fcaed42c49a09965bb2d657b722ea61b1b07113e8fc74eedc812095" }, { - "value": 99999200, - "scriptPubkey": "001438ef9ad1ee0663a43b8b30a7c1d4705f071779db" + "value": 99998800, + "scriptPubkey": "0014d0d404b911357c63e508828bb2fa85a6127c6eb1" } ], "lockTime": 0 @@ -154,33 +151,30 @@ "pos": 7, "cofactor": 0, "path": [ - "e194ceb0f09362d49969e8f4ddfee873ac6760ede382351fdead1dab3c0ab0d0", - "9bfdf671b70582032db385ec98c07f01060ff467918a9a812cf6c00bedb22180", - "e04fcb9eaf2a716f7c0c5e3a538cc3ed4580b3ae2e658fe0d2eef9e46fd952a6" + "bded953a2adc2c0981c4108b0b975d90e231f205ad0a88a56fc67de85ec5f18c", + "edc41e3179b85dcf7f4799a7941921310566cb419b975e2b303b3ec1e2196fa5", + "8153eb1c8e99ab980d78fbb2878eadb6c9cd388ad4cd5d700860dea09554290f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d" - ] + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0": { + "opid": "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241", + "vin": 0 + } }, "knownTransitions": { - "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d": { + "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b", - "ty": 4000, - "no": 0 - } + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0" ], "assignments": { "4000": { @@ -190,13 +184,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 10003067900325773186 + "blinding": 4544899145095694536 }, - "state": 616 + "state": 539 }, { - "seal": "18a82040f68755c128b28eacdb9af7c8a0bed32b2a52f5dcba6c45b51d83bdf3", - "state": 50 + "seal": "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145", + "state": 77 } ] } @@ -212,7 +206,7 @@ "version": 2, "inputs": [ { - "prevOutput": "aedcde1133e96fdb1a130b5f3899d2a5932ff3d05378c0455f9c858fe7c5ec13:1", + "prevOutput": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114:0", "sigScript": "", "sequence": 1, "witness": [] @@ -221,11 +215,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a204bba687d2198a9a049b75255ea3fbdf5b648437ffb7757c258a95cb1232a5fa6" + "scriptPubkey": "6a20fa6b63d4c8402175d6ef2c85617dee6434247cc8c762ee24243dc567b25a72e9" }, { "value": 99999600, - "scriptPubkey": "00149aeec847f99c80464389ed96e80de8bb147d6227" + "scriptPubkey": "0014bb5dff0b3584c4f838146f34e96f310f3e5c4028" } ], "lockTime": 0 @@ -236,33 +230,30 @@ "pos": 7, "cofactor": 0, "path": [ - "315234829e1fd969c450b5651cd33d9282c081dc7f87cb7f321e34186ed2a476", - "6efee2e679ba3987921bbdb3ff2b5c254d823072fed90a7f661c82e5a9b97363", - "2608cec7dc2d6f14c1e89d3f8aaf81dcc79146c063c1b62b52a3923f1dec0ec9" + "ad4d83741b4460ab72eac597e9f4d5235874315d65cb6e336c1eeedbb076e1ee", + "85d92bd272ce2be6e8e5a1d1777fab6ed0c335b5e09f2cb116fb24d106f95ecc", + "9d9f07f52e891f146904c4051984f5497f83963104991e6b186bb1ba333b16fa" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b" - ] + "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0": { + "opid": "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3", + "vin": 0 + } }, "knownTransitions": { - "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b": { + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "8f8ac47ea084bdff5550df2b43427cafc2aa6177f7043a855046a59e3c6f1a16", - "ty": 4000, - "no": 0 - } + "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0" ], "assignments": { "4000": { @@ -272,7 +263,7 @@ "seal": { "txid": null, "vout": 1, - "blinding": 17520881827267755355 + "blinding": 1621579500098964609 }, "state": 666 } diff --git a/tests/fixtures/attack_chain.json b/tests/fixtures/attack_chain.json index 5ba8b85..f31555d 100644 --- a/tests/fixtures/attack_chain.json +++ b/tests/fixtures/attack_chain.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "9d4b73f7964529cfd46536f640c40d0ec5ac20bff54e00f7d101b26c16dfae13": [ - "e651af63e80c3584261ab1ce5fde181c730df2baed13569aa3620953ddd140f0" + "9501603f11b556960982c9a59a67457659d16fc7837580feeba5a84f7ff18d61": [ + "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1747745043, + "timestamp": 1749656356, "issuer": "ssi:anonymous", "chainNet": "liquidTestnet", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "aedcde1133e96fdb1a130b5f3899d2a5932ff3d05378c0455f9c858fe7c5ec13", - "vout": 1, - "blinding": 13113921856262959977 + "txid": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114", + "vout": 0, + "blinding": 13403777090925923396 }, "state": 666 } @@ -48,7 +48,7 @@ "version": 2, "inputs": [ { - "prevOutput": "c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9:1", + "prevOutput": "b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9:1", "sigScript": "", "sequence": 0, "witness": [] @@ -57,11 +57,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20f75dffbafa81de29f1b767a81f47e9ace789223e6854b388c8ff72b480e9bc65" + "scriptPubkey": "6a20a9b8418b25785eb52dd485ec0eff0f4713d95219c288a9bcb1e6705cb84edafd" }, { - "value": 99998800, - "scriptPubkey": "0014a6558396fcd09a1cb1773b09e9a7033ffe5f7843" + "value": 99999200, + "scriptPubkey": "0014adbea30c365d0509278cf035fb756c92fb96854e" } ], "lockTime": 0 @@ -72,33 +72,30 @@ "pos": 7, "cofactor": 0, "path": [ - "7584c919969fced81f6309b7a6d817e0e2bc6240e5b41759d90719efec4235c3", - "048867a3370db6815e3a90093e0f3e8a16f19c39953e91af5bb426ab2a3aabfd", - "ad31b376af0d04b0f5088abf077b405cad2f9b9760e0c27dddc463cdad289af2" + "3d06f069df3591e9bb393f22c2769f69922af67530282c2a5fb2d9d208592d68", + "4ea051dddb9739f467250fa6c1926bed02c59ecb8586163d2d17beefcb53c2c1", + "44b2530248e67c0c51d56fa2a7bf309c1db4931263787fcd2f5a8062a48b8fa3" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "a6af59b5b69fbbc490683801a2174ceb9d0531de9133da0aac2350d439a78291" - ] + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0": { + "opid": "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a", + "vin": 0 + } }, "knownTransitions": { - "a6af59b5b69fbbc490683801a2174ceb9d0531de9133da0aac2350d439a78291": { + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d", - "ty": 4000, - "no": 0 - } + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0" ], "assignments": { "4000": { @@ -108,13 +105,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 12961427178433477692 + "blinding": 11344773579385591986 }, - "state": 539 + "state": 616 }, { - "seal": "e651af63e80c3584261ab1ce5fde181c730df2baed13569aa3620953ddd140f0", - "state": 77 + "seal": "fb0e03fdc93227c9097b335c4975ceab4d05bf4e3f70f739c2a9c27242656612", + "state": 50 } ] } @@ -130,7 +127,7 @@ "version": 2, "inputs": [ { - "prevOutput": "e68c51aede5479db97384efe8f3d0d4aadbc4dca96923ab821c837713140f1d0:1", + "prevOutput": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23:1", "sigScript": "", "sequence": 0, "witness": [] @@ -139,11 +136,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a201f129c99327c5cd54125d7c2091bb8962bf04147254459a38070587e1349d89c" + "scriptPubkey": "6a20a382ff389fcaed42c49a09965bb2d657b722ea61b1b07113e8fc74eedc812095" }, { - "value": 99999200, - "scriptPubkey": "001438ef9ad1ee0663a43b8b30a7c1d4705f071779db" + "value": 99998800, + "scriptPubkey": "0014d0d404b911357c63e508828bb2fa85a6127c6eb1" } ], "lockTime": 0 @@ -154,33 +151,30 @@ "pos": 7, "cofactor": 0, "path": [ - "e194ceb0f09362d49969e8f4ddfee873ac6760ede382351fdead1dab3c0ab0d0", - "9bfdf671b70582032db385ec98c07f01060ff467918a9a812cf6c00bedb22180", - "e04fcb9eaf2a716f7c0c5e3a538cc3ed4580b3ae2e658fe0d2eef9e46fd952a6" + "bded953a2adc2c0981c4108b0b975d90e231f205ad0a88a56fc67de85ec5f18c", + "edc41e3179b85dcf7f4799a7941921310566cb419b975e2b303b3ec1e2196fa5", + "8153eb1c8e99ab980d78fbb2878eadb6c9cd388ad4cd5d700860dea09554290f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d" - ] + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0": { + "opid": "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241", + "vin": 0 + } }, "knownTransitions": { - "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d": { + "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b", - "ty": 4000, - "no": 0 - } + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0" ], "assignments": { "4000": { @@ -190,13 +184,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 10003067900325773186 + "blinding": 4544899145095694536 }, - "state": 616 + "state": 539 }, { - "seal": "18a82040f68755c128b28eacdb9af7c8a0bed32b2a52f5dcba6c45b51d83bdf3", - "state": 50 + "seal": "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145", + "state": 77 } ] } @@ -212,7 +206,7 @@ "version": 2, "inputs": [ { - "prevOutput": "aedcde1133e96fdb1a130b5f3899d2a5932ff3d05378c0455f9c858fe7c5ec13:1", + "prevOutput": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114:0", "sigScript": "", "sequence": 0, "witness": [] @@ -221,11 +215,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a204bba687d2198a9a049b75255ea3fbdf5b648437ffb7757c258a95cb1232a5fa6" + "scriptPubkey": "6a20fa6b63d4c8402175d6ef2c85617dee6434247cc8c762ee24243dc567b25a72e9" }, { "value": 99999600, - "scriptPubkey": "00149aeec847f99c80464389ed96e80de8bb147d6227" + "scriptPubkey": "0014bb5dff0b3584c4f838146f34e96f310f3e5c4028" } ], "lockTime": 0 @@ -236,33 +230,30 @@ "pos": 7, "cofactor": 0, "path": [ - "315234829e1fd969c450b5651cd33d9282c081dc7f87cb7f321e34186ed2a476", - "6efee2e679ba3987921bbdb3ff2b5c254d823072fed90a7f661c82e5a9b97363", - "2608cec7dc2d6f14c1e89d3f8aaf81dcc79146c063c1b62b52a3923f1dec0ec9" + "ad4d83741b4460ab72eac597e9f4d5235874315d65cb6e336c1eeedbb076e1ee", + "85d92bd272ce2be6e8e5a1d1777fab6ed0c335b5e09f2cb116fb24d106f95ecc", + "9d9f07f52e891f146904c4051984f5497f83963104991e6b186bb1ba333b16fa" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b" - ] + "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0": { + "opid": "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3", + "vin": 0 + } }, "knownTransitions": { - "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b": { + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "8f8ac47ea084bdff5550df2b43427cafc2aa6177f7043a855046a59e3c6f1a16", - "ty": 4000, - "no": 0 - } + "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0" ], "assignments": { "4000": { @@ -272,7 +263,7 @@ "seal": { "txid": null, "vout": 1, - "blinding": 17520881827267755355 + "blinding": 1621579500098964609 }, "state": 666 } diff --git a/tests/fixtures/attack_genesis_schema_id.json b/tests/fixtures/attack_genesis_schema_id.json index 1d3b9e9..8bcadc7 100644 --- a/tests/fixtures/attack_genesis_schema_id.json +++ b/tests/fixtures/attack_genesis_schema_id.json @@ -5,7 +5,7 @@ "genesis": { "ffv": 0, "schemaId": "rgb:sch:JgqK5hJX9YBT4osCV7VcW_iLTcA5csUCnLzvaKTTrNY#mars-house-friend", - "timestamp": 1747745161, + "timestamp": 1749656450, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -27,9 +27,9 @@ "items": [ { "seal": { - "txid": "2697bf250bfbfdf0232329e1c4d504df0a3afc7f155372c8344d14aa477978eb", - "vout": 1, - "blinding": 18077556918557531948 + "txid": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b", + "vout": 0, + "blinding": 17895031244968614113 }, "state": 666 } @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "5f61c1f5db43f98b2274e90babd90e085f9089aa48b7aa685f78ad930142d5a9:2", + "prevOutput": "89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e:2", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20f165d1e9ce1ee99e0c26a614b060b8ba964d053de9d2591d27fda3a42c4a06ea" + "scriptPubkey": "6a204a4b4d4611884f9832b8aeb64025c3e9b5c866be5a6cdeba1f4f009d9bef235d" }, { "value": 9000, - "scriptPubkey": "0014de56a95f365f2fdfac59c996d911807643318d45" + "scriptPubkey": "00146a1e500c8762e09a8b8961393ffe4519d1921ce1" }, { - "value": 99981200, - "scriptPubkey": "00140721467af22eceb7c10669839340d36b0550fb51" + "value": 99971800, + "scriptPubkey": "0014da5d6c5e6a83d234c0911eef61280036dce4c54d" } ], "lockTime": 0 @@ -69,36 +69,33 @@ }, "anchor": { "mpcProof": { - "pos": 4, + "pos": 7, "cofactor": 0, "path": [ - "8b8e51703db9bdaf371d1f24e825bede7f195f4eddf9d8ee91a732e366f2fa22", - "a175c03717869069a81353f65ac325b9ae8420d68003a26e5c226fc94650b1cb", - "5fca309f0aa9feb868fa5ef4419252f16fe9370ed7ca2fb2b18a4e631eea6b22" + "4ad99e92d609abd88b853448fb9a9f87be21d42cbe0ff9a036f327aa65f8b116", + "2add6a2e6f7d48401c7eed97095c7951990f13ae01466ea76ab44bccc53cdcfa", + "9ff8806a515fdd5428b1ef85c33a9e748d7bd00344e43b3928a3c414e8ad9341" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "84743251f680efd86179366bba1a12b3bef3a0325dd35845e59337a7cc7b63b4" - ] + "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1": { + "opid": "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7", + "vin": 0 + } }, "knownTransitions": { - "84743251f680efd86179366bba1a12b3bef3a0325dd35845e59337a7cc7b63b4": { + "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7": { "ffv": 0, - "contractId": "rgb:3Ntlsi8s-tO5MCpn-CRud6eQ-tX8uhBN-P8ShtN7-QNYdrGc", + "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "e70b34e8fa9f851fa4061e8c75b2364b5f45c20fa3d4b5acdc572e8fd7413c26", - "ty": 4000, - "no": 0 - } + "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1" ], "assignments": { "4000": { @@ -108,17 +105,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 1635815392667104294 + "blinding": 3341417704379563898 }, - "state": 50 + "state": 77 }, { "seal": { "txid": null, "vout": 2, - "blinding": 2032282526052071825 + "blinding": 2986445335723771268 }, - "state": 616 + "state": 539 } ] } @@ -134,7 +131,7 @@ "version": 2, "inputs": [ { - "prevOutput": "2697bf250bfbfdf0232329e1c4d504df0a3afc7f155372c8344d14aa477978eb:1", + "prevOutput": "04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac:2", "sigScript": "", "sequence": 0, "witness": [] @@ -143,15 +140,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a207d21d8c4829a93e3b28dc2624ce854dec0393025b252c884e15020be1fafa949" + "scriptPubkey": "6a2092035eb78e0b8d589e95e274fb69c85645efbbb091220a25ba23f093d1139705" }, { "value": 9000, - "scriptPubkey": "001402bff690f27911f8412cb4047779ebd9eea228db" + "scriptPubkey": "001478e18e564017d7ff3fc6dcbd994c0bb118bc77dc" }, { - "value": 99990600, - "scriptPubkey": "0014b31d8f364e330e328c0ab1baed3adb3873e3d9bb" + "value": 99981200, + "scriptPubkey": "0014e3a0a519a66f044f13c254db465eed969328bea8" } ], "lockTime": 0 @@ -159,48 +156,53 @@ }, "anchor": { "mpcProof": { - "pos": 4, + "pos": 7, "cofactor": 0, "path": [ - "688ed0d51c1f2d7e3d6a7eb2a2a047d931838c752b6e45e0f426fff55f9d3a84", - "2da91d03506ba70b5db5ff1bb090139a00c5db85793f4b24b1bb428c17718d24", - "3a65fcfd4ef2917c6d514fde2c49a6a226a7ce44d842d70332668f502412a8f3" + "e88b9afd394efeae404cff2591d02e9e204466ad0b47c888eb59551c9889158c", + "42967c9a1f5d1af028b31735da12edd1c8a826aea92b841424f3ba8ee1c98904", + "95828c4b34b82d4bd7e6525d86d0bbde089ad7adb6d692d213b1d3e00babf50f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "e70b34e8fa9f851fa4061e8c75b2364b5f45c20fa3d4b5acdc572e8fd7413c26" - ] + "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0": { + "opid": "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e", + "vin": 0 + } }, "knownTransitions": { - "e70b34e8fa9f851fa4061e8c75b2364b5f45c20fa3d4b5acdc572e8fd7413c26": { + "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e": { "ffv": 0, - "contractId": "rgb:3Ntlsi8s-tO5MCpn-CRud6eQ-tX8uhBN-P8ShtN7-QNYdrGc", + "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "dcdb65b22f2cb4ee4c0a99c246e77a790b57f2e84134ff1286d37b40d61dac67", - "ty": 4000, - "no": 0 - } + "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0" ], "assignments": { "4000": { "type": "fungible", "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 15557645237552166780 + }, + "state": 50 + }, { "seal": { "txid": null, "vout": 2, - "blinding": 16601173385335492688 + "blinding": 3366345153327845559 }, - "state": 666 + "state": 616 } ] } @@ -216,7 +218,7 @@ "version": 2, "inputs": [ { - "prevOutput": "5259f55018e26bf50bfa1813e1e174710b368ac6e196f15a280388b429a31a54:2", + "prevOutput": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b:0", "sigScript": "", "sequence": 0, "witness": [] @@ -225,15 +227,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a2004a2379274e2e46d4728b9f77e41fd50fe11c16fb407256f3240b39178c10e43" + "scriptPubkey": "6a20d1f74348ed624cc8702cf25a7f883f5bbf958a4d8fb3b7902bc09aa77f25d3b8" }, { "value": 9000, - "scriptPubkey": "00147cc7738422dd879427daa2facf25fd9aa052593f" + "scriptPubkey": "001495d77ee93015b69a23bb4d0d27c31559a62318b6" }, { - "value": 99971800, - "scriptPubkey": "00140af5321f1a7064480f0cedb1531cea66254329f8" + "value": 99990600, + "scriptPubkey": "00145799f04cab25bc03964912c755587688af302ba7" } ], "lockTime": 0 @@ -241,56 +243,45 @@ }, "anchor": { "mpcProof": { - "pos": 4, + "pos": 7, "cofactor": 0, "path": [ - "5f044994a45a923dc171e42054ad3a716cedfb03d20cac4aabbabb797f58fa0d", - "0af457bc1888e4dbf7788ecb06411ebd352bcca74dee3f2304ef7d53c9fd8ab8", - "2f6dea82c781e92c1142d4a7d1be4bb27e0ffb91fab718918c51bdc812db66a5" + "20ef039e8ed1a59a5083b7b48c97b3d2c09aa54bfb5d0ec370ded3718a019937", + "a45ec220a158ee11474aed9e7290d2f254831c885a49e6e6a93c31832ef8fdbc", + "5250d7ca61b0870cdd896d01984ceead2f28fb76eeb7acc66bbc511020bdc70e" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "c8f4df6ae56b0c00a8d5747beea427d38319ab8fe85069a0634cf69a88fa67a0" - ] + "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0": { + "opid": "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16", + "vin": 0 + } }, "knownTransitions": { - "c8f4df6ae56b0c00a8d5747beea427d38319ab8fe85069a0634cf69a88fa67a0": { + "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16": { "ffv": 0, - "contractId": "rgb:3Ntlsi8s-tO5MCpn-CRud6eQ-tX8uhBN-P8ShtN7-QNYdrGc", + "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "84743251f680efd86179366bba1a12b3bef3a0325dd35845e59337a7cc7b63b4", - "ty": 4000, - "no": 1 - } + "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0" ], "assignments": { "4000": { "type": "fungible", "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 14130614574817494517 - }, - "state": 77 - }, { "seal": { "txid": null, "vout": 2, - "blinding": 7391128784690907900 + "blinding": 17064100245782478357 }, - "state": 539 + "state": 666 } ] } diff --git a/tests/fixtures/attack_genesis_testnet.json b/tests/fixtures/attack_genesis_testnet.json index 82649bd..11c5c78 100644 --- a/tests/fixtures/attack_genesis_testnet.json +++ b/tests/fixtures/attack_genesis_testnet.json @@ -5,7 +5,7 @@ "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1747745161, + "timestamp": 1749656450, "issuer": "ssi:anonymous", "chainNet": "bitcoinMainnet", "sealClosingStrategy": "firstOpretOrTapret", @@ -27,9 +27,9 @@ "items": [ { "seal": { - "txid": "2697bf250bfbfdf0232329e1c4d504df0a3afc7f155372c8344d14aa477978eb", - "vout": 1, - "blinding": 18077556918557531948 + "txid": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b", + "vout": 0, + "blinding": 17895031244968614113 }, "state": 666 } @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "5f61c1f5db43f98b2274e90babd90e085f9089aa48b7aa685f78ad930142d5a9:2", + "prevOutput": "89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e:2", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20f165d1e9ce1ee99e0c26a614b060b8ba964d053de9d2591d27fda3a42c4a06ea" + "scriptPubkey": "6a204a4b4d4611884f9832b8aeb64025c3e9b5c866be5a6cdeba1f4f009d9bef235d" }, { "value": 9000, - "scriptPubkey": "0014de56a95f365f2fdfac59c996d911807643318d45" + "scriptPubkey": "00146a1e500c8762e09a8b8961393ffe4519d1921ce1" }, { - "value": 99981200, - "scriptPubkey": "00140721467af22eceb7c10669839340d36b0550fb51" + "value": 99971800, + "scriptPubkey": "0014da5d6c5e6a83d234c0911eef61280036dce4c54d" } ], "lockTime": 0 @@ -69,36 +69,33 @@ }, "anchor": { "mpcProof": { - "pos": 4, + "pos": 7, "cofactor": 0, "path": [ - "8b8e51703db9bdaf371d1f24e825bede7f195f4eddf9d8ee91a732e366f2fa22", - "a175c03717869069a81353f65ac325b9ae8420d68003a26e5c226fc94650b1cb", - "5fca309f0aa9feb868fa5ef4419252f16fe9370ed7ca2fb2b18a4e631eea6b22" + "4ad99e92d609abd88b853448fb9a9f87be21d42cbe0ff9a036f327aa65f8b116", + "2add6a2e6f7d48401c7eed97095c7951990f13ae01466ea76ab44bccc53cdcfa", + "9ff8806a515fdd5428b1ef85c33a9e748d7bd00344e43b3928a3c414e8ad9341" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "84743251f680efd86179366bba1a12b3bef3a0325dd35845e59337a7cc7b63b4" - ] + "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1": { + "opid": "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7", + "vin": 0 + } }, "knownTransitions": { - "84743251f680efd86179366bba1a12b3bef3a0325dd35845e59337a7cc7b63b4": { + "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7": { "ffv": 0, - "contractId": "rgb:3Ntlsi8s-tO5MCpn-CRud6eQ-tX8uhBN-P8ShtN7-QNYdrGc", + "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "e70b34e8fa9f851fa4061e8c75b2364b5f45c20fa3d4b5acdc572e8fd7413c26", - "ty": 4000, - "no": 0 - } + "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1" ], "assignments": { "4000": { @@ -108,17 +105,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 1635815392667104294 + "blinding": 3341417704379563898 }, - "state": 50 + "state": 77 }, { "seal": { "txid": null, "vout": 2, - "blinding": 2032282526052071825 + "blinding": 2986445335723771268 }, - "state": 616 + "state": 539 } ] } @@ -134,7 +131,7 @@ "version": 2, "inputs": [ { - "prevOutput": "2697bf250bfbfdf0232329e1c4d504df0a3afc7f155372c8344d14aa477978eb:1", + "prevOutput": "04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac:2", "sigScript": "", "sequence": 0, "witness": [] @@ -143,15 +140,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a207d21d8c4829a93e3b28dc2624ce854dec0393025b252c884e15020be1fafa949" + "scriptPubkey": "6a2092035eb78e0b8d589e95e274fb69c85645efbbb091220a25ba23f093d1139705" }, { "value": 9000, - "scriptPubkey": "001402bff690f27911f8412cb4047779ebd9eea228db" + "scriptPubkey": "001478e18e564017d7ff3fc6dcbd994c0bb118bc77dc" }, { - "value": 99990600, - "scriptPubkey": "0014b31d8f364e330e328c0ab1baed3adb3873e3d9bb" + "value": 99981200, + "scriptPubkey": "0014e3a0a519a66f044f13c254db465eed969328bea8" } ], "lockTime": 0 @@ -159,48 +156,53 @@ }, "anchor": { "mpcProof": { - "pos": 4, + "pos": 7, "cofactor": 0, "path": [ - "688ed0d51c1f2d7e3d6a7eb2a2a047d931838c752b6e45e0f426fff55f9d3a84", - "2da91d03506ba70b5db5ff1bb090139a00c5db85793f4b24b1bb428c17718d24", - "3a65fcfd4ef2917c6d514fde2c49a6a226a7ce44d842d70332668f502412a8f3" + "e88b9afd394efeae404cff2591d02e9e204466ad0b47c888eb59551c9889158c", + "42967c9a1f5d1af028b31735da12edd1c8a826aea92b841424f3ba8ee1c98904", + "95828c4b34b82d4bd7e6525d86d0bbde089ad7adb6d692d213b1d3e00babf50f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "e70b34e8fa9f851fa4061e8c75b2364b5f45c20fa3d4b5acdc572e8fd7413c26" - ] + "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0": { + "opid": "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e", + "vin": 0 + } }, "knownTransitions": { - "e70b34e8fa9f851fa4061e8c75b2364b5f45c20fa3d4b5acdc572e8fd7413c26": { + "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e": { "ffv": 0, - "contractId": "rgb:3Ntlsi8s-tO5MCpn-CRud6eQ-tX8uhBN-P8ShtN7-QNYdrGc", + "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "dcdb65b22f2cb4ee4c0a99c246e77a790b57f2e84134ff1286d37b40d61dac67", - "ty": 4000, - "no": 0 - } + "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0" ], "assignments": { "4000": { "type": "fungible", "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 15557645237552166780 + }, + "state": 50 + }, { "seal": { "txid": null, "vout": 2, - "blinding": 16601173385335492688 + "blinding": 3366345153327845559 }, - "state": 666 + "state": 616 } ] } @@ -216,7 +218,7 @@ "version": 2, "inputs": [ { - "prevOutput": "5259f55018e26bf50bfa1813e1e174710b368ac6e196f15a280388b429a31a54:2", + "prevOutput": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b:0", "sigScript": "", "sequence": 0, "witness": [] @@ -225,15 +227,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a2004a2379274e2e46d4728b9f77e41fd50fe11c16fb407256f3240b39178c10e43" + "scriptPubkey": "6a20d1f74348ed624cc8702cf25a7f883f5bbf958a4d8fb3b7902bc09aa77f25d3b8" }, { "value": 9000, - "scriptPubkey": "00147cc7738422dd879427daa2facf25fd9aa052593f" + "scriptPubkey": "001495d77ee93015b69a23bb4d0d27c31559a62318b6" }, { - "value": 99971800, - "scriptPubkey": "00140af5321f1a7064480f0cedb1531cea66254329f8" + "value": 99990600, + "scriptPubkey": "00145799f04cab25bc03964912c755587688af302ba7" } ], "lockTime": 0 @@ -241,56 +243,45 @@ }, "anchor": { "mpcProof": { - "pos": 4, + "pos": 7, "cofactor": 0, "path": [ - "5f044994a45a923dc171e42054ad3a716cedfb03d20cac4aabbabb797f58fa0d", - "0af457bc1888e4dbf7788ecb06411ebd352bcca74dee3f2304ef7d53c9fd8ab8", - "2f6dea82c781e92c1142d4a7d1be4bb27e0ffb91fab718918c51bdc812db66a5" + "20ef039e8ed1a59a5083b7b48c97b3d2c09aa54bfb5d0ec370ded3718a019937", + "a45ec220a158ee11474aed9e7290d2f254831c885a49e6e6a93c31832ef8fdbc", + "5250d7ca61b0870cdd896d01984ceead2f28fb76eeb7acc66bbc511020bdc70e" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "c8f4df6ae56b0c00a8d5747beea427d38319ab8fe85069a0634cf69a88fa67a0" - ] + "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0": { + "opid": "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16", + "vin": 0 + } }, "knownTransitions": { - "c8f4df6ae56b0c00a8d5747beea427d38319ab8fe85069a0634cf69a88fa67a0": { + "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16": { "ffv": 0, - "contractId": "rgb:3Ntlsi8s-tO5MCpn-CRud6eQ-tX8uhBN-P8ShtN7-QNYdrGc", + "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "84743251f680efd86179366bba1a12b3bef3a0325dd35845e59337a7cc7b63b4", - "ty": 4000, - "no": 1 - } + "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0" ], "assignments": { "4000": { "type": "fungible", "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 14130614574817494517 - }, - "state": 77 - }, { "seal": { "txid": null, "vout": 2, - "blinding": 7391128784690907900 + "blinding": 17064100245782478357 }, - "state": 539 + "state": 666 } ] } diff --git a/tests/fixtures/attack_resolver_error.json b/tests/fixtures/attack_resolver_error.json index da463f4..fb77ed6 100644 --- a/tests/fixtures/attack_resolver_error.json +++ b/tests/fixtures/attack_resolver_error.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "9d4b73f7964529cfd46536f640c40d0ec5ac20bff54e00f7d101b26c16dfae13": [ - "e651af63e80c3584261ab1ce5fde181c730df2baed13569aa3620953ddd140f0" + "9501603f11b556960982c9a59a67457659d16fc7837580feeba5a84f7ff18d61": [ + "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1747745043, + "timestamp": 1749656356, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "aedcde1133e96fdb1a130b5f3899d2a5932ff3d05378c0455f9c858fe7c5ec13", - "vout": 1, - "blinding": 13113921856262959977 + "txid": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114", + "vout": 0, + "blinding": 13403777090925923396 }, "state": 666 } @@ -44,61 +44,37 @@ "bundles": [ { "pubWitness": { - "tx": { - "version": 2, - "inputs": [ - { - "prevOutput": "c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9:1", - "sigScript": "", - "sequence": 0, - "witness": [] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20f75dffbafa81de29f1b767a81f47e9ace789223e6854b388c8ff72b480e9bc65" - }, - { - "value": 99998800, - "scriptPubkey": "0014a6558396fcd09a1cb1773b09e9a7033ffe5f7843" - } - ], - "lockTime": 0 - } + "txid": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23" }, "anchor": { "mpcProof": { "pos": 7, "cofactor": 0, "path": [ - "7584c919969fced81f6309b7a6d817e0e2bc6240e5b41759d90719efec4235c3", - "048867a3370db6815e3a90093e0f3e8a16f19c39953e91af5bb426ab2a3aabfd", - "ad31b376af0d04b0f5088abf077b405cad2f9b9760e0c27dddc463cdad289af2" + "3d06f069df3591e9bb393f22c2769f69922af67530282c2a5fb2d9d208592d68", + "4ea051dddb9739f467250fa6c1926bed02c59ecb8586163d2d17beefcb53c2c1", + "44b2530248e67c0c51d56fa2a7bf309c1db4931263787fcd2f5a8062a48b8fa3" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "a6af59b5b69fbbc490683801a2174ceb9d0531de9133da0aac2350d439a78291" - ] + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0": { + "opid": "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a", + "vin": 0 + } }, "knownTransitions": { - "a6af59b5b69fbbc490683801a2174ceb9d0531de9133da0aac2350d439a78291": { + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d", - "ty": 4000, - "no": 0 - } + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0" ], "assignments": { "4000": { @@ -108,13 +84,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 12961427178433477692 + "blinding": 11344773579385591986 }, - "state": 539 + "state": 616 }, { - "seal": "e651af63e80c3584261ab1ce5fde181c730df2baed13569aa3620953ddd140f0", - "state": 77 + "seal": "fb0e03fdc93227c9097b335c4975ceab4d05bf4e3f70f739c2a9c27242656612", + "state": 50 } ] } @@ -126,40 +102,58 @@ }, { "pubWitness": { - "txid": "c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9" + "tx": { + "version": 2, + "inputs": [ + { + "prevOutput": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23:1", + "sigScript": "", + "sequence": 0, + "witness": [] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20a382ff389fcaed42c49a09965bb2d657b722ea61b1b07113e8fc74eedc812095" + }, + { + "value": 99998800, + "scriptPubkey": "0014d0d404b911357c63e508828bb2fa85a6127c6eb1" + } + ], + "lockTime": 0 + } }, "anchor": { "mpcProof": { "pos": 7, "cofactor": 0, "path": [ - "e194ceb0f09362d49969e8f4ddfee873ac6760ede382351fdead1dab3c0ab0d0", - "9bfdf671b70582032db385ec98c07f01060ff467918a9a812cf6c00bedb22180", - "e04fcb9eaf2a716f7c0c5e3a538cc3ed4580b3ae2e658fe0d2eef9e46fd952a6" + "bded953a2adc2c0981c4108b0b975d90e231f205ad0a88a56fc67de85ec5f18c", + "edc41e3179b85dcf7f4799a7941921310566cb419b975e2b303b3ec1e2196fa5", + "8153eb1c8e99ab980d78fbb2878eadb6c9cd388ad4cd5d700860dea09554290f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d" - ] + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0": { + "opid": "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241", + "vin": 0 + } }, "knownTransitions": { - "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d": { + "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b", - "ty": 4000, - "no": 0 - } + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0" ], "assignments": { "4000": { @@ -169,13 +163,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 10003067900325773186 + "blinding": 4544899145095694536 }, - "state": 616 + "state": 539 }, { - "seal": "18a82040f68755c128b28eacdb9af7c8a0bed32b2a52f5dcba6c45b51d83bdf3", - "state": 50 + "seal": "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145", + "state": 77 } ] } @@ -191,7 +185,7 @@ "version": 2, "inputs": [ { - "prevOutput": "aedcde1133e96fdb1a130b5f3899d2a5932ff3d05378c0455f9c858fe7c5ec13:1", + "prevOutput": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114:0", "sigScript": "", "sequence": 0, "witness": [] @@ -200,11 +194,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a204bba687d2198a9a049b75255ea3fbdf5b648437ffb7757c258a95cb1232a5fa6" + "scriptPubkey": "6a20fa6b63d4c8402175d6ef2c85617dee6434247cc8c762ee24243dc567b25a72e9" }, { "value": 99999600, - "scriptPubkey": "00149aeec847f99c80464389ed96e80de8bb147d6227" + "scriptPubkey": "0014bb5dff0b3584c4f838146f34e96f310f3e5c4028" } ], "lockTime": 0 @@ -215,33 +209,30 @@ "pos": 7, "cofactor": 0, "path": [ - "315234829e1fd969c450b5651cd33d9282c081dc7f87cb7f321e34186ed2a476", - "6efee2e679ba3987921bbdb3ff2b5c254d823072fed90a7f661c82e5a9b97363", - "2608cec7dc2d6f14c1e89d3f8aaf81dcc79146c063c1b62b52a3923f1dec0ec9" + "ad4d83741b4460ab72eac597e9f4d5235874315d65cb6e336c1eeedbb076e1ee", + "85d92bd272ce2be6e8e5a1d1777fab6ed0c335b5e09f2cb116fb24d106f95ecc", + "9d9f07f52e891f146904c4051984f5497f83963104991e6b186bb1ba333b16fa" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b" - ] + "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0": { + "opid": "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3", + "vin": 0 + } }, "knownTransitions": { - "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b": { + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "8f8ac47ea084bdff5550df2b43427cafc2aa6177f7043a855046a59e3c6f1a16", - "ty": 4000, - "no": 0 - } + "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0" ], "assignments": { "4000": { @@ -251,7 +242,7 @@ "seal": { "txid": null, "vout": 1, - "blinding": 17520881827267755355 + "blinding": 1621579500098964609 }, "state": 666 } diff --git a/tests/fixtures/b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9.json b/tests/fixtures/b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9.json new file mode 100644 index 0000000..4cc86f0 --- /dev/null +++ b/tests/fixtures/b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114:0", + "sigScript": "", + "sequence": 0, + "witness": [ + "3045022100ccfa5dd48e15198fb6ede8d4f9aa9b51679d8135511a14b504db5af24402bc10022010e1f12346ae23160ea0479a3e46d04f239b329f82b8063e1462e640024cf23301", + "02ec8110692a94f33a4d49a3014df1f627fc21a928e71ccd659545a08e1d060466" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20fa6b63d4c8402175d6ef2c85617dee6434247cc8c762ee24243dc567b25a72e9" + }, + { + "value": 99999600, + "scriptPubkey": "0014bb5dff0b3584c4f838146f34e96f310f3e5c4028" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/b7729e80544704769c690e6c5d4f103d0183eba1ef2b81fa4f41158697dd4b2a.json b/tests/fixtures/b7729e80544704769c690e6c5d4f103d0183eba1ef2b81fa4f41158697dd4b2a.json deleted file mode 100644 index 207973a..0000000 --- a/tests/fixtures/b7729e80544704769c690e6c5d4f103d0183eba1ef2b81fa4f41158697dd4b2a.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9:1", - "sigScript": "", - "sequence": 0, - "witness": [ - "304402201ad61d49194d3929a808a7ba14d241f7c5d639d81dfefe09b4590031579ca9d70220266072217f643745da25d1225efdab6b2ba61972fb01cffa880675ee6836b1a101", - "02ee092d5390cfe8ae0c2113d6a85e6f52d2a7037c43fea99aa436350ca8eefa2a" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20f75dffbafa81de29f1b767a81f47e9ace789223e6854b388c8ff72b480e9bc65" - }, - { - "value": 99998800, - "scriptPubkey": "0014a6558396fcd09a1cb1773b09e9a7033ffe5f7843" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9.json b/tests/fixtures/c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9.json deleted file mode 100644 index e5dadcf..0000000 --- a/tests/fixtures/c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "e68c51aede5479db97384efe8f3d0d4aadbc4dca96923ab821c837713140f1d0:1", - "sigScript": "", - "sequence": 0, - "witness": [ - "304502210082ae1a665793ab4d7553e4e1f556a6cecd685bfce0c4e713cd15b840be74ee4c02202380d1129f7319a3d3a457a46d066f1950d51f39c1017b216804829401a5837b01", - "02b6a3a109661cde313199439e0c316f786cc1406add7224bcee32609373f2323f" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a201f129c99327c5cd54125d7c2091bb8962bf04147254459a38070587e1349d89c" - }, - { - "value": 99999200, - "scriptPubkey": "001438ef9ad1ee0663a43b8b30a7c1d4705f071779db" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/consignment_A.json b/tests/fixtures/consignment_A.json index 80dc750..1429b48 100644 --- a/tests/fixtures/consignment_A.json +++ b/tests/fixtures/consignment_A.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "9d4b73f7964529cfd46536f640c40d0ec5ac20bff54e00f7d101b26c16dfae13": [ - "e651af63e80c3584261ab1ce5fde181c730df2baed13569aa3620953ddd140f0" + "9501603f11b556960982c9a59a67457659d16fc7837580feeba5a84f7ff18d61": [ + "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1747745043, + "timestamp": 1749656356, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "aedcde1133e96fdb1a130b5f3899d2a5932ff3d05378c0455f9c858fe7c5ec13", - "vout": 1, - "blinding": 13113921856262959977 + "txid": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114", + "vout": 0, + "blinding": 13403777090925923396 }, "state": 666 } @@ -48,7 +48,7 @@ "version": 2, "inputs": [ { - "prevOutput": "c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9:1", + "prevOutput": "b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9:1", "sigScript": "", "sequence": 0, "witness": [] @@ -57,11 +57,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20f75dffbafa81de29f1b767a81f47e9ace789223e6854b388c8ff72b480e9bc65" + "scriptPubkey": "6a20a9b8418b25785eb52dd485ec0eff0f4713d95219c288a9bcb1e6705cb84edafd" }, { - "value": 99998800, - "scriptPubkey": "0014a6558396fcd09a1cb1773b09e9a7033ffe5f7843" + "value": 99999200, + "scriptPubkey": "0014adbea30c365d0509278cf035fb756c92fb96854e" } ], "lockTime": 0 @@ -72,33 +72,30 @@ "pos": 7, "cofactor": 0, "path": [ - "7584c919969fced81f6309b7a6d817e0e2bc6240e5b41759d90719efec4235c3", - "048867a3370db6815e3a90093e0f3e8a16f19c39953e91af5bb426ab2a3aabfd", - "ad31b376af0d04b0f5088abf077b405cad2f9b9760e0c27dddc463cdad289af2" + "3d06f069df3591e9bb393f22c2769f69922af67530282c2a5fb2d9d208592d68", + "4ea051dddb9739f467250fa6c1926bed02c59ecb8586163d2d17beefcb53c2c1", + "44b2530248e67c0c51d56fa2a7bf309c1db4931263787fcd2f5a8062a48b8fa3" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "a6af59b5b69fbbc490683801a2174ceb9d0531de9133da0aac2350d439a78291" - ] + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0": { + "opid": "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a", + "vin": 0 + } }, "knownTransitions": { - "a6af59b5b69fbbc490683801a2174ceb9d0531de9133da0aac2350d439a78291": { + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d", - "ty": 4000, - "no": 0 - } + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0" ], "assignments": { "4000": { @@ -108,13 +105,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 12961427178433477692 + "blinding": 11344773579385591986 }, - "state": 539 + "state": 616 }, { - "seal": "e651af63e80c3584261ab1ce5fde181c730df2baed13569aa3620953ddd140f0", - "state": 77 + "seal": "fb0e03fdc93227c9097b335c4975ceab4d05bf4e3f70f739c2a9c27242656612", + "state": 50 } ] } @@ -130,7 +127,7 @@ "version": 2, "inputs": [ { - "prevOutput": "e68c51aede5479db97384efe8f3d0d4aadbc4dca96923ab821c837713140f1d0:1", + "prevOutput": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23:1", "sigScript": "", "sequence": 0, "witness": [] @@ -139,11 +136,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a201f129c99327c5cd54125d7c2091bb8962bf04147254459a38070587e1349d89c" + "scriptPubkey": "6a20a382ff389fcaed42c49a09965bb2d657b722ea61b1b07113e8fc74eedc812095" }, { - "value": 99999200, - "scriptPubkey": "001438ef9ad1ee0663a43b8b30a7c1d4705f071779db" + "value": 99998800, + "scriptPubkey": "0014d0d404b911357c63e508828bb2fa85a6127c6eb1" } ], "lockTime": 0 @@ -154,33 +151,30 @@ "pos": 7, "cofactor": 0, "path": [ - "e194ceb0f09362d49969e8f4ddfee873ac6760ede382351fdead1dab3c0ab0d0", - "9bfdf671b70582032db385ec98c07f01060ff467918a9a812cf6c00bedb22180", - "e04fcb9eaf2a716f7c0c5e3a538cc3ed4580b3ae2e658fe0d2eef9e46fd952a6" + "bded953a2adc2c0981c4108b0b975d90e231f205ad0a88a56fc67de85ec5f18c", + "edc41e3179b85dcf7f4799a7941921310566cb419b975e2b303b3ec1e2196fa5", + "8153eb1c8e99ab980d78fbb2878eadb6c9cd388ad4cd5d700860dea09554290f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d" - ] + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0": { + "opid": "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241", + "vin": 0 + } }, "knownTransitions": { - "f80fa0989d0776589f621bbe2bce3b3ef50ccb50a9001b458623a433494f686d": { + "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b", - "ty": 4000, - "no": 0 - } + "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0" ], "assignments": { "4000": { @@ -190,13 +184,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 10003067900325773186 + "blinding": 4544899145095694536 }, - "state": 616 + "state": 539 }, { - "seal": "18a82040f68755c128b28eacdb9af7c8a0bed32b2a52f5dcba6c45b51d83bdf3", - "state": 50 + "seal": "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145", + "state": 77 } ] } @@ -212,7 +206,7 @@ "version": 2, "inputs": [ { - "prevOutput": "aedcde1133e96fdb1a130b5f3899d2a5932ff3d05378c0455f9c858fe7c5ec13:1", + "prevOutput": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114:0", "sigScript": "", "sequence": 0, "witness": [] @@ -221,11 +215,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a204bba687d2198a9a049b75255ea3fbdf5b648437ffb7757c258a95cb1232a5fa6" + "scriptPubkey": "6a20fa6b63d4c8402175d6ef2c85617dee6434247cc8c762ee24243dc567b25a72e9" }, { "value": 99999600, - "scriptPubkey": "00149aeec847f99c80464389ed96e80de8bb147d6227" + "scriptPubkey": "0014bb5dff0b3584c4f838146f34e96f310f3e5c4028" } ], "lockTime": 0 @@ -236,33 +230,30 @@ "pos": 7, "cofactor": 0, "path": [ - "315234829e1fd969c450b5651cd33d9282c081dc7f87cb7f321e34186ed2a476", - "6efee2e679ba3987921bbdb3ff2b5c254d823072fed90a7f661c82e5a9b97363", - "2608cec7dc2d6f14c1e89d3f8aaf81dcc79146c063c1b62b52a3923f1dec0ec9" + "ad4d83741b4460ab72eac597e9f4d5235874315d65cb6e336c1eeedbb076e1ee", + "85d92bd272ce2be6e8e5a1d1777fab6ed0c335b5e09f2cb116fb24d106f95ecc", + "9d9f07f52e891f146904c4051984f5497f83963104991e6b186bb1ba333b16fa" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b" - ] + "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0": { + "opid": "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3", + "vin": 0 + } }, "knownTransitions": { - "1fed9153734dabd6c81a45116e198bd6bb8002cba7dcd5fdb6e152bb99867f6b": { + "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3": { "ffv": 0, - "contractId": "rgb:j4rEfqCE-vf9VUN8-rQ0J8r8-KqYXf3B-DqFUEal-njxvGhY", + "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "8f8ac47ea084bdff5550df2b43427cafc2aa6177f7043a855046a59e3c6f1a16", - "ty": 4000, - "no": 0 - } + "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0" ], "assignments": { "4000": { @@ -272,7 +263,7 @@ "seal": { "txid": null, "vout": 1, - "blinding": 17520881827267755355 + "blinding": 1621579500098964609 }, "state": 666 } diff --git a/tests/fixtures/consignment_B.json b/tests/fixtures/consignment_B.json index babebab..7489dbe 100644 --- a/tests/fixtures/consignment_B.json +++ b/tests/fixtures/consignment_B.json @@ -5,7 +5,7 @@ "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1747745161, + "timestamp": 1749656450, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -27,9 +27,9 @@ "items": [ { "seal": { - "txid": "2697bf250bfbfdf0232329e1c4d504df0a3afc7f155372c8344d14aa477978eb", - "vout": 1, - "blinding": 18077556918557531948 + "txid": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b", + "vout": 0, + "blinding": 17895031244968614113 }, "state": 666 } @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "5f61c1f5db43f98b2274e90babd90e085f9089aa48b7aa685f78ad930142d5a9:2", + "prevOutput": "89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e:2", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20f165d1e9ce1ee99e0c26a614b060b8ba964d053de9d2591d27fda3a42c4a06ea" + "scriptPubkey": "6a204a4b4d4611884f9832b8aeb64025c3e9b5c866be5a6cdeba1f4f009d9bef235d" }, { "value": 9000, - "scriptPubkey": "0014de56a95f365f2fdfac59c996d911807643318d45" + "scriptPubkey": "00146a1e500c8762e09a8b8961393ffe4519d1921ce1" }, { - "value": 99981200, - "scriptPubkey": "00140721467af22eceb7c10669839340d36b0550fb51" + "value": 99971800, + "scriptPubkey": "0014da5d6c5e6a83d234c0911eef61280036dce4c54d" } ], "lockTime": 0 @@ -69,36 +69,33 @@ }, "anchor": { "mpcProof": { - "pos": 4, + "pos": 7, "cofactor": 0, "path": [ - "8b8e51703db9bdaf371d1f24e825bede7f195f4eddf9d8ee91a732e366f2fa22", - "a175c03717869069a81353f65ac325b9ae8420d68003a26e5c226fc94650b1cb", - "5fca309f0aa9feb868fa5ef4419252f16fe9370ed7ca2fb2b18a4e631eea6b22" + "4ad99e92d609abd88b853448fb9a9f87be21d42cbe0ff9a036f327aa65f8b116", + "2add6a2e6f7d48401c7eed97095c7951990f13ae01466ea76ab44bccc53cdcfa", + "9ff8806a515fdd5428b1ef85c33a9e748d7bd00344e43b3928a3c414e8ad9341" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "84743251f680efd86179366bba1a12b3bef3a0325dd35845e59337a7cc7b63b4" - ] + "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1": { + "opid": "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7", + "vin": 0 + } }, "knownTransitions": { - "84743251f680efd86179366bba1a12b3bef3a0325dd35845e59337a7cc7b63b4": { + "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7": { "ffv": 0, - "contractId": "rgb:3Ntlsi8s-tO5MCpn-CRud6eQ-tX8uhBN-P8ShtN7-QNYdrGc", + "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "e70b34e8fa9f851fa4061e8c75b2364b5f45c20fa3d4b5acdc572e8fd7413c26", - "ty": 4000, - "no": 0 - } + "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1" ], "assignments": { "4000": { @@ -108,17 +105,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 1635815392667104294 + "blinding": 3341417704379563898 }, - "state": 50 + "state": 77 }, { "seal": { "txid": null, "vout": 2, - "blinding": 2032282526052071825 + "blinding": 2986445335723771268 }, - "state": 616 + "state": 539 } ] } @@ -134,7 +131,7 @@ "version": 2, "inputs": [ { - "prevOutput": "2697bf250bfbfdf0232329e1c4d504df0a3afc7f155372c8344d14aa477978eb:1", + "prevOutput": "04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac:2", "sigScript": "", "sequence": 0, "witness": [] @@ -143,15 +140,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a207d21d8c4829a93e3b28dc2624ce854dec0393025b252c884e15020be1fafa949" + "scriptPubkey": "6a2092035eb78e0b8d589e95e274fb69c85645efbbb091220a25ba23f093d1139705" }, { "value": 9000, - "scriptPubkey": "001402bff690f27911f8412cb4047779ebd9eea228db" + "scriptPubkey": "001478e18e564017d7ff3fc6dcbd994c0bb118bc77dc" }, { - "value": 99990600, - "scriptPubkey": "0014b31d8f364e330e328c0ab1baed3adb3873e3d9bb" + "value": 99981200, + "scriptPubkey": "0014e3a0a519a66f044f13c254db465eed969328bea8" } ], "lockTime": 0 @@ -159,48 +156,53 @@ }, "anchor": { "mpcProof": { - "pos": 4, + "pos": 7, "cofactor": 0, "path": [ - "688ed0d51c1f2d7e3d6a7eb2a2a047d931838c752b6e45e0f426fff55f9d3a84", - "2da91d03506ba70b5db5ff1bb090139a00c5db85793f4b24b1bb428c17718d24", - "3a65fcfd4ef2917c6d514fde2c49a6a226a7ce44d842d70332668f502412a8f3" + "e88b9afd394efeae404cff2591d02e9e204466ad0b47c888eb59551c9889158c", + "42967c9a1f5d1af028b31735da12edd1c8a826aea92b841424f3ba8ee1c98904", + "95828c4b34b82d4bd7e6525d86d0bbde089ad7adb6d692d213b1d3e00babf50f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "e70b34e8fa9f851fa4061e8c75b2364b5f45c20fa3d4b5acdc572e8fd7413c26" - ] + "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0": { + "opid": "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e", + "vin": 0 + } }, "knownTransitions": { - "e70b34e8fa9f851fa4061e8c75b2364b5f45c20fa3d4b5acdc572e8fd7413c26": { + "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e": { "ffv": 0, - "contractId": "rgb:3Ntlsi8s-tO5MCpn-CRud6eQ-tX8uhBN-P8ShtN7-QNYdrGc", + "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "dcdb65b22f2cb4ee4c0a99c246e77a790b57f2e84134ff1286d37b40d61dac67", - "ty": 4000, - "no": 0 - } + "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0" ], "assignments": { "4000": { "type": "fungible", "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 15557645237552166780 + }, + "state": 50 + }, { "seal": { "txid": null, "vout": 2, - "blinding": 16601173385335492688 + "blinding": 3366345153327845559 }, - "state": 666 + "state": 616 } ] } @@ -216,7 +218,7 @@ "version": 2, "inputs": [ { - "prevOutput": "5259f55018e26bf50bfa1813e1e174710b368ac6e196f15a280388b429a31a54:2", + "prevOutput": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b:0", "sigScript": "", "sequence": 0, "witness": [] @@ -225,15 +227,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a2004a2379274e2e46d4728b9f77e41fd50fe11c16fb407256f3240b39178c10e43" + "scriptPubkey": "6a20d1f74348ed624cc8702cf25a7f883f5bbf958a4d8fb3b7902bc09aa77f25d3b8" }, { "value": 9000, - "scriptPubkey": "00147cc7738422dd879427daa2facf25fd9aa052593f" + "scriptPubkey": "001495d77ee93015b69a23bb4d0d27c31559a62318b6" }, { - "value": 99971800, - "scriptPubkey": "00140af5321f1a7064480f0cedb1531cea66254329f8" + "value": 99990600, + "scriptPubkey": "00145799f04cab25bc03964912c755587688af302ba7" } ], "lockTime": 0 @@ -241,56 +243,45 @@ }, "anchor": { "mpcProof": { - "pos": 4, + "pos": 7, "cofactor": 0, "path": [ - "5f044994a45a923dc171e42054ad3a716cedfb03d20cac4aabbabb797f58fa0d", - "0af457bc1888e4dbf7788ecb06411ebd352bcca74dee3f2304ef7d53c9fd8ab8", - "2f6dea82c781e92c1142d4a7d1be4bb27e0ffb91fab718918c51bdc812db66a5" + "20ef039e8ed1a59a5083b7b48c97b3d2c09aa54bfb5d0ec370ded3718a019937", + "a45ec220a158ee11474aed9e7290d2f254831c885a49e6e6a93c31832ef8fdbc", + "5250d7ca61b0870cdd896d01984ceead2f28fb76eeb7acc66bbc511020bdc70e" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0": [ - "c8f4df6ae56b0c00a8d5747beea427d38319ab8fe85069a0634cf69a88fa67a0" - ] + "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0": { + "opid": "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16", + "vin": 0 + } }, "knownTransitions": { - "c8f4df6ae56b0c00a8d5747beea427d38319ab8fe85069a0634cf69a88fa67a0": { + "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16": { "ffv": 0, - "contractId": "rgb:3Ntlsi8s-tO5MCpn-CRud6eQ-tX8uhBN-P8ShtN7-QNYdrGc", + "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - { - "op": "84743251f680efd86179366bba1a12b3bef3a0325dd35845e59337a7cc7b63b4", - "ty": 4000, - "no": 1 - } + "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0" ], "assignments": { "4000": { "type": "fungible", "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 14130614574817494517 - }, - "state": 77 - }, { "seal": { "txid": null, "vout": 2, - "blinding": 7391128784690907900 + "blinding": 17064100245782478357 }, - "state": 539 + "state": 666 } ] } diff --git a/tests/fixtures/e031ca3d4cf33f8d003d9362b8c91692ee2eba943bb3ec3b86588d816fe965b9.json b/tests/fixtures/e031ca3d4cf33f8d003d9362b8c91692ee2eba943bb3ec3b86588d816fe965b9.json deleted file mode 100644 index 94c8f21..0000000 --- a/tests/fixtures/e031ca3d4cf33f8d003d9362b8c91692ee2eba943bb3ec3b86588d816fe965b9.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "5259f55018e26bf50bfa1813e1e174710b368ac6e196f15a280388b429a31a54:2", - "sigScript": "", - "sequence": 0, - "witness": [ - "304402200bf023a07037030f059d10f6425f5daa176930cd4becc559cdeaf7da176d347802203b669dc79158d4f3a97c6d14df1742f3d1e2ca43e28174dc63dbed4f63860c8d01", - "0290689a4033869f8eac1f56131889f944eabba29fc710bd655700bf2b6e06b93c" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a2004a2379274e2e46d4728b9f77e41fd50fe11c16fb407256f3240b39178c10e43" - }, - { - "value": 9000, - "scriptPubkey": "00147cc7738422dd879427daa2facf25fd9aa052593f" - }, - { - "value": 99971800, - "scriptPubkey": "00140af5321f1a7064480f0cedb1531cea66254329f8" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/e68c51aede5479db97384efe8f3d0d4aadbc4dca96923ab821c837713140f1d0.json b/tests/fixtures/e68c51aede5479db97384efe8f3d0d4aadbc4dca96923ab821c837713140f1d0.json deleted file mode 100644 index 054b2cd..0000000 --- a/tests/fixtures/e68c51aede5479db97384efe8f3d0d4aadbc4dca96923ab821c837713140f1d0.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "aedcde1133e96fdb1a130b5f3899d2a5932ff3d05378c0455f9c858fe7c5ec13:1", - "sigScript": "", - "sequence": 0, - "witness": [ - "30440220096cf460aa52b2e4b5b6c00d9b1d95036aebb6d270d5fa95eaa75bd0fa8768f20220668cc982690d7e72700d41ff0d3309210724399050c9db4d81168feadadaddce01", - "02c33b7a4b43895fbaea5234147bd96a00a2d7be5c84b67239221ea254a5b2fcbe" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a204bba687d2198a9a049b75255ea3fbdf5b648437ffb7757c258a95cb1232a5fa6" - }, - { - "value": 99999600, - "scriptPubkey": "00149aeec847f99c80464389ed96e80de8bb147d6227" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/e759afa06dbcb23015ca05447cbb232b659601dec610e2604415d50540417745.json b/tests/fixtures/e759afa06dbcb23015ca05447cbb232b659601dec610e2604415d50540417745.json new file mode 100644 index 0000000..988723b --- /dev/null +++ b/tests/fixtures/e759afa06dbcb23015ca05447cbb232b659601dec610e2604415d50540417745.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e:2", + "sigScript": "", + "sequence": 0, + "witness": [ + "3044022070bfc9a67c473e0ad2a39911b412024ba37a4a74174f20c67b9ff1e39e14c421022053a29516fbf7c8541948b126b5fbb2010c5ed73c7d1c0b7d0357e9a854a41b9f01", + "0340d4ddd15da59701c1edaae86ce171229771a2e09862f6943f823440ceab8dc1" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a204a4b4d4611884f9832b8aeb64025c3e9b5c866be5a6cdeba1f4f009d9bef235d" + }, + { + "value": 9000, + "scriptPubkey": "00146a1e500c8762e09a8b8961393ffe4519d1921ce1" + }, + { + "value": 99971800, + "scriptPubkey": "0014da5d6c5e6a83d234c0911eef61280036dce4c54d" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/f618e7e385105ddc8bb8b013a449993ded7476ee305466dffa2aee1a11416252.json b/tests/fixtures/f618e7e385105ddc8bb8b013a449993ded7476ee305466dffa2aee1a11416252.json new file mode 100644 index 0000000..75098a5 --- /dev/null +++ b/tests/fixtures/f618e7e385105ddc8bb8b013a449993ded7476ee305466dffa2aee1a11416252.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23:1", + "sigScript": "", + "sequence": 0, + "witness": [ + "304402203f2cb626fdf0629968f5932989db7442635b3e5c78f083af606828199f61328302204857601649c014eb1b148fae8fc0a1f758d53e3b362b32c06d0fe74dd8cb4b3e01", + "033685defed8e8f8f0638a617e09fd2a8bce71c81c88d5124626433bc8724ceffc" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20a382ff389fcaed42c49a09965bb2d657b722ea61b1b07113e8fc74eedc812095" + }, + { + "value": 99998800, + "scriptPubkey": "0014d0d404b911357c63e508828bb2fa85a6127c6eb1" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23.json b/tests/fixtures/f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23.json new file mode 100644 index 0000000..75d88e3 --- /dev/null +++ b/tests/fixtures/f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9:1", + "sigScript": "", + "sequence": 0, + "witness": [ + "3045022100e35e4b8584d3a1d1a8622cd8fd8160d2f52854324af5789d3b6daf2ee90eaf0f02201238d7f7319fcf4c07cc4bdf835141efa34f9d9bfe6d985bdecaade76360616201", + "03077be88f095dd45313396950ed45e24d08e99b48f2111d9dbacd10e5df51197e" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20a9b8418b25785eb52dd485ec0eff0f4713d95219c288a9bcb1e6705cb84edafd" + }, + { + "value": 99999200, + "scriptPubkey": "0014adbea30c365d0509278cf035fb756c92fb96854e" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs index e7a23ad..c127402 100644 --- a/tests/utils/mod.rs +++ b/tests/utils/mod.rs @@ -96,7 +96,7 @@ pub use rgb::{ validation::{Failure, ResolveWitness, Scripts, Validity, Warning, WitnessResolverError}, vm::{WitnessOrd, WitnessPos}, Assign, AssignmentDetails, AssignmentType, BundleId, DescriptorRgb, FungibleState, GenesisSeal, - GlobalDetails, GlobalStateSchema, GraphSeal, Identity, InputOpids, MetaDetails, MetaType, + GlobalDetails, GlobalStateSchema, GraphSeal, Identity, InputOpid, MetaDetails, MetaType, MetaValue, Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, RevealedValue, RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, Transition, TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, @@ -114,7 +114,7 @@ pub use rgb_altered::{ validation::{Failure, ResolveWitness, Scripts, Validity, Warning, WitnessResolverError}, vm::{WitnessOrd, WitnessPos}, Assign, AssignmentDetails, AssignmentType, BundleId, DescriptorRgb, FungibleState, GenesisSeal, - GlobalDetails, GlobalStateSchema, GraphSeal, Identity, InputOpids, MetaDetails, MetaType, + GlobalDetails, GlobalStateSchema, GraphSeal, Identity, InputOpid, MetaDetails, MetaType, MetaValue, Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, RevealedValue, RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, Transition, TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, diff --git a/tests/validation.rs b/tests/validation.rs index 8d6e415..a29744b 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -82,11 +82,11 @@ impl Scenario { match self { Self::A => { let (tx_1, witness_id_1) = - get_tx("e68c51aede5479db97384efe8f3d0d4aadbc4dca96923ab821c837713140f1d0"); + get_tx("b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9"); let (tx_2, witness_id_2) = - get_tx("c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9"); + get_tx("f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23"); let (tx_3, witness_id_3) = - get_tx("b7729e80544704769c690e6c5d4f103d0183eba1ef2b81fa4f41158697dd4b2a"); + get_tx("f618e7e385105ddc8bb8b013a449993ded7476ee305466dffa2aee1a11416252"); MockResolver { pub_witnesses: map![ witness_id_1 => MockResolvePubWitness::Success(tx_1), @@ -102,11 +102,11 @@ impl Scenario { } Self::B => { let (tx_1, witness_id_1) = - get_tx("5f61c1f5db43f98b2274e90babd90e085f9089aa48b7aa685f78ad930142d5a9"); + get_tx("04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac"); let (tx_2, witness_id_2) = - get_tx("5259f55018e26bf50bfa1813e1e174710b368ac6e196f15a280388b429a31a54"); + get_tx("89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e"); let (tx_3, witness_id_3) = - get_tx("e031ca3d4cf33f8d003d9362b8c91692ee2eba943bb3ec3b86588d816fe965b9"); + get_tx("e759afa06dbcb23015ca05447cbb232b659601dec610e2604415d50540417745"); MockResolver { pub_witnesses: map![ witness_id_1 => MockResolvePubWitness::Success(tx_1), @@ -134,18 +134,12 @@ fn replace_transition_in_bundle( known_transitions.remove(&old_opid); let transition_id = transition.id(); known_transitions.insert(transition_id, transition.clone()); - let mut input_map = BTreeMap::::new(); - for (vin, input_opids) in witness_bundle.bundle.input_map.clone().into_iter() { - input_map.insert( - vin, - NonEmptyOrdSet::from_checked( - input_opids - .into_iter() - .map(|o| if o == old_opid { transition_id } else { o }) - .collect::>(), - ) - .into(), - ); + let mut input_map = BTreeMap::::new(); + for (opout, mut input_opid) in witness_bundle.bundle.input_map.clone().into_iter() { + if input_opid.opid == old_opid { + input_opid.opid = transition_id; + } + input_map.insert(opout, input_opid); } let mut witness_psbt = Psbt::from_tx(witness_bundle.pub_witness.tx().unwrap().clone()); let idx = witness_psbt @@ -330,19 +324,19 @@ fn validate_consignment_genesis_fail() { assert_eq!(validation_status.failures.len(), 5); assert!(matches!( validation_status.failures[0], - Failure::OperationAbsent(_) + Failure::MpcInvalid(_, _, _) )); assert!(matches!( validation_status.failures[1], - Failure::MpcInvalid(_, _, _) + Failure::OperationAbsent(_) )); assert!(matches!( validation_status.failures[2], - Failure::MissingKnownTransition(_, _) + Failure::MpcInvalid(_, _, _) )); assert!(matches!( validation_status.failures[3], - Failure::MpcInvalid(_, _, _) + Failure::MissingKnownTransition(_, _) )); assert!(matches!( validation_status.failures[4], @@ -390,15 +384,15 @@ fn validate_consignment_bundles_fail() { assert_eq!(validation_status.failures.len(), 3); assert!(matches!( validation_status.failures[0], - Failure::SealNoPubWitness(_, _, _) + Failure::SealsInvalid(_, _, _) )); assert!(matches!( validation_status.failures[1], - Failure::SealsInvalid(_, _, _) + Failure::BundleInvalidCommitment(_, _, _, _) )); assert!(matches!( validation_status.failures[2], - Failure::BundleInvalidCommitment(_, _, _, _) + Failure::SealNoPubWitness(_, _, _) )); assert!(validation_status.warnings.is_empty()); assert!(validation_status.info.is_empty()); @@ -413,7 +407,7 @@ fn validate_consignment_resolver_error() { let base_resolver = scenario.resolver(); let consignment = get_consignment_from_json("attack_resolver_error"); let txid = - Txid::from_str("c0098d330a9c091340f9ff11c415f8584cd6451aecd16af1c7ab870937e6a4b9").unwrap(); + Txid::from_str("f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23").unwrap(); let wbundle = consignment .bundles .iter() @@ -652,7 +646,13 @@ fn validate_consignment_commitments_fail() { new_bundle .bundle .input_map - .insert(Vout::from_u32(2), InputOpids::strict_dumb()) + .insert( + Opout::strict_dumb(), + InputOpid { + opid: OpId::strict_dumb(), + vin: Vout::from_u32(2), + }, + ) .unwrap(); consignment.bundles = LargeOrdSet::from_checked(bset![bundle.clone(), new_bundle]); @@ -854,7 +854,21 @@ fn validate_consignment_commitments_fail() { // MissingKnownTransition: replace known_transition referenced in input map let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let mut new_bundle = bundles.iter().last().unwrap().clone(); + let spent_transitions = bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let mut new_bundle = bundles + .iter() + .find(|b| { + spent_transitions + .iter() + .all(|st| !b.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); let mut transition = new_bundle .bundle .known_transitions @@ -877,7 +891,21 @@ fn validate_consignment_commitments_fail() { // BundleInvalidCommitment: change witness txid in witness_bundle let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let mut new_bundle = bundles.pop_last().unwrap(); + let spent_transitions = bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let mut new_bundle = bundles + .iter() + .find(|b| { + spent_transitions + .iter() + .all(|st| !b.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); let mut witness = new_bundle.pub_witness.tx().unwrap().clone(); let fst_input = witness.inputs[0].clone(); witness.inputs[0].prev_output = Outpoint::strict_dumb(); @@ -930,7 +958,22 @@ fn validate_consignment_logic_fail() { // SchemaUnknownTransitionType: replace transition with unsupported transition type let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let witness_bundle = bundles.pop_last().unwrap(); + let spent_transitions = bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let witness_bundle = bundles + .iter() + .find(|b| { + spent_transitions + .iter() + .all(|st| !b.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); + bundles.remove(&witness_bundle); let mut transition = witness_bundle .bundle .known_transitions @@ -958,7 +1001,22 @@ fn validate_consignment_logic_fail() { // SchemaUnknownMetaType: replace transition with unsupported meta type let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let witness_bundle = bundles.pop_last().unwrap(); + let spent_transitions = bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let witness_bundle = bundles + .iter() + .find(|b| { + spent_transitions + .iter() + .all(|st| !b.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); + bundles.remove(&witness_bundle); let mut transition = witness_bundle .bundle .known_transitions @@ -989,7 +1047,22 @@ fn validate_consignment_logic_fail() { // SchemaUnknownGlobalStateType: replace transition with unsupported global state type let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let witness_bundle = bundles.pop_last().unwrap(); + let spent_transitions = bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let witness_bundle = bundles + .iter() + .find(|b| { + spent_transitions + .iter() + .all(|st| !b.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); + bundles.remove(&witness_bundle); let mut transition = witness_bundle .bundle .known_transitions @@ -1020,7 +1093,22 @@ fn validate_consignment_logic_fail() { // SchemaUnknownAssignmentType: add unsupported assignment type to transition let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let witness_bundle = bundles.pop_last().unwrap(); + let spent_transitions = bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let witness_bundle = bundles + .iter() + .find(|b| { + spent_transitions + .iter() + .all(|st| !b.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); + bundles.remove(&witness_bundle); let mut transition = witness_bundle .bundle .known_transitions @@ -1051,7 +1139,22 @@ fn validate_consignment_logic_fail() { // SchemaAssignmentOccurrences: add transition with no assignments let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let witness_bundle = bundles.pop_last().unwrap(); + let spent_transitions = bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let witness_bundle = bundles + .iter() + .find(|b| { + spent_transitions + .iter() + .all(|st| !b.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); + bundles.remove(&witness_bundle); let mut transition = witness_bundle .bundle .known_transitions @@ -1086,7 +1189,22 @@ fn validate_consignment_logic_fail() { // StateTypeMismatch let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let witness_bundle = bundles.pop_last().unwrap(); + let spent_transitions = bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let witness_bundle = bundles + .iter() + .find(|b| { + spent_transitions + .iter() + .all(|st| !b.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); + bundles.remove(&witness_bundle); let mut transition = witness_bundle .bundle .known_transitions @@ -1131,7 +1249,22 @@ fn validate_consignment_logic_fail() { // ScriptFailure: e.g. one can't do simple inflation let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let witness_bundle = bundles.pop_last().unwrap(); + let spent_transitions = bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let witness_bundle = bundles + .iter() + .find(|b| { + spent_transitions + .iter() + .all(|st| !b.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); + bundles.remove(&witness_bundle); let mut transition = witness_bundle .bundle .known_transitions @@ -1180,7 +1313,22 @@ fn validate_consignment_logic_fail() { // ContractMismatch: operations should commit to the correct contract let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let witness_bundle = bundles.pop_last().unwrap(); + let spent_transitions = bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let witness_bundle = bundles + .iter() + .find(|b| { + spent_transitions + .iter() + .all(|st| !b.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); + bundles.remove(&witness_bundle); let mut transition = witness_bundle .bundle .known_transitions From dc0916cfec4273d8c90f09939a4935a326fee9f0 Mon Sep 17 00:00:00 2001 From: step Date: Wed, 11 Jun 2025 13:18:01 +0200 Subject: [PATCH 06/22] add uncommitted_input_opout test --- tests/transfers.rs | 95 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/tests/transfers.rs b/tests/transfers.rs index 2338caa..d05ba8d 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -1887,6 +1887,101 @@ fn extra_known_transition() { assert!(issued_amt < amt_0 + amt_1 + amt_1); } +#[cfg(not(feature = "altered"))] +#[should_panic(expected = "BundleExtraTransition")] +#[test] +fn uncommitted_input_opout() { + initialize(); + + let mut wlt_1 = get_wallet(&DescriptorType::Wpkh); + let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); + + let issued_amt = 900; + let contract_id = wlt_1.issue_nia(issued_amt, None); + let schema_id = wlt_1.schema_id(contract_id); + + // split issued amount into 2 opouts + let amt_0 = 500; + let invoice = wlt_1.invoice(contract_id, schema_id, amt_0, InvoiceType::Witness); + let (consignment, tx, _, _) = wlt_1.pay_full(invoice, None, None, true, None); + wlt_1.mine_tx(&tx.txid(), false); + wlt_1.accept_transfer(consignment, None); + wlt_1.sync(); + + // merge the 2 allocation to send to wlt_2 + let invoice = wlt_2.invoice(contract_id, schema_id, issued_amt, InvoiceType::Witness); + let (mut psbt, _, mut consignment) = wlt_1.pay(invoice, None, None); + let prev_txids = consignment + .bundles + .iter() + .map(|wb| wb.witness_id()) + .collect::>(); + + // remove commitment to one of the spent opouts + consignment.modify_bundle(psbt.txid(), |witness_bundle| { + let mut input_map = witness_bundle.bundle.input_map.clone().release(); + input_map.pop_last(); + witness_bundle.bundle.input_map = NonEmptyOrdMap::from_checked(input_map); + let mut witness_psbt = Psbt::from_tx(witness_bundle.pub_witness.tx().unwrap().clone()); + let idx = witness_psbt + .outputs() + .find(|o| o.script.is_op_return()) + .unwrap() + .index(); + let contract_id = witness_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .contract_id; + let protocol_id = mpc::ProtocolId::from(contract_id); + let message = mpc::Message::from(witness_bundle.bundle.bundle_id()); + witness_psbt.output_mut(idx).unwrap().script = ScriptPubkey::op_return(&[]); + witness_psbt + .output_mut(idx) + .unwrap() + .set_opret_host() + .unwrap(); + witness_psbt + .output_mut(idx) + .unwrap() + .set_mpc_message(protocol_id, message) + .unwrap(); + let (commitment, proof) = witness_psbt.output_mut(idx).unwrap().mpc_commit().unwrap(); + witness_psbt + .output_mut(idx) + .unwrap() + .opret_commit(commitment) + .unwrap(); + let witness: Tx = witness_psbt.to_unsigned_tx().into(); + witness_bundle.anchor.mpc_proof = proof.to_merkle_proof(protocol_id).unwrap(); + witness_bundle.pub_witness = PubWitness::Tx(witness.clone()); + }); + let tx = consignment + .bundles + .iter() + .find(|wb| !prev_txids.contains(&wb.witness_id())) + .unwrap() + .pub_witness + .tx() + .unwrap(); + let opret_script = tx + .outputs() + .find(|o| o.script_pubkey.is_op_return()) + .unwrap() + .script_pubkey + .clone(); + psbt.outputs_mut() + .find(|o| o.script.is_op_return()) + .unwrap() + .script = opret_script; + assert_eq!(tx.txid(), psbt.txid()); + let new_tx = wlt_1.sign_finalize_extract(&mut psbt); + wlt_1.broadcast_tx(&new_tx); + wlt_2.accept_transfer(consignment, None); +} + #[cfg(not(feature = "altered"))] #[rstest] #[case(HistoryType::Linear, ReorgType::ChangeOrder)] From 84e4943a69eaa1359ecc0e262f9c30ca378782e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Wed, 11 Jun 2025 15:20:00 +0200 Subject: [PATCH 07/22] update submodules (fix for uncommitted_input_opout test) --- rgb-core | 2 +- tests/transfers.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rgb-core b/rgb-core index 128d0ea..c74032c 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit 128d0eac5b42094ac29748a24778245d736fac98 +Subproject commit c74032ced05662ade402b30b4749ed161bee955c diff --git a/tests/transfers.rs b/tests/transfers.rs index d05ba8d..31294f2 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -1888,7 +1888,7 @@ fn extra_known_transition() { } #[cfg(not(feature = "altered"))] -#[should_panic(expected = "BundleExtraTransition")] +#[should_panic(expected = "MissingInputMapTransition")] #[test] fn uncommitted_input_opout() { initialize(); From 827a63163ba91b1d1570df3262c379524b629dfa Mon Sep 17 00:00:00 2001 From: step Date: Mon, 19 May 2025 19:47:16 +0200 Subject: [PATCH 08/22] add concealed_known_transition test --- tests/transfers.rs | 169 +++++++++++++++++++++++++++++++++++++++++ tests/utils/helpers.rs | 2 +- 2 files changed, 170 insertions(+), 1 deletion(-) diff --git a/tests/transfers.rs b/tests/transfers.rs index 31294f2..39536b2 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -1982,6 +1982,175 @@ fn uncommitted_input_opout() { wlt_2.accept_transfer(consignment, None); } +#[cfg(not(feature = "altered"))] +#[test] +fn concealed_known_transition() { + initialize(); + + let mut wlt_1 = get_wallet(&DescriptorType::Wpkh); + let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); + + let issued_amt = 700; + let contract_id = wlt_1.issue_nia(issued_amt, None); + let asset_schema = wlt_1.asset_schema(contract_id); + let schema_id = wlt_1.schema_id(contract_id); + let contract = wlt_1.stock().contract_data(contract_id).unwrap(); + let assignment_type = contract + .schema + .assignment_types_for_state(asset_schema.default_state_type())[0]; + let transition_type = contract + .schema + .default_transition_for_assignment(assignment_type); + + // prepare 2 allocations on utxo + let utxo = wlt_1.get_utxo(None); + + let amt_1 = 300; + let invoice = wlt_1.invoice( + contract_id, + schema_id, + amt_1, + InvoiceType::Blinded(Some(utxo)), + ); + let (consignment, tx, _, _) = wlt_1.pay_full(invoice, None, None, true, None); + wlt_1.mine_tx(&tx.txid(), false); + wlt_1.accept_transfer(consignment, None); + wlt_1.sync(); + + let amt_2 = 400; + let invoice = wlt_1.invoice( + contract_id, + schema_id, + amt_2, + InvoiceType::Blinded(Some(utxo)), + ); + let (consignment, tx, _, _) = wlt_1.pay_full(invoice, None, None, true, None); + wlt_1.mine_tx(&tx.txid(), false); + wlt_1.accept_transfer(consignment, None); + wlt_1.sync(); + + // retrieve the two opouts on utxo + let allocations = wlt_1 + .stock() + .contract_assignments_for(contract_id, vec![utxo]) + .unwrap() + .into_values() + .flat_map(|v| v.into_iter()) + .collect::>(); + assert_eq!(allocations.len(), 2); + let (opout_1, amt_1) = if let (opout, AllocatedState::Amount(state)) = allocations[0] { + (opout, state.as_u64()) + } else { + panic!("unexpected state type"); + }; + let (opout_2, amt_2) = if let (opout, AllocatedState::Amount(state)) = allocations[1] { + (opout, state.as_u64()) + } else { + panic!("unexpected state type"); + }; + + // construct transaction committing to bundle with missing transition + let btc_change = wlt_1.get_address(); + let (mut psbt, _) = wlt_1.construct_psbt(vec![utxo], vec![(btc_change, None)], None); + psbt.construct_output_expect(ScriptPubkey::op_return(&[]), Sats::ZERO); + psbt.output_mut(1).unwrap().set_opret_host().unwrap(); + psbt.set_rgb_close_method(CloseMethod::OpretFirst); + + // 1st transition + let mut transition_builder = wlt_1 + .stock() + .transition_builder_raw(contract_id, transition_type) + .unwrap(); + let state = asset_schema.allocated_state(amt_1); + transition_builder = transition_builder + .add_input(opout_1, state.clone()) + .unwrap(); + let secret_seal_1 = wlt_2.get_secret_seal(None, None); + let seal_1 = BuilderSeal::Concealed(secret_seal_1); + transition_builder = transition_builder + .add_owned_state_raw(*assignment_type, seal_1, state) + .unwrap(); + let transition = transition_builder.complete_transition().unwrap(); + let opid_1 = transition.id(); + psbt.input_mut(0) + .unwrap() + .set_rgb_consumer(contract_id, opid_1) + .unwrap(); + psbt.push_rgb_transition(transition).unwrap(); + + // 2nd transition + let mut transition_builder = wlt_1 + .stock() + .transition_builder_raw(contract_id, transition_type) + .unwrap(); + let state = asset_schema.allocated_state(amt_2); + transition_builder = transition_builder + .add_input(opout_2, state.clone()) + .unwrap(); + let secret_seal_2 = wlt_2.get_secret_seal(None, None); + let seal_2 = BuilderSeal::Concealed(secret_seal_2); + transition_builder = transition_builder + .add_owned_state_raw(*assignment_type, seal_2, state) + .unwrap(); + let transition = transition_builder.complete_transition().unwrap(); + let opid_2 = transition.id(); + psbt.input_mut(0) + .unwrap() + .set_rgb_consumer(contract_id, opid_2) + .unwrap(); + psbt.push_rgb_transition(transition).unwrap(); + + psbt.complete_construction(); + let fascia = psbt.rgb_commit().unwrap(); + let witness_id = psbt.txid(); + wlt_1.consume_fascia(fascia, witness_id); + let tx = wlt_1.sign_finalize_extract(&mut psbt); + wlt_1.broadcast_tx(&tx); + wlt_2.sync(); + + let mut beneficiaries = AssetBeneficiariesMap::new(); + beneficiaries.insert(contract_id, vec![seal_1, seal_2]); + let mut consignment = wlt_1.create_consignments(beneficiaries, witness_id)[0].clone(); + + // we finally have a consignment with 2 transitions in a bundle + // now we remove one of them to show that validation fails + let mut new_bundle = consignment + .bundles + .iter() + .find(|b| b.bundle.known_transitions.len() == 2) + .unwrap() + .clone(); + let bundle_id = new_bundle.bundle.bundle_id(); + new_bundle.bundle.known_transitions.remove(&opid_2).unwrap(); + let mut bundles = consignment.bundles.release(); + bundles.replace(new_bundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + // remove corresponding terminal + consignment.terminals.remove(&bundle_id).unwrap(); + consignment + .terminals + .insert(bundle_id, NonEmptyOrdSet::with(secret_seal_1).into()) + .unwrap(); + + // ensure the consignment contains the bundle with missing transition + let bundle = consignment + .bundles + .iter() + .find(|wb| { + wb.bundle + .input_map + .values() + .map(|io| io.opid) + .collect::>() + .contains(&opid_2) + }) + .unwrap(); + assert!(!bundle.bundle.known_transitions.contains_key(&opid_2)); + + // validation fails with BundleExtraTransition + wlt_2.accept_transfer(consignment, None); +} + #[cfg(not(feature = "altered"))] #[rstest] #[case(HistoryType::Linear, ReorgType::ChangeOrder)] diff --git a/tests/utils/helpers.rs b/tests/utils/helpers.rs index ce78749..4bd23d7 100644 --- a/tests/utils/helpers.rs +++ b/tests/utils/helpers.rs @@ -1,7 +1,7 @@ use super::*; pub struct TestWallet { - wallet: RgbWallet>, + pub wallet: RgbWallet>, signer: Option, wallet_dir: PathBuf, instance: u8, From fb456f1542c1d2b5e91a0df4208df88ac47ff924 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Mon, 16 Jun 2025 14:44:15 +0200 Subject: [PATCH 09/22] update rgb-core submodule (allow concealed known transitions) --- rgb-core | 2 +- tests/transfers.rs | 1 - tests/validation.rs | 11 +++-------- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/rgb-core b/rgb-core index c74032c..3d8c763 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit c74032ced05662ade402b30b4749ed161bee955c +Subproject commit 3d8c763a15898d8c9df2adba925facddf0ce2e18 diff --git a/tests/transfers.rs b/tests/transfers.rs index 39536b2..764c641 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -2147,7 +2147,6 @@ fn concealed_known_transition() { .unwrap(); assert!(!bundle.bundle.known_transitions.contains_key(&opid_2)); - // validation fails with BundleExtraTransition wlt_2.accept_transfer(consignment, None); } diff --git a/tests/validation.rs b/tests/validation.rs index a29744b..b7f649c 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -321,7 +321,7 @@ fn validate_consignment_genesis_fail() { Err(status) => status, }; dbg!(&validation_status); - assert_eq!(validation_status.failures.len(), 5); + assert_eq!(validation_status.failures.len(), 4); assert!(matches!( validation_status.failures[0], Failure::MpcInvalid(_, _, _) @@ -336,10 +336,6 @@ fn validate_consignment_genesis_fail() { )); assert!(matches!( validation_status.failures[3], - Failure::MissingKnownTransition(_, _) - )); - assert!(matches!( - validation_status.failures[4], Failure::MpcInvalid(_, _, _) )); assert!(validation_status.warnings.is_empty()); @@ -851,7 +847,7 @@ fn validate_consignment_commitments_fail() { .iter() .any(|f| matches!(f, Failure::ConfidentialSeal(_)))); - // MissingKnownTransition: replace known_transition referenced in input map + // ExtraKnownTransition: replace known_transition referenced in input map let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); let spent_transitions = bundles @@ -884,9 +880,8 @@ fn validate_consignment_commitments_fail() { let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); - assert_eq!(failures.len(), 2); + assert_eq!(failures.len(), 1); assert!(matches!(failures[0], Failure::ExtraKnownTransition(_))); - assert!(matches!(failures[1], Failure::MissingKnownTransition(_, _))); // BundleInvalidCommitment: change witness txid in witness_bundle let mut consignment = base_consignment.clone(); From f750c092870700bb0adc73257857ee285e6e6f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Mon, 16 Jun 2025 15:34:00 +0200 Subject: [PATCH 10/22] update submodules (remove InputOpid) --- rgb | 2 +- rgb-core | 2 +- ...030e9cc243fa34331564c250252570ec0b8af.json | 25 +++ ...220347df72ce654e0bae12686a236da4399ac.json | 29 ---- ...87d67577578d443ba1f17e73196e8d13bf16a.json | 25 +++ ...719d697d72ff18693bd8cefbb37f8a585808c.json | 29 ++++ ...134e3cc5bb084451b0489af6d4925cb540f5e.json | 29 ---- ...0a55f305e8e09f8b0d0149dd47d088581289b.json | 29 ++++ ...undles_pubWitness_data_input_sequence.json | 121 +++++++------- tests/fixtures/attack_chain.json | 117 +++++++------- tests/fixtures/attack_genesis_schema_id.json | 118 +++++++------- tests/fixtures/attack_genesis_testnet.json | 118 +++++++------- tests/fixtures/attack_resolver_error.json | 147 ++++++++---------- ...680d60b3af847b854ae870b31955bdbd4e2b9.json | 25 --- tests/fixtures/consignment_A.json | 117 +++++++------- tests/fixtures/consignment_B.json | 118 +++++++------- ...ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b.json | 29 ++++ ...b232b659601dec610e2604415d50540417745.json | 29 ---- ...9993ded7476ee305466dffa2aee1a11416252.json | 25 --- ...72a4185fa084c47949395fb0fc35c2908ad23.json | 25 --- ...bcacd9393c00436b9678b21a453ef0654a26a.json | 25 +++ tests/transfers.rs | 9 +- tests/utils/mod.rs | 16 +- tests/validation.rs | 77 ++------- 24 files changed, 590 insertions(+), 696 deletions(-) create mode 100644 tests/fixtures/03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af.json delete mode 100644 tests/fixtures/04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac.json create mode 100644 tests/fixtures/0f8f09b5898c6f0c16ffaf4f10d87d67577578d443ba1f17e73196e8d13bf16a.json create mode 100644 tests/fixtures/5599bb3c61fad724e71ce1ed10d719d697d72ff18693bd8cefbb37f8a585808c.json delete mode 100644 tests/fixtures/89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e.json create mode 100644 tests/fixtures/abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b.json delete mode 100644 tests/fixtures/b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9.json create mode 100644 tests/fixtures/e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b.json delete mode 100644 tests/fixtures/e759afa06dbcb23015ca05447cbb232b659601dec610e2604415d50540417745.json delete mode 100644 tests/fixtures/f618e7e385105ddc8bb8b013a449993ded7476ee305466dffa2aee1a11416252.json delete mode 100644 tests/fixtures/f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23.json create mode 100644 tests/fixtures/fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a.json diff --git a/rgb b/rgb index 171d9e8..2109c8b 160000 --- a/rgb +++ b/rgb @@ -1 +1 @@ -Subproject commit 171d9e822694e9d38e8adfc721a52e8211be5f95 +Subproject commit 2109c8b3ff2bacbb89a1fb190f2d1860bd1aad5a diff --git a/rgb-core b/rgb-core index 3d8c763..3c54f70 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit 3d8c763a15898d8c9df2adba925facddf0ce2e18 +Subproject commit 3c54f70c2f19038fc431c65ecf7a2436c24323e4 diff --git a/tests/fixtures/03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af.json b/tests/fixtures/03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af.json new file mode 100644 index 0000000..1f2044c --- /dev/null +++ b/tests/fixtures/03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", + "sigScript": "", + "sequence": 0, + "witness": [ + "304502210089bb6f905f0666c21882dd5f782e81fd8cc46efa29cd20c85cf7983c64784742022031ea54839b8f955196994946ac34854840740e03b79cfa16bfb28645705ea60301", + "03413efe9599119d2196d8845747489f187a001cf7a52c37f6d137513170f2326b" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" + }, + { + "value": 99999200, + "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac.json b/tests/fixtures/04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac.json deleted file mode 100644 index 6c51b6d..0000000 --- a/tests/fixtures/04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b:0", - "sigScript": "", - "sequence": 0, - "witness": [ - "3045022100dbcf292b141ca86fb45dd0fe1092b4b17d8886c191cda839d715aa99880731f0022029394f3a56e6910e6c1e4f0339bf1880d987c55abd6c387615bc6365fd9806df01", - "031c73c666a522a34bb57b9263a096247fa4cb40937eaafd3bb288a893b13edb83" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20d1f74348ed624cc8702cf25a7f883f5bbf958a4d8fb3b7902bc09aa77f25d3b8" - }, - { - "value": 9000, - "scriptPubkey": "001495d77ee93015b69a23bb4d0d27c31559a62318b6" - }, - { - "value": 99990600, - "scriptPubkey": "00145799f04cab25bc03964912c755587688af302ba7" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/0f8f09b5898c6f0c16ffaf4f10d87d67577578d443ba1f17e73196e8d13bf16a.json b/tests/fixtures/0f8f09b5898c6f0c16ffaf4f10d87d67577578d443ba1f17e73196e8d13bf16a.json new file mode 100644 index 0000000..d6c9bbe --- /dev/null +++ b/tests/fixtures/0f8f09b5898c6f0c16ffaf4f10d87d67577578d443ba1f17e73196e8d13bf16a.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", + "sigScript": "", + "sequence": 0, + "witness": [ + "30450221008e11937a866e1716998f3672197fca38cd4e4f475b28df8211da8f4559611cc002204b2326c30761d092d82d669f38ded1b21f8d9852857ba0d4fc76389a333e9f1d01", + "03f35723b0c92b7761492d84208a1c2f6e122d78d6792e2db3590028fde52fa88c" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" + }, + { + "value": 99998800, + "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/5599bb3c61fad724e71ce1ed10d719d697d72ff18693bd8cefbb37f8a585808c.json b/tests/fixtures/5599bb3c61fad724e71ce1ed10d719d697d72ff18693bd8cefbb37f8a585808c.json new file mode 100644 index 0000000..a845a1a --- /dev/null +++ b/tests/fixtures/5599bb3c61fad724e71ce1ed10d719d697d72ff18693bd8cefbb37f8a585808c.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", + "sigScript": "", + "sequence": 0, + "witness": [ + "3045022100a7f7c8804d4d9c75036e31e060d569a907d94a526879473f19d8f18576be84e8022074a738eb524f2fee20b2649f8703f9fdad2da527a2772187e074f32cc7210fc301", + "0218c598d3c85ee6e8030fb67e75909389f3245cdde7a36489905cc455e6a65173" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" + }, + { + "value": 9000, + "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" + }, + { + "value": 99971800, + "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e.json b/tests/fixtures/89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e.json deleted file mode 100644 index 085d796..0000000 --- a/tests/fixtures/89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac:2", - "sigScript": "", - "sequence": 0, - "witness": [ - "304402203098517cc619ac0dc960836a7f92785f28e5c04a8a7100e88e28bac744a6bcdf0220207302f141703599f33207022a9aa2aa076474eedcd90a1ac2486980e7f2a79e01", - "02c7ffa585ad987207a0ddca3ab715fe14be75b95982e33878609c73f689435218" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a2092035eb78e0b8d589e95e274fb69c85645efbbb091220a25ba23f093d1139705" - }, - { - "value": 9000, - "scriptPubkey": "001478e18e564017d7ff3fc6dcbd994c0bb118bc77dc" - }, - { - "value": 99981200, - "scriptPubkey": "0014e3a0a519a66f044f13c254db465eed969328bea8" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b.json b/tests/fixtures/abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b.json new file mode 100644 index 0000000..2880938 --- /dev/null +++ b/tests/fixtures/abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", + "sigScript": "", + "sequence": 0, + "witness": [ + "3044022021832285c648f2b3138c6a0089aed606ebb8be4d3e4aa1c2a9b97d0d03e91f59022023bf31ad446bdcaff7e0818b12ccbaf6b2437c0710213f650f4e899fc1acc32101", + "0233ed53f293986e38450479ada729eb7bbf53bd7f349c4047754d0f8a84ada3d4" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" + }, + { + "value": 9000, + "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" + }, + { + "value": 99990600, + "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json b/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json index 9bd5552..3b6309e 100644 --- a/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json +++ b/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "9501603f11b556960982c9a59a67457659d16fc7837580feeba5a84f7ff18d61": [ - "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145" + "1c49cd66865b0c0fb36b108a8a9ef78c4853d1780c8df74be6b874d866a8d259": [ + "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1749656356, + "timestamp": 1750082151, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114", - "vout": 0, - "blinding": 13403777090925923396 + "txid": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d", + "vout": 1, + "blinding": 17368930799645178615 }, "state": 666 } @@ -48,20 +48,20 @@ "version": 2, "inputs": [ { - "prevOutput": "b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9:1", + "prevOutput": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d:1", "sigScript": "", - "sequence": 0, + "sequence": 1, "witness": [] } ], "outputs": [ { "value": 0, - "scriptPubkey": "6a20a9b8418b25785eb52dd485ec0eff0f4713d95219c288a9bcb1e6705cb84edafd" + "scriptPubkey": "6a20afbb69b179dd11fbf97185bc2f7b5f7e6f0fb456f951e8661a6eb186e128e75e" }, { - "value": 99999200, - "scriptPubkey": "0014adbea30c365d0509278cf035fb756c92fb96854e" + "value": 99999600, + "scriptPubkey": "00145846bfbbad353d01cd5d5e83560e2efdd2d56452" } ], "lockTime": 0 @@ -69,33 +69,30 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "3d06f069df3591e9bb393f22c2769f69922af67530282c2a5fb2d9d208592d68", - "4ea051dddb9739f467250fa6c1926bed02c59ecb8586163d2d17beefcb53c2c1", - "44b2530248e67c0c51d56fa2a7bf309c1db4931263787fcd2f5a8062a48b8fa3" + "5ee0f15a400dae4ddc746e806095c1b91474df8a1343da2ce55d62380bf1c3d9", + "a879d6005973e7fb3f568b0ed57bd1986564c203ac00f46cd6ab13c6adc21a6d", + "589015f185494ef80821f7a7e5c7d5c92f8b14e8f5481486b36099a90a047f3f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0": { - "opid": "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a", - "vin": 0 - } + "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0": "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a" }, "knownTransitions": { - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a": { + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0" + "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0" ], "assignments": { "4000": { @@ -105,13 +102,9 @@ "seal": { "txid": null, "vout": 1, - "blinding": 11344773579385591986 + "blinding": 7971877571019802006 }, - "state": 616 - }, - { - "seal": "fb0e03fdc93227c9097b335c4975ceab4d05bf4e3f70f739c2a9c27242656612", - "state": 50 + "state": 666 } ] } @@ -127,7 +120,7 @@ "version": 2, "inputs": [ { - "prevOutput": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23:1", + "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", "sigScript": "", "sequence": 0, "witness": [] @@ -136,11 +129,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20a382ff389fcaed42c49a09965bb2d657b722ea61b1b07113e8fc74eedc812095" + "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" }, { "value": 99998800, - "scriptPubkey": "0014d0d404b911357c63e508828bb2fa85a6127c6eb1" + "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" } ], "lockTime": 0 @@ -148,33 +141,30 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "bded953a2adc2c0981c4108b0b975d90e231f205ad0a88a56fc67de85ec5f18c", - "edc41e3179b85dcf7f4799a7941921310566cb419b975e2b303b3ec1e2196fa5", - "8153eb1c8e99ab980d78fbb2878eadb6c9cd388ad4cd5d700860dea09554290f" + "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", + "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", + "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0": { - "opid": "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241", - "vin": 0 - } + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" }, "knownTransitions": { - "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241": { + "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" ], "assignments": { "4000": { @@ -184,12 +174,12 @@ "seal": { "txid": null, "vout": 1, - "blinding": 4544899145095694536 + "blinding": 17092846758161066830 }, "state": 539 }, { - "seal": "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145", + "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", "state": 77 } ] @@ -206,20 +196,20 @@ "version": 2, "inputs": [ { - "prevOutput": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114:0", + "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", "sigScript": "", - "sequence": 1, + "sequence": 0, "witness": [] } ], "outputs": [ { "value": 0, - "scriptPubkey": "6a20fa6b63d4c8402175d6ef2c85617dee6434247cc8c762ee24243dc567b25a72e9" + "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" }, { - "value": 99999600, - "scriptPubkey": "0014bb5dff0b3584c4f838146f34e96f310f3e5c4028" + "value": 99999200, + "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" } ], "lockTime": 0 @@ -227,33 +217,30 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "ad4d83741b4460ab72eac597e9f4d5235874315d65cb6e336c1eeedbb076e1ee", - "85d92bd272ce2be6e8e5a1d1777fab6ed0c335b5e09f2cb116fb24d106f95ecc", - "9d9f07f52e891f146904c4051984f5497f83963104991e6b186bb1ba333b16fa" + "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", + "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", + "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0": { - "opid": "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3", - "vin": 0 - } + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" }, "knownTransitions": { - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3": { + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" ], "assignments": { "4000": { @@ -263,9 +250,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 1621579500098964609 + "blinding": 6805042725940518372 }, - "state": 666 + "state": 616 + }, + { + "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", + "state": 50 } ] } diff --git a/tests/fixtures/attack_chain.json b/tests/fixtures/attack_chain.json index f31555d..5e7e97a 100644 --- a/tests/fixtures/attack_chain.json +++ b/tests/fixtures/attack_chain.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "9501603f11b556960982c9a59a67457659d16fc7837580feeba5a84f7ff18d61": [ - "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145" + "1c49cd66865b0c0fb36b108a8a9ef78c4853d1780c8df74be6b874d866a8d259": [ + "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1749656356, + "timestamp": 1750082151, "issuer": "ssi:anonymous", "chainNet": "liquidTestnet", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114", - "vout": 0, - "blinding": 13403777090925923396 + "txid": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d", + "vout": 1, + "blinding": 17368930799645178615 }, "state": 666 } @@ -48,7 +48,7 @@ "version": 2, "inputs": [ { - "prevOutput": "b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9:1", + "prevOutput": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d:1", "sigScript": "", "sequence": 0, "witness": [] @@ -57,11 +57,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20a9b8418b25785eb52dd485ec0eff0f4713d95219c288a9bcb1e6705cb84edafd" + "scriptPubkey": "6a20afbb69b179dd11fbf97185bc2f7b5f7e6f0fb456f951e8661a6eb186e128e75e" }, { - "value": 99999200, - "scriptPubkey": "0014adbea30c365d0509278cf035fb756c92fb96854e" + "value": 99999600, + "scriptPubkey": "00145846bfbbad353d01cd5d5e83560e2efdd2d56452" } ], "lockTime": 0 @@ -69,33 +69,30 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "3d06f069df3591e9bb393f22c2769f69922af67530282c2a5fb2d9d208592d68", - "4ea051dddb9739f467250fa6c1926bed02c59ecb8586163d2d17beefcb53c2c1", - "44b2530248e67c0c51d56fa2a7bf309c1db4931263787fcd2f5a8062a48b8fa3" + "5ee0f15a400dae4ddc746e806095c1b91474df8a1343da2ce55d62380bf1c3d9", + "a879d6005973e7fb3f568b0ed57bd1986564c203ac00f46cd6ab13c6adc21a6d", + "589015f185494ef80821f7a7e5c7d5c92f8b14e8f5481486b36099a90a047f3f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0": { - "opid": "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a", - "vin": 0 - } + "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0": "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a" }, "knownTransitions": { - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a": { + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0" + "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0" ], "assignments": { "4000": { @@ -105,13 +102,9 @@ "seal": { "txid": null, "vout": 1, - "blinding": 11344773579385591986 + "blinding": 7971877571019802006 }, - "state": 616 - }, - { - "seal": "fb0e03fdc93227c9097b335c4975ceab4d05bf4e3f70f739c2a9c27242656612", - "state": 50 + "state": 666 } ] } @@ -127,7 +120,7 @@ "version": 2, "inputs": [ { - "prevOutput": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23:1", + "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", "sigScript": "", "sequence": 0, "witness": [] @@ -136,11 +129,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20a382ff389fcaed42c49a09965bb2d657b722ea61b1b07113e8fc74eedc812095" + "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" }, { "value": 99998800, - "scriptPubkey": "0014d0d404b911357c63e508828bb2fa85a6127c6eb1" + "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" } ], "lockTime": 0 @@ -148,33 +141,30 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "bded953a2adc2c0981c4108b0b975d90e231f205ad0a88a56fc67de85ec5f18c", - "edc41e3179b85dcf7f4799a7941921310566cb419b975e2b303b3ec1e2196fa5", - "8153eb1c8e99ab980d78fbb2878eadb6c9cd388ad4cd5d700860dea09554290f" + "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", + "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", + "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0": { - "opid": "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241", - "vin": 0 - } + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" }, "knownTransitions": { - "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241": { + "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" ], "assignments": { "4000": { @@ -184,12 +174,12 @@ "seal": { "txid": null, "vout": 1, - "blinding": 4544899145095694536 + "blinding": 17092846758161066830 }, "state": 539 }, { - "seal": "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145", + "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", "state": 77 } ] @@ -206,7 +196,7 @@ "version": 2, "inputs": [ { - "prevOutput": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114:0", + "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", "sigScript": "", "sequence": 0, "witness": [] @@ -215,11 +205,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20fa6b63d4c8402175d6ef2c85617dee6434247cc8c762ee24243dc567b25a72e9" + "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" }, { - "value": 99999600, - "scriptPubkey": "0014bb5dff0b3584c4f838146f34e96f310f3e5c4028" + "value": 99999200, + "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" } ], "lockTime": 0 @@ -227,33 +217,30 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "ad4d83741b4460ab72eac597e9f4d5235874315d65cb6e336c1eeedbb076e1ee", - "85d92bd272ce2be6e8e5a1d1777fab6ed0c335b5e09f2cb116fb24d106f95ecc", - "9d9f07f52e891f146904c4051984f5497f83963104991e6b186bb1ba333b16fa" + "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", + "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", + "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0": { - "opid": "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3", - "vin": 0 - } + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" }, "knownTransitions": { - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3": { + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" ], "assignments": { "4000": { @@ -263,9 +250,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 1621579500098964609 + "blinding": 6805042725940518372 }, - "state": 666 + "state": 616 + }, + { + "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", + "state": 50 } ] } diff --git a/tests/fixtures/attack_genesis_schema_id.json b/tests/fixtures/attack_genesis_schema_id.json index 8bcadc7..f9e4bd6 100644 --- a/tests/fixtures/attack_genesis_schema_id.json +++ b/tests/fixtures/attack_genesis_schema_id.json @@ -5,7 +5,7 @@ "genesis": { "ffv": 0, "schemaId": "rgb:sch:JgqK5hJX9YBT4osCV7VcW_iLTcA5csUCnLzvaKTTrNY#mars-house-friend", - "timestamp": 1749656450, + "timestamp": 1750082198, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -27,9 +27,9 @@ "items": [ { "seal": { - "txid": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b", + "txid": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad", "vout": 0, - "blinding": 17895031244968614113 + "blinding": 10573374530598502032 }, "state": 666 } @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e:2", + "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a204a4b4d4611884f9832b8aeb64025c3e9b5c866be5a6cdeba1f4f009d9bef235d" + "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" }, { "value": 9000, - "scriptPubkey": "00146a1e500c8762e09a8b8961393ffe4519d1921ce1" + "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" }, { - "value": 99971800, - "scriptPubkey": "0014da5d6c5e6a83d234c0911eef61280036dce4c54d" + "value": 99981200, + "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" } ], "lockTime": 0 @@ -69,33 +69,31 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 5, + "cofactor": 1, "path": [ - "4ad99e92d609abd88b853448fb9a9f87be21d42cbe0ff9a036f327aa65f8b116", - "2add6a2e6f7d48401c7eed97095c7951990f13ae01466ea76ab44bccc53cdcfa", - "9ff8806a515fdd5428b1ef85c33a9e748d7bd00344e43b3928a3c414e8ad9341" + "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", + "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", + "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", + "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1": { - "opid": "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7", - "vin": 0 - } + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" }, "knownTransitions": { - "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7": { + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { "ffv": 0, - "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", + "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1" + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" ], "assignments": { "4000": { @@ -105,17 +103,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 3341417704379563898 + "blinding": 17184009278113549158 }, - "state": 77 + "state": 50 }, { "seal": { "txid": null, "vout": 2, - "blinding": 2986445335723771268 + "blinding": 8586455737525543612 }, - "state": 539 + "state": 616 } ] } @@ -131,7 +129,7 @@ "version": 2, "inputs": [ { - "prevOutput": "04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac:2", + "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -140,15 +138,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a2092035eb78e0b8d589e95e274fb69c85645efbbb091220a25ba23f093d1139705" + "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" }, { "value": 9000, - "scriptPubkey": "001478e18e564017d7ff3fc6dcbd994c0bb118bc77dc" + "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" }, { - "value": 99981200, - "scriptPubkey": "0014e3a0a519a66f044f13c254db465eed969328bea8" + "value": 99971800, + "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" } ], "lockTime": 0 @@ -156,33 +154,31 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 5, + "cofactor": 1, "path": [ - "e88b9afd394efeae404cff2591d02e9e204466ad0b47c888eb59551c9889158c", - "42967c9a1f5d1af028b31735da12edd1c8a826aea92b841424f3ba8ee1c98904", - "95828c4b34b82d4bd7e6525d86d0bbde089ad7adb6d692d213b1d3e00babf50f" + "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", + "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", + "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", + "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0": { - "opid": "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e", - "vin": 0 - } + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" }, "knownTransitions": { - "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e": { + "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { "ffv": 0, - "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", + "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0" + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" ], "assignments": { "4000": { @@ -192,17 +188,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 15557645237552166780 + "blinding": 18112855856365951572 }, - "state": 50 + "state": 77 }, { "seal": { "txid": null, "vout": 2, - "blinding": 3366345153327845559 + "blinding": 4666323833009824294 }, - "state": 616 + "state": 539 } ] } @@ -218,7 +214,7 @@ "version": 2, "inputs": [ { - "prevOutput": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b:0", + "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", "sigScript": "", "sequence": 0, "witness": [] @@ -227,15 +223,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20d1f74348ed624cc8702cf25a7f883f5bbf958a4d8fb3b7902bc09aa77f25d3b8" + "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" }, { "value": 9000, - "scriptPubkey": "001495d77ee93015b69a23bb4d0d27c31559a62318b6" + "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" }, { "value": 99990600, - "scriptPubkey": "00145799f04cab25bc03964912c755587688af302ba7" + "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" } ], "lockTime": 0 @@ -243,33 +239,31 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 5, + "cofactor": 1, "path": [ - "20ef039e8ed1a59a5083b7b48c97b3d2c09aa54bfb5d0ec370ded3718a019937", - "a45ec220a158ee11474aed9e7290d2f254831c885a49e6e6a93c31832ef8fdbc", - "5250d7ca61b0870cdd896d01984ceead2f28fb76eeb7acc66bbc511020bdc70e" + "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", + "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", + "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", + "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0": { - "opid": "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16", - "vin": 0 - } + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" }, "knownTransitions": { - "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16": { + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { "ffv": 0, - "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", + "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0" + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" ], "assignments": { "4000": { @@ -279,7 +273,7 @@ "seal": { "txid": null, "vout": 2, - "blinding": 17064100245782478357 + "blinding": 10921448307780233921 }, "state": 666 } diff --git a/tests/fixtures/attack_genesis_testnet.json b/tests/fixtures/attack_genesis_testnet.json index 11c5c78..35fe0a8 100644 --- a/tests/fixtures/attack_genesis_testnet.json +++ b/tests/fixtures/attack_genesis_testnet.json @@ -5,7 +5,7 @@ "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1749656450, + "timestamp": 1750082198, "issuer": "ssi:anonymous", "chainNet": "bitcoinMainnet", "sealClosingStrategy": "firstOpretOrTapret", @@ -27,9 +27,9 @@ "items": [ { "seal": { - "txid": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b", + "txid": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad", "vout": 0, - "blinding": 17895031244968614113 + "blinding": 10573374530598502032 }, "state": 666 } @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e:2", + "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a204a4b4d4611884f9832b8aeb64025c3e9b5c866be5a6cdeba1f4f009d9bef235d" + "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" }, { "value": 9000, - "scriptPubkey": "00146a1e500c8762e09a8b8961393ffe4519d1921ce1" + "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" }, { - "value": 99971800, - "scriptPubkey": "0014da5d6c5e6a83d234c0911eef61280036dce4c54d" + "value": 99981200, + "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" } ], "lockTime": 0 @@ -69,33 +69,31 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 5, + "cofactor": 1, "path": [ - "4ad99e92d609abd88b853448fb9a9f87be21d42cbe0ff9a036f327aa65f8b116", - "2add6a2e6f7d48401c7eed97095c7951990f13ae01466ea76ab44bccc53cdcfa", - "9ff8806a515fdd5428b1ef85c33a9e748d7bd00344e43b3928a3c414e8ad9341" + "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", + "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", + "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", + "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1": { - "opid": "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7", - "vin": 0 - } + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" }, "knownTransitions": { - "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7": { + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { "ffv": 0, - "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", + "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1" + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" ], "assignments": { "4000": { @@ -105,17 +103,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 3341417704379563898 + "blinding": 17184009278113549158 }, - "state": 77 + "state": 50 }, { "seal": { "txid": null, "vout": 2, - "blinding": 2986445335723771268 + "blinding": 8586455737525543612 }, - "state": 539 + "state": 616 } ] } @@ -131,7 +129,7 @@ "version": 2, "inputs": [ { - "prevOutput": "04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac:2", + "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -140,15 +138,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a2092035eb78e0b8d589e95e274fb69c85645efbbb091220a25ba23f093d1139705" + "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" }, { "value": 9000, - "scriptPubkey": "001478e18e564017d7ff3fc6dcbd994c0bb118bc77dc" + "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" }, { - "value": 99981200, - "scriptPubkey": "0014e3a0a519a66f044f13c254db465eed969328bea8" + "value": 99971800, + "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" } ], "lockTime": 0 @@ -156,33 +154,31 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 5, + "cofactor": 1, "path": [ - "e88b9afd394efeae404cff2591d02e9e204466ad0b47c888eb59551c9889158c", - "42967c9a1f5d1af028b31735da12edd1c8a826aea92b841424f3ba8ee1c98904", - "95828c4b34b82d4bd7e6525d86d0bbde089ad7adb6d692d213b1d3e00babf50f" + "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", + "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", + "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", + "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0": { - "opid": "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e", - "vin": 0 - } + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" }, "knownTransitions": { - "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e": { + "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { "ffv": 0, - "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", + "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0" + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" ], "assignments": { "4000": { @@ -192,17 +188,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 15557645237552166780 + "blinding": 18112855856365951572 }, - "state": 50 + "state": 77 }, { "seal": { "txid": null, "vout": 2, - "blinding": 3366345153327845559 + "blinding": 4666323833009824294 }, - "state": 616 + "state": 539 } ] } @@ -218,7 +214,7 @@ "version": 2, "inputs": [ { - "prevOutput": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b:0", + "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", "sigScript": "", "sequence": 0, "witness": [] @@ -227,15 +223,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20d1f74348ed624cc8702cf25a7f883f5bbf958a4d8fb3b7902bc09aa77f25d3b8" + "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" }, { "value": 9000, - "scriptPubkey": "001495d77ee93015b69a23bb4d0d27c31559a62318b6" + "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" }, { "value": 99990600, - "scriptPubkey": "00145799f04cab25bc03964912c755587688af302ba7" + "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" } ], "lockTime": 0 @@ -243,33 +239,31 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 5, + "cofactor": 1, "path": [ - "20ef039e8ed1a59a5083b7b48c97b3d2c09aa54bfb5d0ec370ded3718a019937", - "a45ec220a158ee11474aed9e7290d2f254831c885a49e6e6a93c31832ef8fdbc", - "5250d7ca61b0870cdd896d01984ceead2f28fb76eeb7acc66bbc511020bdc70e" + "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", + "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", + "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", + "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0": { - "opid": "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16", - "vin": 0 - } + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" }, "knownTransitions": { - "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16": { + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { "ffv": 0, - "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", + "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0" + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" ], "assignments": { "4000": { @@ -279,7 +273,7 @@ "seal": { "txid": null, "vout": 2, - "blinding": 17064100245782478357 + "blinding": 10921448307780233921 }, "state": 666 } diff --git a/tests/fixtures/attack_resolver_error.json b/tests/fixtures/attack_resolver_error.json index fb77ed6..7c5fdb0 100644 --- a/tests/fixtures/attack_resolver_error.json +++ b/tests/fixtures/attack_resolver_error.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "9501603f11b556960982c9a59a67457659d16fc7837580feeba5a84f7ff18d61": [ - "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145" + "1c49cd66865b0c0fb36b108a8a9ef78c4853d1780c8df74be6b874d866a8d259": [ + "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1749656356, + "timestamp": 1750082151, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114", - "vout": 0, - "blinding": 13403777090925923396 + "txid": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d", + "vout": 1, + "blinding": 17368930799645178615 }, "state": 666 } @@ -44,37 +44,55 @@ "bundles": [ { "pubWitness": { - "txid": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23" + "tx": { + "version": 2, + "inputs": [ + { + "prevOutput": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d:1", + "sigScript": "", + "sequence": 0, + "witness": [] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20afbb69b179dd11fbf97185bc2f7b5f7e6f0fb456f951e8661a6eb186e128e75e" + }, + { + "value": 99999600, + "scriptPubkey": "00145846bfbbad353d01cd5d5e83560e2efdd2d56452" + } + ], + "lockTime": 0 + } }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "3d06f069df3591e9bb393f22c2769f69922af67530282c2a5fb2d9d208592d68", - "4ea051dddb9739f467250fa6c1926bed02c59ecb8586163d2d17beefcb53c2c1", - "44b2530248e67c0c51d56fa2a7bf309c1db4931263787fcd2f5a8062a48b8fa3" + "5ee0f15a400dae4ddc746e806095c1b91474df8a1343da2ce55d62380bf1c3d9", + "a879d6005973e7fb3f568b0ed57bd1986564c203ac00f46cd6ab13c6adc21a6d", + "589015f185494ef80821f7a7e5c7d5c92f8b14e8f5481486b36099a90a047f3f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0": { - "opid": "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a", - "vin": 0 - } + "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0": "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a" }, "knownTransitions": { - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a": { + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0" + "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0" ], "assignments": { "4000": { @@ -84,13 +102,9 @@ "seal": { "txid": null, "vout": 1, - "blinding": 11344773579385591986 + "blinding": 7971877571019802006 }, - "state": 616 - }, - { - "seal": "fb0e03fdc93227c9097b335c4975ceab4d05bf4e3f70f739c2a9c27242656612", - "state": 50 + "state": 666 } ] } @@ -106,7 +120,7 @@ "version": 2, "inputs": [ { - "prevOutput": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23:1", + "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", "sigScript": "", "sequence": 0, "witness": [] @@ -115,11 +129,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20a382ff389fcaed42c49a09965bb2d657b722ea61b1b07113e8fc74eedc812095" + "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" }, { "value": 99998800, - "scriptPubkey": "0014d0d404b911357c63e508828bb2fa85a6127c6eb1" + "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" } ], "lockTime": 0 @@ -127,33 +141,30 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "bded953a2adc2c0981c4108b0b975d90e231f205ad0a88a56fc67de85ec5f18c", - "edc41e3179b85dcf7f4799a7941921310566cb419b975e2b303b3ec1e2196fa5", - "8153eb1c8e99ab980d78fbb2878eadb6c9cd388ad4cd5d700860dea09554290f" + "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", + "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", + "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0": { - "opid": "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241", - "vin": 0 - } + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" }, "knownTransitions": { - "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241": { + "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" ], "assignments": { "4000": { @@ -163,12 +174,12 @@ "seal": { "txid": null, "vout": 1, - "blinding": 4544899145095694536 + "blinding": 17092846758161066830 }, "state": 539 }, { - "seal": "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145", + "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", "state": 77 } ] @@ -181,58 +192,34 @@ }, { "pubWitness": { - "tx": { - "version": 2, - "inputs": [ - { - "prevOutput": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114:0", - "sigScript": "", - "sequence": 0, - "witness": [] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20fa6b63d4c8402175d6ef2c85617dee6434247cc8c762ee24243dc567b25a72e9" - }, - { - "value": 99999600, - "scriptPubkey": "0014bb5dff0b3584c4f838146f34e96f310f3e5c4028" - } - ], - "lockTime": 0 - } + "txid": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af" }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "ad4d83741b4460ab72eac597e9f4d5235874315d65cb6e336c1eeedbb076e1ee", - "85d92bd272ce2be6e8e5a1d1777fab6ed0c335b5e09f2cb116fb24d106f95ecc", - "9d9f07f52e891f146904c4051984f5497f83963104991e6b186bb1ba333b16fa" + "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", + "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", + "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0": { - "opid": "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3", - "vin": 0 - } + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" }, "knownTransitions": { - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3": { + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" ], "assignments": { "4000": { @@ -242,9 +229,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 1621579500098964609 + "blinding": 6805042725940518372 }, - "state": 666 + "state": 616 + }, + { + "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", + "state": 50 } ] } diff --git a/tests/fixtures/b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9.json b/tests/fixtures/b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9.json deleted file mode 100644 index 4cc86f0..0000000 --- a/tests/fixtures/b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114:0", - "sigScript": "", - "sequence": 0, - "witness": [ - "3045022100ccfa5dd48e15198fb6ede8d4f9aa9b51679d8135511a14b504db5af24402bc10022010e1f12346ae23160ea0479a3e46d04f239b329f82b8063e1462e640024cf23301", - "02ec8110692a94f33a4d49a3014df1f627fc21a928e71ccd659545a08e1d060466" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20fa6b63d4c8402175d6ef2c85617dee6434247cc8c762ee24243dc567b25a72e9" - }, - { - "value": 99999600, - "scriptPubkey": "0014bb5dff0b3584c4f838146f34e96f310f3e5c4028" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/consignment_A.json b/tests/fixtures/consignment_A.json index 1429b48..2e53809 100644 --- a/tests/fixtures/consignment_A.json +++ b/tests/fixtures/consignment_A.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "9501603f11b556960982c9a59a67457659d16fc7837580feeba5a84f7ff18d61": [ - "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145" + "1c49cd66865b0c0fb36b108a8a9ef78c4853d1780c8df74be6b874d866a8d259": [ + "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1749656356, + "timestamp": 1750082151, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114", - "vout": 0, - "blinding": 13403777090925923396 + "txid": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d", + "vout": 1, + "blinding": 17368930799645178615 }, "state": 666 } @@ -48,7 +48,7 @@ "version": 2, "inputs": [ { - "prevOutput": "b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9:1", + "prevOutput": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d:1", "sigScript": "", "sequence": 0, "witness": [] @@ -57,11 +57,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20a9b8418b25785eb52dd485ec0eff0f4713d95219c288a9bcb1e6705cb84edafd" + "scriptPubkey": "6a20afbb69b179dd11fbf97185bc2f7b5f7e6f0fb456f951e8661a6eb186e128e75e" }, { - "value": 99999200, - "scriptPubkey": "0014adbea30c365d0509278cf035fb756c92fb96854e" + "value": 99999600, + "scriptPubkey": "00145846bfbbad353d01cd5d5e83560e2efdd2d56452" } ], "lockTime": 0 @@ -69,33 +69,30 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "3d06f069df3591e9bb393f22c2769f69922af67530282c2a5fb2d9d208592d68", - "4ea051dddb9739f467250fa6c1926bed02c59ecb8586163d2d17beefcb53c2c1", - "44b2530248e67c0c51d56fa2a7bf309c1db4931263787fcd2f5a8062a48b8fa3" + "5ee0f15a400dae4ddc746e806095c1b91474df8a1343da2ce55d62380bf1c3d9", + "a879d6005973e7fb3f568b0ed57bd1986564c203ac00f46cd6ab13c6adc21a6d", + "589015f185494ef80821f7a7e5c7d5c92f8b14e8f5481486b36099a90a047f3f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0": { - "opid": "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a", - "vin": 0 - } + "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0": "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a" }, "knownTransitions": { - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a": { + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3/4000/0" + "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0" ], "assignments": { "4000": { @@ -105,13 +102,9 @@ "seal": { "txid": null, "vout": 1, - "blinding": 11344773579385591986 + "blinding": 7971877571019802006 }, - "state": 616 - }, - { - "seal": "fb0e03fdc93227c9097b335c4975ceab4d05bf4e3f70f739c2a9c27242656612", - "state": 50 + "state": 666 } ] } @@ -127,7 +120,7 @@ "version": 2, "inputs": [ { - "prevOutput": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23:1", + "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", "sigScript": "", "sequence": 0, "witness": [] @@ -136,11 +129,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20a382ff389fcaed42c49a09965bb2d657b722ea61b1b07113e8fc74eedc812095" + "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" }, { "value": 99998800, - "scriptPubkey": "0014d0d404b911357c63e508828bb2fa85a6127c6eb1" + "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" } ], "lockTime": 0 @@ -148,33 +141,30 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "bded953a2adc2c0981c4108b0b975d90e231f205ad0a88a56fc67de85ec5f18c", - "edc41e3179b85dcf7f4799a7941921310566cb419b975e2b303b3ec1e2196fa5", - "8153eb1c8e99ab980d78fbb2878eadb6c9cd388ad4cd5d700860dea09554290f" + "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", + "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", + "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0": { - "opid": "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241", - "vin": 0 - } + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" }, "knownTransitions": { - "b1fcd317c536864c19fc518a821518d34ba3461469fc91731e2ec83658800241": { + "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "894134cf3f51f15b9830a1e3e75139e6541dbb5c244b0254e9518c83b77a3e8a/4000/0" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" ], "assignments": { "4000": { @@ -184,12 +174,12 @@ "seal": { "txid": null, "vout": 1, - "blinding": 4544899145095694536 + "blinding": 17092846758161066830 }, "state": 539 }, { - "seal": "351873237c9242c813fc904881d411a986561f4337d355bc5fa9df0317fda145", + "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", "state": 77 } ] @@ -206,7 +196,7 @@ "version": 2, "inputs": [ { - "prevOutput": "482858359348f4a00222b66d80a89b9a8d0ee656fda1d3ba8cd2d10f37709114:0", + "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", "sigScript": "", "sequence": 0, "witness": [] @@ -215,11 +205,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20fa6b63d4c8402175d6ef2c85617dee6434247cc8c762ee24243dc567b25a72e9" + "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" }, { - "value": 99999600, - "scriptPubkey": "0014bb5dff0b3584c4f838146f34e96f310f3e5c4028" + "value": 99999200, + "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" } ], "lockTime": 0 @@ -227,33 +217,30 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 2, + "cofactor": 1, "path": [ - "ad4d83741b4460ab72eac597e9f4d5235874315d65cb6e336c1eeedbb076e1ee", - "85d92bd272ce2be6e8e5a1d1777fab6ed0c335b5e09f2cb116fb24d106f95ecc", - "9d9f07f52e891f146904c4051984f5497f83963104991e6b186bb1ba333b16fa" + "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", + "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", + "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0": { - "opid": "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3", - "vin": 0 - } + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" }, "knownTransitions": { - "de2e54f1ff710984ef30c92cd0d5db730a39bb97e68b282b521c79c51bd4a1d3": { + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { "ffv": 0, - "contractId": "rgb:Jyw6QfPl-Gcv_mTg-m7MP~Ce-IeXR1h7-rWIGnlF-7dwgF8s", + "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "272c3a41f3e519cbfe993826ecc3ff09e21e5d1d61eeb5881a7945eddc2017cb/4000/0" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" ], "assignments": { "4000": { @@ -263,9 +250,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 1621579500098964609 + "blinding": 6805042725940518372 }, - "state": 666 + "state": 616 + }, + { + "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", + "state": 50 } ] } diff --git a/tests/fixtures/consignment_B.json b/tests/fixtures/consignment_B.json index 7489dbe..60bb766 100644 --- a/tests/fixtures/consignment_B.json +++ b/tests/fixtures/consignment_B.json @@ -5,7 +5,7 @@ "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1749656450, + "timestamp": 1750082198, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -27,9 +27,9 @@ "items": [ { "seal": { - "txid": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b", + "txid": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad", "vout": 0, - "blinding": 17895031244968614113 + "blinding": 10573374530598502032 }, "state": 666 } @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e:2", + "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a204a4b4d4611884f9832b8aeb64025c3e9b5c866be5a6cdeba1f4f009d9bef235d" + "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" }, { "value": 9000, - "scriptPubkey": "00146a1e500c8762e09a8b8961393ffe4519d1921ce1" + "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" }, { - "value": 99971800, - "scriptPubkey": "0014da5d6c5e6a83d234c0911eef61280036dce4c54d" + "value": 99981200, + "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" } ], "lockTime": 0 @@ -69,33 +69,31 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 5, + "cofactor": 1, "path": [ - "4ad99e92d609abd88b853448fb9a9f87be21d42cbe0ff9a036f327aa65f8b116", - "2add6a2e6f7d48401c7eed97095c7951990f13ae01466ea76ab44bccc53cdcfa", - "9ff8806a515fdd5428b1ef85c33a9e748d7bd00344e43b3928a3c414e8ad9341" + "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", + "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", + "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", + "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1": { - "opid": "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7", - "vin": 0 - } + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" }, "knownTransitions": { - "2c9c928f9f6a00321b41b815cd501ffbd2840d8ab53303d72722f90c2f2efcb7": { + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { "ffv": 0, - "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", + "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e/4000/1" + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" ], "assignments": { "4000": { @@ -105,17 +103,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 3341417704379563898 + "blinding": 17184009278113549158 }, - "state": 77 + "state": 50 }, { "seal": { "txid": null, "vout": 2, - "blinding": 2986445335723771268 + "blinding": 8586455737525543612 }, - "state": 539 + "state": 616 } ] } @@ -131,7 +129,7 @@ "version": 2, "inputs": [ { - "prevOutput": "04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac:2", + "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -140,15 +138,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a2092035eb78e0b8d589e95e274fb69c85645efbbb091220a25ba23f093d1139705" + "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" }, { "value": 9000, - "scriptPubkey": "001478e18e564017d7ff3fc6dcbd994c0bb118bc77dc" + "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" }, { - "value": 99981200, - "scriptPubkey": "0014e3a0a519a66f044f13c254db465eed969328bea8" + "value": 99971800, + "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" } ], "lockTime": 0 @@ -156,33 +154,31 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 5, + "cofactor": 1, "path": [ - "e88b9afd394efeae404cff2591d02e9e204466ad0b47c888eb59551c9889158c", - "42967c9a1f5d1af028b31735da12edd1c8a826aea92b841424f3ba8ee1c98904", - "95828c4b34b82d4bd7e6525d86d0bbde089ad7adb6d692d213b1d3e00babf50f" + "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", + "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", + "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", + "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0": { - "opid": "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e", - "vin": 0 - } + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" }, "knownTransitions": { - "ec7b4ec07ca119ec85387c3140a2065a3f4bc78be944fb0adff2d98ed21f190e": { + "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { "ffv": 0, - "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", + "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16/4000/0" + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" ], "assignments": { "4000": { @@ -192,17 +188,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 15557645237552166780 + "blinding": 18112855856365951572 }, - "state": 50 + "state": 77 }, { "seal": { "txid": null, "vout": 2, - "blinding": 3366345153327845559 + "blinding": 4666323833009824294 }, - "state": 616 + "state": 539 } ] } @@ -218,7 +214,7 @@ "version": 2, "inputs": [ { - "prevOutput": "9da567563cf2e38f5dd6ba95a6655b9cdfa344f164caf75f835b6d3e0e204d2b:0", + "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", "sigScript": "", "sequence": 0, "witness": [] @@ -227,15 +223,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20d1f74348ed624cc8702cf25a7f883f5bbf958a4d8fb3b7902bc09aa77f25d3b8" + "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" }, { "value": 9000, - "scriptPubkey": "001495d77ee93015b69a23bb4d0d27c31559a62318b6" + "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" }, { "value": 99990600, - "scriptPubkey": "00145799f04cab25bc03964912c755587688af302ba7" + "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" } ], "lockTime": 0 @@ -243,33 +239,31 @@ }, "anchor": { "mpcProof": { - "pos": 7, - "cofactor": 0, + "pos": 5, + "cofactor": 1, "path": [ - "20ef039e8ed1a59a5083b7b48c97b3d2c09aa54bfb5d0ec370ded3718a019937", - "a45ec220a158ee11474aed9e7290d2f254831c885a49e6e6a93c31832ef8fdbc", - "5250d7ca61b0870cdd896d01984ceead2f28fb76eeb7acc66bbc511020bdc70e" + "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", + "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", + "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", + "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0": { - "opid": "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16", - "vin": 0 - } + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" }, "knownTransitions": { - "6b5719d62fffcf48f4bfdff5525a29678026dbcd3b55c7d9e38d8dac0168dd16": { + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { "ffv": 0, - "contractId": "rgb:D_2C63Mr-fzdw5NB-yVyN_KS-gWOtBUH-G0zGAVS-qEf8kaA", + "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, "transitionType": 10000, "metadata": {}, "globals": {}, "inputs": [ - "0fed82eb732b7f3770e4d07257237e2928163ad0541c6d33180552a847fc91a0/4000/0" + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" ], "assignments": { "4000": { @@ -279,7 +273,7 @@ "seal": { "txid": null, "vout": 2, - "blinding": 17064100245782478357 + "blinding": 10921448307780233921 }, "state": 666 } diff --git a/tests/fixtures/e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b.json b/tests/fixtures/e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b.json new file mode 100644 index 0000000..cfaadf2 --- /dev/null +++ b/tests/fixtures/e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", + "sigScript": "", + "sequence": 0, + "witness": [ + "3044022014fd49abce6fffdb8e7d90682ef837dffb011a294473c1649705ba1f23f6bd2602202245e6c65baa8befe687439d0f65c8dd4d2401f3c170d1463567da7fce04a32901", + "0270233f5eaa20a7198927f8e987d00cf8de9663ad2b417e4e9254d10b5c1085ee" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" + }, + { + "value": 9000, + "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" + }, + { + "value": 99981200, + "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/e759afa06dbcb23015ca05447cbb232b659601dec610e2604415d50540417745.json b/tests/fixtures/e759afa06dbcb23015ca05447cbb232b659601dec610e2604415d50540417745.json deleted file mode 100644 index 988723b..0000000 --- a/tests/fixtures/e759afa06dbcb23015ca05447cbb232b659601dec610e2604415d50540417745.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e:2", - "sigScript": "", - "sequence": 0, - "witness": [ - "3044022070bfc9a67c473e0ad2a39911b412024ba37a4a74174f20c67b9ff1e39e14c421022053a29516fbf7c8541948b126b5fbb2010c5ed73c7d1c0b7d0357e9a854a41b9f01", - "0340d4ddd15da59701c1edaae86ce171229771a2e09862f6943f823440ceab8dc1" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a204a4b4d4611884f9832b8aeb64025c3e9b5c866be5a6cdeba1f4f009d9bef235d" - }, - { - "value": 9000, - "scriptPubkey": "00146a1e500c8762e09a8b8961393ffe4519d1921ce1" - }, - { - "value": 99971800, - "scriptPubkey": "0014da5d6c5e6a83d234c0911eef61280036dce4c54d" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/f618e7e385105ddc8bb8b013a449993ded7476ee305466dffa2aee1a11416252.json b/tests/fixtures/f618e7e385105ddc8bb8b013a449993ded7476ee305466dffa2aee1a11416252.json deleted file mode 100644 index 75098a5..0000000 --- a/tests/fixtures/f618e7e385105ddc8bb8b013a449993ded7476ee305466dffa2aee1a11416252.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23:1", - "sigScript": "", - "sequence": 0, - "witness": [ - "304402203f2cb626fdf0629968f5932989db7442635b3e5c78f083af606828199f61328302204857601649c014eb1b148fae8fc0a1f758d53e3b362b32c06d0fe74dd8cb4b3e01", - "033685defed8e8f8f0638a617e09fd2a8bce71c81c88d5124626433bc8724ceffc" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20a382ff389fcaed42c49a09965bb2d657b722ea61b1b07113e8fc74eedc812095" - }, - { - "value": 99998800, - "scriptPubkey": "0014d0d404b911357c63e508828bb2fa85a6127c6eb1" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23.json b/tests/fixtures/f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23.json deleted file mode 100644 index 75d88e3..0000000 --- a/tests/fixtures/f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9:1", - "sigScript": "", - "sequence": 0, - "witness": [ - "3045022100e35e4b8584d3a1d1a8622cd8fd8160d2f52854324af5789d3b6daf2ee90eaf0f02201238d7f7319fcf4c07cc4bdf835141efa34f9d9bfe6d985bdecaade76360616201", - "03077be88f095dd45313396950ed45e24d08e99b48f2111d9dbacd10e5df51197e" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20a9b8418b25785eb52dd485ec0eff0f4713d95219c288a9bcb1e6705cb84edafd" - }, - { - "value": 99999200, - "scriptPubkey": "0014adbea30c365d0509278cf035fb756c92fb96854e" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a.json b/tests/fixtures/fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a.json new file mode 100644 index 0000000..afde9c0 --- /dev/null +++ b/tests/fixtures/fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d:1", + "sigScript": "", + "sequence": 0, + "witness": [ + "3045022100c845ac704b40941bfd4a51190b41f7e5ce96de259887e0e6c51927b70726c1e4022054092ecb5f746a463bbf2a574cbc9d846660ac41437e1bd24be36ed721131deb01", + "03104d83efc106253ecc6cc7060ac3e7d8fdf57f99dacf2da291c75509ae2cfb6c" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20afbb69b179dd11fbf97185bc2f7b5f7e6f0fb456f951e8661a6eb186e128e75e" + }, + { + "value": 99999600, + "scriptPubkey": "00145846bfbbad353d01cd5d5e83560e2efdd2d56452" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/transfers.rs b/tests/transfers.rs index 764c641..493546d 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -2136,14 +2136,7 @@ fn concealed_known_transition() { let bundle = consignment .bundles .iter() - .find(|wb| { - wb.bundle - .input_map - .values() - .map(|io| io.opid) - .collect::>() - .contains(&opid_2) - }) + .find(|wb| wb.bundle.input_map_opids().contains(&opid_2)) .unwrap(); assert!(!bundle.bundle.known_transitions.contains_key(&opid_2)); diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs index c127402..08ebea5 100644 --- a/tests/utils/mod.rs +++ b/tests/utils/mod.rs @@ -96,10 +96,10 @@ pub use rgb::{ validation::{Failure, ResolveWitness, Scripts, Validity, Warning, WitnessResolverError}, vm::{WitnessOrd, WitnessPos}, Assign, AssignmentDetails, AssignmentType, BundleId, DescriptorRgb, FungibleState, GenesisSeal, - GlobalDetails, GlobalStateSchema, GraphSeal, Identity, InputOpid, MetaDetails, MetaType, - MetaValue, Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, - RevealedValue, RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, - Transition, TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, + GlobalDetails, GlobalStateSchema, GraphSeal, Identity, MetaDetails, MetaType, MetaValue, + Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, RevealedValue, + RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, Transition, + TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, }; #[cfg(feature = "altered")] pub use rgb_altered::{ @@ -114,10 +114,10 @@ pub use rgb_altered::{ validation::{Failure, ResolveWitness, Scripts, Validity, Warning, WitnessResolverError}, vm::{WitnessOrd, WitnessPos}, Assign, AssignmentDetails, AssignmentType, BundleId, DescriptorRgb, FungibleState, GenesisSeal, - GlobalDetails, GlobalStateSchema, GraphSeal, Identity, InputOpid, MetaDetails, MetaType, - MetaValue, Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, - RevealedValue, RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, - Transition, TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, + GlobalDetails, GlobalStateSchema, GraphSeal, Identity, MetaDetails, MetaType, MetaValue, + Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, RevealedValue, + RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, Transition, + TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, }; pub use rgbstd::{ containers::{ diff --git a/tests/validation.rs b/tests/validation.rs index b7f649c..1efa246 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -82,11 +82,11 @@ impl Scenario { match self { Self::A => { let (tx_1, witness_id_1) = - get_tx("b5a9ff2062fff9e71af1c30fc77680d60b3af847b854ae870b31955bdbd4e2b9"); + get_tx("fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a"); let (tx_2, witness_id_2) = - get_tx("f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23"); + get_tx("03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af"); let (tx_3, witness_id_3) = - get_tx("f618e7e385105ddc8bb8b013a449993ded7476ee305466dffa2aee1a11416252"); + get_tx("0f8f09b5898c6f0c16ffaf4f10d87d67577578d443ba1f17e73196e8d13bf16a"); MockResolver { pub_witnesses: map![ witness_id_1 => MockResolvePubWitness::Success(tx_1), @@ -102,11 +102,11 @@ impl Scenario { } Self::B => { let (tx_1, witness_id_1) = - get_tx("04d0bcc455d66123f31ef40be36220347df72ce654e0bae12686a236da4399ac"); + get_tx("abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b"); let (tx_2, witness_id_2) = - get_tx("89f7934cb06d672c769e2a723ac134e3cc5bb084451b0489af6d4925cb540f5e"); + get_tx("e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b"); let (tx_3, witness_id_3) = - get_tx("e759afa06dbcb23015ca05447cbb232b659601dec610e2604415d50540417745"); + get_tx("5599bb3c61fad724e71ce1ed10d719d697d72ff18693bd8cefbb37f8a585808c"); MockResolver { pub_witnesses: map![ witness_id_1 => MockResolvePubWitness::Success(tx_1), @@ -134,12 +134,12 @@ fn replace_transition_in_bundle( known_transitions.remove(&old_opid); let transition_id = transition.id(); known_transitions.insert(transition_id, transition.clone()); - let mut input_map = BTreeMap::::new(); - for (opout, mut input_opid) in witness_bundle.bundle.input_map.clone().into_iter() { - if input_opid.opid == old_opid { - input_opid.opid = transition_id; + let mut input_map = BTreeMap::::new(); + for (opout, mut opid) in witness_bundle.bundle.input_map.clone().into_iter() { + if opid == old_opid { + opid = transition_id; } - input_map.insert(opout, input_opid); + input_map.insert(opout, opid); } let mut witness_psbt = Psbt::from_tx(witness_bundle.pub_witness.tx().unwrap().clone()); let idx = witness_psbt @@ -380,15 +380,15 @@ fn validate_consignment_bundles_fail() { assert_eq!(validation_status.failures.len(), 3); assert!(matches!( validation_status.failures[0], - Failure::SealsInvalid(_, _, _) + Failure::SealNoPubWitness(_, _, _) )); assert!(matches!( validation_status.failures[1], - Failure::BundleInvalidCommitment(_, _, _, _) + Failure::SealsInvalid(_, _, _) )); assert!(matches!( validation_status.failures[2], - Failure::SealNoPubWitness(_, _, _) + Failure::WitnessMissingInput(_, _, _) )); assert!(validation_status.warnings.is_empty()); assert!(validation_status.info.is_empty()); @@ -403,7 +403,7 @@ fn validate_consignment_resolver_error() { let base_resolver = scenario.resolver(); let consignment = get_consignment_from_json("attack_resolver_error"); let txid = - Txid::from_str("f8cf3673813f074cd4775a4b77772a4185fa084c47949395fb0fc35c2908ad23").unwrap(); + Txid::from_str("03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af").unwrap(); let wbundle = consignment .bundles .iter() @@ -642,13 +642,7 @@ fn validate_consignment_commitments_fail() { new_bundle .bundle .input_map - .insert( - Opout::strict_dumb(), - InputOpid { - opid: OpId::strict_dumb(), - vin: Vout::from_u32(2), - }, - ) + .insert(Opout::strict_dumb(), OpId::strict_dumb()) .unwrap(); consignment.bundles = LargeOrdSet::from_checked(bset![bundle.clone(), new_bundle]); @@ -882,45 +876,6 @@ fn validate_consignment_commitments_fail() { dbg!(&failures); assert_eq!(failures.len(), 1); assert!(matches!(failures[0], Failure::ExtraKnownTransition(_))); - - // BundleInvalidCommitment: change witness txid in witness_bundle - let mut consignment = base_consignment.clone(); - let mut bundles = consignment.bundles.release(); - let spent_transitions = bundles - .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) - .map(|ti| ti.op) - .collect::>(); - let mut new_bundle = bundles - .iter() - .find(|b| { - spent_transitions - .iter() - .all(|st| !b.bundle.known_transitions.contains_key(st)) - }) - .unwrap() - .clone(); - let mut witness = new_bundle.pub_witness.tx().unwrap().clone(); - let fst_input = witness.inputs[0].clone(); - witness.inputs[0].prev_output = Outpoint::strict_dumb(); - witness.inputs.push(fst_input).unwrap(); - let witness_id = witness.txid(); - new_bundle.pub_witness = PubWitness::Txid(witness_id); - bundles.insert(new_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); - let mut alt_resolver = resolver.clone(); - alt_resolver - .pub_witnesses - .insert(witness_id, MockResolvePubWitness::Success(witness)); - let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); - let failures = res.unwrap_err().failures; - dbg!(&failures); - assert_eq!(failures.len(), 1); - assert!(matches!( - failures[0], - Failure::BundleInvalidCommitment(_, _, _, _) - )); } #[cfg(not(feature = "altered"))] From 0339c7d36463ef4bb22c3a529ae4aac1a70a4eda Mon Sep 17 00:00:00 2001 From: step Date: Thu, 12 Jun 2025 17:05:01 +0200 Subject: [PATCH 11/22] add unmatching_transition_id test --- tests/validation.rs | 114 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 105 insertions(+), 9 deletions(-) diff --git a/tests/validation.rs b/tests/validation.rs index 1efa246..50eb98f 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -130,7 +130,6 @@ fn replace_transition_in_bundle( transition: Transition, ) -> WitnessBundle { let mut known_transitions = witness_bundle.bundle.known_transitions.release().clone(); - let contract_id = known_transitions.values().last().unwrap().contract_id; known_transitions.remove(&old_opid); let transition_id = transition.id(); known_transitions.insert(transition_id, transition.clone()); @@ -141,18 +140,40 @@ fn replace_transition_in_bundle( } input_map.insert(opout, opid); } + let bundle = TransitionBundle { + input_map: NonEmptyOrdMap::from_checked(input_map), + known_transitions: NonEmptyOrdMap::from_checked(known_transitions), + }; + update_witness_and_anchor( + WitnessBundle { + bundle, + ..witness_bundle + }, + None, + ) +} + +fn update_witness_and_anchor( + witness_bundle: WitnessBundle, + contract_id: Option, +) -> WitnessBundle { let mut witness_psbt = Psbt::from_tx(witness_bundle.pub_witness.tx().unwrap().clone()); let idx = witness_psbt .outputs() .find(|o| o.script.is_op_return()) .unwrap() .index(); - let bundle = TransitionBundle { - input_map: NonEmptyOrdMap::from_checked(input_map), - known_transitions: NonEmptyOrdMap::from_checked(known_transitions), - }; + let contract_id = contract_id.unwrap_or( + witness_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .contract_id, + ); let protocol_id = mpc::ProtocolId::from(contract_id); - let message = mpc::Message::from(bundle.bundle_id()); + let message = mpc::Message::from(witness_bundle.bundle.bundle_id()); witness_psbt.output_mut(idx).unwrap().script = ScriptPubkey::op_return(&[]); witness_psbt .output_mut(idx) @@ -174,11 +195,10 @@ fn replace_transition_in_bundle( let mut anchor = witness_bundle.anchor.clone(); anchor.mpc_proof = proof.to_merkle_proof(protocol_id).unwrap(); - let pub_witness = PubWitness::Tx(witness.clone()); WitnessBundle { - pub_witness, + pub_witness: PubWitness::Tx(witness.clone()), anchor, - bundle, + bundle: witness_bundle.bundle, } } @@ -1287,9 +1307,12 @@ fn validate_consignment_logic_fail() { .unwrap() .clone(); let old_opid = transition.id(); + let old_contract_id = transition.contract_id; transition.contract_id = ContractId::strict_dumb(); let transition_id = transition.id(); let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + // update again with the correct contract_id, otherwise we get SealsInvalid + let witness_bundle = update_witness_and_anchor(witness_bundle, Some(old_contract_id)); let alt_resolver = resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); bundles.replace(witness_bundle); @@ -1303,3 +1326,76 @@ fn validate_consignment_logic_fail() { Failure::ContractMismatch(transition_id, ContractId::strict_dumb()) ); } + +#[cfg(not(feature = "altered"))] +#[test] +fn validate_consignment_unmatching_transition_id() { + let scenario = Scenario::B; + let resolver = scenario.resolver(); + + let base_consignment = get_consignment_from_json(&format!("consignment_{scenario}")); + + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let spent_transitions = bundles + .iter() + .flat_map(|b| b.bundle.known_transitions.values()) + .flat_map(|t| t.inputs.iter()) + .map(|ti| ti.op) + .collect::>(); + let mut witness_bundle = bundles + .iter() + .find(|b| { + spent_transitions + .iter() + .all(|st| !b.bundle.known_transitions.contains_key(st)) + }) + .unwrap() + .clone(); + let contract_id = witness_bundle + .bundle + .known_transitions + .values() + .last() + .unwrap() + .contract_id; + + let mut other_wbundle = witness_bundle.clone(); + let (&opid, transition) = witness_bundle + .bundle + .known_transitions + .last_key_value() + .unwrap(); + // modified transition lies in witness_bundle, but is committed to in other_bundle + let mut transition = transition.clone(); + transition.nonce -= 1; + witness_bundle + .bundle + .known_transitions + .insert(opid, transition) + .unwrap(); + bundles.replace(witness_bundle); + + let dumb_transition = Transition::strict_dumb(); + let dumb_id = dumb_transition.id(); + // known_transitions can't be empty, so we need to add something + // we have no free allocations for a meaningful transition so it is a dumb one + // which causes OperationAbsent(OpId(0000000000000000000000000000000000000000000000000000000000000000)) + other_wbundle.bundle.known_transitions = + NonEmptyOrdMap::with_key_value(dumb_id, dumb_transition); + other_wbundle + .bundle + .input_map + .insert(Opout::strict_dumb(), dumb_id) + .unwrap(); + let other_wbundle = update_witness_and_anchor(other_wbundle, Some(contract_id)); + + let alt_resolver = + resolver.with_new_transaction(other_wbundle.pub_witness.tx().unwrap().clone()); + bundles.insert(other_wbundle); + consignment.bundles = LargeOrdSet::from_checked(bundles); + let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + assert_eq!(failures[0], Failure::OperationAbsent(OpId::strict_dumb())); + assert!(failures.len() > 1); +} From 2800a27043f999c292efd62634624f26d5e85fbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Mon, 16 Jun 2025 16:40:14 +0200 Subject: [PATCH 12/22] add check for TransitionIdMismatch --- rgb-core | 2 +- tests/validation.rs | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/rgb-core b/rgb-core index 3c54f70..8bb89ef 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit 3c54f70c2f19038fc431c65ecf7a2436c24323e4 +Subproject commit 8bb89ef757e697835da4882a1d60b4448bf719ff diff --git a/tests/validation.rs b/tests/validation.rs index 50eb98f..194e09d 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -1372,7 +1372,7 @@ fn validate_consignment_unmatching_transition_id() { witness_bundle .bundle .known_transitions - .insert(opid, transition) + .insert(opid, transition.clone()) .unwrap(); bundles.replace(witness_bundle); @@ -1396,6 +1396,10 @@ fn validate_consignment_unmatching_transition_id() { consignment.bundles = LargeOrdSet::from_checked(bundles); let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; - assert_eq!(failures[0], Failure::OperationAbsent(OpId::strict_dumb())); - assert!(failures.len() > 1); + assert_eq!(failures.len(), 2); + assert_eq!( + failures[0], + Failure::TransitionIdMismatch(opid, transition.id()) + ); + assert_eq!(failures[1], Failure::OperationAbsent(OpId::strict_dumb())); } From 33b4effb5d9f046dbb0191ec208c23727bda94f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Tue, 17 Jun 2025 18:45:48 +0200 Subject: [PATCH 13/22] add ifa_move_inflation_right test --- tests/transfers.rs | 104 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/tests/transfers.rs b/tests/transfers.rs index 493546d..cc47d62 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -1592,6 +1592,110 @@ fn ifa_inflation() { assert_eq!(inflatable, 0); } +#[cfg(not(feature = "altered"))] +#[test] +fn ifa_move_inflation_right() { + initialize(); + + let mut wlt_1 = get_wallet(&DescriptorType::Wpkh); + let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); + + let issued_supply = 999; + let inflation_supply = 555; + let inflation_outpoint = wlt_1.get_utxo(None); + let contract_id = wlt_1.issue_ifa( + issued_supply, + None, + vec![], + vec![(inflation_outpoint, inflation_supply)], + ); + let schema_id = wlt_1.schema_id(contract_id); + + // partially move inflation right from wlt_1 to wlt_2 + let inflation_moved = 55; + let inflation_moved_utxo = wlt_2.get_utxo(None); + let mut invoice = wlt_2.invoice( + contract_id, + schema_id, + inflation_moved, + InvoiceType::Blinded(Some(inflation_moved_utxo)), + ); + invoice.assignment_name = Some(FieldName::from_str("inflationAllowance").unwrap()); + wlt_1.send_ifa_to_invoice(&mut wlt_2, invoice); + let contract = wlt_2.contract_wrapper::(contract_id); + let inflation_allocations = contract + .inflation_allocations(AllocationFilter::Wallet.filter_for(&wlt_2)) + .collect::>(); + let inflation_outpoints = inflation_allocations + .iter() + .map(|oa| oa.seal.outpoint().unwrap()) + .collect::>(); + assert_eq!(inflation_outpoints.len(), 1); + assert_eq!(inflation_outpoints[0], inflation_moved_utxo); + assert_eq!( + inflation_allocations + .iter() + .map(|oa| oa.state.value()) + .sum::(), + inflation_moved + ); + + // inflate asset with wlt_2 + wlt_2.inflate_ifa( + contract_id, + vec![inflation_moved_utxo], + vec![inflation_moved], + ); + let contract = wlt_2.contract_wrapper::(contract_id); + assert_eq!( + contract.total_issued_supply().value(), + issued_supply + inflation_moved + ); + + // inflate asset with wlt_1 + let contract = wlt_1.contract_wrapper::(contract_id); + let inflation_change_utxo = contract + .inflation_allocations(AllocationFilter::Wallet.filter_for(&wlt_1)) + .map(|oa| oa.seal.outpoint().unwrap()) + .collect::>()[0]; + let inflation_change = inflation_supply - inflation_moved; + wlt_1.inflate_ifa( + contract_id, + vec![inflation_change_utxo], + vec![inflation_change], + ); + let contract = wlt_1.contract_wrapper::(contract_id); + let wlt_1_amt = issued_supply + inflation_change; + assert_eq!(contract.total_issued_supply().value(), wlt_1_amt); + + // wlt_1 sends all to wlt_2 + wlt_1.send_ifa(&mut wlt_2, TransferType::Blinded, contract_id, wlt_1_amt); + wlt_1.check_allocations(contract_id, AssetSchema::Ifa, vec![], false); + wlt_2.check_allocations( + contract_id, + AssetSchema::Ifa, + vec![wlt_1_amt, inflation_moved], + false, + ); + + // check max supply has been reached, no more inflation allowed + let contract = wlt_2.contract_wrapper::(contract_id); + let max_supply = contract.max_supply().value(); + let total_issued_supply = contract.total_issued_supply().value(); + assert_eq!(max_supply, total_issued_supply); + assert_eq!(max_supply, wlt_1_amt + inflation_moved); + let inflation_allocations = contract + .inflation_allocations(AllocationFilter::Wallet.filter_for(&wlt_2)) + .collect::>(); + assert_eq!( + inflation_allocations + .iter() + .map(|oa| oa.state.value()) + .sum::(), + 0 + ); +} + #[cfg(not(feature = "altered"))] #[test] fn ifa_burn() { From e04243bb9cfd1a39131106ca51f5cb811bd1ee5e Mon Sep 17 00:00:00 2001 From: step Date: Tue, 17 Jun 2025 19:36:07 +0200 Subject: [PATCH 14/22] update submodules (fix ifa_move_inflation_right test) --- rgb-core | 2 +- rgb-schemata | 2 +- tests/issuance.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rgb-core b/rgb-core index 8bb89ef..e9b05f3 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit 8bb89ef757e697835da4882a1d60b4448bf719ff +Subproject commit e9b05f394f9d185ff9cbe651e81f4c82370e8c37 diff --git a/rgb-schemata b/rgb-schemata index 800a36f..ad02e64 160000 --- a/rgb-schemata +++ b/rgb-schemata @@ -1 +1 @@ -Subproject commit 800a36fbd8a16837047d5bf3eb511c70bc9fa6af +Subproject commit ad02e64cde6ffaf578969ff49c93b624f1d5c188 diff --git a/tests/issuance.rs b/tests/issuance.rs index 9b0146e..ea3bb3c 100644 --- a/tests/issuance.rs +++ b/tests/issuance.rs @@ -480,7 +480,7 @@ fn deterministic_contract_id(#[case] asset_schema: AssetSchema) { } AssetSchema::Ifa => ( AssetInfo::default_ifa(vec![999], vec![], vec![]), - "rgb:0BE~U89N-BCpNAvM-qLVH764-GyTkV4x-78PP7Y7-xNMcZng", + "rgb:0XcqlfD6-ccXYzWp-iTGCnA_-nBh9yKq-O~oMQRA-Nq54JBI", ), }; From cbed051b639a86482f8f8539086d0acefcc9d5a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Fri, 20 Jun 2025 12:12:51 +0200 Subject: [PATCH 15/22] use PSBT methods to conceal transitions --- rgb | 2 +- rgb-core | 2 +- rgb-std | 2 +- tests/transfers.rs | 45 ++++++++++++------------------------------ tests/utils/helpers.rs | 38 +++-------------------------------- tests/utils/mod.rs | 2 +- 6 files changed, 20 insertions(+), 71 deletions(-) diff --git a/rgb b/rgb index 2109c8b..c07356d 160000 --- a/rgb +++ b/rgb @@ -1 +1 @@ -Subproject commit 2109c8b3ff2bacbb89a1fb190f2d1860bd1aad5a +Subproject commit c07356de16bd8e253050fea2e25567bede2e26af diff --git a/rgb-core b/rgb-core index e9b05f3..3420162 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit e9b05f394f9d185ff9cbe651e81f4c82370e8c37 +Subproject commit 3420162db3c049f216cbcae5494445a3fbd9e5ed diff --git a/rgb-std b/rgb-std index ac1d2bf..6eccb88 160000 --- a/rgb-std +++ b/rgb-std @@ -1 +1 @@ -Subproject commit ac1d2bfc793cc70c50309b82cb9438181ecd2ffd +Subproject commit 6eccb880a92494e5056a7c15975f3e4f446505c4 diff --git a/tests/transfers.rs b/tests/transfers.rs index cc47d62..a1888a8 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -2175,11 +2175,12 @@ fn concealed_known_transition() { .add_owned_state_raw(*assignment_type, seal_1, state) .unwrap(); let transition = transition_builder.complete_transition().unwrap(); - let opid_1 = transition.id(); - psbt.input_mut(0) - .unwrap() - .set_rgb_consumer(contract_id, opid_1) - .unwrap(); + for opout in transition.inputs() { + // this is not necessary since it's done by push_rgb_transition, + // but it shows that it's idempotent + psbt.set_rgb_contract_consumer(contract_id, opout, transition.id()) + .unwrap(); + } psbt.push_rgb_transition(transition).unwrap(); // 2nd transition @@ -2198,11 +2199,11 @@ fn concealed_known_transition() { .unwrap(); let transition = transition_builder.complete_transition().unwrap(); let opid_2 = transition.id(); - psbt.input_mut(0) - .unwrap() - .set_rgb_consumer(contract_id, opid_2) - .unwrap(); - psbt.push_rgb_transition(transition).unwrap(); + for opout in transition.inputs() { + psbt.set_rgb_contract_consumer(contract_id, opout, opid_2) + .unwrap(); + } + // we don't push this transition to keep it concealed psbt.complete_construction(); let fascia = psbt.rgb_commit().unwrap(); @@ -2213,28 +2214,8 @@ fn concealed_known_transition() { wlt_2.sync(); let mut beneficiaries = AssetBeneficiariesMap::new(); - beneficiaries.insert(contract_id, vec![seal_1, seal_2]); - let mut consignment = wlt_1.create_consignments(beneficiaries, witness_id)[0].clone(); - - // we finally have a consignment with 2 transitions in a bundle - // now we remove one of them to show that validation fails - let mut new_bundle = consignment - .bundles - .iter() - .find(|b| b.bundle.known_transitions.len() == 2) - .unwrap() - .clone(); - let bundle_id = new_bundle.bundle.bundle_id(); - new_bundle.bundle.known_transitions.remove(&opid_2).unwrap(); - let mut bundles = consignment.bundles.release(); - bundles.replace(new_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); - // remove corresponding terminal - consignment.terminals.remove(&bundle_id).unwrap(); - consignment - .terminals - .insert(bundle_id, NonEmptyOrdSet::with(secret_seal_1).into()) - .unwrap(); + beneficiaries.insert(contract_id, vec![seal_1]); + let consignment = wlt_1.create_consignments(beneficiaries, witness_id)[0].clone(); // ensure the consignment contains the bundle with missing transition let bundle = consignment diff --git a/tests/utils/helpers.rs b/tests/utils/helpers.rs index 4bd23d7..0509dc1 100644 --- a/tests/utils/helpers.rs +++ b/tests/utils/helpers.rs @@ -1707,11 +1707,6 @@ impl TestWallet { .add_metadata("allowedInflation", Amount::from(inflation_change)) .unwrap(); let transition = asset_transition_builder.complete_transition().unwrap(); - for input in psbt.inputs_mut() { - input - .set_rgb_consumer(contract_id, transition.id()) - .unwrap(); - } psbt.push_rgb_transition(transition).unwrap(); psbt.construct_output_expect(ScriptPubkey::op_return(&[]), Sats::ZERO) .set_opret_host() @@ -1791,11 +1786,6 @@ impl TestWallet { .add_rights("replaceRight", seal) .unwrap(); // add replace right let transition = asset_transition_builder.complete_transition().unwrap(); - for input in psbt.inputs_mut() { - input - .set_rgb_consumer(contract_id, transition.id()) - .unwrap(); - } psbt.push_rgb_transition(transition).unwrap(); psbt.construct_output_expect(ScriptPubkey::op_return(&[]), Sats::ZERO) .set_opret_host() @@ -1858,11 +1848,6 @@ impl TestWallet { } } let transition = asset_transition_builder.complete_transition().unwrap(); - for input in psbt.inputs_mut() { - input - .set_rgb_consumer(contract_id, transition.id()) - .unwrap(); - } psbt.push_rgb_transition(transition).unwrap(); psbt.construct_output_expect(ScriptPubkey::op_return(&[]), Sats::ZERO) .set_opret_host() @@ -2093,7 +2078,7 @@ impl TestWallet { .map(|txin| txin.prev_output) .collect::>(); - let mut all_transitions: HashMap = HashMap::new(); + let mut all_transitions: HashSet = HashSet::new(); let mut asset_beneficiaries: AssetBeneficiariesMap = bmap![]; for (contract_id, asset_coloring_info) in coloring_info.asset_info_map.clone() { @@ -2174,7 +2159,7 @@ impl TestWallet { } let transition = asset_transition_builder.complete_transition().unwrap(); - all_transitions.insert(contract_id, transition); + all_transitions.insert(transition); asset_beneficiaries.insert(contract_id, beneficiaries); } @@ -2195,24 +2180,7 @@ impl TestWallet { opreturn_output.set_mpc_entropy(blinding).unwrap(); } - let tx_inputs = psbt.clone().to_unsigned_tx().inputs; - for (contract_id, transition) in all_transitions { - for (input, txin) in psbt.inputs_mut().zip(&tx_inputs) { - let prevout = txin.prev_output; - let outpoint = Outpoint::new(prevout.txid.to_byte_array().into(), prevout.vout); - if coloring_info - .asset_info_map - .clone() - .get(&contract_id) - .unwrap() - .input_outpoints - .contains(&outpoint) - { - input - .set_rgb_consumer(contract_id, transition.id()) - .unwrap(); - } - } + for transition in all_transitions { psbt.push_rgb_transition(transition).unwrap(); } diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs index 08ebea5..d40ba28 100644 --- a/tests/utils/mod.rs +++ b/tests/utils/mod.rs @@ -79,7 +79,7 @@ pub use psbt::{ Utxo, }; #[cfg(not(feature = "altered"))] -pub use psrgbt::{RgbExt, RgbInExt, RgbPsbt, TxParams}; +pub use psrgbt::{RgbExt, RgbPsbt, TxParams}; #[cfg(feature = "altered")] pub use psrgbt_altered::{RgbExt, RgbInExt, RgbPsbt, TxParams}; pub use rand::RngCore; From d6a53158a9fea49a52f006871be350cde2d804e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Tue, 20 May 2025 10:34:51 +0200 Subject: [PATCH 16/22] sorted bundles in consignment --- rgb-core | 2 +- rgb-std | 2 +- ...undles_pubWitness_data_input_sequence.json | 56 ++-- tests/fixtures/attack_chain.json | 56 ++-- tests/fixtures/attack_genesis_schema_id.json | 104 +++---- tests/fixtures/attack_genesis_testnet.json | 104 +++---- tests/fixtures/attack_resolver_error.json | 86 +++--- tests/fixtures/consignment_A.json | 58 ++-- tests/fixtures/consignment_B.json | 106 +++---- tests/transfers.rs | 107 +------ tests/utils/mod.rs | 4 +- tests/validation.rs | 292 ++++-------------- 12 files changed, 358 insertions(+), 619 deletions(-) diff --git a/rgb-core b/rgb-core index 3420162..50090ee 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit 3420162db3c049f216cbcae5494445a3fbd9e5ed +Subproject commit 50090ee94d92c9c937ef94507aff58b595d1a9de diff --git a/rgb-std b/rgb-std index 6eccb88..28c0325 160000 --- a/rgb-std +++ b/rgb-std @@ -1 +1 @@ -Subproject commit 6eccb880a92494e5056a7c15975f3e4f446505c4 +Subproject commit 28c0325e92717763a08fdcc8ab4c8d2790be31da diff --git a/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json b/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json index 3b6309e..4d00986 100644 --- a/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json +++ b/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json @@ -120,7 +120,7 @@ "version": 2, "inputs": [ { - "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", + "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", "sigScript": "", "sequence": 0, "witness": [] @@ -129,11 +129,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" + "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" }, { - "value": 99998800, - "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" + "value": 99999200, + "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" } ], "lockTime": 0 @@ -144,19 +144,19 @@ "pos": 2, "cofactor": 1, "path": [ - "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", - "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", - "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" + "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", + "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", + "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" }, "knownTransitions": { - "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { "ffv": 0, "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, @@ -164,7 +164,7 @@ "metadata": {}, "globals": {}, "inputs": [ - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" ], "assignments": { "4000": { @@ -174,13 +174,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 17092846758161066830 + "blinding": 6805042725940518372 }, - "state": 539 + "state": 616 }, { - "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", - "state": 77 + "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", + "state": 50 } ] } @@ -196,7 +196,7 @@ "version": 2, "inputs": [ { - "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", + "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", "sigScript": "", "sequence": 0, "witness": [] @@ -205,11 +205,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" + "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" }, { - "value": 99999200, - "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" + "value": 99998800, + "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" } ], "lockTime": 0 @@ -220,19 +220,19 @@ "pos": 2, "cofactor": 1, "path": [ - "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", - "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", - "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" + "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", + "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", + "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" }, "knownTransitions": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { + "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { "ffv": 0, "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, @@ -240,7 +240,7 @@ "metadata": {}, "globals": {}, "inputs": [ - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" ], "assignments": { "4000": { @@ -250,13 +250,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 6805042725940518372 + "blinding": 17092846758161066830 }, - "state": 616 + "state": 539 }, { - "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", - "state": 50 + "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", + "state": 77 } ] } diff --git a/tests/fixtures/attack_chain.json b/tests/fixtures/attack_chain.json index 5e7e97a..9e06d7f 100644 --- a/tests/fixtures/attack_chain.json +++ b/tests/fixtures/attack_chain.json @@ -120,7 +120,7 @@ "version": 2, "inputs": [ { - "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", + "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", "sigScript": "", "sequence": 0, "witness": [] @@ -129,11 +129,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" + "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" }, { - "value": 99998800, - "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" + "value": 99999200, + "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" } ], "lockTime": 0 @@ -144,19 +144,19 @@ "pos": 2, "cofactor": 1, "path": [ - "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", - "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", - "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" + "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", + "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", + "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" }, "knownTransitions": { - "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { "ffv": 0, "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, @@ -164,7 +164,7 @@ "metadata": {}, "globals": {}, "inputs": [ - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" ], "assignments": { "4000": { @@ -174,13 +174,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 17092846758161066830 + "blinding": 6805042725940518372 }, - "state": 539 + "state": 616 }, { - "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", - "state": 77 + "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", + "state": 50 } ] } @@ -196,7 +196,7 @@ "version": 2, "inputs": [ { - "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", + "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", "sigScript": "", "sequence": 0, "witness": [] @@ -205,11 +205,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" + "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" }, { - "value": 99999200, - "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" + "value": 99998800, + "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" } ], "lockTime": 0 @@ -220,19 +220,19 @@ "pos": 2, "cofactor": 1, "path": [ - "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", - "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", - "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" + "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", + "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", + "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" }, "knownTransitions": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { + "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { "ffv": 0, "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, @@ -240,7 +240,7 @@ "metadata": {}, "globals": {}, "inputs": [ - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" ], "assignments": { "4000": { @@ -250,13 +250,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 6805042725940518372 + "blinding": 17092846758161066830 }, - "state": 616 + "state": 539 }, { - "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", - "state": 50 + "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", + "state": 77 } ] } diff --git a/tests/fixtures/attack_genesis_schema_id.json b/tests/fixtures/attack_genesis_schema_id.json index f9e4bd6..6d976e6 100644 --- a/tests/fixtures/attack_genesis_schema_id.json +++ b/tests/fixtures/attack_genesis_schema_id.json @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", + "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" + "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" }, { "value": 9000, - "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" + "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" }, { - "value": 99981200, - "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" + "value": 99990600, + "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" } ], "lockTime": 0 @@ -72,20 +72,20 @@ "pos": 5, "cofactor": 1, "path": [ - "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", - "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", - "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", - "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" + "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", + "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", + "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", + "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" }, "knownTransitions": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { "ffv": 0, "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, @@ -93,27 +93,19 @@ "metadata": {}, "globals": {}, "inputs": [ - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" ], "assignments": { "4000": { "type": "fungible", "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 17184009278113549158 - }, - "state": 50 - }, { "seal": { "txid": null, "vout": 2, - "blinding": 8586455737525543612 + "blinding": 10921448307780233921 }, - "state": 616 + "state": 666 } ] } @@ -129,7 +121,7 @@ "version": 2, "inputs": [ { - "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", + "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -138,15 +130,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" + "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" }, { "value": 9000, - "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" + "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" }, { - "value": 99971800, - "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" + "value": 99981200, + "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" } ], "lockTime": 0 @@ -157,20 +149,20 @@ "pos": 5, "cofactor": 1, "path": [ - "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", - "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", - "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", - "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" + "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", + "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", + "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", + "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" }, "knownTransitions": { - "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { "ffv": 0, "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, @@ -178,7 +170,7 @@ "metadata": {}, "globals": {}, "inputs": [ - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" ], "assignments": { "4000": { @@ -188,17 +180,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 18112855856365951572 + "blinding": 17184009278113549158 }, - "state": 77 + "state": 50 }, { "seal": { "txid": null, "vout": 2, - "blinding": 4666323833009824294 + "blinding": 8586455737525543612 }, - "state": 539 + "state": 616 } ] } @@ -214,7 +206,7 @@ "version": 2, "inputs": [ { - "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", + "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -223,15 +215,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" + "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" }, { "value": 9000, - "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" + "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" }, { - "value": 99990600, - "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" + "value": 99971800, + "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" } ], "lockTime": 0 @@ -242,20 +234,20 @@ "pos": 5, "cofactor": 1, "path": [ - "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", - "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", - "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", - "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" + "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", + "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", + "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", + "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" }, "knownTransitions": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { + "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { "ffv": 0, "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, @@ -263,19 +255,27 @@ "metadata": {}, "globals": {}, "inputs": [ - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" ], "assignments": { "4000": { "type": "fungible", "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 18112855856365951572 + }, + "state": 77 + }, { "seal": { "txid": null, "vout": 2, - "blinding": 10921448307780233921 + "blinding": 4666323833009824294 }, - "state": 666 + "state": 539 } ] } diff --git a/tests/fixtures/attack_genesis_testnet.json b/tests/fixtures/attack_genesis_testnet.json index 35fe0a8..2aa49c7 100644 --- a/tests/fixtures/attack_genesis_testnet.json +++ b/tests/fixtures/attack_genesis_testnet.json @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", + "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" + "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" }, { "value": 9000, - "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" + "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" }, { - "value": 99981200, - "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" + "value": 99990600, + "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" } ], "lockTime": 0 @@ -72,20 +72,20 @@ "pos": 5, "cofactor": 1, "path": [ - "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", - "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", - "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", - "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" + "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", + "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", + "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", + "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" }, "knownTransitions": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { "ffv": 0, "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, @@ -93,27 +93,19 @@ "metadata": {}, "globals": {}, "inputs": [ - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" ], "assignments": { "4000": { "type": "fungible", "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 17184009278113549158 - }, - "state": 50 - }, { "seal": { "txid": null, "vout": 2, - "blinding": 8586455737525543612 + "blinding": 10921448307780233921 }, - "state": 616 + "state": 666 } ] } @@ -129,7 +121,7 @@ "version": 2, "inputs": [ { - "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", + "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -138,15 +130,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" + "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" }, { "value": 9000, - "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" + "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" }, { - "value": 99971800, - "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" + "value": 99981200, + "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" } ], "lockTime": 0 @@ -157,20 +149,20 @@ "pos": 5, "cofactor": 1, "path": [ - "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", - "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", - "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", - "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" + "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", + "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", + "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", + "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" }, "knownTransitions": { - "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { "ffv": 0, "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, @@ -178,7 +170,7 @@ "metadata": {}, "globals": {}, "inputs": [ - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" ], "assignments": { "4000": { @@ -188,17 +180,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 18112855856365951572 + "blinding": 17184009278113549158 }, - "state": 77 + "state": 50 }, { "seal": { "txid": null, "vout": 2, - "blinding": 4666323833009824294 + "blinding": 8586455737525543612 }, - "state": 539 + "state": 616 } ] } @@ -214,7 +206,7 @@ "version": 2, "inputs": [ { - "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", + "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -223,15 +215,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" + "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" }, { "value": 9000, - "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" + "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" }, { - "value": 99990600, - "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" + "value": 99971800, + "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" } ], "lockTime": 0 @@ -242,20 +234,20 @@ "pos": 5, "cofactor": 1, "path": [ - "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", - "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", - "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", - "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" + "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", + "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", + "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", + "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" }, "knownTransitions": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { + "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { "ffv": 0, "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, @@ -263,19 +255,27 @@ "metadata": {}, "globals": {}, "inputs": [ - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" ], "assignments": { "4000": { "type": "fungible", "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 18112855856365951572 + }, + "state": 77 + }, { "seal": { "txid": null, "vout": 2, - "blinding": 10921448307780233921 + "blinding": 4666323833009824294 }, - "state": 666 + "state": 539 } ] } diff --git a/tests/fixtures/attack_resolver_error.json b/tests/fixtures/attack_resolver_error.json index 7c5fdb0..65da912 100644 --- a/tests/fixtures/attack_resolver_error.json +++ b/tests/fixtures/attack_resolver_error.json @@ -116,47 +116,26 @@ }, { "pubWitness": { - "tx": { - "version": 2, - "inputs": [ - { - "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", - "sigScript": "", - "sequence": 0, - "witness": [] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" - }, - { - "value": 99998800, - "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" - } - ], - "lockTime": 0 - } + "txid": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af" }, "anchor": { "mpcProof": { "pos": 2, "cofactor": 1, "path": [ - "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", - "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", - "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" + "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", + "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", + "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" }, "knownTransitions": { - "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { "ffv": 0, "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, @@ -164,7 +143,7 @@ "metadata": {}, "globals": {}, "inputs": [ - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" ], "assignments": { "4000": { @@ -174,13 +153,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 17092846758161066830 + "blinding": 6805042725940518372 }, - "state": 539 + "state": 616 }, { - "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", - "state": 77 + "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", + "state": 50 } ] } @@ -192,26 +171,47 @@ }, { "pubWitness": { - "txid": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af" + "tx": { + "version": 2, + "inputs": [ + { + "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", + "sigScript": "", + "sequence": 0, + "witness": [] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" + }, + { + "value": 99998800, + "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" + } + ], + "lockTime": 0 + } }, "anchor": { "mpcProof": { "pos": 2, "cofactor": 1, "path": [ - "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", - "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", - "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" + "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", + "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", + "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" }, "knownTransitions": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { + "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { "ffv": 0, "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, @@ -219,7 +219,7 @@ "metadata": {}, "globals": {}, "inputs": [ - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" ], "assignments": { "4000": { @@ -229,13 +229,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 6805042725940518372 + "blinding": 17092846758161066830 }, - "state": 616 + "state": 539 }, { - "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", - "state": 50 + "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", + "state": 77 } ] } diff --git a/tests/fixtures/consignment_A.json b/tests/fixtures/consignment_A.json index 2e53809..53f58da 100644 --- a/tests/fixtures/consignment_A.json +++ b/tests/fixtures/consignment_A.json @@ -120,7 +120,7 @@ "version": 2, "inputs": [ { - "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", + "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", "sigScript": "", "sequence": 0, "witness": [] @@ -129,11 +129,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" + "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" }, { - "value": 99998800, - "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" + "value": 99999200, + "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" } ], "lockTime": 0 @@ -144,19 +144,19 @@ "pos": 2, "cofactor": 1, "path": [ - "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", - "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", - "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" + "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", + "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", + "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" }, "knownTransitions": { - "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { "ffv": 0, "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, @@ -164,7 +164,7 @@ "metadata": {}, "globals": {}, "inputs": [ - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" + "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" ], "assignments": { "4000": { @@ -174,13 +174,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 17092846758161066830 + "blinding": 6805042725940518372 }, - "state": 539 + "state": 616 }, { - "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", - "state": 77 + "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", + "state": 50 } ] } @@ -196,7 +196,7 @@ "version": 2, "inputs": [ { - "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", + "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", "sigScript": "", "sequence": 0, "witness": [] @@ -205,11 +205,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" + "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" }, { - "value": 99999200, - "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" + "value": 99998800, + "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" } ], "lockTime": 0 @@ -220,19 +220,19 @@ "pos": 2, "cofactor": 1, "path": [ - "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", - "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", - "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" + "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", + "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", + "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" }, "knownTransitions": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { + "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { "ffv": 0, "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", "nonce": 18446744073709551615, @@ -240,7 +240,7 @@ "metadata": {}, "globals": {}, "inputs": [ - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" + "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" ], "assignments": { "4000": { @@ -250,13 +250,13 @@ "seal": { "txid": null, "vout": 1, - "blinding": 6805042725940518372 + "blinding": 17092846758161066830 }, - "state": 616 + "state": 539 }, { - "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", - "state": 50 + "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", + "state": 77 } ] } @@ -917,4 +917,4 @@ "libs": [] } ] -} \ No newline at end of file +} diff --git a/tests/fixtures/consignment_B.json b/tests/fixtures/consignment_B.json index 60bb766..0b6bafd 100644 --- a/tests/fixtures/consignment_B.json +++ b/tests/fixtures/consignment_B.json @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", + "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" + "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" }, { "value": 9000, - "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" + "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" }, { - "value": 99981200, - "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" + "value": 99990600, + "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" } ], "lockTime": 0 @@ -72,20 +72,20 @@ "pos": 5, "cofactor": 1, "path": [ - "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", - "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", - "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", - "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" + "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", + "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", + "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", + "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" }, "knownTransitions": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { "ffv": 0, "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, @@ -93,27 +93,19 @@ "metadata": {}, "globals": {}, "inputs": [ - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" + "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" ], "assignments": { "4000": { "type": "fungible", "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 17184009278113549158 - }, - "state": 50 - }, { "seal": { "txid": null, "vout": 2, - "blinding": 8586455737525543612 + "blinding": 10921448307780233921 }, - "state": 616 + "state": 666 } ] } @@ -129,7 +121,7 @@ "version": 2, "inputs": [ { - "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", + "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -138,15 +130,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" + "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" }, { "value": 9000, - "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" + "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" }, { - "value": 99971800, - "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" + "value": 99981200, + "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" } ], "lockTime": 0 @@ -157,20 +149,20 @@ "pos": 5, "cofactor": 1, "path": [ - "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", - "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", - "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", - "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" + "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", + "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", + "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", + "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" }, "knownTransitions": { - "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { "ffv": 0, "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, @@ -178,7 +170,7 @@ "metadata": {}, "globals": {}, "inputs": [ - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" + "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" ], "assignments": { "4000": { @@ -188,17 +180,17 @@ "seal": { "txid": null, "vout": 1, - "blinding": 18112855856365951572 + "blinding": 17184009278113549158 }, - "state": 77 + "state": 50 }, { "seal": { "txid": null, "vout": 2, - "blinding": 4666323833009824294 + "blinding": 8586455737525543612 }, - "state": 539 + "state": 616 } ] } @@ -214,7 +206,7 @@ "version": 2, "inputs": [ { - "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", + "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", "sigScript": "", "sequence": 0, "witness": [] @@ -223,15 +215,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" + "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" }, { "value": 9000, - "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" + "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" }, { - "value": 99990600, - "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" + "value": 99971800, + "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" } ], "lockTime": 0 @@ -242,20 +234,20 @@ "pos": 5, "cofactor": 1, "path": [ - "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", - "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", - "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", - "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" + "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", + "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", + "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", + "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" }, "knownTransitions": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { + "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { "ffv": 0, "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", "nonce": 18446744073709551615, @@ -263,19 +255,27 @@ "metadata": {}, "globals": {}, "inputs": [ - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" + "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" ], "assignments": { "4000": { "type": "fungible", "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 18112855856365951572 + }, + "state": 77 + }, { "seal": { "txid": null, "vout": 2, - "blinding": 10921448307780233921 + "blinding": 4666323833009824294 }, - "state": 666 + "state": 539 } ] } @@ -936,4 +936,4 @@ "libs": [] } ] -} \ No newline at end of file +} diff --git a/tests/transfers.rs b/tests/transfers.rs index a1888a8..a489b61 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -1808,7 +1808,6 @@ fn extra_known_transition() { let mut wlt_1 = get_wallet(&DescriptorType::Wpkh); let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); - let mut wlt_3 = get_wallet(&DescriptorType::Wpkh); let issued_amt = 900; let contract_id = wlt_1.issue_nia(issued_amt, None); @@ -1854,7 +1853,6 @@ fn extra_known_transition() { InvoiceType::Blinded(Some(utxo_1)), ); let (consignment, tx, _, _) = wlt_1.pay_full(invoice, None, None, true, None); - let prev_bundles = consignment.bundles.clone().release(); wlt_1.mine_tx(&tx.txid(), false); wlt_1.accept_transfer(consignment, None); wlt_1.sync(); @@ -1873,10 +1871,8 @@ fn extra_known_transition() { }) .unwrap(); - let mut new_consignment_1 = base_consignment.clone(); - let mut new_consignment_2 = base_consignment.clone(); - let mut bundles_1 = base_consignment.bundles.release().clone(); - let mut bundles_2 = bundles_1.clone(); + let mut new_consignment = base_consignment.clone(); + let mut bundles = base_consignment.bundles.release().clone(); let mut transition_builder = wlt_1 .stock() @@ -1888,107 +1884,24 @@ fn extra_known_transition() { transition_builder = transition_builder .add_owned_state_raw(*assignment_type, BuilderSeal::Concealed(secret_seal), state) .unwrap(); - let transition_1 = transition_builder.complete_transition().unwrap(); - let opid_1 = transition_1.id(); + let new_transition = transition_builder.complete_transition().unwrap(); + let new_opid = new_transition.id(); - let mut new_bundle = bundles_1 - .iter() + let new_bundle = bundles + .iter_mut() .find(|b| b.pub_witness.txid() == base_txid) - .unwrap() - .clone(); - let bundle_id = new_bundle.bundle.bundle_id(); - new_bundle - .bundle - .known_transitions - .insert(opid_1, transition_1) .unwrap(); - assert_eq!(bundle_id, new_bundle.bundle.bundle_id()); - assert!(new_bundle.bundle.known_transitions.contains_key(&opid_1)); - bundles_1.remove(&new_bundle); // otherwise it doesn't replace existing value - bundles_1.insert(new_bundle); - for b in prev_bundles.clone() { - let mut revealed_wbundle = b.clone(); - revealed_wbundle.bundle = wlt_1 - .stock() - .as_stash_provider() - .bundle(b.bundle.bundle_id()) - .unwrap() - .clone(); - bundles_1.insert(revealed_wbundle); - } - new_consignment_1.bundles = LargeOrdSet::from_checked(bundles_1); - let mut secret_seals = new_consignment_1 - .terminals - .remove(&bundle_id) // remove to be sure it's replaced on insert - .unwrap() - .unwrap() - .as_unconfined() - .clone(); - secret_seals.insert(secret_seal); - new_consignment_1 - .terminals - .insert(bundle_id, NonEmptyOrdSet::from_checked(secret_seals).into()) - .unwrap(); - - // double spend opout - let mut transition_builder = wlt_1 - .stock() - .transition_builder_raw(contract_id, transition_type) - .unwrap(); - let state = asset_schema.allocated_state(amt_1); - transition_builder = transition_builder.add_input(opout, state.clone()).unwrap(); - let secret_seal = wlt_3.get_secret_seal(None, None); - transition_builder = transition_builder - .add_owned_state_raw(*assignment_type, BuilderSeal::Concealed(secret_seal), state) - .unwrap(); - let transition_2 = transition_builder.complete_transition().unwrap(); - let opid_2 = transition_2.id(); - - let mut new_bundle = bundles_2 - .iter() - .find(|b| b.pub_witness.txid() == base_txid) - .unwrap() - .clone(); let bundle_id = new_bundle.bundle.bundle_id(); new_bundle .bundle .known_transitions - .insert(opid_2, transition_2) + .insert(new_opid, new_transition) .unwrap(); assert_eq!(bundle_id, new_bundle.bundle.bundle_id()); - assert!(new_bundle.bundle.known_transitions.contains_key(&opid_2)); - bundles_2.remove(&new_bundle); // otherwise it doesn't replace existing value - bundles_2.insert(new_bundle); - for b in prev_bundles { - let mut revealed_wbundle = b.clone(); - revealed_wbundle.bundle = wlt_1 - .stock() - .as_stash_provider() - .bundle(b.bundle.bundle_id()) - .unwrap() - .clone(); - bundles_2.insert(revealed_wbundle); - } - new_consignment_2.bundles = LargeOrdSet::from_checked(bundles_2); - let mut secret_seals = new_consignment_2 - .terminals - .remove(&bundle_id) // remove to be sure it's replaced on insert - .unwrap() - .unwrap() - .as_unconfined() - .clone(); - secret_seals.insert(secret_seal); - new_consignment_2 - .terminals - .insert(bundle_id, NonEmptyOrdSet::from_checked(secret_seals).into()) - .unwrap(); - - wlt_2.accept_transfer(new_consignment_1, None); - wlt_3.accept_transfer(new_consignment_2, None); + assert!(new_bundle.bundle.known_transitions.contains_key(&new_opid)); + new_consignment.bundles = LargeVec::from_checked(bundles); - wlt_2.check_allocations(contract_id, asset_schema, vec![amt_0, amt_1], false); - wlt_3.check_allocations(contract_id, asset_schema, vec![amt_1], false); - assert!(issued_amt < amt_0 + amt_1 + amt_1); + wlt_2.accept_transfer(new_consignment, None); } #[cfg(not(feature = "altered"))] diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs index d40ba28..6d1ed36 100644 --- a/tests/utils/mod.rs +++ b/tests/utils/mod.rs @@ -46,8 +46,8 @@ pub use std::{ pub use amplify::{ bmap, bset, confinement::{ - Confined, LargeOrdSet, NonEmptyOrdMap, NonEmptyOrdSet, NonEmptyVec, SmallOrdMap, - TinyOrdMap, TinyOrdSet, U16, + Confined, LargeVec, NonEmptyOrdMap, NonEmptyOrdSet, NonEmptyVec, SmallOrdMap, TinyOrdMap, + TinyOrdSet, U16, }, map, num::u24, diff --git a/tests/validation.rs b/tests/validation.rs index 194e09d..316456c 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -125,11 +125,11 @@ impl Scenario { } fn replace_transition_in_bundle( - witness_bundle: WitnessBundle, + witness_bundle: &mut WitnessBundle, old_opid: OpId, transition: Transition, -) -> WitnessBundle { - let mut known_transitions = witness_bundle.bundle.known_transitions.release().clone(); +) { + let mut known_transitions = witness_bundle.bundle.known_transitions.clone().release(); known_transitions.remove(&old_opid); let transition_id = transition.id(); known_transitions.insert(transition_id, transition.clone()); @@ -144,19 +144,11 @@ fn replace_transition_in_bundle( input_map: NonEmptyOrdMap::from_checked(input_map), known_transitions: NonEmptyOrdMap::from_checked(known_transitions), }; - update_witness_and_anchor( - WitnessBundle { - bundle, - ..witness_bundle - }, - None, - ) + witness_bundle.bundle = bundle; + update_witness_and_anchor(witness_bundle, None) } -fn update_witness_and_anchor( - witness_bundle: WitnessBundle, - contract_id: Option, -) -> WitnessBundle { +fn update_witness_and_anchor(witness_bundle: &mut WitnessBundle, contract_id: Option) { let mut witness_psbt = Psbt::from_tx(witness_bundle.pub_witness.tx().unwrap().clone()); let idx = witness_psbt .outputs() @@ -195,11 +187,8 @@ fn update_witness_and_anchor( let mut anchor = witness_bundle.anchor.clone(); anchor.mpc_proof = proof.to_merkle_proof(protocol_id).unwrap(); - WitnessBundle { - pub_witness: PubWitness::Tx(witness.clone()), - anchor, - bundle: witness_bundle.bundle, - } + witness_bundle.pub_witness = PubWitness::Tx(witness.clone()); + witness_bundle.anchor = anchor; } fn get_consignment(scenario: Scenario) -> (Transfer, Vec) { @@ -323,8 +312,12 @@ fn validate_consignment_chain_fail() { dbg!(&validation_status); assert!(validation_status.warnings.is_empty()); assert!(validation_status.info.is_empty()); - let validity = validation_status.validity(); - assert_eq!(validity, Validity::Invalid); + assert_eq!(validation_status.failures.len(), 1); + assert!(matches!( + validation_status.failures[0], + Failure::ContractChainNetMismatch(ChainNet::BitcoinRegtest) + )); + assert_eq!(validation_status.validity(), Validity::Invalid); } #[cfg(not(feature = "altered"))] @@ -344,14 +337,10 @@ fn validate_consignment_genesis_fail() { assert_eq!(validation_status.failures.len(), 4); assert!(matches!( validation_status.failures[0], - Failure::MpcInvalid(_, _, _) - )); - assert!(matches!( - validation_status.failures[1], Failure::OperationAbsent(_) )); assert!(matches!( - validation_status.failures[2], + validation_status.failures[1], Failure::MpcInvalid(_, _, _) )); assert!(matches!( @@ -665,7 +654,7 @@ fn validate_consignment_commitments_fail() { .insert(Opout::strict_dumb(), OpId::strict_dumb()) .unwrap(); - consignment.bundles = LargeOrdSet::from_checked(bset![bundle.clone(), new_bundle]); + consignment.bundles = LargeVec::from_checked(vec![bundle.clone(), new_bundle]); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -676,7 +665,7 @@ fn validate_consignment_commitments_fail() { // DoubleSpend: add different transition that spends the same opouts let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let mut new_bundle = bundles.iter().last().unwrap().clone(); + let new_bundle = bundles.last_mut().unwrap(); let mut transition = new_bundle .bundle .known_transitions @@ -690,8 +679,7 @@ fn validate_consignment_commitments_fail() { .known_transitions .insert(transition.id(), transition) .unwrap(); - bundles.replace(new_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -719,12 +707,12 @@ fn validate_consignment_commitments_fail() { }) .unwrap() .bundle_id(); - consignment.bundles = LargeOrdSet::from_checked( + consignment.bundles = LargeVec::from_checked( consignment .bundles .into_iter() .filter(|b| b.bundle.bundle_id() != bundle_id_to_remove) - .collect::>(), + .collect::>(), ); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; @@ -736,7 +724,7 @@ fn validate_consignment_commitments_fail() { // NoPrevState: add input with missing assignment type to a transition let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let mut new_bundle = bundles.iter().last().unwrap().clone(); + let new_bundle = bundles.last_mut().unwrap(); let mut transition = new_bundle .bundle .known_transitions @@ -757,8 +745,7 @@ fn validate_consignment_commitments_fail() { .known_transitions .insert(transition.id(), transition) .unwrap(); - bundles.replace(new_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -774,7 +761,7 @@ fn validate_consignment_commitments_fail() { // NoPrevOut: add input with missing assignment number to a transition let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let mut new_bundle = bundles.iter().last().unwrap().clone(); + let new_bundle = bundles.last_mut().unwrap(); let mut transition = new_bundle .bundle .known_transitions @@ -795,8 +782,7 @@ fn validate_consignment_commitments_fail() { .known_transitions .insert(transition.id(), transition) .unwrap(); - bundles.replace(new_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -814,15 +800,14 @@ fn validate_consignment_commitments_fail() { .map(|ti| ti.op) .collect::>(); let mut bundles = consignment.bundles.release().clone(); - let mut new_bundle = bundles - .iter() + let new_bundle = bundles + .iter_mut() .find(|wb| { spent_transitions .iter() .any(|st| wb.bundle.known_transitions.contains_key(st)) }) - .unwrap() - .clone(); + .unwrap(); let mut transitions = new_bundle.clone().bundle.known_transitions.release(); let (_, mut transition) = transitions .clone() @@ -852,8 +837,7 @@ fn validate_consignment_commitments_fail() { .unwrap(); transitions.insert(transition.id(), transition).unwrap(); new_bundle.bundle.known_transitions = NonEmptyOrdMap::from_checked(transitions); - bundles.replace(new_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -864,21 +848,7 @@ fn validate_consignment_commitments_fail() { // ExtraKnownTransition: replace known_transition referenced in input map let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let spent_transitions = bundles - .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) - .map(|ti| ti.op) - .collect::>(); - let mut new_bundle = bundles - .iter() - .find(|b| { - spent_transitions - .iter() - .all(|st| !b.bundle.known_transitions.contains_key(st)) - }) - .unwrap() - .clone(); + let new_bundle = bundles.last_mut().unwrap(); let mut transition = new_bundle .bundle .known_transitions @@ -889,8 +859,7 @@ fn validate_consignment_commitments_fail() { transition.nonce -= 1; new_bundle.bundle.known_transitions = NonEmptyOrdMap::from_checked(bmap! {transition.id() => transition}); - bundles.replace(new_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -928,22 +897,7 @@ fn validate_consignment_logic_fail() { // SchemaUnknownTransitionType: replace transition with unsupported transition type let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let spent_transitions = bundles - .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) - .map(|ti| ti.op) - .collect::>(); - let witness_bundle = bundles - .iter() - .find(|b| { - spent_transitions - .iter() - .all(|st| !b.bundle.known_transitions.contains_key(st)) - }) - .unwrap() - .clone(); - bundles.remove(&witness_bundle); + let witness_bundle = bundles.last_mut().unwrap(); let mut transition = witness_bundle .bundle .known_transitions @@ -954,11 +908,10 @@ fn validate_consignment_logic_fail() { let old_opid = transition.id(); transition.transition_type = TransitionType::with(42); let transition_id = transition.id(); - let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + replace_transition_in_bundle(witness_bundle, old_opid, transition); let alt_resolver = resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); - bundles.replace(witness_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -971,22 +924,7 @@ fn validate_consignment_logic_fail() { // SchemaUnknownMetaType: replace transition with unsupported meta type let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let spent_transitions = bundles - .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) - .map(|ti| ti.op) - .collect::>(); - let witness_bundle = bundles - .iter() - .find(|b| { - spent_transitions - .iter() - .all(|st| !b.bundle.known_transitions.contains_key(st)) - }) - .unwrap() - .clone(); - bundles.remove(&witness_bundle); + let witness_bundle = bundles.last_mut().unwrap(); let mut transition = witness_bundle .bundle .known_transitions @@ -1000,11 +938,10 @@ fn validate_consignment_logic_fail() { .add_value(MetaType::with(42), MetaValue::strict_dumb()) .unwrap(); let transition_id = transition.id(); - let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + replace_transition_in_bundle(witness_bundle, old_opid, transition); let alt_resolver = resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); - bundles.replace(witness_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -1017,22 +954,7 @@ fn validate_consignment_logic_fail() { // SchemaUnknownGlobalStateType: replace transition with unsupported global state type let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let spent_transitions = bundles - .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) - .map(|ti| ti.op) - .collect::>(); - let witness_bundle = bundles - .iter() - .find(|b| { - spent_transitions - .iter() - .all(|st| !b.bundle.known_transitions.contains_key(st)) - }) - .unwrap() - .clone(); - bundles.remove(&witness_bundle); + let witness_bundle = bundles.last_mut().unwrap(); let mut transition = witness_bundle .bundle .known_transitions @@ -1046,11 +968,10 @@ fn validate_consignment_logic_fail() { .add_state(GlobalStateType::with(42), RevealedData::strict_dumb()) .unwrap(); let transition_id = transition.id(); - let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + replace_transition_in_bundle(witness_bundle, old_opid, transition); let alt_resolver = resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); - bundles.replace(witness_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -1063,22 +984,7 @@ fn validate_consignment_logic_fail() { // SchemaUnknownAssignmentType: add unsupported assignment type to transition let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let spent_transitions = bundles - .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) - .map(|ti| ti.op) - .collect::>(); - let witness_bundle = bundles - .iter() - .find(|b| { - spent_transitions - .iter() - .all(|st| !b.bundle.known_transitions.contains_key(st)) - }) - .unwrap() - .clone(); - bundles.remove(&witness_bundle); + let witness_bundle = bundles.last_mut().unwrap(); let mut transition = witness_bundle .bundle .known_transitions @@ -1092,11 +998,10 @@ fn validate_consignment_logic_fail() { .insert(AssignmentType::with(42), TypedAssigns::strict_dumb()) .unwrap(); let transition_id = transition.id(); - let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + replace_transition_in_bundle(witness_bundle, old_opid, transition); let alt_resolver = resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); - bundles.replace(witness_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -1109,22 +1014,7 @@ fn validate_consignment_logic_fail() { // SchemaAssignmentOccurrences: add transition with no assignments let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let spent_transitions = bundles - .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) - .map(|ti| ti.op) - .collect::>(); - let witness_bundle = bundles - .iter() - .find(|b| { - spent_transitions - .iter() - .all(|st| !b.bundle.known_transitions.contains_key(st)) - }) - .unwrap() - .clone(); - bundles.remove(&witness_bundle); + let witness_bundle = bundles.last_mut().unwrap(); let mut transition = witness_bundle .bundle .known_transitions @@ -1135,11 +1025,10 @@ fn validate_consignment_logic_fail() { let old_opid = transition.id(); transition.assignments = SmallOrdMap::new().into(); let transition_id = transition.id(); - let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + replace_transition_in_bundle(witness_bundle, old_opid, transition); let alt_resolver = resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); - bundles.replace(witness_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -1159,22 +1048,7 @@ fn validate_consignment_logic_fail() { // StateTypeMismatch let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let spent_transitions = bundles - .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) - .map(|ti| ti.op) - .collect::>(); - let witness_bundle = bundles - .iter() - .find(|b| { - spent_transitions - .iter() - .all(|st| !b.bundle.known_transitions.contains_key(st)) - }) - .unwrap() - .clone(); - bundles.remove(&witness_bundle); + let witness_bundle = bundles.last_mut().unwrap(); let mut transition = witness_bundle .bundle .known_transitions @@ -1198,11 +1072,10 @@ fn validate_consignment_logic_fail() { ) .unwrap(); let transition_id = transition.id(); - let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + replace_transition_in_bundle(witness_bundle, old_opid, transition); let alt_resolver = resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); - bundles.replace(witness_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -1219,22 +1092,7 @@ fn validate_consignment_logic_fail() { // ScriptFailure: e.g. one can't do simple inflation let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let spent_transitions = bundles - .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) - .map(|ti| ti.op) - .collect::>(); - let witness_bundle = bundles - .iter() - .find(|b| { - spent_transitions - .iter() - .all(|st| !b.bundle.known_transitions.contains_key(st)) - }) - .unwrap() - .clone(); - bundles.remove(&witness_bundle); + let witness_bundle = bundles.last_mut().unwrap(); let mut transition = witness_bundle .bundle .known_transitions @@ -1266,11 +1124,10 @@ fn validate_consignment_logic_fail() { ) .unwrap(); let transition_id = transition.id(); - let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + replace_transition_in_bundle(witness_bundle, old_opid, transition); let alt_resolver = resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); - bundles.replace(witness_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -1283,22 +1140,7 @@ fn validate_consignment_logic_fail() { // ContractMismatch: operations should commit to the correct contract let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let spent_transitions = bundles - .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) - .map(|ti| ti.op) - .collect::>(); - let witness_bundle = bundles - .iter() - .find(|b| { - spent_transitions - .iter() - .all(|st| !b.bundle.known_transitions.contains_key(st)) - }) - .unwrap() - .clone(); - bundles.remove(&witness_bundle); + let witness_bundle = bundles.last_mut().unwrap(); let mut transition = witness_bundle .bundle .known_transitions @@ -1310,13 +1152,12 @@ fn validate_consignment_logic_fail() { let old_contract_id = transition.contract_id; transition.contract_id = ContractId::strict_dumb(); let transition_id = transition.id(); - let witness_bundle = replace_transition_in_bundle(witness_bundle, old_opid, transition); + replace_transition_in_bundle(witness_bundle, old_opid, transition); // update again with the correct contract_id, otherwise we get SealsInvalid - let witness_bundle = update_witness_and_anchor(witness_bundle, Some(old_contract_id)); + update_witness_and_anchor(witness_bundle, Some(old_contract_id)); let alt_resolver = resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); - bundles.replace(witness_bundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; dbg!(&failures); @@ -1337,21 +1178,7 @@ fn validate_consignment_unmatching_transition_id() { let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let spent_transitions = bundles - .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) - .map(|ti| ti.op) - .collect::>(); - let mut witness_bundle = bundles - .iter() - .find(|b| { - spent_transitions - .iter() - .all(|st| !b.bundle.known_transitions.contains_key(st)) - }) - .unwrap() - .clone(); + let witness_bundle = bundles.last_mut().unwrap(); let contract_id = witness_bundle .bundle .known_transitions @@ -1374,7 +1201,6 @@ fn validate_consignment_unmatching_transition_id() { .known_transitions .insert(opid, transition.clone()) .unwrap(); - bundles.replace(witness_bundle); let dumb_transition = Transition::strict_dumb(); let dumb_id = dumb_transition.id(); @@ -1388,12 +1214,12 @@ fn validate_consignment_unmatching_transition_id() { .input_map .insert(Opout::strict_dumb(), dumb_id) .unwrap(); - let other_wbundle = update_witness_and_anchor(other_wbundle, Some(contract_id)); + update_witness_and_anchor(&mut other_wbundle, Some(contract_id)); let alt_resolver = resolver.with_new_transaction(other_wbundle.pub_witness.tx().unwrap().clone()); - bundles.insert(other_wbundle); - consignment.bundles = LargeOrdSet::from_checked(bundles); + bundles.push(other_wbundle); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; assert_eq!(failures.len(), 2); From 09ae7a412fee232b6b7accfdeca36ef4522a856d Mon Sep 17 00:00:00 2001 From: step Date: Mon, 19 May 2025 19:47:16 +0200 Subject: [PATCH 17/22] add unordered_transitions_within_bundle test --- tests/transfers.rs | 94 ++++++++++++++++++++++++++++++++++++++++++++++ tests/utils/mod.rs | 4 +- 2 files changed, 96 insertions(+), 2 deletions(-) diff --git a/tests/transfers.rs b/tests/transfers.rs index a489b61..14e28ff 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -2141,6 +2141,100 @@ fn concealed_known_transition() { wlt_2.accept_transfer(consignment, None); } +#[cfg(not(feature = "altered"))] +#[test] +fn unordered_transitions_within_bundle() { + initialize(); + + let mut wlt_1 = get_wallet(&DescriptorType::Wpkh); + let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); + + let utxo_0 = wlt_1.get_utxo(Some(8000)); + let issued_amt = 666; + let contract_id = wlt_1.issue_nia(issued_amt, Some(&utxo_0)); + let asset_schema = wlt_1.asset_schema(contract_id); + let contract = wlt_1.wallet.stock().contract_data(contract_id).unwrap(); + let assignment_type = contract + .schema + .assignment_types_for_state(asset_schema.default_state_type())[0]; + let transition_type = contract + .schema + .default_transition_for_assignment(assignment_type); + + let utxo_1 = wlt_1.get_utxo(Some(7000)); + + let utxo_2 = wlt_2.get_utxo(None); + let btc_change = wlt_1.get_address(); + let (mut psbt, _) = wlt_1.construct_psbt(vec![utxo_0, utxo_1], vec![(btc_change, None)], None); + psbt.construct_output_expect(ScriptPubkey::op_return(&[]), Sats::ZERO); + psbt.output_mut(1).unwrap().set_opret_host().unwrap(); + psbt.set_rgb_close_method(CloseMethod::OpretFirst); + + let mut beneficiaries = AssetBeneficiariesMap::new(); + let mut transition_builder = wlt_1 + .wallet + .stock() + .transition_builder_raw(contract_id, transition_type) + .unwrap(); + let opout = Opout::new( + OpId::copy_from_slice(contract_id.as_slice()).unwrap(), + *assignment_type, + 0, + ); + let state = asset_schema.allocated_state(issued_amt); + transition_builder = transition_builder.add_input(opout, state.clone()).unwrap(); + let seal = BuilderSeal::Revealed(GraphSeal::rand_from(utxo_1)); + transition_builder = transition_builder + .add_owned_state_raw(*assignment_type, seal, state) + .unwrap(); + beneficiaries.push((contract_id, vec![seal])); + let transition_1 = transition_builder.complete_transition().unwrap(); + let opid_1 = transition_1.id(); + psbt.push_rgb_transition(transition_1).unwrap(); + + let mut transition_builder = wlt_1 + .wallet + .stock() + .transition_builder_raw(contract_id, transition_type) + .unwrap(); + let opout = Opout::new(opid_1, *assignment_type, 0); + let state = asset_schema.allocated_state(issued_amt); + transition_builder = transition_builder.add_input(opout, state.clone()).unwrap(); + let seal = BuilderSeal::Concealed(wlt_2.get_secret_seal(Some(utxo_2), None)); + transition_builder = transition_builder + .add_owned_state_raw(*assignment_type, seal, state) + .unwrap(); + beneficiaries.push((contract_id, vec![seal])); + let mut transition_2 = transition_builder.clone().complete_transition().unwrap(); + // mine transition_2 until its opid is lower than transition_1 + while opid_1 < transition_2.id() { + transition_2.nonce -= 1; + } + psbt.push_rgb_transition(transition_2).unwrap(); + psbt.complete_construction(); + let fascia = psbt.rgb_commit().unwrap(); + let witness_id = psbt.txid(); + wlt_1.consume_fascia(fascia, witness_id); + + let tx = wlt_1.sign_finalize_extract(&mut psbt); + wlt_1.broadcast_tx(&tx); + wlt_2.sync(); + + let consignments = wlt_1.create_consignments(beneficiaries, witness_id); + for consignment in consignments { + wlt_2.accept_transfer(consignment, None); + } + + wlt_2.send( + &mut wlt_1, + InvoiceType::Witness, + contract_id, + issued_amt, + 1000, + None, + ); +} + #[cfg(not(feature = "altered"))] #[rstest] #[case(HistoryType::Linear, ReorgType::ChangeOrder)] diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs index 6d1ed36..a3d91c7 100644 --- a/tests/utils/mod.rs +++ b/tests/utils/mod.rs @@ -46,8 +46,8 @@ pub use std::{ pub use amplify::{ bmap, bset, confinement::{ - Confined, LargeVec, NonEmptyOrdMap, NonEmptyOrdSet, NonEmptyVec, SmallOrdMap, TinyOrdMap, - TinyOrdSet, U16, + Collection, Confined, LargeVec, NonEmptyOrdMap, NonEmptyOrdSet, NonEmptyVec, SmallOrdMap, + TinyOrdMap, TinyOrdSet, U16, }, map, num::u24, From db239dd52f4b517cad1f1102d421a02c58779c17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Wed, 25 Jun 2025 21:15:50 +0200 Subject: [PATCH 18/22] add accept_bundle_missing_transitions test --- tests/transfers.rs | 223 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) diff --git a/tests/transfers.rs b/tests/transfers.rs index 14e28ff..52bacd4 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -2141,6 +2141,229 @@ fn concealed_known_transition() { wlt_2.accept_transfer(consignment, None); } +#[cfg(not(feature = "altered"))] +#[test] +fn accept_bundle_missing_transitions() { + initialize(); + + let mut wlt_1 = get_wallet(&DescriptorType::Wpkh); + let mut wlt_2 = get_wallet(&DescriptorType::Wpkh); + let mut wlt_3 = get_wallet(&DescriptorType::Wpkh); + + let issued_amt = 700; + let contract_id = wlt_1.issue_nia(issued_amt, None); + let asset_schema = wlt_1.asset_schema(contract_id); + let schema_id = wlt_1.schema_id(contract_id); + let contract = wlt_1.stock().contract_data(contract_id).unwrap(); + let assignment_type = contract + .schema + .assignment_types_for_state(asset_schema.default_state_type())[0]; + let transition_type = contract + .schema + .default_transition_for_assignment(assignment_type); + + // split into 2 allocations + let utxo_1 = wlt_1.get_utxo(None); + let invoice = wlt_1.invoice( + contract_id, + schema_id, + 300, + InvoiceType::Blinded(Some(utxo_1)), + ); + let (consignment, tx, _, _) = wlt_1.pay_full(invoice, None, None, true, None); + wlt_1.mine_tx(&tx.txid(), false); + wlt_1.accept_transfer(consignment.clone(), None); + wlt_1.sync(); + + // construct bundle that will be omitted in first validation + let utxo_2 = wlt_1.get_utxo(None); + let invoice = wlt_1.invoice( + contract_id, + schema_id, + 400, + InvoiceType::Blinded(Some(utxo_2)), + ); + let (consignment, tx, _, _) = wlt_1.pay_full(invoice, None, None, true, None); + wlt_1.mine_tx(&tx.txid(), false); + wlt_1.accept_transfer(consignment.clone(), None); + wlt_1.sync(); + let omit_wid = tx.txid(); + let omit_bid = consignment + .bundles + .iter() + .find(|wb| wb.witness_id() == omit_wid) + .unwrap() + .bundle + .bundle_id(); + + // retrieve the two opouts on utxo + let allocations = wlt_1 + .stock() + .contract_assignments_for(contract_id, vec![utxo_1]) + .unwrap() + .into_values() + .flat_map(|v| v.into_iter()) + .collect::>(); + assert_eq!(allocations.len(), 1); + let (opout_1, amt_1) = if let (opout, AllocatedState::Amount(state)) = allocations[0] { + (opout, state.as_u64()) + } else { + panic!("unexpected state type"); + }; + let allocations = wlt_1 + .stock() + .contract_assignments_for(contract_id, vec![utxo_2]) + .unwrap() + .into_values() + .flat_map(|v| v.into_iter()) + .collect::>(); + assert_eq!(allocations.len(), 1); + let (opout_2, amt_2) = if let (opout, AllocatedState::Amount(state)) = allocations[0] { + (opout, state.as_u64()) + } else { + panic!("unexpected state type"); + }; + + // construct bundle that will be accepted twice, first with missing transition + let btc_change = wlt_1.get_address(); + let (mut psbt, _) = wlt_1.construct_psbt(vec![utxo_1, utxo_2], vec![(btc_change, None)], None); + psbt.construct_output_expect(ScriptPubkey::op_return(&[]), Sats::ZERO); + psbt.output_mut(1).unwrap().set_opret_host().unwrap(); + psbt.set_rgb_close_method(CloseMethod::OpretFirst); + + // 1st transition (revealed) + let mut transition_builder = wlt_1 + .stock() + .transition_builder_raw(contract_id, transition_type) + .unwrap(); + let state = asset_schema.allocated_state(amt_1); + transition_builder = transition_builder + .add_input(opout_1, state.clone()) + .unwrap(); + let secret_seal_1 = wlt_2.get_secret_seal(None, None); + let seal_1 = BuilderSeal::Concealed(secret_seal_1); + transition_builder = transition_builder + .add_owned_state_raw(*assignment_type, seal_1, state) + .unwrap(); + let transition = transition_builder.complete_transition().unwrap(); + let opid_1 = transition.id(); + psbt.push_rgb_transition(transition).unwrap(); + + // 2nd transition (concealed at first, revealed later) + let mut transition_builder = wlt_1 + .stock() + .transition_builder_raw(contract_id, transition_type) + .unwrap(); + let state = asset_schema.allocated_state(amt_2); + transition_builder = transition_builder + .add_input(opout_2, state.clone()) + .unwrap(); + let secret_seal_2 = wlt_3.get_secret_seal(None, None); + let seal_2 = BuilderSeal::Concealed(secret_seal_2); + transition_builder = transition_builder + .add_owned_state_raw(*assignment_type, seal_2, state) + .unwrap(); + let transition = transition_builder.complete_transition().unwrap(); + let opid_2 = transition.id(); + psbt.push_rgb_transition(transition).unwrap(); + + psbt.complete_construction(); + let fascia = psbt.rgb_commit().unwrap(); + let witness_id = psbt.txid(); + wlt_1.consume_fascia(fascia, witness_id); + let tx = wlt_1.sign_finalize_extract(&mut psbt); + wlt_1.broadcast_tx(&tx); + wlt_2.sync(); + + let mut beneficiaries = AssetBeneficiariesMap::new(); + beneficiaries.insert(contract_id, vec![seal_1, seal_2]); + let consignment = wlt_1.create_consignments(beneficiaries, witness_id)[0].clone(); + + // wlt_2 accepts consignment with transition to wlt_3 concealed + let mut consignment_1 = consignment.clone(); + let mut new_bundle = consignment_1 + .bundles + .iter() + .find(|b| b.bundle.known_transitions.len() == 2) + .unwrap() + .clone(); + let bundle_id = new_bundle.bundle.bundle_id(); + new_bundle.bundle.known_transitions.remove(&opid_2).unwrap(); + consignment_1.bundles = LargeVec::from_iter_checked( + consignment + .bundled_witnesses() + .filter(|wb| wb.witness_id() != omit_wid) + .cloned() + .map(|wb| { + if wb.witness_id() == witness_id { + new_bundle.clone() + } else { + wb + } + }), + ); + consignment_1.terminals.remove(&bundle_id).unwrap(); + consignment_1.terminals.remove(&omit_bid).unwrap(); + consignment_1 + .terminals + .insert(bundle_id, NonEmptyOrdSet::with(secret_seal_1).into()) + .unwrap(); + // wlt_2 accepts bundle with opid_1 revealed and opid_2 concealed + wlt_2.accept_transfer(consignment_1, None); + + let mut consignment_2 = consignment.clone(); + let mut new_bundle = consignment_2 + .bundles + .iter() + .find(|b| b.bundle.known_transitions.len() == 2) + .unwrap() + .clone(); + let bundle_id = new_bundle.bundle.bundle_id(); + new_bundle.bundle.known_transitions.remove(&opid_1).unwrap(); + consignment_2.bundles = LargeVec::from_iter_checked( + consignment + .bundled_witnesses() + .filter(|wb| wb.witness_id() != omit_wid) + .cloned() + .map(|wb| { + if wb.witness_id() == witness_id { + new_bundle.clone() + } else { + wb + } + }), + ); + consignment_2.terminals.remove(&bundle_id).unwrap(); + consignment_2.terminals.remove(&omit_bid).unwrap(); + consignment_2 + .terminals + .insert(bundle_id, NonEmptyOrdSet::with(secret_seal_2).into()) + .unwrap(); + wlt_3.accept_transfer(consignment, None); + + // wlt_2 accepts the same bundle with opid_1 concealed and opid_2 revealed + let (consignment, _) = wlt_3.send( + &mut wlt_2, + InvoiceType::Blinded(None), + contract_id, + amt_2, + 0, + None, + ); + println!("{consignment:?}"); + + // wlt_2 can spend allocation from both opid_1 and opid_2 + wlt_2.check_allocations(contract_id, asset_schema, vec![amt_1, amt_2], false); + wlt_2.send( + &mut wlt_1, + InvoiceType::Blinded(None), + contract_id, + amt_1 + amt_2, + 0, + None, + ); +} + #[cfg(not(feature = "altered"))] #[test] fn unordered_transitions_within_bundle() { From cb1a86aabd84239bb9e70fd16aaea27ebaf0ff79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Wed, 25 Jun 2025 17:09:24 +0200 Subject: [PATCH 19/22] known_transitions from map to vec --- Cargo.lock | 16 +- altered_submodules/rgb | 2 +- rgb | 2 +- rgb-core | 2 +- rgb-std | 2 +- ...030e9cc243fa34331564c250252570ec0b8af.json | 25 -- ...87d67577578d443ba1f17e73196e8d13bf16a.json | 25 -- ...a163aed89d96e4992374154d3c1b5973a93cd.json | 29 ++ ...dd86340e2626c1c1e8ac462f4f73c2645682c.json | 29 ++ ...719d697d72ff18693bd8cefbb37f8a585808c.json | 29 -- ...87c9ccd2fcb10314f9d19b0b223cfb85e7ed3.json | 29 ++ ...0a55f305e8e09f8b0d0149dd47d088581289b.json | 29 -- ...undles_pubWitness_data_input_sequence.json | 253 ++++++++-------- tests/fixtures/attack_chain.json | 253 ++++++++-------- tests/fixtures/attack_genesis_schema_id.json | 276 ++++++++--------- tests/fixtures/attack_genesis_testnet.json | 276 ++++++++--------- tests/fixtures/attack_resolver_error.json | 249 ++++++++-------- ...9106512886bf2c8617dfd3bf06c2321c5f8f4.json | 25 ++ ...39cca22dbfe4fe92517ce16a33563803c5ad2.json | 25 ++ ...b6fec952425354c17c74b0d5e69d3c467142b.json | 25 ++ tests/fixtures/consignment_A.json | 255 ++++++++-------- tests/fixtures/consignment_B.json | 278 +++++++++--------- ...ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b.json | 29 -- ...bcacd9393c00436b9678b21a453ef0654a26a.json | 25 -- tests/transfers.rs | 28 +- tests/utils/helpers.rs | 8 +- tests/utils/mod.rs | 18 +- tests/validation.rs | 129 ++++---- 28 files changed, 1230 insertions(+), 1141 deletions(-) delete mode 100644 tests/fixtures/03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af.json delete mode 100644 tests/fixtures/0f8f09b5898c6f0c16ffaf4f10d87d67577578d443ba1f17e73196e8d13bf16a.json create mode 100644 tests/fixtures/143b34678a7e3e0d2dbbfbd14c6a163aed89d96e4992374154d3c1b5973a93cd.json create mode 100644 tests/fixtures/333b0aea5cbf230791c57814de6dd86340e2626c1c1e8ac462f4f73c2645682c.json delete mode 100644 tests/fixtures/5599bb3c61fad724e71ce1ed10d719d697d72ff18693bd8cefbb37f8a585808c.json create mode 100644 tests/fixtures/84e3ac658455e8969e03ac02dc487c9ccd2fcb10314f9d19b0b223cfb85e7ed3.json delete mode 100644 tests/fixtures/abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b.json create mode 100644 tests/fixtures/b243f251cd06181c5568e041ed19106512886bf2c8617dfd3bf06c2321c5f8f4.json create mode 100644 tests/fixtures/b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2.json create mode 100644 tests/fixtures/b8880c28cf9163673b7e39f2af6b6fec952425354c17c74b0d5e69d3c467142b.json delete mode 100644 tests/fixtures/e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b.json delete mode 100644 tests/fixtures/fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a.json diff --git a/Cargo.lock b/Cargo.lock index 66ada68..b1ddb58 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1852,8 +1852,7 @@ dependencies = [ [[package]] name = "rgb-psbt" -version = "0.11.1-alpha.2+unreviewed" -source = "git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer#bd3f36f8d144047385f2e809e3b93a61b29b118f" +version = "0.11.1-alpha.3+unreviewed" dependencies = [ "amplify", "baid64", @@ -1869,6 +1868,7 @@ dependencies = [ [[package]] name = "rgb-psbt" version = "0.11.1-alpha.3+unreviewed" +source = "git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer#8ab53d712e018a5681c189b1e2196efb0cca988b" dependencies = [ "amplify", "baid64", @@ -1883,8 +1883,7 @@ dependencies = [ [[package]] name = "rgb-runtime" -version = "0.11.1-alpha.2+unreviewed" -source = "git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer#bd3f36f8d144047385f2e809e3b93a61b29b118f" +version = "0.11.1-alpha.3+unreviewed" dependencies = [ "amplify", "baid64", @@ -1896,7 +1895,7 @@ dependencies = [ "getrandom 0.3.2", "indexmap 2.9.0", "nonasync", - "rgb-psbt 0.11.1-alpha.2+unreviewed", + "rgb-psbt 0.11.1-alpha.3+unreviewed", "rgb-std", "serde", "strict_types", @@ -1906,6 +1905,7 @@ dependencies = [ [[package]] name = "rgb-runtime" version = "0.11.1-alpha.3+unreviewed" +source = "git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer#8ab53d712e018a5681c189b1e2196efb0cca988b" dependencies = [ "amplify", "baid64", @@ -1917,7 +1917,7 @@ dependencies = [ "getrandom 0.3.2", "indexmap 2.9.0", "nonasync", - "rgb-psbt 0.11.1-alpha.3+unreviewed", + "rgb-psbt 0.11.1-alpha.3+unreviewed (git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer)", "rgb-std", "serde", "strict_types", @@ -1980,10 +1980,10 @@ dependencies = [ "once_cell", "psbt", "rand 0.8.5", - "rgb-psbt 0.11.1-alpha.2+unreviewed", "rgb-psbt 0.11.1-alpha.3+unreviewed", - "rgb-runtime 0.11.1-alpha.2+unreviewed", + "rgb-psbt 0.11.1-alpha.3+unreviewed (git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer)", "rgb-runtime 0.11.1-alpha.3+unreviewed", + "rgb-runtime 0.11.1-alpha.3+unreviewed (git+https://github.com/RGB-WG/rgb?branch=revert_fix_same_blinded_transfer)", "rgb-schemata", "rgb-std", "rstest", diff --git a/altered_submodules/rgb b/altered_submodules/rgb index bd3f36f..8ab53d7 160000 --- a/altered_submodules/rgb +++ b/altered_submodules/rgb @@ -1 +1 @@ -Subproject commit bd3f36f8d144047385f2e809e3b93a61b29b118f +Subproject commit 8ab53d712e018a5681c189b1e2196efb0cca988b diff --git a/rgb b/rgb index c07356d..62423fb 160000 --- a/rgb +++ b/rgb @@ -1 +1 @@ -Subproject commit c07356de16bd8e253050fea2e25567bede2e26af +Subproject commit 62423fbbb2d10abe279c567d1cf3592f3ac53831 diff --git a/rgb-core b/rgb-core index 50090ee..dcd9d92 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit 50090ee94d92c9c937ef94507aff58b595d1a9de +Subproject commit dcd9d92072b8136149bc892589acb39ec3ba83db diff --git a/rgb-std b/rgb-std index 28c0325..b940e6d 160000 --- a/rgb-std +++ b/rgb-std @@ -1 +1 @@ -Subproject commit 28c0325e92717763a08fdcc8ab4c8d2790be31da +Subproject commit b940e6d5fbf7ed21d3f3186de61420f7aebebb2d diff --git a/tests/fixtures/03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af.json b/tests/fixtures/03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af.json deleted file mode 100644 index 1f2044c..0000000 --- a/tests/fixtures/03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", - "sigScript": "", - "sequence": 0, - "witness": [ - "304502210089bb6f905f0666c21882dd5f782e81fd8cc46efa29cd20c85cf7983c64784742022031ea54839b8f955196994946ac34854840740e03b79cfa16bfb28645705ea60301", - "03413efe9599119d2196d8845747489f187a001cf7a52c37f6d137513170f2326b" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" - }, - { - "value": 99999200, - "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/0f8f09b5898c6f0c16ffaf4f10d87d67577578d443ba1f17e73196e8d13bf16a.json b/tests/fixtures/0f8f09b5898c6f0c16ffaf4f10d87d67577578d443ba1f17e73196e8d13bf16a.json deleted file mode 100644 index d6c9bbe..0000000 --- a/tests/fixtures/0f8f09b5898c6f0c16ffaf4f10d87d67577578d443ba1f17e73196e8d13bf16a.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", - "sigScript": "", - "sequence": 0, - "witness": [ - "30450221008e11937a866e1716998f3672197fca38cd4e4f475b28df8211da8f4559611cc002204b2326c30761d092d82d669f38ded1b21f8d9852857ba0d4fc76389a333e9f1d01", - "03f35723b0c92b7761492d84208a1c2f6e122d78d6792e2db3590028fde52fa88c" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" - }, - { - "value": 99998800, - "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/143b34678a7e3e0d2dbbfbd14c6a163aed89d96e4992374154d3c1b5973a93cd.json b/tests/fixtures/143b34678a7e3e0d2dbbfbd14c6a163aed89d96e4992374154d3c1b5973a93cd.json new file mode 100644 index 0000000..20cc2d2 --- /dev/null +++ b/tests/fixtures/143b34678a7e3e0d2dbbfbd14c6a163aed89d96e4992374154d3c1b5973a93cd.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "4b8d99de8188a6769987e59faa7cdb70086608a05f38a336549770f047a64701:1", + "sigScript": "", + "sequence": 0, + "witness": [ + "3045022100ab6fefaa3d7ed732aee06229930d3af198183ed1c6968cb5ea49dd23d0ee6b660220474df6e8bed2f28a98814cdb39fd4a3d1e278f74dfcb5f1937cf7921a0b4fe1801", + "027b878223ac810d0dddf51a05d337cf09a84bfae5472582bdf3e31b6f72aec73a" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a204266173b9f445e4e0738d460c90ed778eb152822ad9c14366c7fc07b20fcbcc3" + }, + { + "value": 9000, + "scriptPubkey": "0014a38ad5e206733b28151e460e383991ffbdbdbfe9" + }, + { + "value": 99990600, + "scriptPubkey": "00146990e864fee7e996d191cf742d37d80fd47eab2f" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/333b0aea5cbf230791c57814de6dd86340e2626c1c1e8ac462f4f73c2645682c.json b/tests/fixtures/333b0aea5cbf230791c57814de6dd86340e2626c1c1e8ac462f4f73c2645682c.json new file mode 100644 index 0000000..7ced46a --- /dev/null +++ b/tests/fixtures/333b0aea5cbf230791c57814de6dd86340e2626c1c1e8ac462f4f73c2645682c.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "84e3ac658455e8969e03ac02dc487c9ccd2fcb10314f9d19b0b223cfb85e7ed3:2", + "sigScript": "", + "sequence": 0, + "witness": [ + "30440220476ccfaefff85bb856cc432b3592635be809d928c84411717e837d769c7966860220233acde327f11f84aaf7aa62e016f43818a48feb69c1926ebc00eaaab558e78301", + "02891b2006e72bf14fd122bdf6d89522d6480be2bc55035421f1954bcbbf888e14" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20ded4a8d8dba904936aeea30e8bc0ae524b64c3500bc9cfe94895dc77bfde35d9" + }, + { + "value": 9000, + "scriptPubkey": "0014fe9163be63b335ae4640e5011d610feb791713db" + }, + { + "value": 99971800, + "scriptPubkey": "0014282993ddc2ba6d84598e751a93429395d460c7f9" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/5599bb3c61fad724e71ce1ed10d719d697d72ff18693bd8cefbb37f8a585808c.json b/tests/fixtures/5599bb3c61fad724e71ce1ed10d719d697d72ff18693bd8cefbb37f8a585808c.json deleted file mode 100644 index a845a1a..0000000 --- a/tests/fixtures/5599bb3c61fad724e71ce1ed10d719d697d72ff18693bd8cefbb37f8a585808c.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", - "sigScript": "", - "sequence": 0, - "witness": [ - "3045022100a7f7c8804d4d9c75036e31e060d569a907d94a526879473f19d8f18576be84e8022074a738eb524f2fee20b2649f8703f9fdad2da527a2772187e074f32cc7210fc301", - "0218c598d3c85ee6e8030fb67e75909389f3245cdde7a36489905cc455e6a65173" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" - }, - { - "value": 9000, - "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" - }, - { - "value": 99971800, - "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/84e3ac658455e8969e03ac02dc487c9ccd2fcb10314f9d19b0b223cfb85e7ed3.json b/tests/fixtures/84e3ac658455e8969e03ac02dc487c9ccd2fcb10314f9d19b0b223cfb85e7ed3.json new file mode 100644 index 0000000..e853d22 --- /dev/null +++ b/tests/fixtures/84e3ac658455e8969e03ac02dc487c9ccd2fcb10314f9d19b0b223cfb85e7ed3.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "143b34678a7e3e0d2dbbfbd14c6a163aed89d96e4992374154d3c1b5973a93cd:2", + "sigScript": "", + "sequence": 0, + "witness": [ + "3045022100dfcbed03e1118cf81ccd3c2462a707fa3534d48baccba2a2af2eefb6cc3a2fb80220191d94b5a51d9e4d765804c7756e5b66e58ef3e862082835e83f6ce85b0e17b101", + "03375b7c340ffbee5804ee0ce1e87f9f85386f998615e43604ef7a0136b0c50038" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20ec7439f82cb704cdc0e867ec63c6f88ecdb352266915e7b95639b26360ebbb6e" + }, + { + "value": 9000, + "scriptPubkey": "00142842f7eabee95edda63fefc011bce78c69a9cd1d" + }, + { + "value": 99981200, + "scriptPubkey": "0014f62a638b6981c9396ea76109aed6ef5f5981a303" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b.json b/tests/fixtures/abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b.json deleted file mode 100644 index 2880938..0000000 --- a/tests/fixtures/abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", - "sigScript": "", - "sequence": 0, - "witness": [ - "3044022021832285c648f2b3138c6a0089aed606ebb8be4d3e4aa1c2a9b97d0d03e91f59022023bf31ad446bdcaff7e0818b12ccbaf6b2437c0710213f650f4e899fc1acc32101", - "0233ed53f293986e38450479ada729eb7bbf53bd7f349c4047754d0f8a84ada3d4" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" - }, - { - "value": 9000, - "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" - }, - { - "value": 99990600, - "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json b/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json index 4d00986..f6814fc 100644 --- a/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json +++ b/tests/fixtures/attack_bundles_pubWitness_data_input_sequence.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "1c49cd66865b0c0fb36b108a8a9ef78c4853d1780c8df74be6b874d866a8d259": [ - "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4" + "f5f7500948a8ae8ad6db4d551c6f317f5c02de23edb07bbff34cea2bfcbe4cb1": [ + "2312d1e66065930131fbaf955acd1bbc9d62de82e81b4da8a0b3f7a7fb8d5a90" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1750082151, + "timestamp": 1750883619, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d", + "txid": "4caa17eae3f082765ce50dceaddd4e0ec4cef41d162bd42a3bbbbb076de649a7", "vout": 1, - "blinding": 17368930799645178615 + "blinding": 15882975521680157652 }, "state": 666 } @@ -48,7 +48,7 @@ "version": 2, "inputs": [ { - "prevOutput": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d:1", + "prevOutput": "4caa17eae3f082765ce50dceaddd4e0ec4cef41d162bd42a3bbbbb076de649a7:1", "sigScript": "", "sequence": 1, "witness": [] @@ -57,11 +57,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20afbb69b179dd11fbf97185bc2f7b5f7e6f0fb456f951e8661a6eb186e128e75e" + "scriptPubkey": "6a2004b86f6d44449be00a1b75a13d671ad44da9b388367102b2a6ee668389313b5b" }, { "value": 99999600, - "scriptPubkey": "00145846bfbbad353d01cd5d5e83560e2efdd2d56452" + "scriptPubkey": "00148467a4cb9231d8da59df02de1a82ce5761b6d59e" } ], "lockTime": 0 @@ -69,49 +69,52 @@ }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "5ee0f15a400dae4ddc746e806095c1b91474df8a1343da2ce55d62380bf1c3d9", - "a879d6005973e7fb3f568b0ed57bd1986564c203ac00f46cd6ab13c6adc21a6d", - "589015f185494ef80821f7a7e5c7d5c92f8b14e8f5481486b36099a90a047f3f" + "871af4b1c4ec5ab8d17b6ee08f50ba823f497b3e3e32e8d4ed6171cf101596c5", + "52e4b4229303ac38fcb7258d8bec1c2cf79344c1e80d55b9b3ce4328e5bef1d5", + "f35512c5b4e2cd46bf866036d0778d87d7c74bf460208fa6d08a7a35655c9d69" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0": "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a" + "2e75cd43bb1215c25a059a70231c3d1fc876baedf57b01cad5523ec86becab9c/4000/0": "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0" }, - "knownTransitions": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 7971877571019802006 - }, - "state": 666 - } - ] - } - }, - "signature": null + "knownTransitions": [ + { + "opid": "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "2e75cd43bb1215c25a059a70231c3d1fc876baedf57b01cad5523ec86becab9c/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 17454843376278179683 + }, + "state": 666 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -120,7 +123,7 @@ "version": 2, "inputs": [ { - "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", + "prevOutput": "b8880c28cf9163673b7e39f2af6b6fec952425354c17c74b0d5e69d3c467142b:1", "sigScript": "", "sequence": 0, "witness": [] @@ -129,11 +132,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" + "scriptPubkey": "6a20bc53e837e022ea6083e4ad64efcca8371e031710118834615df7098715cf87a6" }, { "value": 99999200, - "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" + "scriptPubkey": "00145c3afeb169a9fa6828c917b6e61ae123951806f4" } ], "lockTime": 0 @@ -141,53 +144,56 @@ }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", - "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", - "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" + "ca3be1e1847652a7e803f4599f73f1cf200bf05ab9cceda8e30a372c8216fdfe", + "6471737aeb42e46cdcd5d7f57cd56406806d7630938b764c16ba04b547ef3bf4", + "27915b2641c8ad41aa1dd2198c752aa58a84f8d58849f50fba7c8252318a3ea0" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" + "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0/4000/0": "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941" }, - "knownTransitions": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 6805042725940518372 + "knownTransitions": [ + { + "opid": "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 7476137096582570779 + }, + "state": 616 }, - "state": 616 - }, - { - "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", - "state": 50 - } - ] - } - }, - "signature": null + { + "seal": "88a6eddc7feb428eb58fbd64728a33bfdc673f375a57d4bd59371ca92369e40f", + "state": 50 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -196,7 +202,7 @@ "version": 2, "inputs": [ { - "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", + "prevOutput": "b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2:1", "sigScript": "", "sequence": 0, "witness": [] @@ -205,11 +211,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" + "scriptPubkey": "6a20d87aa6b06a714562dc4e9f5a9e24e6dfda5684d880480ba6f54262702c55a7a5" }, { "value": 99998800, - "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" + "scriptPubkey": "001469ade53185b381ac4428fdd0edbca6368403e9d0" } ], "lockTime": 0 @@ -217,53 +223,56 @@ }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", - "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", - "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" + "a3a23db672daad69d0717c9740d1ffc937f8c95b479340a97a61c2979262a44d", + "ee360ceb6a0a463c92710b7213bbac8e0f3bfc1fafa7ad09fcc4782dff90ea9e", + "2f48a5c7ffff1fc60b698c18224bb847fd603359ecd61852f9b729e6e5bef414" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" + "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941/4000/0": "12d445f14163f7b7ffdad877e9f733198b904f42d01dd32a25cc4b52f6aac938" }, - "knownTransitions": { - "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 17092846758161066830 + "knownTransitions": [ + { + "opid": "12d445f14163f7b7ffdad877e9f733198b904f42d01dd32a25cc4b52f6aac938", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 9119672638623966453 + }, + "state": 539 }, - "state": 539 - }, - { - "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", - "state": 77 - } - ] - } - }, - "signature": null + { + "seal": "2312d1e66065930131fbaf955acd1bbc9d62de82e81b4da8a0b3f7a7fb8d5a90", + "state": 77 + } + ] + } + }, + "signature": null + } } - } + ] } } ], diff --git a/tests/fixtures/attack_chain.json b/tests/fixtures/attack_chain.json index 9e06d7f..f9b3e72 100644 --- a/tests/fixtures/attack_chain.json +++ b/tests/fixtures/attack_chain.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "1c49cd66865b0c0fb36b108a8a9ef78c4853d1780c8df74be6b874d866a8d259": [ - "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4" + "f5f7500948a8ae8ad6db4d551c6f317f5c02de23edb07bbff34cea2bfcbe4cb1": [ + "2312d1e66065930131fbaf955acd1bbc9d62de82e81b4da8a0b3f7a7fb8d5a90" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1750082151, + "timestamp": 1750883619, "issuer": "ssi:anonymous", "chainNet": "liquidTestnet", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d", + "txid": "4caa17eae3f082765ce50dceaddd4e0ec4cef41d162bd42a3bbbbb076de649a7", "vout": 1, - "blinding": 17368930799645178615 + "blinding": 15882975521680157652 }, "state": 666 } @@ -48,7 +48,7 @@ "version": 2, "inputs": [ { - "prevOutput": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d:1", + "prevOutput": "4caa17eae3f082765ce50dceaddd4e0ec4cef41d162bd42a3bbbbb076de649a7:1", "sigScript": "", "sequence": 0, "witness": [] @@ -57,11 +57,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20afbb69b179dd11fbf97185bc2f7b5f7e6f0fb456f951e8661a6eb186e128e75e" + "scriptPubkey": "6a2004b86f6d44449be00a1b75a13d671ad44da9b388367102b2a6ee668389313b5b" }, { "value": 99999600, - "scriptPubkey": "00145846bfbbad353d01cd5d5e83560e2efdd2d56452" + "scriptPubkey": "00148467a4cb9231d8da59df02de1a82ce5761b6d59e" } ], "lockTime": 0 @@ -69,49 +69,52 @@ }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "5ee0f15a400dae4ddc746e806095c1b91474df8a1343da2ce55d62380bf1c3d9", - "a879d6005973e7fb3f568b0ed57bd1986564c203ac00f46cd6ab13c6adc21a6d", - "589015f185494ef80821f7a7e5c7d5c92f8b14e8f5481486b36099a90a047f3f" + "871af4b1c4ec5ab8d17b6ee08f50ba823f497b3e3e32e8d4ed6171cf101596c5", + "52e4b4229303ac38fcb7258d8bec1c2cf79344c1e80d55b9b3ce4328e5bef1d5", + "f35512c5b4e2cd46bf866036d0778d87d7c74bf460208fa6d08a7a35655c9d69" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0": "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a" + "2e75cd43bb1215c25a059a70231c3d1fc876baedf57b01cad5523ec86becab9c/4000/0": "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0" }, - "knownTransitions": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 7971877571019802006 - }, - "state": 666 - } - ] - } - }, - "signature": null + "knownTransitions": [ + { + "opid": "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "2e75cd43bb1215c25a059a70231c3d1fc876baedf57b01cad5523ec86becab9c/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 17454843376278179683 + }, + "state": 666 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -120,7 +123,7 @@ "version": 2, "inputs": [ { - "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", + "prevOutput": "b8880c28cf9163673b7e39f2af6b6fec952425354c17c74b0d5e69d3c467142b:1", "sigScript": "", "sequence": 0, "witness": [] @@ -129,11 +132,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" + "scriptPubkey": "6a20bc53e837e022ea6083e4ad64efcca8371e031710118834615df7098715cf87a6" }, { "value": 99999200, - "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" + "scriptPubkey": "00145c3afeb169a9fa6828c917b6e61ae123951806f4" } ], "lockTime": 0 @@ -141,53 +144,56 @@ }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", - "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", - "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" + "ca3be1e1847652a7e803f4599f73f1cf200bf05ab9cceda8e30a372c8216fdfe", + "6471737aeb42e46cdcd5d7f57cd56406806d7630938b764c16ba04b547ef3bf4", + "27915b2641c8ad41aa1dd2198c752aa58a84f8d58849f50fba7c8252318a3ea0" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" + "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0/4000/0": "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941" }, - "knownTransitions": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 6805042725940518372 + "knownTransitions": [ + { + "opid": "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 7476137096582570779 + }, + "state": 616 }, - "state": 616 - }, - { - "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", - "state": 50 - } - ] - } - }, - "signature": null + { + "seal": "88a6eddc7feb428eb58fbd64728a33bfdc673f375a57d4bd59371ca92369e40f", + "state": 50 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -196,7 +202,7 @@ "version": 2, "inputs": [ { - "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", + "prevOutput": "b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2:1", "sigScript": "", "sequence": 0, "witness": [] @@ -205,11 +211,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" + "scriptPubkey": "6a20d87aa6b06a714562dc4e9f5a9e24e6dfda5684d880480ba6f54262702c55a7a5" }, { "value": 99998800, - "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" + "scriptPubkey": "001469ade53185b381ac4428fdd0edbca6368403e9d0" } ], "lockTime": 0 @@ -217,53 +223,56 @@ }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", - "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", - "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" + "a3a23db672daad69d0717c9740d1ffc937f8c95b479340a97a61c2979262a44d", + "ee360ceb6a0a463c92710b7213bbac8e0f3bfc1fafa7ad09fcc4782dff90ea9e", + "2f48a5c7ffff1fc60b698c18224bb847fd603359ecd61852f9b729e6e5bef414" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" + "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941/4000/0": "12d445f14163f7b7ffdad877e9f733198b904f42d01dd32a25cc4b52f6aac938" }, - "knownTransitions": { - "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 17092846758161066830 + "knownTransitions": [ + { + "opid": "12d445f14163f7b7ffdad877e9f733198b904f42d01dd32a25cc4b52f6aac938", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 9119672638623966453 + }, + "state": 539 }, - "state": 539 - }, - { - "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", - "state": 77 - } - ] - } - }, - "signature": null + { + "seal": "2312d1e66065930131fbaf955acd1bbc9d62de82e81b4da8a0b3f7a7fb8d5a90", + "state": 77 + } + ] + } + }, + "signature": null + } } - } + ] } } ], diff --git a/tests/fixtures/attack_genesis_schema_id.json b/tests/fixtures/attack_genesis_schema_id.json index 6d976e6..68a059c 100644 --- a/tests/fixtures/attack_genesis_schema_id.json +++ b/tests/fixtures/attack_genesis_schema_id.json @@ -5,7 +5,7 @@ "genesis": { "ffv": 0, "schemaId": "rgb:sch:JgqK5hJX9YBT4osCV7VcW_iLTcA5csUCnLzvaKTTrNY#mars-house-friend", - "timestamp": 1750082198, + "timestamp": 1750883671, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -27,9 +27,9 @@ "items": [ { "seal": { - "txid": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad", - "vout": 0, - "blinding": 10573374530598502032 + "txid": "4b8d99de8188a6769987e59faa7cdb70086608a05f38a336549770f047a64701", + "vout": 1, + "blinding": 15971490758955256628 }, "state": 666 } @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", + "prevOutput": "4b8d99de8188a6769987e59faa7cdb70086608a05f38a336549770f047a64701:1", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" + "scriptPubkey": "6a204266173b9f445e4e0738d460c90ed778eb152822ad9c14366c7fc07b20fcbcc3" }, { "value": 9000, - "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" + "scriptPubkey": "0014a38ad5e206733b28151e460e383991ffbdbdbfe9" }, { "value": 99990600, - "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" + "scriptPubkey": "00146990e864fee7e996d191cf742d37d80fd47eab2f" } ], "lockTime": 0 @@ -69,50 +69,52 @@ }, "anchor": { "mpcProof": { - "pos": 5, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", - "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", - "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", - "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" + "50d3665113ef6571da5870d08ab7f2fd9a74a8fb8b885d72ba6e27ee443bd1f1", + "28ad1a030ca76f794d62a000e8d68101ed7855fc06ae56e1c10e64814c6dfbeb", + "26fd7ea39c056153b91b556d0a1d2bfd2d99a02d18ffdc5738fc0c565bf5cc56" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" + "6ed33f3dc88ef3682ac43fbe1ac4648245130d12fa1ab9f755a3c92f00b0178b/4000/0": "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658" }, - "knownTransitions": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { - "ffv": 0, - "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 2, - "blinding": 10921448307780233921 - }, - "state": 666 - } - ] - } - }, - "signature": null + "knownTransitions": [ + { + "opid": "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658", + "transition": { + "ffv": 0, + "contractId": "rgb:btM~PciO-82gqxD_-_GsRkgk-UTDRL6G-rn3VaPJ-LwCwF4s", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "6ed33f3dc88ef3682ac43fbe1ac4648245130d12fa1ab9f755a3c92f00b0178b/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 2, + "blinding": 5104376770230072053 + }, + "state": 666 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -121,7 +123,7 @@ "version": 2, "inputs": [ { - "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", + "prevOutput": "143b34678a7e3e0d2dbbfbd14c6a163aed89d96e4992374154d3c1b5973a93cd:2", "sigScript": "", "sequence": 0, "witness": [] @@ -130,15 +132,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" + "scriptPubkey": "6a20ec7439f82cb704cdc0e867ec63c6f88ecdb352266915e7b95639b26360ebbb6e" }, { "value": 9000, - "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" + "scriptPubkey": "00142842f7eabee95edda63fefc011bce78c69a9cd1d" }, { "value": 99981200, - "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" + "scriptPubkey": "0014f62a638b6981c9396ea76109aed6ef5f5981a303" } ], "lockTime": 0 @@ -146,58 +148,60 @@ }, "anchor": { "mpcProof": { - "pos": 5, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", - "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", - "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", - "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" + "f250b9b3d529f03b634d1b400fcc1c722e3d5da1723e55634d053bf241966f36", + "95b11bf9d3c76e118677fee7ccddb3fb86ccd42c813d254737c3156484b9916f", + "0cc8e38d92681cbfc54e90e42a9ff9e1944b3e2e2caa6fd6b8fa98d865f69811" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" + "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658/4000/0": "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a" }, - "knownTransitions": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { - "ffv": 0, - "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 17184009278113549158 - }, - "state": 50 - }, - { - "seal": { - "txid": null, - "vout": 2, - "blinding": 8586455737525543612 + "knownTransitions": [ + { + "opid": "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a", + "transition": { + "ffv": 0, + "contractId": "rgb:btM~PciO-82gqxD_-_GsRkgk-UTDRL6G-rn3VaPJ-LwCwF4s", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 14095570581868621249 + }, + "state": 50 }, - "state": 616 - } - ] - } - }, - "signature": null + { + "seal": { + "txid": null, + "vout": 2, + "blinding": 8503444477660371154 + }, + "state": 616 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -206,7 +210,7 @@ "version": 2, "inputs": [ { - "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", + "prevOutput": "84e3ac658455e8969e03ac02dc487c9ccd2fcb10314f9d19b0b223cfb85e7ed3:2", "sigScript": "", "sequence": 0, "witness": [] @@ -215,15 +219,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" + "scriptPubkey": "6a20ded4a8d8dba904936aeea30e8bc0ae524b64c3500bc9cfe94895dc77bfde35d9" }, { "value": 9000, - "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" + "scriptPubkey": "0014fe9163be63b335ae4640e5011d610feb791713db" }, { "value": 99971800, - "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" + "scriptPubkey": "0014282993ddc2ba6d84598e751a93429395d460c7f9" } ], "lockTime": 0 @@ -231,58 +235,60 @@ }, "anchor": { "mpcProof": { - "pos": 5, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", - "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", - "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", - "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" + "a5b9eb9691493220613a6207567cc40c00b69c960c417b83c63ffe98dd1582cc", + "c91ec5dbc524954e5ec1321bcab56cb1f06c3a6759b5d9ff8560f159f39a8c49", + "061191e16060e63aaf24c4c0e0d4795a5e8762f201ee7745abae967346812236" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" + "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a/4000/1": "21c09f8ead108258bcdf2e7bbb0de231974b351b9cebe69e283beb6a99590628" }, - "knownTransitions": { - "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { - "ffv": 0, - "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 18112855856365951572 - }, - "state": 77 - }, - { - "seal": { - "txid": null, - "vout": 2, - "blinding": 4666323833009824294 + "knownTransitions": [ + { + "opid": "21c09f8ead108258bcdf2e7bbb0de231974b351b9cebe69e283beb6a99590628", + "transition": { + "ffv": 0, + "contractId": "rgb:btM~PciO-82gqxD_-_GsRkgk-UTDRL6G-rn3VaPJ-LwCwF4s", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a/4000/1" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 2964060174665201768 + }, + "state": 77 }, - "state": 539 - } - ] - } - }, - "signature": null + { + "seal": { + "txid": null, + "vout": 2, + "blinding": 17353984293023054398 + }, + "state": 539 + } + ] + } + }, + "signature": null + } } - } + ] } } ], diff --git a/tests/fixtures/attack_genesis_testnet.json b/tests/fixtures/attack_genesis_testnet.json index 2aa49c7..bd64a4a 100644 --- a/tests/fixtures/attack_genesis_testnet.json +++ b/tests/fixtures/attack_genesis_testnet.json @@ -5,7 +5,7 @@ "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1750082198, + "timestamp": 1750883671, "issuer": "ssi:anonymous", "chainNet": "bitcoinMainnet", "sealClosingStrategy": "firstOpretOrTapret", @@ -27,9 +27,9 @@ "items": [ { "seal": { - "txid": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad", - "vout": 0, - "blinding": 10573374530598502032 + "txid": "4b8d99de8188a6769987e59faa7cdb70086608a05f38a336549770f047a64701", + "vout": 1, + "blinding": 15971490758955256628 }, "state": 666 } @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", + "prevOutput": "4b8d99de8188a6769987e59faa7cdb70086608a05f38a336549770f047a64701:1", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" + "scriptPubkey": "6a204266173b9f445e4e0738d460c90ed778eb152822ad9c14366c7fc07b20fcbcc3" }, { "value": 9000, - "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" + "scriptPubkey": "0014a38ad5e206733b28151e460e383991ffbdbdbfe9" }, { "value": 99990600, - "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" + "scriptPubkey": "00146990e864fee7e996d191cf742d37d80fd47eab2f" } ], "lockTime": 0 @@ -69,50 +69,52 @@ }, "anchor": { "mpcProof": { - "pos": 5, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", - "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", - "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", - "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" + "50d3665113ef6571da5870d08ab7f2fd9a74a8fb8b885d72ba6e27ee443bd1f1", + "28ad1a030ca76f794d62a000e8d68101ed7855fc06ae56e1c10e64814c6dfbeb", + "26fd7ea39c056153b91b556d0a1d2bfd2d99a02d18ffdc5738fc0c565bf5cc56" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" + "6ed33f3dc88ef3682ac43fbe1ac4648245130d12fa1ab9f755a3c92f00b0178b/4000/0": "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658" }, - "knownTransitions": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { - "ffv": 0, - "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 2, - "blinding": 10921448307780233921 - }, - "state": 666 - } - ] - } - }, - "signature": null + "knownTransitions": [ + { + "opid": "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658", + "transition": { + "ffv": 0, + "contractId": "rgb:btM~PciO-82gqxD_-_GsRkgk-UTDRL6G-rn3VaPJ-LwCwF4s", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "6ed33f3dc88ef3682ac43fbe1ac4648245130d12fa1ab9f755a3c92f00b0178b/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 2, + "blinding": 5104376770230072053 + }, + "state": 666 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -121,7 +123,7 @@ "version": 2, "inputs": [ { - "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", + "prevOutput": "143b34678a7e3e0d2dbbfbd14c6a163aed89d96e4992374154d3c1b5973a93cd:2", "sigScript": "", "sequence": 0, "witness": [] @@ -130,15 +132,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" + "scriptPubkey": "6a20ec7439f82cb704cdc0e867ec63c6f88ecdb352266915e7b95639b26360ebbb6e" }, { "value": 9000, - "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" + "scriptPubkey": "00142842f7eabee95edda63fefc011bce78c69a9cd1d" }, { "value": 99981200, - "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" + "scriptPubkey": "0014f62a638b6981c9396ea76109aed6ef5f5981a303" } ], "lockTime": 0 @@ -146,58 +148,60 @@ }, "anchor": { "mpcProof": { - "pos": 5, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", - "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", - "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", - "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" + "f250b9b3d529f03b634d1b400fcc1c722e3d5da1723e55634d053bf241966f36", + "95b11bf9d3c76e118677fee7ccddb3fb86ccd42c813d254737c3156484b9916f", + "0cc8e38d92681cbfc54e90e42a9ff9e1944b3e2e2caa6fd6b8fa98d865f69811" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" + "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658/4000/0": "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a" }, - "knownTransitions": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { - "ffv": 0, - "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 17184009278113549158 - }, - "state": 50 - }, - { - "seal": { - "txid": null, - "vout": 2, - "blinding": 8586455737525543612 + "knownTransitions": [ + { + "opid": "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a", + "transition": { + "ffv": 0, + "contractId": "rgb:btM~PciO-82gqxD_-_GsRkgk-UTDRL6G-rn3VaPJ-LwCwF4s", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 14095570581868621249 + }, + "state": 50 }, - "state": 616 - } - ] - } - }, - "signature": null + { + "seal": { + "txid": null, + "vout": 2, + "blinding": 8503444477660371154 + }, + "state": 616 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -206,7 +210,7 @@ "version": 2, "inputs": [ { - "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", + "prevOutput": "84e3ac658455e8969e03ac02dc487c9ccd2fcb10314f9d19b0b223cfb85e7ed3:2", "sigScript": "", "sequence": 0, "witness": [] @@ -215,15 +219,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" + "scriptPubkey": "6a20ded4a8d8dba904936aeea30e8bc0ae524b64c3500bc9cfe94895dc77bfde35d9" }, { "value": 9000, - "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" + "scriptPubkey": "0014fe9163be63b335ae4640e5011d610feb791713db" }, { "value": 99971800, - "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" + "scriptPubkey": "0014282993ddc2ba6d84598e751a93429395d460c7f9" } ], "lockTime": 0 @@ -231,58 +235,60 @@ }, "anchor": { "mpcProof": { - "pos": 5, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", - "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", - "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", - "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" + "a5b9eb9691493220613a6207567cc40c00b69c960c417b83c63ffe98dd1582cc", + "c91ec5dbc524954e5ec1321bcab56cb1f06c3a6759b5d9ff8560f159f39a8c49", + "061191e16060e63aaf24c4c0e0d4795a5e8762f201ee7745abae967346812236" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" + "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a/4000/1": "21c09f8ead108258bcdf2e7bbb0de231974b351b9cebe69e283beb6a99590628" }, - "knownTransitions": { - "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { - "ffv": 0, - "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 18112855856365951572 - }, - "state": 77 - }, - { - "seal": { - "txid": null, - "vout": 2, - "blinding": 4666323833009824294 + "knownTransitions": [ + { + "opid": "21c09f8ead108258bcdf2e7bbb0de231974b351b9cebe69e283beb6a99590628", + "transition": { + "ffv": 0, + "contractId": "rgb:btM~PciO-82gqxD_-_GsRkgk-UTDRL6G-rn3VaPJ-LwCwF4s", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a/4000/1" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 2964060174665201768 + }, + "state": 77 }, - "state": 539 - } - ] - } - }, - "signature": null + { + "seal": { + "txid": null, + "vout": 2, + "blinding": 17353984293023054398 + }, + "state": 539 + } + ] + } + }, + "signature": null + } } - } + ] } } ], diff --git a/tests/fixtures/attack_resolver_error.json b/tests/fixtures/attack_resolver_error.json index 65da912..4b1f151 100644 --- a/tests/fixtures/attack_resolver_error.json +++ b/tests/fixtures/attack_resolver_error.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "1c49cd66865b0c0fb36b108a8a9ef78c4853d1780c8df74be6b874d866a8d259": [ - "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4" + "f5f7500948a8ae8ad6db4d551c6f317f5c02de23edb07bbff34cea2bfcbe4cb1": [ + "2312d1e66065930131fbaf955acd1bbc9d62de82e81b4da8a0b3f7a7fb8d5a90" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1750082151, + "timestamp": 1750883619, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d", + "txid": "4caa17eae3f082765ce50dceaddd4e0ec4cef41d162bd42a3bbbbb076de649a7", "vout": 1, - "blinding": 17368930799645178615 + "blinding": 15882975521680157652 }, "state": 666 } @@ -48,7 +48,7 @@ "version": 2, "inputs": [ { - "prevOutput": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d:1", + "prevOutput": "4caa17eae3f082765ce50dceaddd4e0ec4cef41d162bd42a3bbbbb076de649a7:1", "sigScript": "", "sequence": 0, "witness": [] @@ -57,11 +57,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20afbb69b179dd11fbf97185bc2f7b5f7e6f0fb456f951e8661a6eb186e128e75e" + "scriptPubkey": "6a2004b86f6d44449be00a1b75a13d671ad44da9b388367102b2a6ee668389313b5b" }, { "value": 99999600, - "scriptPubkey": "00145846bfbbad353d01cd5d5e83560e2efdd2d56452" + "scriptPubkey": "00148467a4cb9231d8da59df02de1a82ce5761b6d59e" } ], "lockTime": 0 @@ -69,104 +69,110 @@ }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "5ee0f15a400dae4ddc746e806095c1b91474df8a1343da2ce55d62380bf1c3d9", - "a879d6005973e7fb3f568b0ed57bd1986564c203ac00f46cd6ab13c6adc21a6d", - "589015f185494ef80821f7a7e5c7d5c92f8b14e8f5481486b36099a90a047f3f" + "871af4b1c4ec5ab8d17b6ee08f50ba823f497b3e3e32e8d4ed6171cf101596c5", + "52e4b4229303ac38fcb7258d8bec1c2cf79344c1e80d55b9b3ce4328e5bef1d5", + "f35512c5b4e2cd46bf866036d0778d87d7c74bf460208fa6d08a7a35655c9d69" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0": "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a" + "2e75cd43bb1215c25a059a70231c3d1fc876baedf57b01cad5523ec86becab9c/4000/0": "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0" }, - "knownTransitions": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 7971877571019802006 - }, - "state": 666 - } - ] - } - }, - "signature": null + "knownTransitions": [ + { + "opid": "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "2e75cd43bb1215c25a059a70231c3d1fc876baedf57b01cad5523ec86becab9c/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 17454843376278179683 + }, + "state": 666 + } + ] + } + }, + "signature": null + } } - } + ] } }, { "pubWitness": { - "txid": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af" + "txid": "b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2" }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", - "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", - "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" + "ca3be1e1847652a7e803f4599f73f1cf200bf05ab9cceda8e30a372c8216fdfe", + "6471737aeb42e46cdcd5d7f57cd56406806d7630938b764c16ba04b547ef3bf4", + "27915b2641c8ad41aa1dd2198c752aa58a84f8d58849f50fba7c8252318a3ea0" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" + "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0/4000/0": "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941" }, - "knownTransitions": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 6805042725940518372 + "knownTransitions": [ + { + "opid": "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 7476137096582570779 + }, + "state": 616 }, - "state": 616 - }, - { - "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", - "state": 50 - } - ] - } - }, - "signature": null + { + "seal": "88a6eddc7feb428eb58fbd64728a33bfdc673f375a57d4bd59371ca92369e40f", + "state": 50 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -175,7 +181,7 @@ "version": 2, "inputs": [ { - "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", + "prevOutput": "b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2:1", "sigScript": "", "sequence": 0, "witness": [] @@ -184,11 +190,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" + "scriptPubkey": "6a20d87aa6b06a714562dc4e9f5a9e24e6dfda5684d880480ba6f54262702c55a7a5" }, { "value": 99998800, - "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" + "scriptPubkey": "001469ade53185b381ac4428fdd0edbca6368403e9d0" } ], "lockTime": 0 @@ -196,53 +202,56 @@ }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", - "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", - "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" + "a3a23db672daad69d0717c9740d1ffc937f8c95b479340a97a61c2979262a44d", + "ee360ceb6a0a463c92710b7213bbac8e0f3bfc1fafa7ad09fcc4782dff90ea9e", + "2f48a5c7ffff1fc60b698c18224bb847fd603359ecd61852f9b729e6e5bef414" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" + "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941/4000/0": "12d445f14163f7b7ffdad877e9f733198b904f42d01dd32a25cc4b52f6aac938" }, - "knownTransitions": { - "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 17092846758161066830 + "knownTransitions": [ + { + "opid": "12d445f14163f7b7ffdad877e9f733198b904f42d01dd32a25cc4b52f6aac938", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 9119672638623966453 + }, + "state": 539 }, - "state": 539 - }, - { - "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", - "state": 77 - } - ] - } - }, - "signature": null + { + "seal": "2312d1e66065930131fbaf955acd1bbc9d62de82e81b4da8a0b3f7a7fb8d5a90", + "state": 77 + } + ] + } + }, + "signature": null + } } - } + ] } } ], diff --git a/tests/fixtures/b243f251cd06181c5568e041ed19106512886bf2c8617dfd3bf06c2321c5f8f4.json b/tests/fixtures/b243f251cd06181c5568e041ed19106512886bf2c8617dfd3bf06c2321c5f8f4.json new file mode 100644 index 0000000..47f98aa --- /dev/null +++ b/tests/fixtures/b243f251cd06181c5568e041ed19106512886bf2c8617dfd3bf06c2321c5f8f4.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2:1", + "sigScript": "", + "sequence": 0, + "witness": [ + "3044022053e67d7dffae33f5e239f8d5161db4bf1793039ba17c1883224043bef449ba3f022043ce8e0a662fc1883a1bbb07636cef987b0cddfe13313ebba3c4fec9c27222a201", + "0245c8116b53e8d01ba153028ed0230425801f5209465475902abbdeb5079b7937" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20d87aa6b06a714562dc4e9f5a9e24e6dfda5684d880480ba6f54262702c55a7a5" + }, + { + "value": 99998800, + "scriptPubkey": "001469ade53185b381ac4428fdd0edbca6368403e9d0" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2.json b/tests/fixtures/b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2.json new file mode 100644 index 0000000..b4656dd --- /dev/null +++ b/tests/fixtures/b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "b8880c28cf9163673b7e39f2af6b6fec952425354c17c74b0d5e69d3c467142b:1", + "sigScript": "", + "sequence": 0, + "witness": [ + "3045022100f45a2532bb9c03be0f961be8e471f91b5204380a2994d2399aa150051c734614022013b66870fef6ff683e04cf84b08e6c7ed913c3361aa722e988e9006d207b268301", + "02a0169b1fdae78d33891cadfc82549b9f295e555bf2466f71fc82fd1bd3e5ec25" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a20bc53e837e022ea6083e4ad64efcca8371e031710118834615df7098715cf87a6" + }, + { + "value": 99999200, + "scriptPubkey": "00145c3afeb169a9fa6828c917b6e61ae123951806f4" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/b8880c28cf9163673b7e39f2af6b6fec952425354c17c74b0d5e69d3c467142b.json b/tests/fixtures/b8880c28cf9163673b7e39f2af6b6fec952425354c17c74b0d5e69d3c467142b.json new file mode 100644 index 0000000..a2fee2f --- /dev/null +++ b/tests/fixtures/b8880c28cf9163673b7e39f2af6b6fec952425354c17c74b0d5e69d3c467142b.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "inputs": [ + { + "prevOutput": "4caa17eae3f082765ce50dceaddd4e0ec4cef41d162bd42a3bbbbb076de649a7:1", + "sigScript": "", + "sequence": 0, + "witness": [ + "3045022100cbe68467f587b7988836921e51b054a45b64967fd8bf2f91edb1aef8a6a97b5202202a8806310d4a5a35ca74e0617b2f279bf36feedaa390233f50ea6593445989d501", + "0310a53e3fe344cbd0a2ff08b21a34d4bc05324b97b4173ccf9668a8b774a941ad" + ] + } + ], + "outputs": [ + { + "value": 0, + "scriptPubkey": "6a2004b86f6d44449be00a1b75a13d671ad44da9b388367102b2a6ee668389313b5b" + }, + { + "value": 99999600, + "scriptPubkey": "00148467a4cb9231d8da59df02de1a82ce5761b6d59e" + } + ], + "lockTime": 0 +} \ No newline at end of file diff --git a/tests/fixtures/consignment_A.json b/tests/fixtures/consignment_A.json index 53f58da..ce2cf3d 100644 --- a/tests/fixtures/consignment_A.json +++ b/tests/fixtures/consignment_A.json @@ -2,14 +2,14 @@ "version": "v0", "transfer": true, "terminals": { - "1c49cd66865b0c0fb36b108a8a9ef78c4853d1780c8df74be6b874d866a8d259": [ - "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4" + "f5f7500948a8ae8ad6db4d551c6f317f5c02de23edb07bbff34cea2bfcbe4cb1": [ + "2312d1e66065930131fbaf955acd1bbc9d62de82e81b4da8a0b3f7a7fb8d5a90" ] }, "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1750082151, + "timestamp": 1750883619, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -31,9 +31,9 @@ "items": [ { "seal": { - "txid": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d", + "txid": "4caa17eae3f082765ce50dceaddd4e0ec4cef41d162bd42a3bbbbb076de649a7", "vout": 1, - "blinding": 17368930799645178615 + "blinding": 15882975521680157652 }, "state": 666 } @@ -48,7 +48,7 @@ "version": 2, "inputs": [ { - "prevOutput": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d:1", + "prevOutput": "4caa17eae3f082765ce50dceaddd4e0ec4cef41d162bd42a3bbbbb076de649a7:1", "sigScript": "", "sequence": 0, "witness": [] @@ -57,11 +57,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20afbb69b179dd11fbf97185bc2f7b5f7e6f0fb456f951e8661a6eb186e128e75e" + "scriptPubkey": "6a2004b86f6d44449be00a1b75a13d671ad44da9b388367102b2a6ee668389313b5b" }, { "value": 99999600, - "scriptPubkey": "00145846bfbbad353d01cd5d5e83560e2efdd2d56452" + "scriptPubkey": "00148467a4cb9231d8da59df02de1a82ce5761b6d59e" } ], "lockTime": 0 @@ -69,49 +69,52 @@ }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "5ee0f15a400dae4ddc746e806095c1b91474df8a1343da2ce55d62380bf1c3d9", - "a879d6005973e7fb3f568b0ed57bd1986564c203ac00f46cd6ab13c6adc21a6d", - "589015f185494ef80821f7a7e5c7d5c92f8b14e8f5481486b36099a90a047f3f" + "871af4b1c4ec5ab8d17b6ee08f50ba823f497b3e3e32e8d4ed6171cf101596c5", + "52e4b4229303ac38fcb7258d8bec1c2cf79344c1e80d55b9b3ce4328e5bef1d5", + "f35512c5b4e2cd46bf866036d0778d87d7c74bf460208fa6d08a7a35655c9d69" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0": "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a" + "2e75cd43bb1215c25a059a70231c3d1fc876baedf57b01cad5523ec86becab9c/4000/0": "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0" }, - "knownTransitions": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "d4f618a01a61f7d79a7868fdb00c0261173ac781489e1b51fbb9c86e0f0bf644/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 7971877571019802006 - }, - "state": 666 - } - ] - } - }, - "signature": null + "knownTransitions": [ + { + "opid": "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "2e75cd43bb1215c25a059a70231c3d1fc876baedf57b01cad5523ec86becab9c/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 17454843376278179683 + }, + "state": 666 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -120,7 +123,7 @@ "version": 2, "inputs": [ { - "prevOutput": "fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a:1", + "prevOutput": "b8880c28cf9163673b7e39f2af6b6fec952425354c17c74b0d5e69d3c467142b:1", "sigScript": "", "sequence": 0, "witness": [] @@ -129,11 +132,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20e06482e32ae07581fadf2e176f13ef36ba20388b23bfb7d2c74373427768f0ce" + "scriptPubkey": "6a20bc53e837e022ea6083e4ad64efcca8371e031710118834615df7098715cf87a6" }, { "value": 99999200, - "scriptPubkey": "001497f9d27c5b70df20fba31284a20a3237703e7a28" + "scriptPubkey": "00145c3afeb169a9fa6828c917b6e61ae123951806f4" } ], "lockTime": 0 @@ -141,53 +144,56 @@ }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "579ea3bcf5f5774a45d4183eb78f813eae44a48a53ce886595fa1dd833dd81a3", - "bb864e4d115d69ef5eec733a051a05cb45b10b2401f93a8132b921684f020d83", - "43cb0e739326740d1fa7c46f799b2da9aabbfcbefcc6cb1e97ba51f3ceabe835" + "ca3be1e1847652a7e803f4599f73f1cf200bf05ab9cceda8e30a372c8216fdfe", + "6471737aeb42e46cdcd5d7f57cd56406806d7630938b764c16ba04b547ef3bf4", + "27915b2641c8ad41aa1dd2198c752aa58a84f8d58849f50fba7c8252318a3ea0" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0": "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c" + "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0/4000/0": "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941" }, - "knownTransitions": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "a59ab56d00e11cd0bfe688988ed4926a43af328981b135c72928d54225ffe91a/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 6805042725940518372 + "knownTransitions": [ + { + "opid": "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "7eef21683f363a4204ff35d97261b4cde102930337bb716dff19b1c11bb382a0/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 7476137096582570779 + }, + "state": 616 }, - "state": 616 - }, - { - "seal": "e80aac87a5de6e82e72b235623ba71f22e648f52119151636b7fab2973b075c3", - "state": 50 - } - ] - } - }, - "signature": null + { + "seal": "88a6eddc7feb428eb58fbd64728a33bfdc673f375a57d4bd59371ca92369e40f", + "state": 50 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -196,7 +202,7 @@ "version": 2, "inputs": [ { - "prevOutput": "03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af:1", + "prevOutput": "b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2:1", "sigScript": "", "sequence": 0, "witness": [] @@ -205,11 +211,11 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20c34fd4d6904f730f77fc04563bdbe00a87e8b3b5e023a48d404723499ad128f9" + "scriptPubkey": "6a20d87aa6b06a714562dc4e9f5a9e24e6dfda5684d880480ba6f54262702c55a7a5" }, { "value": 99998800, - "scriptPubkey": "001431daa1eb76ae06bdf507c38f66a633076c57d67f" + "scriptPubkey": "001469ade53185b381ac4428fdd0edbca6368403e9d0" } ], "lockTime": 0 @@ -217,53 +223,56 @@ }, "anchor": { "mpcProof": { - "pos": 2, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "f4da9781d624078ff044ab358ebc9471eb337ae70e9bf13ba85228a426c79845", - "1e1caf6ba626b15450b6dd8034802bcf52c76ac0d151c0e7b970a428e05f3537", - "e4d9405fe6c53fc3d0853cdf14bf017bfa19124e070ff6f41fa981fda0a71cbe" + "a3a23db672daad69d0717c9740d1ffc937f8c95b479340a97a61c2979262a44d", + "ee360ceb6a0a463c92710b7213bbac8e0f3bfc1fafa7ad09fcc4782dff90ea9e", + "2f48a5c7ffff1fc60b698c18224bb847fd603359ecd61852f9b729e6e5bef414" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0": "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2" + "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941/4000/0": "12d445f14163f7b7ffdad877e9f733198b904f42d01dd32a25cc4b52f6aac938" }, - "knownTransitions": { - "b579eef79607efd5831760845bd71395dd98e623e663c2fff69a3f76dff0fbe2": { - "ffv": 0, - "contractId": "rgb:1PYYoBph-99eaeGj-9sAwCYR-c6x4FIn-htR_7nI-bg8L9kQ", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "ab20d14e6fde62c636dcdb64c120914e0bd4935320dae9ea2c881cf7b6414d7c/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 17092846758161066830 + "knownTransitions": [ + { + "opid": "12d445f14163f7b7ffdad877e9f733198b904f42d01dd32a25cc4b52f6aac938", + "transition": { + "ffv": 0, + "contractId": "rgb:LnXNQ7sS-FcJaBZp-wIxw9H8-h2uu31e-wHK1VI_-yGvsq5w", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "2c7cffddfae7bdacb0ef1044a912af88855a443fa9fcd475eab1b90fdb455941/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 9119672638623966453 + }, + "state": 539 }, - "state": 539 - }, - { - "seal": "bc0f86fd47b6c3ba2ed80f6b4087daa800e460dcb1207620da8c7b007d87c8b4", - "state": 77 - } - ] - } - }, - "signature": null + { + "seal": "2312d1e66065930131fbaf955acd1bbc9d62de82e81b4da8a0b3f7a7fb8d5a90", + "state": 77 + } + ] + } + }, + "signature": null + } } - } + ] } } ], @@ -917,4 +926,4 @@ "libs": [] } ] -} +} \ No newline at end of file diff --git a/tests/fixtures/consignment_B.json b/tests/fixtures/consignment_B.json index 0b6bafd..4c3f54d 100644 --- a/tests/fixtures/consignment_B.json +++ b/tests/fixtures/consignment_B.json @@ -5,7 +5,7 @@ "genesis": { "ffv": 0, "schemaId": "rgb:sch:RWhwUfTMpuP2Zfx1~j4nswCANGeJrYOqDcKelaMV4zU#remote-digital-pegasus", - "timestamp": 1750082198, + "timestamp": 1750883671, "issuer": "ssi:anonymous", "chainNet": "bitcoinRegtest", "sealClosingStrategy": "firstOpretOrTapret", @@ -27,9 +27,9 @@ "items": [ { "seal": { - "txid": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad", - "vout": 0, - "blinding": 10573374530598502032 + "txid": "4b8d99de8188a6769987e59faa7cdb70086608a05f38a336549770f047a64701", + "vout": 1, + "blinding": 15971490758955256628 }, "state": 666 } @@ -44,7 +44,7 @@ "version": 2, "inputs": [ { - "prevOutput": "8b5558ad1c23f986c49ab78eb2b21a654023818e9f5632e8e5426951033664ad:0", + "prevOutput": "4b8d99de8188a6769987e59faa7cdb70086608a05f38a336549770f047a64701:1", "sigScript": "", "sequence": 0, "witness": [] @@ -53,15 +53,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20dea2a40094cfa20b69667ea60e367d74c7499a850e526a6723f10d53b321dc68" + "scriptPubkey": "6a204266173b9f445e4e0738d460c90ed778eb152822ad9c14366c7fc07b20fcbcc3" }, { "value": 9000, - "scriptPubkey": "00147d5b9dfd40169ae2ad422b4e493c008531e1e354" + "scriptPubkey": "0014a38ad5e206733b28151e460e383991ffbdbdbfe9" }, { "value": 99990600, - "scriptPubkey": "00142bb4ff18ae28f27004a8ed1f81311c62b383693e" + "scriptPubkey": "00146990e864fee7e996d191cf742d37d80fd47eab2f" } ], "lockTime": 0 @@ -69,50 +69,52 @@ }, "anchor": { "mpcProof": { - "pos": 5, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "029c9b5a1b38839a8e3f4c3e4656cc984ee24c371783f80bbd9f9c3e8dfc64b5", - "570abcf3801f949adcf9660e8970f25c23c01c4ccf4f854e3b6f34683eff7356", - "c877be86fcb8eee14237c23801a1936f1d945efd35e19406e27db39339332a9d", - "73be02b406957e759656f71314bbc88de9e5e95aefb599e7d754241b178f5a2f" + "50d3665113ef6571da5870d08ab7f2fd9a74a8fb8b885d72ba6e27ee443bd1f1", + "28ad1a030ca76f794d62a000e8d68101ed7855fc06ae56e1c10e64814c6dfbeb", + "26fd7ea39c056153b91b556d0a1d2bfd2d99a02d18ffdc5738fc0c565bf5cc56" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0": "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc" + "6ed33f3dc88ef3682ac43fbe1ac4648245130d12fa1ab9f755a3c92f00b0178b/4000/0": "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658" }, - "knownTransitions": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc": { - "ffv": 0, - "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "3062cd144d4390ebf74943babee917bcc25d2c84255326a1254ff6680f2e8ba1/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 2, - "blinding": 10921448307780233921 - }, - "state": 666 - } - ] - } - }, - "signature": null + "knownTransitions": [ + { + "opid": "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658", + "transition": { + "ffv": 0, + "contractId": "rgb:btM~PciO-82gqxD_-_GsRkgk-UTDRL6G-rn3VaPJ-LwCwF4s", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "6ed33f3dc88ef3682ac43fbe1ac4648245130d12fa1ab9f755a3c92f00b0178b/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 2, + "blinding": 5104376770230072053 + }, + "state": 666 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -121,7 +123,7 @@ "version": 2, "inputs": [ { - "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", + "prevOutput": "143b34678a7e3e0d2dbbfbd14c6a163aed89d96e4992374154d3c1b5973a93cd:2", "sigScript": "", "sequence": 0, "witness": [] @@ -130,15 +132,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" + "scriptPubkey": "6a20ec7439f82cb704cdc0e867ec63c6f88ecdb352266915e7b95639b26360ebbb6e" }, { "value": 9000, - "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" + "scriptPubkey": "00142842f7eabee95edda63fefc011bce78c69a9cd1d" }, { "value": 99981200, - "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" + "scriptPubkey": "0014f62a638b6981c9396ea76109aed6ef5f5981a303" } ], "lockTime": 0 @@ -146,58 +148,60 @@ }, "anchor": { "mpcProof": { - "pos": 5, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "a1db8e27bbadfd68526273d5e3e979b535bf25618d7f94e6f9eb242eef4363d6", - "cd0c4c99ed95f98353c9fb6dfefbbaf950c47f9793a492475a0e86a25a3e24e8", - "252d2220fa677dab80828225607dcca0299fd4c158413d9617a86e1865a9a899", - "b3b1ebc38815d42d14ec337aa4a374a7b3ca8697ac3aed970b920cda796dbeee" + "f250b9b3d529f03b634d1b400fcc1c722e3d5da1723e55634d053bf241966f36", + "95b11bf9d3c76e118677fee7ccddb3fb86ccd42c813d254737c3156484b9916f", + "0cc8e38d92681cbfc54e90e42a9ff9e1944b3e2e2caa6fd6b8fa98d865f69811" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0": "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326" + "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658/4000/0": "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a" }, - "knownTransitions": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326": { - "ffv": 0, - "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "e4f2d5332d2d9328f91093f8ae934b04cfd883650305ca1a4078ed4f1c5a0cfc/4000/0" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 17184009278113549158 - }, - "state": 50 - }, - { - "seal": { - "txid": null, - "vout": 2, - "blinding": 8586455737525543612 + "knownTransitions": [ + { + "opid": "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a", + "transition": { + "ffv": 0, + "contractId": "rgb:btM~PciO-82gqxD_-_GsRkgk-UTDRL6G-rn3VaPJ-LwCwF4s", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "31f87d18b87fc70e808bb8043e4cebddc2aa2896b4c4cf407865a38db0257658/4000/0" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 14095570581868621249 + }, + "state": 50 }, - "state": 616 - } - ] - } - }, - "signature": null + { + "seal": { + "txid": null, + "vout": 2, + "blinding": 8503444477660371154 + }, + "state": 616 + } + ] + } + }, + "signature": null + } } - } + ] } }, { @@ -206,7 +210,7 @@ "version": 2, "inputs": [ { - "prevOutput": "e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b:2", + "prevOutput": "84e3ac658455e8969e03ac02dc487c9ccd2fcb10314f9d19b0b223cfb85e7ed3:2", "sigScript": "", "sequence": 0, "witness": [] @@ -215,15 +219,15 @@ "outputs": [ { "value": 0, - "scriptPubkey": "6a201a4972e07fb94cc917608ac75ad2fa39e597bc282b85805b9614afddf3722a27" + "scriptPubkey": "6a20ded4a8d8dba904936aeea30e8bc0ae524b64c3500bc9cfe94895dc77bfde35d9" }, { "value": 9000, - "scriptPubkey": "001438f2c153da59c104d0a1e952f83d55d47cf6e90c" + "scriptPubkey": "0014fe9163be63b335ae4640e5011d610feb791713db" }, { "value": 99971800, - "scriptPubkey": "00144c7194aad4f5781e0f209b6106ba4e124a98194d" + "scriptPubkey": "0014282993ddc2ba6d84598e751a93429395d460c7f9" } ], "lockTime": 0 @@ -231,58 +235,60 @@ }, "anchor": { "mpcProof": { - "pos": 5, - "cofactor": 1, + "pos": 6, + "cofactor": 0, "path": [ - "a3f608fffad58c218fe5ef4a3222d8cdc6082b7b3fd719a78f9ea4c7bfdec65f", - "4fcd85f988d1ef9762402aa4b5951a2ac7c883eb5aead689b81e4541acb74e17", - "cd865a838c57f0f52e52600911dd5a9ec3b71cc5e513e5f0ed70ea13cd1df61b", - "2785f032056d93796e096c52add7f3b1b9ab46a043b6a3c19b0727a71acdc3f2" + "a5b9eb9691493220613a6207567cc40c00b69c960c417b83c63ffe98dd1582cc", + "c91ec5dbc524954e5ec1321bcab56cb1f06c3a6759b5d9ff8560f159f39a8c49", + "061191e16060e63aaf24c4c0e0d4795a5e8762f201ee7745abae967346812236" ] }, "dbcProof": null }, "bundle": { "inputMap": { - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1": "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12" + "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a/4000/1": "21c09f8ead108258bcdf2e7bbb0de231974b351b9cebe69e283beb6a99590628" }, - "knownTransitions": { - "f17dc5f9e94be0e3bc87af403d301225337de16d937a808d47a1db41ddf5fd12": { - "ffv": 0, - "contractId": "rgb:MGLNFE1D-kOv3SUO-6vukXvM-JdLIQlU-yahJU~2-aA8ui6E", - "nonce": 18446744073709551615, - "transitionType": 10000, - "metadata": {}, - "globals": {}, - "inputs": [ - "fd04b192aa6b66fb6bf440820e5bc1325b3912a80dad78f9f468e910c7f1c326/4000/1" - ], - "assignments": { - "4000": { - "type": "fungible", - "items": [ - { - "seal": { - "txid": null, - "vout": 1, - "blinding": 18112855856365951572 - }, - "state": 77 - }, - { - "seal": { - "txid": null, - "vout": 2, - "blinding": 4666323833009824294 + "knownTransitions": [ + { + "opid": "21c09f8ead108258bcdf2e7bbb0de231974b351b9cebe69e283beb6a99590628", + "transition": { + "ffv": 0, + "contractId": "rgb:btM~PciO-82gqxD_-_GsRkgk-UTDRL6G-rn3VaPJ-LwCwF4s", + "nonce": 18446744073709551615, + "transitionType": 10000, + "metadata": {}, + "globals": {}, + "inputs": [ + "348ec8956f9dbf0cc5fb8de31adfb146b6567c1d5ec2abdaff8b203ca0045e1a/4000/1" + ], + "assignments": { + "4000": { + "type": "fungible", + "items": [ + { + "seal": { + "txid": null, + "vout": 1, + "blinding": 2964060174665201768 + }, + "state": 77 }, - "state": 539 - } - ] - } - }, - "signature": null + { + "seal": { + "txid": null, + "vout": 2, + "blinding": 17353984293023054398 + }, + "state": 539 + } + ] + } + }, + "signature": null + } } - } + ] } } ], @@ -936,4 +942,4 @@ "libs": [] } ] -} +} \ No newline at end of file diff --git a/tests/fixtures/e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b.json b/tests/fixtures/e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b.json deleted file mode 100644 index cfaadf2..0000000 --- a/tests/fixtures/e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b:2", - "sigScript": "", - "sequence": 0, - "witness": [ - "3044022014fd49abce6fffdb8e7d90682ef837dffb011a294473c1649705ba1f23f6bd2602202245e6c65baa8befe687439d0f65c8dd4d2401f3c170d1463567da7fce04a32901", - "0270233f5eaa20a7198927f8e987d00cf8de9663ad2b417e4e9254d10b5c1085ee" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20ccf4f5099bc607add7866f9b1ce492c295d3b7f2d18aa79aa1204023fd93e074" - }, - { - "value": 9000, - "scriptPubkey": "0014e2254c8dd3c1b7bba29affbee5b9beb1250aa6aa" - }, - { - "value": 99981200, - "scriptPubkey": "00146390472a5f8d0b245078ff0e9dd3296aef6e608d" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/fixtures/fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a.json b/tests/fixtures/fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a.json deleted file mode 100644 index afde9c0..0000000 --- a/tests/fixtures/fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 2, - "inputs": [ - { - "prevOutput": "b6fe2469d3df87e60ea761c358dfe7d8774d247cd0c87ab5722f9d09c00a9c9d:1", - "sigScript": "", - "sequence": 0, - "witness": [ - "3045022100c845ac704b40941bfd4a51190b41f7e5ce96de259887e0e6c51927b70726c1e4022054092ecb5f746a463bbf2a574cbc9d846660ac41437e1bd24be36ed721131deb01", - "03104d83efc106253ecc6cc7060ac3e7d8fdf57f99dacf2da291c75509ae2cfb6c" - ] - } - ], - "outputs": [ - { - "value": 0, - "scriptPubkey": "6a20afbb69b179dd11fbf97185bc2f7b5f7e6f0fb456f951e8661a6eb186e128e75e" - }, - { - "value": 99999600, - "scriptPubkey": "00145846bfbbad353d01cd5d5e83560e2efdd2d56452" - } - ], - "lockTime": 0 -} \ No newline at end of file diff --git a/tests/transfers.rs b/tests/transfers.rs index 52bacd4..4aa7b2d 100644 --- a/tests/transfers.rs +++ b/tests/transfers.rs @@ -1895,10 +1895,10 @@ fn extra_known_transition() { new_bundle .bundle .known_transitions - .insert(new_opid, new_transition) + .push(KnownTransition::new(new_opid, new_transition)) .unwrap(); assert_eq!(bundle_id, new_bundle.bundle.bundle_id()); - assert!(new_bundle.bundle.known_transitions.contains_key(&new_opid)); + assert!(new_bundle.bundle.known_transitions_contain_opid(&new_opid)); new_consignment.bundles = LargeVec::from_checked(bundles); wlt_2.accept_transfer(new_consignment, None); @@ -1948,9 +1948,9 @@ fn uncommitted_input_opout() { let contract_id = witness_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .contract_id; let protocol_id = mpc::ProtocolId::from(contract_id); let message = mpc::Message::from(witness_bundle.bundle.bundle_id()); @@ -2136,7 +2136,7 @@ fn concealed_known_transition() { .iter() .find(|wb| wb.bundle.input_map_opids().contains(&opid_2)) .unwrap(); - assert!(!bundle.bundle.known_transitions.contains_key(&opid_2)); + assert!(!bundle.bundle.known_transitions_contain_opid(&opid_2)); wlt_2.accept_transfer(consignment, None); } @@ -2288,7 +2288,15 @@ fn accept_bundle_missing_transitions() { .unwrap() .clone(); let bundle_id = new_bundle.bundle.bundle_id(); - new_bundle.bundle.known_transitions.remove(&opid_2).unwrap(); + new_bundle.bundle.known_transitions = Confined::from_checked( + new_bundle + .bundle + .known_transitions + .to_unconfined() + .into_iter() + .filter(|kt| kt.opid != opid_2) + .collect(), + ); consignment_1.bundles = LargeVec::from_iter_checked( consignment .bundled_witnesses() @@ -2319,7 +2327,15 @@ fn accept_bundle_missing_transitions() { .unwrap() .clone(); let bundle_id = new_bundle.bundle.bundle_id(); - new_bundle.bundle.known_transitions.remove(&opid_1).unwrap(); + new_bundle.bundle.known_transitions = Confined::from_checked( + new_bundle + .bundle + .known_transitions + .to_unconfined() + .into_iter() + .filter(|kt| kt.opid != opid_1) + .collect(), + ); consignment_2.bundles = LargeVec::from_iter_checked( consignment .bundled_witnesses() diff --git a/tests/utils/helpers.rs b/tests/utils/helpers.rs index 0509dc1..94a9e48 100644 --- a/tests/utils/helpers.rs +++ b/tests/utils/helpers.rs @@ -1574,8 +1574,10 @@ impl TestWallet { secret_key: SecretKey, ) { let transition_signer = |witness_bundle: &mut WitnessBundle| { - for transition in witness_bundle.bundle_mut().known_transitions.values_mut() { - let transition_id: [u8; 32] = transition.id().as_ref().into_inner(); + for KnownTransition { opid, transition } in + witness_bundle.bundle_mut().known_transitions.iter_mut() + { + let transition_id: [u8; 32] = opid.as_ref().into_inner(); let msg = Message::from_digest(transition_id); let signature = secret_key.sign_ecdsa(msg); transition.signature = @@ -1725,7 +1727,7 @@ impl TestWallet { let all_opids = consignment .bundles .iter() - .flat_map(|b| b.bundle().known_transitions.keys().copied()) + .flat_map(|b| b.bundle().known_transitions_opids()) .collect::>(); let validated_consignment = consignment .clone() diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs index a3d91c7..1d8b8a2 100644 --- a/tests/utils/mod.rs +++ b/tests/utils/mod.rs @@ -81,7 +81,7 @@ pub use psbt::{ #[cfg(not(feature = "altered"))] pub use psrgbt::{RgbExt, RgbPsbt, TxParams}; #[cfg(feature = "altered")] -pub use psrgbt_altered::{RgbExt, RgbInExt, RgbPsbt, TxParams}; +pub use psrgbt_altered::{RgbExt, RgbPsbt, TxParams}; pub use rand::RngCore; #[cfg(not(feature = "altered"))] pub use rgb::{ @@ -96,10 +96,10 @@ pub use rgb::{ validation::{Failure, ResolveWitness, Scripts, Validity, Warning, WitnessResolverError}, vm::{WitnessOrd, WitnessPos}, Assign, AssignmentDetails, AssignmentType, BundleId, DescriptorRgb, FungibleState, GenesisSeal, - GlobalDetails, GlobalStateSchema, GraphSeal, Identity, MetaDetails, MetaType, MetaValue, - Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, RevealedValue, - RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, Transition, - TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, + GlobalDetails, GlobalStateSchema, GraphSeal, Identity, KnownTransition, MetaDetails, MetaType, + MetaValue, Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, + RevealedValue, RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, + Transition, TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, }; #[cfg(feature = "altered")] pub use rgb_altered::{ @@ -114,10 +114,10 @@ pub use rgb_altered::{ validation::{Failure, ResolveWitness, Scripts, Validity, Warning, WitnessResolverError}, vm::{WitnessOrd, WitnessPos}, Assign, AssignmentDetails, AssignmentType, BundleId, DescriptorRgb, FungibleState, GenesisSeal, - GlobalDetails, GlobalStateSchema, GraphSeal, Identity, MetaDetails, MetaType, MetaValue, - Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, RevealedValue, - RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, Transition, - TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, + GlobalDetails, GlobalStateSchema, GraphSeal, Identity, KnownTransition, MetaDetails, MetaType, + MetaValue, Occurrences, OccurrencesMismatch, OpId, Opout, OwnedStateSchema, RevealedData, + RevealedValue, RgbDescr, RgbKeychain, RgbWallet, StateType, TapretKey, TransferParams, + Transition, TransitionBundle, TransitionType, TypedAssigns, VoidState, WalletProvider, }; pub use rgbstd::{ containers::{ diff --git a/tests/validation.rs b/tests/validation.rs index 316456c..131e59f 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -82,11 +82,11 @@ impl Scenario { match self { Self::A => { let (tx_1, witness_id_1) = - get_tx("fcaafcb1b71fb036f71cb0de75bbcacd9393c00436b9678b21a453ef0654a26a"); + get_tx("b8880c28cf9163673b7e39f2af6b6fec952425354c17c74b0d5e69d3c467142b"); let (tx_2, witness_id_2) = - get_tx("03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af"); + get_tx("b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2"); let (tx_3, witness_id_3) = - get_tx("0f8f09b5898c6f0c16ffaf4f10d87d67577578d443ba1f17e73196e8d13bf16a"); + get_tx("b243f251cd06181c5568e041ed19106512886bf2c8617dfd3bf06c2321c5f8f4"); MockResolver { pub_witnesses: map![ witness_id_1 => MockResolvePubWitness::Success(tx_1), @@ -102,11 +102,11 @@ impl Scenario { } Self::B => { let (tx_1, witness_id_1) = - get_tx("abf5f7542bab59ad7cba5bf03610a55f305e8e09f8b0d0149dd47d088581289b"); + get_tx("143b34678a7e3e0d2dbbfbd14c6a163aed89d96e4992374154d3c1b5973a93cd"); let (tx_2, witness_id_2) = - get_tx("e290aa39c743abe64d767521761ce29aeec0e937b2e9d83b8a3f5d51b2fdfa3b"); + get_tx("84e3ac658455e8969e03ac02dc487c9ccd2fcb10314f9d19b0b223cfb85e7ed3"); let (tx_3, witness_id_3) = - get_tx("5599bb3c61fad724e71ce1ed10d719d697d72ff18693bd8cefbb37f8a585808c"); + get_tx("333b0aea5cbf230791c57814de6dd86340e2626c1c1e8ac462f4f73c2645682c"); MockResolver { pub_witnesses: map![ witness_id_1 => MockResolvePubWitness::Success(tx_1), @@ -129,20 +129,32 @@ fn replace_transition_in_bundle( old_opid: OpId, transition: Transition, ) { - let mut known_transitions = witness_bundle.bundle.known_transitions.clone().release(); - known_transitions.remove(&old_opid); + let mut known_transitions = witness_bundle + .bundle + .known_transitions + .clone() + .into_iter() + .filter(|kt| kt.opid != old_opid) + .collect::>(); let transition_id = transition.id(); - known_transitions.insert(transition_id, transition.clone()); - let mut input_map = BTreeMap::::new(); - for (opout, mut opid) in witness_bundle.bundle.input_map.clone().into_iter() { - if opid == old_opid { - opid = transition_id; - } - input_map.insert(opout, opid); - } + known_transitions.push(KnownTransition::new(transition_id, transition.clone())); + let input_map = witness_bundle + .bundle + .input_map + .clone() + .into_iter() + .map(|(opout, opid)| { + let new_opid = if opid == old_opid { + transition_id + } else { + opid + }; + (opout, new_opid) + }) + .collect(); let bundle = TransitionBundle { input_map: NonEmptyOrdMap::from_checked(input_map), - known_transitions: NonEmptyOrdMap::from_checked(known_transitions), + known_transitions: NonEmptyVec::from_checked(known_transitions), }; witness_bundle.bundle = bundle; update_witness_and_anchor(witness_bundle, None) @@ -159,9 +171,9 @@ fn update_witness_and_anchor(witness_bundle: &mut WitnessBundle, contract_id: Op witness_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .contract_id, ); let protocol_id = mpc::ProtocolId::from(contract_id); @@ -412,7 +424,7 @@ fn validate_consignment_resolver_error() { let base_resolver = scenario.resolver(); let consignment = get_consignment_from_json("attack_resolver_error"); let txid = - Txid::from_str("03b79c21039c940ca58ef501e52030e9cc243fa34331564c250252570ec0b8af").unwrap(); + Txid::from_str("b411d8dd37353d243a527739fdc39cca22dbfe4fe92517ce16a33563803c5ad2").unwrap(); let wbundle = consignment .bundles .iter() @@ -669,15 +681,16 @@ fn validate_consignment_commitments_fail() { let mut transition = new_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); transition.nonce -= 1; + new_bundle .bundle .known_transitions - .insert(transition.id(), transition) + .push(KnownTransition::new(transition.id(), transition)) .unwrap(); consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); @@ -692,8 +705,8 @@ fn validate_consignment_commitments_fail() { let spent_transitions = consignment .bundles .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) + .flat_map(|b| b.bundle.known_transitions.as_unconfined()) + .flat_map(|kt| kt.transition.inputs.iter()) .map(|ti| ti.op) .collect::>(); let bundle_id_to_remove = consignment @@ -703,7 +716,7 @@ fn validate_consignment_commitments_fail() { .find(|b| { spent_transitions .iter() - .any(|st| b.known_transitions.contains_key(st)) + .any(|st| b.known_transitions_contain_opid(st)) }) .unwrap() .bundle_id(); @@ -728,9 +741,9 @@ fn validate_consignment_commitments_fail() { let mut transition = new_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); let fst_input = *transition.inputs.as_unconfined().first().unwrap(); transition @@ -743,8 +756,9 @@ fn validate_consignment_commitments_fail() { new_bundle .bundle .known_transitions - .insert(transition.id(), transition) + .push(KnownTransition::new(transition.id(), transition)) .unwrap(); + consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; @@ -765,9 +779,9 @@ fn validate_consignment_commitments_fail() { let mut transition = new_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); let fst_input = *transition.inputs.as_unconfined().first().unwrap(); transition @@ -780,7 +794,7 @@ fn validate_consignment_commitments_fail() { new_bundle .bundle .known_transitions - .insert(transition.id(), transition) + .push(KnownTransition::new(transition.id(), transition)) .unwrap(); consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); @@ -795,8 +809,8 @@ fn validate_consignment_commitments_fail() { let spent_transitions = consignment .bundles .iter() - .flat_map(|b| b.bundle.known_transitions.values()) - .flat_map(|t| t.inputs.iter()) + .flat_map(|b| b.bundle.known_transitions.as_unconfined()) + .flat_map(|kt| kt.transition.inputs.iter()) .map(|ti| ti.op) .collect::>(); let mut bundles = consignment.bundles.release().clone(); @@ -805,14 +819,14 @@ fn validate_consignment_commitments_fail() { .find(|wb| { spent_transitions .iter() - .any(|st| wb.bundle.known_transitions.contains_key(st)) + .any(|st| wb.bundle.known_transitions_contain_opid(st)) }) .unwrap(); - let mut transitions = new_bundle.clone().bundle.known_transitions.release(); - let (_, mut transition) = transitions - .clone() - .into_iter() - .find(|(id, _)| spent_transitions.contains(id)) + let mut transitions = new_bundle.clone().bundle.known_transitions; + let transition = transitions + .iter_mut() + .find(|kt| spent_transitions.contains(&kt.opid)) + .map(|kt| &mut kt.transition) .unwrap(); let assignments = transition .assignments @@ -835,8 +849,7 @@ fn validate_consignment_commitments_fail() { .assignments .insert(AssignmentType::ASSET, assignments) .unwrap(); - transitions.insert(transition.id(), transition).unwrap(); - new_bundle.bundle.known_transitions = NonEmptyOrdMap::from_checked(transitions); + new_bundle.bundle.known_transitions = transitions; consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; @@ -852,13 +865,13 @@ fn validate_consignment_commitments_fail() { let mut transition = new_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); transition.nonce -= 1; new_bundle.bundle.known_transitions = - NonEmptyOrdMap::from_checked(bmap! {transition.id() => transition}); + NonEmptyVec::from_checked(vec![KnownTransition::new(transition.id(), transition)]); consignment.bundles = LargeVec::from_checked(bundles); let res = consignment.validate(&resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; @@ -901,9 +914,9 @@ fn validate_consignment_logic_fail() { let mut transition = witness_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); let old_opid = transition.id(); transition.transition_type = TransitionType::with(42); @@ -928,9 +941,9 @@ fn validate_consignment_logic_fail() { let mut transition = witness_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); let old_opid = transition.id(); transition @@ -958,9 +971,9 @@ fn validate_consignment_logic_fail() { let mut transition = witness_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); let old_opid = transition.id(); transition @@ -988,9 +1001,9 @@ fn validate_consignment_logic_fail() { let mut transition = witness_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); let old_opid = transition.id(); transition @@ -1018,9 +1031,9 @@ fn validate_consignment_logic_fail() { let mut transition = witness_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); let old_opid = transition.id(); transition.assignments = SmallOrdMap::new().into(); @@ -1052,9 +1065,9 @@ fn validate_consignment_logic_fail() { let mut transition = witness_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); let old_opid = transition.id(); let assignment_type = AssignmentType::with(4000); @@ -1096,9 +1109,9 @@ fn validate_consignment_logic_fail() { let mut transition = witness_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); let old_opid = transition.id(); let assignment_type = AssignmentType::with(4000); @@ -1144,9 +1157,9 @@ fn validate_consignment_logic_fail() { let mut transition = witness_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .clone(); let old_opid = transition.id(); let old_contract_id = transition.contract_id; @@ -1182,25 +1195,29 @@ fn validate_consignment_unmatching_transition_id() { let contract_id = witness_bundle .bundle .known_transitions - .values() .last() .unwrap() + .transition .contract_id; let mut other_wbundle = witness_bundle.clone(); - let (&opid, transition) = witness_bundle + let KnownTransition { opid, transition } = witness_bundle .bundle .known_transitions - .last_key_value() - .unwrap(); + .last() + .unwrap() + .clone(); // modified transition lies in witness_bundle, but is committed to in other_bundle let mut transition = transition.clone(); transition.nonce -= 1; - witness_bundle + if let Some(existing) = witness_bundle .bundle .known_transitions - .insert(opid, transition.clone()) - .unwrap(); + .iter_mut() + .find(|kt| kt.opid == opid) + { + existing.transition = transition.clone(); + } let dumb_transition = Transition::strict_dumb(); let dumb_id = dumb_transition.id(); @@ -1208,7 +1225,7 @@ fn validate_consignment_unmatching_transition_id() { // we have no free allocations for a meaningful transition so it is a dumb one // which causes OperationAbsent(OpId(0000000000000000000000000000000000000000000000000000000000000000)) other_wbundle.bundle.known_transitions = - NonEmptyOrdMap::with_key_value(dumb_id, dumb_transition); + NonEmptyVec::with(KnownTransition::new(dumb_id, dumb_transition)); other_wbundle .bundle .input_map From 12f3bda75e7346089d8cbec6cf04a7c5e258032e Mon Sep 17 00:00:00 2001 From: step Date: Mon, 30 Jun 2025 21:26:34 +0200 Subject: [PATCH 20/22] add test case for 0-amt allocations --- tests/utils/mod.rs | 2 +- tests/validation.rs | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs index 1d8b8a2..21b34eb 100644 --- a/tests/utils/mod.rs +++ b/tests/utils/mod.rs @@ -144,7 +144,7 @@ pub use rstest::rstest; pub use schemata::{ CollectibleFungibleAsset, InflatableFungibleAsset, NonInflatableAsset, PermissionedFungibleAsset, UniqueDigitalAsset, CFA_SCHEMA_ID, IFA_SCHEMA_ID, NIA_SCHEMA_ID, - PFA_SCHEMA_ID, UDA_SCHEMA_ID, + OS_ASSET, PFA_SCHEMA_ID, UDA_SCHEMA_ID, }; pub use serial_test::serial; pub use strict_encoding::{fname, tn, FieldName, StrictSerialize, TypeName}; diff --git a/tests/validation.rs b/tests/validation.rs index 131e59f..20fab7a 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -1179,6 +1179,40 @@ fn validate_consignment_logic_fail() { failures[0], Failure::ContractMismatch(transition_id, ContractId::strict_dumb()) ); + + // Error: zero-amount allocations are not allowed + let mut consignment = base_consignment.clone(); + let mut bundles = consignment.bundles.release(); + let mut witness_bundle = bundles.last_mut().unwrap(); + let mut transition = witness_bundle + .bundle + .known_transitions + .last() + .unwrap() + .transition + .clone(); + let old_opid = transition.id(); + if let TypedAssigns::Fungible(assign) = transition.assignments.get_mut(&OS_ASSET).unwrap() { + assign + .push(Assign::ConfidentialSeal { + seal: SecretSeal::strict_dumb(), + state: RevealedValue::new(Amount::ZERO), + }) + .unwrap(); + } else { + panic!("unexpected asssignment type") + }; + let opid = transition.id(); + assert_ne!(opid, old_opid); + replace_transition_in_bundle(&mut witness_bundle, old_opid, transition); + let alt_resolver = + resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); + consignment.bundles = LargeVec::from_checked(bundles); + let res = consignment + .validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let failures = res.unwrap_err().failures; + assert_eq!(failures.len(), 1); + assert_eq!(failures[0], Failure::ScriptFailure(opid, Some(0), None)); } #[cfg(not(feature = "altered"))] From 55ba57757ed6544ea9565b164ed4cad8a214f495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Mon, 30 Jun 2025 22:01:23 +0200 Subject: [PATCH 21/22] update rgb-core submodule (prevent 0-amt outputs in svs) --- rgb-core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rgb-core b/rgb-core index dcd9d92..732baf7 160000 --- a/rgb-core +++ b/rgb-core @@ -1 +1 @@ -Subproject commit dcd9d92072b8136149bc892589acb39ec3ba83db +Subproject commit 732baf7a74f15f5ca7633642a6e8fe40661375ce From 420d4c98a7af40620e093ab7edf98885cbec4c0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zoe=20Faltib=C3=A0?= Date: Mon, 30 Jun 2025 22:06:03 +0200 Subject: [PATCH 22/22] lint code with rust 1.88.0 --- tests/stress.rs | 2 +- tests/utils/chain.rs | 2 +- tests/utils/helpers.rs | 6 +++--- tests/validation.rs | 9 ++++----- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/tests/stress.rs b/tests/stress.rs index c46d473..5555c68 100644 --- a/tests/stress.rs +++ b/tests/stress.rs @@ -91,5 +91,5 @@ fn back_and_forth( report.end_line(); } let elapsed = now.elapsed(); - println!("elapsed: {:.2?}", elapsed); + println!("elapsed: {elapsed:.2?}"); } diff --git a/tests/utils/chain.rs b/tests/utils/chain.rs index 7a214a6..24a29b7 100644 --- a/tests/utils/chain.rs +++ b/tests/utils/chain.rs @@ -13,7 +13,7 @@ pub enum Indexer { impl fmt::Display for Indexer { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", format!("{:?}", self).to_lowercase()) + write!(f, "{}", format!("{self:?}").to_lowercase()) } } diff --git a/tests/utils/helpers.rs b/tests/utils/helpers.rs index 94a9e48..129d1f4 100644 --- a/tests/utils/helpers.rs +++ b/tests/utils/helpers.rs @@ -79,7 +79,7 @@ pub enum DescriptorType { impl fmt::Display for DescriptorType { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", format!("{:?}", self).to_lowercase()) + write!(f, "{}", format!("{self:?}").to_lowercase()) } } @@ -104,7 +104,7 @@ pub enum TransferType { impl fmt::Display for TransferType { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", format!("{:?}", self).to_lowercase()) + write!(f, "{}", format!("{self:?}").to_lowercase()) } } @@ -159,7 +159,7 @@ pub enum AssetSchema { impl fmt::Display for AssetSchema { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", format!("{:?}", self).to_lowercase()) + write!(f, "{}", format!("{self:?}").to_lowercase()) } } diff --git a/tests/validation.rs b/tests/validation.rs index 20fab7a..c6233bc 100644 --- a/tests/validation.rs +++ b/tests/validation.rs @@ -73,7 +73,7 @@ enum Scenario { impl fmt::Display for Scenario { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{:?}", self) + write!(f, "{self:?}") } } @@ -1183,7 +1183,7 @@ fn validate_consignment_logic_fail() { // Error: zero-amount allocations are not allowed let mut consignment = base_consignment.clone(); let mut bundles = consignment.bundles.release(); - let mut witness_bundle = bundles.last_mut().unwrap(); + let witness_bundle = bundles.last_mut().unwrap(); let mut transition = witness_bundle .bundle .known_transitions @@ -1204,12 +1204,11 @@ fn validate_consignment_logic_fail() { }; let opid = transition.id(); assert_ne!(opid, old_opid); - replace_transition_in_bundle(&mut witness_bundle, old_opid, transition); + replace_transition_in_bundle(witness_bundle, old_opid, transition); let alt_resolver = resolver.with_new_transaction(witness_bundle.pub_witness.tx().unwrap().clone()); consignment.bundles = LargeVec::from_checked(bundles); - let res = consignment - .validate(&alt_resolver, ChainNet::BitcoinRegtest, None); + let res = consignment.validate(&alt_resolver, ChainNet::BitcoinRegtest, None); let failures = res.unwrap_err().failures; assert_eq!(failures.len(), 1); assert_eq!(failures[0], Failure::ScriptFailure(opid, Some(0), None));