# How to read metadata from NFTcontract using TS-SDK

**URL:** <https://forum.fuel.network/t/how-to-read-metadata-from-nftcontract-using-ts-sdk/6307>\
**Category:** TypeScript SDK\
**Tags:** nft\
**Created:** [July 20, 2024, 5:13am UTC](https://forum.fuel.network/t/how-to-read-metadata-from-nftcontract-using-ts-sdk/6307 "2024-07-20T05:13:08Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![mahesh\_d\_luffy](https://avatars.discourse-cdn.com/v4/letter/m/a88e4f/32.png) [@mahesh\_d\_luffy](https://forum.fuel.network/u/mahesh_d_luffy)\
**Post date:** [July 20, 2024, 5:13am UTC](https://forum.fuel.network/t/how-to-read-metadata-from-nftcontract-using-ts-sdk/6307/1 "2024-07-20T05:13:08Z")

</div>

Hi @danielbate I am currently trying to read metadata From NFT contract , But its returning something else.

Typescript code :

```auto
const { Provider, Wallet, Contract, getRandomB256 } = require('fuels');
const { abi } = require('./abi');

async function main() {
  let contractId = '0xdd723a38d1fe832f231fc6ffc69b5dc51850b5fc7f4b5b03f9fa11821877c5ca';
  // Create a provider, with the Latest Testnet URL.
  const provider = await Provider.create('https://testnet.fuel.network/v1/graphql');

  // Initialize wallet with a private key
  const privateKey = ''; // Replace with your private key
  const wallet = Wallet.fromPrivateKey(privateKey, provider);
  const contract = new Contract(contractId, abi, wallet);
  
  // Fetch total assets
  const { value } = await contract.functions.total_assets().get();
  console.log("Value of Total Assets:", Number(value));

  // // Define assetId and metadataKey
  const assetId = { bits: '0x2f18e07d3177f6fa66b9999c2174d5d027e659f3f44bd5b9d449c43df12d7559' }; // Replace with actual asset ID
  const metadataKey = 'https://arweave.net/LxILnA3lG-oRW5eZR4XAB-RnzpcFRjhSwh_PfQmw1Jw';

  // Create the Metadata::String variant
  const metadataEnum = { String: metadataKey };

  const metadata = await contract.functions.metadata(assetId, metadataKey).get();
  let metaKey = metadata.callResult
  console.log("Metadata:",(metaKey.receipts[1]));
}

main().catch(console.error);

```

Response I am getting :

 ![Screenshot 2024-07-20 at 10.37.18](https://us1.discourse-cdn.com/flex022/uploads/fuel/original/2X/f/ffd2e5b876440adecdd07337597357ff79e54124.png)

Fuelup show versions

 ![Screenshot 2024-07-20 at 10.38.05](https://us1.discourse-cdn.com/flex022/uploads/fuel/original/2X/2/207ee6ea3072eab0db2c3a694a72a7082d62854d.png)

contract ID : 0xdd723a38d1fe832f231fc6ffc69b5dc51850b5fc7f4b5b03f9fa11821877c5ca  
Asset ID : 0x2f18e07d3177f6fa66b9999c2174d5d027e659f3f44bd5b9d449c43df12d7559

**Contract code for getting metadata**

````auto
impl SRC7 for Contract {
    /// Returns metadata for the corresponding `asset` and `key`.
    ///
    /// # Arguments
    ///
    /// * `asset`: [AssetId] - The asset of which to query the metadata.
    /// * `key`: [String] - The key to the specific metadata.
    ///
    /// # Returns
    ///
    /// * [Option<Metadata>] - `Some` metadata that corresponds to the `key` or `None`.
    ///
    /// # Number of Storage Accesses
    ///
    /// * Reads: `1`
    ///
    /// # Examples
    ///
    /// ```sway
    /// use src_7::{SRC7, Metadata};
    /// use std::string::String;
    ///
    /// fn foo(contract_id: ContractId, asset: AssetId) {
    /// let contract_abi = abi(SRC7, contract_id);
    /// let key = String::from_ascii_str("image");
    /// let data = contract_abi.metadata(asset, key);
    /// assert(data.is_some());
    /// }
    /// ```
    #[storage(read)]
    fn metadata(asset: AssetId, key: String) -> Option<Metadata> {
        storage.metadata.get(asset, key)
    }
}

````

set Metadata code :

```auto
const { Provider, Wallet, Contract, getRandomB256 } = require('fuels');
const { abi } = require('./abi');

async function main() {
  let contractId = '0xdd723a38d1fe832f231fc6ffc69b5dc51850b5fc7f4b5b03f9fa11821877c5ca';
  // Create a provider, with the Latest Testnet URL.
  const provider = await Provider.create('https://testnet.fuel.network/v1/graphql');

  // Initialize wallet with a private key
  const privateKey = ''; // Replace with your private key
  const wallet = Wallet.fromPrivateKey(privateKey, provider);
  const contract = new Contract(contractId, abi, wallet);
  
  // Fetch total assets
  const { value } = await contract.functions.total_assets().get();
  console.log("Value of Total Assets:", Number(value));

  // // Define assetId and metadataKey
  const assetId = { bits: '0x2f18e07d3177f6fa66b9999c2174d5d027e659f3f44bd5b9d449c43df12d7559' }; // Replace with actual asset ID
  const metadataKey = 'https://arweave.net/LxILnA3lG-oRW5eZR4XAB-RnzpcFRjhSwh_PfQmw1Jw';

  // Create the Metadata::String variant
  const metadataEnum = { String: metadataKey };

  // Call set_metadata function with the correct parameters
  const metadata = await contract.functions.set_metadata(assetId, "This is NO NFT", metadataEnum).txParams({ gasPrice: 1 }).call();
  let txn = await metadata.waitForResult()
  console.log("Metadata:",txn.transactionResponse);

}

main().catch(console.error);

```

Do we need anyother details to Provide over here.

---

<div class="post-metadata">

**Author:** ![danielbate](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.fuel.network/danielbate/32/1617_2.png) [@danielbate](https://forum.fuel.network/u/danielbate)\
**Post date:** [July 22, 2024, 7:49am UTC](https://forum.fuel.network/t/how-to-read-metadata-from-nftcontract-using-ts-sdk/6307/2 "2024-07-22T07:49:05Z")

</div>

The `value` property on your response object of `undefined` would indicate there is no metadata stored for `metadataKey`.

As the function doc states:

> [@mahesh\_d\_luffy](#):
>
> `[Option<Metadata>] - `Some`metadata that corresponds to the `key` or` None`.`

`undefined` in our case represents `None`. Have you definitely set metadata for that key?

---

<div class="post-metadata">

**Author:** ![mahesh\_d\_luffy](https://avatars.discourse-cdn.com/v4/letter/m/a88e4f/32.png) [@mahesh\_d\_luffy](https://forum.fuel.network/u/mahesh_d_luffy)\
**Post date:** [July 22, 2024, 8:46am UTC](https://forum.fuel.network/t/how-to-read-metadata-from-nftcontract-using-ts-sdk/6307/3 "2024-07-22T08:46:27Z")

</div>

Hi @danielbate

yes , I have set metadata for that key transaction executed properly

help me to get what i am missing

---

<div class="post-metadata">

**Author:** ![mahesh\_d\_luffy](https://avatars.discourse-cdn.com/v4/letter/m/a88e4f/32.png) [@mahesh\_d\_luffy](https://forum.fuel.network/u/mahesh_d_luffy)\
**Post date:** [July 23, 2024, 5:49am UTC](https://forum.fuel.network/t/how-to-read-metadata-from-nftcontract-using-ts-sdk/6307/4 "2024-07-23T05:49:36Z")

</div>

I find out the issue and resolved, Thanks 🙂

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex022/uploads/fuel/original/2X/5/57d5a345cc15a64b636e0d56e042857f8a0e80b1.png) [@system](https://forum.fuel.network/u/system)\
**Post date:** [August 13, 2024, 1:50am UTC](https://forum.fuel.network/t/how-to-read-metadata-from-nftcontract-using-ts-sdk/6307/5 "2024-08-13T01:50:29Z")

</div>

This topic was automatically closed 20 days after the last reply. New replies are no longer allowed.
