From 5f23087fa76ea7bb535655d28e171b0da43de643 Mon Sep 17 00:00:00 2001 From: Dr Maxim Orlovsky Date: Mon, 18 Nov 2024 18:47:51 +0100 Subject: [PATCH] dbc: remove Anchor type, which is now TxOut seal-specific Signed-off-by: Dr Maxim Orlovsky --- dbc/src/anchor.rs | 199 ------------------ dbc/src/lib.rs | 2 - seals/src/txout.rs | 3 + src/bin/bpcore-stl.rs | 14 +- src/stl.rs | 9 +- stl/Anchor.MerkleBlock.Tapret.vesper | 31 --- stl/Anchor.MerkleTree.Opret.vesper | 21 -- stl/Anchor.MerkleTree.Tapret.vesper | 25 --- stl/Anchor.Opret.vesper | 14 ++ ...oof.Tapret.vesper => Anchor.Tapret.vesper} | 8 +- stl/BPCore@0.1.0.sta | 102 ++++----- stl/BPCore@0.1.0.stl | Bin 3628 -> 2506 bytes stl/BPCore@0.1.0.sty | 27 +-- 13 files changed, 72 insertions(+), 383 deletions(-) delete mode 100644 dbc/src/anchor.rs delete mode 100644 stl/Anchor.MerkleBlock.Tapret.vesper delete mode 100644 stl/Anchor.MerkleTree.Opret.vesper delete mode 100644 stl/Anchor.MerkleTree.Tapret.vesper create mode 100644 stl/Anchor.Opret.vesper rename stl/{Anchor.MerkleProof.Tapret.vesper => Anchor.Tapret.vesper} (63%) diff --git a/dbc/src/anchor.rs b/dbc/src/anchor.rs deleted file mode 100644 index e876fd0a..00000000 --- a/dbc/src/anchor.rs +++ /dev/null @@ -1,199 +0,0 @@ -// Deterministic bitcoin commitments library. -// -// 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. -// -// 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. - -//! Anchors are data structures used in deterministic bitcoin commitments for -//! keeping information about the proof of the commitment in connection to the -//! transaction which contains the commitment, and multi-protocol merkle tree as -//! defined by LNPBP-4. - -use std::error::Error; - -use bc::Tx; -use commit_verify::mpc::{self, Message, ProtocolId}; -use strict_encoding::{StrictDumb, StrictEncode}; - -use crate::LIB_NAME_BPCORE; - -mod dbc { - pub use crate::Proof; -} - -/// Errors verifying anchors. -#[derive(Clone, Eq, PartialEq, Debug, Display, Error, From)] -#[display(inner)] -#[cfg_attr( - feature = "serde", - derive(Serialize, Deserialize), - serde(crate = "serde_crate", rename_all = "camelCase") -)] -pub enum VerifyError { - /// Deterministic commitment error. - #[display(inner)] - Dbc(E), - - /// invalid MPC proof. Details: {0} - #[from] - Mpc(mpc::InvalidProof), -} - -/// Anchor is a data structure used in deterministic bitcoin commitments for -/// keeping information about the proof of the commitment in connection to the -/// transaction which contains the commitment, and multi-protocol merkle tree as -/// defined by LNPBP-4. -#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] -#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_BPCORE)] -#[cfg_attr( - feature = "serde", - derive(Serialize, Deserialize), - serde(crate = "serde_crate", rename_all = "camelCase") -)] -pub struct Anchor { - /// Structured multi-protocol LNPBP-4 data the transaction commits to. - pub mpc_proof: L, - - /// Proof of the DBC commitment. - pub dbc_proof: D, -} - -impl Anchor { - /// Constructs anchor for a given witness transaction id, MPC and DBC - /// proofs. - pub fn new(mpc_proof: L, dbc_proof: D) -> Self { - Self { - mpc_proof, - dbc_proof, - } - } - - /// Verifies whether one anchor matches another ancor. - /// - /// This is not the same as `Eq`, since two anchors may reveal different - /// messages in their MPC proofs, and this be non-equivalent, at the same - /// time matching each other , i.e. having the same merkle root and - /// producing the same commitments. - #[inline] - pub fn matches(&self, other: &Self) -> bool { - self.mpc_proof.matches(&other.mpc_proof) && self.dbc_proof == other.dbc_proof - } -} - -/// Error merging two [`Anchor`]s. -#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Display, Error, From)] -#[display(doc_comments)] -pub enum MergeError { - /// Error merging two MPC proofs, which are unrelated. - #[display(inner)] - #[from] - MpcMismatch(mpc::MergeError), - - /// anchors can't be merged since they have different DBC proofs. - DbcMismatch, -} - -impl Anchor { - /// Reconstructs anchor containing merkle block - pub fn into_merkle_block( - self, - protocol_id: impl Into, - message: impl Into, - ) -> Result, mpc::InvalidProof> { - let lnpbp4_proof = - mpc::MerkleBlock::with(&self.mpc_proof, protocol_id.into(), message.into())?; - Ok(Anchor { - mpc_proof: lnpbp4_proof, - dbc_proof: self.dbc_proof, - }) - } - - /// Reconstructs anchor containing merkle block - pub fn to_merkle_block( - &self, - protocol_id: impl Into, - message: impl Into, - ) -> Result, mpc::InvalidProof> { - self.clone().into_merkle_block(protocol_id, message) - } - - /// Verifies that the transaction commits to the anchor and the anchor - /// commits to the given message under the given protocol. - pub fn verify( - &self, - protocol_id: impl Into, - message: impl Into, - tx: &Tx, - ) -> Result> { - let mpc_commitment = self.convolve(protocol_id, message)?; - self.dbc_proof.verify(&mpc_commitment, tx).map_err(VerifyError::Dbc)?; - Ok(mpc_commitment) - } - - /// Verifies that the anchor commits to the given message under the given - /// protocol. - pub fn convolve( - &self, - protocol_id: impl Into, - message: impl Into, - ) -> Result { - self.mpc_proof.convolve(protocol_id.into(), message.into()) - } -} - -impl Anchor { - /// Conceals all LNPBP-4 data except specific protocol and produces merkle - /// proof anchor. - pub fn to_merkle_proof( - &self, - protocol: impl Into, - ) -> Result, mpc::LeafNotKnown> { - self.clone().into_merkle_proof(protocol) - } - - /// Conceals all LNPBP-4 data except specific protocol and converts anchor - /// into merkle proof anchor. - pub fn into_merkle_proof( - self, - protocol: impl Into, - ) -> Result, mpc::LeafNotKnown> { - let lnpbp4_proof = self.mpc_proof.to_merkle_proof(protocol.into())?; - Ok(Anchor { - mpc_proof: lnpbp4_proof, - dbc_proof: self.dbc_proof, - }) - } - - /// Conceals all LNPBP-4 data except specific protocol. - pub fn conceal_except( - &mut self, - protocols: impl AsRef<[ProtocolId]>, - ) -> Result { - self.mpc_proof.conceal_except(protocols) - } - - /// Merges two anchors keeping revealed data. - pub fn merge_reveal(mut self, other: Self) -> Result { - if self.dbc_proof != other.dbc_proof { - return Err(MergeError::DbcMismatch); - } - self.mpc_proof.merge_reveal(other.mpc_proof)?; - Ok(self) - } -} diff --git a/dbc/src/lib.rs b/dbc/src/lib.rs index 178b9bc0..e994aabf 100644 --- a/dbc/src/lib.rs +++ b/dbc/src/lib.rs @@ -51,12 +51,10 @@ extern crate commit_verify; /// Name of the strict type library generated from the data types in this crate. pub const LIB_NAME_BPCORE: &str = "BPCore"; -pub mod anchor; pub mod keytweak; pub mod opret; pub mod sigtweak; pub mod tapret; mod proof; -pub use anchor::Anchor; pub use proof::{Method, MethodParseError, Proof}; diff --git a/seals/src/txout.rs b/seals/src/txout.rs index a612ec0a..ba2a23da 100644 --- a/seals/src/txout.rs +++ b/seals/src/txout.rs @@ -100,6 +100,8 @@ pub mod mmb { } } +/// Anchor is a set of data required for the client-side validation of a Bitcoin Txout single-use +/// seal, which can't be recovered from the transaction and other public information itself. #[derive(Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug)] #[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] #[strict_type(lib = dbc::LIB_NAME_BPCORE)] @@ -118,6 +120,7 @@ pub struct Anchor { pub fallback_proof: ReservedBytes<1>, } +/// Proof data for verification of deterministic bitcoin commitment produced from anchor. pub struct Proof { pub mpc_commit: mpc::Commitment, pub dbc_proof: D, diff --git a/src/bin/bpcore-stl.rs b/src/bin/bpcore-stl.rs index 38b39328..23f4a46c 100644 --- a/src/bin/bpcore-stl.rs +++ b/src/bin/bpcore-stl.rs @@ -121,15 +121,9 @@ Seals vesper lexicon=types+commitments let tt = sys.type_tree("BPCore.TxoSealOpretProof").unwrap(); writeln!(file, "{tt}").unwrap(); - let tt = sys.type_tree("BPCore.AnchorMerkleTreeTapretProof").unwrap(); - fs::write(format!("{dir}/Anchor.MerkleTree.Tapret.vesper"), format!("{tt}")).unwrap(); + let tt = sys.type_tree("BPCore.AnchorTapretProof").unwrap(); + fs::write(format!("{dir}/Anchor.Tapret.vesper"), format!("{tt}")).unwrap(); - let tt = sys.type_tree("BPCore.AnchorMerkleTreeOpretProof").unwrap(); - fs::write(format!("{dir}/Anchor.MerkleTree.Opret.vesper"), format!("{tt}")).unwrap(); - - let tt = sys.type_tree("BPCore.AnchorMerkleBlockTapretProof").unwrap(); - fs::write(format!("{dir}/Anchor.MerkleBlock.Tapret.vesper"), format!("{tt}")).unwrap(); - - let tt = sys.type_tree("BPCore.AnchorMerkleProofTapretProof").unwrap(); - fs::write(format!("{dir}/Anchor.MerkleProof.Tapret.vesper"), format!("{tt}")).unwrap(); + let tt = sys.type_tree("BPCore.AnchorOpretProof").unwrap(); + fs::write(format!("{dir}/Anchor.Opret.vesper"), format!("{tt}")).unwrap(); } diff --git a/src/stl.rs b/src/stl.rs index f7a9a941..f6224fd8 100644 --- a/src/stl.rs +++ b/src/stl.rs @@ -21,7 +21,6 @@ //! Strict types library generator methods. -use commit_verify::mpc; use dbc::opret::OpretProof; use dbc::tapret::TapretProof; use dbc::LIB_NAME_BPCORE; @@ -30,7 +29,7 @@ use strict_types::{CompileError, LibBuilder, TypeLib}; /// Strict types id for the library providing data types from [`dbc`] and /// [`seals`] crates. pub const LIB_ID_BPCORE: &str = - "stl:shT3puxD-pguyIQF-lMwkHEo-oASAiSm-s6zQH6s-AqbOAOg#bruno-belgium-shelf"; + "stl:3xUSwL0a-VuYPFl2-Cdk3L21-yX8c1Kg-~wRzG1T-B2FgGWg#pastel-voice-binary"; fn _bp_core_stl() -> Result { LibBuilder::new(libname!(LIB_NAME_BPCORE), tiny_bset! { @@ -38,12 +37,6 @@ fn _bp_core_stl() -> Result { bc::stl::bp_tx_stl().to_dependency(), commit_verify::stl::commit_verify_stl().to_dependency() }) - .transpile::>() - .transpile::>() - .transpile::>() - .transpile::>() - .transpile::>() - .transpile::>() .transpile::>() .transpile::>() .transpile::>() diff --git a/stl/Anchor.MerkleBlock.Tapret.vesper b/stl/Anchor.MerkleBlock.Tapret.vesper deleted file mode 100644 index 3a17016d..00000000 --- a/stl/Anchor.MerkleBlock.Tapret.vesper +++ /dev/null @@ -1,31 +0,0 @@ -rec AnchorMerkleBlockTapretProof - rec mpcProof, MerkleBlock - enum method, Method, sha256t 0 - enum depth { - U5, _0 0, _1 1, _2 2, _3 3, _4 4, _5 5, _6 6, _7 7 - _8 8, _9 9, _10 10, _11 11, _12 12, _13 13, _14 14, _15 15 - _16 16, _17 17, _18 18, _19 19, _20 20, _21 21, _22 22, _23 23 - _24 24, _25 25, _26 26, _27 27, _28 28, _29 29, _30 30, _31 31 - - } - is cofactor, U16 - list crossSection, len 1..MAX32 - union TreeNode - rec concealedNode, tag 0 - enum depth { - U5, _0 0, _1 1, _2 2, _3 3, _4 4, _5 5, _6 6, _7 7 - _8 8, _9 9, _10 10, _11 11, _12 12, _13 13, _14 14, _15 15 - _16 16, _17 17, _18 18, _19 19, _20 20, _21 21, _22 22, _23 23 - _24 24, _25 25, _26 26, _27 27, _28 28, _29 29, _30 30, _31 31 - - } - bytes hash, len 32, aka MerkleHash - rec commitmentLeaf, tag 1 - bytes protocolId, len 32, aka ProtocolId - bytes message, len 32, aka Message - is some, U64, option, wrapped, tag 1 - rec dbcProof, TapretProof - rec pathProof, TapretPathProof - union some, TapretNodePartner, option, wrapped, tag 1 - rec rightBranch, TapretRightBranch, wrapped, tag 2 - is nonce, U8 diff --git a/stl/Anchor.MerkleTree.Opret.vesper b/stl/Anchor.MerkleTree.Opret.vesper deleted file mode 100644 index 0e9f561a..00000000 --- a/stl/Anchor.MerkleTree.Opret.vesper +++ /dev/null @@ -1,21 +0,0 @@ -rec AnchorMerkleTreeOpretProof - rec mpcProof, MerkleTree - enum method, Method, sha256t 0 - enum depth { - U5, _0 0, _1 1, _2 2, _3 3, _4 4, _5 5, _6 6, _7 7 - _8 8, _9 9, _10 10, _11 11, _12 12, _13 13, _14 14, _15 15 - _16 16, _17 17, _18 18, _19 19, _20 20, _21 21, _22 22, _23 23 - _24 24, _25 25, _26 26, _27 27, _28 28, _29 29, _30 30, _31 31 - - } - is entropy, U64 - is cofactor, U16 - map messages, len 0..MAX24 - bytes key, len 32, aka ProtocolId - bytes value, len 32, aka Message - map map, len 0..MAX24 - is key, U32 - tuple value - bytes _, len 32, aka ProtocolId - bytes _, len 32, aka Message - is dbcProof, Unit, aka OpretProof diff --git a/stl/Anchor.MerkleTree.Tapret.vesper b/stl/Anchor.MerkleTree.Tapret.vesper deleted file mode 100644 index 650077cd..00000000 --- a/stl/Anchor.MerkleTree.Tapret.vesper +++ /dev/null @@ -1,25 +0,0 @@ -rec AnchorMerkleTreeTapretProof - rec mpcProof, MerkleTree - enum method, Method, sha256t 0 - enum depth { - U5, _0 0, _1 1, _2 2, _3 3, _4 4, _5 5, _6 6, _7 7 - _8 8, _9 9, _10 10, _11 11, _12 12, _13 13, _14 14, _15 15 - _16 16, _17 17, _18 18, _19 19, _20 20, _21 21, _22 22, _23 23 - _24 24, _25 25, _26 26, _27 27, _28 28, _29 29, _30 30, _31 31 - - } - is entropy, U64 - is cofactor, U16 - map messages, len 0..MAX24 - bytes key, len 32, aka ProtocolId - bytes value, len 32, aka Message - map map, len 0..MAX24 - is key, U32 - tuple value - bytes _, len 32, aka ProtocolId - bytes _, len 32, aka Message - rec dbcProof, TapretProof - rec pathProof, TapretPathProof - union some, TapretNodePartner, option, wrapped, tag 1 - rec rightBranch, TapretRightBranch, wrapped, tag 2 - is nonce, U8 diff --git a/stl/Anchor.Opret.vesper b/stl/Anchor.Opret.vesper new file mode 100644 index 00000000..0756106e --- /dev/null +++ b/stl/Anchor.Opret.vesper @@ -0,0 +1,14 @@ +rec AnchorOpretProof + rec mmbProof, BundleProof + map map, len 0..MAX8 + is key, U32 + bytes value, len 32 + bytes mpcProtocol, len 32, aka ProtocolId + rec mpcProof, MerkleProof + enum method, Method, sha256t 0 + is pos, U32 + is cofactor, U16 + list path, len 0..32 + bytes element, len 32, aka MerkleHash + is dbcProof, Unit, aka OpretProof + bytes fallbackProof, len 1, aka ReservedBytes1 diff --git a/stl/Anchor.MerkleProof.Tapret.vesper b/stl/Anchor.Tapret.vesper similarity index 63% rename from stl/Anchor.MerkleProof.Tapret.vesper rename to stl/Anchor.Tapret.vesper index d84300b0..5ecf8ef8 100644 --- a/stl/Anchor.MerkleProof.Tapret.vesper +++ b/stl/Anchor.Tapret.vesper @@ -1,4 +1,9 @@ -rec AnchorMerkleProofTapretProof +rec AnchorTapretProof + rec mmbProof, BundleProof + map map, len 0..MAX8 + is key, U32 + bytes value, len 32 + bytes mpcProtocol, len 32, aka ProtocolId rec mpcProof, MerkleProof enum method, Method, sha256t 0 is pos, U32 @@ -10,3 +15,4 @@ rec AnchorMerkleProofTapretProof union some, TapretNodePartner, option, wrapped, tag 1 rec rightBranch, TapretRightBranch, wrapped, tag 2 is nonce, U8 + bytes fallbackProof, len 1, aka ReservedBytes1 diff --git a/stl/BPCore@0.1.0.sta b/stl/BPCore@0.1.0.sta index c13e1c4d..e9bbbd8e 100644 --- a/stl/BPCore@0.1.0.sta +++ b/stl/BPCore@0.1.0.sta @@ -1,69 +1,51 @@ -----BEGIN STRICT TYPE LIB----- -Id: stl:shT3puxD-pguyIQF-lMwkHEo-oASAiSm-s6zQH6s-AqbOAOg#bruno-belgium-shelf +Id: stl:3xUSwL0a-VuYPFl2-Cdk3L21-yX8c1Kg-~wRzG1T-B2FgGWg#pastel-voice-binary Name: BPCore Dependencies: CommitVerify#escort-between-doctor, - Std#ralph-blue-lucky, Bitcoin#signal-color-cipher -Check-SHA256: 4889f3675fb9524d82f6d5403fea24db99dbac7cfbeac5e7faee85d5393fd814 +Check-SHA256: dfc6b52b44c13f1e0221c81b8ddaaab6f62356277ed0d01c6913c1841edfcbce -20~CnZ*pY=w_I?;0yBOH^mF6?Djz6lx~sMot1;YamDqZyx)9*`3`1{iZE18?WpZg|dCDvvZ-bfLFbqC# -o>4E?M+l67UG^w8*<_XZ#%uyqCj(P-Wc6$lVk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3I{@IbYpL6 -ZUYBGX>?<6X>JJsA>%$n#j0HLDJN5-IKgM_J7b(p+0MPGk2Gl)y2(Rz1Xgc#bS10xxe^o?x}!PNUwajG -r*TW+dUY6G&@nZ7)X6RBh6__;a%pgMLV0v$b1}QF=!A)P#jpo4axu-4_As_7EzOC4+`8Vyy2R;!*$Y%* -a87SzWk_LjXkV<^ZRI~s#T41Gjc0(`3ajfaCJX&HEu+ACq+L0mO$tn9VP;cfa%pgMqk=;7%h%D+p%U7S -;b1RT)c9`>#Kd;Rz-U=aO9W+B1XOrwWT}OOcT=8d`>?<6$C@F;S3|*6`1-v+nBdcqJ?FPKcnV2wbY*gG -VQf%qwlfK-7{9iX4Q|L-q$GzUMp|h#f#=xRXCTqXIv;)MTcr4cfxK`S9u -y$)6q!N22#m0-mN2v2o%aBpdDbo`>HD!!5a&4Q@0n2=*4!cKOosx|T?(Q^f3pcpQQSqE58Zfto_YYang -ZEb0ER%LQ&W_bw!17eyujlDm-l!bcJ4l3enMo5^RQ~n#iGkyWd8~8$g22EvjXm4aLDsvRr2gft{Sr^|c -6mQ&%Z&uBrV^&@~cF6SzV@1=_p5>Oab-~jCR3C`SFec^=zG+gvC{`lWpi_3XJt5^Lxv|61vo|c_Jr^I{59gDgg^Q~>5XMaf24xdt)Bj2hqB2&USqe>Ma%*g5RB~lyllNeFa6}P}rq7L! -(40)FbL%msz%JU8hqvFyoea2o4pL=vWpZ|9WI}m#WpgpuwYiq_Rlwao{(T?aUNqayF^88E^#IUpx^^~; -)zDW6RB~lyPH$vo15y0X3z7m=H4^|EL2hGcZ*om# -a%*g5LTqniYfo@;Wpq$-Z*OJ>0tjtzV^DH$Z)O6wTyVnzGkys4bL0OiA1G+LtF{%ZG2CjE*m|hC5a9VP -DsvRr2gft{Sr^|c6mQ&%Z&uBrV^&@~cF6SzD0Y^^HT+rxDK6vW;JU&?LxLM72H?wDC -1Zo}=N}D)4mmEQEV`y)3O=WUxY-K`hZ)0mzVQ_L~bWn0{Z)OGp2yJjD1_B6eaAQz% -Z*OJ-w_I?;0yBOH^mF6?Djz6lx~sMot1;YamDqZyx)9*`N|BtQMKZZ6divcSvT6VUPd7++HJ~!1&&J-V -2cFWC2xMYoP;zf?W&uY|&s@;xOg?z(`#e5a?6_IYcQ>D -RAF#(Wpq$-Z*OJ>0tjtzV^DH$Z)O6wTyVnzGkys4bL0OiA1G+LtF{%ZG2CjE*m|hC5a9Vrk({ALGPx>x -`rRI~Y5)OGH%NCipfaP+#@?w1p3;*DWMX4ba&K>D0S~qxm_HirtB!lh<{Yi-S-!KI0_27BH<@sVme~^s -3>rahV`y)3O=WUxY-Ln(Wo1ura%FT-a&K>D1_B6eaAQz%Z*OJ-w_I?;0yBOH^mF6?Djz6lx~sMot1;Ya -mDqZyx)9*`bJO-c7a!dZ=aZj>i>o;h#!UqVWfNo5|4I#_GFF{g2xMYoP;zf?W&uY|&s@;xOg?z(`#e5a -?6_IYcQ>D -0rWKEm6$7C;Vyzlv_O9`13r&!S?Kiut+?SHSGC9>3=3^=V^DH$bZ=vCYy!7jaKi#KehBn)e&!uvG+Da^2;||fJ!&Dp*8BS%F@mRgD0=Han!vZsY2=sH~|0*9S -Xu7Mm6{|7aYL(b}sJal~`IGlxcyL4!ji%3ykI1qf|zVo-8#Z)O4XG~<<+D_!9(f=9GKe=!3-k8N4#^#HB7;T~7D$RG?0ZE#~ya&L5RV{dE%w_I?; -0yBOH^mF6?Djz6lx~sMot1;YamDqZyx)9*`FqMAh9bq(Cy9Eg3;jcYvA-~r9`yDZYr+MW?bl_I82yJj< -P;zf?W&*cdaKi#KehBn)oKLkF4~iax8KK|47hp= -LUnFrY-Lb#Z*OJ>0RwGeZ~zJb00aOB002NB00000000000RI300000000mBOX>(--0RRU806;_l3Qury -Wpq$-Z*OJ=0RR913R7ica%FT=WnpXu0RRU806-uB5maGta%FT*Z)9aqVRCeCWpV@q00?YlW^_((WMu#a -0Rr`G6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw7=FYk8VWJHuIPk`cg3&=F>*1@lJ+pRDJ{*3f84s>#k$1l -f7t;Ea%pF1bWCMoW&i~N0`+VYVk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3SX?*ZRI~s#T41Gjc0(` -3ajfaCJX&HEu+ACq+L0mO#%yYX=iA3LULhlV`u;c0RcEaVlHu0(#Ro^Jj-_-pFL#XcJe4ySuOZRLzEUx -Z3PchVQ_L~bWmY*Xi#!*Z)OGp3vgj_bZ%vGPH$vo00aU61a5C`WdHyG0R(ezZDjxj0RaJg2VDR_OBR)w -8yCZ2EylR&t_^>1Sz?kFbz0>alMw}OZ*F5{0003CRAF#(Wpq$-Z*OJ>0ts+obZAg=Z*OJ+6U0+eW+%Hu -C5$^~^vuG3{`}-8x6fV={eh1!etXz_3TbY1WpZv|Y*1?g^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#t% -#3&jHsfC1hQ=Vx1u)prdnjyqjL%~$|`n^Ax;M0*k=eIX_5maGta%FTRw7=FYk8VWJHuIPk`cg3&=F>*1@lJ+pRDJ{*3f84s> -#k$1lf7uOkX=iA3PH$voNMUnm0`+VYVk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3NgE`=!A)P#jpo4 -axu-4_As_7EzOC4+`8Vyy2R;!*$Py6Z&PJqY(;o<1OfmBZf|LGWdH>M0q^-VhdM_j&Xz2y10MAh|FpnP -u}M=HJieTRp&m;}YXJymVQg$-VPk6m1pxx}Y!hN5_Bp3Y36tDMM#=e#tGI($UA5U3KNx<*C>jdrYCz3g -CHcMLg#T%!5i+MiDY62ZUYgq2{$ -1_^UzV{dL`VRCr^H*7+z;q=?lBqOBSI9H7B1B!$rGO>p)(#S64kD@pX +20~CnZ*pY?<6X>JJsA>%$n#j0HLDJN5-IKgM_J7b(p+0MPG +k2Gl)y2(Rz1Xgc#bS10xxe^o?x}!PNUwajGr*TW+dUY6G&@nZ7)X6RBh6__;a%pgMLV0v$b1}QF=!A)P +#jpo4axu-4_As_7EzOC4+`8Vyy2R;!*$Y%*a87SzWk_LjXkV<^ZRI~s#T41Gjc0(`3ajfaCJX&HEu+AC +q+L0mO$tn9VP;cfa%pgMqk=;7%h%D+p%U7S;b1RT)c9`>#Kd;Rz-U=aO9W+B1XOrwWT}OOcT=8d`>?<6 +$C@F;S3|*6`1-v+nBdcqJ?FPKcnV2wbY*gGVQf%qwlfK-7{9iX4Q|L-q$GzUMp|h#f#=xRXCTqXIv;)MTcr4cfxK`S9uy$)6q!N22#m0-mN2v2o%aBpdDbo`>HD!!5a&4Q@0n2=*4 +!cKOosx|T?(Q^f3pcpQQSqE58Zfto_YYangZEb0ER%LQ&W_bkw17eyujlDm-l!bcJ4l3enMo5^RQ~n#i +GkyWd8~8$g22EvjXm4aNm441qf|zVo-8#Z)O4XG~<<+D_!9(f=9GKe=!3-k8N4#^#HB7;T~7D$RG?0 +ZE#~ya&L5RV{dE%w_I?;0yBOH^mF6?Djz6lx~sMot1;YamDqZyx)9*`FqMAh9bq(Cy9Eg3;jcYvA-~r9 +`yDZYr+MW?bl_I82yJjag{ +4Q63%Y+_+!Yfy4;Z)O6wTyVnzGkys4bL0OiA1G+LtF{%ZG2CjE*m|hC5a9Wf_h5K%L=laq&yA1JoJ^{7 +>oKLkF4~iax8KK|47hp`L2hGcZ*o*&aB^jIP;zf?W(EZaZEa#ua&K>D0rWKEm6$7C;Vyzlv_O9`13r&! +S?Kiut+?SHSGC9>3=3^=V^DH$bZ=vCYy!7jaKi#KehBn)e&!uv +G+Da^2;||fJ!&Dp*8BS%F@mRgM^%H|xc>sh|D +n*!v8^Ea7rh?dzC2n-EoVQg$-VPk7ha&K>D0=Han!vZsY2=sH~|0*9SXu7Mm6{|7aYL(b}sJal~`IGlx +cyL4!ji%3ykIbW>$vYy|-T2LJ#-AOI0m +VQ_L~bWU$%Wl&*qbZ%vG1OosFY-MJ2PH$vo00jX8^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#t%#3&jH +F}tqlgo$^>um>@6G0l?pFt#Zz&53{9y57aQ#OZ(80SR(xXJ~XxWnpFj1pxx}Y!hN5_Bp3Y36tDMM#=e# +tGI($UA5U3KNx<*C>jc1tl4elKTgFI*|CjhfZ7VH>n$b={WmS6zD1_BFkVRCeCWpYk$WMu#Z +0ssVVZ*FA(00035b8l^B00jX70elBt06Rw7=FYk8Vad}gm+V(X#23g?#G%T#8*SXRQUS6KbYXtkv-?P +H+T_LVQ_L~bW&+&XmmnyVQyn+1_BIhWoC3vZ)9aiVRL8#^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#t% +#3&jHF}tqlgo$^>um>@6G0l?pFt#Zz&53{9y57aQ#OZ(84RUE`Xmn0*WMxQUb7%tfY!hN5_Bp3Y36tDM +M#=e#tGI($UA5U3KNx<*C>jbeyRPVjiFd`Y2QhLn&64&owka*miGSR>-o?7a>3`V@RCsSwWnpYZcyt5; +00nMuX>(-&1pxu?`80<*MY62ZUYgq2{$1`$+vZ&PJq +Y)^10taw%X>DP0c>?up6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw7=FYk8VcxYK+Rkw`Mu(V +|7oQWGN(Z+AyvH&RuaL#D1_B3ga%pX0a(M#vY!hN5_Bp3Y36tDMM#=e#tGI($UA5U3KNx<*C>jdr +YCz3gCHcMLg#T%!5i+MiDylyhetD%_+b+zbKV?@_A;3i5k2rr*!1 zkL56hs51wbq)dLms=&$alv$FTpP9$JF|LD=k#q8MMhzW3tzwZI?8l9NMvC9p7RkTU zoga2~VRBfUP1%XB98ZMnxP4QLvU5_Ma`Kb2C-XCDYnYm^3=}=_s`XCL_tlM`3R44F z)qxu|9tZN*6!7o0>^w=*;0j* zFaP)AU1StCHg0(``t>)q?ws~H^uS%af3@;=<4kU!HEf?Q{FUKC&aN`E z?yDEVIY27?@>5bleqv-uizv9!7juzw!b>0V2-`dJ7YEPT>J+iyaKg;{>#Uf$CozSZ z3NuJM<|Sw37a{q>zo00!B%mliKaGuvBex(K%w*agQ!qJ_Syq8ih)kZwtR*jlVQ5Gq zlBtt@n6(HS^n^uA4#jm~hakHSXif>LU0@~Xc7;rS$D$xBh3qC!K%tqWr9db;Kwd+2 T5y%*H+lVj+=(Ej-m^j!0r8Ez> diff --git a/stl/BPCore@0.1.0.sty b/stl/BPCore@0.1.0.sty index 4ce69eab..b97b678a 100644 --- a/stl/BPCore@0.1.0.sty +++ b/stl/BPCore@0.1.0.sty @@ -1,5 +1,5 @@ {- - Id: stl:shT3puxD-pguyIQF-lMwkHEo-oASAiSm-s6zQH6s-AqbOAOg#bruno-belgium-shelf + Id: stl:3xUSwL0a-VuYPFl2-Cdk3L21-yX8c1Kg-~wRzG1T-B2FgGWg#pastel-voice-binary Name: BPCore Version: 0.1.0 Description: Bitcoin client-side-validation library @@ -13,17 +13,10 @@ typelib BPCore import CommitVerify#escort-between-doctor use Method#subject-justin-cowboy - use MerkleBlock#america-reptile-aloha use ProtocolId#shadow-eclipse-program - use Message#druid-blitz-rover use MerkleHash#horse-popcorn-bundle use MerkleProof#austria-jaguar-donald - use MerkleTree#anita-castle-herbert use ReservedBytes1#origin-roger-relax - use TreeNode#kansas-scarlet-ricardo - -import Std#ralph-blue-lucky - use U5#orbit-graph-sonic import Bitcoin#signal-color-cipher use Vout#brush-gloria-heroic @@ -37,24 +30,6 @@ import Bitcoin#signal-color-cipher use XOnlyPk#clever-swim-carpet -@mnemonic(pattern-pierre-galileo) -data AnchorMerkleBlockOpretProof : mpcProof CommitVerify.MerkleBlock, dbcProof OpretProof - -@mnemonic(match-forget-expand) -data AnchorMerkleBlockTapretProof : mpcProof CommitVerify.MerkleBlock, dbcProof TapretProof - -@mnemonic(road-simon-animal) -data AnchorMerkleProofOpretProof : mpcProof CommitVerify.MerkleProof, dbcProof OpretProof - -@mnemonic(genesis-cinema-fame) -data AnchorMerkleProofTapretProof : mpcProof CommitVerify.MerkleProof, dbcProof TapretProof - -@mnemonic(poker-segment-spoon) -data AnchorMerkleTreeOpretProof : mpcProof CommitVerify.MerkleTree, dbcProof OpretProof - -@mnemonic(tokyo-yankee-garcia) -data AnchorMerkleTreeTapretProof : mpcProof CommitVerify.MerkleTree, dbcProof TapretProof - @mnemonic(pilot-evita-provide) data AnchorOpretProof : mmbProof BundleProof , mpcProtocol CommitVerify.ProtocolId