Skip to content

Commit 2e01d87

Browse files
authored
Merge pull request #220 from RGB-WG/armor
Use new ASCII armoring technique
2 parents 07f0781 + 5232162 commit 2e01d87

File tree

10 files changed

+270
-215
lines changed

10 files changed

+270
-215
lines changed

Cargo.lock

Lines changed: 26 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ required-features = ["stl"]
2323

2424
[dependencies]
2525
amplify = { version = "~4.6.0", features = ["rand"] }
26+
ascii-armor = "0.2.0"
2627
strict_encoding = "~2.7.0-beta.1"
27-
strict_types = "~2.7.0-beta.1"
28-
aluvm = { version = "~0.11.0-beta.4", features = ["std"] }
28+
strict_types = { version = "~2.7.0-beta.2", features = ["armor"] }
29+
aluvm = { version = "~0.11.0-beta.4", features = ["std", "ascii-armor"] }
2930
commit_verify = { version = "~0.11.0-beta.4", features = ["rand", "derive"] }
3031
single_use_seals = "~0.11.0-beta.4"
3132
bp-core = { version = "~0.11.0-beta.4" }
@@ -59,4 +60,8 @@ getrandom = { version = "0.2", features = ["js"] }
5960
wasm-bindgen-test = "0.3"
6061

6162
[package.metadata.docs.rs]
62-
features = [ "all" ]
63+
features = ["all"]
64+
65+
[patch.crates-io]
66+
commit_verify = { git = "https://github.com/LNP-BP/client_side_validation", branch = "master" }
67+
bp-core = { git = "https://github.com/BP-WG/bp-core", branch = "master" }

src/schema/schema.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use std::str::FromStr;
2626

2727
use amplify::confinement::{TinyOrdMap, TinyOrdSet};
2828
use amplify::{ByteArray, Bytes32};
29+
use armor::StrictArmor;
2930
use baid58::{Baid58ParseError, Chunking, FromBaid58, ToBaid58, CHUNKING_32};
3031
use commit_verify::{CommitEncode, CommitEngine, CommitId, CommitmentId, DigestExt, Sha256};
3132
use strict_encoding::{StrictDecode, StrictDeserialize, StrictEncode, StrictSerialize, StrictType};
@@ -227,6 +228,13 @@ impl<Root: SchemaRoot> Schema<Root> {
227228
}
228229
}
229230

231+
impl<Root: SchemaRoot> StrictArmor for Schema<Root> {
232+
type Id = SchemaId;
233+
const PLATE_TITLE: &'static str = "RGB SCHEMA";
234+
235+
fn armor_id(&self) -> Self::Id { self.schema_id() }
236+
}
237+
230238
#[cfg(test)]
231239
mod test {
232240
use strict_encoding::StrictDumb;

src/schema/script.rs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,23 +105,43 @@ impl Default for Types {
105105
fn default() -> Self { Types::Strict(none!()) }
106106
}
107107

108+
impl Types {
109+
pub fn as_strict(&self) -> &TypeSystem {
110+
match self {
111+
Types::Strict(ts) => ts,
112+
}
113+
}
114+
}
115+
108116
#[cfg(feature = "serde")]
109117
mod _serde {
118+
use armor::AsciiArmor;
119+
use serde_crate::de::Error;
110120
use serde_crate::{Deserialize, Deserializer, Serialize, Serializer};
111121

112122
use super::*;
113123

114124
impl Serialize for Types {
115125
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
116126
where S: Serializer {
117-
serializer.serialize_str(&self.to_string())
127+
if serializer.is_human_readable() {
128+
serializer.serialize_str(&self.as_strict().to_ascii_armored_string())
129+
} else {
130+
self.as_strict().serialize(serializer)
131+
}
118132
}
119133
}
120134

121135
impl<'de> Deserialize<'de> for Types {
122-
fn deserialize<D>(_deserializer: D) -> Result<Self, D::Error>
136+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
123137
where D: Deserializer<'de> {
124-
todo!()
138+
if deserializer.is_human_readable() {
139+
let s = String::deserialize(deserializer)?;
140+
let sys = TypeSystem::from_ascii_armored_str(&s).map_err(D::Error::custom)?;
141+
Ok(Types::Strict(sys))
142+
} else {
143+
Ok(Types::Strict(TypeSystem::deserialize(deserializer)?))
144+
}
125145
}
126146
}
127147
}

src/stl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use crate::{
3434

3535
/// Strict types id for the library providing data types for RGB consensus.
3636
pub const LIB_ID_RGB: &str =
37-
"urn:ubideco:stl:BSZqoDzjgGJxgRUwLUEJ7FZC74RV87ighGBsbx59AUPa#package-rapid-record";
37+
"urn:ubideco:stl:6NAFZspAZ14Y1NynHeQBJVNqep4arKkKx8zchhHrESvr#airport-border-match";
3838

3939
fn _rgb_core_stl() -> Result<TypeLib, CompileError> {
4040
LibBuilder::new(libname!(LIB_NAME_RGB), tiny_bset! {

src/vm/script.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -133,26 +133,35 @@ pub struct AluLib(pub aluvm::library::Lib);
133133

134134
#[cfg(feature = "serde")]
135135
mod _serde {
136-
use serde_crate::ser::Error;
136+
use aluvm::library::Lib;
137+
use armor::AsciiArmor;
138+
use serde_crate::de::Error;
137139
use serde_crate::{Deserialize, Deserializer, Serialize, Serializer};
138140

139141
use super::*;
140142

141143
impl Serialize for AluLib {
142144
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
143145
where S: Serializer {
144-
let mut buf = Vec::<u8>::new();
145-
self.print_disassemble::<RgbIsa>(&mut buf)
146-
.map_err(S::Error::custom)?;
147-
let s = String::from_utf8(buf).map_err(S::Error::custom)?;
148-
serializer.serialize_str(&s)
146+
if serializer.is_human_readable() {
147+
serializer.serialize_str(&self.0.to_ascii_armored_string())
148+
} else {
149+
Serialize::serialize(&self.0, serializer)
150+
}
149151
}
150152
}
151153

152154
impl<'de> Deserialize<'de> for AluLib {
153-
fn deserialize<D>(_deserializer: D) -> Result<Self, D::Error>
155+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
154156
where D: Deserializer<'de> {
155-
todo!()
157+
if deserializer.is_human_readable() {
158+
let s: String = Deserialize::deserialize(deserializer)?;
159+
let lib = Lib::from_ascii_armored_str(&s).map_err(D::Error::custom)?;
160+
Ok(lib.into())
161+
} else {
162+
let lib: Lib = Deserialize::deserialize(deserializer)?;
163+
Ok(lib.into())
164+
}
156165
}
157166
}
158167
}

0 commit comments

Comments
 (0)