SDK MX - Data NFT
This SDK is currently focused on interacting with the Itheum's Data NFT technology that's deployed to the MultiversX blockchain.
Contributing
- requires
node@19.7X
npm install
- work on typescript code in the
/src
folder - handy tip: when developing locally, you can do integration tests by running
npm run prepare
and the npm install --save ../sdk-mx-data-nft
in the host project
Dev Environment
Dev Testing
- Only simple dev testing added. First Build as below and then run
npm run test
and work on the test.mjs file for live reload
Build
npm run build
- New build is sent to
dist
folder
Usage in 3rd party dApps
- Install this SDK via
npm i @itheum/sdk-mx-data-nft
- Methods supported are given below is
SDK Docs
SDK DOCS
Note that all param requirements and method docs are marked up in the typescript code, so if you use typescript in your project your development tool (e.g. Visual Studio Code) will provide intellisense for all methods and functions.
1. Interacting with Data NFTs
import { DataNft } from '@itheum/sdk-mx-data-nft';
DataNft.setNetworkConfig('devnet' | 'testnet' | 'mainnet');
const dataNft = new DataNft({
tokenIdentifier: 'tokenIdentifier',
tokenName: 'tokenName'
});
const nonce = 1;
const nft = await DataNft.createFromApi({ nonce });
const response = await fetch('https://devnet-api.multiversx.com/address/nfts');
const dataNfts = [];
response.forEach(async (nft) => {
const data = await DataNft.createFromApiResponse(nft);
dataNfts.push(data);
});
const address = 'address';
const dataNfts = [];
dataNfts = await DataNft.ownedByAddress(address);
const dataNft = DataNft.createFromApi({ nonce });
const message = await dataNft.messageToSign();
const signature = 'signature';
dataNft.viewData({
message,
signature
});
dataNft.viewDataViaMVXNativeAuth({
mvxNativeAuthOrigins: "http://localhost:3000", "https://mycoolsite.com"],
mvxNativeAuthMaxExpirySeconds: 300,
fwdHeaderMapLookup: {
authorization : "Bearer myNativeAuthToken"
}
});
2. Interacting with Data NFT Minter
import { SftMinter } from '@itheum/sdk-mx-data-nft';
const dataNftMinter = new SftMinter('devnet' | 'testnet' | 'mainnet');
const requirements = await dataNftMinter.viewMinterRequirements(
new Address('erd1...')
);
const result = await dataNftMinter.viewContractPauseState();
Create a mint transaction
Method 1: Mint a new Data NFT with Ithuem generated image and traits.
Currently only supports nft.storage.
const transaction = await nftMinter.mint(
new Address('erd1...'),
'TEST-TOKEN',
'https://marshal.com',
'https://streamdata.com',
'https://previewdata',
1000,
'Test Title',
'Test Description',
{
nftStorageToken: 'API TOKEN'
}
);
Method 2: Mint a new Data NFT with custom image and traits.
Traits should be compliant with the Itheum traits structure.
const transaction = await nftMinter.mint(
new Address('erd1'),
'TEST-TOKEN',
'https://marshal.com',
'https://streamdata.com',
'https://previewdata',
1000,
'Test Title',
'Test Description',
{
imageUrl: 'https://imageurl.com',
traitsUrl: 'https://traitsurl.com'
}
);
Create a burn transaction
const transaction = await dataNftMarket.burn(
new Address('erd1'),
dataNftNonce,
quantityToBurn
);
3. Interacting with Data NFT Marketplace
import { DataNftMarket } from '@itheum/sdk-mx-data-nft';
const dataNftMarket = new DataNftMarket('devnet' | 'testnet' | 'mainnet');
const result = await dataNftMarket.viewRequirements();
const result = await dataNftMarket.viewAddressListedOffers(new Address(''));
const result = await dataNftMarket.viewAddressPagedOffers(
1,
10,
new Address('')
);
const result = await dataNftMarket.viewAddressTotalOffers(new Address(''));
const result = await dataNftMarket.viewAddressCancelledOffers(new Address(''));
const result = await dataNftMarket.viewPagedOffers(1, 10);
const result = await dataNftMarket.viewOffers();
const result = await dataNftMarket.viewNumberOfOffers();
const result = await dataNftMarket.viewContractPauseState();
const result = await dataNftMarket.viewLastValidOfferId();
const result = dataNftMarket.addOffer(new Address(''), '', 0, 0, '', 0, 0, 0);
const result = dataNftMarket.acceptOffer(new Address(''), 0, 0, 0);
const result = dataNftMarket.cancelOffer(new Address(''), 0);
const result = dataNftMarket.cancelOffer(new Address(''), 0, false);
const result = dataNftMarket.withdrawCancelledOffer(new Address(''), 0);
const result = dataNftMarket.changeOfferPrice(new Address(''), 0, 0);
Traits structure
Items below marked "required" are the "minimum" required for it to be compatible with the Itheum protocol. You can add any additional traits you may need for your own reasons.
{
"description": "Data NFT description",
"data_preview_url": "https://previewdata.com",
"attributes": [
{
"trait_type": "Creator",
"value": "creator address"
},
{
"trait_type": "extra trait",
"value": "extra trait value"
},
...
]
}