From 0b4d61ba182b93e1c5eeb5d5edc3c041844aec2b Mon Sep 17 00:00:00 2001 From: Armando Dutra Date: Mon, 24 Jul 2023 20:37:24 -0300 Subject: [PATCH 1/3] fix: add hashed name to rgb/carbonado --- build.rs | 8 ++++---- file_hashes.toml | 4 ++-- src/carbonado.rs | 32 ++++++++++---------------------- src/rgb/carbonado.rs | 39 +++++++++++++++++++++++++++++++-------- src/rgb/constants.rs | 3 +++ 5 files changed, 50 insertions(+), 36 deletions(-) diff --git a/build.rs b/build.rs index 9922d497..200603c8 100644 --- a/build.rs +++ b/build.rs @@ -86,8 +86,8 @@ fn main() -> Result<()> { 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_name = format!("{LIB_ID_RGB}-{ASSETS_STOCK}"); + let assets_wallets_name = format!("{LIB_ID_RGB}-{ASSETS_WALLETS}"); let assets_stock_hash = blake3::hash(assets_stock_name.as_bytes()) .to_hex() @@ -97,11 +97,11 @@ fn main() -> Result<()> { .to_ascii_lowercase(); doc.ASSETS_STOCK - .entry(assets_stock_hash) + .entry(format!("{}-{}", NETWORK, assets_stock_hash)) .or_insert(assets_stock_name); doc.ASSETS_WALLETS - .entry(assets_wallets_hash) + .entry(format!("{}-{}", NETWORK, assets_wallets_hash)) .or_insert(assets_wallets_name); let toml = toml::to_string(&doc)?; diff --git a/file_hashes.toml b/file_hashes.toml index 9fe904a9..1a3207a9 100644 --- a/file_hashes.toml +++ b/file_hashes.toml @@ -1,5 +1,5 @@ [ASSETS_STOCK] -7e9bb3bc108f2c3a3dc459f44a394db9e4071f0d61de07ece77f6145304b7630 = "bitcoin-urn:ubideco:stl:4fGZWR5mH5zZzRZ1r7CSRe776zm3hLBUngfXc4s3vm3V#saturn-flash-emerald-bitmask-fungible_assets_stock.c15" +bitcoin-4b1bc93ea7f03c49c4424b56561c9c7437e5f16e5714cece615a48e249264a84 = "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" +bitcoin-6075e9716c984b37840f76ad2b50b3d1b98ed286884e5ceba5bcc8e6b74988d3 = "urn:ubideco:stl:4fGZWR5mH5zZzRZ1r7CSRe776zm3hLBUngfXc4s3vm3V#saturn-flash-emerald-bitmask-fungible_assets_wallets.c15" diff --git a/src/carbonado.rs b/src/carbonado.rs index 15779f9e..4824c2cd 100644 --- a/src/carbonado.rs +++ b/src/carbonado.rs @@ -41,10 +41,8 @@ pub async fn store( force_write = "/force"; } - let param = format!("{network}-{name}"); - let hash = blake3::hash(param.as_bytes()).to_hex().to_ascii_lowercase(); - - let url = format!("{endpoint}/{pk_hex}/{hash}{force_write}"); + let name = format!("{network}-{name}"); + let url = format!("{endpoint}/{pk_hex}/{name}{force_write}"); let client = reqwest::Client::new(); let response = client .post(&url) @@ -93,10 +91,8 @@ pub async fn store( let pk_hex = hex::encode(pk); let meta: Option<[u8; 8]> = metadata.map(|m| m.try_into().expect("invalid metadata size")); - let (body, _encode_info) = carbonado::file::encode(&sk, Some(&pk), input, level, meta)?; - let hash = blake3::hash(name.as_bytes()).to_hex().to_ascii_lowercase(); - let filepath = handle_file(&pk_hex, &hash, body.len()).await?; + let filepath = handle_file(&pk_hex, name, body.len()).await?; fs::write(filepath, body).await?; Ok(()) } @@ -111,8 +107,7 @@ pub async fn retrieve_metadata(sk: &str, name: &str) -> Result Result Result<(), Stor .to_strict_serialized::() .map_err(|op| StorageError::StrictWrite(name.to_string(), op.to_string()))?; + let hashed_name = blake3::hash(format!("{LIB_ID_RGB}-{name}").as_bytes()) + .to_hex() + .to_lowercase(); + store( sk, - &format!("{LIB_ID_RGB}-{name}"), + &format!("{hashed_name}.c15"), &data, false, Some(RGB_STRICT_TYPE_VERSION.to_vec()), @@ -43,9 +50,13 @@ pub async fn force_store_stock(sk: &str, name: &str, stock: &Stock) -> Result<() .to_strict_serialized::() .map_err(|op| StorageError::StrictWrite(name.to_string(), op.to_string()))?; + let hashed_name = blake3::hash(format!("{LIB_ID_RGB}-{name}").as_bytes()) + .to_hex() + .to_lowercase(); + store( sk, - &format!("{LIB_ID_RGB}-{name}"), + &hashed_name, &data, true, Some(RGB_STRICT_TYPE_VERSION.to_vec()), @@ -55,10 +66,14 @@ pub async fn force_store_stock(sk: &str, name: &str, stock: &Stock) -> Result<() } pub async fn retrieve_stock(sk: &str, name: &str) -> Result { + let hashed_name = blake3::hash(format!("{LIB_ID_RGB}-{name}").as_bytes()) + .to_hex() + .to_lowercase(); + let (data, _) = retrieve( sk, - &format!("{LIB_ID_RGB}-{name}"), - vec![&name.to_string(), &format!("{LIB_ID_RGB}-{name}")], + &format!("{hashed_name}.c15"), + vec![&name.to_string(), &format!("{OLD_LIB_ID_RGB}-{name}")], ) .await .map_err(|op| StorageError::CarbonadoRetrive(name.to_string(), op.to_string()))?; @@ -83,9 +98,13 @@ pub async fn store_wallets( let data = to_allocvec(rgb_wallets) .map_err(|op| StorageError::StrictWrite(name.to_string(), op.to_string()))?; + let hashed_name = blake3::hash(format!("{LIB_ID_RGB}-{name}").as_bytes()) + .to_hex() + .to_lowercase(); + store( sk, - &format!("{LIB_ID_RGB}-{name}"), + &format!("{hashed_name}.c15"), &data, false, Some(RGB_STRICT_TYPE_VERSION.to_vec()), @@ -95,10 +114,14 @@ pub async fn store_wallets( } pub async fn retrieve_wallets(sk: &str, name: &str) -> Result { + let hashed_name = blake3::hash(format!("{LIB_ID_RGB}-{name}").as_bytes()) + .to_hex() + .to_lowercase(); + let (data, _) = retrieve( sk, - &format!("{LIB_ID_RGB}-{name}"), - vec![&name.to_string(), &format!("{LIB_ID_RGB}-{name}")], + &format!("{hashed_name}.c15"), + vec![&name.to_string(), &format!("{OLD_LIB_ID_RGB}-{name}")], ) .await .map_err(|op| StorageError::CarbonadoRetrive(name.to_string(), op.to_string()))?; diff --git a/src/rgb/constants.rs b/src/rgb/constants.rs index 50b9e429..9f4ef690 100644 --- a/src/rgb/constants.rs +++ b/src/rgb/constants.rs @@ -6,6 +6,9 @@ pub const RGB_DEFAULT_NAME: &str = "default"; pub const RGB_OLDEST_VERSION: [u8; 8] = [0; 8]; pub const RGB_STRICT_TYPE_VERSION: [u8; 8] = *b"rgbst160"; +// Latest RGB ID before UBIDECO semantic ID changes +pub const OLD_LIB_ID_RGB: &str = "memphis_asia_crash_4fGZWR5mH5zZzRZ1r7CSRe776zm3hLBUngfXc4s3vm3V"; + // General Errors #[cfg(target_arch = "wasm32")] pub const CARBONADO_UNAVALIABLE: &str = "carbonado filesystem"; From 5ecc18c41e9beea9ad0b1c4319989b8bb0461357 Mon Sep 17 00:00:00 2001 From: Armando Dutra Date: Mon, 24 Jul 2023 20:43:26 -0300 Subject: [PATCH 2/3] refactor: improve readability --- build.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.rs b/build.rs index 200603c8..8b740f6a 100644 --- a/build.rs +++ b/build.rs @@ -97,11 +97,11 @@ fn main() -> Result<()> { .to_ascii_lowercase(); doc.ASSETS_STOCK - .entry(format!("{}-{}", NETWORK, assets_stock_hash)) + .entry(format!("{NETWORK}-{assets_stock_hash}")) .or_insert(assets_stock_name); doc.ASSETS_WALLETS - .entry(format!("{}-{}", NETWORK, assets_wallets_hash)) + .entry(format!("{NETWORK}-{assets_wallets_hash}")) .or_insert(assets_wallets_name); let toml = toml::to_string(&doc)?; From 80fd950bdff5d6b0962d2f45ec0e45f224aaea6d Mon Sep 17 00:00:00 2001 From: Armando Dutra Date: Mon, 24 Jul 2023 21:28:35 -0300 Subject: [PATCH 3/3] refactor: remove alternative names --- build.rs | 4 ++-- file_hashes.toml | 4 ++-- src/rgb/carbonado.rs | 25 +++++++------------------ src/rgb/constants.rs | 3 --- 4 files changed, 11 insertions(+), 25 deletions(-) diff --git a/build.rs b/build.rs index 8b740f6a..7fa75ddc 100644 --- a/build.rs +++ b/build.rs @@ -97,11 +97,11 @@ fn main() -> Result<()> { .to_ascii_lowercase(); doc.ASSETS_STOCK - .entry(format!("{NETWORK}-{assets_stock_hash}")) + .entry(format!("{NETWORK}-{assets_stock_hash}.c15")) .or_insert(assets_stock_name); doc.ASSETS_WALLETS - .entry(format!("{NETWORK}-{assets_wallets_hash}")) + .entry(format!("{NETWORK}-{assets_wallets_hash}.c15")) .or_insert(assets_wallets_name); let toml = toml::to_string(&doc)?; diff --git a/file_hashes.toml b/file_hashes.toml index 1a3207a9..685ed620 100644 --- a/file_hashes.toml +++ b/file_hashes.toml @@ -1,5 +1,5 @@ [ASSETS_STOCK] -bitcoin-4b1bc93ea7f03c49c4424b56561c9c7437e5f16e5714cece615a48e249264a84 = "urn:ubideco:stl:4fGZWR5mH5zZzRZ1r7CSRe776zm3hLBUngfXc4s3vm3V#saturn-flash-emerald-bitmask-fungible_assets_stock.c15" +"bitcoin-4b1bc93ea7f03c49c4424b56561c9c7437e5f16e5714cece615a48e249264a84.c15" = "urn:ubideco:stl:4fGZWR5mH5zZzRZ1r7CSRe776zm3hLBUngfXc4s3vm3V#saturn-flash-emerald-bitmask-fungible_assets_stock.c15" [ASSETS_WALLETS] -bitcoin-6075e9716c984b37840f76ad2b50b3d1b98ed286884e5ceba5bcc8e6b74988d3 = "urn:ubideco:stl:4fGZWR5mH5zZzRZ1r7CSRe776zm3hLBUngfXc4s3vm3V#saturn-flash-emerald-bitmask-fungible_assets_wallets.c15" +"bitcoin-6075e9716c984b37840f76ad2b50b3d1b98ed286884e5ceba5bcc8e6b74988d3.c15" = "urn:ubideco:stl:4fGZWR5mH5zZzRZ1r7CSRe776zm3hLBUngfXc4s3vm3V#saturn-flash-emerald-bitmask-fungible_assets_wallets.c15" diff --git a/src/rgb/carbonado.rs b/src/rgb/carbonado.rs index c9fa5faa..1b4c3e16 100644 --- a/src/rgb/carbonado.rs +++ b/src/rgb/carbonado.rs @@ -6,10 +6,7 @@ use strict_encoding::{StrictDeserialize, StrictSerialize}; use crate::{ carbonado::{retrieve, store}, - rgb::{ - constants::{OLD_LIB_ID_RGB, RGB_STRICT_TYPE_VERSION}, - structs::RgbAccount, - }, + rgb::{constants::RGB_STRICT_TYPE_VERSION, structs::RgbAccount}, }; #[derive(Debug, Clone, Eq, PartialEq, Display, From, Error)] @@ -70,13 +67,9 @@ pub async fn retrieve_stock(sk: &str, name: &str) -> Result .to_hex() .to_lowercase(); - let (data, _) = retrieve( - sk, - &format!("{hashed_name}.c15"), - vec![&name.to_string(), &format!("{OLD_LIB_ID_RGB}-{name}")], - ) - .await - .map_err(|op| StorageError::CarbonadoRetrive(name.to_string(), op.to_string()))?; + let (data, _) = retrieve(sk, &format!("{hashed_name}.c15"), vec![]) + .await + .map_err(|op| StorageError::CarbonadoRetrive(name.to_string(), op.to_string()))?; if data.is_empty() { Ok(Stock::default()) @@ -118,13 +111,9 @@ pub async fn retrieve_wallets(sk: &str, name: &str) -> Result