diff --git a/Cargo.lock b/Cargo.lock index 2e3014dd..1778b43b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1125,8 +1125,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rgb-core" version = "0.11.1-alpha.3+unreviewed" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee6739c9704151ca82f9346f73b1d80189637c8291565866fee6859511e2008" +source = "git+https://github.com/zoedberg/rgb-core?branch=0.11.1-4#dcd9d92072b8136149bc892589acb39ec3ba83db" dependencies = [ "aluvm", "amplify", diff --git a/Cargo.toml b/Cargo.toml index 853bd336..1cc8a085 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -105,3 +105,6 @@ wasm-bindgen-test = "0.3" [package.metadata.docs.rs] features = ["all"] + +[patch.crates-io] +rgb-core = { git = "https://github.com/zoedberg/rgb-core", branch = "0.11.1-4" } diff --git a/invoice/src/parse.rs b/invoice/src/parse.rs index c4d66370..9ad24697 100644 --- a/invoice/src/parse.rs +++ b/invoice/src/parse.rs @@ -161,15 +161,15 @@ impl Display for RgbTransport { match self { RgbTransport::JsonRpc { tls, host } => { let s = if *tls { "s" } else { "" }; - write!(f, "rpc{s}{TRANSPORT_HOST_SEP}{}", host)?; + write!(f, "rpc{s}{TRANSPORT_HOST_SEP}{host}")?; } RgbTransport::RestHttp { tls, host } => { let s = if *tls { "s" } else { "" }; - write!(f, "http{s}{TRANSPORT_HOST_SEP}{}", host)?; + write!(f, "http{s}{TRANSPORT_HOST_SEP}{host}")?; } RgbTransport::WebSockets { tls, host } => { let s = if *tls { "s" } else { "" }; - write!(f, "ws{s}{TRANSPORT_HOST_SEP}{}", host)?; + write!(f, "ws{s}{TRANSPORT_HOST_SEP}{host}")?; } RgbTransport::Storm {} => { write!(f, "storm{TRANSPORT_HOST_SEP}_/")?; diff --git a/src/containers/consignment.rs b/src/containers/consignment.rs index 5d9781ce..704e8eba 100644 --- a/src/containers/consignment.rs +++ b/src/containers/consignment.rs @@ -27,7 +27,7 @@ use std::ops::Deref; use std::str::FromStr; use aluvm::library::Lib; -use amplify::confinement::{Confined, LargeOrdSet, SmallOrdMap, SmallOrdSet}; +use amplify::confinement::{Confined, LargeVec, SmallOrdMap, SmallOrdSet}; use amplify::{ByteArray, Bytes32}; use armor::{ArmorHeader, AsciiArmor, StrictArmor, StrictArmorError}; use baid64::{Baid64ParseError, DisplayBaid64, FromBaid64Str}; @@ -185,7 +185,7 @@ pub struct Consignment { /// All bundled state transitions contained in the consignment, together /// with their witness data. - pub bundles: LargeOrdSet, + pub bundles: LargeVec, /// Schema (plus root schema, if any) under which contract is issued. pub schema: Schema, @@ -210,7 +210,7 @@ impl CommitEncode for Consignment { e.commit_to_serialized(&self.contract_id()); e.commit_to_serialized(&self.genesis.disclose_hash()); - e.commit_to_set(&LargeOrdSet::from_iter_checked( + e.commit_to_list(&LargeVec::from_iter_checked( self.bundles.iter().map(WitnessBundle::commit_id), )); e.commit_to_map(&self.terminals); @@ -249,7 +249,7 @@ impl Consignment { f: impl Fn(SecretSeal) -> Result, E>, ) -> Result { // We need to clone since ordered set does not allow us to mutate members. - let mut bundles = LargeOrdSet::with_capacity(self.bundles.len()); + let mut bundles = LargeVec::with_capacity(self.bundles.len()); for mut witness_bundle in self.bundles { for (bundle_id, secrets) in &self.terminals { for secret in secrets { @@ -280,8 +280,14 @@ impl Consignment { pub fn replace_transitions_input_ops(&self) -> BTreeSet { self.bundles .iter() - .flat_map(|b| b.bundle().known_transitions.values()) - .filter(|t| t.transition_type.is_replace()) + .flat_map(|b| b.bundle().known_transitions.as_unconfined()) + .filter_map(|kt| { + if kt.transition.transition_type.is_replace() { + Some(&kt.transition) + } else { + None + } + }) .flat_map(|t| t.inputs.iter()) .filter(|i| i.ty.is_asset()) .map(|i| i.op) @@ -343,7 +349,7 @@ impl Consignment { pub fn modify_bundle(&mut self, witness_id: Txid, modifier: F) -> bool where F: Fn(&mut WitnessBundle) { let mut found = false; - let mut modified_bundles = BTreeSet::new(); + let mut modified_bundles = Vec::new(); let bundles: Vec<_> = self.bundles.iter().cloned().collect(); @@ -351,10 +357,10 @@ impl Consignment { if bundle.witness_id() == witness_id { let mut modified_bundle = bundle.clone(); modifier(&mut modified_bundle); - modified_bundles.insert(modified_bundle); + modified_bundles.push(modified_bundle); found = true; } else { - modified_bundles.insert(bundle); + modified_bundles.push(bundle); } } diff --git a/src/containers/indexed.rs b/src/containers/indexed.rs index 4e6db785..b86540da 100644 --- a/src/containers/indexed.rs +++ b/src/containers/indexed.rs @@ -63,9 +63,9 @@ impl<'c, const TRANSFER: bool> IndexedConsignment<'c, TRANSFER> { let bundle_id = bundle.bundle_id(); bundle_idx.insert(bundle_id, bundle); anchor_idx.insert(bundle_id, (witness_id, anchor)); - for opid in bundle.known_transitions.keys() { - op_witness_idx.insert(*opid, witness_id); - op_bundle_idx.insert(*opid, bundle_id); + for opid in bundle.known_transitions_opids() { + op_witness_idx.insert(opid, witness_id); + op_bundle_idx.insert(opid, bundle_id); } } let scripts = Scripts::from_iter_checked( @@ -89,7 +89,7 @@ impl<'c, const TRANSFER: bool> IndexedConsignment<'c, TRANSFER> { self.op_bundle_idx .get(&opid) .and_then(|id| self.bundle_idx.get(id)) - .and_then(|bundle| bundle.known_transitions.get(&opid)) + .and_then(|bundle| bundle.get_transition(opid)) } pub fn pub_witness(&self, id: Txid) -> Option<&PubWitness> { @@ -113,6 +113,14 @@ impl ConsignmentApi for IndexedConsignment<'_, TRANSFER> { fn genesis(&self) -> &Genesis { &self.genesis } + fn bundles<'iter>(&self) -> impl Iterator + 'iter { + self.consignment + .bundles + .clone() + .into_iter() + .map(|wb| wb.bundle) + } + fn bundle_ids<'iter>(&self) -> impl Iterator + 'iter { self.bundle_idx .keys() diff --git a/src/containers/mod.rs b/src/containers/mod.rs index cf996322..1404daa2 100644 --- a/src/containers/mod.rs +++ b/src/containers/mod.rs @@ -40,7 +40,7 @@ pub use consignment::{ pub use file::{FileContent, LoadError, UniversalFile}; pub use indexed::IndexedConsignment; pub use kit::{Kit, KitId, ValidKit}; -pub use partials::{Batch, Fascia, TransitionInfo, TransitionInfoError}; +pub use partials::{Batch, Fascia}; pub use seal::{BuilderSeal, VoutSeal}; pub use util::{ContainerVer, SecretSeals}; diff --git a/src/containers/partials.rs b/src/containers/partials.rs index c5a22ff8..94974e6c 100644 --- a/src/containers/partials.rs +++ b/src/containers/partials.rs @@ -19,13 +19,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::cmp::Ordering; -use std::collections::BTreeSet; -use std::hash::{Hash, Hasher}; - use amplify::confinement::{Confined, NonEmptyOrdMap, U24}; -use bp::Outpoint; -use rgb::{ContractId, OpId, Operation, OutputSeal, Transition, TransitionBundle, Txid}; +use rgb::{ContractId, Transition, TransitionBundle, Txid}; use strict_encoding::{ StrictDecode, StrictDeserialize, StrictDumb, StrictEncode, StrictSerialize, StrictType, }; @@ -33,71 +28,6 @@ use strict_encoding::{ use super::SealWitness; use crate::LIB_NAME_RGB_STD; -#[derive(Clone, Eq, Debug)] -#[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB_STD)] -#[cfg_attr( - feature = "serde", - derive(Serialize, Deserialize), - serde(crate = "serde_crate", rename_all = "camelCase") -)] -pub struct TransitionInfo { - pub id: OpId, - pub inputs: Confined, 1, U24>, - pub transition: Transition, -} - -impl StrictDumb for TransitionInfo { - fn strict_dumb() -> Self { Self::new(strict_dumb!(), [strict_dumb!()]).unwrap() } -} - -impl PartialEq for TransitionInfo { - fn eq(&self, other: &Self) -> bool { self.id.eq(&other.id) } -} - -impl Ord for TransitionInfo { - fn cmp(&self, other: &Self) -> Ordering { self.id.cmp(&other.id) } -} - -impl PartialOrd for TransitionInfo { - fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } -} - -impl Hash for TransitionInfo { - fn hash(&self, state: &mut H) { state.write(self.id.as_slice()) } -} - -impl TransitionInfo { - /// # Panics - /// - /// If the number of provided seals is zero. - pub fn new( - transition: Transition, - seals: impl AsRef<[OutputSeal]>, - ) -> Result { - let id = transition.id(); - let seals = seals.as_ref(); - assert!(!seals.is_empty(), "empty seals provided to transition info constructor"); - let inputs = Confined::, 1, U24>::try_from_iter( - seals.iter().copied().map(Outpoint::from), - ) - .map_err(|_| TransitionInfoError::TooMany(id))?; - Ok(TransitionInfo { - id, - inputs, - transition, - }) - } -} - -#[derive(Copy, Clone, Eq, PartialEq, Debug, Display, Error)] -#[display(doc_comments)] -pub enum TransitionInfoError { - /// the operation produces too many state transitions which can't fit the - /// container requirements. - TooMany(OpId), -} - /// A batch of state transitions under different contracts which are associated /// with some specific transfer and will be anchored within a single layer 1 /// transaction. @@ -110,15 +40,15 @@ pub enum TransitionInfoError { serde(crate = "serde_crate", rename_all = "camelCase") )] pub struct Batch { - pub main: TransitionInfo, - pub extras: Confined, 0, { U24 - 1 }>, + pub main: Transition, + pub extras: Confined, 0, { U24 - 1 }>, } impl StrictSerialize for Batch {} impl StrictDeserialize for Batch {} impl IntoIterator for Batch { - type Item = TransitionInfo; + type Item = Transition; type IntoIter = std::vec::IntoIter; fn into_iter(self) -> Self::IntoIter { @@ -130,9 +60,9 @@ impl IntoIterator for Batch { impl Batch { pub fn set_priority(&mut self, priority: u64) { - self.main.transition.nonce = priority; - for info in &mut self.extras { - info.transition.nonce = priority; + self.main.nonce = priority; + for transition in &mut self.extras { + transition.nonce = priority; } } } diff --git a/src/contract/merge_reveal.rs b/src/contract/merge_reveal.rs index 3d4a64e0..95959a9d 100644 --- a/src/contract/merge_reveal.rs +++ b/src/contract/merge_reveal.rs @@ -139,9 +139,11 @@ impl MergeReveal for TransitionBundle { debug_assert_eq!(self.bundle_id(), other.bundle_id()); let mut self_transitions = self.known_transitions.to_unconfined(); - for (opid, other_transition) in &other.known_transitions { - if let Some(transition) = self_transitions.get_mut(opid) { - transition.merge_reveal(other_transition)?; + for other in &other.known_transitions { + if let Some(kt) = self_transitions.iter_mut().find(|kt| kt.opid == other.opid) { + kt.transition.merge_reveal(&other.transition)?; + } else { + self_transitions.push(other.clone()); } } self.known_transitions = Confined::from_checked(self_transitions); diff --git a/src/persistence/index.rs b/src/persistence/index.rs index a72b683c..bdcc780c 100644 --- a/src/persistence/index.rs +++ b/src/persistence/index.rs @@ -28,7 +28,7 @@ use bp::{Outpoint, Txid}; use nonasync::persistence::{CloneNoPersistence, Persisting}; use rgb::{ Assign, AssignmentType, BundleId, ContractId, ExposedState, Genesis, GenesisSeal, GraphSeal, - OpId, Operation, Opout, TransitionBundle, TypedAssigns, + KnownTransition, OpId, Operation, Opout, TransitionBundle, TypedAssigns, }; use crate::containers::{ConsignmentExt, ToWitnessId, WitnessBundle}; @@ -211,7 +211,7 @@ impl Index

{ self.provider .register_bundle(bundle_id, witness_id, contract_id)?; - for (opid, transition) in &bundle.known_transitions { + for KnownTransition { opid, transition } in &bundle.known_transitions { self.provider.register_operation(*opid, bundle_id)?; for input in &transition.inputs { self.provider.register_spending(input.op, bundle_id)?; diff --git a/src/persistence/state.rs b/src/persistence/state.rs index 2a66ae3e..40b5c93d 100644 --- a/src/persistence/state.rs +++ b/src/persistence/state.rs @@ -28,8 +28,8 @@ use nonasync::persistence::{CloneNoPersistence, Persisting}; use rgb::validation::{ResolveWitness, WitnessResolverError}; use rgb::vm::{ContractStateAccess, WitnessOrd}; use rgb::{ - BundleId, ContractId, Genesis, RevealedData, RevealedValue, Schema, SchemaId, Transition, - TransitionBundle, Txid, VoidState, + BundleId, ContractId, Genesis, KnownTransition, RevealedData, RevealedValue, Schema, SchemaId, + Transition, TransitionBundle, Txid, VoidState, }; use crate::containers::{ConsignmentExt, ToWitnessId}; @@ -152,7 +152,7 @@ impl State

{ .map_err(StateError::WriteProvider)? .ok_or(StateInconsistency::UnknownContract(contract_id))?; let bundle_id = bundle.bundle_id(); - for transition in bundle.known_transitions.values() { + for KnownTransition { transition, .. } in &bundle.known_transitions { let ord = resolver .resolve_pub_witness_ord(witness_id) .map_err(|e| StateError::Resolver(witness_id, e))?; @@ -175,7 +175,7 @@ impl State

{ for witness_bundle in consignment.bundled_witnesses() { let bundle = witness_bundle.bundle(); let bundle_id = bundle.bundle_id(); - for (_, transition) in &bundle.known_transitions { + for KnownTransition { transition, .. } in &bundle.known_transitions { let witness_id = witness_bundle.pub_witness.to_witness_id(); let witness_ord = resolver .resolve_pub_witness_ord(witness_id) diff --git a/src/persistence/stock.rs b/src/persistence/stock.rs index 443c84fa..d1ad73e4 100644 --- a/src/persistence/stock.rs +++ b/src/persistence/stock.rs @@ -33,9 +33,9 @@ use nonasync::persistence::{CloneNoPersistence, PersistenceError, PersistencePro use rgb::validation::{ResolveWitness, UnsafeHistoryMap, WitnessResolverError}; use rgb::vm::WitnessOrd; use rgb::{ - validation, AssignmentType, BundleId, ChainNet, ContractId, GraphSeal, Identity, OpId, - Operation, Opout, OutputSeal, Schema, SchemaId, SecretSeal, Transition, TransitionType, - UnrelatedTransition, + validation, AssignmentType, BundleId, ChainNet, ContractId, GraphSeal, Identity, + KnownTransition, OpId, Operation, Opout, OutputSeal, Schema, SchemaId, SecretSeal, Transition, + TransitionType, UnrelatedTransition, }; use strict_types::FieldName; @@ -46,8 +46,8 @@ use super::{ StateInconsistency, StateProvider, StateReadProvider, StateWriteProvider, StoreTransaction, }; use crate::containers::{ - Consignment, ContainerVer, Contract, Fascia, Kit, SecretSeals, Transfer, TransitionInfoError, - ValidConsignment, ValidContract, ValidKit, ValidTransfer, WitnessBundle, + Consignment, ContainerVer, Contract, Fascia, Kit, SecretSeals, Transfer, ValidConsignment, + ValidContract, ValidKit, ValidTransfer, WitnessBundle, }; use crate::contract::{ AllocatedState, BuilderError, ContractBuilder, ContractData, IssuerWrapper, SchemaWrapper, @@ -106,6 +106,9 @@ pub enum StockError< /// state transition bundle. AbsentValidWitness, + /// Unable to sort bundles because of data inconsistency. + BundlesInconsistency, + /// witness {0} can't be resolved: {1} WitnessUnresolved(Txid, WitnessResolverError), } @@ -217,10 +220,6 @@ pub enum ComposeError { /// transition input limit. TooManyInputs, - #[from] - #[display(inner)] - Transition(TransitionInfoError), - /// the operation produces too many extra state transitions which can't fit /// the container requirements. TooManyExtras, @@ -282,6 +281,7 @@ macro_rules! stock_err_conv { StockError::StateRead(e) => StockError::StateRead(e), StockError::StateWrite(e) => StockError::StateWrite(e), StockError::AbsentValidWitness => StockError::AbsentValidWitness, + StockError::BundlesInconsistency => StockError::BundlesInconsistency, StockError::StashData(e) => StockError::StashData(e), StockError::StashInconsistency(e) => StockError::StashInconsistency(e), StockError::StateInconsistency(e) => StockError::StateInconsistency(e), @@ -613,6 +613,103 @@ impl Stock { Ok(consignment) } + fn sort_bundles( + &self, + bundles: BTreeMap, + contract_id: ContractId, + ) -> Result, StockError> { + let bundles_len = bundles.len(); + if bundles_len <= 1 { + return Ok(bundles.into_values().map(|(b, _)| b).collect()); + } + + // Pre-sort by witness height for efficiency + let mut bundles_with_height = bundles.into_iter().collect::>(); + bundles_with_height.sort_by_key(|(_, (_, num))| *num); + + // Dependency violation detection + let mut needs_reordering = false; + let bundle_positions = bundles_with_height + .iter() + .enumerate() + .map(|(i, (bundle_id, (_, _)))| (*bundle_id, i)) + .collect::>(); + 'outer: for (i, (_, (witness_bundle, _))) in bundles_with_height.iter().enumerate() { + for KnownTransition { transition, .. } in &witness_bundle.bundle.known_transitions { + for input in &transition.inputs { + if input.op != contract_id { + let input_bundle_id = self.index.bundle_id_for_op(input.op)?; + // ignore missing input bundles (e.g. can happen in case of replace) + if let Some(&input_pos) = bundle_positions.get(&input_bundle_id) { + if input_pos > i { + needs_reordering = true; + break 'outer; + } + } + } + } + } + } + if !needs_reordering { + return Ok(bundles_with_height + .into_iter() + .map(|(_, (wb, _))| wb) + .collect()); + } + + // Topological sort + let mut known_bundle_dependencies: HashMap> = + HashMap::with_capacity(bundles_len); + for (bundle_id, (witness_bundle, _)) in &bundles_with_height { + for KnownTransition { transition, .. } in &witness_bundle.bundle.known_transitions { + for input in &transition.inputs { + if input.op != contract_id { + let input_bundle_id = self.index.bundle_id_for_op(input.op)?; + if bundle_positions.contains_key(&input_bundle_id) + && input_bundle_id != *bundle_id + { + known_bundle_dependencies + .entry(*bundle_id) + .or_default() + .insert(input_bundle_id); + } + } + } + } + } + let mut sorted_bundles: Vec = Vec::with_capacity(bundles_len); + let mut remaining = bundles_with_height + .into_iter() + .map(|(id, (wb, _))| (id, wb)) + .collect::>(); + while !remaining.is_empty() { + let processed_ids = sorted_bundles + .iter() + .map(|wb| wb.bundle.bundle_id()) + .collect::>(); + let mut found = false; + let mut i = 0; + while i < remaining.len() { + let (bundle_id, _) = &remaining[i]; + let dependencies = known_bundle_dependencies + .get(bundle_id) + .cloned() + .unwrap_or_default(); + if dependencies.is_subset(&processed_ids) { + let (_, witness_bundle) = remaining.remove(i); + sorted_bundles.push(witness_bundle); + found = true; + break; + } + i += 1; + } + if !found { + return Err(StockError::BundlesInconsistency); + } + } + Ok(sorted_bundles) + } + fn consign( &self, contract_id: ContractId, @@ -638,7 +735,7 @@ impl Stock { ); // 1.3. Collect all state transitions assigning state to the provided outpoints - let mut bundles = BTreeMap::::new(); + let mut bundles = BTreeMap::::new(); let mut transitions = BTreeMap::::new(); let mut bundle_sec_seals: BTreeMap> = BTreeMap::new(); for opout in opouts { @@ -680,6 +777,7 @@ impl Stock { // 2. Collect all state transitions between terminals and genesis let mut ids = vec![]; + let mut seen_ids = HashSet::new(); for transition in transitions.values() { ids.extend(transition.inputs().iter().map(|input| { (input.op, is_asset_replacement(transition.transition_type, input.ty)) @@ -689,6 +787,9 @@ impl Stock { if id == contract_id { continue; // we skip genesis since it will be present anywhere } + if !seen_ids.insert(id) { + continue; // we skip seen IDs to avoid re-processing duplicates + } let transition = self.transition(id)?; if !asset_replacement { ids.extend(transition.inputs().iter().map(|input| { @@ -699,6 +800,7 @@ impl Stock { bundles .entry(bundle_id) .or_insert(self.witness_bundle(bundle_id)?.clone()) + .0 .bundle .reveal_transition(transition.clone())?; } @@ -707,8 +809,10 @@ impl Stock { let schema = self.stash.schema(genesis.schema_id)?.clone(); - let bundles = Confined::try_from_iter(bundles.into_values()) - .map_err(|_| ConsignError::TooManyBundles)?; + let sorted_bundles = self.sort_bundles(bundles, contract_id)?; + + let bundles = + Confined::try_from_iter(sorted_bundles).map_err(|_| ConsignError::TooManyBundles)?; let terminals = Confined::try_from( bundle_sec_seals .into_iter() @@ -828,19 +932,9 @@ impl Stock { stash.consume_witness(&fascia.seal_witness)?; for (contract_id, bundle) in fascia.into_bundles() { - let ids1 = bundle - .known_transitions - .keys() - .copied() - .collect::>(); - let ids2 = bundle - .input_map - .values() - .flat_map(|opids| opids.to_unconfined()) - .collect::>(); - if !ids1.is_subset(&ids2) { - return Err(FasciaError::InvalidBundle(contract_id, bundle.bundle_id()).into()); - } + bundle + .check_opid_commitments() + .map_err(|_| FasciaError::InvalidBundle(contract_id, bundle.bundle_id()))?; index.index_bundle(contract_id, &bundle, witness_id)?; state.update_from_bundle(contract_id, &bundle, witness_id, &resolver)?; @@ -854,15 +948,17 @@ impl Stock { let bundle_id = self.index.bundle_id_for_op(opid)?; let bundle = self.stash.bundle(bundle_id)?; bundle - .known_transitions - .get(&opid) + .get_transition(opid) .ok_or(ConsignError::Concealed(bundle_id, opid).into()) } - fn witness_bundle(&self, bundle_id: BundleId) -> Result> { + fn witness_bundle( + &self, + bundle_id: BundleId, + ) -> Result<(WitnessBundle, u32), StockError> { let (witness_ids, contract_id) = self.index.bundle_info(bundle_id)?; let bundle = self.stash.bundle(bundle_id)?.clone(); - let (witness_id, _) = self.state.select_valid_witness(witness_ids)?; + let (witness_id, witness_ord) = self.state.select_valid_witness(witness_ids)?; let witness = self.stash.witness(witness_id)?; let pub_witness = witness.public.clone(); let Ok(mpc_proof) = witness.merkle_block.to_merkle_proof(contract_id.into()) else { @@ -878,7 +974,14 @@ impl Stock { // TODO: Conceal all transitions except the one we need - Ok(WitnessBundle::with(pub_witness, anchor, bundle)) + let height = match witness_ord { + WitnessOrd::Mined(pos) => pos.height().into(), + WitnessOrd::Tentative => u32::MAX - 1, + WitnessOrd::Ignored => u32::MAX, + WitnessOrd::Archived => unreachable!("select_valid_witness prevents this"), + }; + + Ok((WitnessBundle::with(pub_witness, anchor, bundle), height)) } pub fn store_secret_seal(&mut self, seal: GraphSeal) -> Result> { @@ -890,8 +993,8 @@ impl Stock { self.state.update_bundle(*bundle_id, false)?; let bundle = self.stash.bundle(*bundle_id)?.clone(); // recursively set all bundle descendants as invalid - for opid in bundle.known_transitions.keys() { - let children_bundle_ids = match self.index.bundle_ids_children_of_op(*opid) { + for opid in bundle.known_transitions_opids() { + let children_bundle_ids = match self.index.bundle_ids_children_of_op(opid) { Ok(bundle_ids) => bundle_ids, Err(IndexError::Inconsistency(IndexInconsistency::BundleAbsent(_))) => { // this transition has no children yet @@ -916,7 +1019,7 @@ impl Stock { let bundle = self.stash.bundle(*bundle_id)?.clone(); let mut valid = true; // recursively visit bundle ancestors - for transition in bundle.known_transitions.values() { + for KnownTransition { transition, .. } in &bundle.known_transitions { for input in &transition.inputs { let input_opid = input.op; let input_bundle_id = match self.index.bundle_id_for_op(input_opid) { @@ -953,7 +1056,7 @@ impl Stock { self.state.update_bundle(*bundle_id, true)?; invalid_bundles.remove(bundle_id).unwrap(); // recursively visit bundle descendants to check if they became valid as well - for (opid, _transition) in bundle.known_transitions { + for KnownTransition { opid, .. } in bundle.known_transitions { let children_bundle_ids = match self.index.bundle_ids_children_of_op(opid) { Ok(bundle_ids) => bundle_ids, Err(IndexError::Inconsistency(IndexInconsistency::BundleAbsent(_))) => { @@ -1119,7 +1222,7 @@ impl Stock { // recursively check bundle ancestors let bundle = self.stash.bundle(*bundle_id)?.clone(); - for transition in bundle.known_transitions.values() { + for KnownTransition { transition, .. } in bundle.known_transitions { for input in &transition.inputs { let input_opid = input.op; let input_bundle_id = match self.index.bundle_id_for_op(input_opid) { @@ -1188,7 +1291,7 @@ mod test { ContractId::from_baid64_str("rgb:qFuT6DN8-9AuO95M-7R8R8Mc-AZvs7zG-obum1Va-BRnweKk") .unwrap(); if let Ok(transfer) = stock.consign::(contract_id, [], vec![secret_seal], None) { - println!("{:?}", transfer) + println!("{transfer:?}") } } diff --git a/src/stl/stl.rs b/src/stl/stl.rs index cc8a5790..6ee0fce4 100644 --- a/src/stl/stl.rs +++ b/src/stl/stl.rs @@ -42,7 +42,7 @@ use crate::LIB_NAME_RGB_STD; /// Strict types id for the library providing standard data types which may be /// used in RGB smart contracts. pub const LIB_ID_RGB_STORAGE: &str = - "stl:zmXtAwkp-kSXdrCC-VwhgOsx-xaqYeeN-83jRn4_-iANSAwg#salon-explain-teacher"; + "stl:rYIkl4Ol-15bjw4Y-0bXJ~7o-2o~3CkY-HFE~Bgi-EFSiSc8#survive-immune-twin"; /// Strict types id for the library providing standard data types which may be /// used in RGB smart contracts. @@ -51,7 +51,7 @@ pub const LIB_ID_RGB_CONTRACT: &str = /// Strict types id for the library representing of RGB StdLib data types. pub const LIB_ID_RGB_STD: &str = - "stl:Nn~mJpFH-NvnJbK4-KygN4WE-gZ2qLty-s_BnUXh-HhkGA6I#reverse-diana-mirage"; + "stl:r1GC~anx-KuJPTuL-5BZ9qof-J2NY2~T-FTYiA6F-Abtg4uU#stick-tornado-absorb"; fn _rgb_std_stl() -> Result> { // TODO: wait for fix in strict_types to use LibBuilder::with diff --git a/stl/RGBStd@0.11.0.sta b/stl/RGBStd@0.11.0.sta index 72588fef..f548f5f7 100644 --- a/stl/RGBStd@0.11.0.sta +++ b/stl/RGBStd@0.11.0.sta @@ -1,21 +1,21 @@ -----BEGIN STRICT TYPE LIB----- -Id: stl:Nn~mJpFH-NvnJbK4-KygN4WE-gZ2qLty-s_BnUXh-HhkGA6I#reverse-diana-mirage +Id: stl:r1GC~anx-KuJPTuL-5BZ9qof-J2NY2~T-FTYiA6F-Abtg4uU#stick-tornado-absorb Name: RGBStd Dependencies: BPCore#juliet-super-dominic, CommitVerify#violet-panther-herbert, - RGBCommit#support-iris-depend, + RGBLogic#motel-balance-sofia, + RGBCommit#jimmy-clark-canary, Std#delete-roman-hair, AluVM#jargon-gorilla-poetic, - RGBLogic#colombo-famous-erosion, Bitcoin#quiz-patent-exit, StrictTypes#henry-heart-survive -Check-SHA256: 1227f7f69888f4f758f1f7ea8ca55d6a9174193ab97d64777f04aee4fea1e185 +Check-SHA256: 8aa37fc1f759ad1dbfff793f213b8e3a7ec38eb79c83648182f5499813597053 22w{tQ*>kqJ?lFX3Sj7m#S0l<6lWWUs|%1)CkG9>cz4~pa1P{=20~CnZ*pZ!WfpKF*Z0wZ5-ly2voTT) -QcLg9hvFSzGHuQ>ceug~LvL+uX>?X)a%pCHUATk^%RR@{#>rD>}a8$2!O9kk`*PSB+rd(so&!uOW`TABoF=_)-bYz<ceug~LvL+uX>?X)a%pCHePK6O_jQ-;d(CVW3aIr>Ek-sVm)$5EIU@fHslC^m2vSEv +OmAmtV}I8iYzbjoO?1Un5gPa+I1ycU3(5=pmTDm~KXV7O_2K9yF<>+h;;t~i_0*|LWuHI04?{jxCyL2PwaO~FURW+jcb ^C>NgzlT_m3wFmfDB@ZlUF_{Gi(YuS4F^JLbYpL6Zt0$q=Q}``f02HLt~iCiD@{1Jw0_*8A_pi$)ov?1 PzzIZa%p39RC#b^a|i`NY;{&m1^^NSr?vtRe2PRb^)}W8ZdqCQlr&gKJ5X<}{fp(f$H b>aU=OZ$bvG|>z)+>9PT;Au-7)~D;-++hbyX<}1pbY+s|KgxOTbXgHlB~91)qbQqD?1jgn @@ -58,82 +58,82 @@ B_Q_~{-JMMpvoC2L349yXKq$yV?lFsX=iRyWp-s@Y-MCbVRT_aY-w&}Q)OXnRCsA*LLFzFqNeWfC|Bzc W)C&G2_(cU)%eA9tG|}D;6vKd3RH4oZgXjLX>V>s!tI8CO};e1CqOk7zVRUtJWkxi8r5^2Q3|{+hFQ&wA>Dj|l?}?5nvXn-qjmDr}rVK}HZ(?C=R$**)Wphq!%9@}OZ_-bc 51ndy0w1NGl_wIgUQD>ylx`L>RgMiuWo~72X>(I!Xk~3-TA8sVI1lHZPjU1lqsG~bOtk&)HFq4^xslxt -&yd4j96@t)X=iR$Z)s#xbYXO5LTqVnWK(5fY*ct@WM^aw-?LlPQjTl%(2ntadXH-EO|kM)2Suh4M{I9mVQf=$VRU6vV`ybZoQPE-kW*z2&v&{< -UdS6)_{YXS3Ma>jb_z*uaCLM~aA{<7gc#?E`%W7KsO97JuYbDvlzH(zmRs?SoJt!M#ot>t3r%HoVMJwg -VQFl0hyLPaScq)s9KMExvw34D6J>+NwrBxfixd_%u|$Wt4ncEsX=iS2Wo~p-d2nTmu2d>~5inUu`9yv& -8fat=S8rs<8`txcI~e&`_$v(otsF+cqN0Qy}ddQ=3E5C~Ia -Xk~3-No1AC=6W7=VqesjRYGc!>wZFzp>JB4@xD;^wu&SY_r(NHa7kpA7yOE2lZ8~neJqmb=e!%6GT&j$ -T6TU?+!P_HIBQ)dL349yXKq$yV?lFsX=iR$Z)s#xbYXO5LTqVnWK(5fY*ctqbaIwtP5eoR)-wgn>b=na -L2?WP;yphdRtnMIcPCTiyJR0hb8~5DZc=4-WnpY(WJFc;Wu}ZU -kw;6)I>KU%$CX5lEZwTb6rTk%m84<>f2kfhA@=uGO=Jtx#~n~$5JW2|a}~7vfDWQsGAeQqRB~Z%b7^#GZ*Eg#Xk~3- -tsXy=AYX8dDQEQRO5D(yMKm~r|3!X*hx(?lDDx}U2t#OLX>LwsbgiQFz^ko6x1)SL)KNJF?yfBScz9?Y -SqBl8)jS}SY$`!>b7^O8R%K&Bb8~5DZc=4-WnpY(WL9Bpb!9?qX>MdwWnpYocu;h5w&;L{94K`ndk%K5 -+?9Jv$dw7jc}U5p5@2#$kUJ%u2uWmRZggpMdAEq7KH8Joz6zOTm|U)Lm9Rr0Amv$$1lYlz$wHX7(J4W5 -b7^O8R%K&Bb8~5DZc=4-WnpY(WJFf*E{)ae8NT&o8 -22*2bWo=>7Z(864p8Ouwzj`dQ1n3V{mIVn=ti@|(ytFb|&pdtyM`dnhb7^zc?vf5kh_h+&YE#h%O8d1V -_{UOl9{V;uR#^q%T!0{hf1BB`=sqDirMEm%rl}EHag_fA3Wp< -AwhFv2!% -kp04IdejB5_YJg;9E|1`d*r&;qSS3+uh`0YNLave-ImojDN{iR+YxT1qeJQTRI%yh?{ -hxxA$L2PhnVMAeXb4+h!VRLBFJq*Jt8?Abrta^#~Iw-!oZ%zqO(A&rh^vGm~tg_w^L2PhnVN-2kY-~(# -WMOk?3sZD*X=8L$d2nTO4*&^LN2X=Q9=Q)O*QWK$LhgcQkwbf~^M){{|8P%hsRk~m~ep32F1 -51Y4WWC&DwaAi(mZDnMP)DN(0hN+Kdp}ZAoN($wDX8VgT7DmW3qm%zcviBmGB|7z0dg -BIJ4&sCG^VR$+2!VQzGR(<~&{!{{>E!(#o&^pB98KZhv1GEPn8Orhb4n;8ZMQ)zl>ZfBCy0{K32d-H~a -`3x8b375ImR&CF_#3#*gz1^xtuG$bzVQpn(MrmbiWOGwxZAoO8A%m*X98W>f2s0TH8C&EH;|vtDTYgh) -4~t7}WW`YoMQ(L%R$+2!VQzGDn938Qb#DiI%LhXtBc@pg0t!L7$2{bU&sPXOO(dS=5LRJwX<=@3Np5Cu -Q)O*QWc?UbbJ9Xwr}~3wv^yxa@v}v^+kiGSR2X#8M$tG2GZIy9X>V>;VRC6_vj93RHP;Wm9=`bY*P^01!iOZgXj8Zf#|5bY@{}b7cky2XCKHIoQI!*iVO+VNst{;wk@CbBrVQzC~WpV<7iR(=d3vg7gbV~*3!PlK51EySK -%g?1}nECovJTYovh9c2>uJC38-{*D7fZ(%hZo23R4S;p`Q9JBQllDysbY*gFX>MU`a{vkgUATk^%RRrzR5b&Jq7pCHn+BAwE2THpkp{2tZ6dMvX9=nqwv1qo2B#cO4}v@%)GJbnjab#7#AWpe-t0j!@J -+1z|)_nc4T)9jZsjvvUbyZ`_I000000RR90{{R3000whoXk~3-0$sR-3ClgkT&R7@ -Fp+vLr8o)eQb~Pvi_kTnAkwoUoz9Fk$<9<_tH9#zCbfD!eC0p3ZB1|7AO43pNl2#z6a{p7aAk7>>7J73 -J3yCzk$#1)IEB9}O*pr-e%zuW2Pj0_vj92XkX` -X>fFN00{z{Dm~KXV7O_2K9yF<>+h;;t~i_0*|LWuHI04?{jxC<1gEwF5PXV6FZDLo1#Vec_~kix7WfVQ -#Sd|CM9$^_00000000001ONa40000FLvL<#X=iS2Wo~qIa&=_}2nTj$a&u{KZUMGnCZ)bsi%sy -BtF}?M>WBLk*fW6RH_XPEi=Ry;9kVTK~n -d#>{Y;yn#0$sR-3ClgkT&R7@Fp+vLr8o)eQb~Pv -i_kTnAkwoUodbK5wLKbzE(ciwC3nrXLGTEzPUiqvVS}~6O1$TyxP%GIJ;q$9eabMAdM>3n3F}fxeRYe_HJ>2T -vm%|+Z(864p8Ouwzj`dQ1n3V{mIVn=ti@|(ytFb|&pdtyVs&n0Y-Mu*2?4C18`<1^X7`*=rzR5b&Jq7 -pCHn+BAw2RHObCYVynR7?IyK)J$&Uqwrx#s+#mjjI7vvS1QZ2yd2nTO0_mQT=Q}``f02HLt~iCiD@{1J -w0_*8A_pi$)ov?1Q2l|fgMJGKo2X9f$Rbsi%syBtF}?M>rzR5b&Jq7pCHn+BAw2RHObCYVynR7 -?IyK)J$&Uqwrx#s+#mjjI7vvS1QY-O000000093000000000Gad2nTO0_mQT=Q}``f02HLt~iCiD@{1J -w0_*8A_pi$)ov?1Q2l|fgMJGKo2X9f$Rcz4~pa1P{=Xc_Cg)w39@m$R6qOEzWQ+NTC@=;cz4~pa1P{=QJz*lU&edk{G8WCh%}junc6$5 -v!Tz0lK7`GY>kS^24Zz?WNc*uUATk^%RR@6CZgu2M_}|Wp0vpvv$c&#PW69R$ltr%da5t5w^x+8!q6kf8bYWC^aAkIw<6i6K +L--MvCI1Lgj%)PLj`4kZk818svGP&}MWzu)Y;R&=Y*Tb$bY)XxXk~3-gc#?E`%W7KsO97JuYbDvlzH(z +mRs?SoJt!M#ot>t3r%HoVMJwgVQFl0hyLPaScq)s9KMExvw34D6J>+NwrBxfixd_%u|$Wt4ncEsX=iS2 +Wo~p-d2nTkEyWIw5tuitmKJJ%2ayy(uOkc!h{i026J1fL`zH7hRB~Z%b7^#GZ*D?$Ze(m_i>_2Ed=W5N +Nclv5FdArN4p(nv$Q#%5lsg#tSokXs89{S%X=iS2Wo~qHLTqVnWK(5fY*ctqbaImrynwMZT8l5kSW@l} +O=!>^xB4~9n`Dx!RtcK)nwJGnaBp>VlRC}cdiNl+Np+sim8IKY2NL?#G1fp*MV^LGtQvy0DM52{X=iR$ +Wn)2eb7^O8Qe}2!VQgh&R$**)WkPIeZe&wsVQf@*X=IdA)7t~9tEf?*r}jS36zkMYeK9}${s8)2BzjZ? +kPrw{V`ybF%vyGSQrr|FsW@w0CP8y^X=iR$Wn)2eb7^O8R&Qx!Q*>c;WkPIeZe&wsVQf@*P;_#ZWKH}@ht@L% +%<8?+|3PvL1mZnE9aaj_-*+cdMdwWnpYocxhysE!4oj;3`<3 +7v2Z4^tv`QLvAn=wSY4a%d)dfQpu?kQ)OXnLu_wzX>MmzbaG*IWoLPx2rNlD$O59e#ogQsB77jPl+h5j^*S;NLvL<$a$#e1No1lk$>=Cf%ypRj207<6(8~ghODx=kkv^H(szyE})=~>cY;R&=Y*Tb$ +bY-TDFp)<~$~wYgjK`HkjV#@&#T1_fGnK3MJXK)_7bXoxb#7;AVr*qobYXO5r?zUHR4te2V>sWprU_Y;&t+cznDDD1^I$Y^N^U(vj;W#J@gj^sY5z(hn_6 +P=XObb8~5DZf#|5bVOxzVQFl0tbeHV>* +V`ybPpga1W-frt90uqg8@)(AsrVQFqoWpu5g^uVjFLARrPJ=9S-1@5ja +{CIe19$5zwmeo8Ulx!+Nb8~5DZdPSuL349yXKqquc4c8~Wn@-iY;|QqY-w&}Q)OXnRCrKya<=Gzh8!q$ +B6|*YuiTY;OURW8#d%1{rxIXtTaY^?oCrx|Wo~q7ba}UkqCVP_+P(^zWtd#9ah0$`At2>hiv-xgp2MdwWnpYocu;h5%sU`)39H8lI7A^rifZh_?ICzy +C$UZalW1NfPXalR7(sJ$X=iS2Wo~qHLTqVnWK(5fY*ct@WX_B=$<9<_tH9#zCbfD!eC0p3ZB1|7AO43p +Nl2#z6b4gcXk~3-(r;Se1fKjJ)xUZyvjpf5Rh9(_P^`skWxTX9SMp{wIfQLx1JC|lRtv}2|vJ#Rj;5&YI0c6F%?4p4N_%xWnpY(WL9Bpb!GK>O*mP8`7qV2 +1dnrCyk{{a-lF$FG0V5TNAc?Tc{K=4WprU=VRT{lTw_^8WdM??RZ;ab079^O9n9I5E1y8~f0E6BLSf$} +L349yXKq$yV?lFsX=iR$Z)s#xbYXO5LTqVnWK(5fY*ct@WcSVA$Leu*(}zl(oBO2gDT>+WIm|Pn7B)KM +(;qzK2_Zpqb7^O8Qe}2!VQgh&R$**)WkPIeZe&wsVQf@*P;_$n^sESGu0eNZ)cp(*eFU-DRQ(QTUJ^TE +1nY56>E%WYMs;pyX<}?;RC#b^2vSEvOmAmtV*vmTz8;AID15cBr>9x-Cs#sheE97?nsOaXHkb)PY;b5{Lt$`pNWLQ%D(Hko +n&*Qwpawq)`VKLB>Wd>h=Ype%b?2724ncEcX=zY$X>N33Vr*q$h9c2>uJC38-{*D7fZ(%hZo23R4S;p` +Q9JBQllDynLT_(udPjz(4^OqB|1Bk8zGh-IHIi*o-3_)ygXkkNPaC1&|ZI#2l$xQ-a +`EhCyJoZT~T}~sIjxz)>1`ZdvNB=ndTz*X~v;Uq>`<)y^XImOPdju4LvR$+2!VQzFz +VQpm_v{(W1V6JV*{3!yZ{M3XW@z+pX9JtzktHWiJ@1L +)babHELfN$u@7k>`Uy~SX>DnAX?A5X{h;vIo29B#Zbv)THgnzJqzni;K&ISmvLd)pN>Rl&wr9&I-v?L-&~MrmbiWK(5rNn}$N2!s^Lf^?|9I@Xg>Oi(W05|TJ% +PM*ricn_PmXk-Xfd2nS;VQpn(jMNXXYlf+hXQ9AJ%?72#_KJ5v@E-96x!ZDnLeX=Q9= +b5mt)Nn~pTqZFQ|l>ioJpYH;+t0eX2w~A!Q+0eaZ{MVycPK^aqWo=1heaS*6)M5bHCYFUH@63IY`6K;D +lo$g{Z6f4)7N~Yk2UcNnX<=@3fzvD`*Td*C*~4P}$n=kpoj->tyfRKrOAiJKV)22*KzX>Mnd(*pTE +a(nZJgZT^?2ML$C)mClKyTm8WaJ}8CMy}crPGN0jWJYOaY-Dp&Wo=1hmm!0y(Hu`f(Fijc5*b_M4dVsY!8b|ZDhq!3`K5rZB}7&X<=@3bC}8#qjhfwd&>tyAtR<)2LcK~xyL-@iqBUFK20Q^G*lRL(MHiY2Qv~?ZfS3BR$+2!VQzGDQ)O*QWc`7z +gMJGKo2X9f$R2nTj$ +a&u{KZUMGnCZ)bsi%syBtF}?M>W +BLk*fW6RH_XPEi=Ry;9kVTK~nd#>{Y;yn#0)N*W +YzbjoO?1Un5gPa+I1ycU3(5=p$U9*BopKVOvdf +#Z(a*_#!wFU3Ux03;g9ee{_%L4yydpZ(864p8Ouwzj`dQ1n3V{mIVn=ti@|(ytFb|&pdtyVs&n0Y-Mu* +2mu(yB5Yr&#spcAyK&5luspm3pIz57YYgJRaH?l;k6{1+0000000960|Nj60000JaV`ybmb;*F>vukd;=m`ygb@x#_>`RmOO$l^ma&2jDVQg~%3Ic!E9Bc_;TTOJuR1q5ZA~+FU +cMHl3{N*}-bdTl^s{8|cleIk>g)RqK0VQ|Mwn6X+txo3vSYd;;z)HQ~0$c$)d>>=CmaH5KP%H1Vseo(0 +uFMZZ=#QmFO>!#6Ee?$U0000000030{{R3000007XJu|>b7^w|f7cvr31M4Jbj4H=8u%hO5nXo+$_xDE +I)8MJ<_@a-(r;Se1fKjJ)xUZyvjpf5Rh9(_P^`skWxTX9S_ZD9g`*BopKVOvdf#Z(a*_#!wFU3Ux0 +3;g9ee{_%L4yydlj5W#5RAQ^Z;_W82dOdvQKela6Z`>dLhd4<{rvwxQba`-Pa{}p}lIJ@>mw%Cdg|0Y- +zbj2Rx3qrTq9O+&PZdlOljoA7|k;k>s6qoa5|8f~f~{V{&P5baMa+0-Gv5 +(&k{eX@5SIR>|w{s%)+}o6^~`ha@$PehdAwF%kr)wgM1*ibOB_ZDDj_00{zr*BopKVOvdf#Z(a*_#!wFU3Ux03;g9ee{_%L4yydlj5W#5 +RAQ^Z;_W82dOdvQKela6Z`>dLhd4<{rvwxL00000000300000000005ba`-Pa{}p}lIJ@>mw%Cdg|0Y- +zbj2Rx3qrTq9O+&PZdlOljoA7|k;k>s6qoa5|8f~f~{V{&P5baMa+0-Gv5 +(&k{eX@5SIR>|w{s%)+}o6^~`ha@$PehdAwF%kr)wgM1*ibOBhggsccE>d+;#wbF?CmX! +UU<0;qk=;7%h%D+p%U7S;b1RT)c9`>#Kd;Rz-U=aO9W+B0RnV*00jX8!AHbqC5^W8DJ_b>hggsccE>d+ +;#wbF?CmX!UU<0;#d{%|zxO$Aaz=oyMOH6-?4fLKKPKJW|NMSz1LoXB3sYrda%FT=WnpY{1pxpF0zKhpP*aQYQxux_Ecpx^NEUk!Ts~yw$T9tCzEwrAszt-P)%HZ|LbH=L2A=l(W4CP5}S_ +000000RR600000001a1ZbZ%vHb3%1)WNc*y0}60;VpnN&Ze??G0R}rulB|?L;LPn)fIF!^9U_+Ia*^@2 +K#bcvtFTdm;Ra!DV`y)30zKhpP*aQYQxux_Ecpx^NEUkx`yjK3~Rr;ryJ}MTj(+ +jG5Xys;KwYJUfj6hW^e3<`+GEQS+ZQK SecretSeals} , genesis RGBCommit.Genesis - , bundles {WitnessBundle ^ ..0xffffffff} + , bundles [WitnessBundle ^ ..0xffffffff] , schema RGBCommit.Schema , types StrictTypes.TypeSystem , scripts {AluVM.Lib ^ ..0x400} -@mnemonic(charm-picasso-trapeze) +@mnemonic(sigma-slang-nevada) data Consignmenttrue : version ContainerVer , transfer Std.Bool , terminals {RGBCommit.BundleId -> SecretSeals} , genesis RGBCommit.Genesis - , bundles {WitnessBundle ^ ..0xffffffff} + , bundles [WitnessBundle ^ ..0xffffffff] , schema RGBCommit.Schema , types StrictTypes.TypeSystem , scripts {AluVM.Lib ^ ..0x400} @@ -180,7 +180,7 @@ data PubWitness : txid Bitcoin.Txid @mnemonic(rainbow-sunday-exodus) data SecretSeals : {BPCore.SecretSeal ^ 1..} -@mnemonic(vortex-genesis-risk) +@mnemonic(miami-cactus-hazard) data WitnessBundle : pubWitness PubWitness , anchor BPCore.AnchorDbcProof , bundle RGBCommit.TransitionBundle diff --git a/stl/RGBStorage@0.11.0.sta b/stl/RGBStorage@0.11.0.sta index 031e6440..0529c7b5 100644 --- a/stl/RGBStorage@0.11.0.sta +++ b/stl/RGBStorage@0.11.0.sta @@ -1,23 +1,23 @@ -----BEGIN STRICT TYPE LIB----- -Id: stl:zmXtAwkp-kSXdrCC-VwhgOsx-xaqYeeN-83jRn4_-iANSAwg#salon-explain-teacher +Id: stl:rYIkl4Ol-15bjw4Y-0bXJ~7o-2o~3CkY-HFE~Bgi-EFSiSc8#survive-immune-twin Name: RGBStorage Dependencies: - RGBStd#reverse-diana-mirage, BPCore#juliet-super-dominic, CommitVerify#violet-panther-herbert, - RGBCommit#support-iris-depend, + RGBLogic#motel-balance-sofia, + RGBCommit#jimmy-clark-canary, Std#delete-roman-hair, AluVM#jargon-gorilla-poetic, - RGBLogic#colombo-famous-erosion, + RGBStd#stick-tornado-absorb, StrictTypes#henry-heart-survive, Bitcoin#signal-color-cipher -Check-SHA256: 6a97e8ad10d29e32f334e8090d1b1ef2f1bdbd4960762dfc70ddc7c6d560a596 +Check-SHA256: 4a5377ade8e895fccb5f4bc845971becdae55c64b4d586280687aabc03aa898e -3Q|WxQ*>`~VP|CtHh<lK>pKz(VCaX%3mIP& -XB&sB3y@ML2MxM-cip;h4&;#rLQq3*a%D_q7H}ii_tAk8EiIL^F;WduOYhK!;vHZzZO$@xxWWuWZ*6U9 -bXH|@X=Zs{xP%GIJ;q$9eabMAdM>3n3F}fxeRYe_HJ>2Tvm%`dQb$5VZ*6U9bb^WNO%DrjRIhYP1?a)o -og)LLTw}}6rDvG=`c^zKY6DYrWSc5I(&k{eX@5SIR>|w{s%)+}o6^~`ha@$PehdAwF$F7J73J3yCzk$#1)IEB9}O*pr-e%zuW2Pj0< +3Q|WxQ*>`~VP|CtJ?lFX3Sj7m#S0l<6lWWUs|%1)CkG9>cz4~pa1P{=20~CnZ*pZ!WfpKF*Z0wZ5-ly2 +voTT)QcLg9hvFSzGHuQ>ceug~LvL+uX>?X)a%pCHePK6O_jQ-;d(CVW3aIr>Ek-sVm)$5EIU@fHslC^m +2vSEvOmAmtV}I8iYzbjoO?1Un5gPa+I1ycU3(5=pmTDm~KXV7O_2K9yF<>+h;;t~i_0*|LWuHI04?{jxCyL2PwaO|Mac +{i*RP;!jTE`30Y9q4IV$jlWD(*oY2=0lQ%07J73J3yCzk$#1)IEB9}O*pr-e%zuW2Pj0< ZYw-c3sZD*X=8L$d2nTO^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#t%#3&jH2SRCdV{d702?arHbyiIV 01^bJwgM1*ibOBDT%6aZ|SrJerP1pIOD57`7Ol|-ogQ6Pjg~y>s-v>!^VNPLfWv4Jz0xkJm$nc4y @@ -62,111 +62,111 @@ b7^O8Qe}2!VQgh&L}7GcLTqVnWK(5fY*ct@WI`Qhoua1h@F-X75M~cGx(Ou2EYc;WkPIe -Ze&wsVQf@*X=G<)3g5G2eU+-LJ4R_90-H=oQq8@u`N?Dm8EmJT^zaZ=a$#@6CZbEf#WNc-1*YiE5tb$Y2vUw~^w5s+eR_{-?oF}s -QU^t*5l3uqVqt7kbYXO5Q)6glZDE4?v{pIxoScYNB9K#M4$pVGM_$MqSNO-qKME(uiFOJ}Zg6#UPjG2u -bA%Y@iTh3)1gPcX^{;=r`ILF_J(gSXjhspw6vf|LHVaK_2Ed=W5NNclv5FdArN4p(nv$Q#%5lsg#tSokXs89{S% -X=iS2Wo~qHLTqVnWK(5fY*ctqbaImrynwMZT8l5kSW@l}O=!>^xB4~9n`Dx!RtcK)nwJGnaBp>VlRC}c -diNl+Np+sim8IKY2NL?#G1fp*MV^LGtQvy0DM52{X=iR$Wn)2eb7^O8Qe}2!VQgh&R$**)WkPIeZe&ws -VQf@*X=IdA)7t~9tEf?*r}jS36zkMYeK9}${s8)2BzjZ?kPrw{V`ybF%vyGSQrr|FsW@w0CP8y^X=iR$Wn)2e -b7^O8R&Qx!Q*>c;WkPIeZe&wsVQf@*P;_#ZWKH}@ht@L%%<8?+|3PvL1mZnE9aaj_-*+cdMdwWnpYocxhysE!4oj;3`<37v2Z4^tv`QLvAn=wSY4a%d)dfQpu?kQ)OXn -Lu_wzX>MmzbaG*IWoLPx2rNlD$O59e#ogQsB77jPl+h5j^*S;NLvL<$a$#e1No1lk$>=Cf -%ypRj207<6(8~ghODx=kkv^H(szyE})=~>cY;R&=Y*Tb$bY-TDFp)<~$~wYgjK`HkjV#@&#T1_fGnK3M -JXK)_7bXoxb#7;AVr*qobYXO5r?zUHR4te2V>s -WprU_Y;&t+cznDDD1^I$Y^N^U(vj;W#J@gj^sY5z(hn_6P=XObb8~5DZf#|5bVOxzVQFl0tbeHV>*V`ybPpga1W- -frt90uqg8@)(AsrVQFqoWpu5g^uVjFLARrPJ=9S-1@5ja{CIe19$5zwmeo8Ulx!+Nb8~5DZdPSuL349y -XKqquc4c8~Wn@-iY;|QqY-w&}Q)OXnRCrKya<=Gzh8!q$B6|*YuiTY;OURW8#d%1{rxIXtTaY^?oCrx| -Wo~q7ba}UkqCVP_+P(^zWtd#9ah0$`At2>hiv-xgp2MdwWnpYocu;h5%sU`)39H8lI7A^rifZh_?ICzyC$UZalW1NfPXalR7(sJ$X=iS2Wo~qHLTqVn -WK(5fY*ct@WX_B=$<9<_tH9#zCbfD!eC0p3ZB1|7AO43pNl2#z6b4gcXk~3-(r;Se1fKjJ)xUZyvjpf5 -Rh9(_P^`skWxTX9SMp{wIfQLx1JC|lRtv}2|vJ# -Rj;5&YI0c6F%?4p4N_%xWnpY(WL9Bpb!GK>O*mP8`7qV21dnrCyk{{a-lF$FG0V5TNAc?Tc{K=4WprU= -VRT{lTw_^8WdM??RZ;ab079^O9n9I5E1y8~f0E6BLSf$}L349yXKq$yV?lFsX=iR$Z)s#xbYXO5LTqVn -WK(5fY*ct@WcSVA$Leu*(}zl(oBO2gDT>+WIm|Pn7B)KM(;qzK2_Zpqb7^O8Qe}2!VQgh&R$**)WkPIe -Ze&wsVQf@*P;_$n^sESGu0eNZ)cp(*eFU-DRQ(QTUJ^TE1nY56>E%WYMs;pyX<}?;RC#b^2vSEvOmAmt -V*~&Wz8;AIDT-**L6)$-r+lRyXoI{GIo*U3C -NI7Emc=xo*$N+#63Rh`#Ze??GP;Ya2#Mns)Y&M6LqDeqU-jv95KHlThh+c{38p;h*Y8ns*OksItaxstV -VFCP7wPq#=<|G-oQP|YlF^@fu07kb?cmYX}g@OuKX>@L7b8}B}WCl`4LQ`~P2LJ{;OOmXVLEy~oQ-C|E -J{=;K=5mqowm^*AJFBo!g5e5Kbz)a(bZ%vHb5FsfyU6^!Am>*UnF~ugt;tRB34tClkb#0P@Kl(bS{+Yy -bZ~WaL349yXKrm}Zgf&*c4c8~Wn@-iY;|R4z!w}!_*fFX9u23x2B)@U$sQVATFdKeto{kO7k*y}PjFXh -bZ%vHbDeh}Dl%U><|oit;<)Mmc#PrnMmBmzDete!zLOlP=NwOUbZ~WaL349yXKrm}Zgf&*c4c8~Wn@HQ -bYZQUDoPxXm+POS?Zkdao(?NvR4VY;R&=Y)^G`!^wVq=f*JR(GpTfNL}lr+43(S -;gS+vl4Z-(f9Jy@8BcX|aCLM+b8~5DZf#|5bXIR^WK(oubY=3%=@L7b8`bzbYuqrCxp?AYYxUduU{DdG`^>&S@S1XLTY^Y?LL}v9ZWWu2|;XdXkkNP -aC1n$BNr;@ghiU?gEXK9KMDE{F?;HZBRuDVqlk6qmbeZ|1Bk8zGh-IHIi*o-3_)ygXkkNPaC1&| -ZI#2l$xQ-a`EhCyJoZT~T}~sIjxz)>1`ZdvNB=ndTz*X~v;Uq>`<)y^XImOPdju4Lv -R$+2!VQzFzVQpm_v{(W1V6JV*{3!yZ{M3XW@z+pX9Jt -zktHWiJ@1L)babHELfN$u@7k>`Uy~SX>DnAX?A5X{h;vIo29B#Zbv)THgnzJqzni;K&ISmvLd)pN>Rl&wr9&I-v?L-&~MrmbiWK(5rNn}$N2!s^Lf^?|9I@Xg> -Oi(W05|TJ%PM*ricn_PmXk-Xfd2nS;VQpn(jMNXXYlf+hXQ9AJ%?72#_KJ5v@E-96x! -ZDnLeX=Q9=b5mt)Nn~pTqZFQ|l>ioJpYH;+t0eX2w~A!Q+0eaZ{MVycPK^aqWo=1heaS*6)M5bHCYFUH -@63IY`6K;Dlo$g{Z6f4)7N~Yk2UcNnX<=@3fzvD`*Td*C*~4P}$n=kpoj->tyfRKrOAiJKV)22*Kz -X>Mnd(*pTEa(nZJgZT^?2ML$C)mClKyTm8WaJ}8CMy}crPGN0jWJYOaY-Dp&Wo=1hmm!0y(Hu`f(Fijc -5*b_M4dVsY!8b|ZDhq!3`K5rZB}7&X<=@3bC}8#qjhfwd&>tyAtR<)2LcK~xyL-@iqBUFK20Q^ -G*lRL(MHiY2Qv~?ZfS3BR$+2!VQzGD -Q)O*QWc`7zgMJGKo2X9f$RrzR5b&Jq7pCHn+BAt^EynwMZT8l5kSW@l} -O=!>^xB4~9n`Dx!RtcK)nwJ0o0000000960|Nj60000heb#!oVX>N2+aBp>Va{vkgJ?lFX3Sj7m#S0l< -6lWWUs|%1)CkG9>cz4~pa1P{=pge*1_9$GZBsdB}fMG<}rv*w^M*=0-6Wn0hkV%a=00{zJxP%GIJ;q$9 -eabMAdM>3n3F}fxeRYe_HJ>2Tvm%|75WIk~G+K)5%bR49t5yk`^qQ9d0000000030 -|Nj60000000000000030|Ns900000GO=WFEZ*FvQVPkYtbYXO51_lUoV`ybbaG*1bV+0a -UATk^%RR-W|y2ahx3nF|Vuawki#7NH?S|Q-Q!u2{b -24`$rzR5b&Jq7pCHn+BAwOlk`76TvuW{aQ_%-X`?VwZ$5L?~ -`!+pRSq0(b70UrvE7rsqBHk#fJ+ZFZf!BafnCGSE(FlGoV#P-WF=PJ#00000000300000000006a%pF1 -baMa+0yclc;Wd;HTYi@6MZU71bHh<en_4UD`8YGkyt}EpMh{<^eb^)0$sR-3ClgkT&R7@Fp+vLr8o)eQb~Pvi_kTn -AkwoUogng1Rw9pP&is-3>Sw%P#_(xeJx6(SSwF1NH_CEIWdHyG000000RR90{{R3000nGmZE17>00Rh3 -Wo=1rWMy~;1{H5`LUnFrY-K}eX>4S2Wo}7sWMy~&3IbiYgbB+%#$2d<$}o|7E~PjL>rzR5b&Jq7pCHn+ -BAu1U=6W7=VqesjRYGc!>wZFzp>JB4@xD;^wu&SY_r(AS0$sR-3ClgkT&R7@Fp+vLr8o)eQb~Pvi_kTn -AkwoUodbK5wLKbzE(ciwC3nrXLGTEzPUiqvVS}~6O1rzR5b&Jq7pCHn+BAu1U=6W7=Vqesj -RYGc!>wZFzp>JB4@xD;^wu&SY_r(HTxP%GIJ;q$9eabMAdM>3n3F}fxeRYe_HJ>2Tvm%`Xdy}<28ig(g -Spg+?&9*`C2(3=%09avzwZKZf-~wC#0000000030|Ns900000JVs&n0Y-K}lZgg^CV{}PwWMy~&3IbiY -gbB+%#$2d<$}o|7E~PjL>rzR5b&Jq7pCHn+BAo+!leIk>g)RqK0VQ|Mwn6X+txo3vSYd;;z)HQ~0$c)J -xP%GIJ;q$9eabMAdM>3n3F}fxeRYe_HJ>2Tvm%|J2rNlD$O59e#ogQsB77jPl+h5j^*S;D -0000000030|Ns900000IVs&n0Y-LwzbZ%vHb4hMwWq1Gz0$sR-3ClgkT&R7@Fp+vLr8o)eQb~Pvi_kTn -AkwoUodbK5wLKbzE(ciwC3nrXLGTEzPUiqvVS}~6O1#Kd;Rz-U=aO9W+B0000000000|NsC0000000000000000 -|NsC0000004P$R^baG*1bV+VxWq1Gz0$sR-3ClgkT&R7@Fp+vLr8o)eQb~Pvi_kTnAkwoUou3FSNjk^^ -qPoT1+zTRnAg`3vXv9d*8d@RXy~6c6G64kxGba`;79(Hi^QCjpnbefDtxpKz(VCaX%3mIP&XB&sB3y@ML2MxM-cip;h4&;$&8SA{& -vly$FvzVnzHf7z~rv`86=_Ka^V5yX|y#`JI2?AZXgbB+%#$2d<$}o|7E~PjL>rzR5b&Jq7pCHn+BAt^E -ynwMZT8l5kSW@l}O=!>^xB4~9n`Dx!RtcK)nwJ0o0000000960{{R30000000000000960|Nj60000P0 -Wo=V*VRL8(2MBXxXk~3-bYTDr0$sR-3ClgkT&R7@Fp+vLr8o)eQb~Pvi_kTnAkwoUos?43+XJhss8OG% -_CC-Q>(otsF+cqN0Qy}ddQ=3E5CUDegbB+%#$2d<$}o|7E~PjL>rzR5b&Jq7pCHn+BAw2RHObCYVynR7 -?IyK)J$&Uqwrx#s+#mjjI7vvS1QY-O000000093000000000MPWo~72Wpe-u0$sR-3ClgkT&R7@Fp+vL -r8o)eQb~Pvi_kTnAkwoUou3FSNjk^^qPoT1+zTRnAg`3vXv9d*8d@RXy~6c6G6G$=gbB+%#$2d<$}o|7 -E~PjL>rzR5b&Jq7pCHn+BAwE2THpkp{2tZ6dMvX9=nqwv1qo2B#cO4}v@%)GJbnNG000000096000000 -000MKb#7#AWpe-u0$sR-3ClgkT&R7@Fp+vLr8o)eQb~Pvi_kTnAkwoUodbK5wLKbzE(ciwC3nrXLGTEz -PUiqvVS}~6O1rzR5b&Jq7pCHn+BAsVs3g5G2eU+-LJ4R_90-H=o -Qq8@u`N?Dm8EmJT^zZ-x0000000960|Nj60000ShX>@L7b8}^L015*2Y!hN5_Bp3Y36tDMM#=e#tGI($ -UA5U3KNx<*C>jc*f- -a%FT=WnpY{00{y;>pKz(VCaX%3mIP&XB&sB3y@ML2MxM-cip;h4&;%isPef35>JJaHJF7}X$37Y21E`B -ySDf%$MYb{T~|f`0000000030|Ns900000Aba`-PQ+acAWo-iKo|5M~K$m}!eub_$g}*CJIJdNZ+@c}} -C`8q6D?CvBfv$so3kRF1PV2}fOp_vjQ6FdFHId|+h;; -t~i_0*|LWuHI04?{jxEqFjWFA`CQ2GiK9iLKbGE6DZmrA4)G`0A&^0p`%?-6n<_oh=3uyKe?FB~$?NZ` -Y_2$)(%G_yBsGnG3;nV&5(KBV0uX$PL@)I=)&*`^S@`8Scoz5#{lyP)a751L0000000000|Nj6000000 -2u)>eQ*>c;Wd;KYcWHEPWpi_7a{vkg^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#t%#3&jHqk=;7%h%D+ -p%U7S;b1RT)c9`>#Kd;Rz-U=aO9W+B0;-8nrZYj|nJFZS6xP`-jES%TjD&(ihCCQ0ZEXBf&c&j000000RR90{{R3001jzxc42I3WI}arWNc+~00{zJxP%GI -J;q$9eabMAdM>3n3F}fxeRYe_HJ>2Tvm%`Xdy}<28ig(gSpg+?&9*`C2(3=%09avzwZKZf-~wC#00000 -00030|Ns9000009V{dMBa$#e1a{vkgUATk^%RR-W| -y2ahx3nF|Vuawki#7NH?S|Q-Q!u2{b0n9D`_KFAY2phA?>-!eGJLd1CM2xPn1?{~t^ylPQjTl%(2ntadXH-EO|kM) +2Suh4M{I9mVQf=$VRU6vV`ybV>qb#7#AWs9y5%bR49t5yk`^qQ9iPjGK_ +bdx&G-+K2Tvq^QH&XuLxUMdwWnpYocxhymQq$W5tE;F{pQrXd&=l*`O?@#x{Qdy?T_k!`1dtF2Q)6glZDC1dmB{9L9(7`0)Rt93 +YLV-HLXe?vTA1;^Q1`ZqBog<<1W#~DWR@5Fier<7RKtBNlIZ8W8=ErUVa!@~ep1{NA*ncPT_!MdwWnpYocu;h5mSj!*Nr%=m1-W|y2ahx3nF|Vuawki#7NH?S|Q-Q!u2{b3PW#hbaG*1bV+2Q +Gs);EPRwKwa +1v8ba_B>T#2Nxy{Ms;pyX<}?;Q*>c;Wv8}kom4HC=;Sf&(4<=Wq5qN1}KEPf^4TQ+tQKiCB(lzYV@u(WYP~UOi+RmL349yXKrm}ZgfOtbYW?1bF6=< +9yuZQ_f<_~3)9CPP+$;5D=2dnwEKV#qFOR4au8HL349yXKq$y +V?lFsX=iRyWp-s@Y-MCtVQh6}LTqVnWK(5fY*ctqbaJ-nfQB3>bs~EXcCXx(drQcb3B`Fx$)^%va$Ar) +C7cLJWMyu2X>@tFh@w8)liI!tnPr$L349yXKq$yV?lFsX=iRyWp-s@ +Y-MCbVRT_aY-w&}Q)OXnRCrKya?Cp*aS5x(2slI`LW*ka!tEh=Unj9m{gY^3Bu@f4kQhO8b7^O8ZDnqB +b3$xsZe&wsVQf@*X=KifHObCYVynR7?IyK)J$&Uqwrx#s+#mjjI7vvS1QZ5SV`ybxis%MV9v +Z(?C=Q*>c;WmI`^W!jrj6Id2jc94hrndMfLayEe1ISdA&%p{mB1!VWk)dNOmcH+jLU9}@hoVT73L6bj% +{Ruz7i&d|nM{06d&@mN4{|!=Qc4c8~Wn@-iY;|SzdQCW4e)%xftOSp9TD)g5B;KO;Krzd=y+`rt_<1!5 +O=WapWMOn+_grIHL}dVysZ~++GXO%cdL7K!mMfn?^M8`ffI?y4B|&p@X=iR$Wn)2eb7^O8R&Qx!Q*>c; +WkPIeZe&wsVQf@*X=L}!-^c24cGHJSotyil?J0`c=Q+$Xq82tfMdwWnpYocu;h5`Sh#^X0AbZX4L%*5q$))*;M@wXI>IJVg&1PPwC}G3`TWsXK7+=WmI`^We8G7 +LQHRGX=4Nc4!$0V0pzZFIpSn)xsYw`yZK|qY&x6i)e}5MB-6;q2t;CIP;zf?W?bA3BNZ=sBHM?<`J6+F +r=AtO->Qnh9#2<9XixKY^D+A)tkj{ruuPIv)HkcEN@S7~%^Wpi^+a%2WlM?zC{WCs8SJ4=$RltJLk +?Nfj|sXiSdmgaJi@wPyW+dHeUQG($LP<3KgX>@L7b8}C@q`S!cyddXS6qyT4I<3h~@Ckt)F_3|RFYr{D +oLU`Eb#!obbU|}-X=iS2Wo~p*Wp-s@Y-MCtVQh6}XTTR6O88h3y&esxy#}YYWXT>HU0TcQYpnhWxEFq3 +2~TiWX>@L7b90?{ASyCnI_4+PSmLJhedoq7=Ft*TNJw4l +quKH=AmNe{U6N(X)PLv0A{kG0bZ~WaL349yXKrm}Zgf^}X=GD$VRU8k$>{F85C6+)vSZlVd4QXtAA2JD +S-;r~4o^#uX?xNOQ)OXnS7~%^Wpi@_Q*>kp04IdejB5_YJg;9E|1`d*r&;qSS3+uh`0YNLave-Imy0X3z7m=HF`&er4LWFq2&q#r@H{&I!mq*@dJpi12bb5xjCg#Yz#qcaA;ve +VQ_O!b#0Zyy~#}iVEJ)s5j^%uEnQ9{n2s|9Fa^ps+HG#`XS5DMY;b5{PIYZeZ)9O}Xt{%a=RmHK6WZ%E +WRm@*ULd%lgGoFTxU-Vi}-aA;vuZDDL|OmAdib7%`wbaH89bX0k8WpfVz35LOoBKkGaY9#cS7Qj{WgyAGcS>>g~&^g7< +u8t6o3szxrX<=@3PGN0j8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_2}WsUY-CPhZDk~5+P{2C +@#>Kv@4tY;$BCg=lGO40qbyjMBe4%@A^HhWa%pX8bZK^FG5w(M*PErPQ*K8));4q9;G_%)IzXn}g(wG0 +3t}BM5{Lay +5>;+)VQpn(MrmbiWOGwxZAoNn1fvw5rj-B|XP@r^w5ufb=C_Ju$l1`nW&GEpSWb-vQ)O*QWPQm(C)8p9 +*(R2SB=5|9lKCV3N0b-?Ol>0MdKRd5P6t+Da%o|1bb-?>B-g{}GTFmo{mAr>kexq=D7-RGP2^0W;fb3W +1_o1UdTDNFlG6hDK5~2WhJ*PG7zYWLxz$!}&%4AY&2YWlsz$Eb5KdujWn@NaWo%?~Q)O*QWS1d>s?i)z +LD2{^84?*=6Qgx+2Ybs0Lm?xkSqB0NLAl2~i-ZdPG( +X<=@3b5mt)No4(ju7iFH2b-u)>&PZdlOljoA7|k;k>s6qoa5|8f~g8rd2nS@d2@7SZ3X}hLvL<$a$#e1 +Np56icm@ItaCKsAX=6`tZ*_EY00{zr*BopKVOvdf#Z(a*_#!wFU3Ux03;g9ee{_%L4yyc<5WIk~G+K)< +!&p-84^3#$9k=>5%bR49t5yk`^qQ9d0000000030|Ns900000EZ*_EVZ)t9HPjGK_baMa-0zKhpP*aQYQxux_Ecpx^NEUk)S+*_x31UrzAKELV#gJ*QW(aS4RRR*c04f+K@?&H~gq>HOrf1lB-q;n)I5N00000 +00000|Ns90000000000000000|NsC0000005KU!mLvL<$a$#e1Q*>c;Wd;Tab7N>_ZDC1d0)N*WYzbjo +O?1Un5gPa+I1ycU3(5=p(otsF+cqN0Qy}ddQ=3E5DH^&Zgg^C +V{}Pm0)N*WYzbjoO?1Un5gPa+I1ycU3(5=p!aE7FCgKP +5?zvI%hZ48!y*6x0000000960|Nj60000SQb#7;AVr*q|00{!GQG)%c@haj^PU86mpK77Hm0);q*o}dPXVlugboY9IEF4 +0000000030|Ns900000EO=WFIY;R&=Y*Tb$bY%tt1#50^cWwX*0z||T#C}Mg4l7|)FOgV7HlKlTV)QF^jC9Bc_;TTOJuR1q5ZA~+FUcMHl3 +{N*}-bdTl^s{A1GP*x(3X3qSP`s!!AU&iohTs=p5b6G#E(KpI+NM!&30000000960|Nj60000GSX>DnA +0009BO=WFKZe(S61_l*xa6)x%WNc+aXlZO@a%FBwZe(S6015(s*BopKVOvdf#Z(a*_#!wFU3Ux03;g9e +e{_%L4yyc>$mV(;bz)!CmQ_M(k?Vd!kfCo{nDM?)_qK{868FUb2?BrD9Bc_;TTOJuR1q5ZA~+FUcMHl3 +{N*}-bdTl^s{8|cleIk>g)RqK0VQ|Mwn6X+txo3vSYd;;z)HQ~0$cz90000000960000000000000000 +00960|Nj60000eda6)x%WNc+gZe(S6015(s*BopKVOvdf#Z(a*_#!wFU3Ux03;g9ee{_%L4yyc>$mV(; +bz)!CmQ_M(k?Vd!kfCo{nDM?)_qK{868FUdf7cvr31M4Jbj4H=8u%hO5nXo+$_xDEI)8MJ<_@a-1ACLT +JsO2B2U!6ncg?mz@CdC==Kxq?gSEg)z2E{|0000000000|NsC0000006Jm94WNc+aZ*FvQVPkYjZe(S6 +015(s*BopKVOvdf#Z(a*_#!wFU3Ux03;g9ee{_%L4yybEdy}<28ig(gSpg+?&9*`C2(3=%09avzwZKZf +-~wC%f7cvr31M4Jbj4H=8u%hO5nXo+$_xDEI)8MJ<_@a-p9m~TI>-W|y2ahx3nF|Vuawki#7NH?S|Q-Q +!u2{b0000000000|NsC0000005@L03WNc+uX>@L7b8|^g)RqK0VQ|Mwn6X+txo3vSYd;;z)HQ~0$czI0`+VYVk7oBr%DNv+($;q`HHK! +gIHa)*%m(-e#9sm3ZsHT^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1RsaA1000000RR90{{R3000000 +000000RR90{{R3001abrZgg^CV{}PwWMy~&3Ic!E9Bc_;TTOJuR1q5ZA~+FUcMHl3{N*}-bdTl^s{Ee_ +EJ-@Z0;0Ob-P{Wzd?2rs)M&&=&l*}G;Jw22Ix+zT12ZQUEfynR=<}s>(3#Yfw5?Hn`0e2WLW;7y%6BdR +0000000030{{R300000DbY*gFX>MU`Np56icmN6lJ?lFX3Sj7m#S0l<6lWWUs|%1)CkG9>cz4~pa1P{= +Xc_Cg)w39@m$R6qOEzWQ+NTC@=;5%bR49t5yk`^qQ9d0000000030|Nj60000000000000030|Ns90 +00008O=WFUbYXL71_uapV`ybdLhd4<{rvwxL00000000300000000007XJu|>b7gY?3Ic!E9Bc_;TTOJu +R1q5ZA~+FUcMHl3{N*}-bdTl^s{Ee_EJ-@Z0;0Ob-P{Wzd?2rs)M&&=&l*}G;Jw22Ix+%(*BopKVOvdf +#Z(a*_#!wFU3Ux03;g9ee{_%L4yydpZ(864p8Ouwzj`dQ1n3V{mIVn=ti@|(ytFb|&pdtr0000000030 +{{R3000007Vs&n0Y-Mu*3Ic!E9Bc_;TTOJuR1q5ZA~+FUcMHl3{N*}-bdTl^s{8|cleIk>g)RqK0VQ|M +wn6X+txo3vSYd;;z)HQ~0$c)r*BopKVOvdf#Z(a*_#!wFU3Ux03;g9ee{_%L4yyc#EyWIw5tuitmKJJ% +2ayy(uOkc!h{i026J1fL`zH7R0000000030|Ns9000009cWHEPWpi_7a{vkg^=uPjBlbC`N(qzPM@Gr{ +imSMTSY5T*7C#t%#3&jHqk=;7%h%D+p%U7S;b1RT)c9`>#Kd;Rz-U=aO9W+B0*xGr3o1q_jBKlds*$fU(OOI)L(f|Me000000RR90{{R30 +01Icz4~pa1P{=r>OF|0}@Y#k~NrxRcQq+ +F$P2q2)nlUE64L7%3W7R0000000000|NsC0000003UqmJWm9=`bY*P<>7J73J3yCzk$#1)IEB9}O*pr- +e%zuW2Pj0_vj91Z-(ya{vkgn<_oh=3uyKe?FB~ +$?NZ`Y_2$)(%G_yBsGnG3;nV&r!Z9lE%{u?@QI^EqCb}2Q7OO^w+`_q*ddTXmHSf)0-Gv5(&k{eX@5SI +R>|w{s%)+}o6^~`ha@$PehdAwF%kr)wgM1*ibOBQGZBuk%bY%tu33q99Ze??GWpe-u0`+VYVk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3ZsHT +^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1RswxtH&^#{m+gDaY!wQq^-V2CHXxVXC>uE<{|l+T*PD;) +VFCP7wPq#=<|G-oQP|YlF^@fu07kb?cmYX}g@OP80000000960|Nj60000hYZgyd8X=FlmZe(m_a{vhf +f7cvr31M4Jbj4H=8u%hO5nXo+$_xDEI)8MJ<_@a-1ACLTJsO2B2U!6ncg?mz@CdC==Kxq?gSEg)z2E{| +0000000000|NsC00000031e?=baG*1baMa-0)N*WYzbjoO?1Un5gPa+I1ycU3(5=p +000000096000000000 -----END STRICT TYPE LIB----- diff --git a/stl/RGBStorage@0.11.0.stl b/stl/RGBStorage@0.11.0.stl index 07a9b9d5..64eced5d 100644 Binary files a/stl/RGBStorage@0.11.0.stl and b/stl/RGBStorage@0.11.0.stl differ diff --git a/stl/RGBStorage@0.11.0.sty b/stl/RGBStorage@0.11.0.sty index 7d8d86b3..fb379b2f 100644 --- a/stl/RGBStorage@0.11.0.sty +++ b/stl/RGBStorage@0.11.0.sty @@ -1,5 +1,5 @@ {- - Id: stl:zmXtAwkp-kSXdrCC-VwhgOsx-xaqYeeN-83jRn4_-iANSAwg#salon-explain-teacher + Id: stl:rYIkl4Ol-15bjw4Y-0bXJ~7o-2o~3CkY-HFE~Bgi-EFSiSc8#survive-immune-twin Name: RGBStorage Version: 0.11.0 Description: RGB storage library @@ -11,15 +11,6 @@ @context typelib RGBStorage -import RGBStd#reverse-diana-mirage - use PubWitness#paper-visa-storm - use OutputAssignmentRevealedValue#alarm-eagle-equal - use OpWitness#owner-water-pyramid - use OutputAssignmentRevealedData#equator-quiet-driver - use GlobalOut#madonna-heart-india - use OutputAssignmentVoidState#harbor-club-ritual - use SealWitness#polite-visitor-laptop - import BPCore#juliet-super-dominic use TapretNodePartner#roger-member-educate use TapretProof#marco-border-sample @@ -39,7 +30,13 @@ import CommitVerify#violet-panther-herbert use MerkleBlock#pegasus-delta-eddie use TreeNode#kansas-scarlet-ricardo -import RGBCommit#support-iris-depend +import RGBLogic#motel-balance-sofia + use DbcProof#needle-change-forest + use WitnessPos#cliff-enrico-nominal + use Layer1#camilla-basket-justin + use WitnessOrd#condor-george-actor + +import RGBCommit#jimmy-clark-canary use BundleId#carmen-farmer-diesel use AssignRevealedDataBlindSealTxPtr#shake-couple-pogo use GlobalDetails#milk-machine-amigo @@ -60,12 +57,12 @@ import RGBCommit#support-iris-depend use GlobalValues#kilo-proxy-symbol use GenesisSchema#jasmine-product-totem use AssignVoidStateBlindSealTxid#penguin-drink-diego - use TransitionBundle#swim-cartoon-sting + use KnownTransition#partner-madam-lecture use MetaType#quebec-mission-quota use GlobalStateSchema#zipper-pioneer-visa - use InputOpids#juliet-focus-proton use MetaDetails#arena-janet-prepare use AssignmentType#secret-penguin-limit + use TransitionBundle#darwin-system-trick use AssignmentsBlindSealTxPtr#sector-toronto-bikini use Opout#yoga-samba-karma use AssignVecAssignRevealedValueBlindSealTxid#mouse-village-bravo @@ -112,11 +109,14 @@ import AluVM#jargon-gorilla-poetic use IsaSeg#size-shake-olga use LibSeg#lemon-philips-horse -import RGBLogic#colombo-famous-erosion - use DbcProof#needle-change-forest - use WitnessPos#cliff-enrico-nominal - use Layer1#camilla-basket-justin - use WitnessOrd#condor-george-actor +import RGBStd#stick-tornado-absorb + use PubWitness#paper-visa-storm + use OutputAssignmentRevealedValue#alarm-eagle-equal + use OpWitness#owner-water-pyramid + use OutputAssignmentRevealedData#equator-quiet-driver + use GlobalOut#madonna-heart-india + use OutputAssignmentVoidState#harbor-club-ritual + use SealWitness#polite-visitor-laptop import StrictTypes#henry-heart-survive use VariantName#theory-austin-before @@ -180,7 +180,7 @@ data MemIndex : opBundleChildrenIndex {RGBCommit.OpId -> ^ ..0xffffffff , contractIndex {RGBCommit.ContractId -> ContractIndex} , terminalIndex {BPCore.SecretSeal -> ^ ..0xffffffff {RGBCommit.Opout ^ ..0xffffff}} -@mnemonic(nylon-studio-singer) +@mnemonic(society-pluto-cigar) data MemStash : schemata {RGBCommit.SchemaId -> ^ ..0xff RGBCommit.Schema} , geneses {RGBCommit.ContractId -> RGBCommit.Genesis} , bundles {RGBCommit.BundleId -> ^ ..0xffffffff RGBCommit.TransitionBundle} diff --git a/stl/Transfer.vesper b/stl/Transfer.vesper index 3cdaaf47..49d43ce0 100644 --- a/stl/Transfer.vesper +++ b/stl/Transfer.vesper @@ -12,7 +12,7 @@ commitment ConsignmentId, hasher SHA256, tagged urn:lnp-bp:rgb:consignment#2024- serialized Bool serialized ContractId serialized DiscloseHash - set DiscloseHash, len 0..MAX32 + list DiscloseHash, len 0..MAX32 element DiscloseHash map SecretSeals, len 0..MAX16 mapKey BundleId @@ -80,7 +80,7 @@ rec Consignmenttrue rec confidentialSeal, tag 1 bytes seal, len 32, aka SecretSeal bytes state, len 0..MAX16, aka RevealedData - set bundles, len 0..MAX32 + list bundles, len 0..MAX32 rec WitnessBundle union pubWitness, PubWitness bytes txid, len 32, wrapped, aka Txid, tag 0 @@ -102,73 +102,76 @@ rec Consignmenttrue is lockTime, U32, aka LockTime rec bundle, TransitionBundle map inputMap, len 1..MAX16 - is key, U32, aka Vout - set value, len 1..MAX16, aka InputOpids - bytes element, len 32, aka OpId - map knownTransitions, len 1..MAX16 - bytes key, len 32, aka OpId - rec value, Transition - is ffv, U16, aka Ffv - bytes contractId, len 32, aka ContractId - is nonce, U64 - is transitionType, U16, aka TransitionType - map metadata, len 0..MAX8, aka Metadata - is key, U16, aka MetaType - bytes value, len 0..MAX16, aka MetaValue - map globals, len 0..MAX8, aka GlobalState - is key, U16, aka GlobalStateType - list value, len 1..MAX16, aka GlobalValues - bytes element, len 0..MAX16, aka RevealedData - set inputs, len 1..MAX16, aka Inputs - rec Opout - bytes op, len 32, aka OpId - is ty, U16, aka AssignmentType - is no, U16 - map assignments, len 0..MAX16, aka AssignmentsBlindSealTxPtr - is key, U16, aka AssignmentType - union value, TypedAssignsBlindSealTxPtr - list declarative, len 1..MAX16, wrapped, aka AssignVecAssignVoidStateBlindSealTxPtr, tag 0 - union AssignVoidStateBlindSealTxPtr - rec revealed, tag 0 - rec seal, BlindSealTxPtr - union txid, TxPtr - is witnessTx, Unit, tag 0 - bytes txid, len 32, wrapped, aka Txid, tag 1 - is vout, U32, aka Vout - is blinding, U64 - is state, Unit, aka VoidState - rec confidentialSeal, tag 1 - bytes seal, len 32, aka SecretSeal - is state, Unit, aka VoidState - list fungible, len 1..MAX16, wrapped, aka AssignVecAssignRevealedValueBlindSealTxPtr, tag 1 - union AssignRevealedValueBlindSealTxPtr - rec revealed, tag 0 - rec seal, BlindSealTxPtr - union txid, TxPtr - is witnessTx, Unit, tag 0 - bytes txid, len 32, wrapped, aka Txid, tag 1 - is vout, U32, aka Vout - is blinding, U64 - union state, FungibleState, aka RevealedValue - is bits64, U64, wrapped, tag 0 - rec confidentialSeal, tag 1 - bytes seal, len 32, aka SecretSeal - union state, FungibleState, aka RevealedValue - is bits64, U64, wrapped, tag 0 - list structured, len 1..MAX16, wrapped, aka AssignVecAssignRevealedDataBlindSealTxPtr, tag 2 - union AssignRevealedDataBlindSealTxPtr - rec revealed, tag 0 - rec seal, BlindSealTxPtr - union txid, TxPtr - is witnessTx, Unit, tag 0 - bytes txid, len 32, wrapped, aka Txid, tag 1 - is vout, U32, aka Vout - is blinding, U64 - bytes state, len 0..MAX16, aka RevealedData - rec confidentialSeal, tag 1 - bytes seal, len 32, aka SecretSeal - bytes state, len 0..MAX16, aka RevealedData - bytes some, len 64, option, wrapped, aka Signature, tag 1 + rec key, Opout + bytes op, len 32, aka OpId + is ty, U16, aka AssignmentType + is no, U16 + bytes value, len 32, aka OpId + list knownTransitions, len 1..MAX16 + rec KnownTransition + bytes opid, len 32, aka OpId + rec transition, Transition + is ffv, U16, aka Ffv + bytes contractId, len 32, aka ContractId + is nonce, U64 + is transitionType, U16, aka TransitionType + map metadata, len 0..MAX8, aka Metadata + is key, U16, aka MetaType + bytes value, len 0..MAX16, aka MetaValue + map globals, len 0..MAX8, aka GlobalState + is key, U16, aka GlobalStateType + list value, len 1..MAX16, aka GlobalValues + bytes element, len 0..MAX16, aka RevealedData + set inputs, len 1..MAX16, aka Inputs + rec Opout + bytes op, len 32, aka OpId + is ty, U16, aka AssignmentType + is no, U16 + map assignments, len 0..MAX16, aka AssignmentsBlindSealTxPtr + is key, U16, aka AssignmentType + union value, TypedAssignsBlindSealTxPtr + list declarative, len 1..MAX16, wrapped, aka AssignVecAssignVoidStateBlindSealTxPtr, tag 0 + union AssignVoidStateBlindSealTxPtr + rec revealed, tag 0 + rec seal, BlindSealTxPtr + union txid, TxPtr + is witnessTx, Unit, tag 0 + bytes txid, len 32, wrapped, aka Txid, tag 1 + is vout, U32, aka Vout + is blinding, U64 + is state, Unit, aka VoidState + rec confidentialSeal, tag 1 + bytes seal, len 32, aka SecretSeal + is state, Unit, aka VoidState + list fungible, len 1..MAX16, wrapped, aka AssignVecAssignRevealedValueBlindSealTxPtr, tag 1 + union AssignRevealedValueBlindSealTxPtr + rec revealed, tag 0 + rec seal, BlindSealTxPtr + union txid, TxPtr + is witnessTx, Unit, tag 0 + bytes txid, len 32, wrapped, aka Txid, tag 1 + is vout, U32, aka Vout + is blinding, U64 + union state, FungibleState, aka RevealedValue + is bits64, U64, wrapped, tag 0 + rec confidentialSeal, tag 1 + bytes seal, len 32, aka SecretSeal + union state, FungibleState, aka RevealedValue + is bits64, U64, wrapped, tag 0 + list structured, len 1..MAX16, wrapped, aka AssignVecAssignRevealedDataBlindSealTxPtr, tag 2 + union AssignRevealedDataBlindSealTxPtr + rec revealed, tag 0 + rec seal, BlindSealTxPtr + union txid, TxPtr + is witnessTx, Unit, tag 0 + bytes txid, len 32, wrapped, aka Txid, tag 1 + is vout, U32, aka Vout + is blinding, U64 + bytes state, len 0..MAX16, aka RevealedData + rec confidentialSeal, tag 1 + bytes seal, len 32, aka SecretSeal + bytes state, len 0..MAX16, aka RevealedData + bytes some, len 64, option, wrapped, aka Signature, tag 1 rec schema, Schema is ffv, U16, aka Ffv ascii name, aka TypeName, first AlphaCapsLodash, rest AlphaNumLodash, len 1..100