diff --git a/Cargo.toml b/Cargo.toml index c59930b5..224dd216 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -122,6 +122,7 @@ wasm-bindgen-test = "0.3.36" [build-dependencies] anyhow = "1.0.71" +blake3 = "1.4.1" rgb-std = { version = "0.10.2" } serde = "1.0.164" toml = { version = "0.7.5", features = ["preserve_order"] } diff --git a/build.rs b/build.rs index e89c2692..9922d497 100644 --- a/build.rs +++ b/build.rs @@ -30,7 +30,22 @@ const LIB_ID_RGB_CONTRACT_COMMENT: &str = const LIB_ID_RGB_STD_COMMENT: &str = "[LIB_ID_RGB_STD]\n# Not consensus-breaking: If changed, only stash and consignments must be updated. No reiussance or migration necessary."; +type HashNameMap = BTreeMap; + +#[allow(non_snake_case)] +#[derive(Deserialize, Serialize)] +struct FileHashes { + ASSETS_STOCK: HashNameMap, + ASSETS_WALLETS: HashNameMap, +} + +const FILE_HASHES_FILE: &str = "file_hashes.toml"; +const ASSETS_STOCK: &str = "bitmask-fungible_assets_stock.c15"; +const ASSETS_WALLETS: &str = "bitmask-fungible_assets_wallets.c15"; +const NETWORK: &str = "bitcoin"; // Only mainnet is tracked, no monetary incentive to upgrade testnet assets + fn main() -> Result<()> { + // lib ids const BMC_VERSION: &str = env!("CARGO_PKG_VERSION"); let toml = fs::read_to_string(LIB_IDS_FILE)?; @@ -67,5 +82,31 @@ fn main() -> Result<()> { fs::write(LIB_IDS_FILE, format!("{FILE_COMMENT}{toml}"))?; + // file hashes + let toml = fs::read_to_string(FILE_HASHES_FILE)?; + let mut doc: FileHashes = toml::from_str(&toml)?; + + let assets_stock_name = format!("{NETWORK}-{LIB_ID_RGB}-{ASSETS_STOCK}"); + let assets_wallets_name = format!("{NETWORK}-{LIB_ID_RGB}-{ASSETS_WALLETS}"); + + let assets_stock_hash = blake3::hash(assets_stock_name.as_bytes()) + .to_hex() + .to_ascii_lowercase(); + let assets_wallets_hash = blake3::hash(assets_wallets_name.as_bytes()) + .to_hex() + .to_ascii_lowercase(); + + doc.ASSETS_STOCK + .entry(assets_stock_hash) + .or_insert(assets_stock_name); + + doc.ASSETS_WALLETS + .entry(assets_wallets_hash) + .or_insert(assets_wallets_name); + + let toml = toml::to_string(&doc)?; + + fs::write(FILE_HASHES_FILE, toml)?; + Ok(()) } diff --git a/file_hashes.toml b/file_hashes.toml new file mode 100644 index 00000000..9fe904a9 --- /dev/null +++ b/file_hashes.toml @@ -0,0 +1,5 @@ +[ASSETS_STOCK] +7e9bb3bc108f2c3a3dc459f44a394db9e4071f0d61de07ece77f6145304b7630 = "bitcoin-urn:ubideco:stl:4fGZWR5mH5zZzRZ1r7CSRe776zm3hLBUngfXc4s3vm3V#saturn-flash-emerald-bitmask-fungible_assets_stock.c15" + +[ASSETS_WALLETS] +09b66ce867c9b9bd8ced2a15b112a83c753be611319c06b764a445e2c490ea15 = "bitcoin-urn:ubideco:stl:4fGZWR5mH5zZzRZ1r7CSRe776zm3hLBUngfXc4s3vm3V#saturn-flash-emerald-bitmask-fungible_assets_wallets.c15" diff --git a/src/carbonado.rs b/src/carbonado.rs index 4a2bf8a0..15779f9e 100644 --- a/src/carbonado.rs +++ b/src/carbonado.rs @@ -110,9 +110,9 @@ pub async fn retrieve_metadata(sk: &str, name: &str) -> Result