@bannynet/core-v6 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +53 -0
  2. package/SKILLS.md +94 -0
  3. package/deployments/banny-core-v5/arbitrum/Banny721TokenUriResolver.json +1809 -0
  4. package/deployments/banny-core-v5/arbitrum_sepolia/Banny721TokenUriResolver.json +1795 -0
  5. package/deployments/banny-core-v5/base/Banny721TokenUriResolver.json +1810 -0
  6. package/deployments/banny-core-v5/base_sepolia/Banny721TokenUriResolver.json +1796 -0
  7. package/deployments/banny-core-v5/ethereum/Banny721TokenUriResolver.json +1795 -0
  8. package/deployments/banny-core-v5/optimism/Banny721TokenUriResolver.json +1810 -0
  9. package/deployments/banny-core-v5/optimism_sepolia/Banny721TokenUriResolver.json +1796 -0
  10. package/deployments/banny-core-v5/sepolia/Banny721TokenUriResolver.json +1795 -0
  11. package/foundry.toml +22 -0
  12. package/package.json +53 -0
  13. package/remappings.txt +1 -0
  14. package/script/1.Fix.s.sol +290 -0
  15. package/script/Add.Denver.s.sol +75 -0
  16. package/script/AirdropOutfits.s.sol +2302 -0
  17. package/script/Deploy.s.sol +440 -0
  18. package/script/Drop1.s.sol +979 -0
  19. package/script/MigrationContractArbitrum.sol +494 -0
  20. package/script/MigrationContractArbitrum1.sol +170 -0
  21. package/script/MigrationContractArbitrum2.sol +204 -0
  22. package/script/MigrationContractArbitrum3.sol +174 -0
  23. package/script/MigrationContractArbitrum4.sol +478 -0
  24. package/script/MigrationContractBase1.sol +444 -0
  25. package/script/MigrationContractBase2.sol +175 -0
  26. package/script/MigrationContractBase3.sol +309 -0
  27. package/script/MigrationContractBase4.sol +350 -0
  28. package/script/MigrationContractBase5.sol +259 -0
  29. package/script/MigrationContractEthereum1.sol +468 -0
  30. package/script/MigrationContractEthereum2.sol +306 -0
  31. package/script/MigrationContractEthereum3.sol +349 -0
  32. package/script/MigrationContractEthereum4.sol +352 -0
  33. package/script/MigrationContractEthereum5.sol +354 -0
  34. package/script/MigrationContractEthereum6.sol +270 -0
  35. package/script/MigrationContractEthereum7.sol +439 -0
  36. package/script/MigrationContractEthereum8.sol +385 -0
  37. package/script/MigrationContractOptimism.sol +196 -0
  38. package/script/helpers/BannyverseDeploymentLib.sol +73 -0
  39. package/script/helpers/MigrationHelper.sol +155 -0
  40. package/script/outfit_drop/generate-migration.js +3441 -0
  41. package/script/outfit_drop/raw.json +43276 -0
  42. package/slither-ci.config.json +10 -0
  43. package/sphinx.lock +521 -0
  44. package/src/Banny721TokenUriResolver.sol +1288 -0
  45. package/src/interfaces/IBanny721TokenUriResolver.sol +137 -0
  46. package/test/Banny721TokenUriResolver.t.sol +669 -0
  47. package/test/BannyAttacks.t.sol +322 -0
  48. package/test/DecorateFlow.t.sol +1056 -0
@@ -0,0 +1,979 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity 0.8.23;
3
+
4
+ import {JB721TierConfig} from "@bananapus/721-hook-v5/src/structs/JB721TierConfig.sol";
5
+ import {JB721TiersHook} from "@bananapus/721-hook-v5/src/JB721TiersHook.sol";
6
+
7
+ import "./helpers/BannyverseDeploymentLib.sol";
8
+ import "@rev-net/core-v5/script/helpers/RevnetCoreDeploymentLib.sol";
9
+ import "@openzeppelin/contracts/utils/Strings.sol";
10
+
11
+ import {Sphinx} from "@sphinx-labs/contracts/SphinxPlugin.sol";
12
+ import {Script} from "forge-std/Script.sol";
13
+
14
+ contract Drop1Script is Script, Sphinx {
15
+ /// @notice tracks the deployment of the revnet contracts for the chain we are deploying to.
16
+ RevnetCoreDeployment revnet;
17
+ /// @notice tracks the deployment of the bannyverse contracts for the chain we are deploying to.
18
+ BannyverseDeployment bannyverse;
19
+
20
+ JB721TiersHook hook;
21
+ address reserveBeneficiary;
22
+
23
+ function configureSphinx() public override {
24
+ // TODO: Update to contain revnet devs.
25
+ sphinxConfig.projectName = "banny-core-v5";
26
+ sphinxConfig.mainnets = ["ethereum", "optimism", "base", "arbitrum"];
27
+ sphinxConfig.testnets = ["ethereum_sepolia", "optimism_sepolia", "base_sepolia", "arbitrum_sepolia"];
28
+ }
29
+
30
+ function run() public {
31
+ reserveBeneficiary = safeAddress();
32
+
33
+ // Get the deployment addresses for the revnet contracts for this chain.
34
+ revnet = RevnetCoreDeploymentLib.getDeployment(
35
+ vm.envOr("REVNET_CORE_DEPLOYMENT_PATH", string("node_modules/@rev-net/core-v5/deployments/"))
36
+ );
37
+
38
+ // Get the deployment addresses for the 721 hook contracts for this chain.
39
+ bannyverse =
40
+ BannyverseDeploymentLib.getDeployment(vm.envOr("BANNYVERSE_CORE_DEPLOYMENT_PATH", string("deployments/")));
41
+
42
+ // Get the hook address by using the deployer.
43
+ hook = JB721TiersHook(address(revnet.basic_deployer.tiered721HookOf(bannyverse.revnetId)));
44
+ deploy();
45
+ }
46
+
47
+ function deploy() public sphinx {
48
+ uint256 decimals = 18;
49
+
50
+ string[] memory names = new string[](47);
51
+ bytes32[] memory svgHashes = new bytes32[](47);
52
+ JB721TierConfig[] memory products = new JB721TierConfig[](47);
53
+
54
+ // Desk
55
+ names[0] = "Work Station";
56
+ svgHashes[0] = bytes32(0xab22e30cb6daaac109ea557a14af9b65f680d46cc563a0b25dd42483f9286bf7);
57
+ products[0] = JB721TierConfig({
58
+ price: uint104(1 * (10 ** (decimals - 2))),
59
+ initialSupply: 50,
60
+ votingUnits: 0,
61
+ reserveFrequency: 0,
62
+ reserveBeneficiary: address(0),
63
+ encodedIPFSUri: bytes32(0x5665b0c125d1bccccb78cc0ffc429e66ce41ed3bccebba51209d04636cadbd2c),
64
+ category: 1,
65
+ discountPercent: 0,
66
+ cannotIncreaseDiscountPercent: false,
67
+ allowOwnerMint: false,
68
+ useReserveBeneficiaryAsDefault: false,
69
+ transfersPausable: false,
70
+ useVotingUnits: false,
71
+ cannotBeRemoved: false
72
+ });
73
+ // Hay field
74
+ names[1] = "Hay Field";
75
+ svgHashes[1] = bytes32(0x62f97f668e227ab9d6eaf5bd35504974f3df175ee2d952c39add59b7d141c0de);
76
+ products[1] = JB721TierConfig({
77
+ price: uint104(1 * (10 ** (decimals - 2))),
78
+ initialSupply: 250,
79
+ votingUnits: 0,
80
+ reserveFrequency: 0,
81
+ reserveBeneficiary: address(0),
82
+ encodedIPFSUri: bytes32(0x233dd4173ef4ed0f60822a469277bb328b5ae056d8980301f7bd7ad9df780099),
83
+ category: 1,
84
+ discountPercent: 0,
85
+ cannotIncreaseDiscountPercent: false,
86
+ allowOwnerMint: false,
87
+ useReserveBeneficiaryAsDefault: false,
88
+ transfersPausable: false,
89
+ useVotingUnits: false,
90
+ cannotBeRemoved: false
91
+ });
92
+ // Pew pew
93
+ names[2] = "Pew Pew";
94
+ svgHashes[2] = bytes32(0x71f6918188cd0bc9eb1d5baed9340491efb41af1d358bbeb10912a02e95323f8);
95
+ products[2] = JB721TierConfig({
96
+ price: uint104(1 * (10 ** (decimals - 2))),
97
+ initialSupply: 150,
98
+ votingUnits: 0,
99
+ reserveFrequency: 0,
100
+ reserveBeneficiary: address(0),
101
+ encodedIPFSUri: bytes32(0x6cb06872575a04a0c4527157eb4719be10b6474d08aa2ce2a4ac5bcb0da996ea),
102
+ category: 2,
103
+ discountPercent: 0,
104
+ cannotIncreaseDiscountPercent: false,
105
+ allowOwnerMint: false,
106
+ useReserveBeneficiaryAsDefault: false,
107
+ transfersPausable: false,
108
+ useVotingUnits: false,
109
+ cannotBeRemoved: false
110
+ });
111
+ // Bandolph staff
112
+ names[3] = "Bandolph Staff";
113
+ svgHashes[3] = bytes32(0x790e607150e343fd457bb0cefe5fd12cd216b722dabfa19adbee1f1e537fd1c7);
114
+ products[3] = JB721TierConfig({
115
+ price: uint104(125 * (10 ** (decimals - 3))),
116
+ initialSupply: 250,
117
+ votingUnits: 0,
118
+ reserveFrequency: 0,
119
+ reserveBeneficiary: address(0),
120
+ encodedIPFSUri: bytes32(0x7206771942e806053d6ed8aa90040e53a07319e4fd1f938fc4a10879b7bd2da9),
121
+ category: 2,
122
+ discountPercent: 0,
123
+ cannotIncreaseDiscountPercent: false,
124
+ allowOwnerMint: false,
125
+ useReserveBeneficiaryAsDefault: false,
126
+ transfersPausable: false,
127
+ useVotingUnits: false,
128
+ cannotBeRemoved: false
129
+ });
130
+ // Block chain
131
+ names[4] = "Block Chain";
132
+ svgHashes[4] = bytes32(0x5e609d387ea091bc8884a753ddd28dd43b8ed1243b29de6e9354ef1ab109a0b9);
133
+ products[4] = JB721TierConfig({
134
+ price: uint104(125 * (10 ** (decimals - 2))),
135
+ initialSupply: 12,
136
+ votingUnits: 0,
137
+ reserveFrequency: 12,
138
+ reserveBeneficiary: address(0),
139
+ encodedIPFSUri: bytes32(0xef6478be50575bade53e7ce4c9fb5b399643bcabed94f2111afb63e97fb9fd44),
140
+ category: 3,
141
+ discountPercent: 0,
142
+ cannotIncreaseDiscountPercent: false,
143
+ allowOwnerMint: false,
144
+ useReserveBeneficiaryAsDefault: false,
145
+ transfersPausable: false,
146
+ useVotingUnits: false,
147
+ cannotBeRemoved: false
148
+ });
149
+ // Astronaut Head
150
+ names[5] = "Astronaut Head";
151
+ svgHashes[5] = bytes32(0x7054504d4eef582f2e3411df719fba9d90e94c2054bf48e2efa175b4f37cc1e9);
152
+ products[5] = JB721TierConfig({
153
+ price: uint104(1 * (10 ** (decimals - 3))),
154
+ initialSupply: 1000,
155
+ votingUnits: 0,
156
+ reserveFrequency: 0,
157
+ reserveBeneficiary: address(0),
158
+ encodedIPFSUri: bytes32(0xe26d20762024435aedd91058ac9bc9900d719e1f7a04cace501d83a4c1f40941),
159
+ category: 4,
160
+ discountPercent: 0,
161
+ cannotIncreaseDiscountPercent: false,
162
+ allowOwnerMint: false,
163
+ useReserveBeneficiaryAsDefault: false,
164
+ transfersPausable: false,
165
+ useVotingUnits: false,
166
+ cannotBeRemoved: false
167
+ });
168
+ // Nerd
169
+ names[6] = "Nerd Glasses";
170
+ svgHashes[6] = bytes32(0x964356f8cbc40b81653a219d94da9d49d0bd5b745aa6bf4db16a14aa81c129ac);
171
+ products[6] = JB721TierConfig({
172
+ price: uint104(1 * (10 ** (decimals - 2))),
173
+ initialSupply: 100,
174
+ votingUnits: 0,
175
+ reserveFrequency: 25,
176
+ reserveBeneficiary: address(0),
177
+ encodedIPFSUri: bytes32(0x9f76cb495fd79397cba4fe3d377a5aa2fdd63df218f3b3022c6cc8e32478b494),
178
+ category: 6,
179
+ discountPercent: 0,
180
+ cannotIncreaseDiscountPercent: false,
181
+ allowOwnerMint: false,
182
+ useReserveBeneficiaryAsDefault: false,
183
+ transfersPausable: false,
184
+ useVotingUnits: false,
185
+ cannotBeRemoved: false
186
+ });
187
+ // Banny vision pro
188
+ names[7] = "Banny Vision Pro";
189
+ svgHashes[7] = bytes32(0x12702d5d843aff058610a01286446401be4175c27abaaec144d8970f99db34e2);
190
+ products[7] = JB721TierConfig({
191
+ price: uint104(1 * (10 ** decimals)),
192
+ initialSupply: 100,
193
+ votingUnits: 0,
194
+ reserveFrequency: 25,
195
+ reserveBeneficiary: reserveBeneficiary,
196
+ encodedIPFSUri: bytes32(0xf01423f9dae3de4adc7e372e6902a351e2c6193a385dde90f5baf37165914831),
197
+ category: 6,
198
+ discountPercent: 0,
199
+ cannotIncreaseDiscountPercent: false,
200
+ allowOwnerMint: false,
201
+ useReserveBeneficiaryAsDefault: true,
202
+ transfersPausable: false,
203
+ useVotingUnits: false,
204
+ cannotBeRemoved: false
205
+ });
206
+ // Cyberpunk glasses
207
+ names[8] = "Cyberpunk Glasses";
208
+ svgHashes[8] = bytes32(0x5930f0bb8cb34d82b88a13391bcccf936e09be535f2848ba7911b2a98615585d);
209
+ products[8] = JB721TierConfig({
210
+ price: uint104(1 * (10 ** (decimals - 2))),
211
+ initialSupply: 150,
212
+ votingUnits: 0,
213
+ reserveFrequency: 0,
214
+ reserveBeneficiary: address(0),
215
+ encodedIPFSUri: bytes32(0x325c138f1f38e5b5f90a57a248a2f5afe6af738b2adfc825cf9f413bbcf50fa1),
216
+ category: 6,
217
+ discountPercent: 0,
218
+ cannotIncreaseDiscountPercent: false,
219
+ allowOwnerMint: false,
220
+ useReserveBeneficiaryAsDefault: false,
221
+ transfersPausable: false,
222
+ useVotingUnits: false,
223
+ cannotBeRemoved: false
224
+ });
225
+ // Investor shades
226
+ names[9] = "Investor Shades";
227
+ svgHashes[9] = bytes32(0x4410654936785cff70498421a8805ad2f9d5101a8c18168264ef94df671db10e);
228
+ products[9] = JB721TierConfig({
229
+ price: uint104(1 * (10 ** (decimals - 2))),
230
+ initialSupply: 250,
231
+ votingUnits: 0,
232
+ reserveFrequency: 50,
233
+ reserveBeneficiary: address(0),
234
+ encodedIPFSUri: bytes32(0x7dc7e556a7ac39c473da85165df3d094c6ed9258003fb7dc3d9a8582bcb0dc7f),
235
+ category: 6,
236
+ discountPercent: 0,
237
+ cannotIncreaseDiscountPercent: false,
238
+ allowOwnerMint: false,
239
+ useReserveBeneficiaryAsDefault: false,
240
+ transfersPausable: false,
241
+ useVotingUnits: false,
242
+ cannotBeRemoved: false
243
+ });
244
+ // Proff glasses
245
+ names[10] = "Proff Glasses";
246
+ svgHashes[10] = bytes32(0x54004065d83ca03befdf72236331f5b532c00920613d8774ebd8edbf277c345a);
247
+ products[10] = JB721TierConfig({
248
+ price: uint104(1 * (10 ** (decimals - 2))),
249
+ initialSupply: 200,
250
+ votingUnits: 0,
251
+ reserveFrequency: 0,
252
+ reserveBeneficiary: address(0),
253
+ encodedIPFSUri: bytes32(0xb06dbd64696994798dee9e00d406a649191524a95e715532f1bdebc92f00aebd),
254
+ category: 6,
255
+ discountPercent: 0,
256
+ cannotIncreaseDiscountPercent: false,
257
+ allowOwnerMint: false,
258
+ useReserveBeneficiaryAsDefault: false,
259
+ transfersPausable: false,
260
+ useVotingUnits: false,
261
+ cannotBeRemoved: false
262
+ });
263
+ // Gap tooth
264
+ names[11] = "Gap Teeth";
265
+ svgHashes[11] = bytes32(0x5b5a29873435b40784f64c5d9bb5d95ecebd433c57493e38f3eb816a0dd9fd7f);
266
+ products[11] = JB721TierConfig({
267
+ price: uint104(1 * (10 ** (decimals - 1))),
268
+ initialSupply: 50,
269
+ votingUnits: 0,
270
+ reserveFrequency: 10,
271
+ reserveBeneficiary: address(0),
272
+ encodedIPFSUri: bytes32(0x52815d712399165b921df61795581a8c20ad9acf3502e777e20a782b7bc11d54),
273
+ category: 7,
274
+ discountPercent: 0,
275
+ cannotIncreaseDiscountPercent: false,
276
+ allowOwnerMint: false,
277
+ useReserveBeneficiaryAsDefault: false,
278
+ transfersPausable: false,
279
+ useVotingUnits: false,
280
+ cannotBeRemoved: false
281
+ });
282
+ // Dorthy shoes
283
+ names[12] = "Dorthy Shoes";
284
+ svgHashes[12] = bytes32(0x67a973e1023d2a9a37270e4345f9e93b30828ec64bc81c0d1d56028f8e976491);
285
+ products[12] = JB721TierConfig({
286
+ price: uint104(1 * (10 ** (decimals - 2))),
287
+ initialSupply: 250,
288
+ votingUnits: 0,
289
+ reserveFrequency: 0,
290
+ reserveBeneficiary: address(0),
291
+ encodedIPFSUri: bytes32(0x8a1b694033a47ad08b648d2608fa1b86dccdb0f431795c470605a819988f55ad),
292
+ category: 8,
293
+ discountPercent: 0,
294
+ cannotIncreaseDiscountPercent: false,
295
+ allowOwnerMint: false,
296
+ useReserveBeneficiaryAsDefault: false,
297
+ transfersPausable: false,
298
+ useVotingUnits: false,
299
+ cannotBeRemoved: false
300
+ });
301
+ // Astronaut boots
302
+ names[13] = "Astronaut Boots";
303
+ svgHashes[13] = bytes32(0x539f9417dd22ba8aacd4029753f6058b5f905eef2a3b07acb519c964fc57ce50);
304
+ products[13] = JB721TierConfig({
305
+ price: uint104(1 * (10 ** (decimals - 2))),
306
+ initialSupply: 250,
307
+ votingUnits: 0,
308
+ reserveFrequency: 0,
309
+ reserveBeneficiary: address(0),
310
+ encodedIPFSUri: bytes32(0x39cd82854f76c22afccaf4ad6f055d4e225c2e225f322154f1c3d327cbaccb5a),
311
+ category: 8,
312
+ discountPercent: 0,
313
+ cannotIncreaseDiscountPercent: false,
314
+ allowOwnerMint: false,
315
+ useReserveBeneficiaryAsDefault: false,
316
+ transfersPausable: false,
317
+ useVotingUnits: false,
318
+ cannotBeRemoved: false
319
+ });
320
+ // Flops
321
+ names[14] = "Flops";
322
+ svgHashes[14] = bytes32(0x0a322735b4b89b7a593a86615ccc03e14867ce1cfd57c1aa9a61a841d9498103);
323
+ products[14] = JB721TierConfig({
324
+ price: uint104(1 * (10 ** (decimals - 3))),
325
+ initialSupply: 500,
326
+ votingUnits: 0,
327
+ reserveFrequency: 10,
328
+ reserveBeneficiary: address(0),
329
+ encodedIPFSUri: bytes32(0x4e87f483ea20c1537f24c2a586acd14819ca2a6cba1bab68365361e45374f9f9),
330
+ category: 8,
331
+ discountPercent: 0,
332
+ cannotIncreaseDiscountPercent: false,
333
+ allowOwnerMint: false,
334
+ useReserveBeneficiaryAsDefault: false,
335
+ transfersPausable: false,
336
+ useVotingUnits: false,
337
+ cannotBeRemoved: false
338
+ });
339
+ // Astronaut Body
340
+ names[15] = "Astronaut Suit";
341
+ svgHashes[15] = bytes32(0xdbcfc1891ab9d56cb964f3432f867a77293352e38edca3b59b34061e46a31b83);
342
+ products[15] = JB721TierConfig({
343
+ price: uint104(1 * (10 ** (decimals - 2))),
344
+ initialSupply: 250,
345
+ votingUnits: 0,
346
+ reserveFrequency: 0,
347
+ reserveBeneficiary: address(0),
348
+ encodedIPFSUri: bytes32(0x5fbc1c58d608acd436c18e11edc72d3ae436e1a4c15d127b28a9a24879013d3c),
349
+ category: 9,
350
+ discountPercent: 0,
351
+ cannotIncreaseDiscountPercent: false,
352
+ allowOwnerMint: false,
353
+ useReserveBeneficiaryAsDefault: false,
354
+ transfersPausable: false,
355
+ useVotingUnits: false,
356
+ cannotBeRemoved: false
357
+ });
358
+ // Sweatsuit
359
+ names[16] = "Sweatsuit";
360
+ svgHashes[16] = bytes32(0xfbb3a6dde059e3e3115c3e83fd675d1739ec29afa62999fa759ed878f48e9aa2);
361
+ products[16] = JB721TierConfig({
362
+ price: uint104(1 * (10 ** (decimals - 1))),
363
+ initialSupply: 24,
364
+ votingUnits: 0,
365
+ reserveFrequency: 6,
366
+ reserveBeneficiary: address(0),
367
+ encodedIPFSUri: bytes32(0x823466de69eaf605d3a62366e5e9dbd6649a71da146f791f94628d4749a2da55),
368
+ category: 9,
369
+ discountPercent: 0,
370
+ cannotIncreaseDiscountPercent: false,
371
+ allowOwnerMint: false,
372
+ useReserveBeneficiaryAsDefault: false,
373
+ transfersPausable: false,
374
+ useVotingUnits: false,
375
+ cannotBeRemoved: false
376
+ });
377
+ // Dorthy dress
378
+ names[17] = "Dorthy Dress";
379
+ svgHashes[17] = bytes32(0xfc0eda6d0165d339239bfda3cf68d630949b03c588e3b6d45175c6fc8f00e289);
380
+ products[17] = JB721TierConfig({
381
+ price: uint104(1 * (10 ** (decimals - 2))),
382
+ initialSupply: 250,
383
+ votingUnits: 0,
384
+ reserveFrequency: 0,
385
+ reserveBeneficiary: address(0),
386
+ encodedIPFSUri: bytes32(0x017db86219678b824995b8556e7073d65af87212671312212365497708675c41),
387
+ category: 9,
388
+ discountPercent: 0,
389
+ cannotIncreaseDiscountPercent: false,
390
+ allowOwnerMint: false,
391
+ useReserveBeneficiaryAsDefault: false,
392
+ transfersPausable: false,
393
+ useVotingUnits: false,
394
+ cannotBeRemoved: false
395
+ });
396
+ // Geisha body
397
+ names[18] = "Geisha Gown";
398
+ svgHashes[18] = bytes32(0x5f8c77bc896a90a35580078ee7ea51460b5694aec68db3d749fd1dc0e9b05c6c);
399
+ products[18] = JB721TierConfig({
400
+ price: uint104(1 * (10 ** (decimals - 2))),
401
+ initialSupply: 100,
402
+ votingUnits: 0,
403
+ reserveFrequency: 50,
404
+ reserveBeneficiary: address(0),
405
+ encodedIPFSUri: bytes32(0xdf7d4084b087b22cc172e1df3a2b465b5386a950e9bcd53ed424014a0a86ee57),
406
+ category: 9,
407
+ discountPercent: 0,
408
+ cannotIncreaseDiscountPercent: false,
409
+ allowOwnerMint: false,
410
+ useReserveBeneficiaryAsDefault: false,
411
+ transfersPausable: false,
412
+ useVotingUnits: false,
413
+ cannotBeRemoved: false
414
+ });
415
+ // Baggies
416
+ names[19] = "Baggies";
417
+ svgHashes[19] = bytes32(0x2f0cab70c7d07048ccc7b6855bba39cdd95be15a109c8eaa401d9be6d503ca2a);
418
+ products[19] = JB721TierConfig({
419
+ price: uint104(15 * (10 ** (decimals - 2))),
420
+ initialSupply: 30,
421
+ votingUnits: 0,
422
+ reserveFrequency: 15,
423
+ reserveBeneficiary: address(0),
424
+ encodedIPFSUri: bytes32(0x745b3b4f18aab6ad0d8465d34751ca8eb5b9c267dee6ec8bf63686b508afacf3),
425
+ category: 10,
426
+ discountPercent: 0,
427
+ cannotIncreaseDiscountPercent: false,
428
+ allowOwnerMint: false,
429
+ useReserveBeneficiaryAsDefault: false,
430
+ transfersPausable: false,
431
+ useVotingUnits: false,
432
+ cannotBeRemoved: false
433
+ });
434
+ // Jonny utah shirt
435
+ names[20] = "Jonny Utah Shirt";
436
+ svgHashes[20] = bytes32(0xf62770cf77965461df8528baec000228c713e749b4dcc12e278b1025507dc0ff);
437
+ products[20] = JB721TierConfig({
438
+ price: uint104(1 * (10 ** (decimals - 3))),
439
+ initialSupply: 250,
440
+ votingUnits: 0,
441
+ reserveFrequency: 0,
442
+ reserveBeneficiary: address(0),
443
+ encodedIPFSUri: bytes32(0x815c7dfb119da1e3802754f8ce364caf7a8069e331e35c3f20446800579d8df8),
444
+ category: 11,
445
+ discountPercent: 0,
446
+ cannotIncreaseDiscountPercent: false,
447
+ allowOwnerMint: false,
448
+ useReserveBeneficiaryAsDefault: false,
449
+ transfersPausable: false,
450
+ useVotingUnits: false,
451
+ cannotBeRemoved: false
452
+ });
453
+ // Doc coat
454
+ names[21] = "Doc Coat";
455
+ svgHashes[21] = bytes32(0x6650b989b4ad53d12fd306bf4a12f5afbca2072c3241fdcb96e434443039d1f7);
456
+ products[21] = JB721TierConfig({
457
+ price: uint104(1 * (10 ** (decimals - 2))),
458
+ initialSupply: 250,
459
+ votingUnits: 0,
460
+ reserveFrequency: 0,
461
+ reserveBeneficiary: address(0),
462
+ encodedIPFSUri: bytes32(0xc77fe2f93a5a48ad7f59a3c6c40dd76317e47605fcb74b85a4c5bea160fdab6e),
463
+ category: 11,
464
+ discountPercent: 0,
465
+ cannotIncreaseDiscountPercent: false,
466
+ allowOwnerMint: false,
467
+ useReserveBeneficiaryAsDefault: false,
468
+ transfersPausable: false,
469
+ useVotingUnits: false,
470
+ cannotBeRemoved: false
471
+ });
472
+ // Goat jersey
473
+ names[22] = "Goat Jersey";
474
+ svgHashes[22] = bytes32(0xcca8b9f46f75822d78e7f3125ba4832e24ffe1711f6f01d00cdccb6669f752f2);
475
+ products[22] = JB721TierConfig({
476
+ price: uint104(1 * (10 ** (decimals - 1))),
477
+ initialSupply: 50,
478
+ votingUnits: 0,
479
+ reserveFrequency: 10,
480
+ reserveBeneficiary: address(0),
481
+ encodedIPFSUri: bytes32(0x2b62afa12feb307f005902e6bec09f15f8f5d7ba09d937f1162e5d2f00c21e12),
482
+ category: 11,
483
+ discountPercent: 0,
484
+ cannotIncreaseDiscountPercent: false,
485
+ allowOwnerMint: false,
486
+ useReserveBeneficiaryAsDefault: false,
487
+ transfersPausable: false,
488
+ useVotingUnits: false,
489
+ cannotBeRemoved: false
490
+ });
491
+ // Irie tshirt
492
+ names[23] = "Irie Shirt";
493
+ svgHashes[23] = bytes32(0xd26b2eaad19396b85f4ae09c702717969b72b8c63021821e0d35addd85e7bbd1);
494
+ products[23] = JB721TierConfig({
495
+ price: uint104(1 * (10 ** (decimals - 3))),
496
+ initialSupply: 250,
497
+ votingUnits: 0,
498
+ reserveFrequency: 0,
499
+ reserveBeneficiary: address(0),
500
+ encodedIPFSUri: bytes32(0x4d4b149bded92db977ac35a77bcfff72270eaee404db8751b27ec18030511d3b),
501
+ category: 11,
502
+ discountPercent: 0,
503
+ cannotIncreaseDiscountPercent: false,
504
+ allowOwnerMint: false,
505
+ useReserveBeneficiaryAsDefault: false,
506
+ transfersPausable: false,
507
+ useVotingUnits: false,
508
+ cannotBeRemoved: false
509
+ });
510
+ // Punk jacket
511
+ names[24] = "Punk Jacket";
512
+ svgHashes[24] = bytes32(0x44cb972aab236c8c01afef7addb0f19a0fab02cfdc7b5065d662b53ab970f310);
513
+ products[24] = JB721TierConfig({
514
+ price: uint104(1 * (10 ** (decimals - 1))),
515
+ initialSupply: 50,
516
+ votingUnits: 0,
517
+ reserveFrequency: 0,
518
+ reserveBeneficiary: address(0),
519
+ encodedIPFSUri: bytes32(0x5ec40dc2aad2a009266337a198d4b9098cd968d08c06cdc328efd4789f974aa4),
520
+ category: 11,
521
+ discountPercent: 0,
522
+ cannotIncreaseDiscountPercent: false,
523
+ allowOwnerMint: false,
524
+ useReserveBeneficiaryAsDefault: false,
525
+ transfersPausable: false,
526
+ useVotingUnits: false,
527
+ cannotBeRemoved: false
528
+ });
529
+ // Zipper jacket
530
+ names[25] = "Zipper Jacket";
531
+ svgHashes[25] = bytes32(0x7177dfec617d77cf78e8393fe373b68c7bc755edd1541c0decc952e99ec80304);
532
+ products[25] = JB721TierConfig({
533
+ price: uint104(15 * (10 ** (decimals - 2))),
534
+ initialSupply: 25,
535
+ votingUnits: 0,
536
+ reserveFrequency: 25,
537
+ reserveBeneficiary: address(0),
538
+ encodedIPFSUri: bytes32(0xb8658c65907f280bfbd228ec384f0dfdfe55401505dc0f303d7d3d6a68a6414b),
539
+ category: 11,
540
+ discountPercent: 0,
541
+ cannotIncreaseDiscountPercent: false,
542
+ allowOwnerMint: false,
543
+ useReserveBeneficiaryAsDefault: false,
544
+ transfersPausable: false,
545
+ useVotingUnits: false,
546
+ cannotBeRemoved: false
547
+ });
548
+ // Zucco tshirt
549
+ names[26] = "Zucco Tshirt";
550
+ svgHashes[26] = bytes32(0x2a69ce643e565cb4fe648dc9b03020b0749ec780748d43153ee4c6770c76adbf);
551
+ products[26] = JB721TierConfig({
552
+ price: uint104(1 * (10 ** (decimals - 3))),
553
+ initialSupply: 1000,
554
+ votingUnits: 0,
555
+ reserveFrequency: 0,
556
+ reserveBeneficiary: address(0),
557
+ encodedIPFSUri: bytes32(0x04e22ea49d80f346b7a5a9013169470824f71faa7d9e0155a71f4afc3fa63f89),
558
+ category: 11,
559
+ discountPercent: 0,
560
+ cannotIncreaseDiscountPercent: false,
561
+ allowOwnerMint: false,
562
+ useReserveBeneficiaryAsDefault: false,
563
+ transfersPausable: false,
564
+ useVotingUnits: false,
565
+ cannotBeRemoved: false
566
+ });
567
+ // Ice Cube
568
+ names[27] = "Ice Cube";
569
+ svgHashes[27] = bytes32(0x032b50792f9929066168187acd5eeb101f8528f538ef850913c81dc4b6452842);
570
+ products[27] = JB721TierConfig({
571
+ price: uint104(1 * (10 ** (decimals - 2))),
572
+ initialSupply: 250,
573
+ votingUnits: 0,
574
+ reserveFrequency: 50,
575
+ reserveBeneficiary: address(0),
576
+ encodedIPFSUri: bytes32(0xf7c17eff468f5dd227b991d773b7a36b93cd997751547f9908a4bf33e31ba701),
577
+ category: 11,
578
+ discountPercent: 0,
579
+ cannotIncreaseDiscountPercent: false,
580
+ allowOwnerMint: false,
581
+ useReserveBeneficiaryAsDefault: false,
582
+ transfersPausable: false,
583
+ useVotingUnits: false,
584
+ cannotBeRemoved: false
585
+ });
586
+ // Club beanie
587
+ names[28] = "Club Beanie";
588
+ svgHashes[28] = bytes32(0x0a8d7c8ff075db0e66638bb51eea732a53641b09b39de68d1cbeafe9099f9b6e);
589
+ products[28] = JB721TierConfig({
590
+ price: uint104(15 * (10 ** (decimals - 3))),
591
+ initialSupply: 300,
592
+ votingUnits: 0,
593
+ reserveFrequency: 50,
594
+ reserveBeneficiary: address(0),
595
+ encodedIPFSUri: bytes32(0x9a29e975b191f800744d74b11c580fdd74b2db73c95426af36e28cf00d66da97),
596
+ category: 12,
597
+ discountPercent: 0,
598
+ cannotIncreaseDiscountPercent: false,
599
+ allowOwnerMint: false,
600
+ useReserveBeneficiaryAsDefault: false,
601
+ transfersPausable: false,
602
+ useVotingUnits: false,
603
+ cannotBeRemoved: false
604
+ });
605
+ // Dorthy hair
606
+ names[29] = "Dorthy Hair";
607
+ svgHashes[29] = bytes32(0x5f2bec3082d7039474f6cba827a3fbd4d4f8e21f22d304edfbc6de77a8b529cf);
608
+ products[29] = JB721TierConfig({
609
+ price: uint104(1 * (10 ** (decimals - 2))),
610
+ initialSupply: 250,
611
+ votingUnits: 0,
612
+ reserveFrequency: 0,
613
+ reserveBeneficiary: address(0),
614
+ encodedIPFSUri: bytes32(0x52a03dc3e983121f275cadc2d86626e0fca8a9901f3dc7d0bbee826e5d3d409d),
615
+ category: 12,
616
+ discountPercent: 0,
617
+ cannotIncreaseDiscountPercent: false,
618
+ allowOwnerMint: false,
619
+ useReserveBeneficiaryAsDefault: false,
620
+ transfersPausable: false,
621
+ useVotingUnits: false,
622
+ cannotBeRemoved: false
623
+ });
624
+ // Farmer hat
625
+ names[30] = "Farmer Hat";
626
+ svgHashes[30] = bytes32(0xcf90bc8459345bcfae00796c4641c0bc8868c01d6339a54ef4d3c4fa1737cfd8);
627
+ products[30] = JB721TierConfig({
628
+ price: uint104(1 * (10 ** (decimals - 2))),
629
+ initialSupply: 250,
630
+ votingUnits: 0,
631
+ reserveFrequency: 25,
632
+ reserveBeneficiary: address(0),
633
+ encodedIPFSUri: bytes32(0xc583623dc7a3e61bfc04813f8c975eba8a22aeafe3d741edff1e2c97ac520737),
634
+ category: 12,
635
+ discountPercent: 0,
636
+ cannotIncreaseDiscountPercent: false,
637
+ allowOwnerMint: false,
638
+ useReserveBeneficiaryAsDefault: false,
639
+ transfersPausable: false,
640
+ useVotingUnits: false,
641
+ cannotBeRemoved: false
642
+ });
643
+ // Geisha hair
644
+ names[31] = "Geisha Hair";
645
+ svgHashes[31] = bytes32(0x17b939b04709c357480bdfa54cf2007d7898f4bf048bf12efa6cd8e3af4d711c);
646
+ products[31] = JB721TierConfig({
647
+ price: uint104(1 * (10 ** (decimals - 1))),
648
+ initialSupply: 100,
649
+ votingUnits: 0,
650
+ reserveFrequency: 25,
651
+ reserveBeneficiary: address(0),
652
+ encodedIPFSUri: bytes32(0x58f8e217cfafd0a6feff40f4822790cdc19aba5dd4d4948f4c1bd5e313c90e8d),
653
+ category: 12,
654
+ discountPercent: 0,
655
+ cannotIncreaseDiscountPercent: false,
656
+ allowOwnerMint: false,
657
+ useReserveBeneficiaryAsDefault: false,
658
+ transfersPausable: false,
659
+ useVotingUnits: false,
660
+ cannotBeRemoved: false
661
+ });
662
+ // Headphones
663
+ names[32] = "Headphones";
664
+ svgHashes[32] = bytes32(0xf1850876ede53102140881e04a4a0e532ba6a08bc0fb64dee279d11c98d64dbf);
665
+ products[32] = JB721TierConfig({
666
+ price: uint104(1 * (10 ** (decimals - 2))),
667
+ initialSupply: 500,
668
+ votingUnits: 0,
669
+ reserveFrequency: 10,
670
+ reserveBeneficiary: address(0),
671
+ encodedIPFSUri: bytes32(0x3e67840649fabab6d62f92bad701a6248b77f86ea8fcd66dc88dfbcba1134d85),
672
+ category: 12,
673
+ discountPercent: 0,
674
+ cannotIncreaseDiscountPercent: false,
675
+ allowOwnerMint: false,
676
+ useReserveBeneficiaryAsDefault: false,
677
+ transfersPausable: false,
678
+ useVotingUnits: false,
679
+ cannotBeRemoved: false
680
+ });
681
+ // Natty dread
682
+ names[33] = "Natty Dred";
683
+ svgHashes[33] = bytes32(0x04ae3342ce08da16f61d32e4ce7034dff0223e462afa48019b90c94afc19b939);
684
+ products[33] = JB721TierConfig({
685
+ price: uint104(1 * (10 ** (decimals - 2))),
686
+ initialSupply: 100,
687
+ votingUnits: 0,
688
+ reserveFrequency: 0,
689
+ reserveBeneficiary: address(0),
690
+ encodedIPFSUri: bytes32(0xd4724e692969066fc0b3587b8e18d1589205d1e1f133d7f9f8d63d14b6d1862f),
691
+ category: 12,
692
+ discountPercent: 0,
693
+ cannotIncreaseDiscountPercent: false,
694
+ allowOwnerMint: false,
695
+ useReserveBeneficiaryAsDefault: false,
696
+ transfersPausable: false,
697
+ useVotingUnits: false,
698
+ cannotBeRemoved: false
699
+ });
700
+ // Peachhair
701
+ names[34] = "Peach Hair";
702
+ svgHashes[34] = bytes32(0xdf7b9e74c552908290a05388f905a503978a289c44ffb61e510df43f2955d435);
703
+ products[34] = JB721TierConfig({
704
+ price: uint104(1 * (10 ** (decimals - 2))),
705
+ initialSupply: 100,
706
+ votingUnits: 0,
707
+ reserveFrequency: 0,
708
+ reserveBeneficiary: address(0),
709
+ encodedIPFSUri: bytes32(0xde4c6e589f4e99cda7205236a99db750638236007b2dd03d79de1146102d7f81),
710
+ category: 12,
711
+ discountPercent: 0,
712
+ cannotIncreaseDiscountPercent: false,
713
+ allowOwnerMint: false,
714
+ useReserveBeneficiaryAsDefault: false,
715
+ transfersPausable: false,
716
+ useVotingUnits: false,
717
+ cannotBeRemoved: false
718
+ });
719
+ // Proff hair
720
+ names[35] = "Proff Hair";
721
+ svgHashes[35] = bytes32(0x501769b2b47a8aedf4b328f6cf0076200df07ce2087f5e082f49e815f54595b9);
722
+ products[35] = JB721TierConfig({
723
+ price: uint104(1 * (10 ** (decimals - 2))),
724
+ initialSupply: 200,
725
+ votingUnits: 0,
726
+ reserveFrequency: 0,
727
+ reserveBeneficiary: address(0),
728
+ encodedIPFSUri: bytes32(0x766001db70e4a18e76dbbd9e4b0f9e47b5a9c4daa1a7c3727190a154daabfa1c),
729
+ category: 12,
730
+ discountPercent: 0,
731
+ cannotIncreaseDiscountPercent: false,
732
+ allowOwnerMint: false,
733
+ useReserveBeneficiaryAsDefault: false,
734
+ transfersPausable: false,
735
+ useVotingUnits: false,
736
+ cannotBeRemoved: false
737
+ });
738
+ // Catana
739
+ names[36] = "Catana";
740
+ svgHashes[36] = bytes32(0xbe7e7bb20da87fffa92e867bf0cd3267df180e24ba6eae7a1d434c56856ef2f5);
741
+ products[36] = JB721TierConfig({
742
+ price: uint104(1 * (10 ** (decimals - 2))),
743
+ initialSupply: 250,
744
+ votingUnits: 0,
745
+ reserveFrequency: 0,
746
+ reserveBeneficiary: address(0),
747
+ encodedIPFSUri: bytes32(0xa4d2eb02df6eb99cbbdc3603a116b3b9dcd45f865a8c8396611ea5f879deee59),
748
+ category: 13,
749
+ discountPercent: 0,
750
+ cannotIncreaseDiscountPercent: false,
751
+ allowOwnerMint: false,
752
+ useReserveBeneficiaryAsDefault: false,
753
+ transfersPausable: false,
754
+ useVotingUnits: false,
755
+ cannotBeRemoved: false
756
+ });
757
+ // Chefs knife
758
+ names[37] = "Chefs Knife";
759
+ svgHashes[37] = bytes32(0x705180b5aee8e57d0a0783d22fc30dc95e3e84fac36e9d96fef96fabfa58d1f9);
760
+ products[37] = JB721TierConfig({
761
+ price: uint104(1 * (10 ** (decimals - 3))),
762
+ initialSupply: 500,
763
+ votingUnits: 0,
764
+ reserveFrequency: 100,
765
+ reserveBeneficiary: address(0),
766
+ encodedIPFSUri: bytes32(0x18abc38e7f1c5c014398f705131aac80196dcd0da2b5f02c103e1a549433e8b3),
767
+ category: 13,
768
+ discountPercent: 0,
769
+ cannotIncreaseDiscountPercent: false,
770
+ allowOwnerMint: false,
771
+ useReserveBeneficiaryAsDefault: false,
772
+ transfersPausable: false,
773
+ useVotingUnits: false,
774
+ cannotBeRemoved: false
775
+ });
776
+ // Cheap beer
777
+ names[38] = "Cheap Beer";
778
+ svgHashes[38] = bytes32(0x993a2c657f43e19820f3e23677e650705d0c8c6a0ccd88a381aa54d2da7ba047);
779
+ products[38] = JB721TierConfig({
780
+ price: uint104(1 * (10 ** (decimals - 3))),
781
+ initialSupply: 2000,
782
+ votingUnits: 0,
783
+ reserveFrequency: 100,
784
+ reserveBeneficiary: address(0),
785
+ encodedIPFSUri: bytes32(0xc498a98bea66a8b44297631f136a7326f7a28b882058829588979b186d06baff),
786
+ category: 13,
787
+ discountPercent: 0,
788
+ cannotIncreaseDiscountPercent: false,
789
+ allowOwnerMint: false,
790
+ useReserveBeneficiaryAsDefault: false,
791
+ transfersPausable: false,
792
+ useVotingUnits: false,
793
+ cannotBeRemoved: false
794
+ });
795
+ // Constitution
796
+ names[39] = "Constitution";
797
+ svgHashes[39] = bytes32(0xaf0826d8eac1e57789077f43e6f979488da6f619f72f9f0ff50a52ebcca3bfa3);
798
+ products[39] = JB721TierConfig({
799
+ price: uint104(1787 * (10 ** (decimals - 6))),
800
+ initialSupply: 1000,
801
+ votingUnits: 0,
802
+ reserveFrequency: 100,
803
+ reserveBeneficiary: address(0),
804
+ encodedIPFSUri: bytes32(0x3bd1186293e2d3e4def734a669c348976e1ba0cdc628a19cd5a3b38e0bee28f9),
805
+ category: 13,
806
+ discountPercent: 0,
807
+ cannotIncreaseDiscountPercent: false,
808
+ allowOwnerMint: false,
809
+ useReserveBeneficiaryAsDefault: false,
810
+ transfersPausable: false,
811
+ useVotingUnits: false,
812
+ cannotBeRemoved: false
813
+ });
814
+ // DJ booth
815
+ names[40] = "DJ Deck";
816
+ svgHashes[40] = bytes32(0x2c9538556986d134ddec2831e768233f587b242e887df9bb359b3aefffa3c5a6);
817
+ products[40] = JB721TierConfig({
818
+ price: uint104(1 * (10 ** (decimals - 1))),
819
+ initialSupply: 10,
820
+ votingUnits: 0,
821
+ reserveFrequency: 10,
822
+ reserveBeneficiary: address(0),
823
+ encodedIPFSUri: bytes32(0x6b8bfbf33e574747b69039adfc6788101047a4593db7ea7ff4f6fa5a890e9ecf),
824
+ category: 13,
825
+ discountPercent: 0,
826
+ cannotIncreaseDiscountPercent: false,
827
+ allowOwnerMint: false,
828
+ useReserveBeneficiaryAsDefault: false,
829
+ transfersPausable: false,
830
+ useVotingUnits: false,
831
+ cannotBeRemoved: false
832
+ });
833
+ // Gas can
834
+ names[41] = "Gas Can";
835
+ svgHashes[41] = bytes32(0x89808b70d019077e4f986b4a60af4ec15fc72ed022bc5e5476441d98f8ce1d1d);
836
+ products[41] = JB721TierConfig({
837
+ price: uint104(1 * (10 ** (decimals - 1))),
838
+ initialSupply: 25,
839
+ votingUnits: 0,
840
+ reserveFrequency: 25,
841
+ reserveBeneficiary: address(0),
842
+ encodedIPFSUri: bytes32(0xf11d1cea4163e0dfa2be8d60b0cd82d075fb37d969e40439df4e91db53bf7f3e),
843
+ category: 13,
844
+ discountPercent: 0,
845
+ cannotIncreaseDiscountPercent: false,
846
+ allowOwnerMint: false,
847
+ useReserveBeneficiaryAsDefault: false,
848
+ transfersPausable: false,
849
+ useVotingUnits: false,
850
+ cannotBeRemoved: false
851
+ });
852
+ // Lightsaber
853
+ names[42] = "Lightsaber";
854
+ svgHashes[42] = bytes32(0xf7017a80e9fa4c3fc052a701c04374176620a8e5befa39b708a51293c4d8f406);
855
+ products[42] = JB721TierConfig({
856
+ price: uint104(1 * (10 ** (decimals - 3))),
857
+ initialSupply: 250,
858
+ votingUnits: 0,
859
+ reserveFrequency: 50,
860
+ reserveBeneficiary: address(0),
861
+ encodedIPFSUri: bytes32(0xedf8136f97347d1fee1fc14b1b9cbdb6d170a75c3860a92664c56060712567f3),
862
+ category: 13,
863
+ discountPercent: 0,
864
+ cannotIncreaseDiscountPercent: false,
865
+ allowOwnerMint: false,
866
+ useReserveBeneficiaryAsDefault: false,
867
+ transfersPausable: false,
868
+ useVotingUnits: false,
869
+ cannotBeRemoved: false
870
+ });
871
+ // Potion
872
+ names[43] = "Potion";
873
+ svgHashes[43] = bytes32(0xefdbac65db3868ead1c1093ea20f0b2d77e9095567f6358e246ba160ec545e09);
874
+ products[43] = JB721TierConfig({
875
+ price: uint104(1 * (10 ** (decimals - 1))),
876
+ initialSupply: 100,
877
+ votingUnits: 0,
878
+ reserveFrequency: 25,
879
+ reserveBeneficiary: address(0),
880
+ encodedIPFSUri: bytes32(0xbcc0c314f94ccb0f8f2717aff0b2096a28ace5b70465b5b4e106981fdbceb238),
881
+ category: 13,
882
+ discountPercent: 0,
883
+ cannotIncreaseDiscountPercent: false,
884
+ allowOwnerMint: false,
885
+ useReserveBeneficiaryAsDefault: false,
886
+ transfersPausable: false,
887
+ useVotingUnits: false,
888
+ cannotBeRemoved: false
889
+ });
890
+ // Dagger
891
+ names[44] = "Dagger";
892
+ svgHashes[44] = bytes32(0xaf60de81f2609b847b7d6e97ef6c09c9e3d91cabe6f955bd8828f342f1558738);
893
+ products[44] = JB721TierConfig({
894
+ price: uint104(1 * (10 ** (decimals - 3))),
895
+ initialSupply: 150,
896
+ votingUnits: 0,
897
+ reserveFrequency: 30,
898
+ reserveBeneficiary: address(0),
899
+ encodedIPFSUri: bytes32(0x867d8d8b9da0b5d8a00024d548e5f6e33562d521dff8c245764b6206003d1970),
900
+ category: 13,
901
+ discountPercent: 0,
902
+ cannotIncreaseDiscountPercent: false,
903
+ allowOwnerMint: false,
904
+ useReserveBeneficiaryAsDefault: false,
905
+ transfersPausable: false,
906
+ useVotingUnits: false,
907
+ cannotBeRemoved: false
908
+ });
909
+ // Duct Tape
910
+ names[45] = "Duct Tape";
911
+ svgHashes[45] = bytes32(0x962ce657908ee4fb58b3e2d1f77109b36428e7a4446d6127bcb6c06aa2360637);
912
+ products[45] = JB721TierConfig({
913
+ price: uint104((10 ** (decimals + 2))),
914
+ initialSupply: 1,
915
+ votingUnits: 0,
916
+ reserveFrequency: 0,
917
+ reserveBeneficiary: address(0),
918
+ encodedIPFSUri: bytes32(0x876078bdfb8cdcc4359bb946274a9964e84877beac0ecd59fbf293c3bc2457c9),
919
+ category: 14,
920
+ discountPercent: 0,
921
+ cannotIncreaseDiscountPercent: false,
922
+ allowOwnerMint: false,
923
+ useReserveBeneficiaryAsDefault: false,
924
+ transfersPausable: false,
925
+ useVotingUnits: false,
926
+ cannotBeRemoved: false
927
+ });
928
+ // Mouthstraw
929
+ names[46] = "Wheat Straw";
930
+ svgHashes[46] = bytes32(0x112b8217bb82aebc91e80c935244dce8aa30d4d8df5f98382054b97037dc0c94);
931
+ products[46] = JB721TierConfig({
932
+ price: uint104(1 * (10 ** decimals)),
933
+ initialSupply: 15,
934
+ votingUnits: 0,
935
+ reserveFrequency: 15,
936
+ reserveBeneficiary: address(0),
937
+ encodedIPFSUri: bytes32(0x1d1484b4b37a882e59ab5a01c1a32528e703e15156b9bb9b5372b61fec84c0df),
938
+ category: 16,
939
+ discountPercent: 0,
940
+ cannotIncreaseDiscountPercent: false,
941
+ allowOwnerMint: false,
942
+ useReserveBeneficiaryAsDefault: false,
943
+ transfersPausable: false,
944
+ useVotingUnits: false,
945
+ cannotBeRemoved: false
946
+ });
947
+
948
+ uint256[] memory productIds = new uint256[](47);
949
+ for (uint256 i; i < 47; i++) {
950
+ productIds[i] = i + 5;
951
+ }
952
+
953
+ if (false) {
954
+ bytes memory adjustTiersData = abi.encodeCall(JB721TiersHook.adjustTiers, (products, new uint256[](0)));
955
+ vm.writeFile(
956
+ string.concat("./", vm.toString(block.chainid), "-adjustTiers.hex.txt"), vm.toString(adjustTiersData)
957
+ );
958
+
959
+ bytes memory setSvgHashData =
960
+ abi.encodeCall(Banny721TokenUriResolver.setSvgHashsOf, (productIds, svgHashes));
961
+
962
+ vm.writeFile(
963
+ string.concat("./", vm.toString(block.chainid), "-setSvgHashOf.hex.txt"), vm.toString(setSvgHashData)
964
+ );
965
+
966
+ bytes memory setProductNamesData =
967
+ abi.encodeCall(Banny721TokenUriResolver.setProductNames, (productIds, names));
968
+ vm.writeFile(
969
+ string.concat("./", vm.toString(block.chainid), "-setProductNames.hex.txt"),
970
+ vm.toString(setProductNamesData)
971
+ );
972
+ } else {
973
+ hook.adjustTiers(products, new uint256[](0));
974
+ bannyverse.resolver.setSvgHashsOf(productIds, svgHashes);
975
+ bannyverse.resolver.setProductNames(productIds, names);
976
+ bannyverse.resolver.setSvgBaseUri("https://bannyverse.infura-ipfs.io/ipfs/");
977
+ }
978
+ }
979
+ }