Skip to main content

Pack

Learn how to interact with your Pack contract in the SDK.

Create a Pack Contract

Deploys a new Pack contract
const sdk = useSDK();

const contractAddress = await sdk.deployer.deployPack({
name: "My Pack",
primary_sale_recipient: "your-address",
});
View in React SDK Documentation

Getting the contract in your application

To start using your Pack contract inside your application, you'll need to use its contract address. You can get the contract address from the dashboard.

This feature is missing a code snippet or might not be supported yet.

Check the React SDK Reference for more information.

Reach out on Discord for further assistance!

Setting Royalty Fees

Configure royalties
// royalties on the whole contract
contract.royalties.setDefaultRoyaltyInfo({
seller_fee_basis_points: 100, // 1%
fee_recipient: "0x..."
});
// override royalty for a particular pack
contract.royalties.setTokenRoyaltyInfo(packId, {
seller_fee_basis_points: 500, // 5%
fee_recipient: "0x..."
});
View in React SDK Documentation

Create a Pack

You can bundle any number of ERC20, ERC721, or ERC1155 tokens into a set quantity of ERC1155 pack NFTs.

When you create a pack, it is minted as a new NFT in the smart contract.

const pack = {
// The metadata for the pack NFT itself
packMetadata: {
name: "My Pack",
description: "This is a new pack",
image: "ipfs://...",
},
// ERC20 rewards to be included in the pack
erc20Rewards: [
{
assetContract: "0x...",
quantityPerReward: 5,
quantity: 100,
totalRewards: 20,
}
],
// ERC721 rewards to be included in the pack
erc721Rewards: [
{
assetContract: "0x...",
tokenId: 0,
}
],
// ERC1155 rewards to be included in the pack
erc1155Rewards: [
{
assetContract: "0x...",
tokenId: 0,
quantityPerReward: 1,
totalRewards: 100,
}
],
openStartTime: new Date(), // the date that packs can start to be opened, defaults to now
rewardsPerPack: 1, // the number of rewards in each pack, defaults to 1
}

const tx = await contract.createTo("0x...", pack);
View in React SDK Documentation

Add more contents to an existing Pack

You can add ERC20, ERC721, or ERC1155 tokens to a an existing packId, up till the first transfer of those packs.

When you add contents, an additional supply of ERC1155 pack NFTs is minted for a packId.

const packContents = {
// ERC20 rewards to be included in the pack
erc20Rewards: [
{
assetContract: "0x...",
quantityPerReward: 5,
quantity: 100,
totalRewards: 20,
}
],
// ERC721 rewards to be included in the pack
erc721Rewards: [
{
assetContract: "0x...",
tokenId: 0,
}
],
// ERC1155 rewards to be included in the pack
erc1155Rewards: [
{
assetContract: "0x...",
tokenId: 0,
quantityPerReward: 1,
totalRewards: 100,
}
],
}

const tx = await contract.addPackContents(packId, packContents);
View in React SDK Documentation

Airdrop a Pack

Airdrop multiple NFTs
// The token ID of the NFT you want to airdrop
const tokenId = "0";
// Array of objects of addresses and quantities to airdrop NFTs to
const addresses = [
{
address: "0x...",
quantity: 2,
},
{
address: "0x...",
quantity: 3,
},
];
await contract.airdrop(tokenId, addresses);

// You can also pass an array of addresses, it will airdrop 1 NFT per address
const tokenId = "0";
const addresses = [
"0x...", "0x...", "0x...",
]
await contract.airdrop(tokenId, addresses);
View in React SDK Documentation

View Packs

One

Get a single Pack
const pack = await contract.get(0);
console.log(packs;
View in React SDK Documentation

All

Get All Packs
const packs = await contract.getAll();
console.log(packs;
View in React SDK Documentation

Owned by a specific wallet

Get Owned Packs
// Address of the wallet to get the packs of
const address = "{{wallet_address}}";
const packss = await contract.getOwned(address);
View in React SDK Documentation

Amount owned by a specific wallet

Get NFT Balance
// Address of the wallet to check NFT balance
const walletAddress = "{{wallet_address}}";
const tokenId = 0; // Id of the NFT to check
const balance = await contract.balanceOf(walletAddress, tokenId);
View in React SDK Documentation

View Pack Contents

You can view all of the rewards that were bundled to create the packs, but not the contents of each individual pack.

const packId = 0;
const contents = await contract.getPackContents(packId);
console.log(contents.erc20Rewards);
console.log(contents.erc721Rewards);
console.log(contents.erc1155Rewards);
View in React SDK Documentation

Open Pack

When you open a pack, you receive the tokens within it and burn the pack NFT.

Only the owner of a pack can open it.

Multiple of the same pack can be opened at once.

const tokenId = 0
const amount = 1
const tx = await contract.open(tokenId, amount);
View in React SDK Documentation

Transferring NFTs

You must be the owner of the pack you're trying to transfer for this to be successful.

// Address of the wallet you want to send the NFT to
const toAddress = "{{wallet_address}}";
const tokenId = "0"; // The token ID of the NFT you want to send
const amount = 3; // How many copies of the NFTs to transfer
await contract.transfer(toAddress, tokenId, amount);
View in React SDK Documentation