@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.
- package/README.md +53 -0
- package/SKILLS.md +94 -0
- package/deployments/banny-core-v5/arbitrum/Banny721TokenUriResolver.json +1809 -0
- package/deployments/banny-core-v5/arbitrum_sepolia/Banny721TokenUriResolver.json +1795 -0
- package/deployments/banny-core-v5/base/Banny721TokenUriResolver.json +1810 -0
- package/deployments/banny-core-v5/base_sepolia/Banny721TokenUriResolver.json +1796 -0
- package/deployments/banny-core-v5/ethereum/Banny721TokenUriResolver.json +1795 -0
- package/deployments/banny-core-v5/optimism/Banny721TokenUriResolver.json +1810 -0
- package/deployments/banny-core-v5/optimism_sepolia/Banny721TokenUriResolver.json +1796 -0
- package/deployments/banny-core-v5/sepolia/Banny721TokenUriResolver.json +1795 -0
- package/foundry.toml +22 -0
- package/package.json +53 -0
- package/remappings.txt +1 -0
- package/script/1.Fix.s.sol +290 -0
- package/script/Add.Denver.s.sol +75 -0
- package/script/AirdropOutfits.s.sol +2302 -0
- package/script/Deploy.s.sol +440 -0
- package/script/Drop1.s.sol +979 -0
- package/script/MigrationContractArbitrum.sol +494 -0
- package/script/MigrationContractArbitrum1.sol +170 -0
- package/script/MigrationContractArbitrum2.sol +204 -0
- package/script/MigrationContractArbitrum3.sol +174 -0
- package/script/MigrationContractArbitrum4.sol +478 -0
- package/script/MigrationContractBase1.sol +444 -0
- package/script/MigrationContractBase2.sol +175 -0
- package/script/MigrationContractBase3.sol +309 -0
- package/script/MigrationContractBase4.sol +350 -0
- package/script/MigrationContractBase5.sol +259 -0
- package/script/MigrationContractEthereum1.sol +468 -0
- package/script/MigrationContractEthereum2.sol +306 -0
- package/script/MigrationContractEthereum3.sol +349 -0
- package/script/MigrationContractEthereum4.sol +352 -0
- package/script/MigrationContractEthereum5.sol +354 -0
- package/script/MigrationContractEthereum6.sol +270 -0
- package/script/MigrationContractEthereum7.sol +439 -0
- package/script/MigrationContractEthereum8.sol +385 -0
- package/script/MigrationContractOptimism.sol +196 -0
- package/script/helpers/BannyverseDeploymentLib.sol +73 -0
- package/script/helpers/MigrationHelper.sol +155 -0
- package/script/outfit_drop/generate-migration.js +3441 -0
- package/script/outfit_drop/raw.json +43276 -0
- package/slither-ci.config.json +10 -0
- package/sphinx.lock +521 -0
- package/src/Banny721TokenUriResolver.sol +1288 -0
- package/src/interfaces/IBanny721TokenUriResolver.sol +137 -0
- package/test/Banny721TokenUriResolver.t.sol +669 -0
- package/test/BannyAttacks.t.sol +322 -0
- package/test/DecorateFlow.t.sol +1056 -0
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.23;
|
|
3
|
+
|
|
4
|
+
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
|
|
5
|
+
import {JB721TiersHook} from "@bananapus/721-hook-v5/src/JB721TiersHook.sol";
|
|
6
|
+
import {Banny721TokenUriResolver} from "../src/Banny721TokenUriResolver.sol";
|
|
7
|
+
import {MigrationHelper} from "./helpers/MigrationHelper.sol";
|
|
8
|
+
|
|
9
|
+
/// @notice Migration contract for Arbitrum to handle standalone outfits and backgrounds
|
|
10
|
+
/// that are not worn/used by any banny. These assets are minted to this contract
|
|
11
|
+
/// and then transferred directly to their owners.
|
|
12
|
+
contract MigrationContractArbitrum4 {
|
|
13
|
+
address[] private transferOwners;
|
|
14
|
+
|
|
15
|
+
constructor(address[] memory _transferOwners) {
|
|
16
|
+
transferOwners = _transferOwners;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function executeMigration(
|
|
20
|
+
address hookAddress,
|
|
21
|
+
address resolverAddress,
|
|
22
|
+
address v4HookAddress,
|
|
23
|
+
address v4ResolverAddress,
|
|
24
|
+
address fallbackV4ResolverAddress
|
|
25
|
+
)
|
|
26
|
+
external
|
|
27
|
+
{
|
|
28
|
+
// Validate addresses
|
|
29
|
+
require(hookAddress != address(0), "Hook address not set");
|
|
30
|
+
require(resolverAddress != address(0), "Resolver address not set");
|
|
31
|
+
require(v4HookAddress != address(0), "V4 Hook address not set");
|
|
32
|
+
require(v4ResolverAddress != address(0), "V4 Resolver address not set");
|
|
33
|
+
require(fallbackV4ResolverAddress != address(0), "V4 fallback resolver address not set");
|
|
34
|
+
|
|
35
|
+
JB721TiersHook hook = JB721TiersHook(hookAddress);
|
|
36
|
+
IERC721 v4Hook = IERC721(v4HookAddress);
|
|
37
|
+
|
|
38
|
+
// Arbitrum migration - Standalone outfits and backgrounds (176 items)
|
|
39
|
+
// These are assets that are NOT being worn/used by any banny
|
|
40
|
+
|
|
41
|
+
// Assets are already minted to this contract by the deployer
|
|
42
|
+
// V5 token IDs are calculated based on mint order (continuing from previous chunks)
|
|
43
|
+
// V4 token IDs are the original token IDs from V4
|
|
44
|
+
|
|
45
|
+
// Generate token IDs - store both V5 minted token IDs and original V4 token IDs
|
|
46
|
+
uint256[] memory v5TokenIds = new uint256[](transferOwners.length);
|
|
47
|
+
uint256[] memory v4TokenIds = new uint256[](transferOwners.length);
|
|
48
|
+
v5TokenIds[0] = 5_000_000_003; // Minted V5 Token ID
|
|
49
|
+
v4TokenIds[0] = 5_000_000_003; // Original V4 Token ID
|
|
50
|
+
v5TokenIds[1] = 19_000_000_003; // Minted V5 Token ID
|
|
51
|
+
v4TokenIds[1] = 19_000_000_002; // Original V4 Token ID
|
|
52
|
+
v5TokenIds[2] = 19_000_000_004; // Minted V5 Token ID
|
|
53
|
+
v4TokenIds[2] = 19_000_000_004; // Original V4 Token ID
|
|
54
|
+
v5TokenIds[3] = 31_000_000_002; // Minted V5 Token ID
|
|
55
|
+
v4TokenIds[3] = 31_000_000_002; // Original V4 Token ID
|
|
56
|
+
v5TokenIds[4] = 32_000_000_001; // Minted V5 Token ID
|
|
57
|
+
v4TokenIds[4] = 32_000_000_001; // Original V4 Token ID
|
|
58
|
+
v5TokenIds[5] = 39_000_000_001; // Minted V5 Token ID
|
|
59
|
+
v4TokenIds[5] = 39_000_000_001; // Original V4 Token ID
|
|
60
|
+
v5TokenIds[6] = 47_000_000_002; // Minted V5 Token ID
|
|
61
|
+
v4TokenIds[6] = 47_000_000_002; // Original V4 Token ID
|
|
62
|
+
v5TokenIds[7] = 47_000_000_003; // Minted V5 Token ID
|
|
63
|
+
v4TokenIds[7] = 47_000_000_003; // Original V4 Token ID
|
|
64
|
+
v5TokenIds[8] = 47_000_000_004; // Minted V5 Token ID
|
|
65
|
+
v4TokenIds[8] = 47_000_000_004; // Original V4 Token ID
|
|
66
|
+
v5TokenIds[9] = 47_000_000_005; // Minted V5 Token ID
|
|
67
|
+
v4TokenIds[9] = 47_000_000_005; // Original V4 Token ID
|
|
68
|
+
v5TokenIds[10] = 47_000_000_006; // Minted V5 Token ID
|
|
69
|
+
v4TokenIds[10] = 47_000_000_006; // Original V4 Token ID
|
|
70
|
+
v5TokenIds[11] = 47_000_000_007; // Minted V5 Token ID
|
|
71
|
+
v4TokenIds[11] = 47_000_000_007; // Original V4 Token ID
|
|
72
|
+
v5TokenIds[12] = 47_000_000_008; // Minted V5 Token ID
|
|
73
|
+
v4TokenIds[12] = 47_000_000_008; // Original V4 Token ID
|
|
74
|
+
v5TokenIds[13] = 47_000_000_009; // Minted V5 Token ID
|
|
75
|
+
v4TokenIds[13] = 47_000_000_009; // Original V4 Token ID
|
|
76
|
+
v5TokenIds[14] = 47_000_000_010; // Minted V5 Token ID
|
|
77
|
+
v4TokenIds[14] = 47_000_000_010; // Original V4 Token ID
|
|
78
|
+
v5TokenIds[15] = 47_000_000_011; // Minted V5 Token ID
|
|
79
|
+
v4TokenIds[15] = 47_000_000_011; // Original V4 Token ID
|
|
80
|
+
v5TokenIds[16] = 47_000_000_012; // Minted V5 Token ID
|
|
81
|
+
v4TokenIds[16] = 47_000_000_012; // Original V4 Token ID
|
|
82
|
+
v5TokenIds[17] = 47_000_000_013; // Minted V5 Token ID
|
|
83
|
+
v4TokenIds[17] = 47_000_000_013; // Original V4 Token ID
|
|
84
|
+
v5TokenIds[18] = 47_000_000_014; // Minted V5 Token ID
|
|
85
|
+
v4TokenIds[18] = 47_000_000_014; // Original V4 Token ID
|
|
86
|
+
v5TokenIds[19] = 47_000_000_015; // Minted V5 Token ID
|
|
87
|
+
v4TokenIds[19] = 47_000_000_015; // Original V4 Token ID
|
|
88
|
+
v5TokenIds[20] = 47_000_000_016; // Minted V5 Token ID
|
|
89
|
+
v4TokenIds[20] = 47_000_000_016; // Original V4 Token ID
|
|
90
|
+
v5TokenIds[21] = 47_000_000_017; // Minted V5 Token ID
|
|
91
|
+
v4TokenIds[21] = 47_000_000_017; // Original V4 Token ID
|
|
92
|
+
v5TokenIds[22] = 47_000_000_018; // Minted V5 Token ID
|
|
93
|
+
v4TokenIds[22] = 47_000_000_018; // Original V4 Token ID
|
|
94
|
+
v5TokenIds[23] = 47_000_000_019; // Minted V5 Token ID
|
|
95
|
+
v4TokenIds[23] = 47_000_000_019; // Original V4 Token ID
|
|
96
|
+
v5TokenIds[24] = 47_000_000_020; // Minted V5 Token ID
|
|
97
|
+
v4TokenIds[24] = 47_000_000_020; // Original V4 Token ID
|
|
98
|
+
v5TokenIds[25] = 47_000_000_021; // Minted V5 Token ID
|
|
99
|
+
v4TokenIds[25] = 47_000_000_021; // Original V4 Token ID
|
|
100
|
+
v5TokenIds[26] = 47_000_000_022; // Minted V5 Token ID
|
|
101
|
+
v4TokenIds[26] = 47_000_000_022; // Original V4 Token ID
|
|
102
|
+
v5TokenIds[27] = 47_000_000_023; // Minted V5 Token ID
|
|
103
|
+
v4TokenIds[27] = 47_000_000_023; // Original V4 Token ID
|
|
104
|
+
v5TokenIds[28] = 47_000_000_024; // Minted V5 Token ID
|
|
105
|
+
v4TokenIds[28] = 47_000_000_024; // Original V4 Token ID
|
|
106
|
+
v5TokenIds[29] = 47_000_000_025; // Minted V5 Token ID
|
|
107
|
+
v4TokenIds[29] = 47_000_000_025; // Original V4 Token ID
|
|
108
|
+
v5TokenIds[30] = 47_000_000_026; // Minted V5 Token ID
|
|
109
|
+
v4TokenIds[30] = 47_000_000_026; // Original V4 Token ID
|
|
110
|
+
v5TokenIds[31] = 47_000_000_027; // Minted V5 Token ID
|
|
111
|
+
v4TokenIds[31] = 47_000_000_027; // Original V4 Token ID
|
|
112
|
+
v5TokenIds[32] = 49_000_000_002; // Minted V5 Token ID
|
|
113
|
+
v4TokenIds[32] = 49_000_000_001; // Original V4 Token ID
|
|
114
|
+
v5TokenIds[33] = 49_000_000_003; // Minted V5 Token ID
|
|
115
|
+
v4TokenIds[33] = 49_000_000_003; // Original V4 Token ID
|
|
116
|
+
v5TokenIds[34] = 49_000_000_004; // Minted V5 Token ID
|
|
117
|
+
v4TokenIds[34] = 49_000_000_004; // Original V4 Token ID
|
|
118
|
+
v5TokenIds[35] = 49_000_000_005; // Minted V5 Token ID
|
|
119
|
+
v4TokenIds[35] = 49_000_000_005; // Original V4 Token ID
|
|
120
|
+
v5TokenIds[36] = 49_000_000_006; // Minted V5 Token ID
|
|
121
|
+
v4TokenIds[36] = 49_000_000_006; // Original V4 Token ID
|
|
122
|
+
v5TokenIds[37] = 49_000_000_007; // Minted V5 Token ID
|
|
123
|
+
v4TokenIds[37] = 49_000_000_007; // Original V4 Token ID
|
|
124
|
+
v5TokenIds[38] = 49_000_000_008; // Minted V5 Token ID
|
|
125
|
+
v4TokenIds[38] = 49_000_000_008; // Original V4 Token ID
|
|
126
|
+
v5TokenIds[39] = 49_000_000_009; // Minted V5 Token ID
|
|
127
|
+
v4TokenIds[39] = 49_000_000_009; // Original V4 Token ID
|
|
128
|
+
v5TokenIds[40] = 49_000_000_010; // Minted V5 Token ID
|
|
129
|
+
v4TokenIds[40] = 49_000_000_010; // Original V4 Token ID
|
|
130
|
+
v5TokenIds[41] = 49_000_000_011; // Minted V5 Token ID
|
|
131
|
+
v4TokenIds[41] = 49_000_000_011; // Original V4 Token ID
|
|
132
|
+
v5TokenIds[42] = 49_000_000_012; // Minted V5 Token ID
|
|
133
|
+
v4TokenIds[42] = 49_000_000_012; // Original V4 Token ID
|
|
134
|
+
v5TokenIds[43] = 49_000_000_013; // Minted V5 Token ID
|
|
135
|
+
v4TokenIds[43] = 49_000_000_013; // Original V4 Token ID
|
|
136
|
+
v5TokenIds[44] = 49_000_000_014; // Minted V5 Token ID
|
|
137
|
+
v4TokenIds[44] = 49_000_000_014; // Original V4 Token ID
|
|
138
|
+
v5TokenIds[45] = 49_000_000_015; // Minted V5 Token ID
|
|
139
|
+
v4TokenIds[45] = 49_000_000_015; // Original V4 Token ID
|
|
140
|
+
v5TokenIds[46] = 49_000_000_016; // Minted V5 Token ID
|
|
141
|
+
v4TokenIds[46] = 49_000_000_016; // Original V4 Token ID
|
|
142
|
+
v5TokenIds[47] = 49_000_000_017; // Minted V5 Token ID
|
|
143
|
+
v4TokenIds[47] = 49_000_000_017; // Original V4 Token ID
|
|
144
|
+
v5TokenIds[48] = 49_000_000_018; // Minted V5 Token ID
|
|
145
|
+
v4TokenIds[48] = 49_000_000_018; // Original V4 Token ID
|
|
146
|
+
v5TokenIds[49] = 49_000_000_019; // Minted V5 Token ID
|
|
147
|
+
v4TokenIds[49] = 49_000_000_019; // Original V4 Token ID
|
|
148
|
+
v5TokenIds[50] = 49_000_000_020; // Minted V5 Token ID
|
|
149
|
+
v4TokenIds[50] = 49_000_000_020; // Original V4 Token ID
|
|
150
|
+
v5TokenIds[51] = 49_000_000_021; // Minted V5 Token ID
|
|
151
|
+
v4TokenIds[51] = 49_000_000_021; // Original V4 Token ID
|
|
152
|
+
v5TokenIds[52] = 49_000_000_022; // Minted V5 Token ID
|
|
153
|
+
v4TokenIds[52] = 49_000_000_022; // Original V4 Token ID
|
|
154
|
+
v5TokenIds[53] = 49_000_000_023; // Minted V5 Token ID
|
|
155
|
+
v4TokenIds[53] = 49_000_000_023; // Original V4 Token ID
|
|
156
|
+
v5TokenIds[54] = 49_000_000_024; // Minted V5 Token ID
|
|
157
|
+
v4TokenIds[54] = 49_000_000_024; // Original V4 Token ID
|
|
158
|
+
v5TokenIds[55] = 49_000_000_025; // Minted V5 Token ID
|
|
159
|
+
v4TokenIds[55] = 49_000_000_025; // Original V4 Token ID
|
|
160
|
+
v5TokenIds[56] = 49_000_000_026; // Minted V5 Token ID
|
|
161
|
+
v4TokenIds[56] = 49_000_000_026; // Original V4 Token ID
|
|
162
|
+
v5TokenIds[57] = 49_000_000_027; // Minted V5 Token ID
|
|
163
|
+
v4TokenIds[57] = 49_000_000_027; // Original V4 Token ID
|
|
164
|
+
v5TokenIds[58] = 49_000_000_028; // Minted V5 Token ID
|
|
165
|
+
v4TokenIds[58] = 49_000_000_028; // Original V4 Token ID
|
|
166
|
+
v5TokenIds[59] = 49_000_000_029; // Minted V5 Token ID
|
|
167
|
+
v4TokenIds[59] = 49_000_000_029; // Original V4 Token ID
|
|
168
|
+
v5TokenIds[60] = 49_000_000_030; // Minted V5 Token ID
|
|
169
|
+
v4TokenIds[60] = 49_000_000_030; // Original V4 Token ID
|
|
170
|
+
v5TokenIds[61] = 49_000_000_031; // Minted V5 Token ID
|
|
171
|
+
v4TokenIds[61] = 49_000_000_031; // Original V4 Token ID
|
|
172
|
+
v5TokenIds[62] = 49_000_000_032; // Minted V5 Token ID
|
|
173
|
+
v4TokenIds[62] = 49_000_000_032; // Original V4 Token ID
|
|
174
|
+
v5TokenIds[63] = 49_000_000_033; // Minted V5 Token ID
|
|
175
|
+
v4TokenIds[63] = 49_000_000_033; // Original V4 Token ID
|
|
176
|
+
v5TokenIds[64] = 49_000_000_034; // Minted V5 Token ID
|
|
177
|
+
v4TokenIds[64] = 49_000_000_034; // Original V4 Token ID
|
|
178
|
+
v5TokenIds[65] = 49_000_000_035; // Minted V5 Token ID
|
|
179
|
+
v4TokenIds[65] = 49_000_000_035; // Original V4 Token ID
|
|
180
|
+
v5TokenIds[66] = 49_000_000_036; // Minted V5 Token ID
|
|
181
|
+
v4TokenIds[66] = 49_000_000_036; // Original V4 Token ID
|
|
182
|
+
v5TokenIds[67] = 49_000_000_037; // Minted V5 Token ID
|
|
183
|
+
v4TokenIds[67] = 49_000_000_037; // Original V4 Token ID
|
|
184
|
+
v5TokenIds[68] = 49_000_000_038; // Minted V5 Token ID
|
|
185
|
+
v4TokenIds[68] = 49_000_000_038; // Original V4 Token ID
|
|
186
|
+
v5TokenIds[69] = 49_000_000_039; // Minted V5 Token ID
|
|
187
|
+
v4TokenIds[69] = 49_000_000_039; // Original V4 Token ID
|
|
188
|
+
v5TokenIds[70] = 49_000_000_040; // Minted V5 Token ID
|
|
189
|
+
v4TokenIds[70] = 49_000_000_040; // Original V4 Token ID
|
|
190
|
+
v5TokenIds[71] = 49_000_000_041; // Minted V5 Token ID
|
|
191
|
+
v4TokenIds[71] = 49_000_000_041; // Original V4 Token ID
|
|
192
|
+
v5TokenIds[72] = 49_000_000_042; // Minted V5 Token ID
|
|
193
|
+
v4TokenIds[72] = 49_000_000_042; // Original V4 Token ID
|
|
194
|
+
v5TokenIds[73] = 49_000_000_043; // Minted V5 Token ID
|
|
195
|
+
v4TokenIds[73] = 49_000_000_043; // Original V4 Token ID
|
|
196
|
+
v5TokenIds[74] = 49_000_000_044; // Minted V5 Token ID
|
|
197
|
+
v4TokenIds[74] = 49_000_000_044; // Original V4 Token ID
|
|
198
|
+
v5TokenIds[75] = 49_000_000_045; // Minted V5 Token ID
|
|
199
|
+
v4TokenIds[75] = 49_000_000_045; // Original V4 Token ID
|
|
200
|
+
v5TokenIds[76] = 49_000_000_046; // Minted V5 Token ID
|
|
201
|
+
v4TokenIds[76] = 49_000_000_046; // Original V4 Token ID
|
|
202
|
+
v5TokenIds[77] = 49_000_000_047; // Minted V5 Token ID
|
|
203
|
+
v4TokenIds[77] = 49_000_000_047; // Original V4 Token ID
|
|
204
|
+
v5TokenIds[78] = 49_000_000_048; // Minted V5 Token ID
|
|
205
|
+
v4TokenIds[78] = 49_000_000_048; // Original V4 Token ID
|
|
206
|
+
v5TokenIds[79] = 49_000_000_049; // Minted V5 Token ID
|
|
207
|
+
v4TokenIds[79] = 49_000_000_049; // Original V4 Token ID
|
|
208
|
+
v5TokenIds[80] = 49_000_000_050; // Minted V5 Token ID
|
|
209
|
+
v4TokenIds[80] = 49_000_000_050; // Original V4 Token ID
|
|
210
|
+
v5TokenIds[81] = 49_000_000_051; // Minted V5 Token ID
|
|
211
|
+
v4TokenIds[81] = 49_000_000_051; // Original V4 Token ID
|
|
212
|
+
v5TokenIds[82] = 49_000_000_052; // Minted V5 Token ID
|
|
213
|
+
v4TokenIds[82] = 49_000_000_052; // Original V4 Token ID
|
|
214
|
+
v5TokenIds[83] = 49_000_000_053; // Minted V5 Token ID
|
|
215
|
+
v4TokenIds[83] = 49_000_000_053; // Original V4 Token ID
|
|
216
|
+
v5TokenIds[84] = 49_000_000_054; // Minted V5 Token ID
|
|
217
|
+
v4TokenIds[84] = 49_000_000_054; // Original V4 Token ID
|
|
218
|
+
v5TokenIds[85] = 49_000_000_055; // Minted V5 Token ID
|
|
219
|
+
v4TokenIds[85] = 49_000_000_055; // Original V4 Token ID
|
|
220
|
+
v5TokenIds[86] = 49_000_000_056; // Minted V5 Token ID
|
|
221
|
+
v4TokenIds[86] = 49_000_000_056; // Original V4 Token ID
|
|
222
|
+
v5TokenIds[87] = 49_000_000_057; // Minted V5 Token ID
|
|
223
|
+
v4TokenIds[87] = 49_000_000_057; // Original V4 Token ID
|
|
224
|
+
v5TokenIds[88] = 49_000_000_058; // Minted V5 Token ID
|
|
225
|
+
v4TokenIds[88] = 49_000_000_058; // Original V4 Token ID
|
|
226
|
+
v5TokenIds[89] = 49_000_000_059; // Minted V5 Token ID
|
|
227
|
+
v4TokenIds[89] = 49_000_000_059; // Original V4 Token ID
|
|
228
|
+
v5TokenIds[90] = 49_000_000_060; // Minted V5 Token ID
|
|
229
|
+
v4TokenIds[90] = 49_000_000_060; // Original V4 Token ID
|
|
230
|
+
v5TokenIds[91] = 49_000_000_061; // Minted V5 Token ID
|
|
231
|
+
v4TokenIds[91] = 49_000_000_061; // Original V4 Token ID
|
|
232
|
+
v5TokenIds[92] = 49_000_000_062; // Minted V5 Token ID
|
|
233
|
+
v4TokenIds[92] = 49_000_000_062; // Original V4 Token ID
|
|
234
|
+
v5TokenIds[93] = 49_000_000_063; // Minted V5 Token ID
|
|
235
|
+
v4TokenIds[93] = 49_000_000_063; // Original V4 Token ID
|
|
236
|
+
v5TokenIds[94] = 49_000_000_064; // Minted V5 Token ID
|
|
237
|
+
v4TokenIds[94] = 49_000_000_064; // Original V4 Token ID
|
|
238
|
+
v5TokenIds[95] = 49_000_000_065; // Minted V5 Token ID
|
|
239
|
+
v4TokenIds[95] = 49_000_000_065; // Original V4 Token ID
|
|
240
|
+
v5TokenIds[96] = 49_000_000_066; // Minted V5 Token ID
|
|
241
|
+
v4TokenIds[96] = 49_000_000_066; // Original V4 Token ID
|
|
242
|
+
v5TokenIds[97] = 49_000_000_067; // Minted V5 Token ID
|
|
243
|
+
v4TokenIds[97] = 49_000_000_067; // Original V4 Token ID
|
|
244
|
+
v5TokenIds[98] = 49_000_000_068; // Minted V5 Token ID
|
|
245
|
+
v4TokenIds[98] = 49_000_000_068; // Original V4 Token ID
|
|
246
|
+
v5TokenIds[99] = 49_000_000_069; // Minted V5 Token ID
|
|
247
|
+
v4TokenIds[99] = 49_000_000_069; // Original V4 Token ID
|
|
248
|
+
v5TokenIds[100] = 49_000_000_070; // Minted V5 Token ID
|
|
249
|
+
v4TokenIds[100] = 49_000_000_070; // Original V4 Token ID
|
|
250
|
+
v5TokenIds[101] = 49_000_000_071; // Minted V5 Token ID
|
|
251
|
+
v4TokenIds[101] = 49_000_000_071; // Original V4 Token ID
|
|
252
|
+
v5TokenIds[102] = 49_000_000_072; // Minted V5 Token ID
|
|
253
|
+
v4TokenIds[102] = 49_000_000_072; // Original V4 Token ID
|
|
254
|
+
v5TokenIds[103] = 49_000_000_073; // Minted V5 Token ID
|
|
255
|
+
v4TokenIds[103] = 49_000_000_073; // Original V4 Token ID
|
|
256
|
+
v5TokenIds[104] = 49_000_000_074; // Minted V5 Token ID
|
|
257
|
+
v4TokenIds[104] = 49_000_000_074; // Original V4 Token ID
|
|
258
|
+
v5TokenIds[105] = 49_000_000_075; // Minted V5 Token ID
|
|
259
|
+
v4TokenIds[105] = 49_000_000_075; // Original V4 Token ID
|
|
260
|
+
v5TokenIds[106] = 49_000_000_076; // Minted V5 Token ID
|
|
261
|
+
v4TokenIds[106] = 49_000_000_076; // Original V4 Token ID
|
|
262
|
+
v5TokenIds[107] = 49_000_000_077; // Minted V5 Token ID
|
|
263
|
+
v4TokenIds[107] = 49_000_000_077; // Original V4 Token ID
|
|
264
|
+
v5TokenIds[108] = 49_000_000_078; // Minted V5 Token ID
|
|
265
|
+
v4TokenIds[108] = 49_000_000_078; // Original V4 Token ID
|
|
266
|
+
v5TokenIds[109] = 49_000_000_079; // Minted V5 Token ID
|
|
267
|
+
v4TokenIds[109] = 49_000_000_079; // Original V4 Token ID
|
|
268
|
+
v5TokenIds[110] = 49_000_000_080; // Minted V5 Token ID
|
|
269
|
+
v4TokenIds[110] = 49_000_000_080; // Original V4 Token ID
|
|
270
|
+
v5TokenIds[111] = 49_000_000_081; // Minted V5 Token ID
|
|
271
|
+
v4TokenIds[111] = 49_000_000_081; // Original V4 Token ID
|
|
272
|
+
v5TokenIds[112] = 49_000_000_082; // Minted V5 Token ID
|
|
273
|
+
v4TokenIds[112] = 49_000_000_082; // Original V4 Token ID
|
|
274
|
+
v5TokenIds[113] = 49_000_000_083; // Minted V5 Token ID
|
|
275
|
+
v4TokenIds[113] = 49_000_000_083; // Original V4 Token ID
|
|
276
|
+
v5TokenIds[114] = 49_000_000_084; // Minted V5 Token ID
|
|
277
|
+
v4TokenIds[114] = 49_000_000_084; // Original V4 Token ID
|
|
278
|
+
v5TokenIds[115] = 49_000_000_085; // Minted V5 Token ID
|
|
279
|
+
v4TokenIds[115] = 49_000_000_085; // Original V4 Token ID
|
|
280
|
+
v5TokenIds[116] = 49_000_000_086; // Minted V5 Token ID
|
|
281
|
+
v4TokenIds[116] = 49_000_000_086; // Original V4 Token ID
|
|
282
|
+
v5TokenIds[117] = 49_000_000_087; // Minted V5 Token ID
|
|
283
|
+
v4TokenIds[117] = 49_000_000_087; // Original V4 Token ID
|
|
284
|
+
v5TokenIds[118] = 49_000_000_088; // Minted V5 Token ID
|
|
285
|
+
v4TokenIds[118] = 49_000_000_088; // Original V4 Token ID
|
|
286
|
+
v5TokenIds[119] = 49_000_000_089; // Minted V5 Token ID
|
|
287
|
+
v4TokenIds[119] = 49_000_000_089; // Original V4 Token ID
|
|
288
|
+
v5TokenIds[120] = 49_000_000_090; // Minted V5 Token ID
|
|
289
|
+
v4TokenIds[120] = 49_000_000_090; // Original V4 Token ID
|
|
290
|
+
v5TokenIds[121] = 49_000_000_091; // Minted V5 Token ID
|
|
291
|
+
v4TokenIds[121] = 49_000_000_091; // Original V4 Token ID
|
|
292
|
+
v5TokenIds[122] = 49_000_000_092; // Minted V5 Token ID
|
|
293
|
+
v4TokenIds[122] = 49_000_000_092; // Original V4 Token ID
|
|
294
|
+
v5TokenIds[123] = 49_000_000_093; // Minted V5 Token ID
|
|
295
|
+
v4TokenIds[123] = 49_000_000_093; // Original V4 Token ID
|
|
296
|
+
v5TokenIds[124] = 49_000_000_094; // Minted V5 Token ID
|
|
297
|
+
v4TokenIds[124] = 49_000_000_094; // Original V4 Token ID
|
|
298
|
+
v5TokenIds[125] = 49_000_000_095; // Minted V5 Token ID
|
|
299
|
+
v4TokenIds[125] = 49_000_000_095; // Original V4 Token ID
|
|
300
|
+
v5TokenIds[126] = 49_000_000_096; // Minted V5 Token ID
|
|
301
|
+
v4TokenIds[126] = 49_000_000_096; // Original V4 Token ID
|
|
302
|
+
v5TokenIds[127] = 49_000_000_097; // Minted V5 Token ID
|
|
303
|
+
v4TokenIds[127] = 49_000_000_097; // Original V4 Token ID
|
|
304
|
+
v5TokenIds[128] = 49_000_000_098; // Minted V5 Token ID
|
|
305
|
+
v4TokenIds[128] = 49_000_000_098; // Original V4 Token ID
|
|
306
|
+
v5TokenIds[129] = 49_000_000_099; // Minted V5 Token ID
|
|
307
|
+
v4TokenIds[129] = 49_000_000_099; // Original V4 Token ID
|
|
308
|
+
v5TokenIds[130] = 49_000_000_100; // Minted V5 Token ID
|
|
309
|
+
v4TokenIds[130] = 49_000_000_100; // Original V4 Token ID
|
|
310
|
+
v5TokenIds[131] = 49_000_000_101; // Minted V5 Token ID
|
|
311
|
+
v4TokenIds[131] = 49_000_000_101; // Original V4 Token ID
|
|
312
|
+
v5TokenIds[132] = 49_000_000_102; // Minted V5 Token ID
|
|
313
|
+
v4TokenIds[132] = 49_000_000_102; // Original V4 Token ID
|
|
314
|
+
v5TokenIds[133] = 49_000_000_103; // Minted V5 Token ID
|
|
315
|
+
v4TokenIds[133] = 49_000_000_103; // Original V4 Token ID
|
|
316
|
+
v5TokenIds[134] = 49_000_000_104; // Minted V5 Token ID
|
|
317
|
+
v4TokenIds[134] = 49_000_000_104; // Original V4 Token ID
|
|
318
|
+
v5TokenIds[135] = 49_000_000_105; // Minted V5 Token ID
|
|
319
|
+
v4TokenIds[135] = 49_000_000_105; // Original V4 Token ID
|
|
320
|
+
v5TokenIds[136] = 49_000_000_106; // Minted V5 Token ID
|
|
321
|
+
v4TokenIds[136] = 49_000_000_106; // Original V4 Token ID
|
|
322
|
+
v5TokenIds[137] = 49_000_000_107; // Minted V5 Token ID
|
|
323
|
+
v4TokenIds[137] = 49_000_000_107; // Original V4 Token ID
|
|
324
|
+
v5TokenIds[138] = 49_000_000_108; // Minted V5 Token ID
|
|
325
|
+
v4TokenIds[138] = 49_000_000_108; // Original V4 Token ID
|
|
326
|
+
v5TokenIds[139] = 49_000_000_109; // Minted V5 Token ID
|
|
327
|
+
v4TokenIds[139] = 49_000_000_109; // Original V4 Token ID
|
|
328
|
+
v5TokenIds[140] = 49_000_000_110; // Minted V5 Token ID
|
|
329
|
+
v4TokenIds[140] = 49_000_000_110; // Original V4 Token ID
|
|
330
|
+
v5TokenIds[141] = 49_000_000_111; // Minted V5 Token ID
|
|
331
|
+
v4TokenIds[141] = 49_000_000_111; // Original V4 Token ID
|
|
332
|
+
v5TokenIds[142] = 49_000_000_112; // Minted V5 Token ID
|
|
333
|
+
v4TokenIds[142] = 49_000_000_112; // Original V4 Token ID
|
|
334
|
+
v5TokenIds[143] = 49_000_000_113; // Minted V5 Token ID
|
|
335
|
+
v4TokenIds[143] = 49_000_000_113; // Original V4 Token ID
|
|
336
|
+
v5TokenIds[144] = 49_000_000_114; // Minted V5 Token ID
|
|
337
|
+
v4TokenIds[144] = 49_000_000_114; // Original V4 Token ID
|
|
338
|
+
v5TokenIds[145] = 49_000_000_115; // Minted V5 Token ID
|
|
339
|
+
v4TokenIds[145] = 49_000_000_115; // Original V4 Token ID
|
|
340
|
+
v5TokenIds[146] = 49_000_000_116; // Minted V5 Token ID
|
|
341
|
+
v4TokenIds[146] = 49_000_000_116; // Original V4 Token ID
|
|
342
|
+
v5TokenIds[147] = 49_000_000_117; // Minted V5 Token ID
|
|
343
|
+
v4TokenIds[147] = 49_000_000_117; // Original V4 Token ID
|
|
344
|
+
v5TokenIds[148] = 49_000_000_118; // Minted V5 Token ID
|
|
345
|
+
v4TokenIds[148] = 49_000_000_118; // Original V4 Token ID
|
|
346
|
+
v5TokenIds[149] = 49_000_000_119; // Minted V5 Token ID
|
|
347
|
+
v4TokenIds[149] = 49_000_000_119; // Original V4 Token ID
|
|
348
|
+
v5TokenIds[150] = 49_000_000_120; // Minted V5 Token ID
|
|
349
|
+
v4TokenIds[150] = 49_000_000_120; // Original V4 Token ID
|
|
350
|
+
v5TokenIds[151] = 49_000_000_121; // Minted V5 Token ID
|
|
351
|
+
v4TokenIds[151] = 49_000_000_121; // Original V4 Token ID
|
|
352
|
+
v5TokenIds[152] = 49_000_000_122; // Minted V5 Token ID
|
|
353
|
+
v4TokenIds[152] = 49_000_000_122; // Original V4 Token ID
|
|
354
|
+
v5TokenIds[153] = 49_000_000_123; // Minted V5 Token ID
|
|
355
|
+
v4TokenIds[153] = 49_000_000_123; // Original V4 Token ID
|
|
356
|
+
v5TokenIds[154] = 49_000_000_124; // Minted V5 Token ID
|
|
357
|
+
v4TokenIds[154] = 49_000_000_124; // Original V4 Token ID
|
|
358
|
+
v5TokenIds[155] = 49_000_000_125; // Minted V5 Token ID
|
|
359
|
+
v4TokenIds[155] = 49_000_000_125; // Original V4 Token ID
|
|
360
|
+
v5TokenIds[156] = 49_000_000_126; // Minted V5 Token ID
|
|
361
|
+
v4TokenIds[156] = 49_000_000_126; // Original V4 Token ID
|
|
362
|
+
v5TokenIds[157] = 49_000_000_127; // Minted V5 Token ID
|
|
363
|
+
v4TokenIds[157] = 49_000_000_127; // Original V4 Token ID
|
|
364
|
+
v5TokenIds[158] = 49_000_000_128; // Minted V5 Token ID
|
|
365
|
+
v4TokenIds[158] = 49_000_000_128; // Original V4 Token ID
|
|
366
|
+
v5TokenIds[159] = 49_000_000_129; // Minted V5 Token ID
|
|
367
|
+
v4TokenIds[159] = 49_000_000_129; // Original V4 Token ID
|
|
368
|
+
v5TokenIds[160] = 49_000_000_130; // Minted V5 Token ID
|
|
369
|
+
v4TokenIds[160] = 49_000_000_130; // Original V4 Token ID
|
|
370
|
+
v5TokenIds[161] = 49_000_000_131; // Minted V5 Token ID
|
|
371
|
+
v4TokenIds[161] = 49_000_000_131; // Original V4 Token ID
|
|
372
|
+
v5TokenIds[162] = 49_000_000_132; // Minted V5 Token ID
|
|
373
|
+
v4TokenIds[162] = 49_000_000_132; // Original V4 Token ID
|
|
374
|
+
v5TokenIds[163] = 49_000_000_133; // Minted V5 Token ID
|
|
375
|
+
v4TokenIds[163] = 49_000_000_133; // Original V4 Token ID
|
|
376
|
+
v5TokenIds[164] = 49_000_000_134; // Minted V5 Token ID
|
|
377
|
+
v4TokenIds[164] = 49_000_000_134; // Original V4 Token ID
|
|
378
|
+
v5TokenIds[165] = 49_000_000_135; // Minted V5 Token ID
|
|
379
|
+
v4TokenIds[165] = 49_000_000_135; // Original V4 Token ID
|
|
380
|
+
v5TokenIds[166] = 49_000_000_136; // Minted V5 Token ID
|
|
381
|
+
v4TokenIds[166] = 49_000_000_136; // Original V4 Token ID
|
|
382
|
+
v5TokenIds[167] = 49_000_000_137; // Minted V5 Token ID
|
|
383
|
+
v4TokenIds[167] = 49_000_000_137; // Original V4 Token ID
|
|
384
|
+
v5TokenIds[168] = 49_000_000_138; // Minted V5 Token ID
|
|
385
|
+
v4TokenIds[168] = 49_000_000_138; // Original V4 Token ID
|
|
386
|
+
v5TokenIds[169] = 49_000_000_139; // Minted V5 Token ID
|
|
387
|
+
v4TokenIds[169] = 49_000_000_139; // Original V4 Token ID
|
|
388
|
+
v5TokenIds[170] = 49_000_000_140; // Minted V5 Token ID
|
|
389
|
+
v4TokenIds[170] = 49_000_000_140; // Original V4 Token ID
|
|
390
|
+
v5TokenIds[171] = 49_000_000_141; // Minted V5 Token ID
|
|
391
|
+
v4TokenIds[171] = 49_000_000_141; // Original V4 Token ID
|
|
392
|
+
v5TokenIds[172] = 49_000_000_142; // Minted V5 Token ID
|
|
393
|
+
v4TokenIds[172] = 49_000_000_142; // Original V4 Token ID
|
|
394
|
+
v5TokenIds[173] = 49_000_000_143; // Minted V5 Token ID
|
|
395
|
+
v4TokenIds[173] = 49_000_000_143; // Original V4 Token ID
|
|
396
|
+
v5TokenIds[174] = 49_000_000_144; // Minted V5 Token ID
|
|
397
|
+
v4TokenIds[174] = 49_000_000_144; // Original V4 Token ID
|
|
398
|
+
v5TokenIds[175] = 49_000_000_145; // Minted V5 Token ID
|
|
399
|
+
v4TokenIds[175] = 49_000_000_145; // Original V4 Token ID
|
|
400
|
+
|
|
401
|
+
uint256 successfulTransfers = 0;
|
|
402
|
+
|
|
403
|
+
for (uint256 i = 0; i < transferOwners.length; i++) {
|
|
404
|
+
uint256 v5TokenId = v5TokenIds[i];
|
|
405
|
+
uint256 v4TokenId = v4TokenIds[i];
|
|
406
|
+
|
|
407
|
+
// Verify V4 ownership using the original V4 token ID
|
|
408
|
+
// This will revert if the token doesn't exist, which indicates a data issue
|
|
409
|
+
address v4Owner = v4Hook.ownerOf(v4TokenId);
|
|
410
|
+
address expectedOwner = transferOwners[i];
|
|
411
|
+
|
|
412
|
+
// If V4 owner is the main resolver, this token is being worn/used and shouldn't be in unused assets
|
|
413
|
+
// contract
|
|
414
|
+
require(
|
|
415
|
+
v4Owner != address(v4ResolverAddress),
|
|
416
|
+
"Token owned by main resolver in V4 - should not be in unused assets contract"
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
// Special case: If V4 owner is the fallback resolver BUT expected owner is NOT a resolver,
|
|
420
|
+
// this is valid - the asset is being worn in V4 but we're minting directly to the actual owner in V5
|
|
421
|
+
// raw.json already accounts for this and has the correct owner
|
|
422
|
+
if (v4Owner == address(fallbackV4ResolverAddress)) {
|
|
423
|
+
// Allow if expected owner is not a resolver (we're minting directly to owner in V5)
|
|
424
|
+
require(
|
|
425
|
+
expectedOwner != address(v4ResolverAddress) && expectedOwner != address(fallbackV4ResolverAddress),
|
|
426
|
+
"Token owned by fallback resolver in V4 but expected owner is also a resolver - should not be in unused assets contract"
|
|
427
|
+
);
|
|
428
|
+
// Skip ownership verification in this case - we trust raw.json
|
|
429
|
+
} else {
|
|
430
|
+
// For all other cases, verify V4 owner matches expected owner
|
|
431
|
+
require(v4Owner == expectedOwner, "V4/V5 ownership mismatch for token");
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// Verify this contract owns the V5 token before transferring
|
|
435
|
+
require(hook.ownerOf(v5TokenId) == address(this), "Contract does not own token");
|
|
436
|
+
|
|
437
|
+
// Transfer using the minted V5 token ID
|
|
438
|
+
IERC721(address(hook)).safeTransferFrom(address(this), transferOwners[i], v5TokenId);
|
|
439
|
+
successfulTransfers++;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// Verify all expected items were transferred
|
|
443
|
+
require(successfulTransfers == transferOwners.length, "Not all items were transferred");
|
|
444
|
+
|
|
445
|
+
// Final verification: Ensure this contract no longer owns any tokens
|
|
446
|
+
// This ensures all transfers completed successfully and no tokens were left behind
|
|
447
|
+
require(hook.balanceOf(address(this)) == 0, "Contract still owns tokens after migration");
|
|
448
|
+
|
|
449
|
+
// Verify tier balances: V5 should never exceed V4 (except for tiers owned by fallback resolver in V4)
|
|
450
|
+
|
|
451
|
+
// // Collect unique owners
|
|
452
|
+
// address[] memory uniqueOwners = new address[](3);
|
|
453
|
+
|
|
454
|
+
// uniqueOwners[0] = 0x7C3F14075F6477fea1aF6cf59f325afDfcD3Ddf7;
|
|
455
|
+
// uniqueOwners[1] = 0x1C51517d8277C9aD6d701Fb5394ceC0C18219eDb;
|
|
456
|
+
// uniqueOwners[2] = 0x57a482EA32c7F75A9C0734206f5BD4f9BCb38e12;
|
|
457
|
+
|
|
458
|
+
// // Collect unique tier IDs
|
|
459
|
+
// uint256[] memory uniqueTierIds = new uint256[](7);
|
|
460
|
+
|
|
461
|
+
// uniqueTierIds[0] = 5;
|
|
462
|
+
// uniqueTierIds[1] = 19;
|
|
463
|
+
// uniqueTierIds[2] = 31;
|
|
464
|
+
// uniqueTierIds[3] = 32;
|
|
465
|
+
// uniqueTierIds[4] = 39;
|
|
466
|
+
// uniqueTierIds[5] = 47;
|
|
467
|
+
// uniqueTierIds[6] = 49;
|
|
468
|
+
|
|
469
|
+
// // Verify tier balances: V5 should never exceed V4 (except for tiers owned by fallback resolver in V4)
|
|
470
|
+
// MigrationHelper.verifyTierBalances(
|
|
471
|
+
// hookAddress,
|
|
472
|
+
// v4HookAddress,
|
|
473
|
+
// fallbackV4ResolverAddress,
|
|
474
|
+
// uniqueOwners,
|
|
475
|
+
// uniqueTierIds
|
|
476
|
+
// );
|
|
477
|
+
}
|
|
478
|
+
}
|