From 0b4d61ba182b93e1c5eeb5d5edc3c041844aec2b Mon Sep 17 00:00:00 2001 From: Armando Dutra Date: Mon, 24 Jul 2023 20:37:24 -0300 Subject: [PATCH] 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";