diff --git a/src/bin/rgbcore-stl.rs b/src/bin/rgbcore-stl.rs index 44d61e36..45908e92 100644 --- a/src/bin/rgbcore-stl.rs +++ b/src/bin/rgbcore-stl.rs @@ -36,21 +36,38 @@ use strict_types::SystemBuilder; fn main() { let (format, dir) = parse_args(); - let rgb = rgbcore::stl::rgb_core_stl(); + let rgb_commit = rgbcore::stl::rgb_commit_stl(); + let rgb_logic = rgbcore::stl::rgb_logic_stl(); - rgb.serialize( - format, - dir.as_ref(), - "0.1.0", - Some( - " - Description: Consensus layer for RGB smart contracts + rgb_commit + .serialize( + format, + dir.as_ref(), + "0.1.0", + Some( + " + Description: Consensus commitment layer for RGB smart contracts Author: Dr Maxim Orlovsky Copyright (C) 2023-2024 LNP/BP Standards Association. All rights reserved. License: Apache-2.0", - ), - ) - .expect("unable to write to the file"); + ), + ) + .expect("unable to write to the file"); + + rgb_logic + .serialize( + format, + dir.as_ref(), + "0.1.0", + Some( + " + Description: Consensus logic layer for RGB smart contracts + Author: Dr Maxim Orlovsky + Copyright (C) 2023-2024 LNP/BP Standards Association. All rights reserved. + License: Apache-2.0", + ), + ) + .expect("unable to write to the file"); let std = std_stl(); let tx = bp_tx_stl(); @@ -60,7 +77,9 @@ fn main() { let vm = aluvm_stl(); let sys = SystemBuilder::new() - .import(rgb) + .import(rgb_logic) + .unwrap() + .import(rgb_commit) .unwrap() .import(vm) .unwrap() @@ -95,7 +114,7 @@ Schema vesper lexicon=types+commitments .unwrap(); let layout = Schema::commitment_layout(); writeln!(file, "{layout}").unwrap(); - let tt = sys.type_tree("RGB.Schema").unwrap(); + let tt = sys.type_tree("RGBCommit.Schema").unwrap(); writeln!(file, "{tt}").unwrap(); let mut file = fs::File::create(format!("{dir}/Transition.vesper")).unwrap(); @@ -114,9 +133,9 @@ Transition vesper lexicon=types+commitments .unwrap(); let layout = Transition::commitment_layout(); writeln!(file, "{layout}").unwrap(); - let tt = sys.type_tree("RGB.OpCommitment").unwrap(); + let tt = sys.type_tree("RGBCommit.OpCommitment").unwrap(); writeln!(file, "{tt}").unwrap(); - let tt = sys.type_tree("RGB.Transition").unwrap(); + let tt = sys.type_tree("RGBCommit.Transition").unwrap(); writeln!(file, "{tt}").unwrap(); let mut file = fs::File::create(format!("{dir}/AnchoredBundle.vesper")).unwrap(); @@ -135,8 +154,8 @@ Bundles vesper lexicon=types+commitments .unwrap(); let layout = TransitionBundle::commitment_layout(); writeln!(file, "{layout}").unwrap(); - let tt = sys.type_tree("RGB.DbcProof").unwrap(); + let tt = sys.type_tree("RGBLogic.DbcProof").unwrap(); writeln!(file, "{tt}").unwrap(); - let tt = sys.type_tree("RGB.TransitionBundle").unwrap(); + let tt = sys.type_tree("RGBCommit.TransitionBundle").unwrap(); writeln!(file, "{tt}").unwrap(); } diff --git a/src/contract/assignments.rs b/src/contract/assignments.rs index d89f5c42..e2bda5ef 100644 --- a/src/contract/assignments.rs +++ b/src/contract/assignments.rs @@ -33,7 +33,7 @@ use super::ExposedState; use crate::contract::seal::GenesisSeal; use crate::{ AssignmentType, ExposedSeal, GraphSeal, RevealedAttach, RevealedData, RevealedValue, - SecretSeal, StateType, VoidState, XChain, LIB_NAME_RGB, + SecretSeal, StateType, VoidState, XChain, LIB_NAME_RGB_COMMIT, }; #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Display, Error)] @@ -52,7 +52,7 @@ pub type AssignAttach = Assign; #[derive(Clone, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] #[strict_type( - lib = LIB_NAME_RGB, + lib = LIB_NAME_RGB_COMMIT, tags = custom, dumb = { Self::Confidential { seal: strict_dumb!(), state: strict_dumb!(), lock: default!() } } )] @@ -285,7 +285,7 @@ impl Assign { #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, tags = custom, dumb = Self::Declarative(strict_dumb!()))] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, tags = custom, dumb = Self::Declarative(strict_dumb!()))] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -577,7 +577,7 @@ impl TypedAssigns { #[wrapper(Deref)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), diff --git a/src/contract/attachment.rs b/src/contract/attachment.rs index d791ae34..b538c1b0 100644 --- a/src/contract/attachment.rs +++ b/src/contract/attachment.rs @@ -31,13 +31,15 @@ use commit_verify::{CommitId, CommitmentId, Conceal, DigestExt, Sha256}; use strict_encoding::StrictEncode; use super::{ConfidentialState, ExposedState}; -use crate::{impl_serde_baid64, ConcealedState, MediaType, RevealedState, StateType, LIB_NAME_RGB}; +use crate::{ + impl_serde_baid64, ConcealedState, MediaType, RevealedState, StateType, LIB_NAME_RGB_COMMIT, +}; /// Unique data attachment identifier #[derive(Wrapper, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, From)] #[wrapper(Deref, BorrowSlice, Hex, Index, RangeOps)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] pub struct AttachId( #[from] #[from([u8; 32])] @@ -65,7 +67,7 @@ impl_serde_baid64!(AttachId); #[derive(Clone, PartialOrd, Ord, PartialEq, Eq, Hash, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = ConcealedAttach)] #[cfg_attr( @@ -126,7 +128,7 @@ impl Conceal for RevealedAttach { #[derive(Wrapper, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, From)] #[wrapper(Deref, BorrowSlice, Hex, Index, RangeOps)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), diff --git a/src/contract/bundle.rs b/src/contract/bundle.rs index 2e374c18..afca21df 100644 --- a/src/contract/bundle.rs +++ b/src/contract/bundle.rs @@ -29,7 +29,7 @@ use bp::Vout; use commit_verify::{mpc, CommitEncode, CommitEngine, CommitId, CommitmentId, DigestExt, Sha256}; use strict_encoding::{StrictDumb, StrictEncode}; -use crate::{OpId, Transition, LIB_NAME_RGB}; +use crate::{OpId, Transition, LIB_NAME_RGB_COMMIT}; pub type Vin = Vout; @@ -38,7 +38,7 @@ pub type Vin = Vout; #[derive(Wrapper, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, From)] #[wrapper(Deref, BorrowSlice, Display, Hex, Index, RangeOps)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -70,7 +70,7 @@ impl From for BundleId { #[wrapper(Deref)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -102,7 +102,7 @@ impl<'a> IntoIterator for &'a InputMap { #[derive(Clone, PartialEq, Eq, Debug, From)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), diff --git a/src/contract/commit.rs b/src/contract/commit.rs index 3a907ee4..544996ac 100644 --- a/src/contract/commit.rs +++ b/src/contract/commit.rs @@ -41,14 +41,14 @@ use crate::{ ConcealedData, ConcealedState, ConfidentialState, DataState, ExposedSeal, ExposedState, Extension, ExtensionType, Ffv, Genesis, GlobalState, GlobalStateType, Operation, PedersenCommitment, Redeemed, SchemaId, SecretSeal, Transition, TransitionBundle, - TransitionType, TypedAssigns, XChain, LIB_NAME_RGB, + TransitionType, TypedAssigns, XChain, LIB_NAME_RGB_COMMIT, }; /// Unique contract identifier equivalent to the contract genesis commitment #[derive(Wrapper, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, From)] #[wrapper(Deref, BorrowSlice, Hex, Index, RangeOps)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] pub struct ContractId( #[from] #[from([u8; 32])] @@ -101,7 +101,7 @@ impl_serde_baid64!(ContractId); #[wrapper(Deref, BorrowSlice, Hex, Index, RangeOps)] #[display(Self::to_hex)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -138,7 +138,7 @@ impl OpId { #[wrapper(Deref, BorrowSlice, Hex, Index, RangeOps)] #[display(Self::to_hex)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -171,7 +171,7 @@ impl DiscloseHash { #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] pub struct AssignmentIndex { pub ty: AssignmentType, pub pos: u16, @@ -183,7 +183,7 @@ impl AssignmentIndex { #[derive(Clone, Eq, PartialEq, Hash, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = DiscloseHash)] pub struct OpDisclose { @@ -196,7 +196,7 @@ pub struct OpDisclose { #[derive(Clone, Eq, PartialEq, Hash, Debug)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = DiscloseHash)] pub struct BundleDisclosure { @@ -230,7 +230,7 @@ impl TransitionBundle { #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] pub struct BaseCommitment { pub flags: ReservedBytes<1, 0>, pub schema_id: SchemaId, @@ -243,7 +243,7 @@ pub struct BaseCommitment { #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, tags = custom, dumb = Self::Transition(strict_dumb!(), strict_dumb!()))] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, tags = custom, dumb = Self::Transition(strict_dumb!(), strict_dumb!()))] pub enum TypeCommitment { #[strict_type(tag = 0)] Genesis(BaseCommitment), @@ -257,7 +257,7 @@ pub enum TypeCommitment { #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = OpId)] pub struct OpCommitment { diff --git a/src/contract/contract.rs b/src/contract/contract.rs deleted file mode 100644 index 7fec593a..00000000 --- a/src/contract/contract.rs +++ /dev/null @@ -1,278 +0,0 @@ -// RGB Core Library: consensus layer for RGB smart contracts. -// -// SPDX-License-Identifier: Apache-2.0 -// -// Written in 2019-2024 by -// Dr Maxim Orlovsky -// -// Copyright (C) 2019-2024 LNP/BP Standards Association. All rights reserved. -// Copyright (C) 2019-2024 Dr Maxim Orlovsky. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Extraction of contract state. - -use std::cmp::Ordering; -use std::fmt::Debug; -use std::hash::Hash; -use std::num::ParseIntError; -use std::str::FromStr; - -use amplify::hex; -use strict_encoding::{StrictDecode, StrictDumb, StrictEncode}; - -use crate::{ - AssignmentType, DataState, ExposedSeal, ExposedState, OpId, WitnessAnchor, XChain, XOutputSeal, - XWitnessId, LIB_NAME_RGB, -}; - -#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, Display)] -#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] -#[cfg_attr( - feature = "serde", - derive(Serialize, Deserialize), - serde(crate = "serde_crate", rename_all = "camelCase") -)] -#[display("{op}/{ty}/{no}")] -/// RGB contract operation output pointer, defined by the operation ID and -/// output number. -pub struct Opout { - pub op: OpId, - pub ty: AssignmentType, - pub no: u16, -} - -impl Opout { - pub fn new(op: OpId, ty: AssignmentType, no: u16) -> Opout { Opout { op, ty, no } } -} - -#[derive(Clone, Eq, PartialEq, Debug, Display, Error, From)] -#[display(inner)] -pub enum OpoutParseError { - #[from] - InvalidNodeId(hex::Error), - - InvalidType(ParseIntError), - - InvalidOutputNo(ParseIntError), - - /// invalid operation outpoint format ('{0}') - #[display(doc_comments)] - WrongFormat(String), -} - -impl FromStr for Opout { - type Err = OpoutParseError; - - fn from_str(s: &str) -> Result { - let mut split = s.split('/'); - match (split.next(), split.next(), split.next(), split.next()) { - (Some(op), Some(ty), Some(no), None) => Ok(Opout { - op: op.parse()?, - ty: ty.parse().map_err(OpoutParseError::InvalidType)?, - no: no.parse().map_err(OpoutParseError::InvalidOutputNo)?, - }), - _ => Err(OpoutParseError::WrongFormat(s.to_owned())), - } - } -} - -/// Trait used by contract state. Unlike [`ExposedState`] it doesn't allow -/// concealment of the state, i.e. may contain incomplete data without blinding -/// factors, asset tags etc. -pub trait KnownState: Debug + StrictDumb + StrictEncode + StrictDecode + Eq + Clone {} -impl KnownState for S {} - -impl KnownState for () {} -impl KnownState for DataState {} - -#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Display, From)] -#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, tags = custom)] -#[cfg_attr( - feature = "serde", - derive(Serialize, Deserialize), - serde(crate = "serde_crate", rename_all = "camelCase", untagged) -)] -pub enum AssignmentWitness { - #[display("~")] - #[strict_type(tag = 0, dumb)] - Absent, - - #[from] - #[display(inner)] - #[strict_type(tag = 1)] - Present(XWitnessId), -} - -impl From> for AssignmentWitness { - fn from(value: Option) -> Self { - match value { - None => AssignmentWitness::Absent, - Some(id) => AssignmentWitness::Present(id), - } - } -} - -#[derive(Copy, Clone, Eq, Debug)] -#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] -#[cfg_attr( - feature = "serde", - derive(Serialize, Deserialize), - serde(crate = "serde_crate", rename_all = "camelCase") -)] -pub struct OutputAssignment { - pub opout: Opout, - pub seal: XOutputSeal, - pub state: State, - pub witness: AssignmentWitness, -} - -impl PartialEq for OutputAssignment { - fn eq(&self, other: &Self) -> bool { - if self.opout == other.opout && - (self.seal != other.seal || - self.witness != other.witness || - self.state != other.state) - { - panic!( - "RGB was provided with an updated operation using different witness transaction. \ - This may happen for instance when some ephemeral state (like a commitment or \ - HTLC transactions in the lightning channels) is added to the stash.\nThis error \ - means the software uses RGB stash in an invalid way and has business logic bug \ - which has to be fixed.\nOperation in stash: {:?}\nNew operation: {:?}\n", - self, other - ) - } - self.opout == other.opout - } -} - -impl PartialOrd for OutputAssignment { - fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } -} - -impl Ord for OutputAssignment { - fn cmp(&self, other: &Self) -> Ordering { - if self == other { - return Ordering::Equal; - } - self.opout.cmp(&other.opout) - } -} - -impl OutputAssignment { - /// # Panics - /// - /// If the processing is done on invalid stash data, the seal is - /// witness-based and the anchor chain doesn't match the seal chain. - pub fn with_witness( - seal: XChain, - witness_id: XWitnessId, - state: State, - opid: OpId, - ty: AssignmentType, - no: u16, - ) -> Self { - OutputAssignment { - opout: Opout::new(opid, ty, no), - seal: seal.try_to_output_seal(witness_id).expect( - "processing contract from unverified/invalid stash: witness seal chain doesn't \ - match anchor's chain", - ), - state, - witness: witness_id.into(), - } - } - - /// # Panics - /// - /// If the processing is done on invalid stash data, the seal is - /// witness-based and the anchor chain doesn't match the seal chain. - pub fn with_no_witness( - seal: XChain, - state: State, - opid: OpId, - ty: AssignmentType, - no: u16, - ) -> Self { - OutputAssignment { - opout: Opout::new(opid, ty, no), - seal: seal.to_output_seal().expect( - "processing contract from unverified/invalid stash: seal must have txid \ - information since it comes from genesis or extension", - ), - state, - witness: AssignmentWitness::Absent, - } - } - - pub fn transmute(self) -> OutputAssignment - where S: From { - OutputAssignment { - opout: self.opout, - seal: self.seal, - state: self.state.into(), - witness: self.witness, - } - } -} - -#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] -#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] -#[cfg_attr( - feature = "serde", - derive(Serialize, Deserialize), - serde(crate = "serde_crate", rename_all = "camelCase") -)] -pub struct GlobalOrd { - pub witness_anchor: Option, - pub idx: u16, -} - -impl PartialOrd for GlobalOrd { - fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } -} - -impl Ord for GlobalOrd { - fn cmp(&self, other: &Self) -> Ordering { - if self == other { - return Ordering::Equal; - } - match (self.witness_anchor, &other.witness_anchor) { - (None, None) => self.idx.cmp(&other.idx), - (None, Some(_)) => Ordering::Less, - (Some(_), None) => Ordering::Greater, - (Some(ord1), Some(ord2)) if ord1 == *ord2 => self.idx.cmp(&other.idx), - (Some(ord1), Some(ord2)) => ord1.cmp(ord2), - } - } -} - -impl GlobalOrd { - pub fn with_anchor(ord_txid: WitnessAnchor, idx: u16) -> Self { - GlobalOrd { - witness_anchor: Some(ord_txid), - idx, - } - } - pub fn genesis(idx: u16) -> Self { - GlobalOrd { - witness_anchor: None, - idx, - } - } -} diff --git a/src/contract/data.rs b/src/contract/data.rs index 95214184..1ad420b0 100644 --- a/src/contract/data.rs +++ b/src/contract/data.rs @@ -31,13 +31,13 @@ use commit_verify::{CommitId, CommitmentId, Conceal, DigestExt, Sha256}; use strict_encoding::{StrictSerialize, StrictType}; use super::{ConfidentialState, ExposedState}; -use crate::{ConcealedState, RevealedState, StateType, LIB_NAME_RGB}; +use crate::{ConcealedState, RevealedState, StateType, LIB_NAME_RGB_COMMIT}; /// Struct using for storing Void (i.e. absent) state #[derive(Copy, Clone, Debug, PartialOrd, Ord, PartialEq, Eq, Hash, Display, Default)] #[display("void")] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(crate = "serde_crate"))] pub struct VoidState(()); @@ -61,7 +61,7 @@ impl Conceal for VoidState { #[display(LowerHex)] #[wrapper(Deref, AsSlice, BorrowSlice, Hex)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] pub struct DataState(SmallBlob); impl StrictSerialize for DataState {} @@ -95,7 +95,7 @@ mod _serde { #[derive(Clone, Eq, PartialEq, Hash)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = ConcealedData)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(crate = "serde_crate"))] @@ -166,7 +166,7 @@ impl Debug for RevealedData { #[derive(Wrapper, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, From)] #[wrapper(Deref, BorrowSlice, Hex, Index, RangeOps)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, rename = "ConcealedData")] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, rename = "ConcealedData")] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), diff --git a/src/contract/fungible.rs b/src/contract/fungible.rs index 77286deb..4219572d 100644 --- a/src/contract/fungible.rs +++ b/src/contract/fungible.rs @@ -56,12 +56,14 @@ use strict_encoding::{ }; use super::{ConfidentialState, ExposedState}; -use crate::{schema, AssignmentType, ConcealedState, RevealedState, StateType, LIB_NAME_RGB}; +use crate::{ + schema, AssignmentType, ConcealedState, RevealedState, StateType, LIB_NAME_RGB_COMMIT, +}; #[derive(Wrapper, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, From)] #[wrapper(Deref, BorrowSlice, Hex, Index, RangeOps)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -103,7 +105,7 @@ impl AssetTag { #[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, Display, From)] #[display(inner)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, tags = custom)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, tags = custom)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -176,7 +178,7 @@ pub enum BlindingParseError { #[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, Display)] #[display(Self::to_hex)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -281,7 +283,7 @@ impl TryFrom for BlindingFactor { /// Consists of the 64-bit value and #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, rename = "RevealedFungible")] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, rename = "RevealedFungible")] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(crate = "serde_crate"))] pub struct RevealedValue { /// Original value in smallest indivisible units @@ -354,7 +356,7 @@ impl Ord for RevealedValue { #[derive(Wrapper, Copy, Clone, Eq, PartialEq, Hash, Debug, From)] #[wrapper(Deref, FromStr, Display, LowerHex)] #[derive(StrictType)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -407,7 +409,7 @@ impl CommitVerify for PedersenCommitment { /// A dumb placeholder for a future bulletproofs. #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -429,7 +431,7 @@ impl Default for NoiseDumb { /// the value do not overflow on arithmetic operations with the commitments. #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] #[derive(StrictType)] -#[strict_type(lib = LIB_NAME_RGB, tags = custom)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, tags = custom)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -469,7 +471,7 @@ impl CommitmentProtocol for PedersenProtocol {} /// See also revealed version [`RevealedValue`]. #[derive(Clone, Copy, Eq, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, rename = "ConcealedFungible")] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, rename = "ConcealedFungible")] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), diff --git a/src/contract/global.rs b/src/contract/global.rs index 138a311c..dbcc9672 100644 --- a/src/contract/global.rs +++ b/src/contract/global.rs @@ -27,13 +27,13 @@ use amplify::confinement::{Confined, TinyOrdMap, U16}; use amplify::{confinement, Wrapper}; use strict_encoding::StrictDumb; -use crate::{schema, DataState, LIB_NAME_RGB}; +use crate::{schema, DataState, LIB_NAME_RGB_COMMIT}; #[derive(Wrapper, WrapperMut, Clone, PartialEq, Eq, Hash, Debug, From)] #[wrapper(Deref)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -60,7 +60,7 @@ impl IntoIterator for GlobalValues { #[wrapper(Deref)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), diff --git a/src/contract/meta.rs b/src/contract/meta.rs index e06fe35d..b8246a4c 100644 --- a/src/contract/meta.rs +++ b/src/contract/meta.rs @@ -26,7 +26,7 @@ use amplify::confinement::{SmallBlob, TinyOrdMap}; use amplify::{confinement, Wrapper}; use commit_verify::StrictHash; -use crate::{schema, LIB_NAME_RGB}; +use crate::{schema, LIB_NAME_RGB_COMMIT}; #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Display, Error, From)] #[display(doc_comments)] @@ -46,7 +46,7 @@ pub enum MetadataError { #[wrapper(Deref, AsSlice, BorrowSlice, Hex)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] pub struct MetaValue(SmallBlob); #[cfg(feature = "serde")] @@ -77,7 +77,7 @@ mod _serde { #[wrapper(Deref)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = StrictHash)] #[cfg_attr( diff --git a/src/contract/mod.rs b/src/contract/mod.rs index 5d5c1e00..b7db7f4d 100644 --- a/src/contract/mod.rs +++ b/src/contract/mod.rs @@ -26,17 +26,13 @@ mod data; mod fungible; mod attachment; mod state; -mod anchor; pub mod seal; pub mod assignments; mod operations; mod bundle; -#[allow(clippy::module_inception)] -mod contract; mod xchain; mod commit; -pub use anchor::{DbcError, DbcProof, EAnchor, Layer1, WitnessAnchor}; pub use assignments::{ Assign, AssignAttach, AssignData, AssignFungible, AssignRights, Assignments, AssignmentsRef, TypedAssigns, @@ -47,9 +43,6 @@ pub use commit::{ AssignmentCommitment, AssignmentIndex, BaseCommitment, BundleDisclosure, ContractId, DiscloseHash, GlobalCommitment, OpCommitment, OpDisclose, OpId, TypeCommitment, }; -pub use contract::{ - AssignmentWitness, GlobalOrd, KnownState, Opout, OpoutParseError, OutputAssignment, -}; pub use data::{ConcealedData, DataState, RevealedData, VoidState}; pub use fungible::{ AssetTag, BlindingFactor, BlindingParseError, ConcealedValue, FungibleState, @@ -58,8 +51,8 @@ pub use fungible::{ pub use global::{GlobalState, GlobalValues}; pub use meta::{MetaValue, Metadata, MetadataError}; pub use operations::{ - AssetTags, Extension, Genesis, Identity, Input, Inputs, OpRef, Operation, Redeemed, Transition, - Valencies, + AssetTags, Extension, Genesis, Identity, Input, Inputs, OpRef, Operation, Opout, + OpoutParseError, Redeemed, Transition, Valencies, }; pub use seal::{ ExposedSeal, GenesisSeal, GraphSeal, OutputSeal, SecretSeal, TxoSeal, WitnessOrd, WitnessPos, @@ -67,6 +60,6 @@ pub use seal::{ }; pub use state::{ConcealedState, ConfidentialState, ExposedState, RevealedState, StateType}; pub use xchain::{ - AltLayer1, AltLayer1Set, Impossible, XChain, XChainParseError, XOutpoint, + AltLayer1, AltLayer1Set, Impossible, Layer1, XChain, XChainParseError, XOutpoint, XCHAIN_BITCOIN_PREFIX, XCHAIN_LIQUID_PREFIX, }; diff --git a/src/contract/operations.rs b/src/contract/operations.rs index 07c6e7a3..55e4e5f0 100644 --- a/src/contract/operations.rs +++ b/src/contract/operations.rs @@ -23,9 +23,11 @@ use std::cmp::Ordering; use std::collections::{btree_map, btree_set, BTreeMap}; use std::iter; +use std::num::ParseIntError; +use std::str::FromStr; use amplify::confinement::{Confined, SmallOrdSet, TinyOrdMap, TinyOrdSet}; -use amplify::Wrapper; +use amplify::{hex, Wrapper}; use commit_verify::{ CommitEncode, CommitEngine, CommitId, Conceal, MerkleHash, MerkleLeaves, ReservedBytes, StrictHash, @@ -37,15 +39,67 @@ use crate::schema::{self, ExtensionType, OpFullType, OpType, SchemaId, Transitio use crate::{ AltLayer1Set, AssetTag, Assign, AssignmentIndex, AssignmentType, Assignments, AssignmentsRef, ConcealedAttach, ConcealedData, ConcealedValue, ContractId, DiscloseHash, ExposedState, Ffv, - GenesisSeal, GlobalState, GraphSeal, Metadata, OpDisclose, OpId, Opout, SecretSeal, - TypedAssigns, VoidState, XChain, LIB_NAME_RGB, + GenesisSeal, GlobalState, GraphSeal, Metadata, OpDisclose, OpId, SecretSeal, TypedAssigns, + VoidState, XChain, LIB_NAME_RGB_COMMIT, }; +#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, Display)] +#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] +#[cfg_attr( + feature = "serde", + derive(Serialize, Deserialize), + serde(crate = "serde_crate", rename_all = "camelCase") +)] +#[display("{op}/{ty}/{no}")] +/// RGB contract operation output pointer, defined by the operation ID and +/// output number. +pub struct Opout { + pub op: OpId, + pub ty: AssignmentType, + pub no: u16, +} + +impl Opout { + pub fn new(op: OpId, ty: AssignmentType, no: u16) -> Opout { Opout { op, ty, no } } +} + +#[derive(Clone, Eq, PartialEq, Debug, Display, Error, From)] +#[display(inner)] +pub enum OpoutParseError { + #[from] + InvalidNodeId(hex::Error), + + InvalidType(ParseIntError), + + InvalidOutputNo(ParseIntError), + + /// invalid operation outpoint format ('{0}') + #[display(doc_comments)] + WrongFormat(String), +} + +impl FromStr for Opout { + type Err = OpoutParseError; + + fn from_str(s: &str) -> Result { + let mut split = s.split('/'); + match (split.next(), split.next(), split.next(), split.next()) { + (Some(op), Some(ty), Some(no), None) => Ok(Opout { + op: op.parse()?, + ty: ty.parse().map_err(OpoutParseError::InvalidType)?, + no: no.parse().map_err(OpoutParseError::InvalidOutputNo)?, + }), + _ => Err(OpoutParseError::WrongFormat(s.to_owned())), + } + } +} + #[derive(Wrapper, WrapperMut, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, Default, From)] #[wrapper(Deref)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = StrictHash)] #[cfg_attr( @@ -59,7 +113,7 @@ pub struct AssetTags(TinyOrdMap); #[wrapper(Deref)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = StrictHash)] #[cfg_attr( @@ -80,7 +134,7 @@ impl<'a> IntoIterator for &'a Valencies { #[wrapper(Deref)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = StrictHash)] #[cfg_attr( @@ -101,7 +155,7 @@ impl<'a> IntoIterator for &'a Redeemed { #[wrapper(Deref)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -125,7 +179,7 @@ impl MerkleLeaves for Inputs { #[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, Display)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = MerkleHash)] #[cfg_attr( @@ -263,7 +317,7 @@ pub trait Operation { #[wrapper(Deref, FromStr)] #[display(inner)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = StrictHash)] #[cfg_attr( @@ -288,7 +342,7 @@ impl Identity { #[derive(Clone, PartialEq, Eq, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -315,7 +369,7 @@ impl StrictDeserialize for Genesis {} #[derive(Clone, PartialEq, Eq, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -347,7 +401,7 @@ impl PartialOrd for Extension { #[derive(Clone, PartialEq, Eq, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -677,8 +731,6 @@ impl<'op> Operation for OpRef<'op> { #[cfg(test)] mod test { - use std::str::FromStr; - use amplify::ByteArray; use baid64::DisplayBaid64; diff --git a/src/contract/seal.rs b/src/contract/seal.rs index 83e1332c..cbdc1c0b 100644 --- a/src/contract/seal.rs +++ b/src/contract/seal.rs @@ -36,7 +36,7 @@ use single_use_seals::SealWitness; use strict_encoding::{StrictDecode, StrictDumb, StrictEncode, StrictType}; use crate::contract::xchain::Impossible; -use crate::{XChain, XOutpoint, LIB_NAME_RGB}; +use crate::{XChain, XOutpoint, LIB_NAME_RGB_COMMIT}; pub type GenesisSeal = SingleBlindSeal; pub type GraphSeal = ChainBlindSeal; @@ -114,7 +114,7 @@ impl TxoSeal for XChain { /* #[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -180,7 +180,7 @@ impl XChain { #[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, Display)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -215,7 +215,7 @@ impl Ord for WitnessPos { /// transaction defining the ordering of the contract state data. #[derive(Copy, Clone, PartialOrd, Ord, PartialEq, Eq, Hash, Debug, Display, From)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, tags = order)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, tags = order)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), diff --git a/src/contract/xchain.rs b/src/contract/xchain.rs index 431486cb..81fc737d 100644 --- a/src/contract/xchain.rs +++ b/src/contract/xchain.rs @@ -35,16 +35,37 @@ use strict_encoding::{ WriteUnion, }; -use crate::{Layer1, OutputSeal, XOutputSeal, LIB_NAME_RGB}; +use crate::{OutputSeal, XOutputSeal, LIB_NAME_RGB_COMMIT}; pub const XCHAIN_BITCOIN_PREFIX: &str = "bc"; pub const XCHAIN_LIQUID_PREFIX: &str = "lq"; +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Display)] +#[display(lowercase)] +#[derive( + strict_encoding::StrictType, + StrictDumb, + strict_encoding::StrictEncode, + strict_encoding::StrictDecode +)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, tags = repr, into_u8, try_from_u8)] +#[cfg_attr( + feature = "serde", + derive(Serialize, Deserialize), + serde(crate = "serde_crate", rename_all = "camelCase") +)] +#[repr(u8)] +pub enum Layer1 { + #[strict_type(dumb)] + Bitcoin = 0, + Liquid = 1, +} + #[derive(Wrapper, WrapperMut, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, From)] #[wrapper(Deref, FromStr, Display)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] pub struct XOutpoint(XChain); impl From for XOutpoint { @@ -92,7 +113,7 @@ mod _serde { #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Display)] #[display(lowercase)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, tags = repr, into_u8, try_from_u8)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, tags = repr, into_u8, try_from_u8)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -135,7 +156,7 @@ impl StrictDumb for Impossible { fn strict_dumb() -> Self { panic!("must not be instantiated") } } impl StrictType for Impossible { - const STRICT_LIB_NAME: &'static str = LIB_NAME_RGB; + const STRICT_LIB_NAME: &'static str = LIB_NAME_RGB_COMMIT; } impl StrictSum for Impossible { const ALL_VARIANTS: &'static [(u8, &'static str)] = &[]; @@ -168,7 +189,7 @@ impl FromStr for Impossible { #[wrapper(Deref)] #[wrapper_mut(DerefMut)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[derive(CommitEncode)] #[commit_encode(strategy = strict, id = StrictHash)] #[cfg_attr( @@ -220,7 +241,7 @@ impl Conceal for XChain { impl StrictType for XChain where T: StrictDumb + StrictType { - const STRICT_LIB_NAME: &'static str = LIB_NAME_RGB; + const STRICT_LIB_NAME: &'static str = LIB_NAME_RGB_COMMIT; } impl StrictSum for XChain where T: StrictDumb + StrictType diff --git a/src/lib.rs b/src/lib.rs index 524b1080..d73a4515 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -65,13 +65,14 @@ pub mod prelude { pub use prelude::*; -pub const LIB_NAME_RGB: &str = "RGB"; +pub const LIB_NAME_RGB_COMMIT: &str = "RGBCommit"; +pub const LIB_NAME_RGB_LOGIC: &str = "RGBLogic"; /// Fast-forward version code #[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Default, Debug, Display)] #[display("RGB/1.{0}")] #[derive(StrictType, StrictEncode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), diff --git a/src/schema/occurrences.rs b/src/schema/occurrences.rs index f2b0ec67..aa0eb199 100644 --- a/src/schema/occurrences.rs +++ b/src/schema/occurrences.rs @@ -28,7 +28,7 @@ use strict_encoding::{ TypeName, TypedRead, TypedWrite, WriteStruct, }; -use crate::LIB_NAME_RGB; +use crate::LIB_NAME_RGB_COMMIT; #[derive(Clone, PartialEq, Eq, Hash, Debug, Default)] #[cfg_attr( @@ -125,7 +125,7 @@ impl TryFrom> for Occurrences { } impl StrictType for Occurrences { - const STRICT_LIB_NAME: &'static str = LIB_NAME_RGB; + const STRICT_LIB_NAME: &'static str = LIB_NAME_RGB_COMMIT; fn strict_name() -> Option { Some(tn!("Occurrences")) } } impl StrictProduct for Occurrences {} diff --git a/src/schema/operations.rs b/src/schema/operations.rs index decfc962..fa1dc820 100644 --- a/src/schema/operations.rs +++ b/src/schema/operations.rs @@ -26,13 +26,13 @@ use amplify::Wrapper; use super::{ExtensionType, GlobalStateType, Occurrences, TransitionType}; use crate::schema::schema::MetaType; -use crate::LIB_NAME_RGB; +use crate::LIB_NAME_RGB_COMMIT; #[derive(Wrapper, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, From, Display)] #[wrapper(FromStr, LowerHex, UpperHex)] #[display("0x{0:04X}")] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -49,7 +49,7 @@ impl AssignmentType { #[wrapper(FromStr, LowerHex, UpperHex)] #[display("0x{0:04X}")] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -143,7 +143,7 @@ pub trait OpSchema { #[derive(Clone, PartialEq, Eq, Debug, Default)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -160,7 +160,7 @@ pub struct GenesisSchema { #[derive(Clone, PartialEq, Eq, Debug, Default)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -177,7 +177,7 @@ pub struct ExtensionSchema { #[derive(Clone, PartialEq, Eq, Debug, Default)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), diff --git a/src/schema/schema.rs b/src/schema/schema.rs index 1adbfac1..5f70800f 100644 --- a/src/schema/schema.rs +++ b/src/schema/schema.rs @@ -39,13 +39,15 @@ use strict_types::SemId; use super::{ AssignmentType, ExtensionSchema, GenesisSchema, OwnedStateSchema, TransitionSchema, ValencyType, }; -use crate::{impl_serde_baid64, Ffv, GlobalStateSchema, Identity, Occurrences, LIB_NAME_RGB}; +use crate::{ + impl_serde_baid64, Ffv, GlobalStateSchema, Identity, Occurrences, LIB_NAME_RGB_COMMIT, +}; #[derive(Wrapper, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, From, Display)] #[wrapper(FromStr, LowerHex, UpperHex)] #[display("0x{0:04X}")] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -60,7 +62,7 @@ impl MetaType { #[wrapper(FromStr, LowerHex, UpperHex)] #[display("0x{0:04X}")] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -75,7 +77,7 @@ impl GlobalStateType { #[wrapper(FromStr, LowerHex, UpperHex)] #[display("0x{0:04X}")] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -90,7 +92,7 @@ impl ExtensionType { #[wrapper(FromStr, LowerHex, UpperHex)] #[display("0x{0:04X}")] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -113,7 +115,7 @@ impl TransitionType { #[derive(Wrapper, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, From)] #[wrapper(Deref, BorrowSlice, Hex, Index, RangeOps)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] pub struct SchemaId( #[from] #[from([u8; 32])] @@ -149,7 +151,7 @@ impl_serde_baid64!(SchemaId); #[derive(Clone, Eq, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), diff --git a/src/schema/state.rs b/src/schema/state.rs index ed67c245..ab9f750c 100644 --- a/src/schema/state.rs +++ b/src/schema/state.rs @@ -24,11 +24,11 @@ use commit_verify::ReservedBytes; use strict_encoding::Primitive; use strict_types::SemId; -use crate::{StateType, LIB_NAME_RGB}; +use crate::{StateType, LIB_NAME_RGB_COMMIT}; #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Display)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, tags = repr, into_u8, try_from_u8)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, tags = repr, into_u8, try_from_u8)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -53,7 +53,7 @@ impl MediaType { #[derive(Copy, Clone, PartialEq, Eq, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, tags = order)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, tags = order)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -96,7 +96,7 @@ impl OwnedStateSchema { /// details as used for [`DateFormat`] #[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Display)] #[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, tags = repr, into_u8, try_from_u8)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT, tags = repr, into_u8, try_from_u8)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -111,7 +111,7 @@ pub enum FungibleType { #[derive(Clone, PartialEq, Eq, Hash, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] +#[strict_type(lib = LIB_NAME_RGB_COMMIT)] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), diff --git a/src/stl.rs b/src/stl.rs index b41bc733..f78c0878 100644 --- a/src/stl.rs +++ b/src/stl.rs @@ -28,17 +28,22 @@ use strict_types::stl::{std_stl, strict_types_stl}; use strict_types::typelib::LibBuilder; use strict_types::{CompileError, TypeLib}; +use crate::validation::DbcProof; +use crate::vm::GlobalOrd; use crate::{ - DbcProof, Extension, Genesis, GlobalOrd, OpCommitment, Schema, TransitionBundle, XWitnessId, - LIB_NAME_RGB, + Extension, Genesis, OpCommitment, Schema, TransitionBundle, XWitnessId, LIB_NAME_RGB_COMMIT, + LIB_NAME_RGB_LOGIC, }; /// Strict types id for the library providing data types for RGB consensus. -pub const LIB_ID_RGB: &str = - "stl:dU!OV0Il-utBzMra-3saO5RM-H!25$ds-o8hYnve-jiASTe4#carmen-kimono-final"; +pub const LIB_ID_RGB_COMMIT: &str = + "stl:DjmgI8Aw-L0XQMsu-q9HS$Za-!D8BzVj-bvaq$yq-p56MdqY#jester-philips-prelude"; +/// Strict types id for the library providing data types for RGB consensus. +pub const LIB_ID_RGB_LOGIC: &str = + "stl:J61WrKfv-HBO6mFZ-9bZzqau-j!wrLMA-9IgEJGM-hcaprmA#podium-colombo-buenos"; -fn _rgb_core_stl() -> Result { - LibBuilder::new(libname!(LIB_NAME_RGB), tiny_bset! { +fn _rgb_commit_stl() -> Result { + LibBuilder::new(libname!(LIB_NAME_RGB_COMMIT), tiny_bset! { std_stl().to_dependency(), strict_types_stl().to_dependency(), commit_verify_stl().to_dependency(), @@ -48,25 +53,53 @@ fn _rgb_core_stl() -> Result { }) .transpile::() .transpile::() - .transpile::() .transpile::() .transpile::() .transpile::() .transpile::() - .transpile::() .compile() } +fn _rgb_logic_stl() -> Result { + LibBuilder::new(libname!(LIB_NAME_RGB_LOGIC), tiny_bset! { + std_stl().to_dependency(), + strict_types_stl().to_dependency(), + commit_verify_stl().to_dependency(), + bp_tx_stl().to_dependency(), + bp_core_stl().to_dependency(), + aluvm_stl().to_dependency(), + rgb_commit_stl().to_dependency() + }) + .transpile::() + .transpile::() + // TODO: Commit to the RGB ISA once AluVM will support strict types + // .transpile::() + .compile() +} + +/// Generates strict type library providing data types for RGB consensus. +pub fn rgb_commit_stl() -> TypeLib { + _rgb_commit_stl().expect("invalid strict type RGB consensus commitments library") +} + /// Generates strict type library providing data types for RGB consensus. -pub fn rgb_core_stl() -> TypeLib { _rgb_core_stl().expect("invalid strict type RGB Core library") } +pub fn rgb_logic_stl() -> TypeLib { + _rgb_logic_stl().expect("invalid strict type RGB consensus logic library") +} #[cfg(test)] mod test { use super::*; #[test] - fn core_lib_id() { - let lib = rgb_core_stl(); - assert_eq!(lib.id().to_string(), LIB_ID_RGB); + fn commit_lib_id() { + let lib = rgb_commit_stl(); + assert_eq!(lib.id().to_string(), LIB_ID_RGB_COMMIT); + } + + #[test] + fn logic_lib_id() { + let lib = rgb_logic_stl(); + assert_eq!(lib.id().to_string(), LIB_ID_RGB_LOGIC); } } diff --git a/src/contract/anchor.rs b/src/validation/anchor.rs similarity index 68% rename from src/contract/anchor.rs rename to src/validation/anchor.rs index 3139bc48..de19afb2 100644 --- a/src/contract/anchor.rs +++ b/src/validation/anchor.rs @@ -20,8 +20,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::cmp::Ordering; - use bp::dbc::opret::{OpretError, OpretProof}; use bp::dbc::tapret::TapretProof; use bp::dbc::Method; @@ -30,7 +28,7 @@ use commit_verify::mpc::Commitment; use commit_verify::{mpc, ConvolveVerifyError, EmbedVerifyError}; use strict_encoding::{StrictDeserialize, StrictDumb, StrictSerialize}; -use crate::{WitnessOrd, XWitnessId, LIB_NAME_RGB}; +use crate::LIB_NAME_RGB_LOGIC; #[derive(Copy, Clone, Eq, PartialEq, Debug, Display, Error)] #[cfg_attr( @@ -67,7 +65,7 @@ pub enum DbcError { #[derive(Clone, Eq, PartialEq, Debug, From)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, tags = custom, dumb = Self::Tapret(strict_dumb!()))] +#[strict_type(lib = LIB_NAME_RGB_LOGIC, tags = custom, dumb = Self::Tapret(strict_dumb!()))] #[cfg_attr( feature = "serde", derive(Serialize, Deserialize), @@ -114,60 +112,3 @@ impl dbc::Proof for DbcProof { /// Anchor which DBC proof is either Tapret or Opret. pub type EAnchor

= dbc::Anchor; - -/// Txid and height information ordered according to the RGB consensus rules. -#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Display)] -#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB)] -#[cfg_attr( - feature = "serde", - derive(Serialize, Deserialize), - serde(crate = "serde_crate", rename_all = "camelCase") -)] -#[display("{witness_id}/{witness_ord}")] -pub struct WitnessAnchor { - pub witness_ord: WitnessOrd, - pub witness_id: XWitnessId, -} - -impl PartialOrd for WitnessAnchor { - fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } -} - -impl Ord for WitnessAnchor { - fn cmp(&self, other: &Self) -> Ordering { - if self == other { - return Ordering::Equal; - } - match self.witness_ord.cmp(&other.witness_ord) { - Ordering::Less => Ordering::Less, - Ordering::Greater => Ordering::Greater, - Ordering::Equal => self.witness_id.cmp(&other.witness_id), - } - } -} - -impl WitnessAnchor { - pub fn from_mempool(witness_id: XWitnessId, priority: u32) -> Self { - WitnessAnchor { - witness_ord: WitnessOrd::OffChain { priority }, - witness_id, - } - } -} - -#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Display)] -#[display(lowercase)] -#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB, tags = repr, into_u8, try_from_u8)] -#[cfg_attr( - feature = "serde", - derive(Serialize, Deserialize), - serde(crate = "serde_crate", rename_all = "camelCase") -)] -#[repr(u8)] -pub enum Layer1 { - #[strict_type(dumb)] - Bitcoin = 0, - Liquid = 1, -} diff --git a/src/validation/consignment.rs b/src/validation/consignment.rs index ecb80950..87af173a 100644 --- a/src/validation/consignment.rs +++ b/src/validation/consignment.rs @@ -30,9 +30,10 @@ use aluvm::library::{Lib, LibId}; use amplify::confinement::Confined; use strict_types::TypeSystem; +use super::EAnchor; use crate::{ - BundleId, EAnchor, Genesis, OpId, OpRef, Operation, Schema, SecretSeal, TransitionBundle, - XChain, XWitnessId, + BundleId, Genesis, OpId, OpRef, Operation, Schema, SecretSeal, TransitionBundle, XChain, + XWitnessId, }; pub const CONSIGNMENT_MAX_LIBS: usize = 1024; diff --git a/src/validation/mod.rs b/src/validation/mod.rs index ea9f9859..cea9bd58 100644 --- a/src/validation/mod.rs +++ b/src/validation/mod.rs @@ -26,7 +26,9 @@ mod state; mod validator; mod consignment; mod status; +mod anchor; +pub use anchor::{DbcError, DbcProof, EAnchor}; pub use consignment::{CheckedConsignment, ConsignmentApi, Scripts, CONSIGNMENT_MAX_LIBS}; pub(crate) use logic::OpInfo; pub use status::{Failure, Info, Status, Validity, Warning}; diff --git a/src/validation/validator.rs b/src/validation/validator.rs index e24e5593..cd3ab467 100644 --- a/src/validation/validator.rs +++ b/src/validation/validator.rs @@ -30,11 +30,11 @@ use commit_verify::mpc; use single_use_seals::SealWitness; use super::status::{Failure, Warning}; -use super::{CheckedConsignment, ConsignmentApi, Status, Validity}; +use super::{CheckedConsignment, ConsignmentApi, DbcProof, EAnchor, Status, Validity}; use crate::{ - AltLayer1, BundleId, ContractId, DbcProof, EAnchor, Layer1, OpId, OpRef, OpType, Operation, - Opout, Schema, SchemaId, TransitionBundle, TypedAssigns, XChain, XOutpoint, XOutputSeal, - XWitnessId, XWitnessTx, + AltLayer1, BundleId, ContractId, Layer1, OpId, OpRef, OpType, Operation, Opout, Schema, + SchemaId, TransitionBundle, TypedAssigns, XChain, XOutpoint, XOutputSeal, XWitnessId, + XWitnessTx, }; #[derive(Clone, PartialEq, Eq, Debug, Display, Error, From)] diff --git a/src/vm/contract.rs b/src/vm/contract.rs new file mode 100644 index 00000000..2b1cc3b7 --- /dev/null +++ b/src/vm/contract.rs @@ -0,0 +1,177 @@ +// RGB Core Library: consensus layer for RGB smart contracts. +// +// SPDX-License-Identifier: Apache-2.0 +// +// Written in 2019-2024 by +// Dr Maxim Orlovsky +// +// Copyright (C) 2019-2024 LNP/BP Standards Association. All rights reserved. +// Copyright (C) 2019-2024 Dr Maxim Orlovsky. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use std::borrow::Borrow; +use std::cmp::Ordering; +use std::fmt::Debug; + +use amplify::confinement::LargeOrdMap; +use strict_encoding::{StrictDecode, StrictDumb, StrictEncode}; + +use crate::{ + AssignmentType, DataState, FungibleState, GlobalStateType, RevealedAttach, WitnessOrd, + XOutpoint, XWitnessId, LIB_NAME_RGB_LOGIC, +}; + +#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Display, From)] +#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] +#[strict_type(lib = LIB_NAME_RGB_LOGIC, tags = custom)] +#[cfg_attr( + feature = "serde", + derive(Serialize, Deserialize), + serde(crate = "serde_crate", rename_all = "camelCase", untagged) +)] +pub enum AssignmentWitness { + #[display("~")] + #[strict_type(tag = 0, dumb)] + Absent, + + #[from] + #[display(inner)] + #[strict_type(tag = 1)] + Present(XWitnessId), +} + +impl From> for AssignmentWitness { + fn from(value: Option) -> Self { + match value { + None => AssignmentWitness::Absent, + Some(id) => AssignmentWitness::Present(id), + } + } +} + +/// Txid and height information ordered according to the RGB consensus rules. +#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Display)] +#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] +#[strict_type(lib = LIB_NAME_RGB_LOGIC)] +#[cfg_attr( + feature = "serde", + derive(Serialize, Deserialize), + serde(crate = "serde_crate", rename_all = "camelCase") +)] +#[display("{witness_id}/{witness_ord}")] +pub struct WitnessAnchor { + pub witness_ord: WitnessOrd, + pub witness_id: XWitnessId, +} + +impl PartialOrd for WitnessAnchor { + fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } +} + +impl Ord for WitnessAnchor { + fn cmp(&self, other: &Self) -> Ordering { + if self == other { + return Ordering::Equal; + } + match self.witness_ord.cmp(&other.witness_ord) { + Ordering::Less => Ordering::Less, + Ordering::Greater => Ordering::Greater, + Ordering::Equal => self.witness_id.cmp(&other.witness_id), + } + } +} + +impl WitnessAnchor { + pub fn from_mempool(witness_id: XWitnessId, priority: u32) -> Self { + WitnessAnchor { + witness_ord: WitnessOrd::OffChain { priority }, + witness_id, + } + } +} + +#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)] +#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] +#[strict_type(lib = LIB_NAME_RGB_LOGIC)] +#[cfg_attr( + feature = "serde", + derive(Serialize, Deserialize), + serde(crate = "serde_crate", rename_all = "camelCase") +)] +pub struct GlobalOrd { + pub witness_anchor: Option, + pub idx: u16, +} + +impl PartialOrd for GlobalOrd { + fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } +} + +impl Ord for GlobalOrd { + fn cmp(&self, other: &Self) -> Ordering { + if self == other { + return Ordering::Equal; + } + match (self.witness_anchor, &other.witness_anchor) { + (None, None) => self.idx.cmp(&other.idx), + (None, Some(_)) => Ordering::Less, + (Some(_), None) => Ordering::Greater, + (Some(ord1), Some(ord2)) if ord1 == *ord2 => self.idx.cmp(&other.idx), + (Some(ord1), Some(ord2)) => ord1.cmp(ord2), + } + } +} + +impl GlobalOrd { + pub fn with_anchor(ord_txid: WitnessAnchor, idx: u16) -> Self { + GlobalOrd { + witness_anchor: Some(ord_txid), + idx, + } + } + pub fn genesis(idx: u16) -> Self { + GlobalOrd { + witness_anchor: None, + idx, + } + } +} + +pub trait ContractState { + fn global(&self, ty: GlobalStateType) + -> Option>>; + + fn rights(&self, outpoint: XOutpoint, ty: AssignmentType, unspent: bool) -> Option; + + fn fungible( + &self, + outpoint: XOutpoint, + ty: AssignmentType, + unspent: bool, + ) -> Option>; + + fn data( + &self, + outpoint: XOutpoint, + ty: AssignmentType, + unspent: bool, + ) -> Option>>; + + fn attach( + &self, + outpoint: XOutpoint, + ty: AssignmentType, + unspent: bool, + ) -> Option>>; +} diff --git a/src/vm/mod.rs b/src/vm/mod.rs index 40689df8..a2daea6d 100644 --- a/src/vm/mod.rs +++ b/src/vm/mod.rs @@ -30,8 +30,10 @@ mod op_contract; mod op_timechain; #[macro_use] mod macroasm; +mod contract; pub use aluvm::aluasm_isa; +pub use contract::{AssignmentWitness, ContractState, GlobalOrd, WitnessAnchor}; pub use isa::RgbIsa; pub use op_contract::ContractOp; pub use op_timechain::TimechainOp; diff --git a/stl/RGB@0.1.0.sta b/stl/RGB@0.1.0.sta deleted file mode 100644 index 71c47d69..00000000 --- a/stl/RGB@0.1.0.sta +++ /dev/null @@ -1,284 +0,0 @@ ------BEGIN STRICT TYPE LIB----- -Id: stl:dU!OV0Il-utBzMra-3saO5RM-H!25$ds-o8hYnve-jiASTe4#carmen-kimono-final -Name: RGB -Dependencies: - StrictTypes#century-comrade-chess, - AluVM#congo-archive-folio, - BPCore#garbo-radius-peru, - Std#ralph-blue-lucky, - CommitVerify#tennis-peace-olympic, - Bitcoin#signal-color-cipher -Check-SHA256: 2bef0e9f5af5a8fb023a9b43b1e0f664132d7e98c82b90aa40ec16b92f7f9b85 - -15!sq21V+lU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*$Y#2a%p39RC#b^b7F8ce<9`Lptgpr6F_xjAC6(~TLj#*ewiHU&X!byiJp9+vrsy<5&Clo)5)@&l6UwYFh+Ofu5^ik9drt)+7YLQq3*a%IXa -9&dx0-7pM3Z=O*v*GCA9fL-<|HrZsA`NnJlR3`&dbY$Vt-5feW*SKg&%h~b$G{NN>LxBDo)YaDXjV8yE -YGn*VZ*6U9bXH|@X=Zu#Y!hN5_Bp3Y36tDMM#=e#tGI($UA5U3KNx<*C>ja}LTPkkZ)t7@1wm|eR!sr` -ZSSEb;k|42*wg~2q@3^Lq|9zft}OB~jx>)hO72TW;VQ)zT%r!Z9lE%{u?@QI^EqCb}2Q7OO^w+`_q -*ddTXmHSf)1x#sTNn{2>P(yEWWeNZRdtm>UaGoca9LuK7Ij+X8IutaRAF#(Wpqw& -WMxoca&&HGau2p2m_HirtB!lh<{Yi-S-!KI0_27BH<@sVme~^s3=33YaB^jIP;zf?W)s9yQf4Q+L?w(n -XY|a%e*XOAC%4aD5B-6UFMfO2d=FG%aB^jIP+@dvP;zf?W-hl7CAn^87TS9h9ibhaZ&^Bcn*B*;w|~I; --PD|t>jq6_bZBp6I6q=8aZ}RBA(1@GcO9QSWZ!o3C{DXc_Cg)w39@m$R6qOEzWQ+NTC@=;0daZB@{PThHqaLTqVnWK(5fY*ct@WU=KqITQ*wzVL4v&%PXB -rElTk^nG{;D0#op`qL00-33&5P;_z!LTPkkZ)t7_03qW(L&d6G@+l`%qd385?K@+fP1(-9sgE>i7rMzq -bp%##b#x`G^|=xh7rLW4)L(lQb*FJl;d*r#UC=Q#deq4+>4pnaV{&P5bV7M_WpgpRuIPk`cg3&=F>*1@ -lJ+pRDJ{*3f84s>#k$1lf7uIEVQ@}wWMxQUb7)_z*=^-NPQ?`2v5jYd+6t@dEhY>7H!Y*UdZb-BpG^u( -WnpGhV{&P5bfbbo^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1Rs>XdX=JH|gm+V(X#23g?#G%T#8*SX -RQUS6KbYXtkv-?PH+Tw3ZggdGZeeUtYqm29sTjYuk_~RiSfnI}BSuClv)a -MjKgwAH@`bu1x<7g|G$};xvA~n-$_S3Qc8lYiwmmVRLA0udT)PryvH%qoUf%jN6#Tx81sfg4O?s`uaep -_R|ImQ*?4^V{}Mib7+(IV0dsu5sjwLjgQcrOsaG1F{QvR+LMR3-^ZN{xOxs!Wpib6c4cHjd30rSG0V6u -JLYKfb7gWS-+`&{Sr=ykNJ#YFTr_BQwWqKF0S;1Sb7gXNWn@BmbY*ig{(=@s-*~=0{Fo5>;v2Uql0Ev@ -(iYu*+LHGLwE58<4pL=vWpZ|9WI}m#Wpg+KQ*>km07$+g7b@t4MVjY>G@u4Q3HlB(d+LiLJm-R=h;`?d -xDG*cV`*tna%paKVPb4$VTK~nd#>1Oi(W05|TJ%PM*ricn_Pm -Xk-Xfd2nS;VQpn=1fvw5rj-B|XP@r^w5ufb=C_Ju$l1`nW&GEpSWb-vQ)O*QWJ&-DL2PtPVR>b8F#`bx -Y-w?IX=DKmL2PtPVR>b8F;iu91pxpF0my5Ddkb29#*qXha^)f?kI>J>8dqqbOFybHKpQ-MBLDyZ00000 -0RI300000000=>Ib7gc?VP^#a00#g7Kp+4KL349ubW~wya|Hna3IT`y;$>KfZ0H=mhJ>?uVEiz^#2Wm1QOk9#fajy(iy -Z)0l$;nCe3IziXCXi3Z2@%=QxxYW^+v~7{W03rq(;firJ -1#@&^bY%hjG)3KC&kYOztQDksx&yAAHY;R+00^!l!96CYQxM)es+421}!Q~o5 -fc_fP)zKtpQ8M_qJyiO1VIUJ=H=)@ii_1#@&^bY%f(Q#2q9+*8I)cH*`!s%9_R -I@yuG2CFF!ywLV~14_&UY;R+00^!l!96CYQxM)es+421}!Q~o5fc_fP)zxYW^+v~7{W -03rq(;firJ1#@&^bY%f(Q#2q9+*8I)cH*`!s%9_RI@yuG2CFF!ywLV~14_&UY;R+00^!l!96CYQxM)es -+421}!Q~o5fc_fP)zMdwWnpYocxhw=1ONKtpQ8 -M_qJyiO1VIUJ=H=)@ii_1#@&^bY%hjG)3KC&kYOztQDksx&yAAHY;R+00^!l! -96CYQxM)es+421}!Q~o5fc_fP)zLxBDo)YaDX -jV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RaLKV{dL|X=G(?bZKF1Q)OXn00sjDb7f&{ -0o#gN8iEuMbtv-qj6g$b#7A9pc!|f`I$jaRzSe2A1O;<+VRU5yXj3#G4BS)3O?Kk8E~;iP+B(^hzXq!* -4!qFzdIL(#1Z;0(YXafX-5feW*SKg&%h~b$G{NN>LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU -0Z2&n-dr?jcD1Ll0RaODa%Fa9VQgh&00sjDb7f&{0fGz-uWS7@0e2{ -LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RbREb8~5DZc=4-WnpY(WJFKtpQ8M_qJyiO1VI -UJ=H=)@ii_1#@&^bY%f>4P_9rf`M-zw>{+&W0M0{2&GbCtpecGzFNi4r|Jm=Y;R+00^!l!96CYQxM)es -+421}!Q~o5fc_fP)zLxBDo)YaDXjV8yEYGuo~ -Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RaLKV{dL|X=G(?bZKF1Q)OXn00sjDb7f&{0o#gN8iEuM -btv-qj6g$b#7A9pc!|f`I$jaRzSe2A1O;<+VRU5y|7c^tcv66A`G>fILxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?j -cD1Ll0RaODa%Fa9VQgh&00sjDb7f&{0gt=F=tr7PfILxBDo)YaDX -jV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RbODb8~5DZc=4-WnpY(WJF?Q(lLJ=>rBY$70^roXTE)+&>InpFZ)0l$;nCe3IziXCXi3Z2@%=QxYyC64P_9rf`M-zw>{+&W0M0{ -2&GbCtpecGzFNi4r|Jm=Y;R+00^!l!96CYQxM)es+421}!Q~o5fc_fP)zKtpQ8 -M_qJyiO1VIUJ=H=)@ii_1#@&^bY%hmXk);5Qh;gshq!{{oTC#gIzF4hFN<*P1RquLWiVd^Y;R+00^!l! -96CYQxM)es+421}!Q~o5fc_fP)zYyC6KtpQ8M_qJyiO1VIUJ=H=)@ii_1#@&^bY%fb -XnF^bIJ{KZXLxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU -0Z2&n-dr?jcD1Ll0RaLKV{dL|X=G(?bZKF1Q)OXn00sjDb7f&{0o#gN8iEuMbtv-qj6g$b#7A9pc!|f` -I$jaRzSe2A1O;<+VRU5yZA8ZOFKPukLlqCE=E5w*=z8TWl=ueJ45i$M_H~V*1Z;0(YXafX-5feW*SKg& -%h~b$G{NN>LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RaODa%Fa9VQgh& -00sjDb7f&{0gt=F=tr7PLxBDo)YaDXjV8yEYGuo~Ej#9D^K)f# -Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RbREb8~5DZc=4-WnpY(WL9Bpb!9?qX>MdwWnpYocxhw=1ONKtpQ8M_qJyiO1VIUJ=H=)@ii_1#@&^bY%fbXnF^bIJ{KZ -XLxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?j -cD1Ll0RaLKV{dL|X=G(?bZKF1Q)OXn00sjDb7f&{0o#gN8iEuMbtv-qj6g$b#7A9pc!|f`I$jaRzSe2A -1O;<+VRU5yZA8ZOFKPukLlqCE=E5w*=z8TWl=ueJ45i$M_H~V*1Z;0(YXafX-5feW*SKg&%h~b$G{NN> -LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RaODa%Fa9VQgh&00sjDb7f&{ -0fGz-uWS7@0e2{LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU -0Z2&n-dr?jcD1Ll0RbIBb8~5DZdPw;WK(oubY((pX>MdwWnpYocu;h51OxyKV{dL|X=G(?bZKF100sjD -b7f&{0o#gN8iEuMbtv-qj6g$b#7A9pc!|f`I$jaRzSe2A1O;<+VRU5yF0!Tm7r-z?Fqq(6n;Tke)*kJ4 -4PoBPfF{#q^A_Q|1Z;0(YXafX-5feW*SKg&%h~b$G{NN>LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn -@L3mU0Z2&n-dr?jcD1Ll0RaIKV{dL|X=G(?bZKF1Q*>c;WdH^P1aoC!YypqE!sthuPUKDEU2%WC`V+X+ -(UG)mk--2W1{>juaWw^VbYXO50WPwo{ujV7L@=1(T$>wOY}Ov_b`4?P%YY`+Wb+o`y98`+V`~E8(cK(6 -LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%A5Mys{ -W@%()Zggp3Y*S@nYybuW1aoC!YysPfS{i~B5OpZ>_>4e9YQ#rfba;u!+d5tm#=h2RwFCuobYXO50WPwo -{ujV7L@=1(T$>wOY}Ov_b`4?P%YY`+Wb+o`y98`+V`~E8(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IR -l4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%B2y$h1WnpY(WB>*O1aoC!YypqE!sthuPUKDE -U2%WC`V+X+(UG)mk--2W1{>juaWw^VbYXO50WPwo{ujV7L@=1(T$>wOY}Ov_b`4?P%YY`+Wb+o`y98`+ -V`~E8(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)y -umJ%aL349yXKq$+X=GD$VRU6eY-w&}Q)OXnRCsA*1OxyKV{dL|X=G(?bZKF100sjDb7f&{0o#gN8iEuM -btv-qj6g$b#7A9pc!|f`I$jaRzSe2A1O;<+VRU5yF0!Tm7r-z?Fqq(6n;Tke)*kJ44PoBPfF{#q^A_Q| -1Z;0(YXafX-5feW*SKg&%h~b$G{NN>LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?j -cD1Ll0RaIKV{dL|X=G(?bZKF1Q*>c;WdH^P1aoC!YypA{4XEgn0epQk*PX+nL>xOm%pK> -soMo}bYXO50WPwo{ujV7L@=1(T$>wOY}Ov_b`4?P%YY`+Wb+o`y98`+V`~E8(cK(6LD#rwNz2*s{WQVl -8bg5o8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%A5Mys{W@%()Zggp3Y*S@n -YybuW1aoC!YysPfS{i~B5OpZ>_>4e9YQ#rfba;u!+d5tm#=h2RwFCuobYXO50WPwo{ujV7L@=1(T$>wO -Y}Ov_b`4?P%YY`+Wb+o`y98`+V`~E8(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@nkxGg*8X!CPr -awgw_sqk4BX8}k^^xj-FXm+)yumJ%B2y$h1WnpY(WB>*O1aoC!YypA{4XEgn0epQk*PX+ -nL>xOm%pK>soMo}bYXO50WPwo{ujV7L@=1(T$>wOY}Ov_b`4?P%YY`+Wb+o`y98`+V`~E8(cK(6LD#rw -Nz2*s{WQVl8bg5o8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%ML349yXKrm} -Zgf<6aAgGn0006RL349yXKrm}Zgg`(Y-w&}Q)OXnRCrKyas>eZ3IT`y;$>KfZ0H=mhJ>?uVDb5bYX39002k^X>)URWpV=H(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@mbudT)PryvH%qoUf% -jN6#Tx81sfg4O?s`uaep_R|IjbY*jNZe?@=$}AplgPGkh3_fq3Q7_j=2#kPT_9!;lWR>~GYywm#VTK~n -d#>@I6Zgc@iy&7&8`-VFfe10WfHD}v`L+>hHy6d9F3e5?wo>3YKa$#;~ -Wl(Z&Z)O2Vy&7&8`-VFfe10WfHD}v`L+>hHy6d9F3e5?wo>3YKLvL<$a$#e1Nn`~900#g7Kp+4KL}7Gc -Q*>c;Wd#8M2mk;;0000000000|Nj60000002t;CIP;zf?W&{EO26SO?a%FS?1pxwY9+vrsy<5&Clo)5) -@&l6UwYFh+Ofu5^ik9drt)+7hwjY>38tto&d&=eh5j^*S;QWq5RDZgXjGZd7@2WdUS$9zv-Vp*%wog4O?q)g04AaHEjn -O6;Ie%sNwVNZtr-WprU=VRT^u^?FS>S$_F2)vN@Mb6UJ-F(lri_dqerx4lR4>iBsz2WM<=Vqt7^0p25# -Yo@G%*b#-tU^&3KX?w7l?~*Sh8@1jRRblZzybED-b7^O8ZDnqBa{(&yMM2gb*yIgxLg7xQ_Wp*<{#EXT -nHMp{o_cMFjX(%;Wn^V#ZDnKu-_NO$^@rt6M7IGITmUKjm1~>v&8b0-V>p(oz$%0233g#@Wo~0>Wpe@D -g=PS6VPp{$?vC--s`v@B8YHl)C#jpVFzBk!DMw8Sc42I3WMOn~asuJe-5feW*SKg&%h~b$G{NN>LxBDo -)YaDXjV8yEYGsr6V0dsu5sjwLjgQcrOsaG1F{QvR+LMR3-^ZN{xOxY7X>@L7b8`aW(cK(6LD#rwNz2*s -{WQVl8bg5o8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%NMR;^&ZgXjGZc}4u -Wo=;w1_*6sbYWy+bYTDq0d?d}_}|Wp0vpvv$c&#PW69R$ltr%da5t5w^x+8!q5uE@000000RI3000000 -00(DmZ(?C=a{vkf)$WoGNrn+a000000RI300000000(kqWMyS-a{vheM(yUq2ps*m=2xUDT;RqCgn#@WzFu~@ -adfH5^@&-|0000000000{{R30000003t@9}X=iS2Wo~qH015$z{^Dg=h-~N_zJ`Red1EINWrM}GXaQb} -6c#qIM2EQnHo-KZ`k;Xmr`<4sJYKN!!u{G5u+^j1lf!PF4>GEG0000000000{{R300000033g#@Wo~0> -Wpe-t0Y>fS!w4MxxaL=+DqP^k2!wz9AHH68xp8!<%Jqp^&Hw-a000000RI3000000010+sY-wa+bZ>G1 -1OfmAZf|a7000011aog~WdH>M0%CAAe<9`Lptgpr6F_xjAC6(~TLj#*ewiHf`^rCgHqw;r~cW -`-QV>+d2nR~0RR9314d?c1pxp60u4rWZf9v?Y-Lk)VRU5# -0SE?SX>@ZoGynww000OKMs;pyX<}?;RC#b^0|5bs~EXcCXx(drQcb3B`Fx$)^%va$Ar) -C7cIzWpi|HWpo0{EFN!zncXl9K5w2;FV{y1jDTJCC^p$-mHEbO0#qkqh9c2>uJC38-{*D7fZ(%hZo23R -4S;p`Q9JBQllDytVQh3vVR>b8b1?xVS5nwzfbg8kY9lvP5=0UVRLh3bW~wy -a{(zO4hF%Q&3qd{UvF)tP|M@Vc@bh1|A(%Z=^thBTg(V;WprU=VRT^u^?FS>S$_F2)vN@Mb6UJ-F(lri -_dqerx4lR4>iBsz2WM<=Vqt7^0p25#Yo@G%*b#-tU^&3KX?w7l?~*Sh8@1jRRblZzybED-b7^O8ZDnqB -a{(&yMM2gb*yIgxLg7xQ_Wp*<{#EXTnHMp{o_cMFjX()@VQgh?V`*h`0o{dW0B>Pr5ftu@@z<*O39}j` -u&O7io3b$Is?RA$O$l~kY-wa+bZ>G3;nCe3IziXCXi3Z2@%=QxvO>-_DBy8`Vb0 -jGrW9$=2qSMXvL3HGEG0000000000{{R3000000 -3t@9}X=iS2Wo~qH015$z{^Dg=h-~N_zJ`Red1EINWrM}GXaQb}6c#qIM2EQnHo-KZ`k;Xmr`<4sJYKN! -!u{G5u+^j1lf!PF4>GEG0000000000{{R300000033g#@Wo~0>Wpe-t0Y>fS!w4MxxaL=+DqP^k2!wz9 -AHH68xp8!<%Jqp^&Hw-a000000RI3000000010+sY-wa+bZ>G11OfmAZf|a7000011aog~WdH>M0%CAA -e<9`Lptgpr6F_xjAC6(~TLj#*ewiHf`^rCgHqw;r~cW`-QM0jf5op`2KT2xis%K-|*_9BKowP1qopf1fvG|`fdOK000000093000000000q3Y;R&=Y*Tb$ -bY)XxXk~3-1_KCkWpib6c4cG&;nCe3IziXCXi3Z2@%=QxNn`>=>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HJ_1fvw5 -rj-B|XP@r^w5ufb=C_Ju$l1`nW&GEpSWb-yZDDvxbY*RG0006HM{I9mVQf=$VRU6wd2nR~0RR933`cBl -Vqt7nVQh6}a|Hna2mvylR#67|O%*Grnxkw0HI;&$`LH+T3zWkAaKFZV1cd@r70RRO80?I5NZ-bfLFbqC#o>4E?M+l67UG^w8*<_XZ#%uyqCrG{{7b@t4MVjY>G@u4Q3HlB( -d+LiLJm-R=h;`?dxBv(O$}AplgPGkh3_fq3Q7_j=2#kPT_9!;lWR>~GYywm#NWLQ%D(Hkon&*Qwpawq) -`VKLB>Wd>h=Ype%b?2720000000000{|^8F000001xapjb#w*-2XJy_c29M50h18CfUz`Mi!Z}iQtl5; -XwV(E`Zdd&WRj~^37Yhpmk4rYb7gXNWn=>3(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@nkxGg*8 -X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%GNp5g;bWLG!1pxpG0`+VYVk7oBr%DNv+($;q`HHK!gIHa) -*%m(-e#9sm3L)b@L&d6G@+l`%qd385?K@+fP1(-9sgE>i7rMzqbpe&g=6W7=VqesjRYGc!>wZFzp>JB4 -@xD;^wu&SY_r(DK000000096000000000I_Zg6#Ua|Hna2?5oOUkD7Ff~JZGMgrhZ&rP2gYrktY!x$bp -v=qCl=HdVV000000096000000000S1Wn^h#RC#b^0|5hJZh8L*O=WapRC#b^1pxp60troJbYWIuY;|P? -0RRX906+i$000000096000000000P0WprU=VRT^y0RRdCb>vO>-_DBy8`Vb0jGrW9$=2qSMXvL3Hj|@I6Zgd6;17>D+0ot2U6Id2jc94hrndMfLayEe1ISdA&%p{mB -1!VWk)dp{HRC#b^0q60ODXZfg;ZLdR+&{6`aVc`0O3`qRNClv)aMjKgwAH@`bu1x<7g|G$};xvA~n-$_S -25D|^b#!wA;nCe3IziXCXi3Z2@%=QxClv)aMjKgwAH@`bu1x<7g|G$} -;xvA~n-$_S3t@9}X=iS2Wo~qH0^!l!96CYQxM)es+421}!Q~o5fc_fP)zsZfv!yd427@;7veO2zMB=|GYE2JWMyS-Wn=>3(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@mb -udT)PryvH%qoUf%jN6#Tx81sfg4O?s`uaep_R|Ilc42H~ZewX>a{}Sf-5feW*SKg&%h~b$G{NN>LxBDo -)YaDXjV8yEYGrM&t;O}HAO^^zqT0%g+nC0;-MWK<)&Ge4`aq}l(*_53X>@L7b8`aW(cK(6LD#rwNz2*s -{WQVl8bg5o8r0R+^o=IRl4@l*oLxBDo)YaDXjV8yEYGrM&t;O}HAO^^zqT0%g+nC0;-MWK<)&Ge4`aq}l(*^`j -a7knZ0RRU806-uB1y68qb#w*;0&j2umB{9L9(7`0)Rt93YLV-HLXe?vTA1;^Q1`ZqBog<<0(5x+hyLPa -Scq)s9KMExvw34D6J>+NwrBxfixd_%u|$Wt0&Z^r00IzCcWz~5Q*>c;Wm98lWo=;u1ON+UWn*k%a$$67 -c4Ytn009VQb#7;AVr*pq1pxv1^sESGu0eNZ)cp(*eFU-DRQ(QTUJ^TE1nY56>E%WO3UhRFbz^jOa%E%y -1pxv@>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HJ_1fvw5rj-B|XP@r^w5ufb=C_Ju$l1`nW&GEp -SWb-t3So3~VPj}*Wo~o;1pxsQXM0|*v-OPCsP-SFga&u*FLvL+u -X>@I6Zgd3!00#g7Kp_AKQe|XiWo>0-1pxpG0Y>fS!w4MxxaL=+DqP^k2!wz9AHH68xp8!<%Jqp^&HwZFzp>JB4@xD;^wu&SY_r(AJ000000093000000000hBWp-s@Y-MCYbaY{3Xa)lU -X=DL}aSf9!PV~dK2uo>;u!nFdemP_$e?^hl+JkM;eY!XaZDnL>VN`i=WdTAkVTFju)TMl$g}C@DyY!@{4YR*LMYs=?Zg_*ktx|21^lzg9sBTBv19V|$0m+Y= -slx_K8vXre8<)H){QgX6j~{c$E$eY_=V_ZFuLe_NXk~3-1`PvdW_AJEn^6;37FKqUhx?i3R+Mr!fY&(; -2BFL(m@EZk_srD=W^7?+a{}Sf-5feW*SKg&%h~b$G{NN>LxBDo)YaDXjV8yEYGsr6V0dsu5sjwLjgQcr -OsaG1F{QvR+LMR3-^ZN{xOxO`VQpmsMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*rQx*t>6v={g -sJ=SZlTl1iF5eQ8IAl(q%E@>So406W33O>~Wpi|4ZEyepNC{+Rc4cgDaAk4ioJpYH;+t0eX2w~A!Q+0eaZ{MVycPK^Kn -000000093000000000YTY;R&=Y*cx0Wpe-u0oCr34oQf!Y4K`P(FaQVwIle)QgI&pHa%8Z1>xis%K_g{ -UD)~8A`MB56fuKVLH|(nUe={6PmCJYdcneig@gbA000000093000000000VacWz~5RC#b^a{vkfhyLPa -Scq)s9KMExvw34D6J>+NwrBxfixd_%u|$Wt0VPFrzQMU~Cv3(oCX8r!*SiR9zOp;)>$$b(q=dpw@&Et; -000000RI300000001S3vY-Mg^c~p6DWpe-t0Y>fS!w4MxxaL=+DqP^k2!wz9AHH68xp8!<%Jqp^&Hw-a -000000RI300000000(DfZe??6a{(Ag)zidWvABmX&uCxQ{9vUAsn@)h(<^=)@3p(i4Fw8icywiMb7^mG -a{vkfWOW`wsTH9-LlJ`2|Ay5Z(?oEikl{+~pis;@Q*TJ#0Rw0P%&6V>N}#h955#ht!=;R2Lj=uo+MI7C -_W0!u+yDRo000000RI300000001I?-VQzD2bZKvHa{vkfG*S<)6P6lYy(#<=BR_>s@(?%#f7ArN-=Rj? -7Ns(10d}<;Xp5rzopjE#5h98`u~h0v`BV8NkLOrpFzp4z*Z=?k000000RI300000000?qrb7gXNWn=>3 -(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@oCf)+{Nc)mXTm=OBn8@DNvJ^I(u7Ttc@lJ^C)`OzK- -Q)6glZDC1d1pxpD002NB018xcVQzD2bZKvH1_}daW_AJEn^6;37FKqUhx?i3R+Mr!fY&(;2BFL(m@EZk -_srD_V{dMBa$#e1Nn`<^2rNlD$O59e#ogQsB77jPl+h5j^*S;RbaG*Cb7^#GZ*Ek1aAg5B -QV*^ZmKt8YDf|&5KZQ>65I6*X)C9iYp+?yjr7~y;ZDn*}WMOn+0rh%KI9Y!AFx9LCk8@hQXE7w+qW3^C -%eTEp@#^?_H3w&GZ(?C=a{=BXk!z-`g4hv-$6z_YxoLZ_neUP>BpbEf7FA*KKfDHMZg6#Ua{;NMdRLRk -o603iZGCpt_aPM;fa{=9jW&m$tWDykZj`7#3_zANbB(SO{shhGe=&H{tM@LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?j -cD1Ll0Ra$Ha$#@6CZbEf#WNc*y0}EqpZ*yf$Wprq7WCCv8Wft0d6dj=*oo`t>c$)o5X19O9`rXu=lIsX*Zg6#UO<`~W6`5yb%eAXO2UPPRaj@(( -`=>9Tsh)f38uw_!yYu^q5NmF4cWzX2VQzD2bZKvHa{vkfmB{9L9(7`0)Rt93YLV-HLXe?vTA1;^Q1`Zq -Bog<<0piXs!(qZ;Lj-T~1#;7GmaeV$(NXMz5-`m!kXibHi2(or000000RR600000001#AiVQzD2bZKvH -Q)6glZD9rm2yJC_VPs)+VE_pMb>vO>-_DBy8`Vb0jGrW9$=2qSMXvL3HGEG0000000000{{R300000025D|^b#!w83IT`y;$>KfZ0H=mhJ>?uVKfZ0H=mhJ>?uVa{vheM(yUq2ps*m=2xUDT;RqCgn#@WzFu~@ -adfH5^@&-|0000000000{{R300000033g#@X=Gt^Z*l+x0ssVVZ*FA(00035b8l^B00jX8VsJHoA?4$s -wuZp1Wc+9AOf`(TIbyKWjTy4WkGaM+ZSSEb;k|42*wg~2q@3^Lq|9zft}OB~jx>)hO74peesZgXjL -X>V>+d2nR~0RR934pez?WkYXmZE19EWo~o?0{{nSWo~72X>$Mt0Rb~)Sy27nfgB_8)3w|}PX0nR=3w=3 -IXvnu`4)OW{2u`dbaG*Cb7^#GZ*Bku0s)^0EJ-@Z0;0Ob-P{Wzd?2rs)M&&=&l*}G;Jw22Ix+z?QV*^Z -mKt8YDf|&5KZQ>65I6*X)C9iYp+?yjr7~y&31xV6Wo~n6Z*Bku0s)^0EJ-@Z0;0Ob-P{Wzd?2rs)M&&= -&l*}G;Jw22Ix+!dbsj>g6`?#s5rWnKhSeO?L~x^!;Y#eFP|P}0Z%E!6RC#b^WI=OtX=iS8LTqVnWK(5f -Y*ctqbaDg)01ISgV{Bn^VRUJBWdH>M00;p&C-dJ*Ygad93@i9pCb+uV$agN<27ESr7(9FG*~&Hm00000 -00030{{R30000012xfI|XK7+=WdH>M00;rv#pxZ$?Eb+fZ@!;9xB`-n7hgEflW({{JNKm>5MosT00000 -00030{{R30000023UhRFbz^jOa%E%y1pxpE0f8RpmkyA>T}tj_kdvFcMGT4`fC%jFncQ)?C=$=&Q2+n{ -000000RR60000000RIYMbaY{3Xl-R~bN~eb00;rzm4zh;p_e*BIH}G_uHL`vNz<~wu(~9K*$!EolXjf| -0000000030{{R300000PRC#b^WI=OtX=iS8LTqVnWK(5fY*ct@WCR2N3uI+uY+-U?bZK^F00jX62mzD8 -lw1;)SBG%dXmxGxLL8mnw6u)Qc}1I}@VaR|$Swc?00000009600000000039W_507X<}?;00jX62m$}n -N9KoA`=lHP5CAeGSam&QM5L=EvI-ld!uoqop~3(F0000000960000000006Cb98cbV{~&5DV!5;tB_sd<000000096000000000SAVQgh?V`*h`1pxpF -0Y>fS!w4MxxaL=+DqP^k2!wz9AHH68xp8!<%Jqp^&Hw-a000000RI300000001H-OY-Mg^c~p6DWd#8M -00IeCZ)s#xbYXO51pxp601a1ZbZ%vHb3txnXm4@`0t$C&bZ%vHb5C+)0q}{k6GZ`41H209uSUNb0Dy~! -|1R3kngQ>HC-KI9f(dtNbZ%vHb4g?YiECIT&Bl;lSX#$ms8AQN7m&qYI@o0Raxbxa~M%Zlr^{H1ibsRCVcA*+(@K+$R_oJY%-uiLn6)Z)RpgXklq?00sdF -aB^vHa%psV000C62w`$#XlZt3WB>pF3Rh`#Ze??GP;YYv0tRShX=iA3000CDbZKp6b97;CZ~y>E6j(!O -VQFqcY-w&}Q)OXnRCrKyas&bZ2V!Y-V{d7000jX8ZyuKUhrL_QB$OCu+VTUE>b16EcuX?V{EC+7E3Kt- -MklB)P_)|`Y=H7dO_e!^G2i>0SdC0NppV!6v|_i_0S0Voadl~A00jX8ZyuKUhrL_QB$OCu+VTUE>b16E -cuX?V{EC+7E3Kt-MklB)P_)|`Y=H7dO_e!^G2i>0SdC0NppV!6v|_i_6IerNVQFqcY-w&}Q)OXnRCsA* -1OfmDVrg_^Z)t7-1pxwY9+vrsy<5&Clo)5)@&l6UwYFh+Ofu5^ik9drt)+9Y#&NEOd)wn+n#11fGQ~$X -901P7x>0daZB@{PThHqO25f0@b!lV(1pxwY9+vrsy<5&Clo)5)@&l6UwYFh+Ofu5^ik9drt)+9Y#&NEO -d)wn+n#11fGQ~$X901P7x>0daZB@{PThHqdSVL%GX>LL?_X=DTf00&}ebYpL6ZU6-V0`+VYVk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm -3ZsHT^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1RsjZVX>oOFWB>&L0`+VYVk7oBr%DNv+($;q`HHK! -gIHa)*%m(-e#9sm3ZsHT^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1Rs - ------END STRICT TYPE LIB----- - diff --git a/stl/RGBCommit@0.1.0.sta b/stl/RGBCommit@0.1.0.sta new file mode 100644 index 00000000..b7a90a52 --- /dev/null +++ b/stl/RGBCommit@0.1.0.sta @@ -0,0 +1,269 @@ +-----BEGIN STRICT TYPE LIB----- +Id: stl:DjmgI8Aw-L0XQMsu-q9HS$Za-!D8BzVj-bvaq$yq-p56MdqY#jester-philips-prelude +Name: RGBCommit +Dependencies: + StrictTypes#century-comrade-chess, + AluVM#congo-archive-folio, + BPCore#garbo-radius-peru, + Std#ralph-blue-lucky, + CommitVerify#tennis-peace-olympic, + Bitcoin#signal-color-cipher +Check-SHA256: b85826c8774d6d163e1206bd2460f08a710577e8c3009d6224576a31d0d964ce + +2~tNwLvL+uX>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI)Q*?4^V{}w`aAk91a5aA+<>R2X +hQO_4{AcS-HH^7AVzASV8M4NYxyCjHL2PwaO>Z8S`G>t*&Lor=XWH@ulIpd#VR%e3()@~+=qs(Ia|S|C +LvM0r$}AplgPGkh3_fq3Q7_j=2#kPT_9!;lWR>~GYywm#15aU=OZ$bvG|>z)+>9PT;Au-7)~D;-++hbyX<}1pbY-V7RRS&fT*&Z=qeY@Wmfle* +z!SF)@h8|JkU^FEQwjx4X<|ua20~CnZ*pY?04}!>CAn^87TS9h9ibhaZ&^Bcn*B*;w|~I;-PD|t>jq6_ +bZBp6MklB)P_)|`Y=H7dO_e!^G2i>0SdC0NppV!6v|_i_4nk~cZe&wsVQf@*P;_!=8SA{&vly$FvzVnz +Hf7z~rv`86=_Ka^V5yX|y#`JSQ)OdvWpq?<6X>I}lA>%$n +#j0HLDJN5-IKgM_J7b(p+0MPGk2Gl)y2(Rz1Xgc#bfbbo^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1 +Rs>XdX=DsTZ*6U9bXH|@X=Zr^063mQh9?yTI7S;;e;>sZfv!yd427@;7veO2zMB=|GYU;*a%*g5NMUnm +ZLh7x^`{^P$fKg#%8c8X#<$(NgM!uni2C|Kr}onZ3R84)X=8LqVRLAc_h5K%L=laq&yA1JoJ^{7>oKLk +F4~iax8KK|47hp@Qe|^xa&~28LV0v$b1}=fEj#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RawDWpib6 +c4cHjd30rSGX8=VN#A(BKKz&v`r;e6DUv<<*U}cmb;*F>vukd; +=m`ygb@x#_>`RmOO$0)3Z)}yry~#}iVEJ)s5j^%uEnQ9{n2s|9Fa^ps+HG#`XS5DMY;b5{PIYZeZ)9O} +Xt{%a=RmHK6WZ%EWRm@*ULd%lgGoFTxUTU +76^nC$%1sKzB<;EQA|)S-x88IWKN#S$#@T&w`gPtRC#b^PGN0jYXqYdo~D%m7H6OD0<^0n_2##VWXRdj +y=DB@qgYOj1yf~hNn}L;2|;XhOksItaxnt|25f0@b!lV)3_)ykOksItaxqh7bOiwb2?5A!f_n>Eea4Xl +By!~v3=AX`3Ri0000000000{{R3000000B0+O=X=iRyWp-s@Y-MCYbaY{3XhLjhZe&wsVQf@*P;_zx1ONKtpQ8M_qJyiO1VIUJ=H=)@ii_1#@&^bY%hjG)3KC +&kYOztQDksx&yAAHY;R+00^!l!96CYQxM)es+421}!Q~o5fc_fP)zLxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n +-dr?jcD1Ll0RaLKV{dL|X=G(?bZKF1Q)OXn00sjDb7f&{0o#gN8iEuMbtv-qj6g$b#7A9pc!|f`I$jaR +zSe2A1O;<+VRU5yXj3#G4BS)3O?Kk8E~;iP+B(^hzXq!*4!qFzdIL(#1Z;0(YXafX-5feW*SKg&%h~b$ +G{NN>LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RaODa%Fa9VQgh&00sjD +b7f&{0gt=F=tr7PLxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn +@L3mU0Z2&n-dr?jcD1Ll0RbUFb8~5DZc=4-WnpY(WI=RvVPj}QY-w&}Q)OXnRCsA*1OxyKV{dL|X=G(? +bZKF100sjDb7f&{0o#gN8iEuMbtv-qj6g$b#7A9pc!|f`I$jaRzSe2A1O;<+VRU5y{4_<~U(XE-|Ev|H +db$N7;9H9;8!%;3hl7uME$faw1Z;0(YXafX-5feW*SKg&%h~b$G{NN>LxBDo)YaDXjV8yEYGuo~Ej#9D +^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RaIKV{dL|X=G(?bZKF1Q*>c;WdH^P1aoC!YypA{4XEgn0epQk*PX+nL>xOm%pK>soMo}bYXO50sJ&Y-CxfQ3;(PYq_>4e9YQ#rfba;u!+d5tm#=h2RwFCuo +bYXO50ccY+APn47#!YtOwl1n>FWNfUk-rA3DGt2Q_Id+K%mi$2V`~E8(cK(6LD#rwNz2*s{WQVl8bg5o +8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%B2y$h1WnpY(WB>*O1aoC!YypA{ +4XEgn0epQk*PX+nL>xOm%pK>soMo}bYXO50ccY+APn47#!YtOwl1n>FWNfUk-rA3DGt2Q +_Id+K%mi$2V`~E8(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^ +^xj-FXm+)yumJ%eL349yXKqquc4c8~Wn@HQbYVhlX>MdwWnpYocu;h51OxyKV{dL|X=G(?bZKF100sjD +b7f&{0o#gN8iEuMbtv-qj6g$b#7A9pc!|f`I$jaRzSe2A1O;<+VRU5ya1CV;vVwtcAGbZ_5@VACR|ut2 +VXXq-)V^B9&!_4M1Z;0(YXafX-5feW*SKg&%h~b$G{NN>LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn +@L3mU0Z2&n-dr?jcD1Ll0RaIKV{dL|X=G(?bZKF1Q*>c;WdH^P1aoC!YypqE!sthuPUKDEU2%WC`V+X+ +(UG)mk--2W1{>juaWw^VbYXO50dNgv5VC@SZy&ck_>4e9YQ#rfba;u!+d5tm#=h2RwFCuobYXO50sm-Y +z<5%CY59k^g5#W{6D&GDo53%OaP0&iRq*O1aoC!YypqE!sthuPUKDE +U2%WC`V+X+(UG)mk--2W1{>juaWw^VbYXO50sm-Yz<5%CY59k^g5#W{6D&GDo53%OaP0&iRqMdwWnpYocxhw=1ONKtpQ8M_qJyiO1VIUJ=H=)@ii_1#@&^bY%f>4P_9rf`M-zw>{+&W0M0{2&GbCtpecGzFNi4 +r|Jm=Y;R+00^!l!96CYQxM)es+421}!Q~o5fc_fP)zLxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RaLKV{dL|X=G(?bZKF1 +Q)OXn00sjDb7f&{0o#gN8iEuMbtv-qj6g$b#7A9pc!|f`I$jaRzSe2A1O;<+VRU5y|7c^tcv66A`G>fI +LxBDo)YaDXjV8yEYGuo~Ej#9D +^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RaODa%Fa9VQgh&00sjDb7f&{0fGz-uWS7@0e2{fILxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RbUFb8~5D +Zc=4-WnpY(WL9Bpb!9?qX>MdwWnpYocu;h51OxyKV{dL|X=G(?bZKF100sjDb7f&{0o#gN8iEuMbtv-q +j6g$b#7A9pc!|f`I$jaRzSe2A1O;<+VRU5yN@#iqkT|?l*=bx{^0c**fmF&H)l(b`S3$sb4!MK-1Z;0( +YXafX-5feW*SKg&%h~b$G{NN>LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll +0RaIKV{dL|X=G(?bZKF1Q*>c;WdH^P1aoC!YypqE!sthuPUKDEU2%WC`V+X+(UG)mk--2W1{>juaWw^V +bYXO50ZM3k2aq_tRM}}_>4e9YQ#rfba;u!+d5tm#=h2RwFCuobYXO50c}La^e<`!Iztr?rsl#d#OQkE +ER^^L)C{HEhxT=ipag7hV`~E8(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@nkxGg*8X!CPrawgw_ +sqk4BX8}k^^xj-FXm+)yumJ%B2y$h1WnpY(WB>*O1aoC!YypqE!sthuPUKDEU2%WC`V+X+(UG)mk--2W +1{>juaWw^VbYXO50c}La^e<`!Iztr?rsl#d#OQkEER^^L)C{HEhxT=ipag7hV`~E8(cK(6LD#rwNz2*s +{WQVl8bg5o8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%eL349yXKqquc4c8~ +Wn@-iY;|QqY-w&}Q)OXnRCsA*1OxyKV{dL|X=G(?bZKF100sjDb7f&{0o#gN8iEuMbtv-qj6g$b#7A9p +c!|f`I$jaRzSe2A1O;<+VRU5yN@#iqkT|?l*=bx{^0c**fmF&H)l(b`S3$sb4!MK-1Z;0(YXafX-5feW +*SKg&%h~b$G{NN>LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RaIKV{dL| +X=G(?bZKF1Q*>c;WdH^P1aoC!YypA{4XEgn0epQk*PX+nL>xOm%pK>soMo}bYXO50ZM3k +2aq_tRM}}_>4e9YQ#rfba;u!+d5tm#=h2RwFCuobYXO50c}La^e<`!Iztr?rsl#d#OQkEER^^L)C{HE +hxT=ipag7hV`~E8(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^ +^xj-FXm+)yumJ%B2y$h1WnpY(WB>*O1aoC!YypA{4XEgn0epQk*PX+nL>xOm%pK>soMo} +bYXO50c}La^e<`!Iztr?rsl#d#OQkEER^^L)C{HEhxT=ipag7hV`~E8(cK(6LD#rwNz2*s{WQVl8bg5o +8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%bL349yXKq$+X=GD$VRU6eY-w&} +Q)OXnRCrKyas&hb3}bI@W@%()Zggp3YybuW1aoC!YysPfS{i~B5OpZ>_>4e9YQ#rfba;u!+d5tm#=h2R +wFCuobYXO50WPwo{ujV7L@=1(T$>wOY}Ov_b`4?P%YY`+Wb+o`y98`+V`~E8(cK(6LD#rwNz2*s{WQVl +8bg5o8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%95o2#|W@%()Zggp3Y*Tb$ +bY%br0|awrVQc}9yTa&4noi_R;$3lnz4{Zl)X|Z&ZIQtMA_g1big7gsb97;JWdSa-rT!PdFhnqz;9Q#< +T5Q%H?RE`e-pha{(`54&;kyKEZ)0l$;nCe3IziXCXi3Z2@%=Qx_>4e9YQ#rfba;u!+d5tm#=h2RwFCuobYXO50WPwo +{ujV7L@=1(T$>wOY}Ov_b`4?P%YY`+Wb+o`y98`+V`~E8(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IR +l4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%95o2#|W@%()Zggp3Y*Tb$bY%br0|awrVQc|{ +3=OYq{WJl0D5$WZob97;JWdSa-rT!PdFhnqz;9Q#WZob97;JWdSa-rT!PdFhnqz;9Q#~ob0000000000{{R30000007(sJ$X=iS2Wo~qHLTqVnWK(5fY*ct@WCZ~L3IT`y;$>KfZ0H=m +hJ>?uVE25ED1b!Bn_;nCe3IziXCXi3Z2@%=Qx +4E?M+l67UG^w8*<_XZ#%uyqCt-#n(R;4&W&+>mb;*F>vukd;=m`ygb@x#_>`RmOO$uRbbWCA+ +WpZ;d0^!l!96CYQxM)es+421}!Q~o5fc_fP)zG60RRU806-uB4?}NmV`X7%Wn@8gbYWv?1pxpD002NB +01ZQLZewL(Y-MCbVRT^y0RRU806-uB5kqfoV`X7%Wn@NmZf9v?Y-I)l3S)0=ZE19EWo~oV=@3Ik?lb^+R(Q4?4eR(6nw`loIF_owDud_=c42H~ZewX>a{=9jW&m$t +WDykZj`7#3_zANbB(SO{shhGe=&H{tM@ +LxBDo)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0Raz1cywiMb7^mGQ)6glZD9rm +2yJC_VPs)+VE_pMb>vO>-_DBy8`Vb0jGrW9$=2qSMXvL3HGEG0000000000{{R30000002XbX(Wo2!100{v`?dHP>9R0ZFSEMRj;Km4qfBYZ5UUs>0bg9bq +iCNA70000000030000000000BVRLh7XKrm}Zgg`13IT`y;$>KfZ0H=mhJ>?uVa{vhe +M(yUq2ps*m=2xUDT;RqCgn#@WzFu~@adfH5^@&-|0000000000{{R300000033g#@X=Gt^Z*l+x0ssVV +Z*FA(00035b8l^B00jX8VsJHoA?4$swuZp1Wc+9AOf`(TIbyKWjTy4WkGaM+ZSSEb;k|42*wg~2q@ +3^Lq|9zft}OB~jx>)hO74Mli#Wo~n6Z*Ek1aAgGn00065MrL*e0RR934MuftXK7+=Wm9xvbY%nq2nJ$l +baOT|00jX600<05b#7;AVr*qpd2nR|0S$F-b7^O8Wn?xqLTPje2S;UYWpinB1`PvdW_AJEn^6;37FKqU +hx?i3R+Mr!fY&(;2BFL(m@EZk_srD@b7N>_ZDC1d0hChH+XJhss8OG%_CC-Q>(otsF+cqN0Qy}ddQ=3E +5CvvzVP|s!;nCe3IziXCXi3Z2@%=Qx~Wpi|4ZEyepNCs(hb9H5M0k-IXh8!q$B6|*YuiTY;OURW8#d%1{rxIXtTaY^?oCkDe +b98QHbOOpO9&dx0-7pM3Z=O*v*GCA9fL-<|HrZsA`NnJlR3~AEBGG%U@MZ$v=XJ?|;InIPy66cFfOYp# +JM2r7_Du?5Y;;Uvd1Z2QF##l3QrKmH@SMtOBR5nML?B>%qbz^!%<&Wu0B;HjDvSwXb8}^MRAFax0VyR8 +2Em!ld>cVuZ*8Se%j3y;5n>eohpw0DA7$}d%m{5|bYWy+bYTJYdQCW4e)%xftOSp9TD)g5B;KO;Krzd= +y+`rt_<1!4XKZg`VQg~&-XoD~rmTY45rxNKIl#GTd$5`Bk}o71wcZw0Vevn_3t@9}X=iS2Wo~qH0V?uE +LDn7E_h5K%L=laq&yA1J +oJ^{7>oKLkF4~iax8KK|47hp?M`dnhb7^x^V`ybVZDn*}WMOn+00{wgKfZ0H=mhJ>?uVa{vheM(yUq2ps*m=2xUDT;RqCgn#@WzFu~@ +adfH5^@&-|0000000000{{R300000033g#@X=Gt^Z*l+x0ssVVZ*FA(00035b8l^B00jX8VsJHoA?4$s +wuZp1Wc+9AOf`(TIbyKWjTy4WkGaM+ZSSEb;k|42*wg~2q@3^Lq|9zft}OB~jx>)hO73rB2kVqt7k +bYXO51pxpG0oCr34oQf!Y4K`P(FaQVwIle)QgI&pHa%8Z1>xis%K-|*_9BKowP1qopf1fvG|`fdOK000000093000000000q3Y;R&=Y*Tb$bY)XxXk~3-1_KCkWpib6c4cG&;nCe3IziXC +Xi3Z2@%=QxNn`>= +>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HJ_1fvw5rj-B|XP@r^w5ufb=C_Ju$l1`nW&GEpSWb-y +ZDDvxbY*RG0006HM{I9mVQf=$VRU6wd2nR~0RR933`cBlVqt7nVQh6}a|Hna2mvylR#67|O%*Grnxkw0 +HI;&$`LH+T3zWkAaKFZV1cd@r70RRO80?I5NZ-bfLFbqC#o>4E? +M+l67UG^w8*<_XZ#%uyqCrG{{7b@t4MVjY>G@u4Q3HlB(d+LiLJm-R=h;`?dxBv(O$}AplgPGkh3_fq3 +Q7_j=2#kPT_9!;lWR>~GYywm#NWLQ%D(Hkon&*Qwpawq)`VKLB>Wd>h=Ype%b?2720000000000{|^8F +000001xapjb#w*-2XJy_c29M50h18CfUz`Mi!Z}iQtl5;XwV(E`Zdd&WRj~^37Yhpmk4rYb7gXNWn=>3 +(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@nkxGg*8X!CPrawgw_sqk4BX8}k^^xj-FXm+)yumJ%G +Np5g;bWLG!1pxpG0`+VYVk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3L)b@L&d6G@+l`%qd385?K@+f +P1(-9sgE>i7rMzqbpe&g=6W7=VqesjRYGc!>wZFzp>JB4@xD;^wu&SY_r(DK000000096000000000I_ +Zg6#Ua|Hna2?5oOUkD7Ff~JZGMgrhZ&rP2gYrktY!x$bpv=qCl=HdVV000000096000000000S1Wn^h# +RC#b^0|5hJZh8L*O=WapRC#b^1pxp60troJbYWIuY;|P?0RRX906+i$000000096000000000P0WprU= +VRT^y0RRdCb>vO>-_DBy8`Vb0jGrW9$=2qSMXvL3Hj|@I6 +Zgd6;17>D+0ot2U6Id2jc94hrndMfLayEe1ISdA&%p{mB1!VWk)dp{HRC#b^0q60ODXZfg;ZLdR+&{6` +aVc`0O3`qRNClv)aMjKgwAH@`bu1x<7g|G$};xvA~n-$_S25D|^b#!wA;nCe3IziXCXi3Z2@%=QxClv)aMjKgwAH@`bu1x<7g|G$};xvA~n-$_S3t@9}X=iS2Wo~qH0^!l!96CYQ +xM)es+421}!Q~o5fc_fP)zsZfv!yd427@;7veO2zMB=|GYE2JWMyS- +Wn=>3(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@mbudT)PryvH%qoUf%jN6#Tx81sfg4O?s`uaep +_R|Ilc42H~ZewX>a{}Sf-5feW*SKg&%h~b$G{NN>LxBDo)YaDXjV8yEYGrM&t;O}HAO^^zqT0%g+nC0; +-MWK<)&Ge4`aq}l(*_53X>@L7b8`aW(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@l*oLxBDo)YaDXjV8yE +YGrM&t;O}HAO^^zqT0%g+nC0;-MWK<)&Ge4`aq}l(*^`ja7knZ0RRU806-uB1y68qb#w*;0&j2umB{9L +9(7`0)Rt93YLV-HLXe?vTA1;^Q1`ZqBog<<0(5x+hyLPaScq)s9KMExvw34D6J>+NwrBxfixd_%u|$Wt +0&Z^r00IzCcWz~5Q*>c;Wm98lWo=;u1ON+UWn*k%a$$67c4Ytn009VQb#7;AVr*pq1pxv1^sESGu0eNZ +)cp(*eFU-DRQ(QTUJ^TE1nY56>E%WO3UhRFbz^jOa%E%y1pxv@>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7 +Lu3>C`4HJ_1fvw5rj-B|XP@r^w5ufb=C_Ju$l1`nW&GEpSWb-t3So3~VPj}*Wo~o;1pxsQXM0|*v-OPCsP-SFga&u*FLvL+uX>@I6Zgd3!00#g7Kp_AKQe|XiWo>0-1pxpG +0Y>fS!w4MxxaL=+DqP^k2!wz9AHH68xp8!<%Jqp^&HwZFzp>JB4@xD;^wu&SY +_r(AJ000000093000000000hBWp-s@Y-MCYbaY{3Xa)lUX=DL}aSf9!PV~dK2uo>;u!nFdemP_$e?^hl ++JkM;eY!XaZDnL>VN`i=WdTAkVTFju)TMl$g}C@D +yY!@{4YR*LMYs=?Zg_*ktx|21^lzg9sBTBv19V|$0m+Y=slx_K8vXre8<)H){QgX6j~{c$E$eY_=V_ZF +uLe_NXk~3-1`PvdW_AJEn^6;37FKqUhx?i3R+Mr!fY&(;2BFL(m@EZk_srD=W^7?+a{}Sf-5feW*SKg& +%h~b$G{NN>LxBDo)YaDXjV8yEYGsr6V0dsu5sjwLjgQcrOsaG1F{QvR+LMR3-^ZN{xOxO`VQpmsMe3tp ++xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*rQx*t>6v={gsJ=SZlTl1iF5eQ8IAl(q%E@>So406W33O>~ +Wpi|4ZEyepNC{+Rc4cgDaAk4ioJpYH;+t0eX2w~A!Q+0eaZ{MVycPK^Kn000000093000000000YTY;R&=Y*cx0Wpe-u +0oCr34oQf!Y4K`P(FaQVwIle)QgI&pHa%8Z1>xis%K_g{UD)~8A`MB56fuKVLH|(nUe={6PmCJYdcnei +g@gbA000000093000000000VacWz~5RC#b^a{vkfhyLPaScq)s9KMExvw34D6J>+NwrBxfixd_%u|$Wt +0VPFrzQMU~Cv3(oCX8r!*SiR9zOp;)>$$b(q=dpw@&Et;000000RI300000001S3vY-Mg^c~p6DWpe-t +0Y>fS!w4MxxaL=+DqP^k2!wz9AHH68xp8!<%Jqp^&Hw-a000000RI300000000(DfZe??6a{(Ag)zidW +vABmX&uCxQ{9vUAsn@)h(<^=)@3p(i4Fw8icywiMb7^mGa{vkfWOW`wsTH9-LlJ`2|Ay5Z(?oEikl{+~ +pis;@Q*TJ#0Rw0P%&6V>N}#h955#ht!=;R2Lj=uo+MI7C_W0!u+yDRo000000RI300000001I?-VQzD2 +bZKvHa{vkfG*S<)6P6lYy(#<=BR_>s@(?%#f7ArN-=Rj?7Ns(10d}<;Xp5rzopjE#5h98`u~h0v`BV8N +kLOrpFzp4z*Z=?k000000RI300000000?qrb7gXNWn=>3(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IR +l4@oCf)+{Nc)mXTm=OBn8@DNvJ^I(u7Ttc@lJ^C)`OzK-Q)6glZDC1d1pxpD002NB018xcVQzD2bZKvH +1_}daW_AJEn^6;37FKqUhx?i3R+Mr!fY&(;2BFL(m@EZk_srD_V{dMBa$#e1Nn`<^2rNlD$O59e#ogQs +B77jPl+h5j^*S;RbaG*Cb7^#GZ*Ek1aAg5BQV*^ZmKt8YDf|&5KZQ>65I6*X)C9iYp+?yj +r7~y;ZDn*}WMOn+0rh%KI9Y!AFx9LCk8@hQXE7w+qW3^C%eTEp@#^?_H3w&GZ(?C=a{=BXk!z-`g4hv- +$6z_YxoLZ_neUP>BpbEf7FA*KKfDHMZg6#Ua{;NMdRLRko603iZGCpt_aPM;fa{=9jW&m$tWDykZ +j`7#3_zANbB(SO{shhGe=&H{tM@LxBDo +)YaDXjV8yEYGuo~Ej#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0Ra$Ha$#@6CZbEf#WNc*y0}Eqp +Z*yf$Wprq7WCCv8Wft0d6dj=*oo`t>c$)o5 +X19O9`rXu=lIsX*Zg6#UO<`~W6`5yb%eAXO2UPPRaj@((`=>9Tsh)f38uw_!yYu^q5NmF4cWzX2VQzD2 +bZKvHa{vkfmB{9L9(7`0)Rt93YLV-HLXe?vTA1;^Q1`ZqBog<<0piXs!(qZ;Lj-T~1#;7GmaeV$(NXMz +5-`m!kXibHi2(or000000RR600000001#AiVQzD2bZKvHQ)6glZD9rm2yJC_VPs)+VE_pMb>vO>-_DBy +8`Vb0jGrW9$=2qSMXvL3HGEG0000000000{{R30 +0000025D|^b#!w83IT`y;$>KfZ0H=mhJ>?uVKfZ0H=mhJ>?uVa{vheM(yUq2ps*m=2xUDT;RqCgn#@WzFu~@adfH5^@&-|0000000000{{R300000033g#@ +X=Gt^Z*l+x0ssVVZ*FA(00035b8l^B00jX8VsJHoA?4$swuZp1Wc+9AOf`(TIbyKWjTy4WkGaM+ZSSEb +;k|42*wg~2q@3^Lq|9zft}OB~jx>)hO74peesZgXjLX>V>+d2nR~0RR934pez?WkYXmZE19EWo~o? +0{{nSWo~72X>$Mt0Rb~)Sy27nfgB_8)3w|}PX0nR=3w=3IXvnu`4)OW{2u`dbaG*Cb7^#GZ*Bku0s)^0 +EJ-@Z0;0Ob-P{Wzd?2rs)M&&=&l*}G;Jw22Ix+z?QV*^ZmKt8YDf|&5KZQ>65I6*X)C9iYp+?yjr7~y& +31xV6Wo~n6Z*Bku0s)^0EJ-@Z0;0Ob-P{Wzd?2rs)M&&=&l*}G;Jw22Ix+!dbsj>g6`?#s5rWnKhSeO? +L~x^!;Y#eFP|P}0Z%E!6RC#b^WI=OtX=iS8LTqVnWK(5fY*ctqbaDg)01ISgV{Bn^VRUJBWdH>M00;p& +C-dJ*Ygad93@i9pCb+uV$agN<27ESr7(9FG*~&Hm0000000030{{R30000012xfI|XK7+=WdH>M00;rv +#pxZ$?Eb+fZ@!;9xB`-n7hgEflW({{JNKm>5MosT0000000030{{R30000023UhRFbz^jOa%E%y1pxpE +0f8RpmkyA>T}tj_kdvFcMGT4`fC%jFncQ)?C=$=&Q2+n{000000RR60000000RIYMbaY{3Xl-R~bN~eb +00;rzm4zh;p_e*BIH}G_uHL`vNz<~wu(~9K*$!EolXjf|0000000030{{R300000PRC#b^WI=OtX=iS8 +LTqVnWK(5fY*ct@WCR2N3uI+uY+-U?bZK^F00jX62mzD8lw1;)SBG%dXmxGxLL8mnw6u)Qc}1I}@VaR| +$Swc?00000009600000000039W_507X<}?;00jX62m$}nN9KoA`=lHP5CAeGSam&QM5L=EvI-ld!uoqo +p~3(F0000000960000000006Cb98cbV{~&5D +V!5;tB_sd<000000096000000000SAVQgh?V`*h`1pxpF0Y>fS!w4MxxaL=+DqP^k2!wz9AHH68xp8!< +%Jqp^&Hw-a000000RI300000001H-OY-Mg^c~p6DWd#8M00IeCZ)s#xbYXO51pxp602Ek5Xklq?LTqVn +WK(5fY*ctqbaDg&00&}ebYpL6ZU6-V0&gCc`G>t*&Lor=XWH@ulIpd#VR%e3()@~+=qs(Ib4DkqE>N`F +8f<{_M@^MEhcVy#omh=bI-rl&{j_4Y)d2=oOFWB>&L0&gCc`G>t*&Lor=XWH@ulIpd#VR%e3()@~+ +=qs(Ib4DkqE>N`F8f<{_M@^MEhcVy#omh=bI-rl&{j_4Y)e~4lXklq?LTqVnWK(5fY*ct@WCQ{L2V!Y- +V{d7000jX8ZyuKUhrL_QB$OCu+VTUE>b16EcuX?V{EC+7E3Kt-u*Pw&hI`xNV4B0;>oUbhHyi-Y#=22) +QEgSwgb16EcuX?V{EC+7E3Kt-u*Pw&hI`xNV4B0; +>oUbhHyi-Y#=22)QEgSwgbW>$vYy<)T2V!Y-V{d7000jX8ZyuKUhrL_QB$OCu ++VTUE>b16EcuX?V{EC+7E3Kt-Xc_Cg)w39@m$R6qOEzWQ+NTC@=;b16EcuX?V{EC+7E3Kt-Xc_Cg)w39@m$R6qOEzWQ+NTC@=;?<6X>I@o0Rr`G6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw7=FYk8VaL=Li5Yl +(a@n1+Ku60FILp}Zw|!7cE!MGSxid=WmW+OY-w?IX=DHe0Rr`G6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw +7=FYk8VaL=Li5Yl(a@n1+Ku60FILp}Zw|!7cE!MGSxid=WmW + +-----END STRICT TYPE LIB----- + diff --git a/stl/RGB@0.1.0.stl b/stl/RGBCommit@0.1.0.stl similarity index 88% rename from stl/RGB@0.1.0.stl rename to stl/RGBCommit@0.1.0.stl index 74147ec8..3622997a 100644 Binary files a/stl/RGB@0.1.0.stl and b/stl/RGBCommit@0.1.0.stl differ diff --git a/stl/RGB@0.1.0.sty b/stl/RGBCommit@0.1.0.sty similarity index 93% rename from stl/RGB@0.1.0.sty rename to stl/RGBCommit@0.1.0.sty index 55fcb9ce..a6a4a213 100644 --- a/stl/RGB@0.1.0.sty +++ b/stl/RGBCommit@0.1.0.sty @@ -1,15 +1,15 @@ {- - Id: stl:dU!OV0Il-utBzMra-3saO5RM-H!25$ds-o8hYnve-jiASTe4#carmen-kimono-final - Name: RGB + Id: stl:DjmgI8Aw-L0XQMsu-q9HS$Za-!D8BzVj-bvaq$yq-p56MdqY#jester-philips-prelude + Name: RGBCommit Version: 0.1.0 - Description: Consensus layer for RGB smart contracts + Description: Consensus commitment layer for RGB smart contracts Author: Dr Maxim Orlovsky Copyright (C) 2023-2024 LNP/BP Standards Association. All rights reserved. License: Apache-2.0 -} @context -typelib RGB +typelib RGBCommit import StrictTypes#century-comrade-chess use TypeName#edgar-carol-mystery @@ -20,13 +20,8 @@ import AluVM#congo-archive-folio use LibId#germany-culture-olivia import BPCore#garbo-radius-peru - use TapretNodePartner#roger-member-educate - use TapretProof#marco-border-sample - use TapretPathProof#kiwi-mirror-paris use Method#bali-boris-plasma - use TapretRightBranch#miracle-patriot-touch use BlindSealTxPtr#fortune-iron-salmon - use OpretProof#good-village-flex use SecretSeal#dollar-iris-wizard use BlindSealTxid#media-judge-anita use TxPtr#italian-july-eddie @@ -46,13 +41,7 @@ import CommitVerify#tennis-peace-olympic import Bitcoin#signal-color-cipher use Vout#brush-gloria-heroic - use ScriptBytes#equator-cockpit-gong - use TapNodeHash#paprika-amanda-hunter - use LeafScript#bison-doctor-oscar use Txid#shallow-light-reverse - use InternalPk#habitat-paprika-oliver - use LeafVer#benefit-carbon-africa - use XOnlyPk#clever-swim-carpet @mnemonic(edison-survive-nitro) @@ -219,10 +208,6 @@ data ContractId : [Byte ^ 32] @mnemonic(short-noise-postal) data DataState : [Byte] -@mnemonic(needle-change-forest) -data DbcProof : tapret#1 BPCore.TapretProof - | opret BPCore.OpretProof - @mnemonic(marco-taboo-trade) data Extension : ffv Ffv , contractId ContractId @@ -278,9 +263,6 @@ data GenesisSchema : metadata {MetaType ^ ..0xff} , valencies {ValencyType ^ ..0xff} , validator AluVM.LibSite? -@mnemonic(miguel-lava-extend) -data GlobalOrd : witnessAnchor WitnessAnchor?, idx U16 - @mnemonic(initial-malta-sierra) data GlobalState : {GlobalStateType -> ^ ..0xff GlobalValues} @@ -440,17 +422,6 @@ data ValencyType : U16 @mnemonic(email-snow-safari) data VoidState : () -@mnemonic(earth-havana-abraham) -data WitnessAnchor : witnessOrd WitnessOrd, witnessId XChainTxid - -@mnemonic(proton-ford-arnold) -data WitnessOrd : onChain WitnessPos - | offChain priority U32 - | archived () - -@mnemonic(snow-local-tonight) -data WitnessPos : height U32, timestamp I64 - @mnemonic(senator-limbo-raymond) data XChainBlindSealTxPtr : bitcoin BPCore.BlindSealTxPtr | liquid BPCore.BlindSealTxPtr diff --git a/stl/RGBLogic@0.1.0.sta b/stl/RGBLogic@0.1.0.sta new file mode 100644 index 00000000..dcae2973 --- /dev/null +++ b/stl/RGBLogic@0.1.0.sta @@ -0,0 +1,32 @@ +-----BEGIN STRICT TYPE LIB----- +Id: stl:J61WrKfv-HBO6mFZ-9bZzqau-j!wrLMA-9IgEJGM-hcaprmA#podium-colombo-buenos +Name: RGBLogic +Dependencies: + RGBCommit#jester-philips-prelude, + BPCore#garbo-radius-peru, + Bitcoin#signal-color-cipher +Check-SHA256: 27edb1e36757ef5995caf499d793c4a4ea20560442c55610552b8a84fba54bbe + +2vSEvOmAmtV*?I3pd-LAFGbKY%c}Hrzh$q3@Ep~RyV|S#s;8cecBTnZM?ynyZEb0EZyuKUhrL_QB$OCu ++VTUE>b16EcuX?V{EC+7E3Kt-20~CnZ*pbzY!hN5_Bp3Y36tDMM#=e#tGI($UA5U3KNx<*C>ja}LTPkk +Z)t7=20~CnZ*pY?00DdlT>wB!7L}MA7sFvK#<=RP4S#T1Vv-hhTICs&5fM~jaB^jIPH$voP+@X(Ze?;0 +wjY>38tto&d&=eG4cRAF#( +Wpq+$XJ~Xna$#;`Xh%-ZT+rxDK6vW;JU&?LxLM72H?wDC1Zo}=N}D)4mkLjCa%FT-a&K>D2SRCdV{d70 +2LL6j^|=xh7rLW4)L(lQb*FJl;d*r#UC=Q#deq4+>4pnaV{&P5bV7M_WpgpRuIPk`cg3&=F>*1@lJ+pR +DJ{*3f84s>#k$1lf7uIEVQ@}wWMxQUb7)_z*=^-NPQ?`2v5jYd+6t@dEhY>7H!Y*UdZb-BpG^u(WnpGh +V{&P5bfbbo^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1Rs>XdX=JH|gm+V(X#23g?#G%T#8*SXRQUS6 +KbYXtkv-?PH+Tw3ZggdGZeeUtYqm29sTjYuk_~RiSfnI}BSuP}NCm0qyW47Umu?kmdbZ%vHb5L({iECIT&Bl;lSX#$ms8AQN7m&qY38tto&d&=e@L7b8|s%V`y)300aU61a5C`WdHyG0R(ez +ZDjxj0RgHurJHC-KI9f(dtNbZ%vHb4g?Z4mqGBz%VaG&@#)a^mM;vuY>R$)s4H_tNf~`o{V;;iECIT&Bl;lSX#$m +s8AQN7m&qY + Copyright (C) 2023-2024 LNP/BP Standards Association. All rights reserved. + License: Apache-2.0 +-} + +@context +typelib RGBLogic + +import RGBCommit#jester-philips-prelude + use WitnessPos#snow-local-tonight + use XChainTxid#liquid-river-absorb + use WitnessOrd#chief-digital-vitamin + +import BPCore#garbo-radius-peru + use TapretNodePartner#roger-member-educate + use TapretProof#marco-border-sample + use TapretPathProof#kiwi-mirror-paris + use TapretRightBranch#miracle-patriot-touch + use OpretProof#good-village-flex + +import Bitcoin#signal-color-cipher + use ScriptBytes#equator-cockpit-gong + use TapNodeHash#paprika-amanda-hunter + use LeafScript#bison-doctor-oscar + use Txid#shallow-light-reverse + use InternalPk#habitat-paprika-oliver + use LeafVer#benefit-carbon-africa + use XOnlyPk#clever-swim-carpet + + +@mnemonic(needle-change-forest) +data DbcProof : tapret#1 BPCore.TapretProof + | opret BPCore.OpretProof + +@mnemonic(miguel-lava-extend) +data GlobalOrd : witnessAnchor WitnessAnchor?, idx U16 + +@mnemonic(scoop-scoop-cadet) +data WitnessAnchor : witnessOrd RGBCommit.WitnessOrd, witnessId RGBCommit.XChainTxid + +