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.

import { useContract } from '@thirdweb-dev/react'

export default function Component() {
const { contract } = usePack("<YOUR-CONTRACT-ADDRESS>", "pack")

// Now you can use the pack contract in the rest of the component
}

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

View Packs

One

Get a single Pack
const tokenId = 0; // the tokenId to look up
const { data: nft, isLoading, error } = useNFT(contract, tokenId);
View in React SDK Documentation

All

Get All Packs
const { data: nfts, isLoading, error } = useNFTs(contract, { start: 0, count: 100 });
View in React SDK Documentation

Owned by a specific wallet

Get Owned Packs
const { data: ownedNFTs, isLoading, error } = useOwnedNFTs(contract, "{{wallet_address}}");
View in React SDK Documentation

Amount owned by a specific wallet

Get NFT Balance
const { data: ownerBalance, isLoading, error } = useNFTBalance(contract, "{{wallet_address}}");
// for ERC1155 contracts, you can also pass a tokenId
const tokenId = 0;
const { data: ownerBalance, isLoading, error } = useNFTBalance(contract, "{{wallet_address}}", 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.