Create NFT with Metadata
- OTR
- HTTPS
To create a NFT with Metadata, you must call mintMetadataNft on dataset(Dataset.NFT). mintMetadataNft takes an object of type MintMetadataNftTangleRequest as parameter. In there you can specify the metadata of the NFT which for example could be used to create a digital twin.
const link = otr(SoonaverseOtrAddress.TEST)
.dataset(Dataset.NFT)
.mintMetadataNft({
metadata: { prop1: 'prop1', prop2: 'prop2' },
});
mintMetadataNft returns an oject of type OtrRequest<MintMetadataNftTangleRequest>.
The SDK provides the helper functions getFireflyDeepLink() and getBloomDeepLink() to generate deep links for OTR requests.
To create a NFT with Metadata, you must call mintMetadata on dataset(Dataset.NFT). mintMetadata takes an object of type MintMetadataNftRequest as parameter. In there you can specify the metadata of the NFT which for example could be used to create a digital twin.
const order = await https(origin)
.project(SoonaverseApiKey[origin])
.dataset(Dataset.NFT)
.mintMetadata({
address: address.bech32,
signature: signature.signature,
publicKey: {
hex: signature.publicKey,
network: Network.RMS,
},
body: {
metadata: { name: 'My nft' },
network: Network.RMS,
},
});
mintMetadata returns an oject of type Transaction.
Full How-To Code
- OTR
- HTTPS
import { Dataset } from '@build-5/interfaces';
import { SoonaverseOtrAddress, otr } from '@build-5/sdk';
async function main() {
try {
const link = otr(SoonaverseOtrAddress.TEST)
.dataset(Dataset.NFT)
.mintMetadataNft({
metadata: { prop1: 'prop1', prop2: 'prop2' },
});
console.log(link);
} catch (e) {
console.log(e);
return;
}
}
main().then(() => process.exit());
import { Dataset, Network } from '@build-5/interfaces';
import { Build5, SoonaverseApiKey, https } from '@build-5/sdk';
import { address } from '../../utils/secret';
import { wait, walletSign } from '../../utils/utils';
async function main() {
const origin = Build5.TEST;
const member = await https(origin).createMember({
address: address.bech32,
signature: '',
body: {
address: address.bech32,
},
});
try {
const signature = await walletSign(member.uid, address);
const order = await https(origin)
.project(SoonaverseApiKey[origin])
.dataset(Dataset.NFT)
.mintMetadata({
address: address.bech32,
signature: signature.signature,
publicKey: {
hex: signature.publicKey,
network: Network.RMS,
},
body: {
metadata: { name: 'My nft' },
network: Network.RMS,
},
});
console.log(
'Sent: ',
order.payload.amount,
' to ',
order.payload.targetAddress,
', full order object: ',
order,
);
// Once orderder is founded and NFT is minted you can get it via the order traget address
await wait(async () => {
const nfts = await https(origin)
.project(SoonaverseApiKey[origin])
.dataset(Dataset.NFT)
.getByField('mintingData.address', order.payload.targetAddress!);
return nfts.length === 1;
});
const nfts = await https(origin)
.project(SoonaverseApiKey[origin])
.dataset(Dataset.NFT)
.getByField('mintingData.address', order.payload.targetAddress!);
// To update the NFT create and other request with the NFT id
const updateOrder = await https(origin)
.project(SoonaverseApiKey[origin])
.dataset(Dataset.NFT)
.mintMetadata({
address: address.bech32,
signature: signature.signature,
publicKey: {
hex: signature.publicKey,
network: Network.RMS,
},
body: {
metadata: { name: 'My nft' },
network: Network.RMS,
nftId: nfts[0].mintingData!.nftId!,
},
});
console.log(
'Sent: ',
updateOrder.payload.amount,
' to ',
updateOrder.payload.targetAddress,
', to update the NFT metadata',
);
// To mint an other NFT under the same collection use collection id
const collection = await https(origin)
.project(SoonaverseApiKey[origin])
.dataset(Dataset.COLLECTION)
.id(nfts[0].collection)
.get();
const secondNftOrder = await https(origin)
.project(SoonaverseApiKey[origin])
.dataset(Dataset.NFT)
.mintMetadata({
address: address.bech32,
signature: signature.signature,
publicKey: {
hex: signature.publicKey,
network: Network.RMS,
},
body: {
metadata: { name: 'Second nft' },
network: Network.RMS,
collectionId: collection.mintingData!.nftId!,
},
});
console.log(
'Sent: ',
secondNftOrder.payload.amount,
' to ',
secondNftOrder.payload.targetAddress,
', to create another NFT within same collection',
);
} catch (e) {
console.log(e);
return;
}
}
main().then(() => process.exit());