0xMiden / 0xMiden/protocol

Move `NonFungibleAsset` to `miden-standards`

未關閉
#3,637 0 則留言 1 個 reaction 已指派 0 人 在 GitHub 檢視
standards
主要語言
Rust
星號
132
分支
167
平均合併
1 天 23 小時
30 天內合併 PR
110

描述

With https://github.com/0xMiden/protocol/pull/3625 `NonFungibleAsset` became a standard asset and so should be moved to `miden-standards`, next to the `NonFungibleFaucet` implementation. It can now be adapted to be specific to that faucet and the logic of `NonFungibleFaucet::compute_asset_commitment` can move to it.

It could be defined as:

```rust
pub struct NonFungibleAsset(Asset);

impl NonFungibleAsset {
pub fn new(faucet_id: AccountId, data: &[u8], salt: Word) -> Self {
let data_digest = Hasher::hash(data);
let value = AssetValue::from_raw(Hasher::merge(&[data_digest, salt]));

let asset_class_suffix = value.as_elements()[0];
let asset_class_prefix = value.as_elements()[1];
let asset_class = AssetClass::new(asset_class_suffix, asset_class_prefix);

let asset_id = AssetId::new(asset_class, faucet_id, AssetComposition::None)
.expect("non-fungible composition is always valid");
let asset = Asset::new(asset_id, value.as_word())
.expect("non-fungible asset should be a valid asset");

Self(asset)
}

// ... public accessors ...
}

impl From for Asset {
fn from(asset: NonFungibleAsset) -> Self {
asset.0
}
}
```

Other required changes are migrating all miden-protocol tests that use `NonFungibleAsset` to a `testing`-only `MockAsset` that uses `AssetComposition::None`.

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。