From 214345807c23b6d000dd65085193d8251accbb9e Mon Sep 17 00:00:00 2001 From: Dr Maxim Orlovsky Date: Thu, 1 Aug 2024 23:35:55 +0200 Subject: [PATCH 1/4] chore: fix rust compiler bullshit --- Cargo.lock | 169 +++++++----- src/containers/partials.rs | 2 +- src/lib.rs | 9 - src/stl/stl.rs | 2 +- stl/RGBStd@0.11.0.sta | 523 ++++++++++++++++++------------------- stl/RGBStd@0.11.0.stl | Bin 19331 -> 18932 bytes stl/RGBStd@0.11.0.sty | 53 ++-- stl/RGBStorage@0.11.0.sta | 325 +++++++++++------------ stl/RGBStorage@0.11.0.stl | Bin 12972 -> 13047 bytes stl/RGBStorage@0.11.0.sty | 139 +++++----- stl/Transfer.vesper | 15 +- 11 files changed, 624 insertions(+), 613 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2566c3e8..58a233b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -47,15 +47,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72e23f5ede99065fa6957a633498d2728d51016d61dae23b69c866112b7c61ee" dependencies = [ "amplify_num", - "bitflags 2.5.0", + "bitflags 2.6.0", "wasm-bindgen", ] [[package]] name = "amplify_derive" -version = "4.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759dcbfaf94d838367a86d493ec34ccc8aa6fe365cb7880d6bf89006de24d9c1" +checksum = "2a6309e6b8d89b36b9f959b7a8fa093583b94922a0f6438a24fb08936de4d428" dependencies = [ "amplify_syn", "proc-macro2", @@ -101,9 +101,9 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" [[package]] name = "arrayvec" @@ -202,15 +202,15 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "blake3" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +checksum = "e9ec96fe9a81b5e365f9db71fe00edc4fe4ca2cc7dcb7861f0603012a7caa210" dependencies = [ "arrayref", "arrayvec", @@ -310,11 +310,17 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "cc" -version = "1.0.99" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" +checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc" [[package]] name = "cfg-if" @@ -524,9 +530,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" dependencies = [ "equivalent", "hashbrown", @@ -555,15 +561,15 @@ checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -606,15 +612,18 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "dee4364d9f3b902ef14fab8a1ddffb783a1cb6b4bba3bfc1fa3922732c7de97f" +dependencies = [ + "zerocopy", +] [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -661,7 +670,7 @@ dependencies = [ [[package]] name = "rgb-core" version = "0.11.0-beta.6" -source = "git+https://github.com/RGB-WG/rgb-core?branch=contract-state2#d06c627c846e9111a940aa84a8d5a670317d1f40" +source = "git+https://github.com/RGB-WG/rgb-core?branch=contract-state2#1a7ec624e0b2a5b238babbd912e179fd449ad4fa" dependencies = [ "aluvm", "amplify", @@ -818,40 +827,41 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" dependencies = [ "serde", ] @@ -967,9 +977,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" dependencies = [ "proc-macro2", "quote", @@ -978,29 +988,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "toml" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", @@ -1010,18 +1020,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.14" +version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ "indexmap", "serde", @@ -1050,9 +1060,9 @@ checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vesper-lang" @@ -1091,7 +1101,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", "wasm-bindgen-shared", ] @@ -1125,7 +1135,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1158,7 +1168,7 @@ checksum = "b7f89739351a2e03cb94beb799d47fb2cac01759b40ec441f7de39b00cbf7ef0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -1182,9 +1192,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -1198,57 +1208,78 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.13" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" dependencies = [ "memchr", ] + +[[package]] +name = "zerocopy" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854e949ac82d619ee9a14c66a1b674ac730422372ccb759ce0c39cabcf2bf8e6" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "125139de3f6b9d625c39e2efdd73d41bdac468ccd556556440e322be0e1bbd91" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] diff --git a/src/containers/partials.rs b/src/containers/partials.rs index b92dcaca..3c1e32a3 100644 --- a/src/containers/partials.rs +++ b/src/containers/partials.rs @@ -221,7 +221,7 @@ impl Batch { pub fn set_priority(&mut self, priority: u8) { self.main.transition.nonce = priority; - for mut info in &mut self.blanks { + for info in &mut self.blanks { info.transition.nonce = priority; } } diff --git a/src/lib.rs b/src/lib.rs index 92ec2d38..5adfce94 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,15 +19,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#![deny( - non_upper_case_globals, - non_camel_case_types, - non_snake_case, - unused_mut, - unused_imports, - dead_code, - // missing_docs -)] #![cfg_attr(docsrs, feature(doc_auto_cfg))] extern crate core; diff --git a/src/stl/stl.rs b/src/stl/stl.rs index d1add581..697d15f0 100644 --- a/src/stl/stl.rs +++ b/src/stl/stl.rs @@ -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:7oFQsHNj-DaUodoT-JEpv1QK-Px0BgqI-gdu6DzR-sY0XMwQ#sheriff-biology-social"; + "stl:Srtqau4!-KXSB1G8-CSroocF-8N2oTi4-L5c2IQk-y$OJQz0#jeep-freedom-student"; /// Strict types id for the library providing standard data types which may be /// used in RGB smart contracts. diff --git a/stl/RGBStd@0.11.0.sta b/stl/RGBStd@0.11.0.sta index e5dd77a4..b17dae39 100644 --- a/stl/RGBStd@0.11.0.sta +++ b/stl/RGBStd@0.11.0.sta @@ -1,20 +1,20 @@ -----BEGIN STRICT TYPE LIB----- -Id: stl:w4Hvo8zW-bFpTGAI-W6Zn$9u-qqXq$cI-ef0vzlQ-hg!AEZs#carol-edgar-escape +Id: stl:R5kQAOh4-zB20Wn0-2z3MtK!-dNvcxhT-nZOmQtF-DWVziK4#forget-radar-macro Name: RGBStd Dependencies: StrictTypes#century-comrade-chess, AluVM#congo-archive-folio, BPCore#garbo-radius-peru, - RGBCommit#orbit-airport-voice, Std#ralph-blue-lucky, + RGBCommit#miranda-blue-promise, CommitVerify#tennis-peace-olympic, Bitcoin#signal-color-cipher -Check-SHA256: 917354510ec641422fcd5b08ae9d6cb831e5839ebe9794e5306a04090a6f0ac8 +Check-SHA256: 57bd2f9f8893b8613229dd87199163809bd240909a5270170df9205a61218824 22w{tQ*>kpMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r3sZD*X=8L$d2nTOVsJHoA?4$swuZp1 Wc+9AOf`(TIbyKWjTy4WkGaM+1wm|eR!wgnmidRhTh1hu7-!n@1Cr{swqbZoGSd8tmgp<3rE>;CP(yEW -WwtR~>M;9#?)(c8mUNj%`dgQjSJu&d2G{D9FxPD~VF^-4LPKwDZE1AMEFN!zncXl9K5w2;FV{y1jDTJC -C^p$-mHEbO0#qjhQ*>nE(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@lPLvL+uX>?X)a%pCH^=uPj +Wy&lbZ-bfLFbqC#o>4E?M+l67UG^w8*<_XZ#%uyqCj(P-WZ`BskSBGhsMxw5cp3r9ndQi`YyI(VS@-_~ +yvW73<_S_qLPKwDZE1Aj(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IRl4@lPLvL+uX>?X)a%pCH^=uPj BlbC`N(qzPM@Gr{imSMTSY5T*7C#t%#3&jH2SRCdV{d702L(ZFbyiIV01^bJwgM1*ibOBDT%6aZ| SrJerP1pIOD57`7Ol|-ogQ6Pjg~y>s-v>!^VNPLfWv4Jz0xkJm$nc4yMWR2J-cc#Q6SofWC)gp7L6!Sc @@ -45,7 +45,7 @@ YYangZEb0ER%LQ&W_bnxIG#g>Clv)aMjKgwAH@`bu1x<7g|G$};xvA~n-$_S3Qc8lYiwmmVRLAO(LK3V &vL%&i(~ao9rExlGMgPx_&tqtqVlwo1}@PHO=WUxY-Lb#Z*OLk_h5K%L=laq&yA1JoJ^{7>oKLkF4~ia x8KK|47hp@Qe|^xa&~28LV0v$b1}=fEj#9D^K)f#Cf|Xn@L3mU0Z2&n-dr?jcD1Ll0RawDWpib6c4cHj d30rSGVkgW4+YqPF=12xaaxrgbrDxyH3 -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 +Zy&ckV>*V`yb< +VSBPQZ9sOzZX5$Qs*8b`>+BFjcr)z~Z#|7V!q4uVJ{nYcaAjmcb8~5DZgWCxX>MdwWnpYocu;h5fgb0V +4v@cHO73HjlbgFm42mCs2<+~e+;O=m63^mMAVG6;X=iRyWp-s@Y-MCbVRT_aY-w&}Q)OXnRCrKya)JyE +uWS7@0e2{bYWv?No0k%_$#~gq^1qCzduE|50q|rgTt*-ZIkqGqXDRHN7@cTY-w&} +X>MmmVPkY}a)xYW^+v~7{W03rq(;firJ6j(!OVQFqcY-w&}Q)OXnRCrKya+46efUz`Mi!Z}iQtl5;XwV(E +`Zdd&WRj~^37YhpmjzF7Z*_E&z?57PmRE;x*JyQZ??N1%-?X%h&UrV?nQq$W5 +tE;F{pQrXd&=l*`O?@#x{Qdy?T_k!`1dtF2Q)6glZDC1dmB{9L9(7`0)Rt93YLV-HLXe?vTA1;^Q1`Zq +Bog<<1W#~DWSvz@&H}H#7@L7b91)nfQB3> +bs~EXcCXx(drQcb3B`Fx$)^%va$Ar)C7cLJWMyu2X>@tR0rJ$F*-AP6Kc@Z@L=aa)%5&TMP!2h_{lmvK +E;fP*MR;^&ZgXjGZpdqbdkb29#*qXha^)f?kI>J>8dqqbOFybHKpQ-MBMCulbWCA+WpXjekD95&21^?K +{bw7OyejLWpmymk!z-` +g4hv-$6z_YxoLZ_neUP>BpbEf7FA*KKfDV^Y;R&=Y*Tb$bYJW4?*h+3X!X@fjr@d0IimUQ-Q4pL=yWnpY(WI=RvVPk0QvgUTbnZZteO3IOg0+3WD --We)Tm9OC!w7#?l6>L?y -a&2jDVQf=nVQlq!O*mP8`7qV21dnrCyk{{a-lF$FG0V5TNAc?Tc{K=4WprU=VRT{n^sESGu0eNZ)cp(* -eFU-DRQ(QTUJ^TE1nY56>E%WYMs;pyX<}?;RC#b^{4_<~U(XE-|Ev|Hdb$N7;9H9;8!%;3hl7uME$faw -4?}NmV`X7%Wn@8gbYWv?|7c^tcv66A`G>fI&S@S1XLTY^Y?LL}v9ZWWu2|;XdXkkNPaC1n$BNr;@ghiU?gEXK9KMDE{ -F?;HZBRuDVqlk6qmbeZmb;*F>vukd;=m`ygb@x#_>`RmOO$0)3 -Z)|vJcxJL|x?WKK>7x;m>=zTw_)ojDN{iR+YxT1qeJQTRI%yh?{hxxA$L2PhnVMAeXb4+h!VRLBFJq*Jt -8?Abrta^#~Iw-!oZ%zqO(A&rh^vGm~tg_w^L2PhnVN-2kY-~(#WMOk?3sZD*X=8L$d2nTO4*&^LN2X=Q9=Q)O*QWK$LhgcQkwbf~^M){{|8P%hsRk~m~ep32F151Y4WWC&DwaAi(mZDnMP)DN(0hN+Kd -p}ZAoN($wDX8VgT7DmW3qm%zcviBmGB|7z0dgBIJ4&sCG^VR$+2!VQzGR(<~&{!{{>E -!(#o&^pB98KZhv1GEPn8Orhb4n;8ZMQ)zl>ZfBCy0{K32d-H~a`3x8b375ImR&CF_#3#*gz1^xtuG$bz -VQpn(MrmbiWOGwxZAoO8A%m*X98W>f2s0TH8C&EH;|vtDTYgh)4~t7}WW`YoMQ(L%R$+2!VQzGDn938Q -b#DiI%LhXtBc@pg0t!L7$2{bU&sPXOO(dS=5LRJwX<=@3Np5CuQ)O*QWc?UbbJ9Xwr}~3wv^yxa@v}v^ -+kiGSR2X#8M$tG2GZIy9X>V>;VRC6_vj9 -3RHP;Wm9=`bY*QR01rWKV`y)3Wn@BiZe(m_a|8nc26SO?a%FS?1p)$Z9+vrsy<5&Clo)5)@&l6UwYFh+ -Ofu5^ik9drt)+8X1Pb;^kcqrN>J=(17*>vH+sNfO>T@W!FHOn$!h0|RwlQ4lF#CP({0kA5beTu`TbGnq -*3ot*&Lor=XWH@ulIpd#VR%e3()@~+=qs(Ib6Nxn_DPV5yg=#|Dl8aQ -j%nM-Ei>Xk6pZ8Tv} -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 -0000000009WMy_`Y;SO7assw7Tbs~EXcCXx( -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 +Xs-`LD)Qj52!6cP*Z!G$Tm$Q_lGhVX|8CsHoVw +9(Wo7%9-WJvTObEZdv#L1H8z^x8^x}V1~%|K(CXMeNGCqZ9JrfV!Z000000RI300000001I<Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HLtfv$so3kRF1 +PV2}fOp_vjQ6FdFHId|lr&gK9B000000000400000000YNbaY{3Xl-R~baMa- +0^w#fkSBGhsMxw5cp3r9ndQi`YyI(VS@-_~yvW73=7ez#lPpg3!?y@aX^XIja4CK{WF&t@k=WXUZP9(Y +H~bairNa{vkf;?xyT5z&Ua+M@}m +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 -XaE2J1q5VabYTDm0RlzpqhH(hioJpYH;+t0eX2 -w~A!Q+0eaZ{MVycPK^psbz)a(bZ%vHa|8ka1ax?5WB>&L0`+VYVk7oBr%DNv+($;q`HHK!gIHa)*%m(- -e#9sm3ZsHT^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1RsjNZcmM?f0`+VYVk7oBr%DNv+($;q`HHK! -gIHa)*%m(-e#9sm3dMUNn!oosZgNI|twmNZeC(lYZa*g7-2eQ3Yy;-pL1po(RWoBV@Y;*ts009Pcd2nS;ZvX`W -0006J2y}UHWlmvjWdH>M0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*;5t>gcQkwbf~^M){{|8 -P%hsRk~m~ep32F151Y4WWD*HxX=Q9=PGN0j00jX8Me3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r -8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_6AN}>a%o|1bWUMyWdH>M0!8YhU)%QMkO4aJ;_ZeC -e;xE!X<$x_Fs4If6Z`oP*$IZhiz50p(P||0m=?fQ^Mv6fMp@;h#Lzj#&aRFSj|fwBaByr*VQ>Wj015$y -z}|oy`cC#6Uw2{wE+Sw~);*uMH+9Bf@aCY-RuiZDn*}0S0GmZ(?C=0tIh(Ze?Tx2XWo~16 -1PWnub7^O8ZDnqB1qWwkZe??6a|Q}@a$#@6CZU+fvcywiMb7^mG2nl6)V`Xr3X>V=`3R87(aBO95 -Wo~o^1PNnrZggdCbV+0Z2AHk4+Bm{3x%H=p>4!*u&n~Wpi|4ZEyepNC#tb -Wnpx0assw7Tbs~EXcCXx(drQcb3B`Fx$)^%v -a$Ar)C7cUkZfdKHyBH|__hx_vscRWAu^w2r{b^x;wDWyGXd29kG60)seH8) -H{-R`;$q)jqasX>b16E -cuX?V{EC+7E3Kt-Xc_Cg)w39@m$R6qOEzWQ+NTC@=;u^7-u;qAzHYrYiZOnAva3v<@st9jzbZKvHVQd1*EFN!zncXl9K5w2;FV{y1jDTJCC^p$-mHEbO -0#qkqh9c2>uJC38-{*D7fZ(%hZo23R4S;p`Q9JBQllDyrZDn*}WMOn+00{y`>Z4!V_T!KNI`QJ|h6;Zj -^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+pEi>Xk6pZ8Tvv!8D=zpn(&o-7tVWUa<1Q{n`|; -)uYyv!)~4rGOBq100000000300000000006X>M?JbaMa-0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If -6Z`oP*&DQ20rFt3ZOHs70;T-agdg$OP=xIp;K4#IcLF!~assw7Tu=2wF+7z(Wqt=tdZk`V^s(Ana000000093000000000YNb8~5DZf#|5 -baMa-0!8YhU)%QMkO4aJ;_ZeCe;xE!X<$x_Fs4If6Z`oP*&DQ20rFt3ZOHs70;T-agdg$OP=xIp;K4#I -cLF!~assw7Tu=2wF+7z(Wqt=td -Zk`V^s(Ana000000093000000000SgVQgh?V`*h`00{y`>Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C -`4HI~v{(W1V6JV*{3!yZ{M3XW@z+pM0!8YhU)%QMkO4aJ -;_ZeCe;xE!X<$x_Fs4If6Z`oP*&DQ20rFt3ZOHs70;T-agdg$OP=xIp;K4#IcLF!~atu~sY-Mg^c}Zqr -V`T;b2y$g{b!l>CWCF@89&dx0-7pM3Z=O*v*GCA9fL-<|HrZsA`NnJlR3~AEBGG%U@MZ$v=XJ?|;InIP -y66cFfOYp#JM2r7_Duy=WpYk$0|EkeFaQE}F#!lxZ*_E2WnpXv0|sqnbZBp60&gCc`G>t*&Lor=XWH@u -lIpd#VR%e3()@~+=qs(Ib1t_KCAn^87TS9h9ibhaZ&^Bcn*B*;w|~I;-PD|t>jZXhb#wytY!hN5_Bp3Y -36tDMM#=e#tGI($UA5U3KNx<*C>jbO<32;hs$B9ZCsU(1!DsC|W1LOd&b_IRG-(&Q$wPGrVr*${WNB_^ -000O +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 +;K4#IcLF!~asox_qhH(hioJpYH;+t0eX2w~A!Q ++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 +{3!yZ{M3XW@z+p|8C +sHoVw9(Wo7%9-WJvTObEZdv#L1H8z^x8`-^P59r=ivkC`}q*r8?;yf@?frQ$owe+rTo-{AMw{vgzX#P!9p!}0yp?_ +2y$g}WpZ|9WCG#Q-5feW*SKg&%h~b$G{NN>LxBDo)YaDXjV8yEYGv>06AuO0fiYoI|8ZKC9(55{UNs2( +LOhfb*8wh)9?KX`VQpn(MrmbiWK?otZgXjLX>V>+d2nS00|IGe0^w#fkSBGhsMxw5cp3r9ndQi`YyI(V +S@-_~yvW73<}^|dt`n9TUcD*&5hFi^PVx{q1b@^7zTcrn*%qZTXasIyZDj&Q>Z4!V_T!KNI`QJ|h6;Zj +^jB$MPK+?7Lu3>C`4HI~v{(W1V6JV*{3!yZ{M3XW@z+pZ4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HI~v{(W1 +V6JV*{3!yZ{M3XW@z+ppG1a4t% +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 SCTt{0$tFxklyP#IR|Wu_$ZC!N delta 2435 zcmew|nX!2~BY(HGG}|XUfx;vXLHq(XRZfwdk(M!B>YW% z$fzd7=~_{e3e*5pUdR1aKY&^5s?@g=ZvRi4&As`TU+=zi=-)}chZbe0t8vKfidiCn zFy5&&FJ*Hf&jaSk6V2o|&lccd+ zt6bjdJl)E&dHwoMp$O-U#LT>q)S}$Xyu_T~)Wn?4;UbKzjGB`pB@>(p1rQ-eGO^}Q zE|Aoi94W2f$V91OlUt?I9Vj+LM>>jPLpC3iHe^yD$mqT`}X=_ zMdgA2J8Cv+9pDyET`=|ZgrgIWG<~elnmai|Zn8W9(t%hpYr0G0CiepqkAS%=igA5*R>}?_0DI zG;MM?x5DNnmgk8G$xeQS$(ya$5jL{X<^o|wg|;UND~hr^Pgv1DE``aN_G<_#+-&M_ zkAUTSf1Sbk{V}a5fQ13?$rc?1e7(1&O@LCzq!JrhEa$E Terminal} + , terminals {RGBCommit.BundleId -> RGBCommit.XChainSecretSeal} , genesis RGBCommit.Genesis , extensions {RGBCommit.Extension ^ ..0xffffffff} , bundles {BundledWitness ^ ..0xffffffff} @@ -200,10 +199,10 @@ data Consignmentfalse : version ContainerVer , attachments {RGBCommit.AttachId -> [Byte ^ ..0xffffff]} , signatures {ContentId -> ^ ..0xff ContentSigs} -@mnemonic(salute-client-between) +@mnemonic(virus-solar-suzuki) data Consignmenttrue : version ContainerVer , transfer Std.Bool - , terminals {RGBCommit.BundleId -> Terminal} + , terminals {RGBCommit.BundleId -> RGBCommit.XChainSecretSeal} , genesis RGBCommit.Genesis , extensions {RGBCommit.Extension ^ ..0xffffffff} , bundles {BundledWitness ^ ..0xffffffff} @@ -384,13 +383,6 @@ data Supplement : contentId ContentRef , creator RGBCommit.Identity , annotations {SupplSub -> ^ ..0xff SupplMap} -@mnemonic(lithium-torso-parent) -data Terminal : seals {RGBCommit.XChainTerminalSeal} - -@mnemonic(amadeus-athena-lagoon) -data TerminalSeal : concealedUtxo BPCore.SecretSeal - | witnessVout VoutSeal - @mnemonic(sigma-rose-cubic) data TransitionIface : modifier Modifier , optional Std.Bool @@ -409,9 +401,4 @@ data ValencyIface : required Std.Bool data VerNo : v0 | v1 -@mnemonic(pixel-arctic-flame) -data VoutSeal : method BPCore.Method - , vout Bitcoin.Vout - , blinding U64 - diff --git a/stl/RGBStorage@0.11.0.sta b/stl/RGBStorage@0.11.0.sta index 4333e3f2..3a8672fa 100644 --- a/stl/RGBStorage@0.11.0.sta +++ b/stl/RGBStorage@0.11.0.sta @@ -1,23 +1,23 @@ -----BEGIN STRICT TYPE LIB----- -Id: stl:aHl1Tsu8-RxChWD4-DXqrqOO-qFlJXsK-0uWYfDv-H5BgmxE#plastic-shelter-podium +Id: stl:Srtqau4!-KXSB1G8-CSroocF-8N2oTi4-L5c2IQk-y$OJQz0#jeep-freedom-student Name: RGBStorage Dependencies: StrictTypes#century-comrade-chess, + RGBStd#forget-radar-macro, + RGBLogic#pioneer-gong-smoke, AluVM#congo-archive-folio, BPCore#garbo-radius-peru, - RGBLogic#lobster-dilemma-famous, - RGBCommit#orbit-airport-voice, - RGBStd#carol-edgar-escape, Std#ralph-blue-lucky, + RGBCommit#miranda-blue-promise, CommitVerify#tennis-peace-olympic, Bitcoin#signal-color-cipher -Check-SHA256: 762f9f0746599dfafb02c4a3c8e6300c29b33f5632a50e3e6101df44473526f0 +Check-SHA256: 5cddf0b1af2fd4aad0239f01a29cd756dd6afadece0f81c483c0ed7ba79877a4 -3Q|WxQ*>`~VP|CtMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r3sZD*X=8L$d2nTOVsJHoA?4$s -wuZp1Wc+9AOf`(TIbyKWjTy4WkGaM+1wm|eR!wgnmidRhTh1hu7-!n@1Cr{swqbZoGSd8tmgp<3rE>;C -P(yEWWv3AF6ly&&wwzO6!ob>Z)F^+#%=mzd2Bb4}cMy22w{tQ*>m? -EFN!zncXl9K5w2;FV{y1jDTJCC^p$-mHEbO0#qjhQ*>nE(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IR +3Q|WxQ*>`~VP|CtMe3tp+xFv-0Xp&G?S=|}9rRaeU`~uMrbA>C`}q*r3sZD*X=8L$d2nTON0|@+=y=Q> +v|4>O&vPv+=S{uLVNP~VnF~b?WpjwG22w{tQ*>lu-sGVgUxv=-u%**DuqS3%NPM4gK+g&1$YY;CP(yEWWy&lbZ-bfLFbqC#o>4E?M+l67UG^w8*<_XZ#%uyqCj(P-WZ`BskSBGh +sMxw5cp3r9ndQi`YyI(VS@-_~yvW73<_S_qLPKwDZE1Aj(cK(6LD#rwNz2*s{WQVl8bg5o8r0R+^o=IR l4@lPLvL+uX>?X)a%pCH^=uPjBlbC`N(qzPM@Gr{imSMTSY5T*7C#t%#3&jH2SRCdV{d702?arHbyiIV 01^bJwgM1*ibOBDT%6aZ|SrJerP1pIOD57`7Ol|-ogQ6Pjg~y>s-v>!^VNPLfWv4Jz0xkJm$nc4y @@ -59,163 +59,164 @@ doT%2WprUyVQh6}6`5yb%eAXO2UPPRaj@((`=>9Tsh)f38uw_!yYu^q2uW^mb#zT(a2QC{)5Kh{xQ8## XkXX-V5JAC*Swe0D}EgBwY$m<1r0}KZe??6b5mnzWo=<3S5nwzfbg8kY9lvP5=0XL2PtPVR>b8F;iu9B}H_;!MSfIY{o4njA(e*y9jN*vODbSxwYq{gu+hp5Knh*Wn@!yVRU6vV`yb< VJRgJ2Em!ld>cVuZ*8Se%j3y;5n>eohpw0DA7$}d%n3nrb7gc?VP|tLvZekPz%WEGnBZKS8(M7E9_@Aw -VcyGtCevi|7U8=IR&Qx!Q*>c;Wip;tQ3m-<6)UHjqig^*m4co5us7ukl*0UQzs7w8g$YDqbYW9;VRU6P -^9^^3_Pt5}T#W%VjCpvizhs5L;^0Ang`SjFoSPsDRB~Z%b7^#GZ*DYF53UoI8eY9A{1GERg--GiI0S#x -1is&)M%fmnGH4D|a$#@6CZd7@2Wj4Vyq57bK6Q|uUfIMEX^1}Vv6tLB!)|10-o)0prc?(ZtV|8+J -Wo~0-b2%sT-%4v&H)ISe_*f>my4uKhF4_isHhdU7d+OQBHXT88b7^O8R&Qx!Q*>c;WkPIeZe&wsVQf@* -P;_!Rdtiph_du_cl6_7Jvu!-2h2yT^5yv>ite$I%(jAWmQ)6glZDBo}XLDl*9Lx&T2C;PAKlCCveQ{N4udSh#@3Dqj&&J9b8~5DZf#|5baO&%X>MdwWnpYocu;h5M(yUq2ps*m -=2xUDT;RqCgn#@WzFu~@adfH5^@&-|3szxlWo~16RC#b^NWB_v7yE`g7JPmsUNvXifRDiWpZ<6ZbNTvZE19EWo~pzXnF^bIJ{KZXqHAX+2p+mzq!3hcVQzD2bZKvHLUnFrY-Ljs%|ogz -QLxC5#{z1Bs(ImjcZKu%4y_xMoB3q3{238PY;R&=Y*Tb$bY)XxXk~3-Q_yWzLakI=>NgypNP%NA5%VQK -M}UDECiLhAbd;J)AwhFi#4d2nT9L349yXKr&sY-w&}Q)OXnRCsA*T90!HB~2q+D9Z7_cLRiBQrIV5qn*4? -Y6;!|pLWveA3<|-X=iRyWp-s@Y-MCbVRT_aY-w&}Q)OXnRCsA*Vd@w5&2+699UCMSB2$w)@^&J+aUCZt -mJ634`nl9<7(sJ$X=iS2Wo~qHLTqVnWK(5fY*ct@WMp+7La7y@JVOzJ)&GXo9MeQ_qmbcB?4VH0I#X{* --VH@~bY*UHX>V>+d2nTIM8@PY!h`6Z9%SYt5l1;p48RB~Z%b7^#G -Z*Eg#Xk~3-d$KicKz74!90ND1i-DNy><~nFGwl#>J&iiT&+eT*8dQ03Wn@8fb7^O8b3$xsZe&wsVQf@* -P;_#E9_N=1kiT6@?qiUXo4Z8}iXVUo?CzP|ak(fG&*D)aL349yXKqquc4c8~Wn@HQbYVhlX>MdwWnpYo -cu;h5f(#9>YyC6dKSj6?lx}!~!>v+nlk{(+0jO?A -+73c&X>Md`Zf8beV{~tFhyLPaScq)s9KMExvw34D6J>+NwrBxfixd_%u|$Wt4ncEsX=iS2Wo~p-d2nTk -Ygi@C#*klFTE}3hP#3Wmki}o*nL&Ed10e7tM;q}9SVL%GX>L?_X=IPP!sthuPUKDEU2%WC`V+X+(UG)m -k--2W1{>juaWxcJLug@XZbEEnZe&wsVQf@*P;_#W5WIk~G+K)5%bR49t5yk`^qQ9i -PjGK_bd$i8ToRU7hj7c;WkPIeZe&wsVQf@* -X=IdA)7t~9tEf?*r}jS36zkMYeK9}${s8)2BzjZ?kPrw{V`yb-W|y2ahx3nF|Vuawki#7NH?S|Q-Q!u2{b3PW#hbaG*1bV+2Uj4+W$ -OUgRJVvNU?M2#%ns>Kwa1v8ba_B>T#2Nxy{Ms;pyX<}?;Q*>c;WvQZiSChz_$|Xx}eRkFNAr%^eLl(1e -@}~9=0-ijXfCfo!aCLNZw&;L{94K`ndk%K5+?9Jv$dw7jc}U5p5@2#$kUJ%u2uWmRZggpMdB|&mdkb29 -#*qXha^)f?kI>J>8dqqbOFybHKpQ-MBMCulbWCA+WpXjekD95&21^?K{bw7Oyejxis%MV9vZ(?C=Q*>c;WmI`^W!AhivB7pz2;cIXd9lO&nf5a*AnfQld~-bdb4MdwWnpYocu;h5+M7`mSQb`xkca!3_>4e9YQ#rfba;u!+d5tm#=h2RwFD4YLug@XZc}Ara%FT=WnpaHg=PS6VPp{$?vC-- -s`v@B8YHl)C#jpVFzBk!DMw8SR$**qZewX>bKWD7Yo@G%*b#-tU^&3KX?w7l?~*Sh8@1jRRblZzybDKc -Z(?C=Q*>c;W#7-Kk@bh=O+>c=6c;Wip;tQ3m-<6)UHjqig^*m4co5us7ukl*0UQzs7w8g$YDqbYW9;VRU6Q +QV*^ZmKt8YDf|&5KZQ>65I6*X)C9iYp+?yjr7~y^RB~Z%b7^#GZ*Ek1aAh{ZG@<&SffJ|QFn~N>u=2wF ++7z(Wqt=tdZk`V^s(A}fV`Fu4a%FB~WpgMdwWnpYocu;h5IeTD+$oD|6lahT-3bSoIq=nQXM0|*v-OPCjO=V)bO0J^ce(PcW1p-OKH=(^)qT +gDk?v){Y2{bs0f(b7^O8ZDnqBb3$xsZe&wsVQf@*P;_!e?dHP>9R0ZFSEMRj;Km4qfBYZ5UUs>0bg9bq +iCNAIR$**qZew{=d2nS&y&7&8`-VFfe10WfHD}v`L+>hHy6d9F3e5?wo>3YSP-SFga&u*FLvL+uX>@I6 +Zgfg$dIyj=yj0m~TwLF91B-Lz;+I~gZmLfZ*F5{VQgh&Ms;pyX<}?;QxVNWsw`2k$dAVY +YJsYG;e2<6^ZE|08W0>u%$${;`BKEO$VG +0b8(5pxNmH8B}?2Wn@8fb7^O8b3$xsZe&wsVQf@*X=GZDa|tC)BU>oS@xONigke(HCtahRyiRHf-TMdwWnpYocxhy0bsj>g6`?#s5rWnKhSeO?L~x^!;Y#eFP|P}0Z%Ez^MR;^& +ZgXjGZd7@2Wo<;p^e<`!Iztr?rsl#d#OQkEER^^L)C{HEhxT=ipb%1Jc4c8~Wn@NmZf9v?Y-Ml_We~E0 +fo~tTJ>?Q(lLJ=>rBY$70^roXTE)+&>In@)Z*F5{VQgh&L}7Gcb>vO>-_DBy8`Vb0jGrW9$=2qSMXvL3 +HlVN`i=Wp=e2Xp5rzopjE#5h98`u~h0v`BV8NkLOrpFzp4z*br25VQzD2bZKvHQ)6gl +ZDD(|HElq4!)_b{H>!()nCt8iM0hjp5N|z=I>OKHojw{=d2nT9L349yXKr&sY-w&}Q)OXnRCrKya)BP_ +mkyA>T}tj_kdvFcMGT4`fC%jFncQ)?C=$=&Q6NEcb7^O8Qe}2!VQgh&L}7GcLTqVnWK(5fY*ctqbaH|W +4XEgn0epQk*PX+nL>xOm%pK>soN7+Lug@XZbEEnZe&wsVQf@*X=H?P4U;TR^uxCZOKFR+ +hj1x=IbKfZ0H=mhJ>?uVxYW^+v~7{W03rq( +;firJ6j(!OVQFqcY-w&}Q)OXnRCrKya+46efUz`Mi!Z}iQtl5;XwV(E`Zdd&WRj~^37YhpmjzF7Z*_E& +z?57PmRE;x*JyQZ??N1%-?X%h&UrV?nQq$W5tE;F{pQrXd&=l*`O?@#x{Qdy? +T_k!`1dtF2Q)6glZDC1dmB{9L9(7`0)Rt93YLV-HLXe?vTA1;^Q1`ZqBog<<1W#~DWSLV$aBOK~X>?O%VQf@*X=K%nUkD7Ff~JZGMgrhZ&rP2gYrktY!x$bpv=qCl=HdlOZg6#U)$WoGNr5Mos!L349yXKqquc4c8~Wn@-i +Y;|QqY-w&}Q)OXnRCrKya@&ep8iEuMbtv-qj6g$b#7A9pc!|f`I$jaRzSe2A1Q1w5Xklq?Q)OdvWpqv&8b0-V>p(oz$%022vTKaWo2z; +WZ)$6RO5jtVBkIp97D5aLO3Aj@Fk!Sr;Si;g|i8f{18-fVQzD2bZKvHLUnFrY-Q&qi~g5KnWLns8aO;k K`4k?o@Z%;JYn$xWqy`)_H7PQWp-s@Y-MCYbaY{3Xza4)cE6dyPJT+tk%Iz|R3_dTDo~ZL;TN>Nvv2!%cWh5H`};;G4e`yboldn7 SVL%GX>L$;VpnN&Ze??G{4_<~U(XE-|Ev|Hdb$N7;9H9;8!%;3hl7uME$faw4?}NmV`X7%Wn@8gbYWv? |7c^tcv66A`G>fI% -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 -X=6`tZ*_EY00{!NFEi>Xk6pZ8Tw%5WIk~G+K)5 -%bR49t5yk`^qQ9d0000000030|Nj600000EZ*_EVZ)t9HPjGK_baMa-0=6++>M;9#?)(c8mUNj%`dgQj -SJu&d2G{D9FxPD~VbNz7y+ac4_6daU{%%bk3j+fu`A*2Y1(Gbp$uTFEssITBwlQ4lF#CP({0kA5beTu` -TbGnq*3ogq>HOrf1lB-q;n)I5N0000000000|Ns9000000 -0000000000|Ns90000005KU!mLvL<$a$#e1Q*>c;Wd;Wbb7N>_ZDC1d0=6++>M;9#?)(c8mUNj%`dgQj -SJu&d2G{D9FxPD~VU$wS+XJhss8OG%_CC-Q>(otsF+cqN0Qy}ddQ=3E5DH^&Zgg^CV{}Pm0=6++>M;9# -?)(c8mUNj%`dgQjSJu&d2G{D9FxPD~VV?*rNjk^^qPoT1+zTRnAg`3vXv9d*8d@RXy~6c6G6rXCZ(?C= -015)OFEi>Xk6pZ8Txk?vf5kh_h+&YE#h%O8d1V_{UOl9{V;uR#^q% -KQ|D6@UrgHD8Pn~kr<(gaR)wpptCRljin0000000030|Ns9000004WMOn+00{!af$yWt)@)i+7y=gQ -ng90cs$Q?$A?NhJIZ%cVfDxNuKY4$``7oZ);noRy3n6DO2)Q4;H@bN5MlNj7(#BT+0000000030|Ns90 -00006VRUq1V`u;g0>gptqs-Q9T2mMT7U`M)_Ufu$uiPQ$^uIY!h7W)dn`vpvk*iEz1m@>LhD1|b9AmK% -IADG&k)euf*x}6a-2eap000000RR90{{R3001i!MZAWZxVqt7kbYXO51_A|ZZf|#P015)bf$yWt)@)i+ -7y=gQng90cs$Q?$A?NhJIZ%cVfDxOp75Y^g(<6SA(C9k+Q9g8C2$|Z6BB=4C11?tJB&WXuwlQ4lF#CP( -{0kA5beTu`TbGnq*3oM;9#?)(c8mUNj%`dgQj -SJu&d2G{D9FxPD~VU@_{dLDIRU(}XWLTZugenOC;Z(5k~zEJnJiX;;E#R9f5Tg)RqK0VQ|Mwn6X+txo3vSYd;;z)HQ~0$cz90000000960{{R30000wW -b#7#AWkYXnbaG*1bV+VxWq1Gz0=6++>M;9#?)(c8mUNj%`dgQjSJu&d2G{D9FxPD~VFP=UwLKbzE(ciw -C3nrXLGTEzPUiqvVS}~6O1M;9#?)(c8mUNj%`dgQjSJu&d2G{D9FxPD~VTo&4CC$c=UszhlV5m?Ru@{iVU*wrVdeH+Q@FPbX@c;k- -000000RR900000001abrZgg^CV{}PwWMy~&3IetMU`Np56icmN6lwlQ4lF#CP({0kA5beTu`TbGnq*3oKtpQ8M_qJyiO1VIUJ=H=)@ii_0=6++>M;9#?)(c8mUNj%`dgQjSJu&d2G{D9FxPD~ -VUrNNfUz`Mi!Z}iQtl5;XwV(E`Zdd&WRj~^37YhpmjD0&000000RR900000000>QGZBuk%b7%$)2ygptqs-Q9T2mMT7U`M)_Ufu$uiPQ$^uIY!h7W)do6>hLb?3Jmz+|vF&&E~F32+|Fmge=B -|Eq%4$%~#cQ~&?~000000RI300000000wDhVPj=;015)bf$yWt)@)i+7y=gQng90cs$Q?$A?NhJIZ%cV -fDxNJ%D{mG2;nQMTOnwNgyXhzrB~SH04;UKo5i(1Vxw^a!-4Ok%+_pLQy2mk>6!ob>Z)F^+#%=mzd2Bb -4}cMyIma44eh@g%x4xWoee18jkej%UZIDDtP|$FhF<2o`0000000000{{R30000002WMq&Wpib7015)O -FEi>Xk6pZ8Tw@2rNlD$O59e#ogQsB77jPl+h5j^*S;F -wlQ4lF#CP({0kA5beTu`TbGnq*3ogptqs-Q9T2mMT7U`M)_Ufu$uiPQ$^uIY!h7W)dn+BMzx7s+u -ExGllhUte$e$Op^sMk_Bzn7+|3$axzr2q*6!-4Ok%+_pLQy2mk>6!ob>Z)F^+#%=mzd2Bb4}cMyV?EP} -uuDl+D$lsiICW4a8e$Z2e6I7`3evG=Yh^sO0000000000{{R30000000000000000{{R30000002V!+@ -WNc+~015)OFEi>Xk6pZ8Tv6dy}<28ig(gSpg+?&9*`C2(3=%09avz -wZKZf-~wC%wlQ4lF#CP({0kA5beTu`TbGnq*3owZFzp>JB4@xD;^wu&SY_r(IXFEi ->Xk6pZ8Tv$oM&@m2OQ0ewbQwN{Ihzb=0(75jKBm?VEtv`0VWav0000000030|Ns9000009cWHEPWpi_7 -a{vkgwlQ4lF#CP({0kA5beTu`TbGnq*3ogptqs-Q9T2mMT7U`M)_Ufu$uiPQ$^uIY!h7W)dn_e*Xi0g$2n6-TWNhgSA?dx`~TofZYQwM8# -9N}@u^Z)<=000000RR90{{R3001IJsbYWv?ZDnqBa{vkgwlQ4lF#CP({0kA5beTu`TbGnq*3oxYW^+v~7{W03rq(;firJ0000000000|Ns90000003UqmJWm9=`bY*PC`}q*r{eiB7ehUYis7~w1CQOqefKeZ3;Wd%uopqe!>_vj93Tb3zZggpMX=QT& -3Ietbs~EXcCXx(drQcb3B`Fx$)^%va$Ar) -C7c4of$yWt)@)i+7y=gQng90cs$Q?$A?NhJIZ%cVfDxOb;91nsu+1H%suE1D6u@lRoC;S?XbB(j&QSOS -Pz0a=0000000030{{R3000004Y-wV1015(Pa5aA+<>R2XhQO_4{AcS-HH^7AVzASV8M4NYxyCl9FjWFA -`CQ2GiK9iLKbGE6DZmrA4)G`0A&^0p`%?-6VsJHoA?4$swuZp1Wc+9AOf`(TIbyKWjTy4WkGaM+5(KBV -0uX$PL@)I=)&*`^S@`8Scoz5#{lyP)a751L0000000000|Nj60000001aoO;a{vkg!-4Ok%+_pLQy2mk ->6!ob>Z)F^+#%=mzd2Bb4}cMy;?xyT5z&Ua+M@}mOiDpYxh>^^GknUxTJ!XL#OUcE0>gptqs-Q9T2mMT -7U`M)_Ufu$uiPQ$^uIY!h7W)dn}!$=ENEw7&f?o%+)B!ZpG}K!%4G?I4vp$|ttu*CMF0Q*000000RR60 -0000000>QGZBuk%bY%tt33q99Ze??GWpe-u0=6++>M;9#?)(c8mUNj%`dgQjSJu&d2G{D9FxPD~VTo&4 -CC$c=UszhlV5m?Ru@{iVU*wrVdeH+Q@FPbX@dBq1@f2!3F}9pjqENaGM*m)mvgA&6NwpvNR8OilE(zRs -vAaSw-)KgQ7fAeMNYpypNfHyE8AFfUoC2TNw^jfE0000000960|Nj60000SNZ*FvQVPkZ2015)OFEi>Xk6pZ8Tw@2rNlD$O59e#ogQsB77jPl+h5j^*S;ECay7U -sgJX1q%>cJ$|yD%XkEW=AK-dqj9T5dYzU|{0000000000{{R3000000 +q^l&d3LB)t`g=~H!XQC&b7^O8Qe}2!VQgh&R$**)WkPIeZe&wsVQf@*X=DgeM?y?*XK7;s01m&n?Kom? +q=ULN^A!11b?H{wM>P}NCm0qyW47Umu?kmdbZ%vHb5L({_6sAL7mGp}OcA!CL~}i)2Slu_c$oJJbQGPZ +GGuje3Rh`#Ze??GPjX}iQb$5lbYv<31XjvFEe`q(P0Wu-jl=WoO=u#zdNXNBR;=G)$^MzI2}f*iVqt7g +b#w+hOOmXVLEy~oQ-C|EJ{=;K=5mqowm^*AJFBo!g5e5Kbz)a(bZ%vHa|W2Lx7s+uExGllhUte$e$Op^ +sMk_Bzn7+|3$axzr3yoDZggdCbW&wzA;%YO&?-P3OV>$VQpnM4jURhcYiMi{5`y}{I@R8 +Sz9aZEQ-@0qgGTiyVimaRB~Z%b7^#GZ*ECuVPj=DKD$)#x3$o4Af`kVHyQ&~TYCSRqgaNoHYVWjo5ifddHPE2~=}XorO3wsWOd +*yR8%b;g^;wLfB`aR*6eVPj=UWIk*0^^?(m0E0zBOZWn(@&jfq2YNoZ;ZAl)>;YPDKMYo3Y-Mg^c}Zqr +V`Vm(ZiUQ7;QU9z@vLsQU&dKHyBH|__hx_vscRWAu^w2r{b^x;wDWyGYC_4 +aByr>bz)vH_K53+2$;2e|4Ao^X6@^Cu3Qu&Ia3E~c^u(!$n*@L7b8}!nd4IzBFrLui)(LtG +A!jcLxgWeYx_IwKE^N@!##bCqb#!obbU|}-X=iS2Wo~p*Wp-s@Y-MCbVRT_*J=2M>OG#EL&$!MwbxlKQXhhr5^*YH=BF-=cyOsxg-xp3{ZDnLeX=Q9=MR;^&ZgXjGZd7@2WojqNGni@3 +I1`#=@B*&Pey3`CO&rf#AhTxn#4xXdr3pc9V`y)3Q)P5JaPGN0jWJYOaY-C4lZ(?C=Q*>c;WmI`^Wp(W({yb2RgQ&qroX$3|s~68cgLoKb6;WMPYGO<*F$_m# +Ze??6b4g}lV`YR_W(N=-6P0*Ns+&hQQu{9Qsc78(()~0WKn7PS!o2w>NdhVC3z)=0wst +2~%}&aBN9*Wo?uk?`6hkSR^JNLF;fotFYyGgElEner?Qj-*6=+=BfxyZ)9m^X=QSmA}Fy@mepYsm-R}r +$$+zarmRet52gKjQ(+a4Wz=vOPGN0jWJYOaY-B-mb7^O8ZDnqBRC#b^qTpH7(Xh=OrK%E4t`xv**_;Yj +PG|`q@y<~A1W*K^3RH4+b978)c4ch6frw&K4w%I2J!>5*n2+UEn$VY06ag%An>_FbOoG7@PGN0jWJYOa +Y-CMkbYWC^aAm`1<%~T%0%0eh&Q^)o89Ex~PX5eq7+-P0pRHy9#PwIZe?UiW?^Gx-lbDNIQZ_{4<;}`36;?^R7~Wv@1sJ259FP5 +Q%9;+2~TiWX>@L7b93U<6;Kh;hPv9L38+j;K}xwT<$*JN%D`Il^nAqV=^+V2Z*FvDZgfdx^r+Y1he#5T +tArYvt)_akNwnJf0mUyK#h3u%@yIS*8BcX|aCLM+b8~5DZf#|5bXIR^WK(oubY%lmbYuwtCxp?AYYxUd +uU{DdG`^>&S@S1XLTY^Y?LL}v9ZWWu2|;XdXkkNPaC1n$BNr;@ghiU?gEXK9KMDE{F?;HZBRuDVqlk6q +mbeZmb;*F>vukd;=m`ygb@x#_>`RmOO$0)3Z)|2*aM+Gq(Fu_0 +Ocz)^+@GUUoV7w&pu=F9->y0X3z7m=HF#-wX0mI#UQqw(qY;tp7Zc6+Qb4G4KrzO(t)@DpIt)Q@6JWikDr@YkEAs#9)9JJvRH-Qc7Q2s%Kf+=VCyOABEU3kOtrQ)O*QWJFFoaz*WZ +Z5##rf6bm&7qffY6*N`B##bI~HzDmr7z##dWo%?qWo=1hQx*t>6v={gsJ=SZlTl1iF5eQ8IAl(q%E@>S +o406W2vm7+WlmvjWn_%h53p;7sgGx&z)8&prN#D&cR=tS@df05SQ3Z*PZCvbZeeX@WJYOaY-Dp&Wo=1h +YXqYdo~D%m7H6OD0<^0n_2##VWXRdjy=DB@qgYOj1yf~hNo0M=LMPN>0NEy%g(UCHeUkYj{YR7-159lq +XIqm$}teZO^;JC(UrZ-Ks{e+7M1*ZDnLeX=Q9=b5mt)No1EHgR0RSPeIWLGZ_*YTjUMn3>33lep74@ +i%V@}#Ze4JZgp)|VRC6;+#Z*Ep$a%o|1baPW>ZAoPPfv$so3kRF1 +PV2}fOp_vjQ6FdFHId|V +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 +m9OC!w7#?l6>v|4>O&vPv+=S{uLVNP~VnF~b? +WpjwG2AHk4+Bm{3x%H=p>4!*u&nOG#EL&$!Mwbx|8CsHoVw9(Wo7%9-WJvTObEZdv#L1H8z^x8?(TleIk>g)RqK0VQ|M +wn6X+txo3vSYd;;z)HQ~0$c*&W;Bo|b*QM=x*m8M0m_->$g*qw@ori7{{y_p#kc0*B=J<^fhb_$J_#H{ +vt~j#Am{KUpb)2xP;G^?36cB&0000000030|Ns900000AWq5RDZgXjGZgT(%0^w#fkSBGhsMxw5cp3r9 +ndQi`YyI(VS@-_~yvW73=9S3idLDIRU(}XWLTZugenOC;Z(5k~zEJnJiX;;E#RB1GG>|8CsHoVw9(Wo7 +%9-WJvTObEZdv#L1H8z^x8}nE^3@L7b8}^L015)(W;Bo|b*QM=x*m8M0m_->$g*qw@ori7{{y_p#kb~(Ygi@C#*klFTE}3hP#3Wm +ki}o*nL&Ed10e7tM;q}1N0|@+=y=Q>v|4>O&vPv+=S{uLVNP~VnF~b?WpjwGUNH8E>xBrIwS50cCx~Y4 +>vpbO6eBrP2Wxp8;c>|H0000000000|NsC0000003t@D0VPj}*Wo~qH015)(W;Bo|b*QM=x*m8M0m_-> +$g*qw@ori7{{y_p#kb~!aSf9!PV~dK2uo>;u!nFdemP_$e?^hl+JkM;eY!XR2mk;;0000000000|Ns90 +000000000000000|Nj60000003v*>-a%FT=WnpY{00{!&W;Bo|b*QM=x*m8M0m_->$g*qw@ori7{{y_p +#kb~Z4!V_T!KNI`QJ|h6;Zj^jB$MPK+?7Lu3>C`4HLtfv$so3kRF1PV2}fOp_vjQ6FdFHId|R2XhQO_4{AcS-HH^7AVzASV +8M4NYxyCjU1gEwF5PXV6FZDLo1#Vec_~kix7WfVQ#Sd|CM9$^_0000000030{{R3000004b7^OD015&} +nGgWzc+4HNT75Rpb1f_9O})%vPIgY23q=iObBM0u)D=(>(T2L(qY0=?N +N0|@+=y=Q>v|4>O&vPv+=S{uLVNP~VnF~b?WpjwGh8PemXlG!~;@e)_O3H?xO^a~KWeI~0jp}x-Dk@(^ +0000000000|Nj60000002u)>eQ*>c;Wd;HXcWHEPWpi_7a{vkg;bt_DCv~W(*t#Bg8Uf0g<;b#Y{qb&D +_x}UD$i=tjiECIT&Bl;lSX#$ms8AQN7m&qYSmvW>`pkpKw6W +3FpXTpREybp!N$Rniq>g8B7tjqC|5&qz6Q-tazCB3Um~mr!r)9aR2}S000000RR90{{R30010DnZgg^C +V{~%>3IgF~G>|8CsHoVw9(Wo7%9-WJvTObEZdv#L1H8z^x8|P+EJ-@Z0;0Ob-P{Wzd?2rs)M&&=&l*}G +;Jw22Ix+z`)z@swRHXkt2Z-GcP&70000000030000000000 -----END STRICT TYPE LIB----- diff --git a/stl/RGBStorage@0.11.0.stl b/stl/RGBStorage@0.11.0.stl index 364f1d25bfb49133a192b656e7983663e0b0d9eb..bd0dcf2575c4ffbfbe1019a729228637f5d3f855 100644 GIT binary patch delta 2454 zcmZ3J`aN}mMS%NE0frY9XJofT)ta3z*42LQyZ20@Uzy)bZdcya;*ND}LGDh$B`Jyb zo-CA#Z#(yV!_vzZ8`RSxJZk0_IGpEvej<7PTEW5v96)70`RSR-ljj&HOpMT-_+M2s z&18al>53IMcF9#pF`kasXPiJS&iT2ynI)T*8Ru|Ke#L!Y z@)e%1n}6|gvS{&}q?<%t{bO9Rg*oii*N%b-zjx)l^wN!vnW)9MFL63oNKs;5ab`(o ze%@qW6@|%4Lf5qpGk&@<`=*!WU;AbMgk1!}olh0t{vE()x&80q^0-kW;ej2ejPvF+Ckut=A5<3zEbk4-ZQaZ{@s9w)4yV$*l$_Mf zMxyPE^?dtxytPQmThhGC`nkkXf7H{DHz@2E?N*(7g!*twA_JhLP(wYWGSzxW%s z@+|RgCrKZ{ZHrurZI`gStXWer<2zT0$lT>dDW!!lrT#@J&|ubLU+%ab#G~~y~U4r zxB1l!95|<5G!F53vibdDr$+uKbBlxBSA}u<7eJl0SyXNti^4+!aWk1w%V4s!vJhc~ zzRJpk6@g4UpsY(+A+L%KVMPH#3R-OG;80-TVj}33mBI?qj2SH3Be~8m)XWo>dVR!Z z?z=W&9xM3jRZBwxZ1RjFMsoP9{PbWU{@S!el#DSp|X$t5q!s zEBYs?F!{5p6k&yZQVNrO)wB``SxYEE5e~o`YN3Q9#aCUCu%ZW?3X|8Vs}rSAk+8#n z31M=Wh8j`EDFdUDU{bLcRG9o%gLCpy9f8Sgni7N!2Du$*Xa4{8YE|6&JBrW0?6(YP<8Kh0%?4B%T#|B1M=rm4;w^>EDvYzaw2eRW zmUn&I>-j&Xm(irBvSRK2l-2`}9ym6(&YKc8XSM=YNKs;5ab`(oe%|E$+y}I5=cE@W zv&)?A*?M_r-Ji`>OP;wN$n8165|HpW^&z905T|QJNh(kSPR+_)}Szuz|}36?C|g^YcoI5|c|jQwW=!uc4sDmY$QJl$gW7MOgVA6-9+R zyN}FfJAJ(AVa%FJsfqU=bas7ImUwb#V{o}?YH0GF1(Rh}r4$Gy#K{$M3X{uKWeF?X zqG~}{5s#V`VMS?bUWtUJ$k(D__Hn zS|;f!O!m-JBlQWfdliXcLi2{j?Pc zr>lN#Yr+l#1_lv+OcYg^?5!h7*v?#WaLGZ?r}cXK<0QnS=cC(wo=R3}f)G?FF4CJhBc rMzwW@xhwlOXD%^`Z#|`9CXo@lKVSYqRZ36P-R(IXD@@=~4`l!VhPs8y diff --git a/stl/RGBStorage@0.11.0.sty b/stl/RGBStorage@0.11.0.sty index a85f6d75..340db4ce 100644 --- a/stl/RGBStorage@0.11.0.sty +++ b/stl/RGBStorage@0.11.0.sty @@ -1,5 +1,5 @@ {- - Id: stl:aHl1Tsu8-RxChWD4-DXqrqOO-qFlJXsK-0uWYfDv-H5BgmxE#plastic-shelter-podium + Id: stl:Srtqau4!-KXSB1G8-CSroocF-8N2oTi4-L5c2IQk-y$OJQz0#jeep-freedom-student Name: RGBStorage Version: 0.11.0 Description: RGB storage library @@ -28,6 +28,54 @@ import StrictTypes#century-comrade-chess use UnionVariantsSemId#santana-address-pepper use TypeSystem#adrian-boris-sponsor +import RGBStd#forget-radar-macro + use GlobalOut#subway-virtual-verbal + use PubWitness#paper-visa-storm + use ContentRef#polo-ramirez-parker + use SigBlob#insect-cello-avalon + use AnnotationName#domino-waiter-orlando + use TransitionIface#axiom-parker-pyramid + use NamedFieldTransitionType#express-brush-desire + use ExtensionIface#model-ramirez-mentor + use Iface#violin-student-system + use IfaceId#nova-cola-carbon + use ValencyIface#buzzer-holiday-fiber + use Annotations#spend-linda-romeo + use AssignIface#fractal-baker-outside + use VerNo#textile-next-stretch + use NamedFieldValencyType#invest-apollo-inca + use ImplId#seminar-data-table + use SupplSub#canoe-denmark-short + use SealWitness#vanilla-crimson-zero + use OutputAssignmentRevealedData#dinner-honey-saturn + use Supplement#caviar-zebra-precise + use SupplId#pilot-claudia-minute + use OutputAssignmentRevealedAttach#miami-diagram-mineral + use NamedFieldExtensionType#tuna-archer-melon + use AnchorSet#shadow-dominic-pencil + use NamedFieldGlobalStateType#museum-ohio-arizona + use GenesisIface#rocket-paradox-press + use IfaceImpl#permit-learn-samba + use ContentSigs#oval-sister-triton + use SupplItem#jargon-orchid-forget + use Modifier#saturn-escort-jordan + use NamedFieldAssignmentType#origin-caramel-flipper + use TrustLevel#cobra-script-albino + use NamedFieldMetaType#prefix-carmen-artist + use NamedVariantu8#star-pilgrim-pilgrim + use GlobalIface#concert-combat-charm + use SchemaIfaces#fossil-nepal-airline + use OutputAssignmentRevealedValue#aspect-caramel-diana + use SupplMap#sailor-observe-bundle + use OwnedIface#delphi-athlete-fresh + use OpWitness#jargon-quota-lola + use ContentId#scarlet-portal-office + use OutputAssignmentVoidState#mars-alabama-public + +import RGBLogic#pioneer-gong-smoke + use WitnessPos#snow-local-tonight + use WitnessOrd#exhibit-erosion-dallas + import AluVM#congo-archive-folio use Lib#gate-biology-optimal use LibSite#ultra-grace-message @@ -51,11 +99,18 @@ import BPCore#garbo-radius-peru use BlindSealTxid#media-judge-anita use TxPtr#italian-july-eddie -import RGBLogic#lobster-dilemma-famous - use TxPos#john-invest-weekend - use TxOrd#sonar-nissan-clinic +import Std#ralph-blue-lucky + use AlphaCaps#picnic-soprano-aurora + use AsciiPrintable#ultra-sunset-format + use Bool#oxygen-complex-duet + use U5#orbit-graph-sonic + use AlphaNumDash#sponsor-snake-nice + use AlphaCapsNum#aladdin-zebra-marble + use AlphaNumLodash#percent-bingo-caesar + use AlphaCapsLodash#duet-hammer-labor + use AlphaSmallLodash#pioneer-eagle-spell -import RGBCommit#orbit-airport-voice +import RGBCommit#miranda-blue-promise use ExtensionSchema#active-eddie-empty use BundleId#carmen-farmer-diesel use AttachState#lady-japan-fiesta @@ -68,18 +123,15 @@ import RGBCommit#orbit-airport-voice use AssetTags#anita-nice-deliver use VoidState#email-snow-safari use DataState#short-noise-postal - use Transition#company-combat-disney use TransitionType#picture-reflex-brigade use Occurrences#source-olga-mirage use AssignVoidStateBlindSealTxPtr#profit-granite-fuji use Schema#vocal-hammer-logic - use Extension#bandit-consul-empire use MediaType#isabel-heaven-north use AssignmentsBlindSealTxPtr#village-result-bahama use ValencyType#aloha-dublin-brush use PedersenCommitment#pupil-scale-jerome use ConcealedFungible#story-shrink-aloha - use TransitionBundle#method-match-logic use GlobalStateSchema#silk-college-august use AssignRevealedAttachBlindSealTxid#local-memo-modern use TypedAssignsBlindSealTxid#garlic-project-zigzag @@ -100,12 +152,14 @@ import RGBCommit#orbit-airport-voice use XChainBlindSealTxPtr#senator-limbo-raymond use Opout#yoga-samba-karma use AssignVoidStateBlindSealTxid#senior-beyond-cement + use Transition#decimal-motel-echo use SchemaId#ramirez-patron-simon use OpId#picnic-single-gloria use ContractId#uniform-welcome-papa use FungibleState#guide-poker-coconut use Inputs#herman-liberal-galaxy use Identity#smart-pioneer-nominal + use Extension#wheel-holiday-promo use AltLayer1#edison-survive-nitro use AssetTag#slang-amber-club use XChainExplicitSealTxid#acid-nepal-melon @@ -118,6 +172,7 @@ import RGBCommit#orbit-airport-voice use Valencies#light-letter-comet use GlobalState#stadium-barcode-bazaar use Redeemed#mile-lady-perfect + use TransitionBundle#taxi-repair-stella use RevealedAttach#slalom-phantom-voyage use Genesis#round-sound-nectar use Metadata#member-nobody-imitate @@ -127,60 +182,6 @@ import RGBCommit#orbit-airport-voice use RevealedData#olivia-copper-stamp use AssignRevealedValueBlindSealTxid#photo-jump-silicon -import RGBStd#carol-edgar-escape - use PubWitness#paper-visa-storm - use ContentRef#polo-ramirez-parker - use SigBlob#insect-cello-avalon - use AnnotationName#domino-waiter-orlando - use TransitionIface#axiom-parker-pyramid - use NamedFieldTransitionType#express-brush-desire - use ExtensionIface#model-ramirez-mentor - use Iface#violin-student-system - use IfaceId#nova-cola-carbon - use ValencyIface#buzzer-holiday-fiber - use Annotations#spend-linda-romeo - use AssignIface#fractal-baker-outside - use VerNo#textile-next-stretch - use NamedFieldValencyType#invest-apollo-inca - use ImplId#seminar-data-table - use SupplSub#canoe-denmark-short - use SealWitness#vanilla-crimson-zero - use OutputAssignmentRevealedData#dinner-honey-saturn - use Supplement#caviar-zebra-precise - use SupplId#pilot-claudia-minute - use OutputAssignmentRevealedAttach#miami-diagram-mineral - use NamedFieldExtensionType#tuna-archer-melon - use AnchorSet#shadow-dominic-pencil - use NamedFieldGlobalStateType#museum-ohio-arizona - use GenesisIface#rocket-paradox-press - use IfaceImpl#permit-learn-samba - use ContentSigs#oval-sister-triton - use SupplItem#jargon-orchid-forget - use Modifier#saturn-escort-jordan - use NamedFieldAssignmentType#origin-caramel-flipper - use TrustLevel#cobra-script-albino - use OpEl#square-panic-shoe - use NamedFieldMetaType#prefix-carmen-artist - use NamedVariantu8#star-pilgrim-pilgrim - use GlobalIface#concert-combat-charm - use SchemaIfaces#fossil-nepal-airline - use OutputAssignmentRevealedValue#aspect-caramel-diana - use SupplMap#sailor-observe-bundle - use OwnedIface#delphi-athlete-fresh - use ContentId#scarlet-portal-office - use OutputAssignmentVoidState#mars-alabama-public - -import Std#ralph-blue-lucky - use AlphaCaps#picnic-soprano-aurora - use AsciiPrintable#ultra-sunset-format - use Bool#oxygen-complex-duet - use U5#orbit-graph-sonic - use AlphaNumDash#sponsor-snake-nice - use AlphaCapsNum#aladdin-zebra-marble - use AlphaNumLodash#percent-bingo-caesar - use AlphaCapsLodash#duet-hammer-labor - use AlphaSmallLodash#pioneer-eagle-spell - import CommitVerify#tennis-peace-olympic use ProtocolId#shadow-eclipse-program use Message#druid-blitz-rover @@ -227,17 +228,17 @@ data MemContractState : schemaId RGBCommit.SchemaId , data {RGBStd.OutputAssignmentRevealedData ^ ..0xffffffff} , attach {RGBStd.OutputAssignmentRevealedAttach ^ ..0xffffffff} -@mnemonic(numeric-plasma-tunnel) -data MemGlobalState : known {RGBStd.OpEl -> ^ ..0xffffffff RGBCommit.DataState}, limit U24 +@mnemonic(holiday-ivory-cartel) +data MemGlobalState : known {RGBStd.GlobalOut -> ^ ..0xffffffff RGBCommit.DataState}, limit U24 -@mnemonic(flower-unicorn-bazaar) +@mnemonic(origin-flame-actor) data MemIndex : opBundleIndex {RGBCommit.OpId -> ^ ..0xffffff RGBCommit.BundleId} , bundleContractIndex {RGBCommit.BundleId -> ^ ..0xffffff RGBCommit.ContractId} - , bundleWitnessIndex {RGBCommit.BundleId -> ^ ..0xffffff RGBCommit.XChainTxid} + , bundleWitnessIndex {RGBCommit.BundleId -> ^ ..0xffffff {RGBCommit.XChainTxid ^ ..0xff}} , contractIndex {RGBCommit.ContractId -> ^ ..0xff ContractIndex} , terminalIndex {RGBCommit.XChainSecretSeal -> ^ ..0xffffff RGBCommit.Opout} -@mnemonic(candle-john-grid) +@mnemonic(circle-comedy-virgo) data MemStash : schemata {RGBCommit.SchemaId -> ^ ..0xff RGBStd.SchemaIfaces} , ifaces {RGBStd.IfaceId -> ^ ..0xff RGBStd.Iface} , geneses {RGBCommit.ContractId -> ^ ..0xff RGBCommit.Genesis} @@ -252,7 +253,7 @@ data MemStash : schemata {RGBCommit.SchemaId -> ^ ..0xff RGBStd.SchemaI , libs {AluVM.LibId -> AluVM.Lib} , sigs {RGBStd.ContentId -> RGBStd.ContentSigs} -@mnemonic(maximum-blonde-herbert) -data MemState : witnesses {RGBCommit.XChainTxid -> ^ ..0xffffffff RGBLogic.TxOrd}, contracts {RGBCommit.ContractId -> ^ ..0xff MemContractState} +@mnemonic(opinion-romeo-hunter) +data MemState : witnesses {RGBCommit.XChainTxid -> ^ ..0xffffffff RGBLogic.WitnessOrd}, contracts {RGBCommit.ContractId -> ^ ..0xff MemContractState} diff --git a/stl/Transfer.vesper b/stl/Transfer.vesper index db12bbb4..13012612 100644 --- a/stl/Transfer.vesper +++ b/stl/Transfer.vesper @@ -18,8 +18,9 @@ ConsignmentId commitment hasher=SHA256 tagged=urn:lnp-bp:rgb:consignment#2024-03 DiscloseHash element DiscloseHash set len=0..MAX32 DiscloseHash element - TerminalDisclose set len=0..MAX16 - TerminalDisclose element + XChainSecretSeal map len=0..MAX16 + BundleId mapKey + XChainSecretSeal mapValue AttachId set len=0..MAX16 AttachId element SupplId set len=0..MAX8 @@ -35,8 +36,9 @@ Consignmenttrue rec version enum ContainerVer v2=2 transfer enum Bool false=0 true=1 terminals map len=0..MAX16 - value rec Terminal - seals set len=0..MAX16 + value union XChainSecretSeal + bitcoin bytes len=32 wrapped aka=SecretSeal tag=0 + liquid bytes len=32 wrapped aka=SecretSeal tag=1 genesis rec Genesis ffv is U16 aka=Ffv schemaId bytes len=32 aka=SchemaId @@ -258,6 +260,7 @@ Consignmenttrue rec Extension rec ffv is U16 aka=Ffv contractId bytes len=32 aka=ContractId + nonce is U8 extensionType is U16 aka=ExtensionType metadata map len=0..MAX8 aka=Metadata key is U16 aka=MetaType @@ -494,6 +497,7 @@ Consignmenttrue rec value rec Transition ffv is U16 aka=Ffv contractId bytes len=32 aka=ContractId + nonce is U8 transitionType is U16 aka=TransitionType metadata map len=0..MAX8 aka=Metadata key is U16 aka=MetaType @@ -759,6 +763,7 @@ Consignmenttrue rec value rec Transition ffv is U16 aka=Ffv contractId bytes len=32 aka=ContractId + nonce is U8 transitionType is U16 aka=TransitionType metadata map len=0..MAX8 aka=Metadata key is U16 aka=MetaType @@ -1028,6 +1033,7 @@ Consignmenttrue rec value rec Transition ffv is U16 aka=Ffv contractId bytes len=32 aka=ContractId + nonce is U8 transitionType is U16 aka=TransitionType metadata map len=0..MAX8 aka=Metadata key is U16 aka=MetaType @@ -1292,6 +1298,7 @@ Consignmenttrue rec value rec Transition ffv is U16 aka=Ffv contractId bytes len=32 aka=ContractId + nonce is U8 transitionType is U16 aka=TransitionType metadata map len=0..MAX8 aka=Metadata key is U16 aka=MetaType From bb6ff8f74e97bf8b3b2f6e744c7f6caed7b1c49c Mon Sep 17 00:00:00 2001 From: Dr Maxim Orlovsky Date: Fri, 2 Aug 2024 10:22:00 +0200 Subject: [PATCH 2/4] persistence: make filename optional in mem-based structures --- src/persistence/fs.rs | 4 +-- src/persistence/memory.rs | 51 +++++++++++++++++++++------------------ 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/persistence/fs.rs b/src/persistence/fs.rs index a58283b0..e952f58e 100644 --- a/src/persistence/fs.rs +++ b/src/persistence/fs.rs @@ -28,8 +28,8 @@ pub trait FsStored: Sized { fn load(path: impl ToOwned) -> Result; fn is_dirty(&self) -> bool; - fn filename(&self) -> &Path; - fn set_filename(&mut self, filename: impl ToOwned) -> PathBuf; + fn filename(&self) -> Option<&Path>; + fn set_filename(&mut self, filename: impl ToOwned) -> Option; fn store(&self) -> Result<(), SerializeError>; } diff --git a/src/persistence/memory.rs b/src/persistence/memory.rs index ef6086f6..1b95ebed 100644 --- a/src/persistence/memory.rs +++ b/src/persistence/memory.rs @@ -82,7 +82,7 @@ pub struct MemStash { dirty: bool, #[cfg(feature = "fs")] #[strict_type(skip)] - filename: PathBuf, + filename: Option, schemata: TinyOrdMap, ifaces: TinyOrdMap, @@ -443,7 +443,7 @@ pub struct MemState { dirty: bool, #[cfg(feature = "fs")] #[strict_type(skip)] - filename: PathBuf, + filename: Option, witnesses: LargeOrdMap, contracts: TinyOrdMap, @@ -1141,7 +1141,7 @@ pub struct MemIndex { dirty: bool, #[cfg(feature = "fs")] #[strict_type(skip)] - filename: PathBuf, + filename: Option, op_bundle_index: MediumOrdMap, bundle_contract_index: MediumOrdMap, @@ -1420,7 +1420,7 @@ mod fs { fn new(filename: impl ToOwned) -> Self { Self { dirty: true, - filename: filename.to_owned(), + filename: Some(filename.to_owned()), ..default!() } } @@ -1434,21 +1434,22 @@ mod fs { fn is_dirty(&self) -> bool { self.dirty } - fn filename(&self) -> &Path { &self.filename } + fn filename(&self) -> Option<&Path> { self.filename.as_deref() } - fn set_filename(&mut self, filename: impl ToOwned) -> PathBuf { + fn set_filename(&mut self, filename: impl ToOwned) -> Option { let prev = self.filename.to_owned(); - self.filename = filename.to_owned(); + self.filename = Some(filename.to_owned()); self.dirty = self.filename != prev; prev } fn store(&self) -> Result<(), SerializeError> { if self.is_dirty() { - self.strict_serialize_to_file::(&self.filename()) - } else { - Ok(()) + if let Some(filename) = self.filename() { + return self.strict_serialize_to_file::(filename); + } } + Ok(()) } } @@ -1456,7 +1457,7 @@ mod fs { fn new(filename: impl ToOwned) -> Self { Self { dirty: true, - filename: filename.to_owned(), + filename: Some(filename.to_owned()), ..default!() } } @@ -1470,21 +1471,22 @@ mod fs { fn is_dirty(&self) -> bool { self.dirty } - fn filename(&self) -> &Path { &self.filename } + fn filename(&self) -> Option<&Path> { self.filename.as_deref() } - fn set_filename(&mut self, filename: impl ToOwned) -> PathBuf { + fn set_filename(&mut self, filename: impl ToOwned) -> Option { let prev = self.filename.to_owned(); - self.filename = filename.to_owned(); + self.filename = Some(filename.to_owned()); self.dirty = self.filename != prev; prev } fn store(&self) -> Result<(), SerializeError> { if self.is_dirty() { - self.strict_serialize_to_file::(&self.filename()) - } else { - Ok(()) + if let Some(filename) = self.filename() { + return self.strict_serialize_to_file::(filename); + } } + Ok(()) } } @@ -1492,7 +1494,7 @@ mod fs { fn new(filename: impl ToOwned) -> Self { Self { dirty: true, - filename: filename.to_owned(), + filename: Some(filename.to_owned()), ..default!() } } @@ -1506,21 +1508,22 @@ mod fs { fn is_dirty(&self) -> bool { self.dirty } - fn filename(&self) -> &Path { &self.filename } + fn filename(&self) -> Option<&Path> { self.filename.as_deref() } - fn set_filename(&mut self, filename: impl ToOwned) -> PathBuf { + fn set_filename(&mut self, filename: impl ToOwned) -> Option { let prev = self.filename.to_owned(); - self.filename = filename.to_owned(); + self.filename = Some(filename.to_owned()); self.dirty = self.filename != prev; prev } fn store(&self) -> Result<(), SerializeError> { if self.is_dirty() { - self.strict_serialize_to_file::(&self.filename()) - } else { - Ok(()) + if let Some(filename) = self.filename() { + return self.strict_serialize_to_file::(filename); + } } + Ok(()) } } } From 3aaafcbe1f07088fb052dffcad76593b499013c5 Mon Sep 17 00:00:00 2001 From: Dr Maxim Orlovsky Date: Fri, 2 Aug 2024 10:32:53 +0200 Subject: [PATCH 3/4] persistence: use explicit `in_memory` method to construct mem-structs with no file storage --- src/persistence/memory.rs | 71 ++++++++++++++++++++++++++++++++------- src/persistence/stock.rs | 21 ++++++------ 2 files changed, 70 insertions(+), 22 deletions(-) diff --git a/src/persistence/memory.rs b/src/persistence/memory.rs index 1b95ebed..5afa9287 100644 --- a/src/persistence/memory.rs +++ b/src/persistence/memory.rs @@ -73,10 +73,10 @@ use crate::LIB_NAME_RGB_STORAGE; ////////// /// Hoard is an in-memory stash useful for WASM implementations. -#[derive(Getters, Clone, Debug, Default)] +#[derive(Getters, Clone, Debug)] #[getter(prefix = "debug_")] -#[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB_STORAGE)] +#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] +#[strict_type(lib = LIB_NAME_RGB_STORAGE, dumb = Self::in_memory())] pub struct MemStash { #[strict_type(skip)] dirty: bool, @@ -102,6 +102,28 @@ pub struct MemStash { impl StrictSerialize for MemStash {} impl StrictDeserialize for MemStash {} +impl MemStash { + pub fn in_memory() -> Self { + Self { + dirty: false, + filename: None, + schemata: empty!(), + ifaces: empty!(), + geneses: empty!(), + suppl: empty!(), + bundles: empty!(), + extensions: empty!(), + witnesses: empty!(), + attachments: empty!(), + secret_seals: empty!(), + type_system: none!(), + identities: empty!(), + libs: empty!(), + sigs: empty!(), + } + } +} + impl StoreTransaction for MemStash { type TransactionErr = SerializeError; @@ -434,10 +456,10 @@ impl StashWriteProvider for MemStash { // STATE ////////// -#[derive(Getters, Clone, Debug, Default)] +#[derive(Getters, Clone, Debug)] #[getter(prefix = "debug_")] -#[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB_STORAGE)] +#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] +#[strict_type(lib = LIB_NAME_RGB_STORAGE, dumb = Self::in_memory())] pub struct MemState { #[strict_type(skip)] dirty: bool, @@ -452,6 +474,17 @@ pub struct MemState { impl StrictSerialize for MemState {} impl StrictDeserialize for MemState {} +impl MemState { + pub fn in_memory() -> Self { + Self { + dirty: false, + filename: None, + witnesses: empty!(), + contracts: empty!(), + } + } +} + impl StoreTransaction for MemState { type TransactionErr = SerializeError; @@ -1132,10 +1165,10 @@ pub struct ContractIndex { outpoint_opouts: MediumOrdMap>, } -#[derive(Getters, Clone, Debug, Default)] +#[derive(Getters, Clone, Debug)] #[getter(prefix = "debug_")] -#[derive(StrictType, StrictEncode, StrictDecode)] -#[strict_type(lib = LIB_NAME_RGB_STORAGE)] +#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)] +#[strict_type(lib = LIB_NAME_RGB_STORAGE, dumb = Self::in_memory())] pub struct MemIndex { #[strict_type(skip)] dirty: bool, @@ -1153,6 +1186,20 @@ pub struct MemIndex { impl StrictSerialize for MemIndex {} impl StrictDeserialize for MemIndex {} +impl MemIndex { + pub fn in_memory() -> Self { + Self { + dirty: false, + filename: None, + op_bundle_index: empty!(), + bundle_contract_index: empty!(), + bundle_witness_index: empty!(), + contract_index: empty!(), + terminal_index: empty!(), + } + } +} + impl StoreTransaction for MemIndex { type TransactionErr = SerializeError; @@ -1421,7 +1468,7 @@ mod fs { Self { dirty: true, filename: Some(filename.to_owned()), - ..default!() + ..Self::in_memory() } } @@ -1458,7 +1505,7 @@ mod fs { Self { dirty: true, filename: Some(filename.to_owned()), - ..default!() + ..Self::in_memory() } } @@ -1495,7 +1542,7 @@ mod fs { Self { dirty: true, filename: Some(filename.to_owned()), - ..default!() + ..Self::in_memory() } } diff --git a/src/persistence/stock.rs b/src/persistence/stock.rs index d4723855..008c99d5 100644 --- a/src/persistence/stock.rs +++ b/src/persistence/stock.rs @@ -368,7 +368,10 @@ where } impl Stock { - pub fn in_memory() -> Self { Self::default() } + #[inline] + pub fn in_memory() -> Self { + Self::with(MemStash::in_memory(), MemState::in_memory(), MemIndex::in_memory()) + } } #[cfg(feature = "fs")] @@ -1306,16 +1309,14 @@ mod test { #[test] fn test_consign() { - let mut stock = Stock::::default(); + let mut stock = Stock::in_memory(); let seal = XChain::with( rgbcore::Layer1::Bitcoin, GraphSeal::new_random_vout(bp::dbc::Method::OpretFirst, Vout::from_u32(0)), ); let secret_seal = seal.conceal(); - stock - .store_secret_seal(seal) - .expect_err("we can't store to FS and fail here since we have not filename assigned"); + stock.store_secret_seal(seal).unwrap(); let contract_id = ContractId::from_baid64_str("rgb:qFuT6DN8-9AuO95M-7R8R8Mc-AZvs7zG-obum1Va-BRnweKk") .unwrap(); @@ -1326,7 +1327,7 @@ mod test { #[test] fn test_export_contract() { - let stock = Stock::::default(); + let stock = Stock::in_memory(); let contract_id = ContractId::from_baid64_str("rgb:qFuT6DN8-9AuO95M-7R8R8Mc-AZvs7zG-obum1Va-BRnweKk") .unwrap(); @@ -1337,7 +1338,7 @@ mod test { #[test] fn test_export_schema() { - let stock = Stock::::default(); + let stock = Stock::in_memory(); let hasher = Sha256::default(); let schema_id = SchemaId::from(hasher); if let Ok(schema) = stock.export_schema(schema_id) { @@ -1347,7 +1348,7 @@ mod test { #[test] fn test_blank_builder_ifaceid() { - let stock = Stock::::default(); + let stock = Stock::in_memory(); let hasher = Sha256::default(); let iface_id = IfaceId::from(hasher.clone()); let bytes_hash = hasher.finish(); @@ -1359,7 +1360,7 @@ mod test { #[test] fn test_blank_builder_ifacename() { - let stock = Stock::::default(); + let stock = Stock::in_memory(); let hasher = Sha256::default(); let bytes_hash = hasher.finish(); let contract_id = ContractId::copy_from_slice(bytes_hash).unwrap(); @@ -1372,7 +1373,7 @@ mod test { #[test] fn test_transition_builder() { - let stock = Stock::::default(); + let stock = Stock::in_memory(); let hasher = Sha256::default(); let iface_id = IfaceId::from(hasher.clone()); From 02d831c7bbaa9b8b13a1487f77a986e1d37532b0 Mon Sep 17 00:00:00 2001 From: Dr Maxim Orlovsky Date: Fri, 2 Aug 2024 15:41:58 +0200 Subject: [PATCH 4/4] persistence: fix feature gates in memory struct initializers --- src/persistence/memory.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/persistence/memory.rs b/src/persistence/memory.rs index 5afa9287..90b5b6db 100644 --- a/src/persistence/memory.rs +++ b/src/persistence/memory.rs @@ -106,6 +106,7 @@ impl MemStash { pub fn in_memory() -> Self { Self { dirty: false, + #[cfg(feature = "fs")] filename: None, schemata: empty!(), ifaces: empty!(), @@ -478,6 +479,7 @@ impl MemState { pub fn in_memory() -> Self { Self { dirty: false, + #[cfg(feature = "fs")] filename: None, witnesses: empty!(), contracts: empty!(), @@ -1190,6 +1192,7 @@ impl MemIndex { pub fn in_memory() -> Self { Self { dirty: false, + #[cfg(feature = "fs")] filename: None, op_bundle_index: empty!(), bundle_contract_index: empty!(),