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.
Files changed (301) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +410 -186
  3. package/contracts/ABI.txt +889 -0
  4. package/contracts/Bytecode.txt +1 -0
  5. package/contracts/COMPILATION_NOTES.md +59 -0
  6. package/contracts/QUICK_DEPLOY.md +286 -0
  7. package/contracts/README.md +235 -131
  8. package/contracts/VERIFICATION.md +308 -0
  9. package/contracts/deploy-interactive.js +448 -0
  10. package/contracts/deployment-arbitrum-sepolia.json +12 -0
  11. package/contracts/deployment-arbitrum.json +12 -0
  12. package/contracts/deployment-eth-sepolia.json +12 -0
  13. package/contracts/hardhat.config.js +114 -0
  14. package/contracts/package.json +20 -0
  15. package/contracts/scripts/compile-and-extract.js +119 -0
  16. package/contracts/scripts/verify-contract.js +223 -0
  17. package/contracts/src/{NZIP-NFT-Private.sol → NZIP-NFT-v2.0.sol} +66 -151
  18. package/contracts/src/NZIP-NFT.sol +9 -15
  19. package/dist/blockchain/browser/TokenVerifierBrowser.d.ts +67 -0
  20. package/dist/blockchain/browser/TokenVerifierBrowser.d.ts.map +1 -0
  21. package/dist/blockchain/browser/TokenVerifierBrowser.js +313 -0
  22. package/dist/blockchain/browser/TokenVerifierBrowser.js.map +1 -0
  23. package/dist/blockchain/browser/WalletManagerBrowser.d.ts +98 -0
  24. package/dist/blockchain/browser/WalletManagerBrowser.d.ts.map +1 -0
  25. package/dist/blockchain/browser/WalletManagerBrowser.js +434 -0
  26. package/dist/blockchain/browser/WalletManagerBrowser.js.map +1 -0
  27. package/dist/blockchain/browser/ZipkitMinterBrowser.d.ts +58 -0
  28. package/dist/blockchain/browser/ZipkitMinterBrowser.d.ts.map +1 -0
  29. package/dist/blockchain/browser/ZipkitMinterBrowser.js +317 -0
  30. package/dist/blockchain/browser/ZipkitMinterBrowser.js.map +1 -0
  31. package/dist/blockchain/browser/index.d.ts +11 -0
  32. package/dist/blockchain/browser/index.d.ts.map +1 -0
  33. package/dist/blockchain/browser/index.js +16 -0
  34. package/dist/blockchain/browser/index.js.map +1 -0
  35. package/dist/blockchain/core/WalletManager.d.ts +124 -0
  36. package/dist/blockchain/core/WalletManager.d.ts.map +1 -0
  37. package/dist/blockchain/{ZipKitWallet.js → core/WalletManager.js} +157 -177
  38. package/dist/blockchain/core/WalletManager.js.map +1 -0
  39. package/dist/blockchain/{ZipKitMinter.d.ts → core/ZipkitMinter.d.ts} +46 -11
  40. package/dist/blockchain/core/ZipkitMinter.d.ts.map +1 -0
  41. package/dist/blockchain/core/ZipkitMinter.js +548 -0
  42. package/dist/blockchain/core/ZipkitMinter.js.map +1 -0
  43. package/dist/blockchain/{ZipKitOTS.d.ts → core/ZipkitOTS.d.ts} +6 -15
  44. package/dist/blockchain/core/ZipkitOTS.d.ts.map +1 -0
  45. package/dist/blockchain/{ZipKitOTS.js → core/ZipkitOTS.js} +26 -84
  46. package/dist/blockchain/core/ZipkitOTS.js.map +1 -0
  47. package/dist/blockchain/core/ZipkitVerifier.d.ts +177 -0
  48. package/dist/blockchain/core/ZipkitVerifier.d.ts.map +1 -0
  49. package/dist/blockchain/core/ZipkitVerifier.js +632 -0
  50. package/dist/blockchain/core/ZipkitVerifier.js.map +1 -0
  51. package/dist/blockchain/core/contracts.d.ts +83 -0
  52. package/dist/blockchain/core/contracts.d.ts.map +1 -0
  53. package/dist/blockchain/core/contracts.js +341 -0
  54. package/dist/blockchain/core/contracts.js.map +1 -0
  55. package/dist/blockchain/core/index.d.ts +12 -0
  56. package/dist/blockchain/core/index.d.ts.map +1 -0
  57. package/dist/blockchain/core/index.js +59 -0
  58. package/dist/blockchain/core/index.js.map +1 -0
  59. package/dist/blockchain/index.d.ts +11 -7
  60. package/dist/blockchain/index.d.ts.map +1 -0
  61. package/dist/blockchain/index.js +18 -34
  62. package/dist/blockchain/index.js.map +1 -0
  63. package/dist/blockchain/node/WalletManagerNode.d.ts +47 -0
  64. package/dist/blockchain/node/WalletManagerNode.d.ts.map +1 -0
  65. package/dist/blockchain/node/WalletManagerNode.js +203 -0
  66. package/dist/blockchain/node/WalletManagerNode.js.map +1 -0
  67. package/dist/blockchain/node/index.d.ts +12 -0
  68. package/dist/blockchain/node/index.d.ts.map +1 -0
  69. package/dist/blockchain/node/index.js +24 -0
  70. package/dist/blockchain/node/index.js.map +1 -0
  71. package/dist/browser/ZipkitBrowser.d.ts +27 -0
  72. package/dist/browser/ZipkitBrowser.d.ts.map +1 -0
  73. package/dist/browser/{ZipKitBrowser.js → ZipkitBrowser.js} +96 -43
  74. package/dist/browser/ZipkitBrowser.js.map +1 -0
  75. package/dist/browser/index.d.ts +12 -0
  76. package/dist/browser/index.d.ts.map +1 -0
  77. package/dist/browser/index.js +42 -0
  78. package/dist/browser/index.js.map +1 -0
  79. package/dist/browser-esm/index.d.ts +12 -0
  80. package/dist/browser-esm/index.js +59559 -0
  81. package/dist/browser-esm/index.js.map +7 -0
  82. package/dist/browser-umd/index.d.ts +12 -0
  83. package/dist/browser-umd/index.js +59576 -0
  84. package/dist/browser-umd/index.js.map +7 -0
  85. package/dist/browser-umd/index.min.js +63 -0
  86. package/dist/browser.d.ts +8 -14
  87. package/dist/browser.js +13 -28
  88. package/dist/core/ZipCompress.d.ts +99 -0
  89. package/dist/core/ZipCompress.d.ts.map +1 -0
  90. package/dist/core/ZipCompress.js +309 -0
  91. package/dist/core/ZipCompress.js.map +1 -0
  92. package/dist/core/ZipDecompress.d.ts +58 -0
  93. package/dist/core/ZipDecompress.d.ts.map +1 -0
  94. package/dist/core/ZipDecompress.js +172 -0
  95. package/dist/core/ZipDecompress.js.map +1 -0
  96. package/dist/{shared → core}/ZipEntry.d.ts +8 -1
  97. package/dist/core/ZipEntry.d.ts.map +1 -0
  98. package/dist/{shared → core}/ZipEntry.js +225 -82
  99. package/dist/core/ZipEntry.js.map +1 -0
  100. package/dist/core/Zipkit.d.ts +315 -0
  101. package/dist/core/Zipkit.d.ts.map +1 -0
  102. package/dist/core/Zipkit.js +647 -0
  103. package/dist/core/Zipkit.js.map +1 -0
  104. package/dist/core/components/HashCalculator.d.ts +138 -0
  105. package/dist/core/components/HashCalculator.d.ts.map +1 -0
  106. package/dist/core/components/HashCalculator.js +360 -0
  107. package/dist/core/components/HashCalculator.js.map +1 -0
  108. package/dist/core/components/Logger.d.ts +73 -0
  109. package/dist/core/components/Logger.d.ts.map +1 -0
  110. package/dist/core/components/Logger.js +156 -0
  111. package/dist/core/components/Logger.js.map +1 -0
  112. package/dist/core/components/ProgressTracker.d.ts +43 -0
  113. package/dist/core/components/ProgressTracker.d.ts.map +1 -0
  114. package/dist/core/components/ProgressTracker.js +112 -0
  115. package/dist/core/components/ProgressTracker.js.map +1 -0
  116. package/dist/{shared → core}/components/Support.d.ts +1 -0
  117. package/dist/core/components/Support.d.ts.map +1 -0
  118. package/dist/{shared → core}/components/Support.js +1 -0
  119. package/dist/core/components/Support.js.map +1 -0
  120. package/dist/{shared → core}/components/Util.d.ts +7 -2
  121. package/dist/core/components/Util.d.ts.map +1 -0
  122. package/dist/{shared → core}/components/Util.js +14 -34
  123. package/dist/core/components/Util.js.map +1 -0
  124. package/dist/{shared → core}/constants/Errors.d.ts +1 -2
  125. package/dist/core/constants/Errors.d.ts.map +1 -0
  126. package/dist/{shared → core}/constants/Errors.js +1 -3
  127. package/dist/core/constants/Errors.js.map +1 -0
  128. package/dist/{shared → core}/constants/Headers.d.ts +3 -0
  129. package/dist/core/constants/Headers.d.ts.map +1 -0
  130. package/dist/{shared → core}/constants/Headers.js +20 -17
  131. package/dist/core/constants/Headers.js.map +1 -0
  132. package/dist/core/encryption/Manager.d.ts +58 -0
  133. package/dist/core/encryption/Manager.d.ts.map +1 -0
  134. package/dist/core/encryption/Manager.js +121 -0
  135. package/dist/core/encryption/Manager.js.map +1 -0
  136. package/dist/core/encryption/ZipCrypto.d.ts +172 -0
  137. package/dist/core/encryption/ZipCrypto.d.ts.map +1 -0
  138. package/dist/core/encryption/ZipCrypto.js +554 -0
  139. package/dist/core/encryption/ZipCrypto.js.map +1 -0
  140. package/dist/core/encryption/index.d.ts +9 -0
  141. package/dist/core/encryption/index.d.ts.map +1 -0
  142. package/dist/core/encryption/index.js +17 -0
  143. package/dist/core/encryption/index.js.map +1 -0
  144. package/dist/core/encryption/types.d.ts +29 -0
  145. package/dist/core/encryption/types.d.ts.map +1 -0
  146. package/dist/core/encryption/types.js +12 -0
  147. package/dist/core/encryption/types.js.map +1 -0
  148. package/dist/core/index.d.ts +24 -0
  149. package/dist/core/index.d.ts.map +1 -0
  150. package/dist/core/index.js +57 -0
  151. package/dist/core/index.js.map +1 -0
  152. package/dist/core/version.d.ts +5 -0
  153. package/dist/core/version.d.ts.map +1 -0
  154. package/dist/core/version.js +31 -0
  155. package/dist/core/version.js.map +1 -0
  156. package/dist/index.d.ts +8 -18
  157. package/dist/index.d.ts.map +1 -0
  158. package/dist/index.js +29 -35
  159. package/dist/index.js.map +1 -0
  160. package/dist/node/ZipCompressNode.d.ts +123 -0
  161. package/dist/node/ZipCompressNode.d.ts.map +1 -0
  162. package/dist/node/ZipCompressNode.js +576 -0
  163. package/dist/node/ZipCompressNode.js.map +1 -0
  164. package/dist/node/ZipDecompressNode.d.ts +120 -0
  165. package/dist/node/ZipDecompressNode.d.ts.map +1 -0
  166. package/dist/node/ZipDecompressNode.js +461 -0
  167. package/dist/node/ZipDecompressNode.js.map +1 -0
  168. package/dist/node/ZipkitNode.d.ts +406 -0
  169. package/dist/node/ZipkitNode.d.ts.map +1 -0
  170. package/dist/node/ZipkitNode.js +1305 -0
  171. package/dist/node/ZipkitNode.js.map +1 -0
  172. package/dist/node/index.d.ts +26 -0
  173. package/dist/node/index.d.ts.map +1 -0
  174. package/dist/node/index.js +65 -0
  175. package/dist/node/index.js.map +1 -0
  176. package/dist/types/index.d.ts +59 -0
  177. package/dist/types/index.d.ts.map +1 -0
  178. package/dist/types/index.js +36 -1
  179. package/dist/types/index.js.map +1 -0
  180. package/examples/README.md +269 -0
  181. package/examples/blockchain-tokenize.ts +354 -0
  182. package/examples/create-zip.ts +172 -0
  183. package/examples/extract-zip.ts +158 -0
  184. package/examples/list-zip.ts +161 -0
  185. package/examples/test-files/data.json +116 -0
  186. package/examples/test-files/document.md +80 -0
  187. package/examples/test-files/document.txt +2 -0
  188. package/examples/test-files/file1.txt +48 -0
  189. package/examples/test-files/file2.txt +80 -0
  190. package/examples/tsconfig.json +44 -0
  191. package/examples/unzip-token.ts +491 -0
  192. package/examples/verify-tokenized-zip.ts +305 -0
  193. package/examples/zip-token.ts +604 -0
  194. package/package.json +108 -24
  195. package/src/blockchain/README.md +59 -66
  196. package/src/{browser/TokenVerifierBrowser.ts-remove → blockchain/browser/TokenVerifierBrowser.ts} +125 -79
  197. package/src/blockchain/browser/WalletManagerBrowser.ts +486 -0
  198. package/src/blockchain/browser/ZipkitMinterBrowser.ts +400 -0
  199. package/src/blockchain/browser/index.ts +13 -0
  200. package/src/blockchain/{ZipKitWallet.ts → core/WalletManager.ts} +241 -143
  201. package/src/blockchain/core/ZipkitMinter.ts +716 -0
  202. package/src/blockchain/{ZipKitOTS.ts → core/ZipkitOTS.ts} +28 -62
  203. package/src/blockchain/core/ZipkitVerifier.ts +853 -0
  204. package/src/blockchain/core/contracts.ts +370 -0
  205. package/src/blockchain/core/index.ts +71 -0
  206. package/src/blockchain/index.ts +21 -55
  207. package/src/blockchain/node/WalletManagerNode.ts +171 -0
  208. package/src/blockchain/node/index.ts +40 -0
  209. package/src/browser/{ZipKitBrowser.ts → ZipkitBrowser.ts} +104 -41
  210. package/src/browser/index.esm.ts +37 -0
  211. package/src/browser/index.ts +25 -0
  212. package/src/core/ZipCompress.ts +398 -0
  213. package/src/core/ZipDecompress.ts +212 -0
  214. package/src/{shared → core}/ZipEntry.ts +240 -90
  215. package/src/core/Zipkit.ts +794 -0
  216. package/src/core/components/HashCalculator.ts +384 -0
  217. package/src/core/components/Logger.ts +180 -0
  218. package/src/core/components/ProgressTracker.ts +134 -0
  219. package/src/{shared → core}/components/Util.ts +12 -34
  220. package/src/{shared → core}/constants/Errors.ts +0 -4
  221. package/src/{shared → core}/constants/Headers.ts +19 -17
  222. package/src/core/encryption/Manager.ts +137 -0
  223. package/src/core/encryption/ZipCrypto.ts +650 -0
  224. package/src/core/encryption/index.ts +15 -0
  225. package/src/core/encryption/types.ts +33 -0
  226. package/src/core/index.ts +34 -0
  227. package/src/core/version.ts +33 -0
  228. package/src/index.ts +54 -25
  229. package/src/node/ZipCompressNode.ts +632 -0
  230. package/src/node/ZipDecompressNode.ts +508 -0
  231. package/src/node/ZipkitNode.ts +1559 -0
  232. package/src/node/index.ts +69 -0
  233. package/src/types/index.ts +131 -1
  234. package/src/types/modules.d.ts +1 -11
  235. package/src/types/opentimestamps.d.ts +1 -23
  236. package/contracts/INTEGRATION.md +0 -338
  237. package/contracts/NETWORKS.md +0 -156
  238. package/contracts/NZIP-NFT-bytecode.txt +0 -1
  239. package/contracts/constants.ts +0 -952
  240. package/contracts/deploy-bytecode.mjs +0 -94
  241. package/dist/blockchain/CertificateToken.d.ts +0 -48
  242. package/dist/blockchain/CertificateToken.js +0 -386
  243. package/dist/blockchain/ZipKitMinter.js +0 -347
  244. package/dist/blockchain/ZipKitNFT.d.ts +0 -3
  245. package/dist/blockchain/ZipKitNFT.js +0 -7
  246. package/dist/blockchain/ZipKitVerifier.d.ts +0 -69
  247. package/dist/blockchain/ZipKitVerifier.js +0 -289
  248. package/dist/blockchain/ZipKitWallet.d.ts +0 -69
  249. package/dist/blockchain/contracts.d.ts +0 -14
  250. package/dist/blockchain/contracts.js +0 -77
  251. package/dist/blockchain/types.d.ts +0 -47
  252. package/dist/blockchain/types.js +0 -30
  253. package/dist/browser/ZipKitBrowser.d.ts +0 -18
  254. package/dist/browser/ZipKitStampBrowser.d.ts +0 -2
  255. package/dist/browser/ZipKitStampBrowser.js +0 -12
  256. package/dist/browser-index.d.ts +0 -18
  257. package/dist/browser-index.js +0 -57
  258. package/dist/server/ZipKitServer.d.ts +0 -74
  259. package/dist/server/ZipKitServer.js +0 -310
  260. package/dist/shared/ZipKit.d.ts +0 -243
  261. package/dist/shared/ZipKit.js +0 -772
  262. package/dist/shared/components/CertificateOTS.d.ts +0 -15
  263. package/dist/shared/components/CertificateOTS.js +0 -116
  264. package/dist/shared/components/FileSys.d.ts +0 -2
  265. package/dist/shared/components/FileSys.js +0 -113
  266. package/dist/shared/components/HashAccumulator.d.ts +0 -55
  267. package/dist/shared/components/HashAccumulator.js +0 -100
  268. package/dist/shared/components/ZipCrypto.d.ts +0 -3
  269. package/dist/shared/components/ZipCrypto.js +0 -78
  270. package/dist/shared/components/merkleTree.d.ts +0 -66
  271. package/dist/shared/components/merkleTree.js +0 -136
  272. package/dist/shared/types/index.d.ts +0 -21
  273. package/dist/shared/types/index.js +0 -3
  274. package/dist/shared/types.d.ts +0 -33
  275. package/dist/shared/types.js +0 -8
  276. package/dist/shared/version.d.ts +0 -2
  277. package/dist/shared/version.js +0 -6
  278. package/src/blockchain/CertificateToken.ts +0 -444
  279. package/src/blockchain/ZipKitMinter.ts +0 -470
  280. package/src/blockchain/ZipKitNFT.ts +0 -12
  281. package/src/blockchain/ZipKitVerifier.ts +0 -382
  282. package/src/blockchain/contracts.ts +0 -88
  283. package/src/blockchain/types.ts +0 -91
  284. package/src/browser/CertificateGeneratorBrowser.ts-remove +0 -498
  285. package/src/browser/ZipKitStampBrowser.ts +0 -9
  286. package/src/browser-index.ts +0 -36
  287. package/src/server/README.md +0 -25
  288. package/src/server/ZipKitServer.ts +0 -305
  289. package/src/shared/ZipKit.ts +0 -881
  290. package/src/shared/components/CertificateOTS.ts +0 -132
  291. package/src/shared/components/FileSys.ts +0 -87
  292. package/src/shared/components/HashAccumulator.ts +0 -113
  293. package/src/shared/components/ZipCrypto.ts +0 -91
  294. package/src/shared/components/merkleTree.ts +0 -162
  295. package/src/shared/types/index.ts +0 -25
  296. package/src/shared/types/modules.d.ts +0 -22
  297. package/src/shared/types/opentimestamps.d.ts +0 -23
  298. package/src/shared/types.d.ts +0 -8
  299. package/src/shared/types.ts +0 -43
  300. package/src/shared/version.ts +0 -3
  301. /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,3 +0,0 @@
1
- export { ZipKitMinter, ZipKitVerifier } from '.';
2
- export type { MintingOptions, MintingResult, DuplicateCheckResult, TokenInfo, WalletInfo, VerificationOptions, VerificationResult, } from '.';
3
- export type { TokenMetadata } from './types';
@@ -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
- }