1
+ using System . Collections . Generic ;
2
+ using System . Threading . Tasks ;
3
+
4
+ namespace Thirdweb
5
+ {
6
+ /// <summary>
7
+ /// Interact with a Pack contract.
8
+ /// </summary>
9
+ public class Pack : Routable
10
+ {
11
+ public string chain ;
12
+ public string address ;
13
+
14
+ /// <summary>
15
+ /// Interact with a Marketplace contract.
16
+ /// </summary>
17
+ public Pack ( string chain , string address ) : base ( $ "{ address } { subSeparator } pack")
18
+ {
19
+ this . chain = chain ;
20
+ this . address = address ;
21
+ }
22
+
23
+ /// READ FUNCTIONS
24
+
25
+ /// <summary>
26
+ /// Get a NFT in this contract by its ID
27
+ /// </summary>
28
+ public async Task < NFT > Get ( string tokenId )
29
+ {
30
+ return await Bridge . InvokeRoute < NFT > ( getRoute ( "get" ) , Utils . ToJsonStringArray ( tokenId ) ) ;
31
+ }
32
+
33
+ /// <summary>
34
+ /// Get a all NFTs in this contract
35
+ /// </summary>
36
+ public async Task < List < NFT > > GetAll ( QueryAllParams queryParams = null )
37
+ {
38
+ return await Bridge . InvokeRoute < List < NFT > > ( getRoute ( "getAll" ) , Utils . ToJsonStringArray ( queryParams ) ) ;
39
+ }
40
+
41
+ /// <summary>
42
+ /// Get a all NFTs owned by the connected wallet
43
+ /// </summary>
44
+ /// <param name="address">Optional wallet address to query NFTs of</param>
45
+ public async Task < List < NFT > > GetOwned ( string address = null )
46
+ {
47
+ return await Bridge . InvokeRoute < List < NFT > > ( getRoute ( "getOwned" ) , Utils . ToJsonStringArray ( address ) ) ;
48
+ }
49
+
50
+ /// <summary>
51
+ /// Get the balance of the given NFT for the connected wallet
52
+ /// </summary>
53
+ public async Task < string > Balance ( string tokenId )
54
+ {
55
+ return await Bridge . InvokeRoute < string > ( getRoute ( "balance" ) , new string [ ] { } ) ;
56
+ }
57
+
58
+ /// <summary>
59
+ /// Get the balance of the given NFT for the given wallet address
60
+ /// </summary>
61
+ public async Task < string > BalanceOf ( string address , string tokenId )
62
+ {
63
+ return await Bridge . InvokeRoute < string > ( getRoute ( "balanceOf" ) , Utils . ToJsonStringArray ( address , tokenId ) ) ;
64
+ }
65
+
66
+ /// <summary>
67
+ /// Check whether the given contract address has been approved to transfer NFTs on behalf of the given wallet address
68
+ /// </summary>
69
+ /// <param name="address">The wallet address</param>
70
+ /// <param name="contractAddress">The contract address to check approval for</param>
71
+ public async Task < string > IsApprovedForAll ( string address , string approvedContract )
72
+ {
73
+ return await Bridge . InvokeRoute < string > ( getRoute ( "isApproved" ) , Utils . ToJsonStringArray ( address , approvedContract ) ) ;
74
+ }
75
+
76
+ public async Task < int > TotalCount ( )
77
+ {
78
+ return await Bridge . InvokeRoute < int > ( getRoute ( "totalCount" ) , new string [ ] { } ) ;
79
+ }
80
+
81
+ /// <summary>
82
+ /// Get the total suppply in circulation for thge given NFT
83
+ /// </summary>
84
+ public async Task < int > TotalSupply ( string tokenId )
85
+ {
86
+ return await Bridge . InvokeRoute < int > ( getRoute ( "totalSupply" ) , Utils . ToJsonStringArray ( tokenId ) ) ;
87
+ }
88
+
89
+ /// <summary>
90
+ /// Get all the possible contents of a given pack
91
+ /// </summary>
92
+ public async Task < PackContents > GetPackContents ( string packId )
93
+ {
94
+ return await Bridge . InvokeRoute < PackContents > ( getRoute ( "getPackContents" ) , Utils . ToJsonStringArray ( packId ) ) ;
95
+ }
96
+
97
+ /// WRITE FUNCTIONS
98
+
99
+ /// <summary>
100
+ /// Set approval to the given contract to transfer NFTs on behalf of the connected wallet
101
+ /// </summary>
102
+ public async Task < TransactionResult > SetApprovalForAll ( string contractToApprove , bool approved )
103
+ {
104
+ return await Bridge . InvokeRoute < TransactionResult > ( getRoute ( "isApproved" ) , Utils . ToJsonStringArray ( contractToApprove , approved ) ) ;
105
+ }
106
+
107
+ /// <summary>
108
+ /// Transfer NFTs to the given address
109
+ /// </summary>
110
+ public async Task < TransactionResult > Transfer ( string to , string tokenId , int amount )
111
+ {
112
+ return await Bridge . InvokeRoute < TransactionResult > ( getRoute ( "transfer" ) , Utils . ToJsonStringArray ( to , tokenId , amount ) ) ;
113
+ }
114
+
115
+ /// <summary>
116
+ /// Create a new Pack with all the possible rewards (requires approval to transfer tokens/NFTs defined as rewards)
117
+ /// </summary>
118
+ public async Task < TransactionResult > Create ( NewPackInput pack )
119
+ {
120
+ return await Bridge . InvokeRoute < TransactionResult > ( getRoute ( "create" ) , Utils . ToJsonStringArray ( pack ) ) ;
121
+ }
122
+
123
+ /// <summary>
124
+ /// Create a new Pack with all the possible rewards and mints it to the given address (requires approval to transfer tokens/NFTs defined as rewards)
125
+ /// </summary>
126
+ public async Task < TransactionResult > CreateTo ( string receiverAddress , NewPackInput pack )
127
+ {
128
+ return await Bridge . InvokeRoute < TransactionResult > ( getRoute ( "createTo" ) , Utils . ToJsonStringArray ( receiverAddress , pack ) ) ;
129
+ }
130
+
131
+ /// <summary>
132
+ /// Add new contents to an existing pack
133
+ /// </summary>
134
+ public async Task < TransactionResult > AddPackContents ( string packId , PackRewards newContents )
135
+ {
136
+ return await Bridge . InvokeRoute < TransactionResult > ( getRoute ( "addPackContents" ) , Utils . ToJsonStringArray ( packId , newContents ) ) ;
137
+ }
138
+
139
+ /// <summary>
140
+ /// Open a pack and transfer the rewards to the connected wallet
141
+ /// </summary>
142
+ public async Task < PackRewards > Open ( string packId , string amount = "1" )
143
+ {
144
+ return await Bridge . InvokeRoute < PackRewards > ( getRoute ( "open" ) , Utils . ToJsonStringArray ( packId , amount ) ) ;
145
+ }
146
+ }
147
+
148
+ [ System . Serializable ]
149
+ public struct PackRewards
150
+ {
151
+ public List < ERC20Reward > erc20Rewards ;
152
+ public List < ERC721Reward > erc721Rewards ;
153
+ public List < ERC1155Reward > erc1155Rewards ;
154
+ }
155
+
156
+ [ System . Serializable ]
157
+ public class PackContents
158
+ {
159
+ public List < ERC20Contents > erc20Rewards ;
160
+ public List < ERC721Contents > erc721Rewards ;
161
+ public List < ERC1155Contents > erc1155Rewards ;
162
+ }
163
+
164
+ [ System . Serializable ]
165
+ public class NewPackInput : PackContents
166
+ {
167
+ /// The Metadata of the pack NFT itself
168
+ public NFTMetadata packMetadata ;
169
+ /// How many rewards can be obtained by opening a single pack
170
+ public string rewardsPerPack ;
171
+ }
172
+
173
+ [ System . Serializable ]
174
+ public class ERC20Reward
175
+ {
176
+ /// the Token contract address
177
+ public string contractAddress ;
178
+ /// How many tokens can be otained when opening a pack and receiving this reward
179
+ public string quantityPerReward ;
180
+ }
181
+
182
+ [ System . Serializable ]
183
+ public class ERC20Contents : ERC20Reward
184
+ {
185
+ public string totalRewards ;
186
+ }
187
+
188
+ [ System . Serializable ]
189
+ public class ERC721Reward
190
+ {
191
+ /// the ERC721 contract address
192
+ public string contractAddress ;
193
+ /// the tokenId of the NFT to be rewarded
194
+ public string tokenId ;
195
+ }
196
+
197
+ [ System . Serializable ]
198
+ public class ERC721Contents : ERC721Reward
199
+ {
200
+ }
201
+
202
+ [ System . Serializable ]
203
+ public class ERC1155Reward
204
+ {
205
+ /// the ERC1155 contract address
206
+ public string contractAddress ;
207
+ /// the tokenId of the NFT to be rewarded
208
+ public string tokenId ;
209
+ /// How many NFTs can be otained when opening a pack and receiving this reward
210
+ public string quantityPerReward ;
211
+ }
212
+
213
+ [ System . Serializable ]
214
+ public class ERC1155Contents : ERC1155Reward
215
+ {
216
+ public string totalRewards ;
217
+ }
218
+ }
0 commit comments