Skip to content

Commit

Permalink
fix: add hashed name to rgb/carbonado
Browse files Browse the repository at this point in the history
  • Loading branch information
crisdut committed Jul 24, 2023
1 parent da45680 commit 0b4d61b
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 36 deletions.
8 changes: 4 additions & 4 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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)?;
Expand Down
4 changes: 2 additions & 2 deletions file_hashes.toml
Original file line number Diff line number Diff line change
@@ -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"
32 changes: 10 additions & 22 deletions src/carbonado.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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(())
}
Expand All @@ -111,8 +107,7 @@ pub async fn retrieve_metadata(sk: &str, name: &str) -> Result<FileMetadata, Car
let endpoint = CARBONADO_ENDPOINT.read().await.to_string();
let network = NETWORK.read().await.to_string();
let name = format!("{network}-{name}");
let hash = blake3::hash(name.as_bytes()).to_hex().to_ascii_lowercase();
let url = format!("{endpoint}/{pk}/{hash}/metadata");
let url = format!("{endpoint}/{pk}/{name}/metadata");
let client = reqwest::Client::new();
let response = client
.get(&url)
Expand Down Expand Up @@ -159,17 +154,15 @@ pub async fn retrieve_metadata(sk: &str, name: &str) -> Result<FileMetadata, Car
let public_key = PublicKey::from_secret_key_global(&secret_key);
let pk = public_key.to_hex();

let mut final_name = name.to_string();
let network = NETWORK.read().await.to_string();
let networks = ["bitcoin", "mainnet", "testnet", "signet", "regtest"];

let mut final_name = name.to_string();
if !networks.into_iter().any(|x| name.contains(x)) {
final_name = format!("{network}-{name}");
}

let hash = blake3::hash(final_name.as_bytes())
.to_hex()
.to_ascii_lowercase();
let filepath = handle_file(&pk, &hash, 0).await?;
let filepath = handle_file(&pk, &final_name, 0).await?;
let bytes = fs::read(filepath).await?;

let (header, _) = carbonado::file::decode(&sk, &bytes)?;
Expand Down Expand Up @@ -226,10 +219,8 @@ pub async fn retrieve(

let network = NETWORK.read().await.to_string();
let endpoint = CARBONADO_ENDPOINT.read().await.to_string();
let param = format!("{network}-{name}");
let hash = blake3::hash(param.as_bytes()).to_hex().to_ascii_lowercase();

if let Some(encoded) = server_req(format!("{endpoint}/{pk}/{hash}").as_str())
let name = format!("{network}-{name}");
if let Some(encoded) = server_req(format!("{endpoint}/{pk}/{name}").as_str())
.await
.map_err(|_| {
CarbonadoError::StdIoError(Error::new(
Expand All @@ -247,10 +238,7 @@ pub async fn retrieve(
// Check alternative names
let alt_names = alt_names.into_iter().map(|x| format!("{network}-{x}"));
for alt_name in alt_names {
let hash = blake3::hash(alt_name.as_bytes())
.to_hex()
.to_ascii_lowercase();
if let Some(encoded) = server_req(format!("{endpoint}/{pk}/{hash}").as_str())
if let Some(encoded) = server_req(format!("{endpoint}/{pk}/{alt_name}").as_str())
.await
.map_err(|_| {
CarbonadoError::StdIoError(Error::new(
Expand Down
39 changes: 31 additions & 8 deletions src/rgb/carbonado.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ use strict_encoding::{StrictDeserialize, StrictSerialize};

use crate::{
carbonado::{retrieve, store},
rgb::{constants::RGB_STRICT_TYPE_VERSION, structs::RgbAccount},
rgb::{
constants::{OLD_LIB_ID_RGB, RGB_STRICT_TYPE_VERSION},
structs::RgbAccount,
},
};

#[derive(Debug, Clone, Eq, PartialEq, Display, From, Error)]
Expand All @@ -27,9 +30,13 @@ pub async fn store_stock(sk: &str, name: &str, stock: &Stock) -> Result<(), Stor
.to_strict_serialized::<U32>()
.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()),
Expand All @@ -43,9 +50,13 @@ pub async fn force_store_stock(sk: &str, name: &str, stock: &Stock) -> Result<()
.to_strict_serialized::<U32>()
.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()),
Expand All @@ -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<Stock, StorageError> {
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()))?;
Expand All @@ -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()),
Expand All @@ -95,10 +114,14 @@ pub async fn store_wallets(
}

pub async fn retrieve_wallets(sk: &str, name: &str) -> Result<RgbAccount, StorageError> {
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()))?;
Expand Down
3 changes: 3 additions & 0 deletions src/rgb/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down

0 comments on commit 0b4d61b

Please sign in to comment.