Skip to content

Commit

Permalink
Merge pull request #297 from diba-io/CD/hashed-stashed-name
Browse files Browse the repository at this point in the history
Hashed Name with Alternative Name Checks
  • Loading branch information
cryptoquick authored Jul 25, 2023
2 parents da45680 + 80fd950 commit a01debd
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 45 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}.c15"))
.or_insert(assets_stock_name);

doc.ASSETS_WALLETS
.entry(assets_wallets_hash)
.entry(format!("{NETWORK}-{assets_wallets_hash}.c15"))
.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.c15" = "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.c15" = "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
46 changes: 29 additions & 17 deletions src/rgb/carbonado.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,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 +47,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,13 +63,13 @@ 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 (data, _) = retrieve(
sk,
&format!("{LIB_ID_RGB}-{name}"),
vec![&name.to_string(), &format!("{LIB_ID_RGB}-{name}")],
)
.await
.map_err(|op| StorageError::CarbonadoRetrive(name.to_string(), op.to_string()))?;
let hashed_name = blake3::hash(format!("{LIB_ID_RGB}-{name}").as_bytes())
.to_hex()
.to_lowercase();

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())
Expand All @@ -83,9 +91,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,13 +107,13 @@ pub async fn store_wallets(
}

pub async fn retrieve_wallets(sk: &str, name: &str) -> Result<RgbAccount, StorageError> {
let (data, _) = retrieve(
sk,
&format!("{LIB_ID_RGB}-{name}"),
vec![&name.to_string(), &format!("{LIB_ID_RGB}-{name}")],
)
.await
.map_err(|op| StorageError::CarbonadoRetrive(name.to_string(), op.to_string()))?;
let hashed_name = blake3::hash(format!("{LIB_ID_RGB}-{name}").as_bytes())
.to_hex()
.to_lowercase();

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(RgbAccount::default())
Expand Down

0 comments on commit a01debd

Please sign in to comment.