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,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ZipkitMinterBrowser - Browser-specific NFT minting for ZIP files
|
|
4
|
+
* Extends core minting functionality with browser-specific features
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ZipkitMinterBrowser = void 0;
|
|
8
|
+
class ZipkitMinterBrowser {
|
|
9
|
+
constructor(merkleRoot, walletManager) {
|
|
10
|
+
this.merkleRoot = merkleRoot;
|
|
11
|
+
this.walletManager = walletManager;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Initialize the minter with wallet manager
|
|
15
|
+
*/
|
|
16
|
+
async initialize() {
|
|
17
|
+
if (!this.walletManager.getContract() || !this.walletManager.getBrowserProvider()) {
|
|
18
|
+
throw new Error("Wallet manager not initialized");
|
|
19
|
+
}
|
|
20
|
+
// Browser minter uses wallet manager directly, no core minter needed
|
|
21
|
+
console.log('ZipkitMinterBrowser initialized with wallet manager');
|
|
22
|
+
}
|
|
23
|
+
getNetworkName(chainId) {
|
|
24
|
+
const networkNames = {
|
|
25
|
+
1: "homestead",
|
|
26
|
+
11155111: "sepolia",
|
|
27
|
+
84532: "base-sepolia",
|
|
28
|
+
8453: "base"
|
|
29
|
+
};
|
|
30
|
+
return networkNames[chainId] || `chain-${chainId}`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check for any existing tokens with the same Merkle Root
|
|
34
|
+
*/
|
|
35
|
+
async findTokensByMerkleRoot() {
|
|
36
|
+
const contract = this.walletManager.getContract();
|
|
37
|
+
if (!contract) {
|
|
38
|
+
throw new Error("Service not initialized");
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const tokenIds = await contract.getFunction("getTokensByMerkleRoot")(this.merkleRoot);
|
|
42
|
+
if (tokenIds.length === 0) {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const existingTokens = [];
|
|
46
|
+
for (const tokenId of tokenIds) {
|
|
47
|
+
try {
|
|
48
|
+
const owner = await contract.getFunction("ownerOf")(tokenId);
|
|
49
|
+
const zipFileInfo = await contract.getFunction("getZipFileInfo")(tokenId);
|
|
50
|
+
existingTokens.push({
|
|
51
|
+
tokenId: tokenId.toString(),
|
|
52
|
+
owner: owner,
|
|
53
|
+
creationTimestamp: Number(zipFileInfo.tokenizationTime) || 0,
|
|
54
|
+
mintedAt: new Date(Number(zipFileInfo.tokenizationTime) * 1000).toISOString(),
|
|
55
|
+
transactionHash: ''
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.warn(`Could not get info for token ${tokenId}:`, error);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return existingTokens;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error("Error finding tokens by merkle root:", error);
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Estimate gas cost for minting
|
|
71
|
+
*/
|
|
72
|
+
async estimateGasCost() {
|
|
73
|
+
const contract = this.walletManager.getContract();
|
|
74
|
+
const provider = this.walletManager.getBrowserProvider();
|
|
75
|
+
if (!contract || !provider) {
|
|
76
|
+
throw new Error("Service not initialized");
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
console.log(`⛽ Estimating gas for ZIP archive (${this.merkleRoot.slice(0, 10)}...)`);
|
|
80
|
+
const signer = await provider.getSigner();
|
|
81
|
+
const contractWithSigner = contract.connect(signer);
|
|
82
|
+
// Create a timestamp for the archive (current time)
|
|
83
|
+
const creationTimestamp = Math.floor(Date.now() / 1000);
|
|
84
|
+
// Placeholder values for IPFS hash and token URI
|
|
85
|
+
const ipfsHash = ""; // Empty for now, could be implemented later
|
|
86
|
+
const tokenURI = ""; // Empty for now, could be implemented later
|
|
87
|
+
// Estimate gas for the mint function with timeout
|
|
88
|
+
const GAS_ESTIMATION_TIMEOUT = 30000; // 30 seconds
|
|
89
|
+
const gasEstimate = await Promise.race([
|
|
90
|
+
contractWithSigner.getFunction("publicMintZipFile").estimateGas(this.merkleRoot, creationTimestamp, ipfsHash, tokenURI),
|
|
91
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Gas estimation timeout')), GAS_ESTIMATION_TIMEOUT))
|
|
92
|
+
]);
|
|
93
|
+
// Get current gas price (use read provider if available) with timeout
|
|
94
|
+
const readProvider = this.walletManager.getReadProvider();
|
|
95
|
+
const providerForRead = readProvider || provider;
|
|
96
|
+
const gasPrice = await Promise.race([
|
|
97
|
+
providerForRead.getFeeData(),
|
|
98
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Gas price fetch timeout')), 10000))
|
|
99
|
+
]);
|
|
100
|
+
const gasCost = gasEstimate * (gasPrice.gasPrice || BigInt(0));
|
|
101
|
+
// Convert to ETH (18 decimals)
|
|
102
|
+
const costInEth = Number(gasCost) / 1e18;
|
|
103
|
+
console.log(`⛽ Estimated gas: ${gasEstimate.toString()} units`);
|
|
104
|
+
console.log(`💰 Estimated cost: ${costInEth.toFixed(6)} ETH`);
|
|
105
|
+
return costInEth.toFixed(6);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.warn('Gas estimation failed:', error);
|
|
109
|
+
// Provide fallback estimate based on error type
|
|
110
|
+
if (error instanceof Error) {
|
|
111
|
+
if (error.message.includes("not supported") || error.message.includes("method")) {
|
|
112
|
+
console.warn("RPC method not supported by wallet provider, using fallback estimate");
|
|
113
|
+
return "0.002"; // Higher fallback estimate for complex contract calls
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return "0.001"; // Default fallback estimate
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Mint a new token
|
|
121
|
+
*/
|
|
122
|
+
async mintToken() {
|
|
123
|
+
const contract = this.walletManager.getContract();
|
|
124
|
+
const provider = this.walletManager.getBrowserProvider();
|
|
125
|
+
const config = this.walletManager.getCurrentConfig();
|
|
126
|
+
if (!contract || !provider || !config.address) {
|
|
127
|
+
throw new Error("Service not initialized");
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
console.log("🎯 Minting NFT token for ZIP archive...");
|
|
131
|
+
console.log(`📝 Minting token for ZIP archive (filename stored in ZIP metadata only for privacy)`);
|
|
132
|
+
console.log(`🔐 Merkle Root: ${this.merkleRoot}`);
|
|
133
|
+
console.log(`📍 Contract: ${config.address}`);
|
|
134
|
+
// Call the actual contract to mint the token
|
|
135
|
+
const signer = await provider.getSigner();
|
|
136
|
+
const contractWithSigner = contract.connect(signer);
|
|
137
|
+
// Create a timestamp for the archive (current time)
|
|
138
|
+
const creationTimestamp = Math.floor(Date.now() / 1000);
|
|
139
|
+
// Placeholder values for IPFS hash and token URI
|
|
140
|
+
const ipfsHash = ""; // Empty for now, could be implemented later
|
|
141
|
+
const tokenURI = ""; // Empty for now, could be implemented later
|
|
142
|
+
console.log("📡 Submitting transaction to blockchain...");
|
|
143
|
+
console.log(`🕐 Creation timestamp: ${creationTimestamp}`);
|
|
144
|
+
console.log("🔒 Note: Filename is not stored on blockchain for privacy");
|
|
145
|
+
// Get the function to call
|
|
146
|
+
const functionCall = contractWithSigner.getFunction("publicMintZipFile");
|
|
147
|
+
// Send the transaction (this will trigger wallet approval)
|
|
148
|
+
// Note: We don't populateTransaction first as it may trigger gas estimation
|
|
149
|
+
// which can hang on some networks. Let the wallet handle it directly.
|
|
150
|
+
// Add timeout to prevent hanging if wallet doesn't respond
|
|
151
|
+
const TX_SEND_TIMEOUT = 60000; // 60 seconds for user to approve
|
|
152
|
+
console.log("⏳ Waiting for wallet approval...");
|
|
153
|
+
const tx = await Promise.race([
|
|
154
|
+
functionCall(this.merkleRoot, creationTimestamp, ipfsHash, tokenURI),
|
|
155
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Transaction send timeout - wallet approval dialog may not have appeared. Please check your wallet.')), TX_SEND_TIMEOUT))
|
|
156
|
+
]);
|
|
157
|
+
console.log(`📜 Transaction submitted: ${tx.hash}`);
|
|
158
|
+
console.log("⏳ Waiting for confirmation...");
|
|
159
|
+
// Use read provider for waiting to avoid rate limiting with timeout
|
|
160
|
+
let receipt;
|
|
161
|
+
const CONFIRMATION_TIMEOUT = 120000; // 2 minutes timeout
|
|
162
|
+
try {
|
|
163
|
+
const readProvider = this.walletManager.getReadProvider();
|
|
164
|
+
if (readProvider) {
|
|
165
|
+
receipt = await Promise.race([
|
|
166
|
+
readProvider.waitForTransaction(tx.hash),
|
|
167
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Transaction confirmation timeout')), CONFIRMATION_TIMEOUT))
|
|
168
|
+
]);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
receipt = await Promise.race([
|
|
172
|
+
tx.wait(),
|
|
173
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Transaction confirmation timeout')), CONFIRMATION_TIMEOUT))
|
|
174
|
+
]);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch (confirmationError) {
|
|
178
|
+
// If timeout, still try to get receipt manually
|
|
179
|
+
if (confirmationError?.message?.includes?.('timeout')) {
|
|
180
|
+
try {
|
|
181
|
+
const readProvider = this.walletManager.getReadProvider();
|
|
182
|
+
const providerForRead = readProvider || provider;
|
|
183
|
+
receipt = await providerForRead.getTransactionReceipt(tx.hash);
|
|
184
|
+
if (!receipt) {
|
|
185
|
+
throw new Error(`Transaction ${tx.hash} not found after timeout. It may still be pending.`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch (manualError) {
|
|
189
|
+
throw new Error(`Transaction confirmation failed: ${confirmationError?.message || 'Unknown error'}. Manual lookup also failed: ${manualError?.message || 'Unknown error'}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
throw confirmationError;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
console.log(`✅ Transaction confirmed in block: ${receipt?.blockNumber}`);
|
|
197
|
+
// Extract token ID from the transaction logs
|
|
198
|
+
let tokenId;
|
|
199
|
+
// Extract token ID from transaction logs
|
|
200
|
+
for (let i = 0; i < receipt.logs.length; i++) {
|
|
201
|
+
const log = receipt.logs[i];
|
|
202
|
+
try {
|
|
203
|
+
const parsed = contract.interface.parseLog(log);
|
|
204
|
+
if (parsed) {
|
|
205
|
+
if (parsed.name === 'ZipFileTokenized') {
|
|
206
|
+
tokenId = parsed.args.tokenId.toString();
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
else if (parsed.name === 'Transfer') {
|
|
210
|
+
// ERC721 Transfer event: Transfer(from, to, tokenId)
|
|
211
|
+
const from = parsed.args.from;
|
|
212
|
+
const transferTokenId = parsed.args.tokenId;
|
|
213
|
+
// Only use Transfer events that are minting (from zero address)
|
|
214
|
+
if (from === '0x0000000000000000000000000000000000000000') {
|
|
215
|
+
tokenId = transferTokenId.toString();
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (parseError) {
|
|
222
|
+
console.warn(`⚠️ Could not parse log ${i}:`, parseError);
|
|
223
|
+
// Try manual parsing for standard ERC721 Transfer event
|
|
224
|
+
if (log.topics.length >= 4 && log.topics[0] === '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef') {
|
|
225
|
+
try {
|
|
226
|
+
// ERC721 Transfer event signature
|
|
227
|
+
const from = log.topics[1];
|
|
228
|
+
const to = log.topics[2];
|
|
229
|
+
const transferTokenId = log.topics[3];
|
|
230
|
+
console.log(`🔄 Manual Transfer parse: from=${from}, to=${to}, tokenId=${transferTokenId}`);
|
|
231
|
+
// Check if this is a mint (from zero address)
|
|
232
|
+
if (from === '0x0000000000000000000000000000000000000000000000000000000000000000') {
|
|
233
|
+
tokenId = parseInt(transferTokenId, 16).toString();
|
|
234
|
+
console.log(`🎯 Found minting via manual parse with token ID: ${tokenId}`);
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch (manualParseError) {
|
|
239
|
+
console.warn(`⚠️ Manual parsing also failed:`, manualParseError);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (!tokenId) {
|
|
245
|
+
console.error("❌ Could not extract token ID from any logs");
|
|
246
|
+
console.error("📋 Full receipt for debugging:", JSON.stringify(receipt, null, 2));
|
|
247
|
+
throw new Error("Could not extract token ID from transaction receipt");
|
|
248
|
+
}
|
|
249
|
+
console.log(`✅ NFT token minted successfully!`);
|
|
250
|
+
console.log(`🎫 Token ID: ${tokenId}`);
|
|
251
|
+
console.log(`📜 Transaction: ${tx.hash}`);
|
|
252
|
+
return {
|
|
253
|
+
success: true,
|
|
254
|
+
tokenId: tokenId,
|
|
255
|
+
transactionHash: tx.hash
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
console.error("Token minting failed:", error);
|
|
260
|
+
let errorMessage = "Unknown error occurred";
|
|
261
|
+
if (error.code === 'ACTION_REJECTED') {
|
|
262
|
+
errorMessage = "Transaction was rejected by user";
|
|
263
|
+
}
|
|
264
|
+
else if (error.code === 'INSUFFICIENT_FUNDS') {
|
|
265
|
+
errorMessage = "Insufficient funds for transaction";
|
|
266
|
+
}
|
|
267
|
+
else if (error.reason) {
|
|
268
|
+
errorMessage = error.reason;
|
|
269
|
+
}
|
|
270
|
+
else if (error.message) {
|
|
271
|
+
errorMessage = error.message;
|
|
272
|
+
}
|
|
273
|
+
return {
|
|
274
|
+
success: false,
|
|
275
|
+
error: errorMessage
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Create token metadata
|
|
281
|
+
*/
|
|
282
|
+
createTokenMetadata(tokenId, transactionHash) {
|
|
283
|
+
const now = new Date();
|
|
284
|
+
const config = this.walletManager.getCurrentConfig();
|
|
285
|
+
return {
|
|
286
|
+
version: "1.0",
|
|
287
|
+
tokenId,
|
|
288
|
+
contractAddress: config.address,
|
|
289
|
+
network: config.network,
|
|
290
|
+
networkChainId: config.chainId,
|
|
291
|
+
transactionHash,
|
|
292
|
+
merkleRoot: this.merkleRoot,
|
|
293
|
+
mintedAt: now.toISOString(),
|
|
294
|
+
creationTimestamp: Math.floor(now.getTime() / 1000)
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Get explorer URL for transaction
|
|
299
|
+
*/
|
|
300
|
+
getExplorerUrl(transactionHash) {
|
|
301
|
+
return this.walletManager.getExplorerUrl(transactionHash);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Get explorer URL for contract
|
|
305
|
+
*/
|
|
306
|
+
getContractExplorerUrl() {
|
|
307
|
+
return this.walletManager.getContractExplorerUrl();
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Get explorer URL for token
|
|
311
|
+
*/
|
|
312
|
+
getTokenExplorerUrl(tokenId) {
|
|
313
|
+
return this.walletManager.getTokenExplorerUrl(tokenId);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
exports.ZipkitMinterBrowser = ZipkitMinterBrowser;
|
|
317
|
+
//# sourceMappingURL=ZipkitMinterBrowser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZipkitMinterBrowser.js","sourceRoot":"","sources":["../../../src/blockchain/browser/ZipkitMinterBrowser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Blockchain Module Exports
|
|
3
|
+
* Browser-specific blockchain functionality for ZIP file tokenization
|
|
4
|
+
*/
|
|
5
|
+
export { WalletManagerBrowser } from './WalletManagerBrowser';
|
|
6
|
+
export type { WalletConfigBrowser } from './WalletManagerBrowser';
|
|
7
|
+
export { ZipkitMinterBrowser } from './ZipkitMinterBrowser';
|
|
8
|
+
export type { TokenizationResult, ExistingToken } from './ZipkitMinterBrowser';
|
|
9
|
+
export { TokenVerifierBrowser, createTokenVerifier, checkForTokenization } from './TokenVerifierBrowser';
|
|
10
|
+
export type { TokenVerificationResult, TokenVerificationOptions, BlockchainVerification } from './TokenVerifierBrowser';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blockchain/browser/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzG,YAAY,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser Blockchain Module Exports
|
|
4
|
+
* Browser-specific blockchain functionality for ZIP file tokenization
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.checkForTokenization = exports.createTokenVerifier = exports.TokenVerifierBrowser = exports.ZipkitMinterBrowser = exports.WalletManagerBrowser = void 0;
|
|
8
|
+
var WalletManagerBrowser_1 = require("./WalletManagerBrowser");
|
|
9
|
+
Object.defineProperty(exports, "WalletManagerBrowser", { enumerable: true, get: function () { return WalletManagerBrowser_1.WalletManagerBrowser; } });
|
|
10
|
+
var ZipkitMinterBrowser_1 = require("./ZipkitMinterBrowser");
|
|
11
|
+
Object.defineProperty(exports, "ZipkitMinterBrowser", { enumerable: true, get: function () { return ZipkitMinterBrowser_1.ZipkitMinterBrowser; } });
|
|
12
|
+
var TokenVerifierBrowser_1 = require("./TokenVerifierBrowser");
|
|
13
|
+
Object.defineProperty(exports, "TokenVerifierBrowser", { enumerable: true, get: function () { return TokenVerifierBrowser_1.TokenVerifierBrowser; } });
|
|
14
|
+
Object.defineProperty(exports, "createTokenVerifier", { enumerable: true, get: function () { return TokenVerifierBrowser_1.createTokenVerifier; } });
|
|
15
|
+
Object.defineProperty(exports, "checkForTokenization", { enumerable: true, get: function () { return TokenVerifierBrowser_1.checkForTokenization; } });
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/blockchain/browser/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAG7B,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAG5B,+DAAyG;AAAhG,4HAAA,oBAAoB,OAAA;AAAE,2HAAA,mBAAmB,OAAA;AAAE,4HAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core WalletManager - Platform-agnostic wallet functionality
|
|
3
|
+
* Provides core wallet operations that work in both browser and server environments
|
|
4
|
+
*/
|
|
5
|
+
import { ethers } from 'ethers';
|
|
6
|
+
import { WalletSetupResult, NetworkConfig } from '../../types';
|
|
7
|
+
export interface CommonTokenConfig {
|
|
8
|
+
address: string;
|
|
9
|
+
name: string;
|
|
10
|
+
symbol: string;
|
|
11
|
+
type: 'ERC20' | 'ERC721';
|
|
12
|
+
}
|
|
13
|
+
export interface TokenInfo {
|
|
14
|
+
address: string;
|
|
15
|
+
name: string;
|
|
16
|
+
symbol: string;
|
|
17
|
+
balance: string;
|
|
18
|
+
decimals?: number;
|
|
19
|
+
type: 'ERC20' | 'ERC721' | 'NZIP';
|
|
20
|
+
}
|
|
21
|
+
export interface WalletBasicInfo {
|
|
22
|
+
ethBalance: string;
|
|
23
|
+
transactionCount: number;
|
|
24
|
+
networkName: string;
|
|
25
|
+
chainId: bigint;
|
|
26
|
+
latestBlock: number;
|
|
27
|
+
}
|
|
28
|
+
export interface TokenScanResult {
|
|
29
|
+
foundTokens: number[];
|
|
30
|
+
searchMethod: 'recent-events' | 'iteration' | 'common-ids' | 'none';
|
|
31
|
+
}
|
|
32
|
+
export interface NZipTokenDetails {
|
|
33
|
+
tokenId: string;
|
|
34
|
+
merkleRootHash: string;
|
|
35
|
+
timestamp: number;
|
|
36
|
+
tokenURI?: string;
|
|
37
|
+
creator: string;
|
|
38
|
+
creationTimestamp: number;
|
|
39
|
+
tokenizationTime: number;
|
|
40
|
+
ipfsHash?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Core wallet functionality that works in both browser and server environments
|
|
44
|
+
*/
|
|
45
|
+
export declare class CoreWalletManager {
|
|
46
|
+
protected wallet: ethers.Wallet | null;
|
|
47
|
+
protected provider: ethers.JsonRpcProvider | null;
|
|
48
|
+
constructor();
|
|
49
|
+
/**
|
|
50
|
+
* Setup wallet with private key and connect to network
|
|
51
|
+
*
|
|
52
|
+
* SECURITY WARNING: This method accepts a private key as a parameter.
|
|
53
|
+
* - Never hardcode private keys in source code
|
|
54
|
+
* - Always use environment variables for private keys
|
|
55
|
+
* - Use testnet keys for development/testing
|
|
56
|
+
* - Use secure key management (HSMs, KMS) for production
|
|
57
|
+
* - See SECURITY.md for complete security guidelines
|
|
58
|
+
*/
|
|
59
|
+
setupWallet(privateKey: string, network: string, mintToken?: boolean): Promise<WalletSetupResult>;
|
|
60
|
+
/**
|
|
61
|
+
* Connect to the specified network
|
|
62
|
+
*/
|
|
63
|
+
protected connectToNetwork(networkConfig: NetworkConfig, mintToken: boolean): Promise<boolean>;
|
|
64
|
+
/**
|
|
65
|
+
* Get the current wallet instance
|
|
66
|
+
*/
|
|
67
|
+
getWallet(): ethers.Wallet | null;
|
|
68
|
+
/**
|
|
69
|
+
* Get the current provider instance
|
|
70
|
+
*/
|
|
71
|
+
getProvider(): ethers.JsonRpcProvider | null;
|
|
72
|
+
/**
|
|
73
|
+
* Check if wallet is ready
|
|
74
|
+
*/
|
|
75
|
+
isReady(): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Check if connected to network
|
|
78
|
+
*/
|
|
79
|
+
isOnline(): boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Wallet analyzer for blockchain operations
|
|
83
|
+
*/
|
|
84
|
+
export declare class WalletAnalyzer {
|
|
85
|
+
private provider;
|
|
86
|
+
constructor(provider: ethers.JsonRpcProvider);
|
|
87
|
+
/**
|
|
88
|
+
* Get basic wallet information
|
|
89
|
+
*/
|
|
90
|
+
getWalletBasics(address: string): Promise<WalletBasicInfo>;
|
|
91
|
+
/**
|
|
92
|
+
* Scan for NZIP tokens owned by an address
|
|
93
|
+
*/
|
|
94
|
+
scanForNZipTokens(contractAddress: string, ownerAddress: string): Promise<TokenScanResult>;
|
|
95
|
+
/**
|
|
96
|
+
* Get detailed information for NZIP tokens
|
|
97
|
+
*/
|
|
98
|
+
getNZipTokenDetails(contractAddress: string, tokenIds: number[]): Promise<NZipTokenDetails[]>;
|
|
99
|
+
/**
|
|
100
|
+
* Get contract information
|
|
101
|
+
*/
|
|
102
|
+
getContractInfo(contractAddress: string): Promise<{
|
|
103
|
+
name: string;
|
|
104
|
+
symbol: string;
|
|
105
|
+
totalSupply: string;
|
|
106
|
+
} | null>;
|
|
107
|
+
/**
|
|
108
|
+
* Check for ERC20 tokens
|
|
109
|
+
*/
|
|
110
|
+
checkERC20Tokens(ownerAddress: string, tokenConfigs: CommonTokenConfig[]): Promise<TokenInfo[]>;
|
|
111
|
+
/**
|
|
112
|
+
* Check for NFT collections
|
|
113
|
+
*/
|
|
114
|
+
checkNFTCollections(ownerAddress: string, nftConfigs: CommonTokenConfig[]): Promise<TokenInfo[]>;
|
|
115
|
+
/**
|
|
116
|
+
* Get common token configurations for a network
|
|
117
|
+
*/
|
|
118
|
+
static getCommonTokens(network: string): CommonTokenConfig[];
|
|
119
|
+
/**
|
|
120
|
+
* Get common NFT configurations for a network
|
|
121
|
+
*/
|
|
122
|
+
static getCommonNFTs(network: string): CommonTokenConfig[];
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=WalletManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalletManager.d.ts","sourceRoot":"","sources":["../../../src/blockchain/core/WalletManager.ts"],"names":[],"mappings":"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"}
|