In this code:
storage {
metadatas: StorageMetadata = StorageMetadata {},
ctr: u256 = 0,
total_assets: u64 = 0,
}
impl SRC7 for Contract {
#[storage(read)]
fn metadata(asset: AssetId, key: String) -> Option<Metadata> {
// Return the stored metadata
storage.metadatas.get(asset, key)
}
}
When I try to query the data like this using TS SDK:
let assetId: AssetIdInput = {
bits: "0xa875fa4f00180c89155ee08e726a3c9ca2924cf9389ef6bbb82b8ebcd4a64649",
};
const data = await contract.functions.metadata(assetId, "key1").get();
I am getting this error:
Error: _FuelError: Invalid enum data size.
at OptionCoder.decode
This is how I set the metadata in my mint function:
abi MintWithMetadata {
#[storage(read, write)]
fn mint(recipient: Identity, keys: Vec<String>, metadatas: Vec<Metadata>);
}
impl MintWithMetadata for Contract {
#[storage(read, write)]
fn mint(recipient: Identity, keys: Vec<String>, metadatas: Vec<Metadata>) {
require(keys.len() == metadatas.len(), "invalid-key-metadata-length");
only_owner();
let sub_id = storage.ctr.read().as_b256();
let mut i:u64 = 0;
while i < keys.len() {
let asset_id = AssetId::new(ContractId::this(), sub_id);
_set_metadata(storage.metadatas, asset_id, keys.get(i).unwrap(), metadatas.get(i).unwrap());
i += 1;
}
storage.ctr.write(storage.ctr.read() + 1);
mint_to(recipient, sub_id, 1);
storage.total_assets.write(storage.total_assets.read() + 1);
}
}
What am I doing wrong here?
fuelup show
:
testnet-x86_64-unknown-linux-gnu (override)