neozipkit 0.2.1 → 0.3.0
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 +410 -186
- package/contracts/ABI.txt +889 -0
- package/contracts/Bytecode.txt +1 -0
- package/contracts/COMPILATION_NOTES.md +59 -0
- package/contracts/QUICK_DEPLOY.md +286 -0
- package/contracts/README.md +235 -131
- package/contracts/VERIFICATION.md +308 -0
- package/contracts/deploy-interactive.js +448 -0
- package/contracts/deployment-arbitrum-sepolia.json +12 -0
- package/contracts/deployment-arbitrum.json +12 -0
- package/contracts/deployment-eth-sepolia.json +12 -0
- package/contracts/hardhat.config.js +114 -0
- package/contracts/package.json +20 -0
- package/contracts/scripts/compile-and-extract.js +119 -0
- package/contracts/scripts/verify-contract.js +223 -0
- package/contracts/src/{NZIP-NFT-Private.sol → NZIP-NFT-v2.0.sol} +66 -151
- package/contracts/src/NZIP-NFT.sol +9 -15
- package/dist/blockchain/browser/TokenVerifierBrowser.d.ts +67 -0
- package/dist/blockchain/browser/TokenVerifierBrowser.d.ts.map +1 -0
- package/dist/blockchain/browser/TokenVerifierBrowser.js +313 -0
- package/dist/blockchain/browser/TokenVerifierBrowser.js.map +1 -0
- package/dist/blockchain/browser/WalletManagerBrowser.d.ts +98 -0
- package/dist/blockchain/browser/WalletManagerBrowser.d.ts.map +1 -0
- package/dist/blockchain/browser/WalletManagerBrowser.js +434 -0
- package/dist/blockchain/browser/WalletManagerBrowser.js.map +1 -0
- package/dist/blockchain/browser/ZipkitMinterBrowser.d.ts +58 -0
- package/dist/blockchain/browser/ZipkitMinterBrowser.d.ts.map +1 -0
- package/dist/blockchain/browser/ZipkitMinterBrowser.js +317 -0
- package/dist/blockchain/browser/ZipkitMinterBrowser.js.map +1 -0
- package/dist/blockchain/browser/index.d.ts +11 -0
- package/dist/blockchain/browser/index.d.ts.map +1 -0
- package/dist/blockchain/browser/index.js +16 -0
- package/dist/blockchain/browser/index.js.map +1 -0
- package/dist/blockchain/core/WalletManager.d.ts +124 -0
- package/dist/blockchain/core/WalletManager.d.ts.map +1 -0
- package/dist/blockchain/{ZipKitWallet.js → core/WalletManager.js} +157 -177
- package/dist/blockchain/core/WalletManager.js.map +1 -0
- package/dist/blockchain/{ZipKitMinter.d.ts → core/ZipkitMinter.d.ts} +46 -11
- package/dist/blockchain/core/ZipkitMinter.d.ts.map +1 -0
- package/dist/blockchain/core/ZipkitMinter.js +548 -0
- package/dist/blockchain/core/ZipkitMinter.js.map +1 -0
- package/dist/blockchain/{ZipKitOTS.d.ts → core/ZipkitOTS.d.ts} +6 -15
- package/dist/blockchain/core/ZipkitOTS.d.ts.map +1 -0
- package/dist/blockchain/{ZipKitOTS.js → core/ZipkitOTS.js} +26 -84
- package/dist/blockchain/core/ZipkitOTS.js.map +1 -0
- package/dist/blockchain/core/ZipkitVerifier.d.ts +177 -0
- package/dist/blockchain/core/ZipkitVerifier.d.ts.map +1 -0
- package/dist/blockchain/core/ZipkitVerifier.js +632 -0
- package/dist/blockchain/core/ZipkitVerifier.js.map +1 -0
- package/dist/blockchain/core/contracts.d.ts +83 -0
- package/dist/blockchain/core/contracts.d.ts.map +1 -0
- package/dist/blockchain/core/contracts.js +341 -0
- package/dist/blockchain/core/contracts.js.map +1 -0
- package/dist/blockchain/core/index.d.ts +12 -0
- package/dist/blockchain/core/index.d.ts.map +1 -0
- package/dist/blockchain/core/index.js +59 -0
- package/dist/blockchain/core/index.js.map +1 -0
- package/dist/blockchain/index.d.ts +11 -7
- package/dist/blockchain/index.d.ts.map +1 -0
- package/dist/blockchain/index.js +18 -34
- package/dist/blockchain/index.js.map +1 -0
- package/dist/blockchain/node/WalletManagerNode.d.ts +47 -0
- package/dist/blockchain/node/WalletManagerNode.d.ts.map +1 -0
- package/dist/blockchain/node/WalletManagerNode.js +203 -0
- package/dist/blockchain/node/WalletManagerNode.js.map +1 -0
- package/dist/blockchain/node/index.d.ts +12 -0
- package/dist/blockchain/node/index.d.ts.map +1 -0
- package/dist/blockchain/node/index.js +24 -0
- package/dist/blockchain/node/index.js.map +1 -0
- package/dist/browser/ZipkitBrowser.d.ts +27 -0
- package/dist/browser/ZipkitBrowser.d.ts.map +1 -0
- package/dist/browser/{ZipKitBrowser.js → ZipkitBrowser.js} +96 -43
- package/dist/browser/ZipkitBrowser.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 +42 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser-esm/index.d.ts +12 -0
- package/dist/browser-esm/index.js +59559 -0
- package/dist/browser-esm/index.js.map +7 -0
- package/dist/browser-umd/index.d.ts +12 -0
- package/dist/browser-umd/index.js +59576 -0
- package/dist/browser-umd/index.js.map +7 -0
- package/dist/browser-umd/index.min.js +63 -0
- package/dist/browser.d.ts +8 -14
- package/dist/browser.js +13 -28
- package/dist/core/ZipCompress.d.ts +99 -0
- package/dist/core/ZipCompress.d.ts.map +1 -0
- package/dist/core/ZipCompress.js +309 -0
- package/dist/core/ZipCompress.js.map +1 -0
- package/dist/core/ZipDecompress.d.ts +58 -0
- package/dist/core/ZipDecompress.d.ts.map +1 -0
- package/dist/core/ZipDecompress.js +172 -0
- package/dist/core/ZipDecompress.js.map +1 -0
- package/dist/{shared → core}/ZipEntry.d.ts +8 -1
- package/dist/core/ZipEntry.d.ts.map +1 -0
- package/dist/{shared → core}/ZipEntry.js +225 -82
- package/dist/core/ZipEntry.js.map +1 -0
- package/dist/core/Zipkit.d.ts +315 -0
- package/dist/core/Zipkit.d.ts.map +1 -0
- package/dist/core/Zipkit.js +647 -0
- package/dist/core/Zipkit.js.map +1 -0
- package/dist/core/components/HashCalculator.d.ts +138 -0
- package/dist/core/components/HashCalculator.d.ts.map +1 -0
- package/dist/core/components/HashCalculator.js +360 -0
- package/dist/core/components/HashCalculator.js.map +1 -0
- package/dist/core/components/Logger.d.ts +73 -0
- package/dist/core/components/Logger.d.ts.map +1 -0
- package/dist/core/components/Logger.js +156 -0
- package/dist/core/components/Logger.js.map +1 -0
- package/dist/core/components/ProgressTracker.d.ts +43 -0
- package/dist/core/components/ProgressTracker.d.ts.map +1 -0
- package/dist/core/components/ProgressTracker.js +112 -0
- package/dist/core/components/ProgressTracker.js.map +1 -0
- package/dist/{shared → core}/components/Support.d.ts +1 -0
- package/dist/core/components/Support.d.ts.map +1 -0
- package/dist/{shared → core}/components/Support.js +1 -0
- package/dist/core/components/Support.js.map +1 -0
- package/dist/{shared → core}/components/Util.d.ts +7 -2
- package/dist/core/components/Util.d.ts.map +1 -0
- package/dist/{shared → core}/components/Util.js +14 -34
- package/dist/core/components/Util.js.map +1 -0
- package/dist/{shared → core}/constants/Errors.d.ts +1 -2
- package/dist/core/constants/Errors.d.ts.map +1 -0
- package/dist/{shared → core}/constants/Errors.js +1 -3
- package/dist/core/constants/Errors.js.map +1 -0
- package/dist/{shared → core}/constants/Headers.d.ts +3 -0
- package/dist/core/constants/Headers.d.ts.map +1 -0
- package/dist/{shared → core}/constants/Headers.js +20 -17
- package/dist/core/constants/Headers.js.map +1 -0
- package/dist/core/encryption/Manager.d.ts +58 -0
- package/dist/core/encryption/Manager.d.ts.map +1 -0
- package/dist/core/encryption/Manager.js +121 -0
- package/dist/core/encryption/Manager.js.map +1 -0
- package/dist/core/encryption/ZipCrypto.d.ts +172 -0
- package/dist/core/encryption/ZipCrypto.d.ts.map +1 -0
- package/dist/core/encryption/ZipCrypto.js +554 -0
- package/dist/core/encryption/ZipCrypto.js.map +1 -0
- package/dist/core/encryption/index.d.ts +9 -0
- package/dist/core/encryption/index.d.ts.map +1 -0
- package/dist/core/encryption/index.js +17 -0
- package/dist/core/encryption/index.js.map +1 -0
- package/dist/core/encryption/types.d.ts +29 -0
- package/dist/core/encryption/types.d.ts.map +1 -0
- package/dist/core/encryption/types.js +12 -0
- package/dist/core/encryption/types.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 +57 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/version.d.ts +5 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +31 -0
- package/dist/core/version.js.map +1 -0
- package/dist/index.d.ts +8 -18
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -35
- package/dist/index.js.map +1 -0
- package/dist/node/ZipCompressNode.d.ts +123 -0
- package/dist/node/ZipCompressNode.d.ts.map +1 -0
- package/dist/node/ZipCompressNode.js +576 -0
- package/dist/node/ZipCompressNode.js.map +1 -0
- package/dist/node/ZipDecompressNode.d.ts +120 -0
- package/dist/node/ZipDecompressNode.d.ts.map +1 -0
- package/dist/node/ZipDecompressNode.js +461 -0
- package/dist/node/ZipDecompressNode.js.map +1 -0
- package/dist/node/ZipkitNode.d.ts +406 -0
- package/dist/node/ZipkitNode.d.ts.map +1 -0
- package/dist/node/ZipkitNode.js +1305 -0
- package/dist/node/ZipkitNode.js.map +1 -0
- package/dist/node/index.d.ts +26 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +65 -0
- package/dist/node/index.js.map +1 -0
- package/dist/types/index.d.ts +59 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +36 -1
- package/dist/types/index.js.map +1 -0
- package/examples/README.md +269 -0
- package/examples/blockchain-tokenize.ts +354 -0
- package/examples/create-zip.ts +172 -0
- package/examples/extract-zip.ts +158 -0
- package/examples/list-zip.ts +161 -0
- package/examples/test-files/data.json +116 -0
- package/examples/test-files/document.md +80 -0
- package/examples/test-files/document.txt +2 -0
- package/examples/test-files/file1.txt +48 -0
- package/examples/test-files/file2.txt +80 -0
- package/examples/tsconfig.json +44 -0
- package/examples/unzip-token.ts +491 -0
- package/examples/verify-tokenized-zip.ts +305 -0
- package/examples/zip-token.ts +604 -0
- package/package.json +108 -24
- package/src/blockchain/README.md +59 -66
- package/src/{browser/TokenVerifierBrowser.ts-remove → blockchain/browser/TokenVerifierBrowser.ts} +125 -79
- package/src/blockchain/browser/WalletManagerBrowser.ts +486 -0
- package/src/blockchain/browser/ZipkitMinterBrowser.ts +400 -0
- package/src/blockchain/browser/index.ts +13 -0
- package/src/blockchain/{ZipKitWallet.ts → core/WalletManager.ts} +241 -143
- package/src/blockchain/core/ZipkitMinter.ts +716 -0
- package/src/blockchain/{ZipKitOTS.ts → core/ZipkitOTS.ts} +28 -62
- package/src/blockchain/core/ZipkitVerifier.ts +853 -0
- package/src/blockchain/core/contracts.ts +370 -0
- package/src/blockchain/core/index.ts +71 -0
- package/src/blockchain/index.ts +21 -55
- package/src/blockchain/node/WalletManagerNode.ts +171 -0
- package/src/blockchain/node/index.ts +40 -0
- package/src/browser/{ZipKitBrowser.ts → ZipkitBrowser.ts} +104 -41
- package/src/browser/index.esm.ts +37 -0
- package/src/browser/index.ts +25 -0
- package/src/core/ZipCompress.ts +398 -0
- package/src/core/ZipDecompress.ts +212 -0
- package/src/{shared → core}/ZipEntry.ts +240 -90
- package/src/core/Zipkit.ts +794 -0
- package/src/core/components/HashCalculator.ts +384 -0
- package/src/core/components/Logger.ts +180 -0
- package/src/core/components/ProgressTracker.ts +134 -0
- package/src/{shared → core}/components/Util.ts +12 -34
- package/src/{shared → core}/constants/Errors.ts +0 -4
- package/src/{shared → core}/constants/Headers.ts +19 -17
- package/src/core/encryption/Manager.ts +137 -0
- package/src/core/encryption/ZipCrypto.ts +650 -0
- package/src/core/encryption/index.ts +15 -0
- package/src/core/encryption/types.ts +33 -0
- package/src/core/index.ts +34 -0
- package/src/core/version.ts +33 -0
- package/src/index.ts +54 -25
- package/src/node/ZipCompressNode.ts +632 -0
- package/src/node/ZipDecompressNode.ts +508 -0
- package/src/node/ZipkitNode.ts +1559 -0
- package/src/node/index.ts +69 -0
- package/src/types/index.ts +131 -1
- package/src/types/modules.d.ts +1 -11
- package/src/types/opentimestamps.d.ts +1 -23
- package/contracts/INTEGRATION.md +0 -338
- package/contracts/NETWORKS.md +0 -156
- package/contracts/NZIP-NFT-bytecode.txt +0 -1
- package/contracts/constants.ts +0 -952
- package/contracts/deploy-bytecode.mjs +0 -94
- package/dist/blockchain/CertificateToken.d.ts +0 -48
- package/dist/blockchain/CertificateToken.js +0 -386
- package/dist/blockchain/ZipKitMinter.js +0 -347
- package/dist/blockchain/ZipKitNFT.d.ts +0 -3
- package/dist/blockchain/ZipKitNFT.js +0 -7
- package/dist/blockchain/ZipKitVerifier.d.ts +0 -69
- package/dist/blockchain/ZipKitVerifier.js +0 -289
- package/dist/blockchain/ZipKitWallet.d.ts +0 -69
- package/dist/blockchain/contracts.d.ts +0 -14
- package/dist/blockchain/contracts.js +0 -77
- package/dist/blockchain/types.d.ts +0 -47
- package/dist/blockchain/types.js +0 -30
- package/dist/browser/ZipKitBrowser.d.ts +0 -18
- package/dist/browser/ZipKitStampBrowser.d.ts +0 -2
- package/dist/browser/ZipKitStampBrowser.js +0 -12
- package/dist/browser-index.d.ts +0 -18
- package/dist/browser-index.js +0 -57
- package/dist/server/ZipKitServer.d.ts +0 -74
- package/dist/server/ZipKitServer.js +0 -310
- package/dist/shared/ZipKit.d.ts +0 -243
- package/dist/shared/ZipKit.js +0 -772
- package/dist/shared/components/CertificateOTS.d.ts +0 -15
- package/dist/shared/components/CertificateOTS.js +0 -116
- package/dist/shared/components/FileSys.d.ts +0 -2
- package/dist/shared/components/FileSys.js +0 -113
- package/dist/shared/components/HashAccumulator.d.ts +0 -55
- package/dist/shared/components/HashAccumulator.js +0 -100
- package/dist/shared/components/ZipCrypto.d.ts +0 -3
- package/dist/shared/components/ZipCrypto.js +0 -78
- package/dist/shared/components/merkleTree.d.ts +0 -66
- package/dist/shared/components/merkleTree.js +0 -136
- package/dist/shared/types/index.d.ts +0 -21
- package/dist/shared/types/index.js +0 -3
- package/dist/shared/types.d.ts +0 -33
- package/dist/shared/types.js +0 -8
- package/dist/shared/version.d.ts +0 -2
- package/dist/shared/version.js +0 -6
- package/src/blockchain/CertificateToken.ts +0 -444
- package/src/blockchain/ZipKitMinter.ts +0 -470
- package/src/blockchain/ZipKitNFT.ts +0 -12
- package/src/blockchain/ZipKitVerifier.ts +0 -382
- package/src/blockchain/contracts.ts +0 -88
- package/src/blockchain/types.ts +0 -91
- package/src/browser/CertificateGeneratorBrowser.ts-remove +0 -498
- package/src/browser/ZipKitStampBrowser.ts +0 -9
- package/src/browser-index.ts +0 -36
- package/src/server/README.md +0 -25
- package/src/server/ZipKitServer.ts +0 -305
- package/src/shared/ZipKit.ts +0 -881
- package/src/shared/components/CertificateOTS.ts +0 -132
- package/src/shared/components/FileSys.ts +0 -87
- package/src/shared/components/HashAccumulator.ts +0 -113
- package/src/shared/components/ZipCrypto.ts +0 -91
- package/src/shared/components/merkleTree.ts +0 -162
- package/src/shared/types/index.ts +0 -25
- package/src/shared/types/modules.d.ts +0 -22
- package/src/shared/types/opentimestamps.d.ts +0 -23
- package/src/shared/types.d.ts +0 -8
- package/src/shared/types.ts +0 -43
- package/src/shared/version.ts +0 -3
- /package/src/{shared → core}/components/Support.ts +0 -0
|
@@ -1,347 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
/**
|
|
4
|
-
* ZipKitMinter - Handles NFT token minting for ZIP files
|
|
5
|
-
* Minter API for NZIP-NFT smart contract.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.ZipKitMinter = void 0;
|
|
9
|
-
exports.validatePrivateKey = validatePrivateKey;
|
|
10
|
-
const ethers_1 = require("ethers");
|
|
11
|
-
const contracts_1 = require("./contracts");
|
|
12
|
-
// Network configurations
|
|
13
|
-
const NETWORK_CONFIGS = {
|
|
14
|
-
'base-sepolia': {
|
|
15
|
-
name: 'Base Sepolia',
|
|
16
|
-
rpcUrl: 'https://sepolia.base.org',
|
|
17
|
-
contractAddress: contracts_1.CONTRACT_CONFIGS[84532].address, // Use real contract address
|
|
18
|
-
explorerUrl: 'https://sepolia.basescan.org',
|
|
19
|
-
chainId: 84532
|
|
20
|
-
},
|
|
21
|
-
'base-mainnet': {
|
|
22
|
-
name: 'Base Mainnet',
|
|
23
|
-
rpcUrl: 'https://mainnet.base.org',
|
|
24
|
-
contractAddress: contracts_1.CONTRACT_CONFIGS[8453].address, // Use real contract address
|
|
25
|
-
explorerUrl: 'https://basescan.org',
|
|
26
|
-
chainId: 8453
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* Blockchain Token Minter for ZIP files
|
|
31
|
-
*/
|
|
32
|
-
class ZipKitMinter {
|
|
33
|
-
constructor(archiveName, merkleRoot, options) {
|
|
34
|
-
this.archiveName = archiveName;
|
|
35
|
-
this.merkleRoot = merkleRoot;
|
|
36
|
-
this.debug = options.debug || false;
|
|
37
|
-
// Get network configuration
|
|
38
|
-
this.networkConfig = NETWORK_CONFIGS[options.network];
|
|
39
|
-
if (!this.networkConfig) {
|
|
40
|
-
throw new Error(`Unsupported network: ${options.network}`);
|
|
41
|
-
}
|
|
42
|
-
// Initialize provider for the specified network
|
|
43
|
-
this.provider = new ethers_1.ethers.JsonRpcProvider(this.networkConfig.rpcUrl);
|
|
44
|
-
// Initialize wallet from private key
|
|
45
|
-
this.wallet = new ethers_1.ethers.Wallet(options.walletPrivateKey, this.provider);
|
|
46
|
-
// Initialize contract instance
|
|
47
|
-
this.contract = new ethers_1.ethers.Contract(this.networkConfig.contractAddress, contracts_1.NZIP_CONTRACT_ABI, this.wallet);
|
|
48
|
-
if (this.debug) {
|
|
49
|
-
console.log(`[DEBUG] ZipKitMinter initialized for ${this.networkConfig.name}`);
|
|
50
|
-
console.log(`[DEBUG] Archive: ${archiveName}, Merkle: ${merkleRoot.substring(0, 10)}...`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Get wallet information
|
|
55
|
-
*/
|
|
56
|
-
async getWalletInfo() {
|
|
57
|
-
const balance = await this.provider.getBalance(this.wallet.address);
|
|
58
|
-
const balanceInEth = ethers_1.ethers.formatEther(balance);
|
|
59
|
-
if (this.debug) {
|
|
60
|
-
console.log(`[DEBUG] Wallet ${this.wallet.address} balance: ${balanceInEth} ETH`);
|
|
61
|
-
}
|
|
62
|
-
return {
|
|
63
|
-
address: this.wallet.address,
|
|
64
|
-
balance: balanceInEth,
|
|
65
|
-
networkName: this.networkConfig.name
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Check for existing tokens with same merkle root and verify ownership
|
|
70
|
-
*/
|
|
71
|
-
async checkForDuplicates() {
|
|
72
|
-
try {
|
|
73
|
-
if (this.debug) {
|
|
74
|
-
console.log(`[DEBUG] Checking for existing tokens with merkle root: ${this.merkleRoot}`);
|
|
75
|
-
console.log(`[DEBUG] User wallet address: ${this.wallet.address}`);
|
|
76
|
-
}
|
|
77
|
-
// Call contract method to check if merkle root already exists
|
|
78
|
-
const existingTokenIds = await this.contract.getTokensByMerkleRoot(this.merkleRoot);
|
|
79
|
-
if (!existingTokenIds || existingTokenIds.length === 0) {
|
|
80
|
-
if (this.debug) {
|
|
81
|
-
console.log(`[DEBUG] No existing tokens found for this merkle root`);
|
|
82
|
-
}
|
|
83
|
-
return {
|
|
84
|
-
hasExistingTokens: false,
|
|
85
|
-
allTokens: [],
|
|
86
|
-
userOwnedTokens: [],
|
|
87
|
-
othersTokens: []
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
if (this.debug) {
|
|
91
|
-
console.log(`[DEBUG] Found ${existingTokenIds.length} existing token(s)`);
|
|
92
|
-
}
|
|
93
|
-
// Check ownership and get token details for each token
|
|
94
|
-
const allTokens = [];
|
|
95
|
-
const userOwnedTokens = [];
|
|
96
|
-
const othersTokens = [];
|
|
97
|
-
for (const tokenId of existingTokenIds) {
|
|
98
|
-
const tokenIdStr = tokenId.toString();
|
|
99
|
-
try {
|
|
100
|
-
// Get token owner
|
|
101
|
-
const owner = await this.contract.ownerOf(tokenId);
|
|
102
|
-
const isOwnedByUser = owner.toLowerCase() === this.wallet.address.toLowerCase();
|
|
103
|
-
// Get token data
|
|
104
|
-
let tokenData = null;
|
|
105
|
-
try {
|
|
106
|
-
tokenData = await this.contract.getZipFileInfo(tokenId);
|
|
107
|
-
}
|
|
108
|
-
catch (e) {
|
|
109
|
-
if (this.debug) {
|
|
110
|
-
console.log(`[DEBUG] Could not get token data for ${tokenIdStr}: ${e}`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
const tokenInfo = {
|
|
114
|
-
tokenId: tokenIdStr,
|
|
115
|
-
owner: owner,
|
|
116
|
-
isOwnedByUser: isOwnedByUser,
|
|
117
|
-
tokenData: tokenData
|
|
118
|
-
};
|
|
119
|
-
allTokens.push(tokenInfo);
|
|
120
|
-
if (isOwnedByUser) {
|
|
121
|
-
userOwnedTokens.push(tokenInfo);
|
|
122
|
-
if (this.debug) {
|
|
123
|
-
console.log(`[DEBUG] Token ${tokenIdStr} is owned by user`);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
othersTokens.push(tokenInfo);
|
|
128
|
-
if (this.debug) {
|
|
129
|
-
console.log(`[DEBUG] Token ${tokenIdStr} is owned by ${owner}`);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
catch (e) {
|
|
134
|
-
if (this.debug) {
|
|
135
|
-
console.log(`[DEBUG] Error checking ownership for token ${tokenIdStr}: ${e}`);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return {
|
|
140
|
-
hasExistingTokens: true,
|
|
141
|
-
allTokens,
|
|
142
|
-
userOwnedTokens,
|
|
143
|
-
othersTokens
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
if (this.debug) {
|
|
148
|
-
console.log(`[DEBUG] Error checking duplicates: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
149
|
-
}
|
|
150
|
-
// If the contract method doesn't exist or fails, assume no duplicates
|
|
151
|
-
return {
|
|
152
|
-
hasExistingTokens: false,
|
|
153
|
-
allTokens: [],
|
|
154
|
-
userOwnedTokens: [],
|
|
155
|
-
othersTokens: []
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Estimate gas costs for minting
|
|
161
|
-
*/
|
|
162
|
-
async estimateGasCosts() {
|
|
163
|
-
const creationTimestamp = Math.floor(Date.now() / 1000);
|
|
164
|
-
const metadata = this.createTokenMetadataString();
|
|
165
|
-
// Estimate gas for the minting transaction
|
|
166
|
-
const gasLimit = await this.contract.publicMintZipFile.estimateGas(this.archiveName, this.merkleRoot, creationTimestamp, '', // ipfsHash
|
|
167
|
-
metadata);
|
|
168
|
-
const feeData = await this.provider.getFeeData();
|
|
169
|
-
const gasPrice = feeData.gasPrice || BigInt(0);
|
|
170
|
-
const estimatedCost = ethers_1.ethers.formatEther(gasLimit * gasPrice);
|
|
171
|
-
if (this.debug) {
|
|
172
|
-
console.log(`[DEBUG] Gas estimate - Limit: ${gasLimit}, Price: ${gasPrice}, Cost: ${estimatedCost} ETH`);
|
|
173
|
-
}
|
|
174
|
-
return { gasLimit, gasPrice, estimatedCost };
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Create token metadata string
|
|
178
|
-
*/
|
|
179
|
-
createTokenMetadataString() {
|
|
180
|
-
const now = new Date();
|
|
181
|
-
return JSON.stringify({
|
|
182
|
-
name: `NeoZip Archive: ${this.archiveName}`,
|
|
183
|
-
description: `Tokenized ZIP archive with cryptographic proof of integrity`,
|
|
184
|
-
image: '', // Could be a thumbnail or icon
|
|
185
|
-
archiveName: this.archiveName,
|
|
186
|
-
merkleRoot: this.merkleRoot,
|
|
187
|
-
network: this.networkConfig.name,
|
|
188
|
-
createdAt: now.toISOString(),
|
|
189
|
-
timestamp: Math.floor(now.getTime() / 1000)
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Create TokenMetadata object from minting result
|
|
194
|
-
*/
|
|
195
|
-
createTokenMetadata(tokenId, transactionHash, blockNumber) {
|
|
196
|
-
const now = new Date();
|
|
197
|
-
return {
|
|
198
|
-
tokenId,
|
|
199
|
-
network: this.networkConfig.name,
|
|
200
|
-
contractAddress: this.networkConfig.contractAddress,
|
|
201
|
-
merkleRoot: this.merkleRoot,
|
|
202
|
-
mintDate: now.toLocaleDateString('en-US') + ' at ' + now.toLocaleTimeString('en-US'),
|
|
203
|
-
creationTimestamp: Math.floor(now.getTime() / 1000),
|
|
204
|
-
archiveName: this.archiveName,
|
|
205
|
-
transactionHash,
|
|
206
|
-
blockNumber
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Mint new token on blockchain
|
|
211
|
-
*/
|
|
212
|
-
async mintToken() {
|
|
213
|
-
try {
|
|
214
|
-
if (this.debug) {
|
|
215
|
-
console.log(`[DEBUG] Starting token minting process`);
|
|
216
|
-
}
|
|
217
|
-
// Generate token ID (could be random or sequential)
|
|
218
|
-
const tokenId = Math.floor(Math.random() * 1000000).toString();
|
|
219
|
-
const metadata = this.createTokenMetadataString();
|
|
220
|
-
const creationTimestamp = Math.floor(Date.now() / 1000);
|
|
221
|
-
if (this.debug) {
|
|
222
|
-
console.log(`[DEBUG] Generated token ID: ${tokenId}`);
|
|
223
|
-
console.log(`[DEBUG] Metadata: ${metadata.substring(0, 100)}...`);
|
|
224
|
-
}
|
|
225
|
-
// Call the contract publicMintZipFile function
|
|
226
|
-
const tx = await this.contract.publicMintZipFile(this.archiveName, this.merkleRoot, creationTimestamp, '', // ipfsHash (empty since we store in ZIP)
|
|
227
|
-
metadata);
|
|
228
|
-
if (this.debug) {
|
|
229
|
-
console.log(`[DEBUG] Transaction submitted: ${tx.hash}`);
|
|
230
|
-
}
|
|
231
|
-
// Wait for transaction confirmation
|
|
232
|
-
const receipt = await tx.wait();
|
|
233
|
-
if (this.debug) {
|
|
234
|
-
console.log(`[DEBUG] Transaction confirmed in block: ${receipt.blockNumber}`);
|
|
235
|
-
console.log(`[DEBUG] Gas used: ${receipt.gasUsed}`);
|
|
236
|
-
}
|
|
237
|
-
// Extract actual token ID from contract events
|
|
238
|
-
let actualTokenId = tokenId; // fallback
|
|
239
|
-
if (receipt.logs && receipt.logs.length > 0) {
|
|
240
|
-
try {
|
|
241
|
-
const iface = new ethers_1.ethers.Interface(contracts_1.NZIP_CONTRACT_ABI);
|
|
242
|
-
for (const log of receipt.logs) {
|
|
243
|
-
try {
|
|
244
|
-
const parsed = iface.parseLog(log);
|
|
245
|
-
if (parsed?.name === 'ZipFileTokenized') {
|
|
246
|
-
actualTokenId = parsed.args.tokenId.toString();
|
|
247
|
-
if (this.debug) {
|
|
248
|
-
console.log(`[DEBUG] Actual token ID from contract event: ${actualTokenId}`);
|
|
249
|
-
}
|
|
250
|
-
break;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
catch (e) {
|
|
254
|
-
// Ignore parsing errors for non-matching logs
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
catch (e) {
|
|
259
|
-
if (this.debug) {
|
|
260
|
-
console.log(`[DEBUG] Could not parse token ID from logs: ${e}`);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
const gasCost = ethers_1.ethers.formatEther(receipt.gasUsed * (receipt.gasPrice || BigInt(0)));
|
|
265
|
-
return {
|
|
266
|
-
success: true,
|
|
267
|
-
message: `Token successfully minted`,
|
|
268
|
-
tokenId: actualTokenId,
|
|
269
|
-
transactionHash: tx.hash,
|
|
270
|
-
contractAddress: this.networkConfig.contractAddress,
|
|
271
|
-
blockNumber: receipt.blockNumber,
|
|
272
|
-
walletAddress: this.wallet.address,
|
|
273
|
-
gasUsed: receipt.gasUsed.toString(),
|
|
274
|
-
gasCost
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
catch (error) {
|
|
278
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown minting error';
|
|
279
|
-
if (this.debug) {
|
|
280
|
-
console.log(`[DEBUG] Minting failed: ${errorMessage}`);
|
|
281
|
-
}
|
|
282
|
-
return {
|
|
283
|
-
success: false,
|
|
284
|
-
message: errorMessage
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Main minting process - checks for duplicates, then mints if needed
|
|
290
|
-
*/
|
|
291
|
-
async processMinting() {
|
|
292
|
-
try {
|
|
293
|
-
// Get wallet information
|
|
294
|
-
const walletInfo = await this.getWalletInfo();
|
|
295
|
-
// Check for duplicates first (free operation)
|
|
296
|
-
const duplicateCheck = await this.checkForDuplicates();
|
|
297
|
-
if (duplicateCheck.hasExistingTokens) {
|
|
298
|
-
if (this.debug) {
|
|
299
|
-
console.log(`[DEBUG] Existing tokens found, user will choose`);
|
|
300
|
-
}
|
|
301
|
-
return {
|
|
302
|
-
walletInfo,
|
|
303
|
-
duplicateCheck
|
|
304
|
-
};
|
|
305
|
-
}
|
|
306
|
-
// Estimate gas costs
|
|
307
|
-
const gasCosts = await this.estimateGasCosts();
|
|
308
|
-
// This is where the user would be prompted for confirmation in the calling code
|
|
309
|
-
// The actual minting happens in a separate call to mintToken()
|
|
310
|
-
return {
|
|
311
|
-
walletInfo,
|
|
312
|
-
duplicateCheck,
|
|
313
|
-
gasCosts
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
catch (error) {
|
|
317
|
-
throw new Error(`Minting process failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Complete the minting after user confirmation
|
|
322
|
-
*/
|
|
323
|
-
async completeMinting() {
|
|
324
|
-
const mintingResult = await this.mintToken();
|
|
325
|
-
if (mintingResult.success && mintingResult.tokenId && mintingResult.transactionHash) {
|
|
326
|
-
const tokenMetadata = this.createTokenMetadata(mintingResult.tokenId, mintingResult.transactionHash, mintingResult.blockNumber);
|
|
327
|
-
return {
|
|
328
|
-
mintingResult,
|
|
329
|
-
tokenMetadata
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
return { mintingResult };
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
exports.ZipKitMinter = ZipKitMinter;
|
|
336
|
-
/**
|
|
337
|
-
* Utility function to validate Ethereum private key
|
|
338
|
-
*/
|
|
339
|
-
function validatePrivateKey(privateKey) {
|
|
340
|
-
try {
|
|
341
|
-
new ethers_1.ethers.Wallet(privateKey);
|
|
342
|
-
return true;
|
|
343
|
-
}
|
|
344
|
-
catch {
|
|
345
|
-
return false;
|
|
346
|
-
}
|
|
347
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZipKitVerifier = exports.ZipKitMinter = void 0;
|
|
4
|
-
// Re-export NFT classes and types without aliases
|
|
5
|
-
var _1 = require(".");
|
|
6
|
-
Object.defineProperty(exports, "ZipKitMinter", { enumerable: true, get: function () { return _1.ZipKitMinter; } });
|
|
7
|
-
Object.defineProperty(exports, "ZipKitVerifier", { enumerable: true, get: function () { return _1.ZipKitVerifier; } });
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* ZipKitVerifier - Handles NFT token verification for ZIP files
|
|
4
|
-
* Verifier API for NZIP-NFT smart contract.
|
|
5
|
-
*/
|
|
6
|
-
import type { TokenMetadata } from './types';
|
|
7
|
-
export interface VerificationOptions {
|
|
8
|
-
debug?: boolean;
|
|
9
|
-
skipHash?: boolean;
|
|
10
|
-
}
|
|
11
|
-
export interface VerificationResult {
|
|
12
|
-
success: boolean;
|
|
13
|
-
message: string;
|
|
14
|
-
tokenMetadata?: TokenMetadata;
|
|
15
|
-
verificationDetails?: {
|
|
16
|
-
tokenId: string;
|
|
17
|
-
network: string;
|
|
18
|
-
contractAddress: string;
|
|
19
|
-
merkleRoot: string;
|
|
20
|
-
mintDate: string;
|
|
21
|
-
calculatedMerkleRoot?: string;
|
|
22
|
-
declaredMerkleRoot?: string;
|
|
23
|
-
merkleRootMatch?: boolean;
|
|
24
|
-
onChainValid?: boolean;
|
|
25
|
-
};
|
|
26
|
-
errorDetails?: {
|
|
27
|
-
errorType: 'METADATA_ERROR' | 'MERKLE_ERROR' | 'NETWORK_ERROR' | 'CONTRACT_ERROR';
|
|
28
|
-
networkName?: string;
|
|
29
|
-
rpcUrl?: string;
|
|
30
|
-
contractAddress?: string;
|
|
31
|
-
tokenId?: string;
|
|
32
|
-
merkleRoot?: string;
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Blockchain Token Verifier for ZIP files
|
|
37
|
-
*/
|
|
38
|
-
export declare class ZipKitVerifier {
|
|
39
|
-
private debug;
|
|
40
|
-
constructor(options?: VerificationOptions);
|
|
41
|
-
/**
|
|
42
|
-
* Extract and validate token metadata from ZIP
|
|
43
|
-
*/
|
|
44
|
-
extractTokenMetadata(tokenBuffer: Buffer): Promise<{
|
|
45
|
-
success: boolean;
|
|
46
|
-
metadata?: TokenMetadata;
|
|
47
|
-
error?: string;
|
|
48
|
-
}>;
|
|
49
|
-
/**
|
|
50
|
-
* Map network name to RPC configuration
|
|
51
|
-
*/
|
|
52
|
-
private getNetworkConfig;
|
|
53
|
-
/**
|
|
54
|
-
* Perform merkle root comparison
|
|
55
|
-
*/
|
|
56
|
-
private compareMerkleRoots;
|
|
57
|
-
/**
|
|
58
|
-
* Verify token against blockchain
|
|
59
|
-
*/
|
|
60
|
-
verifyOnChain(tokenId: string, contractAddress: string, networkConfig: any, merkleRoot: string): Promise<{
|
|
61
|
-
success: boolean;
|
|
62
|
-
isValid?: boolean;
|
|
63
|
-
error?: string;
|
|
64
|
-
}>;
|
|
65
|
-
/**
|
|
66
|
-
* Complete verification process
|
|
67
|
-
*/
|
|
68
|
-
verifyToken(tokenMetadata: TokenMetadata, calculatedMerkleRoot: string | null, options?: VerificationOptions): Promise<VerificationResult>;
|
|
69
|
-
}
|