Security News
pnpm 10.0.0 Blocks Lifecycle Scripts by Default
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
@itheum/sdk-mx-data-nft
Advanced tools
SDK for Itheum's Data NFT Technology on MultiversX Blockchain
This SDK is currently focused on interacting with the Itheum's Data NFT technology that's deployed to the MultiversX blockchain.
node@19.7X
npm install
/src
foldernpm run prepare
and the npm install --save ../sdk-mx-data-nft
in the host project#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npx --no-install commitlint --edit $1
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm test
npm run test
and work on the test.mjs file for live reloadnpm run build
dist
foldernpm i @itheum/sdk-mx-data-nft
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.
import { DataNft } from '@itheum/sdk-mx-data-nft';
DataNft.setNetworkConfig('devnet' | 'testnet' | 'mainnet');
// Can build a new DataNft object partially
const dataNft = new DataNft({
tokenIdentifier: 'tokenIdentifier',
tokenName: 'tokenName'
});
// Create a new DataNft object from API
const nonce = 1;
const nft = await DataNft.createFromApi({ nonce });
// Create a new DataNft object from API Response
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);
});
// Retrieves the DataNfts owned by a address
const address = 'address';
const dataNfts = [];
dataNfts = await DataNft.ownedByAddress(address);
// Retrieves the specific DataNft
const dataNft = DataNft.createFromApi({ nonce });
// (A) Get a message from the Data Marshal node for your to sign to prove ownership
const message = await dataNft.messageToSign();
// (B) Sign the message with a wallet and obtain a signature
const signature = 'signature';
// There are 2 methods to open a data NFT and view the content -->
// Method 1) Unlock the data inside the Data NFT via signature verification
dataNft.viewData({
message,
signature
}); // optional params "stream" (stream out data instead of downloading file), "fwdAllHeaders"/"fwdHeaderKeys", "fwdHeaderMapLookup" can be used to pass headers like Authorization to origin Data Stream servers
// Method 2) OR, you can use a MultiversX Native Auth access token to unlock the data inside the Data NFT without the need for the the signature steps above (A)(B). This has a much better UX
dataNft.viewDataViaMVXNativeAuth({
mvxNativeAuthOrigins: "http://localhost:3000", "https://mycoolsite.com"], // same whitelist domains your client app used when generating native auth token
mvxNativeAuthMaxExpirySeconds: 300, // same expiry seconds your client app used when generating native auth token
fwdHeaderMapLookup: {
authorization : "Bearer myNativeAuthToken"
}
}); // optional params "stream" (stream out data instead of downloading file), "fwdAllHeaders"/"fwdHeaderKeys" can be used to pass on the headers like Authorization to origin Data Stream servers
import { SftMinter } from '@itheum/sdk-mx-data-nft';
const dataNftMinter = new SftMinter('devnet' | 'testnet' | 'mainnet');
// View minter smart contract requirements
const requirements = await dataNftMinter.viewMinterRequirements(
new Address('erd1...')
);
// View contract pause state
const result = await dataNftMinter.viewContractPauseState();
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'
}
);
const transaction = await dataNftMarket.burn(
new Address('erd1'),
dataNftNonce,
quantityToBurn
);
import { DataNftMarket } from '@itheum/sdk-mx-data-nft';
const dataNftMarket = new DataNftMarket('devnet' | 'testnet' | 'mainnet');
// View requirements
const result = await dataNftMarket.viewRequirements();
// View address listed offers
const result = await dataNftMarket.viewAddressListedOffers(new Address(''));
// View address paged offers
const result = await dataNftMarket.viewAddressPagedOffers(
1,
10,
new Address('')
);
// View address total offers
const result = await dataNftMarket.viewAddressTotalOffers(new Address(''));
// View address cancelled offers
const result = await dataNftMarket.viewAddressCancelledOffers(new Address(''));
// View offers paged
const result = await dataNftMarket.viewPagedOffers(1, 10);
// View offers
const result = await dataNftMarket.viewOffers();
// View number of offers listed
const result = await dataNftMarket.viewNumberOfOffers();
// View contract pause state
const result = await dataNftMarket.viewContractPauseState();
// View last valid offer id
const result = await dataNftMarket.viewLastValidOfferId();
// Create addOffer transaction
const result = dataNftMarket.addOffer(new Address(''), '', 0, 0, '', 0, 0, 0);
// Create acceptOffer transaction
const result = dataNftMarket.acceptOffer(new Address(''), 0, 0, 0);
// Create cancelOffer transaction
const result = dataNftMarket.cancelOffer(new Address(''), 0);
// Create cancelOffer transaction without sending the funds back to the owner
const result = dataNftMarket.cancelOffer(new Address(''), 0, false);
// Create withdrawFromCancelledOffer transaction
const result = dataNftMarket.withdrawCancelledOffer(new Address(''), 0);
// Create changeOfferPrice transaction
const result = dataNftMarket.changeOfferPrice(new Address(''), 0, 0);
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", // required
"data_preview_url": "https://previewdata.com",
"attributes": [
{
"trait_type": "Creator", // required
"value": "creator address"
},
{
"trait_type": "extra trait",
"value": "extra trait value"
},
...
]
}
FAQs
SDK for Itheum's Data NFT Technology on MultiversX Blockchain
The npm package @itheum/sdk-mx-data-nft receives a total of 133 weekly downloads. As such, @itheum/sdk-mx-data-nft popularity was classified as not popular.
We found that @itheum/sdk-mx-data-nft demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.