Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

0.11.1-alpha.2 #300

Open
wants to merge 12 commits into
base: v0.11.1
Choose a base branch
from
Prev Previous commit
Next Next commit
fix select_valid_witness: select best WitnessOrd
  • Loading branch information
zoedberg committed Mar 1, 2025
commit 41c7dc6c24f839bf98f282eb7d23d10f117edf89
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 0 additions & 8 deletions src/persistence/memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -571,14 +571,6 @@ impl StateReadProvider for MemState {
})
}

fn is_valid_witness(&self, witness_id: Txid) -> Result<bool, Self::Error> {
let ord = self
.witnesses
.get(&witness_id)
.ok_or(StateInconsistency::AbsentWitness(witness_id))?;
Ok(ord.is_valid())
}

fn witnesses(&self) -> LargeOrdMap<Txid, WitnessOrd> { self.witnesses.clone() }

fn invalid_bundles(&self) -> LargeOrdSet<BundleId> { self.invalid_bundles.clone() }
Expand Down
31 changes: 19 additions & 12 deletions src/persistence/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,17 +130,26 @@ impl<P: StateProvider> State<P> {
&self,
witness_ids: impl IntoIterator<Item = impl Borrow<Txid>>,
) -> Result<Txid, StateError<P>> {
for witness_id in witness_ids {
let witness_id = *witness_id.borrow();
if self
.provider
.is_valid_witness(witness_id)
.map_err(StateError::ReadProvider)?
{
return Ok(witness_id);
}
let witnesses = self.as_provider().witnesses();
let mut best_candidate = None;
for id in witness_ids {
let id = *id.borrow();
let Some(&ord) = witnesses.get(&id) else {
return Err(StateError::Inconsistency(StateInconsistency::AbsentWitness(id)));
};
best_candidate = match best_candidate {
Some((_, curr_ord)) if ord < curr_ord => Some((id, ord)),
None => Some((id, ord)),
_ => best_candidate,
};
}

let (best_id, best_ord) = best_candidate.expect("one witness ID should always be there");
if best_ord == WitnessOrd::Archived {
Err(StateError::AbsentValidWitness)
} else {
Ok(best_id)
}
Err(StateError::AbsentValidWitness)
}

pub fn update_from_bundle<R: ResolveWitness>(
Expand Down Expand Up @@ -277,8 +286,6 @@ pub trait StateReadProvider {
contract_id: ContractId,
) -> Result<Self::ContractRead<'_>, Self::Error>;

fn is_valid_witness(&self, witness_id: Txid) -> Result<bool, Self::Error>;

fn witnesses(&self) -> LargeOrdMap<Txid, WitnessOrd>;

fn invalid_bundles(&self) -> LargeOrdSet<BundleId>;
Expand Down
2 changes: 1 addition & 1 deletion src/stl/stl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ use crate::LIB_NAME_RGB_STD;
/// Strict types id for the library providing standard data types which may be
/// used in RGB smart contracts.
pub const LIB_ID_RGB_STORAGE: &str =
"stl:AOyFCu23-oOZoMMm-ErRT1U!-rpjrpSt-IAXu8FP-s1NpBXQ#spark-sandra-alice";
"stl:CvNposz1-sRV!xPx-p6KNe6K-dS$cjUd-PqlLAQ!-b44RglU#beatles-friday-pocket";

/// Strict types id for the library providing standard data types which may be
/// used in RGB smart contracts.
Expand Down
22 changes: 11 additions & 11 deletions stl/[email protected]
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
-----BEGIN STRICT TYPE LIB-----
Id: stl:AOyFCu23-oOZoMMm-ErRT1U!-rpjrpSt-IAXu8FP-s1NpBXQ#spark-sandra-alice
Id: stl:CvNposz1-sRV!xPx-p6KNe6K-dS$cjUd-PqlLAQ!-b44RglU#beatles-friday-pocket
Name: RGBStorage
Dependencies:
RGBLogic#marvin-lobby-sandra,
BPCore#symbol-tropic-grand,
StrictTypes#century-comrade-chess,
AluVM#congo-archive-folio,
CommitVerify#miller-pancake-elastic,
RGBCommit#outside-pelican-reflex,
Std#ralph-blue-lucky,
RGBLogic#icon-think-learn,
RGBStd#lazarus-list-uniform,
Bitcoin#signal-color-cipher
Check-SHA256: a26015d720cc0f61ef540776eac8cd2bd52ad2a8c7f072e62dafe30c268b1fc8
Check-SHA256: 99f7025e52caa46d6678959fdc14a944927f38b99e62051037bbb3f6e7fded69

3Q|WxQ*>`~VP|CtA#kgq^`I&ZzC?)!&R01Y?(H9FO$CR6P1%k7c67A-20~CnZ*pZt>Z4!V_T!KNI`QJ|
h6;Zj^jB$MPK+?7Lu3>C`4HI)Q*?4^V{}w`aAk91a5aA+<>R2XhQO_4{AcS-HH^7AVzASV8M4NYxyCjH
L2PwaO?m?z-)Viz@~C%8KNS}Z0aQ3s^SOqbBwN-D{wl@OCJaMwZEb0ER%LQ&W_gwq+0IFfT={x5i>tp7
_pf+%FRYrXyqyp?xgUn&^9~78M?ynyZEb0E$}AplgPGkh3_fq3Q7_j=2#kPT_9!;lWR>~GYywm#15<Ql
<hP+YO(uh=f1<anA7-`ChQ#ro`IN&fvFvuo|NWF+2vSEvOmAmtW9!4IIMsA(sL{&q7Q%Pd!}DfvbcoVQ
3Q|WxQ*>`~VP|Ct8)z<Nz7+D$FgV+DB-JuaTf=1dimJXg3sNVuXy#zQ2vSEvOmAmtV<B*>q4l6D4ZcK)
2hLYH81C&KXiWu&flb+s{C0G-{02f$LvM0rMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r3sZD*
X=8L$d2nTOVsJHoA?4$swuZp1Wc+9AOf`(TIbyKWjTy4WkGaM+1wm|eR!w>X9p7nv%krpqN<S4B4FOa*
Q}elon<QJ-4E`#`(<Tf<Z*6U9bXH|@X=Ztr6WPv5j9mG8G>fah5cjWmb}y`&s=S>LH@P2%;`0s(Qb$5V
Z*6U9bjmCqZ-bfLFbqC#o>4E?M+l67UG^w8*<_XZ#%uyqCj(P-Wb4DJIMsA(sL{&q7Q%Pd!}DfvbcoVQ
T=@EFU>76^3I<X~LQ`~P^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#t%#3&jH2SRCdV{d702?arHbyiIV
01^bJwgM1*ibOB<Hr54hSy}kyId~TM4gJLrad1S=<^xP=Vr}oCCgHqw;r~cW`-Q<Y(F`)&j2=MXX-gc|
r|aC@VFyfUVpC~!Ws>DT%6aZ|SrJerP1pIOD57`7Ol|-ogQ6Pjg~y>s-v>!^VNPLfWv4Jz0xkJm$nc4y
Expand Down Expand Up @@ -94,7 +94,7 @@ Y-Mg^X=QWXBav&Stb*7Pg~wnyz`1FAu$k|YFC-ha-WFA1@jtu^M{I9mVQf=$VRU8R&#961hviK~w*eJg
WnpY(WI=RvVPk0ZdQCW4e)%xftOSp9TD)g5B;KO;Krzd=y+`rt_<1!5O=WapWMOn+`Sh#^X0AbZX4L%*
5q$))*;M@wXI>IJVg&1PPwC}G3`TWsXK7+=WmI`^W&dbnz<5%CY59k^g5#W{6D&GDo53%OaP0&iRq<so
Ukp-Zc4c8~Wn@HQbYTcmM?y?*XK7;s09@P-BNZ=sBHM?<`J6+Fr=A<oEJ!(G_IUTS%E$nK5(-yobZ%vH
b5L({i%_?418a7fK9^T0Uh#?SrVFIfzXtJ?<LV_zzvg%|3Rh`#Ze??GPjX}iQb$5lbYv<320KfVtdv3E
b5L({kLzIp{8F`MCJ5#v8Msl{)Y>tRJ&yoJw@!EgNsxtt3Rh`#Ze??GPjX}iQb$5lbYv<320KfVtdv3E
%<WTvJE=Y$B9`WIk@2=bjN3b_uu+2H3Q%=oS7~%^Wpi@|n60<kIKnNt^{0mEhe&?UEq$ohQaHbtrl||D
RV$?mLvL<$Wo~p*Wo8Sevwd?V@U~PAC1Q_lKRBi7?g`<c8#M=>*(Q&@ei9r{b#!obbU|}-X=iS2Wo~p*
Wp-s@Y-MCbVRT^<E8jq(B%Z{tq6b7LWGLmPxvTzf?;MR2D6>nW^eLnZQ)OXnS7~%^Wpi^O#}{qTDnK1g
Expand Down Expand Up @@ -206,8 +206,8 @@ Hr54hSy}kyId~TM4gJLrad1S=<^TWy000000RR600000000eVsXLA4w0_(%6IMsA(sL{&q7Q%Pd!}Dfv
bcoVQT=@EFU>76^3gXliP!Z9Fy4s@&s7y*hO1UlNfirx{z*_V4e8lMKAp+~esW{biYpBu6?iRv#*2D8=
aCC^$N?iE*X<!#52nvQ65G-hCV9w&(UffE`hM!G~aLQ!~gAR@AcC9KZUqt`_000000096000000000P0
Wo=V*VRU5%0||F&bZ%vHb7gY?3Ig?P6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw7=FYk8VaL=Li5Yl(a@n1
+Ku60FILp}Zw|!7cE!MGSxid=WmW>@x1l*rCWEMdqPMIcX0_0U#POf`l*25s>~_ch{ghsdP`7XcYj&AF
mscoW@rmrF3#8J&2Jw{R>Lp3P=6Evz0000000030|Ns900000EX>N95Y-wadb#7#AWpe-t0+tim&Pj}1
+Ku60FILp}Zw|!7cE!MGSxid=WmW<kXf9>G6!On7INNh1)iO<6!({l1s=hW0QYW)$=3u{%>tO->Qnh9#
2<9XixKY^D+A)tkj{ruuPIv)HkcEN(0000000030|Ns900000EX>N95Y-wadb#7#AWpe-t0+tim&Pj}1
`Fb>qtG^KUuXuJZteUF4oe(#<ABN)d4g-6WwLKbzE(ciwC3nrXLGTEzPUiqvVS}~6O1<C$TmS$700000
0RR90{{R30010DnZgg^CV{~%>3IdiB+0IFfT={x5i>tp7_pf+%FRYrXyqyp?xgUn&^A4W~EJ-@Z0;0Ob
-P{Wzd?2rs)M&&=&l*}G;Jw22Ix+zQeSE-D&as6bavW-TpDK3Q$S;EaU-vt4bL<Cp<^FB}0000000030
Expand Down
Binary file modified stl/[email protected]
Binary file not shown.
12 changes: 6 additions & 6 deletions stl/[email protected]
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{-
Id: stl:AOyFCu23-oOZoMMm-ErRT1U!-rpjrpSt-IAXu8FP-s1NpBXQ#spark-sandra-alice
Id: stl:CvNposz1-sRV!xPx-p6KNe6K-dS$cjUd-PqlLAQ!-b44RglU#beatles-friday-pocket
Name: RGBStorage
Version: 0.11.0
Description: RGB storage library
Expand All @@ -11,6 +11,10 @@
@context
typelib RGBStorage

import RGBLogic#marvin-lobby-sandra
use WitnessPos#cliff-enrico-nominal
use WitnessOrd#condor-george-actor

import BPCore#symbol-tropic-grand
use TapretNodePartner#roger-member-educate
use TapretProof#marco-border-sample
Expand Down Expand Up @@ -131,10 +135,6 @@ import Std#ralph-blue-lucky
use AlphaCapsLodash#duet-hammer-labor
use AlphaSmallLodash#pioneer-eagle-spell

import RGBLogic#icon-think-learn
use WitnessPos#cliff-enrico-nominal
use WitnessOrd#samba-flame-reform

import RGBStd#lazarus-list-uniform
use PubWitness#paper-visa-storm
use ContentRef#polo-ramirez-parker
Expand Down Expand Up @@ -240,7 +240,7 @@ data MemStash : schemata {RGBCommit.SchemaId -> ^ ..0xff RGBStd.SchemaI
, libs {AluVM.LibId -> AluVM.Lib}
, sigs {RGBStd.ContentId -> RGBStd.ContentSigs}

@mnemonic(bazooka-dallas-martin)
@mnemonic(report-baron-boris)
data MemState : witnesses {Bitcoin.Txid -> ^ ..0xffffffff RGBLogic.WitnessOrd}
, invalidBundles {RGBCommit.BundleId ^ ..0xffffffff}
, contracts {RGBCommit.ContractId -> ^ ..0xff MemContractState}
Expand Down