neozip-blockchain 0.5.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/LICENSE +22 -0
- package/README.md +189 -0
- package/dist/browser/TokenVerifierBrowser.d.ts +63 -0
- package/dist/browser/TokenVerifierBrowser.d.ts.map +1 -0
- package/dist/browser/TokenVerifierBrowser.js +358 -0
- package/dist/browser/TokenVerifierBrowser.js.map +1 -0
- package/dist/browser/WalletManagerBrowser.d.ts +99 -0
- package/dist/browser/WalletManagerBrowser.d.ts.map +1 -0
- package/dist/browser/WalletManagerBrowser.js +434 -0
- package/dist/browser/WalletManagerBrowser.js.map +1 -0
- package/dist/browser/ZipkitMinterBrowser.d.ts +59 -0
- package/dist/browser/ZipkitMinterBrowser.d.ts.map +1 -0
- package/dist/browser/ZipkitMinterBrowser.js +337 -0
- package/dist/browser/ZipkitMinterBrowser.js.map +1 -0
- package/dist/browser/index.d.ts +12 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +19 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/constants/index.d.ts +5 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +21 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/metadata.d.ts +18 -0
- package/dist/constants/metadata.d.ts.map +1 -0
- package/dist/constants/metadata.js +33 -0
- package/dist/constants/metadata.js.map +1 -0
- package/dist/constants/servers.d.ts +38 -0
- package/dist/constants/servers.d.ts.map +1 -0
- package/dist/constants/servers.js +54 -0
- package/dist/constants/servers.js.map +1 -0
- package/dist/core/ContractVersionRegistry.d.ts +63 -0
- package/dist/core/ContractVersionRegistry.d.ts.map +1 -0
- package/dist/core/ContractVersionRegistry.js +128 -0
- package/dist/core/ContractVersionRegistry.js.map +1 -0
- package/dist/core/WalletManager.d.ts +123 -0
- package/dist/core/WalletManager.d.ts.map +1 -0
- package/dist/core/WalletManager.js +360 -0
- package/dist/core/WalletManager.js.map +1 -0
- package/dist/core/ZipkitMinter.d.ts +155 -0
- package/dist/core/ZipkitMinter.d.ts.map +1 -0
- package/dist/core/ZipkitMinter.js +625 -0
- package/dist/core/ZipkitMinter.js.map +1 -0
- package/dist/core/ZipkitVerifier.d.ts +252 -0
- package/dist/core/ZipkitVerifier.d.ts.map +1 -0
- package/dist/core/ZipkitVerifier.js +1370 -0
- package/dist/core/ZipkitVerifier.js.map +1 -0
- package/dist/core/adapters/AdapterFactory.d.ts +22 -0
- package/dist/core/adapters/AdapterFactory.d.ts.map +1 -0
- package/dist/core/adapters/AdapterFactory.js +62 -0
- package/dist/core/adapters/AdapterFactory.js.map +1 -0
- package/dist/core/adapters/ContractVersionAdapter.d.ts +96 -0
- package/dist/core/adapters/ContractVersionAdapter.d.ts.map +1 -0
- package/dist/core/adapters/ContractVersionAdapter.js +9 -0
- package/dist/core/adapters/ContractVersionAdapter.js.map +1 -0
- package/dist/core/adapters/V2_10Adapter.d.ts +24 -0
- package/dist/core/adapters/V2_10Adapter.d.ts.map +1 -0
- package/dist/core/adapters/V2_10Adapter.js +87 -0
- package/dist/core/adapters/V2_10Adapter.js.map +1 -0
- package/dist/core/adapters/V2_11Adapter.d.ts +24 -0
- package/dist/core/adapters/V2_11Adapter.d.ts.map +1 -0
- package/dist/core/adapters/V2_11Adapter.js +87 -0
- package/dist/core/adapters/V2_11Adapter.js.map +1 -0
- package/dist/core/adapters/V2_50Adapter.d.ts +105 -0
- package/dist/core/adapters/V2_50Adapter.d.ts.map +1 -0
- package/dist/core/adapters/V2_50Adapter.js +263 -0
- package/dist/core/adapters/V2_50Adapter.js.map +1 -0
- package/dist/core/contracts.d.ts +169 -0
- package/dist/core/contracts.d.ts.map +1 -0
- package/dist/core/contracts.js +731 -0
- package/dist/core/contracts.js.map +1 -0
- package/dist/core/index.d.ts +24 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +82 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/node/WalletManagerNode.d.ts +47 -0
- package/dist/node/WalletManagerNode.d.ts.map +1 -0
- package/dist/node/WalletManagerNode.js +203 -0
- package/dist/node/WalletManagerNode.js.map +1 -0
- package/dist/node/index.d.ts +12 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +21 -0
- package/dist/node/index.js.map +1 -0
- package/dist/ots/ZipkitOTS.d.ts +152 -0
- package/dist/ots/ZipkitOTS.d.ts.map +1 -0
- package/dist/ots/ZipkitOTS.js +544 -0
- package/dist/ots/ZipkitOTS.js.map +1 -0
- package/dist/ots/index.d.ts +9 -0
- package/dist/ots/index.d.ts.map +1 -0
- package/dist/ots/index.js +25 -0
- package/dist/ots/index.js.map +1 -0
- package/dist/types/index.d.ts +84 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +37 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/Logger.d.ts +73 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +156 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/crc32.d.ts +6 -0
- package/dist/utils/crc32.d.ts.map +1 -0
- package/dist/utils/crc32.js +23 -0
- package/dist/utils/crc32.js.map +1 -0
- package/dist/zipstamp-server/CalendarManager.d.ts +238 -0
- package/dist/zipstamp-server/CalendarManager.d.ts.map +1 -0
- package/dist/zipstamp-server/CalendarManager.js +364 -0
- package/dist/zipstamp-server/CalendarManager.js.map +1 -0
- package/dist/zipstamp-server/ZipstampServerAPI.d.ts +427 -0
- package/dist/zipstamp-server/ZipstampServerAPI.d.ts.map +1 -0
- package/dist/zipstamp-server/ZipstampServerAPI.js +696 -0
- package/dist/zipstamp-server/ZipstampServerAPI.js.map +1 -0
- package/dist/zipstamp-server/ZipstampServerClient.d.ts +590 -0
- package/dist/zipstamp-server/ZipstampServerClient.d.ts.map +1 -0
- package/dist/zipstamp-server/ZipstampServerClient.js +433 -0
- package/dist/zipstamp-server/ZipstampServerClient.js.map +1 -0
- package/dist/zipstamp-server/ZipstampServerHelpers.d.ts +430 -0
- package/dist/zipstamp-server/ZipstampServerHelpers.d.ts.map +1 -0
- package/dist/zipstamp-server/ZipstampServerHelpers.js +503 -0
- package/dist/zipstamp-server/ZipstampServerHelpers.js.map +1 -0
- package/dist/zipstamp-server/index.d.ts +24 -0
- package/dist/zipstamp-server/index.d.ts.map +1 -0
- package/dist/zipstamp-server/index.js +67 -0
- package/dist/zipstamp-server/index.js.map +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Core WalletManager - Platform-agnostic wallet functionality
|
|
4
|
+
* Provides core wallet operations that work in both browser and server environments
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.WalletAnalyzer = exports.CoreWalletManager = void 0;
|
|
8
|
+
const ethers_1 = require("ethers");
|
|
9
|
+
const types_1 = require("../types");
|
|
10
|
+
const Logger_1 = require("../utils/Logger");
|
|
11
|
+
const contracts_1 = require("./contracts");
|
|
12
|
+
// Standard ERC ABIs for balance/display (not NZIP contracts)
|
|
13
|
+
const ERC20_ABI = [
|
|
14
|
+
"function balanceOf(address owner) view returns (uint256)",
|
|
15
|
+
"function name() view returns (string)",
|
|
16
|
+
"function symbol() view returns (string)",
|
|
17
|
+
"function decimals() view returns (uint8)"
|
|
18
|
+
];
|
|
19
|
+
const ERC721_ABI = [
|
|
20
|
+
"function balanceOf(address owner) view returns (uint256)",
|
|
21
|
+
"function name() view returns (string)",
|
|
22
|
+
"function symbol() view returns (string)",
|
|
23
|
+
"function tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)"
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Core wallet functionality that works in both browser and server environments
|
|
27
|
+
*/
|
|
28
|
+
class CoreWalletManager {
|
|
29
|
+
constructor() {
|
|
30
|
+
this.wallet = null;
|
|
31
|
+
this.provider = null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Setup wallet with private key and connect to network
|
|
35
|
+
*
|
|
36
|
+
* SECURITY WARNING: This method accepts a private key as a parameter.
|
|
37
|
+
* - Never hardcode private keys in source code
|
|
38
|
+
* - Always use environment variables for private keys
|
|
39
|
+
* - Use testnet keys for development/testing
|
|
40
|
+
* - Use secure key management (HSMs, KMS) for production
|
|
41
|
+
*/
|
|
42
|
+
async setupWallet(privateKey, network, mintToken = false) {
|
|
43
|
+
try {
|
|
44
|
+
const networkConfig = types_1.NETWORKS[network] || types_1.NETWORKS['base-sepolia'];
|
|
45
|
+
this.wallet = new ethers_1.ethers.Wallet(privateKey);
|
|
46
|
+
Logger_1.Logger.log(`Using wallet: ${this.wallet.address}`);
|
|
47
|
+
const ok = await this.connectToNetwork(networkConfig, mintToken);
|
|
48
|
+
if (!ok) {
|
|
49
|
+
return {
|
|
50
|
+
wallet: null,
|
|
51
|
+
provider: null,
|
|
52
|
+
success: false,
|
|
53
|
+
message: `Failed to connect to ${networkConfig.name} network. Blockchain operations require network connectivity.`
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
wallet: this.wallet,
|
|
58
|
+
provider: this.provider,
|
|
59
|
+
success: true,
|
|
60
|
+
message: `Wallet setup successful for ${networkConfig.name}`
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
Logger_1.Logger.error('Error setting up wallet:', error);
|
|
65
|
+
return {
|
|
66
|
+
wallet: null,
|
|
67
|
+
provider: null,
|
|
68
|
+
success: false,
|
|
69
|
+
message: `Wallet setup failed: ${error instanceof Error ? error.message : String(error)}`
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Connect to the specified network
|
|
75
|
+
*/
|
|
76
|
+
async connectToNetwork(networkConfig, mintToken) {
|
|
77
|
+
try {
|
|
78
|
+
Logger_1.Logger.log(`Attempting to connect to ${networkConfig.name} network...`);
|
|
79
|
+
this.provider = new ethers_1.ethers.JsonRpcProvider(networkConfig.rpcUrl);
|
|
80
|
+
let networkTimedOut = false;
|
|
81
|
+
const networkTimeout = setTimeout(() => {
|
|
82
|
+
networkTimedOut = true;
|
|
83
|
+
Logger_1.Logger.error("Network connection timeout");
|
|
84
|
+
}, 5000);
|
|
85
|
+
await Promise.race([
|
|
86
|
+
this.provider.getNetwork(),
|
|
87
|
+
new Promise((_, reject) => setTimeout(() => {
|
|
88
|
+
if (networkTimedOut)
|
|
89
|
+
reject(new Error("Network connection timeout"));
|
|
90
|
+
}, 5100))
|
|
91
|
+
]);
|
|
92
|
+
clearTimeout(networkTimeout);
|
|
93
|
+
if (this.wallet) {
|
|
94
|
+
this.wallet = this.wallet.connect(this.provider);
|
|
95
|
+
const balance = await this.provider.getBalance(this.wallet.address);
|
|
96
|
+
const balanceEth = ethers_1.ethers.formatEther(balance);
|
|
97
|
+
Logger_1.Logger.log(`Wallet balance: ${balanceEth} ETH`);
|
|
98
|
+
const minBalance = 0.0001;
|
|
99
|
+
if (parseFloat(balanceEth) < minBalance && mintToken) {
|
|
100
|
+
Logger_1.Logger.error(`ERROR: Insufficient balance (${balanceEth} ETH). Minimum required: ${minBalance} ETH`);
|
|
101
|
+
Logger_1.Logger.error('Get testnet ETH from: https://www.coinbase.com/faucets/base-ethereum-sepolia-faucet');
|
|
102
|
+
throw new Error(`Insufficient balance for minting. Current: ${balanceEth} ETH, Required: ${minBalance} ETH`);
|
|
103
|
+
}
|
|
104
|
+
else if (mintToken) {
|
|
105
|
+
Logger_1.Logger.log(`✅ Sufficient balance for token minting`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
Logger_1.Logger.log(`✅ Successfully connected to ${networkConfig.name}`);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
catch (networkError) {
|
|
112
|
+
const errorMessage = networkError instanceof Error ? networkError.message : String(networkError);
|
|
113
|
+
Logger_1.Logger.error(`Failed to connect to ${networkConfig.name} network: ${errorMessage}`);
|
|
114
|
+
this.provider = null;
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get the current wallet instance
|
|
120
|
+
*/
|
|
121
|
+
getWallet() {
|
|
122
|
+
return this.wallet;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get the current provider instance
|
|
126
|
+
*/
|
|
127
|
+
getProvider() {
|
|
128
|
+
return this.provider;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Check if wallet is ready
|
|
132
|
+
*/
|
|
133
|
+
isReady() {
|
|
134
|
+
return this.wallet !== null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Check if connected to network
|
|
138
|
+
*/
|
|
139
|
+
isOnline() {
|
|
140
|
+
return this.provider !== null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.CoreWalletManager = CoreWalletManager;
|
|
144
|
+
/**
|
|
145
|
+
* Wallet analyzer for blockchain operations
|
|
146
|
+
*/
|
|
147
|
+
class WalletAnalyzer {
|
|
148
|
+
constructor(provider) {
|
|
149
|
+
this.provider = provider;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get basic wallet information
|
|
153
|
+
*/
|
|
154
|
+
async getWalletBasics(address) {
|
|
155
|
+
const balance = await this.provider.getBalance(address);
|
|
156
|
+
const ethBalance = ethers_1.ethers.formatEther(balance);
|
|
157
|
+
const txCount = await this.provider.getTransactionCount(address);
|
|
158
|
+
const network = await this.provider.getNetwork();
|
|
159
|
+
const latestBlock = await this.provider.getBlockNumber();
|
|
160
|
+
return {
|
|
161
|
+
ethBalance,
|
|
162
|
+
transactionCount: txCount,
|
|
163
|
+
networkName: network.name,
|
|
164
|
+
chainId: network.chainId,
|
|
165
|
+
latestBlock
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Scan for NZIP tokens owned by an address
|
|
170
|
+
*/
|
|
171
|
+
async scanForNZipTokens(contractAddress, ownerAddress) {
|
|
172
|
+
const contract = new ethers_1.ethers.Contract(contractAddress, contracts_1.NZIP_CONTRACT_ABI, this.provider);
|
|
173
|
+
let foundTokens = [];
|
|
174
|
+
let searchMethod = 'none';
|
|
175
|
+
try {
|
|
176
|
+
const latestBlock = await this.provider.getBlockNumber();
|
|
177
|
+
const startBlock = Math.max(0, latestBlock - 50000);
|
|
178
|
+
const filter = contract.filters.ZipFileTokenized(null, ownerAddress);
|
|
179
|
+
const events = await contract.queryFilter(filter, startBlock, 'latest');
|
|
180
|
+
for (const event of events) {
|
|
181
|
+
if ('args' in event && event.args && event.args.tokenId) {
|
|
182
|
+
const tokenId = Number(event.args.tokenId);
|
|
183
|
+
if (!foundTokens.includes(tokenId))
|
|
184
|
+
foundTokens.push(tokenId);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (foundTokens.length > 0) {
|
|
188
|
+
return { foundTokens, searchMethod: 'recent-events' };
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch { }
|
|
192
|
+
try {
|
|
193
|
+
const totalSupply = await contract.totalSupply();
|
|
194
|
+
const maxCheck = Math.min(Number(totalSupply), 50);
|
|
195
|
+
for (let tokenId = 0; tokenId < maxCheck; tokenId++) {
|
|
196
|
+
try {
|
|
197
|
+
const owner = await contract.ownerOf(tokenId);
|
|
198
|
+
if (owner.toLowerCase() === ownerAddress.toLowerCase())
|
|
199
|
+
foundTokens.push(tokenId);
|
|
200
|
+
}
|
|
201
|
+
catch { }
|
|
202
|
+
}
|
|
203
|
+
if (foundTokens.length > 0)
|
|
204
|
+
return { foundTokens, searchMethod: 'iteration' };
|
|
205
|
+
}
|
|
206
|
+
catch { }
|
|
207
|
+
const commonTokenIds = Array.from({ length: 20 }, (_, i) => i);
|
|
208
|
+
for (const tokenId of commonTokenIds) {
|
|
209
|
+
try {
|
|
210
|
+
const owner = await contract.ownerOf(tokenId);
|
|
211
|
+
if (owner.toLowerCase() === ownerAddress.toLowerCase())
|
|
212
|
+
foundTokens.push(tokenId);
|
|
213
|
+
}
|
|
214
|
+
catch { }
|
|
215
|
+
}
|
|
216
|
+
return { foundTokens, searchMethod: foundTokens.length > 0 ? 'common-ids' : 'none' };
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get detailed information for NZIP tokens
|
|
220
|
+
*/
|
|
221
|
+
async getNZipTokenDetails(contractAddress, tokenIds) {
|
|
222
|
+
const contract = new ethers_1.ethers.Contract(contractAddress, contracts_1.NZIP_CONTRACT_ABI, this.provider);
|
|
223
|
+
const tokenDetails = [];
|
|
224
|
+
for (const tokenId of tokenIds) {
|
|
225
|
+
try {
|
|
226
|
+
const zipInfo = await contract.getZipFileInfo(tokenId);
|
|
227
|
+
tokenDetails.push({
|
|
228
|
+
tokenId: tokenId.toString(),
|
|
229
|
+
merkleRootHash: zipInfo.merkleRootHash,
|
|
230
|
+
timestamp: Number(zipInfo.creationTimestamp),
|
|
231
|
+
creator: zipInfo.creator,
|
|
232
|
+
creationTimestamp: Number(zipInfo.creationTimestamp),
|
|
233
|
+
tokenizationTime: Number(zipInfo.tokenizationTime),
|
|
234
|
+
ipfsHash: zipInfo.ipfsHash || undefined
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
Logger_1.Logger.error(`Error fetching details for token ${tokenId}:`, error);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return tokenDetails;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get contract information
|
|
245
|
+
*/
|
|
246
|
+
async getContractInfo(contractAddress) {
|
|
247
|
+
try {
|
|
248
|
+
const contract = new ethers_1.ethers.Contract(contractAddress, contracts_1.NZIP_CONTRACT_ABI, this.provider);
|
|
249
|
+
const [name, symbol, totalSupply] = await Promise.all([
|
|
250
|
+
contract.name(),
|
|
251
|
+
contract.symbol(),
|
|
252
|
+
contract.totalSupply()
|
|
253
|
+
]);
|
|
254
|
+
return { name, symbol, totalSupply: totalSupply.toString() };
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Check for ERC20 tokens
|
|
262
|
+
*/
|
|
263
|
+
async checkERC20Tokens(ownerAddress, tokenConfigs) {
|
|
264
|
+
const foundTokens = [];
|
|
265
|
+
for (const tokenConfig of tokenConfigs.filter(t => t.type === 'ERC20')) {
|
|
266
|
+
try {
|
|
267
|
+
const contract = new ethers_1.ethers.Contract(tokenConfig.address, ERC20_ABI, this.provider);
|
|
268
|
+
const balance = await contract.balanceOf(ownerAddress);
|
|
269
|
+
if (balance > 0) {
|
|
270
|
+
let name = tokenConfig.name, symbol = tokenConfig.symbol, decimals = 18;
|
|
271
|
+
try {
|
|
272
|
+
[name, symbol, decimals] = await Promise.all([
|
|
273
|
+
contract.name(),
|
|
274
|
+
contract.symbol(),
|
|
275
|
+
contract.decimals()
|
|
276
|
+
]);
|
|
277
|
+
}
|
|
278
|
+
catch { }
|
|
279
|
+
const formattedBalance = ethers_1.ethers.formatUnits(balance, decimals);
|
|
280
|
+
foundTokens.push({
|
|
281
|
+
address: tokenConfig.address,
|
|
282
|
+
name,
|
|
283
|
+
symbol,
|
|
284
|
+
balance: formattedBalance,
|
|
285
|
+
decimals,
|
|
286
|
+
type: 'ERC20'
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
catch { }
|
|
291
|
+
}
|
|
292
|
+
return foundTokens;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Check for NFT collections
|
|
296
|
+
*/
|
|
297
|
+
async checkNFTCollections(ownerAddress, nftConfigs) {
|
|
298
|
+
const foundNFTs = [];
|
|
299
|
+
for (const nftConfig of nftConfigs) {
|
|
300
|
+
try {
|
|
301
|
+
const contract = new ethers_1.ethers.Contract(nftConfig.address, ERC721_ABI, this.provider);
|
|
302
|
+
const balance = await contract.balanceOf(ownerAddress);
|
|
303
|
+
if (balance > 0) {
|
|
304
|
+
let name = nftConfig.name, symbol = nftConfig.symbol;
|
|
305
|
+
try {
|
|
306
|
+
[name, symbol] = await Promise.all([
|
|
307
|
+
contract.name(),
|
|
308
|
+
contract.symbol()
|
|
309
|
+
]);
|
|
310
|
+
}
|
|
311
|
+
catch { }
|
|
312
|
+
foundNFTs.push({
|
|
313
|
+
address: nftConfig.address,
|
|
314
|
+
name,
|
|
315
|
+
symbol,
|
|
316
|
+
balance: balance.toString(),
|
|
317
|
+
type: 'ERC721'
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
catch { }
|
|
322
|
+
}
|
|
323
|
+
return foundNFTs;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Get common token configurations for a network
|
|
327
|
+
*/
|
|
328
|
+
static getCommonTokens(network) {
|
|
329
|
+
const commonTokens = {
|
|
330
|
+
'base-sepolia': [
|
|
331
|
+
{ address: '0x036CbD53842c5426634e7929541eC2318f3dCF7e', name: 'USD Coin', symbol: 'USDC', type: 'ERC20' },
|
|
332
|
+
{ address: '0x4200000000000000000000000000000000000006', name: 'Wrapped Ether', symbol: 'WETH', type: 'ERC20' },
|
|
333
|
+
{ address: '0xE4aB69C077896252FAFBD49EFD26B5D171A32410', name: 'Coinbase Wrapped Staked ETH', symbol: 'cbETH', type: 'ERC20' },
|
|
334
|
+
],
|
|
335
|
+
'base': [
|
|
336
|
+
{ address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', name: 'USD Coin', symbol: 'USDC', type: 'ERC20' },
|
|
337
|
+
{ address: '0x4200000000000000000000000000000000000006', name: 'Wrapped Ether', symbol: 'WETH', type: 'ERC20' },
|
|
338
|
+
{ address: '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb', name: 'Dai Stablecoin', symbol: 'DAI', type: 'ERC20' },
|
|
339
|
+
{ address: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22', name: 'Coinbase Wrapped Staked ETH', symbol: 'cbETH', type: 'ERC20' },
|
|
340
|
+
{ address: '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA', name: 'USD Base Coin', symbol: 'USDbC', type: 'ERC20' },
|
|
341
|
+
]
|
|
342
|
+
};
|
|
343
|
+
return commonTokens[network] || [];
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Get common NFT configurations for a network
|
|
347
|
+
*/
|
|
348
|
+
static getCommonNFTs(network) {
|
|
349
|
+
const commonNFTs = {
|
|
350
|
+
'base-sepolia': [],
|
|
351
|
+
'base': [
|
|
352
|
+
{ address: '0x1234567890123456789012345678901234567890', name: 'Base Punks', symbol: 'BPUNK', type: 'ERC721' },
|
|
353
|
+
{ address: '0x0987654321098765432109876543210987654321', name: 'Base Bears', symbol: 'BBEAR', type: 'ERC721' },
|
|
354
|
+
]
|
|
355
|
+
};
|
|
356
|
+
return commonNFTs[network] || [];
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
exports.WalletAnalyzer = WalletAnalyzer;
|
|
360
|
+
//# sourceMappingURL=WalletManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalletManager.js","sourceRoot":"","sources":["../../src/core/WalletManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ZipkitMinter - Handles NFT token minting for ZIP files
|
|
4
|
+
* Minter API for NZIP-NFT smart contract.
|
|
5
|
+
*/
|
|
6
|
+
import { ethers } from 'ethers';
|
|
7
|
+
import { type ContractConfig } from './contracts';
|
|
8
|
+
import type { TokenMetadata } from '../types';
|
|
9
|
+
export interface MintingOptions {
|
|
10
|
+
walletPrivateKey: string;
|
|
11
|
+
network: string;
|
|
12
|
+
verbose?: boolean;
|
|
13
|
+
debug?: boolean;
|
|
14
|
+
rpcUrlIndex?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface MintingResult {
|
|
17
|
+
success: boolean;
|
|
18
|
+
message: string;
|
|
19
|
+
tokenId?: string;
|
|
20
|
+
transactionHash?: string;
|
|
21
|
+
contractAddress?: string;
|
|
22
|
+
blockNumber?: number;
|
|
23
|
+
walletAddress?: string;
|
|
24
|
+
gasUsed?: string;
|
|
25
|
+
gasCost?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface TokenInfo {
|
|
28
|
+
tokenId: string;
|
|
29
|
+
owner: string;
|
|
30
|
+
isOwnedByUser: boolean;
|
|
31
|
+
tokenData?: any;
|
|
32
|
+
}
|
|
33
|
+
export interface DuplicateCheckResult {
|
|
34
|
+
hasExistingTokens: boolean;
|
|
35
|
+
allTokens: TokenInfo[];
|
|
36
|
+
userOwnedTokens: TokenInfo[];
|
|
37
|
+
othersTokens: TokenInfo[];
|
|
38
|
+
}
|
|
39
|
+
export interface WalletInfo {
|
|
40
|
+
address: string;
|
|
41
|
+
balance: string;
|
|
42
|
+
networkName: string;
|
|
43
|
+
chainId: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Blockchain Token Minter for ZIP files
|
|
47
|
+
*
|
|
48
|
+
* SECURITY WARNING: This class handles private keys for blockchain operations.
|
|
49
|
+
* - Never hardcode private keys in source code
|
|
50
|
+
* - Always use environment variables for private keys (e.g., NEOZIP_WALLET_PASSKEY)
|
|
51
|
+
* - Use testnet keys for development/testing
|
|
52
|
+
* - Use secure key management (HSMs, KMS) for production
|
|
53
|
+
*/
|
|
54
|
+
export declare class ZipkitMinter {
|
|
55
|
+
protected provider: ethers.JsonRpcProvider;
|
|
56
|
+
protected wallet: ethers.Wallet;
|
|
57
|
+
protected contract: ethers.Contract;
|
|
58
|
+
protected merkleRoot: string;
|
|
59
|
+
protected encryptedHash: string;
|
|
60
|
+
protected networkConfig: ContractConfig;
|
|
61
|
+
protected debug: boolean;
|
|
62
|
+
protected rpcUrlIndex: number;
|
|
63
|
+
constructor(merkleRoot: string, options: MintingOptions & {
|
|
64
|
+
encryptedHash?: string;
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Get wallet information
|
|
68
|
+
*/
|
|
69
|
+
getWalletInfo(): Promise<WalletInfo>;
|
|
70
|
+
/**
|
|
71
|
+
* Check for existing tokens with same merkle root and verify ownership
|
|
72
|
+
*/
|
|
73
|
+
checkForDuplicates(): Promise<DuplicateCheckResult>;
|
|
74
|
+
/**
|
|
75
|
+
* Estimate gas costs for minting
|
|
76
|
+
*/
|
|
77
|
+
estimateGasCosts(): Promise<{
|
|
78
|
+
gasLimit: bigint;
|
|
79
|
+
gasPrice: bigint;
|
|
80
|
+
estimatedCost: string;
|
|
81
|
+
}>;
|
|
82
|
+
/**
|
|
83
|
+
* Create token metadata string
|
|
84
|
+
*/
|
|
85
|
+
private createTokenMetadataString;
|
|
86
|
+
/**
|
|
87
|
+
* Create TokenMetadata object from minting result
|
|
88
|
+
*/
|
|
89
|
+
private createTokenMetadata;
|
|
90
|
+
/**
|
|
91
|
+
* Mint new token on blockchain
|
|
92
|
+
*/
|
|
93
|
+
mintToken(): Promise<MintingResult>;
|
|
94
|
+
/**
|
|
95
|
+
* Main minting process - checks for duplicates, then mints if needed
|
|
96
|
+
*/
|
|
97
|
+
processMinting(): Promise<{
|
|
98
|
+
walletInfo: WalletInfo;
|
|
99
|
+
duplicateCheck: DuplicateCheckResult;
|
|
100
|
+
gasCosts?: {
|
|
101
|
+
gasLimit: bigint;
|
|
102
|
+
gasPrice: bigint;
|
|
103
|
+
estimatedCost: string;
|
|
104
|
+
};
|
|
105
|
+
mintingResult?: MintingResult;
|
|
106
|
+
tokenMetadata?: TokenMetadata;
|
|
107
|
+
}>;
|
|
108
|
+
/**
|
|
109
|
+
* Complete the minting after user confirmation
|
|
110
|
+
*/
|
|
111
|
+
completeMinting(): Promise<{
|
|
112
|
+
mintingResult: MintingResult;
|
|
113
|
+
tokenMetadata?: TokenMetadata;
|
|
114
|
+
}>;
|
|
115
|
+
/**
|
|
116
|
+
* Switch to a different RPC URL by index
|
|
117
|
+
* This recreates the provider, wallet, and contract with the new RPC
|
|
118
|
+
*/
|
|
119
|
+
switchRpcUrl(newIndex: number): void;
|
|
120
|
+
/**
|
|
121
|
+
* Destroy provider to allow process to exit
|
|
122
|
+
*/
|
|
123
|
+
destroy(): void;
|
|
124
|
+
/**
|
|
125
|
+
* Mint token with retry logic and exponential backoff
|
|
126
|
+
* @param maxRetries Maximum number of retry attempts (default: 3)
|
|
127
|
+
* @returns Minting result with retry information
|
|
128
|
+
*/
|
|
129
|
+
mintTokenWithRetry(maxRetries?: number): Promise<MintingResult>;
|
|
130
|
+
/**
|
|
131
|
+
* Batch minting for multiple archives
|
|
132
|
+
* @param archives Array of archive objects with name and merkleRoot
|
|
133
|
+
* @returns Array of minting results
|
|
134
|
+
*/
|
|
135
|
+
mintBatch(archives: Array<{
|
|
136
|
+
name: string;
|
|
137
|
+
merkleRoot: string;
|
|
138
|
+
}>): Promise<MintingResult[]>;
|
|
139
|
+
/**
|
|
140
|
+
* Create a token from a previously timestamped ZIP file.
|
|
141
|
+
* Extracts the merkle root from the timestamp metadata and mints a new token.
|
|
142
|
+
*
|
|
143
|
+
* @param zipkit - Zipkit-like instance containing timestamp metadata
|
|
144
|
+
* @param options - Additional options for minting
|
|
145
|
+
* @returns Minting result with token information
|
|
146
|
+
*/
|
|
147
|
+
mintFromTimestampedZip(zipkit: any, options?: {
|
|
148
|
+
preserveTimestampInfo?: boolean;
|
|
149
|
+
}): Promise<MintingResult>;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Utility function to validate Ethereum private key
|
|
153
|
+
*/
|
|
154
|
+
export declare function validatePrivateKey(privateKey: string): boolean;
|
|
155
|
+
//# sourceMappingURL=ZipkitMinter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZipkitMinter.d.ts","sourceRoot":"","sources":["../../src/core/ZipkitMinter.ts"],"names":[],"mappings":"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"}
|