Pack
When using the Pack smart contract, additional top-level functionality is available to use.
To access the top-level functionality, provide the marketplace
contract type when creating the contract instance:
Contract contract = sdk.GetContract("0x...");
Pack pack = contract.pack;
AddPackContents
Add additional tokens to the pool of tokens that can be opened from a pack.
// Define ERC20 rewards to add to the pack
ERC20Reward erc20Reward = new ERC20Reward();
erc20Reward.contractAddress = "0x123abc";
erc20Reward.quantityPerReward = "100";
// Define ERC721 rewards to add to the pack
ERC721Reward erc721Reward = new ERC721Reward();
erc721Reward.contractAddress = "0x456def";
erc721Reward.tokenId = "12345";
// Define ERC1155 rewards to add to the pack
ERC1155Reward erc1155Reward = new ERC1155Reward();
erc1155Reward.contractAddress = "0x789ghi";
erc1155Reward.tokenId = "67890";
erc1155Reward.quantityPerReward = "5";
PackRewards packRewards = new PackRewards();
packRewards.erc20Rewards = new List<ERC20Reward>() { erc20Reward };
packRewards.erc721Rewards = new List<ERC721Reward>() { erc721Reward };
packRewards.erc1155Rewards = new List<ERC1155Reward>() { erc1155Reward };
var data = await pack.AddPackContents("{{token_id}}", packRewards);
Configuration
packId
The ID of the pack you want to add tokens to.
For example, in your pack contract you may have a common pack with ID 0
and a rare pack with ID 1
.
To add more tokens to the common pack, you would pass "0"
as the packId
.
Must be a string
.
rewards
An instance of the PackRewards
class containing the tokens you want to add to the pack.
Create
Mint a new pack NFT, which can be opened to receive rewards, to the connected wallet.
Each pack NFT is an ERC1155 token, which means it can have more than one quantity.
Provide the metadata for the pack NFT itself, and the rewards that can be opened from the pack.
The quantity of packs created is determined by the total number of rewards available, divided by the number of rewards per pack.
For example, if you had 20
total ERC20 rewards + 60
total ERC1155 rewards + 20
total ERC721 rewards,
and you wanted to create packs with 5
rewards each, the result would be the creation of 20
packs (100 total rewards / 5 rewards per pack = 20 packs).
var packContents = new PackContents
{
erc20Contents = new List<ERC20Contents>
{
new ERC20Contents
{
contractAddress = "0x1234567890123456789012345678901234567890",
quantityPerReward = "10",
totalRewards = "5",
}
},
erc721Contents = new List<ERC721Contents>
{
new ERC721Contents
{
contractAddress = "0x0987654321098765432109876543210987654321",
tokenId = "1234"
}
},
erc1155Contents = new List<ERC1155Contents>
{
new ERC1155Contents
{
contractAddress = "0x4567890123456789012345678901234567890123",
tokenId = "5678",
quantityPerReward = "1",
totalRewards = "1",
}
}
};
var newPackInput = new NewPackInput
{
packMetadata = new NFTMetadata
{
name = "My Pack",
description = "A pack of rewards",
image = "https://example.com/pack.png",
external_url = "https://example.com/pack"
},
rewardsPerPack = "3",
erc20Contents = packContents.erc20Contents,
erc721Contents = packContents.erc721Contents,
erc1155Contents = packContents.erc1155Contents
};
var data = await pack.Create(newPackInput);
Configuration
packMetadata
An NFTMetadata
struct containing standard metadata properties.
The metadata is uploaded and pinned to IPFS for you before the packs are minted. The IPFS URI is then used as the metadata for the pack NFT.
erc20Contents
A list of of ERC20 tokens to include in the pack.
Each item in the list must contain a contractAddress
, quantityPerReward
, and totalRewards
property.
erc721Contents
A list of ERC721 tokens to include in the pack.
Each item in the list must contain a contractAddress
and tokenId
property.
erc1155Contents
A list of ERC1155 tokens to include in the pack.
Each item in the list must contain a contractAddress
, tokenId
, quantityPerReward
, and totalRewards
property.
rewardsPerPack
The number of rewards in each pack.
Must be a string
.
CreateTo
The same as Create
, but allows you to specify the address that will receive the pack NFT(s), rather than using the connected wallet.
var packContents = new PackContents
{
erc20Contents = new List<ERC20Contents>
{
new ERC20Contents
{
contractAddress = "0x1234567890123456789012345678901234567890",
quantityPerReward = "10",
totalRewards = "5",
}
},
erc721Contents = new List<ERC721Contents>
{
new ERC721Contents
{
contractAddress = "0x0987654321098765432109876543210987654321",
tokenId = "1234"
}
},
erc1155Contents = new List<ERC1155Contents>
{
new ERC1155Contents
{
contractAddress = "0x4567890123456789012345678901234567890123",
tokenId = "5678",
quantityPerReward = "1",
totalRewards = "1",
}
}
};
var newPackInput = new NewPackInput
{
packMetadata = new NFTMetadata
{
name = "My Pack",
description = "A pack of rewards",
image = "https://example.com/pack.png",
external_url = "https://example.com/pack"
},
rewardsPerPack = "3",
erc20Contents = packContents.erc20Contents,
erc721Contents = packContents.erc721Contents,
erc1155Contents = packContents.erc1155Contents
};
var data = await pack.CreateTo("{{wallet_address}}", newPackInput);
Configuration
GetPackContents
Get all the tokens that were "wrapped up" in the pack NFTs when they were created.
var data = await pack.GetPackContents("{{pack_id}}");
Configuration
Open
Open a pack NFT to receive the rewards inside.
To open a pack, the wallet that initiates this transaction must have sufficient quantity of the pack NFT to open.
var data = await pack.Open("{{pack_id}}", "{{amount}}");
Configuration
Balance
Get the quantity of a specific NFT owned by the connected wallet.
var data = await contract.ERC1155.Balance("{{token_id}}");
Configuration
BalanceOf
Get the quantity of a specific NFT owned by a wallet.
var data = await contract.ERC1155.BalanceOf("{{wallet_address}}", "{{token_id}}");
Configuration
Get
Get the metadata of an NFT using it’s token ID.
Metadata is fetched from the uri
property of the NFT.
If the metadata is hosted on IPFS, the metadata is fetched and made available as an object.
The object’s image
property will be a URL that is available through the thirdweb IPFS gateway.
Configuration
tokenId
The token ID of the NFT to get the metadata for.
Must be a string
.
Return Value
Returns an NFT
struct containing the following properties:
{
{
string id;
string uri;
string description;
string image;
string name;
string external_url;
object attributes;
}
string owner;
string type;
int supply;
int quantityOwned; // only for ERC1155
}
Transfer
Transfer an NFT from the connected wallet to another wallet.
var data = await contract.ERC1155.Transfer("{{wallet_address}}", "{{token_id}}", 1);
Configuration
IsApprovedForAll
Get whether this wallet has approved transfers from the given operator.
This means that the operator can transfer NFTs on behalf of this wallet.
var data = await contract.ERC1155.IsApprovedForAll("{{owner_address}}", "{{operator_address}}");
Configuration
SetApprovalForAll
Give another address approval (or remove approval) to transfer all of your NFTs from this collection.
Proceed with caution. Only approve addresses you trust.
var data = await contract.ERC1155.SetApprovalForAll("{{operator_address}}", true);
Configuration
TotalCount
Get the total number of unique NFTs in the collection.
var data = await contract.ERC1155.TotalCount();
Configuration
TotalSupply
Returns the total supply of a token in the collection, including burned tokens.
var data = await contract.ERC1155.TotalSupply("{{token_id}}");
Configuration
GetAll
Get the metadata and current owner of all NFTs in the contract.
By default, returns the first 100
NFTs (in order of token ID). Use queryParams
to paginate the results.
var data = await contract.ERC1155.GetAll();
Configuration
queryParams (optional)
Provide an optional object to configure the query. Useful for paginating the results.
var data = await contract.ERC1155.GetAll(new QueryAllParams()
{
count = 100,
start = 0
});
Return Value
Returns a list of NFT
structs, each containing the following properties:
{
{
string id;
string uri;
string description;
string image;
string name;
string external_url;
object attributes;
}
string owner;
string type;
int supply;
int quantityOwned;
}
GetOwned
Get all the data associated with the NFTs owned by a specific wallet.
var data = await contract.ERC1155.GetOwned();
Configuration
address
The address of the wallet to get the NFTs of.
Must be a string
.
Return Value
Returns a list of NFT
structs, each containing the following properties:
{
{
string id;
string uri;
string description;
string image;
string name;
string external_url;
object attributes;
}
string owner;
string type;
int supply;
int quantityOwned;
}