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
|
@@ -0,0 +1,548 @@
|
|
|
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
|
+
/**
|
|
13
|
+
* Blockchain Token Minter for ZIP files
|
|
14
|
+
*
|
|
15
|
+
* SECURITY WARNING: This class handles private keys for blockchain operations.
|
|
16
|
+
* - Never hardcode private keys in source code
|
|
17
|
+
* - Always use environment variables for private keys (e.g., NEOZIP_WALLET_PASSKEY)
|
|
18
|
+
* - Use testnet keys for development/testing
|
|
19
|
+
* - Use secure key management (HSMs, KMS) for production
|
|
20
|
+
* - See SECURITY.md for complete security guidelines
|
|
21
|
+
*/
|
|
22
|
+
class ZipkitMinter {
|
|
23
|
+
constructor(merkleRoot, options) {
|
|
24
|
+
this.merkleRoot = merkleRoot;
|
|
25
|
+
this.debug = options.debug || false;
|
|
26
|
+
this.rpcUrlIndex = options.rpcUrlIndex ?? 0;
|
|
27
|
+
// Get chain ID from network name using contracts.ts (single source of truth)
|
|
28
|
+
const chainId = (0, contracts_1.getChainIdByName)(options.network);
|
|
29
|
+
if (!chainId) {
|
|
30
|
+
const supported = (0, contracts_1.getSupportedNetworkNames)().join(', ');
|
|
31
|
+
throw new Error(`Unsupported network: ${options.network}. Supported networks: ${supported}`);
|
|
32
|
+
}
|
|
33
|
+
// Get network configuration from contracts.ts
|
|
34
|
+
this.networkConfig = (0, contracts_1.getContractConfig)(chainId);
|
|
35
|
+
if (this.networkConfig.rpcUrls.length === 0) {
|
|
36
|
+
throw new Error(`No RPC URLs configured for network: ${options.network} (chainId: ${chainId})`);
|
|
37
|
+
}
|
|
38
|
+
// Validate RPC URL index
|
|
39
|
+
if (this.rpcUrlIndex < 0 || this.rpcUrlIndex >= this.networkConfig.rpcUrls.length) {
|
|
40
|
+
throw new Error(`RPC URL index ${this.rpcUrlIndex} is out of range. Available RPCs: ${this.networkConfig.rpcUrls.length}`);
|
|
41
|
+
}
|
|
42
|
+
// Use specified RPC URL index
|
|
43
|
+
const rpcUrl = this.networkConfig.rpcUrls[this.rpcUrlIndex];
|
|
44
|
+
this.provider = new ethers_1.ethers.JsonRpcProvider(rpcUrl);
|
|
45
|
+
if (this.debug) {
|
|
46
|
+
console.log(`[DEBUG] Using RPC URL index ${this.rpcUrlIndex}: ${rpcUrl}`);
|
|
47
|
+
console.log(`[DEBUG] Available RPC URLs: ${this.networkConfig.rpcUrls.length}`);
|
|
48
|
+
}
|
|
49
|
+
// Initialize wallet from private key
|
|
50
|
+
// SECURITY: Private key should come from environment variable, never hardcoded
|
|
51
|
+
this.wallet = new ethers_1.ethers.Wallet(options.walletPrivateKey, this.provider);
|
|
52
|
+
// Initialize contract instance
|
|
53
|
+
this.contract = new ethers_1.ethers.Contract(this.networkConfig.address, contracts_1.NZIP_CONTRACT_ABI, this.wallet);
|
|
54
|
+
if (this.debug) {
|
|
55
|
+
console.log(`[DEBUG] ZipkitMinter initialized for ${this.networkConfig.network}`);
|
|
56
|
+
console.log(`[DEBUG] Chain ID: ${this.networkConfig.chainId}`);
|
|
57
|
+
console.log(`[DEBUG] Contract Address: ${this.networkConfig.address}`);
|
|
58
|
+
console.log(`[DEBUG] Merkle Root: ${merkleRoot.substring(0, 10)}...`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get wallet information
|
|
63
|
+
*/
|
|
64
|
+
async getWalletInfo() {
|
|
65
|
+
const balance = await this.provider.getBalance(this.wallet.address);
|
|
66
|
+
const balanceInEth = ethers_1.ethers.formatEther(balance);
|
|
67
|
+
if (this.debug) {
|
|
68
|
+
console.log(`[DEBUG] Wallet ${this.wallet.address} balance: ${balanceInEth} ETH`);
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
address: this.wallet.address,
|
|
72
|
+
balance: balanceInEth,
|
|
73
|
+
networkName: this.networkConfig.network
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Check for existing tokens with same merkle root and verify ownership
|
|
78
|
+
*/
|
|
79
|
+
async checkForDuplicates() {
|
|
80
|
+
try {
|
|
81
|
+
if (this.debug) {
|
|
82
|
+
console.log(`[DEBUG] Checking for existing tokens with merkle root: ${this.merkleRoot}`);
|
|
83
|
+
console.log(`[DEBUG] User wallet address: ${this.wallet.address}`);
|
|
84
|
+
}
|
|
85
|
+
// Call contract method to check if merkle root already exists
|
|
86
|
+
const existingTokenIds = await this.contract.getTokensByMerkleRoot(this.merkleRoot);
|
|
87
|
+
if (!existingTokenIds || existingTokenIds.length === 0) {
|
|
88
|
+
if (this.debug) {
|
|
89
|
+
console.log(`[DEBUG] No existing tokens found for this merkle root`);
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
hasExistingTokens: false,
|
|
93
|
+
allTokens: [],
|
|
94
|
+
userOwnedTokens: [],
|
|
95
|
+
othersTokens: []
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (this.debug) {
|
|
99
|
+
console.log(`[DEBUG] Found ${existingTokenIds.length} existing token(s)`);
|
|
100
|
+
}
|
|
101
|
+
// Check ownership and get token details for each token
|
|
102
|
+
const allTokens = [];
|
|
103
|
+
const userOwnedTokens = [];
|
|
104
|
+
const othersTokens = [];
|
|
105
|
+
for (const tokenId of existingTokenIds) {
|
|
106
|
+
const tokenIdStr = tokenId.toString();
|
|
107
|
+
try {
|
|
108
|
+
// Get token owner
|
|
109
|
+
const owner = await this.contract.ownerOf(tokenId);
|
|
110
|
+
const isOwnedByUser = owner.toLowerCase() === this.wallet.address.toLowerCase();
|
|
111
|
+
// Get token data
|
|
112
|
+
let tokenData = null;
|
|
113
|
+
try {
|
|
114
|
+
tokenData = await this.contract.getZipFileInfo(tokenId);
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
if (this.debug) {
|
|
118
|
+
console.log(`[DEBUG] Could not get token data for ${tokenIdStr}: ${e}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const tokenInfo = {
|
|
122
|
+
tokenId: tokenIdStr,
|
|
123
|
+
owner: owner,
|
|
124
|
+
isOwnedByUser: isOwnedByUser,
|
|
125
|
+
tokenData: tokenData
|
|
126
|
+
};
|
|
127
|
+
allTokens.push(tokenInfo);
|
|
128
|
+
if (isOwnedByUser) {
|
|
129
|
+
userOwnedTokens.push(tokenInfo);
|
|
130
|
+
if (this.debug) {
|
|
131
|
+
console.log(`[DEBUG] Token ${tokenIdStr} is owned by user`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
othersTokens.push(tokenInfo);
|
|
136
|
+
if (this.debug) {
|
|
137
|
+
console.log(`[DEBUG] Token ${tokenIdStr} is owned by ${owner}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
if (this.debug) {
|
|
143
|
+
console.log(`[DEBUG] Error checking ownership for token ${tokenIdStr}: ${e}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
hasExistingTokens: true,
|
|
149
|
+
allTokens,
|
|
150
|
+
userOwnedTokens,
|
|
151
|
+
othersTokens
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (this.debug) {
|
|
156
|
+
console.log(`[DEBUG] Error checking duplicates: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
157
|
+
}
|
|
158
|
+
// If the contract method doesn't exist or fails, assume no duplicates
|
|
159
|
+
return {
|
|
160
|
+
hasExistingTokens: false,
|
|
161
|
+
allTokens: [],
|
|
162
|
+
userOwnedTokens: [],
|
|
163
|
+
othersTokens: []
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Estimate gas costs for minting
|
|
169
|
+
*/
|
|
170
|
+
async estimateGasCosts() {
|
|
171
|
+
const creationTimestamp = Math.floor(Date.now() / 1000);
|
|
172
|
+
const metadata = this.createTokenMetadataString();
|
|
173
|
+
// Estimate gas for the minting transaction
|
|
174
|
+
const gasLimit = await this.contract.publicMintZipFile.estimateGas(this.merkleRoot, creationTimestamp, '', // ipfsHash
|
|
175
|
+
metadata);
|
|
176
|
+
const feeData = await this.provider.getFeeData();
|
|
177
|
+
const gasPrice = feeData.gasPrice || BigInt(0);
|
|
178
|
+
const estimatedCost = ethers_1.ethers.formatEther(gasLimit * gasPrice);
|
|
179
|
+
if (this.debug) {
|
|
180
|
+
console.log(`[DEBUG] Gas estimate - Limit: ${gasLimit}, Price: ${gasPrice}, Cost: ${estimatedCost} ETH`);
|
|
181
|
+
}
|
|
182
|
+
return { gasLimit, gasPrice, estimatedCost };
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Create token metadata string
|
|
186
|
+
*/
|
|
187
|
+
createTokenMetadataString() {
|
|
188
|
+
const now = new Date();
|
|
189
|
+
return JSON.stringify({
|
|
190
|
+
name: `NeoZip Archive`,
|
|
191
|
+
description: `Tokenized ZIP archive with cryptographic proof of integrity`,
|
|
192
|
+
image: '', // Could be a thumbnail or icon
|
|
193
|
+
merkleRoot: this.merkleRoot,
|
|
194
|
+
network: this.networkConfig.network,
|
|
195
|
+
createdAt: now.toISOString(),
|
|
196
|
+
timestamp: Math.floor(now.getTime() / 1000)
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Create TokenMetadata object from minting result
|
|
201
|
+
*/
|
|
202
|
+
createTokenMetadata(tokenId, transactionHash, blockNumber) {
|
|
203
|
+
const now = new Date();
|
|
204
|
+
return {
|
|
205
|
+
tokenId,
|
|
206
|
+
network: this.networkConfig.network,
|
|
207
|
+
networkChainId: this.networkConfig.chainId,
|
|
208
|
+
contractAddress: this.networkConfig.address,
|
|
209
|
+
merkleRoot: this.merkleRoot,
|
|
210
|
+
mintDate: now.toLocaleDateString('en-US') + ' at ' + now.toLocaleTimeString('en-US'),
|
|
211
|
+
creationTimestamp: Math.floor(now.getTime() / 1000),
|
|
212
|
+
transactionHash,
|
|
213
|
+
blockNumber
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Mint new token on blockchain
|
|
218
|
+
*/
|
|
219
|
+
async mintToken() {
|
|
220
|
+
try {
|
|
221
|
+
if (this.debug) {
|
|
222
|
+
console.log(`[DEBUG] Starting token minting process`);
|
|
223
|
+
}
|
|
224
|
+
// Generate token ID (could be random or sequential)
|
|
225
|
+
const tokenId = Math.floor(Math.random() * 1000000).toString();
|
|
226
|
+
const metadata = this.createTokenMetadataString();
|
|
227
|
+
const creationTimestamp = Math.floor(Date.now() / 1000);
|
|
228
|
+
if (this.debug) {
|
|
229
|
+
console.log(`[DEBUG] Generated token ID: ${tokenId}`);
|
|
230
|
+
console.log(`[DEBUG] Metadata: ${metadata.substring(0, 100)}...`);
|
|
231
|
+
}
|
|
232
|
+
// Estimate gas first (with timeout)
|
|
233
|
+
if (this.debug) {
|
|
234
|
+
console.log(`[DEBUG] Estimating gas for transaction...`);
|
|
235
|
+
}
|
|
236
|
+
let gasLimit;
|
|
237
|
+
let gasPrice;
|
|
238
|
+
try {
|
|
239
|
+
const gasEstimate = await Promise.race([
|
|
240
|
+
this.contract.publicMintZipFile.estimateGas(this.merkleRoot, creationTimestamp, '', // ipfsHash
|
|
241
|
+
metadata),
|
|
242
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Gas estimation timeout after 20 seconds')), 20000))
|
|
243
|
+
]);
|
|
244
|
+
// Add 20% buffer to gas estimate
|
|
245
|
+
gasLimit = (gasEstimate * BigInt(120)) / BigInt(100);
|
|
246
|
+
// Get current gas price
|
|
247
|
+
const feeData = await Promise.race([
|
|
248
|
+
this.provider.getFeeData(),
|
|
249
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Gas price fetch timeout after 10 seconds')), 10000))
|
|
250
|
+
]);
|
|
251
|
+
gasPrice = feeData.gasPrice || feeData.maxFeePerGas || BigInt(0);
|
|
252
|
+
if (gasPrice === BigInt(0)) {
|
|
253
|
+
throw new Error('Could not get gas price from network');
|
|
254
|
+
}
|
|
255
|
+
const estimatedCost = ethers_1.ethers.formatEther(gasLimit * gasPrice);
|
|
256
|
+
const balance = await this.provider.getBalance(this.wallet.address);
|
|
257
|
+
const balanceEth = ethers_1.ethers.formatEther(balance);
|
|
258
|
+
if (this.debug) {
|
|
259
|
+
console.log(`[DEBUG] Gas estimate: ${gasLimit.toString()}`);
|
|
260
|
+
console.log(`[DEBUG] Gas price: ${ethers_1.ethers.formatUnits(gasPrice, 'gwei')} gwei`);
|
|
261
|
+
console.log(`[DEBUG] Estimated cost: ${estimatedCost} ETH`);
|
|
262
|
+
console.log(`[DEBUG] Wallet balance: ${balanceEth} ETH`);
|
|
263
|
+
}
|
|
264
|
+
// Check if we have enough balance
|
|
265
|
+
if (balance < gasLimit * gasPrice) {
|
|
266
|
+
throw new Error(`Insufficient balance. Need ${estimatedCost} ETH, have ${balanceEth} ETH`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
const errorMessage = error instanceof Error ? error.message : 'Gas estimation failed';
|
|
271
|
+
if (this.debug) {
|
|
272
|
+
console.log(`[DEBUG] Gas estimation failed: ${errorMessage}`);
|
|
273
|
+
}
|
|
274
|
+
throw new Error(`Gas estimation failed: ${errorMessage}`);
|
|
275
|
+
}
|
|
276
|
+
// Call the contract publicMintZipFile function with explicit gas parameters
|
|
277
|
+
if (this.debug) {
|
|
278
|
+
console.log(`[DEBUG] Submitting transaction with gas limit: ${gasLimit.toString()}, gas price: ${ethers_1.ethers.formatUnits(gasPrice, 'gwei')} gwei`);
|
|
279
|
+
}
|
|
280
|
+
const tx = await Promise.race([
|
|
281
|
+
this.contract.publicMintZipFile(this.merkleRoot, creationTimestamp, '', // ipfsHash (empty since we store in ZIP)
|
|
282
|
+
metadata, {
|
|
283
|
+
gasLimit: gasLimit,
|
|
284
|
+
gasPrice: gasPrice
|
|
285
|
+
}),
|
|
286
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Transaction submission timeout after 30 seconds')), 30000))
|
|
287
|
+
]);
|
|
288
|
+
if (this.debug) {
|
|
289
|
+
console.log(`[DEBUG] Transaction submitted: ${tx.hash}`);
|
|
290
|
+
process.stdout.write(`[DEBUG] Waiting for confirmation (timeout: 120s)`);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
// Show waiting message for non-debug mode
|
|
294
|
+
process.stdout.write('⏳ Waiting for confirmation');
|
|
295
|
+
}
|
|
296
|
+
// Animated waiting dots (first dot immediately, then one every 2 seconds)
|
|
297
|
+
let dotCount = 0;
|
|
298
|
+
process.stdout.write('.'); // Show first dot immediately
|
|
299
|
+
dotCount++;
|
|
300
|
+
const dotInterval = setInterval(() => {
|
|
301
|
+
dotCount++;
|
|
302
|
+
process.stdout.write('.');
|
|
303
|
+
if (dotCount >= 60) { // Max 60 dots (120 seconds)
|
|
304
|
+
clearInterval(dotInterval);
|
|
305
|
+
}
|
|
306
|
+
}, 2000);
|
|
307
|
+
// Wait for transaction confirmation with timeout
|
|
308
|
+
let receipt;
|
|
309
|
+
try {
|
|
310
|
+
receipt = await Promise.race([
|
|
311
|
+
tx.wait(),
|
|
312
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Transaction confirmation timeout after 120 seconds')), 120000))
|
|
313
|
+
]);
|
|
314
|
+
clearInterval(dotInterval);
|
|
315
|
+
if (dotCount > 0) {
|
|
316
|
+
console.log(''); // New line after dots
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
clearInterval(dotInterval);
|
|
321
|
+
if (dotCount > 0) {
|
|
322
|
+
console.log(''); // New line after dots
|
|
323
|
+
}
|
|
324
|
+
throw error;
|
|
325
|
+
}
|
|
326
|
+
if (this.debug) {
|
|
327
|
+
console.log(`[DEBUG] Transaction confirmed in block: ${receipt.blockNumber}`);
|
|
328
|
+
console.log(`[DEBUG] Gas used: ${receipt.gasUsed}`);
|
|
329
|
+
}
|
|
330
|
+
// Extract actual token ID from contract events
|
|
331
|
+
let actualTokenId = tokenId; // fallback
|
|
332
|
+
if (receipt.logs && receipt.logs.length > 0) {
|
|
333
|
+
try {
|
|
334
|
+
const iface = new ethers_1.ethers.Interface(contracts_1.NZIP_CONTRACT_ABI);
|
|
335
|
+
for (const log of receipt.logs) {
|
|
336
|
+
try {
|
|
337
|
+
const parsed = iface.parseLog(log);
|
|
338
|
+
if (parsed?.name === 'ZipFileTokenized') {
|
|
339
|
+
actualTokenId = parsed.args.tokenId.toString();
|
|
340
|
+
if (this.debug) {
|
|
341
|
+
console.log(`[DEBUG] Actual token ID from contract event: ${actualTokenId}`);
|
|
342
|
+
}
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
catch (e) {
|
|
347
|
+
// Ignore parsing errors for non-matching logs
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
catch (e) {
|
|
352
|
+
if (this.debug) {
|
|
353
|
+
console.log(`[DEBUG] Could not parse token ID from logs: ${e}`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
const gasCost = ethers_1.ethers.formatEther(receipt.gasUsed * (receipt.gasPrice || BigInt(0)));
|
|
358
|
+
return {
|
|
359
|
+
success: true,
|
|
360
|
+
message: `Token successfully minted`,
|
|
361
|
+
tokenId: actualTokenId,
|
|
362
|
+
transactionHash: tx.hash,
|
|
363
|
+
contractAddress: this.networkConfig.address,
|
|
364
|
+
blockNumber: receipt.blockNumber,
|
|
365
|
+
walletAddress: this.wallet.address,
|
|
366
|
+
gasUsed: receipt.gasUsed.toString(),
|
|
367
|
+
gasCost
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown minting error';
|
|
372
|
+
if (this.debug) {
|
|
373
|
+
console.log(`[DEBUG] Minting failed: ${errorMessage}`);
|
|
374
|
+
}
|
|
375
|
+
return {
|
|
376
|
+
success: false,
|
|
377
|
+
message: errorMessage
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Main minting process - checks for duplicates, then mints if needed
|
|
383
|
+
*/
|
|
384
|
+
async processMinting() {
|
|
385
|
+
try {
|
|
386
|
+
// Get wallet information
|
|
387
|
+
const walletInfo = await this.getWalletInfo();
|
|
388
|
+
// Check for duplicates first (free operation)
|
|
389
|
+
const duplicateCheck = await this.checkForDuplicates();
|
|
390
|
+
if (duplicateCheck.hasExistingTokens) {
|
|
391
|
+
if (this.debug) {
|
|
392
|
+
console.log(`[DEBUG] Existing tokens found, user will choose`);
|
|
393
|
+
}
|
|
394
|
+
return {
|
|
395
|
+
walletInfo,
|
|
396
|
+
duplicateCheck
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
// Estimate gas costs
|
|
400
|
+
const gasCosts = await this.estimateGasCosts();
|
|
401
|
+
// This is where the user would be prompted for confirmation in the calling code
|
|
402
|
+
// The actual minting happens in a separate call to mintToken()
|
|
403
|
+
return {
|
|
404
|
+
walletInfo,
|
|
405
|
+
duplicateCheck,
|
|
406
|
+
gasCosts
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
throw new Error(`Minting process failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Complete the minting after user confirmation
|
|
415
|
+
*/
|
|
416
|
+
async completeMinting() {
|
|
417
|
+
const mintingResult = await this.mintToken();
|
|
418
|
+
if (mintingResult.success && mintingResult.tokenId && mintingResult.transactionHash) {
|
|
419
|
+
const tokenMetadata = this.createTokenMetadata(mintingResult.tokenId, mintingResult.transactionHash, mintingResult.blockNumber);
|
|
420
|
+
return {
|
|
421
|
+
mintingResult,
|
|
422
|
+
tokenMetadata
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
return { mintingResult };
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Switch to a different RPC URL by index
|
|
429
|
+
* This recreates the provider, wallet, and contract with the new RPC
|
|
430
|
+
*/
|
|
431
|
+
switchRpcUrl(newIndex) {
|
|
432
|
+
if (newIndex < 0 || newIndex >= this.networkConfig.rpcUrls.length) {
|
|
433
|
+
throw new Error(`RPC URL index ${newIndex} is out of range. Available RPCs: ${this.networkConfig.rpcUrls.length}`);
|
|
434
|
+
}
|
|
435
|
+
// Destroy old provider
|
|
436
|
+
if (this.provider) {
|
|
437
|
+
try {
|
|
438
|
+
this.provider.destroy();
|
|
439
|
+
}
|
|
440
|
+
catch (error) {
|
|
441
|
+
// Ignore errors during cleanup
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
// Update RPC index
|
|
445
|
+
this.rpcUrlIndex = newIndex;
|
|
446
|
+
const rpcUrl = this.networkConfig.rpcUrls[this.rpcUrlIndex];
|
|
447
|
+
// Create new provider
|
|
448
|
+
this.provider = new ethers_1.ethers.JsonRpcProvider(rpcUrl);
|
|
449
|
+
// Recreate wallet with new provider
|
|
450
|
+
this.wallet = new ethers_1.ethers.Wallet(this.wallet.privateKey, this.provider);
|
|
451
|
+
// Recreate contract with new provider
|
|
452
|
+
this.contract = new ethers_1.ethers.Contract(this.networkConfig.address, contracts_1.NZIP_CONTRACT_ABI, this.wallet);
|
|
453
|
+
if (this.debug) {
|
|
454
|
+
console.log(`[DEBUG] Switched to RPC URL index ${this.rpcUrlIndex}: ${rpcUrl}`);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Destroy provider to allow process to exit
|
|
459
|
+
*/
|
|
460
|
+
destroy() {
|
|
461
|
+
try {
|
|
462
|
+
if (this.provider) {
|
|
463
|
+
// Destroy the provider to close connections and allow process to exit
|
|
464
|
+
// Safe to call multiple times - ethers.js handles idempotency
|
|
465
|
+
this.provider.destroy();
|
|
466
|
+
if (this.debug) {
|
|
467
|
+
console.log('[DEBUG] Provider destroyed');
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
catch (error) {
|
|
472
|
+
if (this.debug) {
|
|
473
|
+
console.log(`[DEBUG] Error destroying provider: ${error instanceof Error ? error.message : String(error)}`);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Mint token with retry logic and exponential backoff
|
|
479
|
+
* @param maxRetries Maximum number of retry attempts (default: 3)
|
|
480
|
+
* @returns Minting result with retry information
|
|
481
|
+
*/
|
|
482
|
+
async mintTokenWithRetry(maxRetries = 3) {
|
|
483
|
+
let lastError = null;
|
|
484
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
485
|
+
try {
|
|
486
|
+
console.log(`🔄 Minting attempt ${attempt}/${maxRetries}`);
|
|
487
|
+
const result = await this.mintToken();
|
|
488
|
+
if (result.success) {
|
|
489
|
+
console.log(`✅ Minting successful on attempt ${attempt}`);
|
|
490
|
+
return result;
|
|
491
|
+
}
|
|
492
|
+
lastError = new Error(result.message || 'Minting failed');
|
|
493
|
+
}
|
|
494
|
+
catch (error) {
|
|
495
|
+
lastError = error instanceof Error ? error : new Error('Unknown error');
|
|
496
|
+
console.warn(`❌ Minting attempt ${attempt} failed:`, lastError.message);
|
|
497
|
+
if (attempt < maxRetries) {
|
|
498
|
+
const delay = Math.pow(2, attempt) * 1000; // Exponential backoff
|
|
499
|
+
console.log(`⏳ Waiting ${delay}ms before retry...`);
|
|
500
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
return {
|
|
505
|
+
success: false,
|
|
506
|
+
message: `Minting failed after ${maxRetries} attempts: ${lastError?.message || 'Unknown error'}`
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* Batch minting for multiple archives
|
|
511
|
+
* @param archives Array of archive objects with name and merkleRoot
|
|
512
|
+
* @returns Array of minting results
|
|
513
|
+
*/
|
|
514
|
+
async mintBatch(archives) {
|
|
515
|
+
const results = [];
|
|
516
|
+
for (const archive of archives) {
|
|
517
|
+
try {
|
|
518
|
+
// Update the merkle root for this archive
|
|
519
|
+
this.merkleRoot = archive.merkleRoot;
|
|
520
|
+
const result = await this.mintToken();
|
|
521
|
+
results.push(result);
|
|
522
|
+
// Add delay between mints to avoid rate limiting
|
|
523
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
524
|
+
}
|
|
525
|
+
catch (error) {
|
|
526
|
+
results.push({
|
|
527
|
+
success: false,
|
|
528
|
+
message: `Failed to mint ${archive.name}: ${error instanceof Error ? error.message : 'Unknown error'}`
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
return results;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
exports.ZipkitMinter = ZipkitMinter;
|
|
536
|
+
/**
|
|
537
|
+
* Utility function to validate Ethereum private key
|
|
538
|
+
*/
|
|
539
|
+
function validatePrivateKey(privateKey) {
|
|
540
|
+
try {
|
|
541
|
+
new ethers_1.ethers.Wallet(privateKey);
|
|
542
|
+
return true;
|
|
543
|
+
}
|
|
544
|
+
catch {
|
|
545
|
+
return false;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
//# sourceMappingURL=ZipkitMinter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZipkitMinter.js","sourceRoot":"","sources":["../../../src/blockchain/core/ZipkitMinter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import ZipEntry from '../shared/ZipEntry';
|
|
2
1
|
declare global {
|
|
3
2
|
var _bitcore: any;
|
|
4
3
|
}
|
|
@@ -54,27 +53,27 @@ export declare function bufferToArrayBuffer(buf: Buffer): ArrayBuffer;
|
|
|
54
53
|
/**
|
|
55
54
|
* Finds the OpenTimestamps entry in a ZIP file.
|
|
56
55
|
* Searches for TIMESTAMP_METADATA first, then TIMESTAMP_SUBMITTED.
|
|
57
|
-
* @param zip -
|
|
56
|
+
* @param zip - Zipkit instance to search
|
|
58
57
|
* @returns ZIP entry containing OTS proof, or null if not found
|
|
59
58
|
*/
|
|
60
59
|
export declare function getOtsEntry(zip: any): any | null;
|
|
61
60
|
/**
|
|
62
61
|
* Extracts OTS proof data from a ZIP entry.
|
|
63
|
-
* @param zip -
|
|
62
|
+
* @param zip - Zipkit instance
|
|
64
63
|
* @param otsEntry - ZIP entry containing OTS data
|
|
65
64
|
* @returns Promise resolving to OTS proof buffer, or null if extraction fails
|
|
66
65
|
*/
|
|
67
66
|
export declare function getOtsBuffer(zip: any, otsEntry: any): Promise<Buffer | null>;
|
|
68
67
|
/**
|
|
69
68
|
* Safely extracts merkle root from a ZIP file.
|
|
70
|
-
* @param zip -
|
|
69
|
+
* @param zip - Zipkit instance
|
|
71
70
|
* @returns Merkle root hash string, or null if not available
|
|
72
71
|
*/
|
|
73
72
|
export declare function getMerkleRootSafe(zip: any): string | null;
|
|
74
73
|
/**
|
|
75
74
|
* Verifies OpenTimestamps proof within a ZIP file.
|
|
76
75
|
* Extracts merkle root and OTS proof, then verifies against Bitcoin blockchain.
|
|
77
|
-
* @param zip -
|
|
76
|
+
* @param zip - Zipkit instance containing files and OTS proof
|
|
78
77
|
* @returns Promise resolving to verification result with status: 'none', 'error', 'pending', or 'valid'
|
|
79
78
|
*/
|
|
80
79
|
export declare function verifyOtsZip(zip: any): Promise<OtsVerifyResult>;
|
|
@@ -107,15 +106,6 @@ export declare function deserializeOts(tsResult: TimestampResult, options?: {
|
|
|
107
106
|
* @returns Promise resolving to formatted timestamp information
|
|
108
107
|
*/
|
|
109
108
|
export declare function parseVerifyResult(verifyResult: TimestampResult): Promise<TimestampInfo>;
|
|
110
|
-
/**
|
|
111
|
-
* Creates an HTML certificate for OpenTimestamps verification.
|
|
112
|
-
* Generates a certificate file documenting the timestamp verification results.
|
|
113
|
-
* @param fileName - Base name for the ZIP file (used for certificate filename)
|
|
114
|
-
* @param zipEntries - Array of ZIP entries to include in certificate
|
|
115
|
-
* @param timestampResult - Verification result to document
|
|
116
|
-
* @returns Promise resolving to success message with certificate filename, or error message
|
|
117
|
-
*/
|
|
118
|
-
export declare function createCertificateOts(fileName: string, zipEntries: ZipEntry[], timestampResult: TimestampResult): Promise<string>;
|
|
119
109
|
/**
|
|
120
110
|
* Upgrades OpenTimestamps proof in an existing ZIP file.
|
|
121
111
|
* Replaces old timestamp metadata with upgraded OTS proof data.
|
|
@@ -128,8 +118,9 @@ export declare function upgradeOTS(zipFilePath: string, upgradedOts: Buffer): Pr
|
|
|
128
118
|
/**
|
|
129
119
|
* Creates a ZIP metadata entry containing OpenTimestamps proof.
|
|
130
120
|
* Creates a special ZIP entry marked as metadata that stores OTS proof data.
|
|
131
|
-
* @param zipKit -
|
|
121
|
+
* @param zipKit - Zipkit instance to add metadata entry to
|
|
132
122
|
* @param ots - Buffer containing OpenTimestamps proof data
|
|
133
123
|
* @returns ZIP entry containing OTS metadata, or null if creation failed
|
|
134
124
|
*/
|
|
135
125
|
export declare function createOtsMetadataEntry(zipKit: any, ots: Buffer | null): any | null;
|
|
126
|
+
//# sourceMappingURL=ZipkitOTS.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZipkitOTS.d.ts","sourceRoot":"","sources":["../../../src/blockchain/core/ZipkitOTS.ts"],"names":[],"mappings":"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"}
|