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
@@ -6,7 +6,7 @@ import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
6
6
  import "@openzeppelin/contracts/access/Ownable.sol";
7
7
 
8
8
  /**
9
- * @title NZIP NFT Contract v2.0
9
+ * @title NZIP NFT Contract v2.10
10
10
  * @dev Main NFT contract for tokenizing ZIP files with blockchain metadata
11
11
  * Features:
12
12
  * - Blockchain metadata (block number, timestamps)
@@ -16,19 +16,18 @@ import "@openzeppelin/contracts/access/Ownable.sol";
16
16
  * - Improved input validation and error handling
17
17
  * - Removed unreliable block hash storage
18
18
  *
19
- * Version: 2.0 (New Production Contract - Previous contract deprecated)
20
- * Previous Contract: 0xb78CB3bcC788fca38c731b1E9D70CF60b04CA015 (DEPRECATED)
19
+ * Version: 2.10 (Production Contract)
20
+ * Previous Contract: 0xb78CB3bcC788fca38c731b1E9D70CF60b04CA015 (No longer supported)
21
21
  * Network: Base Sepolia (for testing) / Base Mainnet (for production)
22
22
  */
23
- contract ZipFileNFT is ERC721, ERC721URIStorage, Ownable {
23
+ contract ZipFileNFTPublic is ERC721, ERC721URIStorage, Ownable {
24
24
 
25
25
  // Counter for token IDs
26
26
  uint256 private _tokenIdCounter;
27
27
 
28
28
  // Struct to store ZIP file information - Latest Version
29
29
  struct ZipFileInfo {
30
- // File identification
31
- string fileName; // Original ZIP file name
30
+ // File identification (filename removed for privacy - stored in ZIP metadata only)
32
31
  string merkleRootHash; // Merkle root hash of the ZIP contents
33
32
  string ipfsHash; // IPFS hash where the ZIP file is stored
34
33
  address creator; // Address that created/minted this token
@@ -48,11 +47,10 @@ contract ZipFileNFT is ERC721, ERC721URIStorage, Ownable {
48
47
  // This prevents duplicate tokens with same content AND same timestamp
49
48
  mapping(bytes32 => uint256) public compositeKeyToTokenId;
50
49
 
51
- // Events - Enhanced with blockchain metadata
50
+ // Events - Enhanced with blockchain metadata (filename removed for privacy)
52
51
  event ZipFileTokenized(
53
52
  uint256 indexed tokenId,
54
53
  address indexed creator,
55
- string fileName,
56
54
  string merkleRootHash,
57
55
  uint256 creationTimestamp,
58
56
  string ipfsHash,
@@ -60,14 +58,14 @@ contract ZipFileNFT is ERC721, ERC721URIStorage, Ownable {
60
58
  uint256 blockNumber
61
59
  );
62
60
 
63
- constructor() ERC721("NeoZip File NFT v2", "NZIP") Ownable(msg.sender) {}
61
+ constructor() ERC721("NeoZip File NFT v2.10", "NZIP") Ownable(msg.sender) {}
64
62
 
65
63
  /**
66
64
  * @dev Get the contract version
67
65
  * @return version The version string of this contract
68
66
  */
69
67
  function getVersion() public pure returns (string memory) {
70
- return "2.0.0";
68
+ return "2.10.0";
71
69
  }
72
70
 
73
71
  /**
@@ -85,22 +83,20 @@ contract ZipFileNFT is ERC721, ERC721URIStorage, Ownable {
85
83
 
86
84
  /**
87
85
  * @dev Public minting function for ZIP files
88
- * @param fileName Name of the ZIP file
89
86
  * @param merkleRootHash Merkle root hash of the ZIP contents
90
87
  * @param creationTimestamp Timestamp when the ZIP was created
91
88
  * @param ipfsHash IPFS hash where the ZIP is stored
92
89
  * @param metadataURI URI for the token metadata
93
90
  * @return The newly minted token ID
91
+ * Note: fileName is not stored on blockchain for privacy - it's stored in ZIP metadata only
94
92
  */
95
93
  function publicMintZipFile(
96
- string memory fileName,
97
94
  string memory merkleRootHash,
98
95
  uint256 creationTimestamp,
99
96
  string memory ipfsHash,
100
97
  string memory metadataURI
101
98
  ) public returns (uint256) {
102
99
  // Input validation
103
- require(bytes(fileName).length > 0, "File name cannot be empty");
104
100
  require(bytes(merkleRootHash).length > 0, "Merkle root hash cannot be empty");
105
101
  require(creationTimestamp > 0, "Creation timestamp must be greater than 0");
106
102
 
@@ -124,7 +120,6 @@ contract ZipFileNFT is ERC721, ERC721URIStorage, Ownable {
124
120
 
125
121
  // Store the ZIP file information with blockchain metadata
126
122
  zipFileInfo[tokenId] = ZipFileInfo({
127
- fileName: fileName,
128
123
  merkleRootHash: merkleRootHash,
129
124
  ipfsHash: ipfsHash,
130
125
  creator: msg.sender,
@@ -140,7 +135,6 @@ contract ZipFileNFT is ERC721, ERC721URIStorage, Ownable {
140
135
  emit ZipFileTokenized(
141
136
  tokenId,
142
137
  msg.sender,
143
- fileName,
144
138
  merkleRootHash,
145
139
  creationTimestamp,
146
140
  ipfsHash,
@@ -0,0 +1,67 @@
1
+ import ZipkitBrowser from '../../browser/ZipkitBrowser';
2
+ import { ZipEntry } from '../../core';
3
+ import { TokenMetadata } from '../../types';
4
+ export interface TokenVerificationOptions {
5
+ skipHash?: boolean;
6
+ skipToken?: boolean;
7
+ generateCertificate?: boolean;
8
+ zipFileName?: string;
9
+ }
10
+ export interface TokenVerificationResult {
11
+ isTokenized: boolean;
12
+ tokenMetadata: TokenMetadata | null;
13
+ calculatedMerkleRoot: string | null;
14
+ blockchainMerkleRoot: string | null;
15
+ blockchainTimestamp?: number;
16
+ verificationPassed: boolean;
17
+ certificatePath?: string;
18
+ errorMessage?: string;
19
+ }
20
+ export interface BlockchainVerification {
21
+ merkleRootMatches: boolean;
22
+ blockchainMerkleRoot: string;
23
+ calculatedMerkleRoot: string;
24
+ verificationStatus: 'PASSED' | 'FAILED' | 'UNAVAILABLE';
25
+ verificationTime?: number;
26
+ blockNumber?: number;
27
+ }
28
+ /**
29
+ * Browser-compatible token verification class
30
+ */
31
+ export declare class TokenVerifierBrowser {
32
+ private zipkit;
33
+ constructor(zipkit: ZipkitBrowser);
34
+ /**
35
+ * Checks if the ZIP file contains NFT token metadata and verifies the merkle root
36
+ */
37
+ checkForTokenization(zipEntries: ZipEntry[], options?: TokenVerificationOptions): Promise<TokenVerificationResult>;
38
+ /**
39
+ * Validates token metadata structure
40
+ */
41
+ private validateTokenInfo;
42
+ /**
43
+ * Calculates the merkle root excluding the token metadata file
44
+ */
45
+ private calculateMerkleRootExcludingToken;
46
+ /**
47
+ * Queries the blockchain to get the actual merkle root, timestamp, and owner stored in the smart contract
48
+ */
49
+ private queryBlockchainData;
50
+ /**
51
+ * Helper to convert Blob to string
52
+ */
53
+ private blobToString;
54
+ /**
55
+ * Creates a formatted summary of token information
56
+ */
57
+ createTokenSummary(tokenMetadata: TokenMetadata): string;
58
+ }
59
+ /**
60
+ * Creates a new TokenVerifierBrowser instance
61
+ */
62
+ export declare function createTokenVerifier(zipkit: ZipkitBrowser): TokenVerifierBrowser;
63
+ /**
64
+ * Convenience function to check for tokenization
65
+ */
66
+ export declare function checkForTokenization(zipkit: ZipkitBrowser, zipEntries: ZipEntry[], options?: TokenVerificationOptions): Promise<TokenVerificationResult>;
67
+ //# sourceMappingURL=TokenVerifierBrowser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenVerifierBrowser.d.ts","sourceRoot":"","sources":["../../../src/blockchain/browser/TokenVerifierBrowser.ts"],"names":[],"mappings":"AAMA,OAAO,aAAa,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAIjC;;OAEG;IACG,oBAAoB,CACxB,UAAU,EAAE,QAAQ,EAAE,EACtB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC;IAiInC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;YACW,iCAAiC;IAiC/C;;OAEG;YACW,mBAAmB;IAsGjC;;OAEG;YACW,YAAY;IAS1B;;OAEG;IACH,kBAAkB,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM;CAWzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,oBAAoB,CAE/E;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,QAAQ,EAAE,EACtB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CAGlC"}
@@ -0,0 +1,313 @@
1
+ "use strict";
2
+ // ======================================
3
+ // TokenVerifierBrowser.ts
4
+ // Browser-compatible blockchain token verification utilities for ZIP archives
5
+ // Copyright (c) 2025 NeoWare, Inc. All rights reserved.
6
+ // ======================================
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.TokenVerifierBrowser = void 0;
9
+ exports.createTokenVerifier = createTokenVerifier;
10
+ exports.checkForTokenization = checkForTokenization;
11
+ const Headers_1 = require("../../core/constants/Headers");
12
+ const contracts_1 = require("../core/contracts");
13
+ const ethers_1 = require("ethers");
14
+ // Use the complete contract ABI from constants
15
+ const CONTRACT_ABI = contracts_1.NZIP_CONTRACT_ABI;
16
+ /**
17
+ * Browser-compatible token verification class
18
+ */
19
+ class TokenVerifierBrowser {
20
+ constructor(zipkit) {
21
+ this.zipkit = zipkit;
22
+ }
23
+ /**
24
+ * Checks if the ZIP file contains NFT token metadata and verifies the merkle root
25
+ */
26
+ async checkForTokenization(zipEntries, options = {}) {
27
+ // Look for the tokenized metadata file
28
+ const tokenEntry = zipEntries.find(entry => entry.filename === Headers_1.TOKENIZED_METADATA);
29
+ if (!tokenEntry) {
30
+ return {
31
+ isTokenized: false,
32
+ tokenMetadata: null,
33
+ calculatedMerkleRoot: null,
34
+ blockchainMerkleRoot: null,
35
+ verificationPassed: false
36
+ };
37
+ }
38
+ try {
39
+ // Extract the token metadata
40
+ const tokenData = await this.zipkit.extractBlob(tokenEntry);
41
+ if (!tokenData) {
42
+ return {
43
+ isTokenized: false,
44
+ tokenMetadata: null,
45
+ calculatedMerkleRoot: null,
46
+ blockchainMerkleRoot: null,
47
+ verificationPassed: false,
48
+ errorMessage: 'Could not read token metadata'
49
+ };
50
+ }
51
+ const tokenContent = await this.blobToString(tokenData);
52
+ const tokenMetadata = JSON.parse(tokenContent);
53
+ // Validate token metadata structure
54
+ if (!this.validateTokenInfo(tokenMetadata)) {
55
+ return {
56
+ isTokenized: false,
57
+ tokenMetadata: null,
58
+ calculatedMerkleRoot: null,
59
+ blockchainMerkleRoot: null,
60
+ verificationPassed: false,
61
+ errorMessage: 'Invalid token metadata structure'
62
+ };
63
+ }
64
+ // Skip verification if requested
65
+ if (options.skipHash || options.skipToken) {
66
+ return {
67
+ isTokenized: true,
68
+ tokenMetadata,
69
+ calculatedMerkleRoot: null,
70
+ blockchainMerkleRoot: null,
71
+ verificationPassed: false,
72
+ errorMessage: options.skipHash ? 'Hash verification skipped' : 'Token verification skipped'
73
+ };
74
+ }
75
+ // Calculate merkle root excluding token file
76
+ const calculatedMerkleRoot = await this.calculateMerkleRootExcludingToken(zipEntries);
77
+ if (!calculatedMerkleRoot) {
78
+ return {
79
+ isTokenized: true,
80
+ tokenMetadata,
81
+ calculatedMerkleRoot: null,
82
+ blockchainMerkleRoot: null,
83
+ verificationPassed: false,
84
+ errorMessage: 'Could not calculate merkle root'
85
+ };
86
+ }
87
+ // Query blockchain for the actual merkle root and timestamp
88
+ const blockchainData = await this.queryBlockchainData(tokenMetadata);
89
+ if (!blockchainData.merkleRoot) {
90
+ // Add owner information to tokenMetadata even if merkle root is not available
91
+ const enhancedTokenMetadata = {
92
+ ...tokenMetadata,
93
+ owner: blockchainData.owner || undefined
94
+ };
95
+ return {
96
+ isTokenized: true,
97
+ tokenMetadata: enhancedTokenMetadata,
98
+ calculatedMerkleRoot,
99
+ blockchainMerkleRoot: null,
100
+ blockchainTimestamp: blockchainData.timestamp ?? undefined,
101
+ verificationPassed: false,
102
+ errorMessage: 'Could not retrieve merkle root from blockchain'
103
+ };
104
+ }
105
+ // Normalize both merkle roots for comparison (trim whitespace, lowercase)
106
+ const normalizedBlockchain = blockchainData.merkleRoot?.toLowerCase().trim() || '';
107
+ const normalizedCalculated = calculatedMerkleRoot?.toLowerCase().trim() || '';
108
+ const verificationPassed = normalizedBlockchain === normalizedCalculated;
109
+ // Log mismatch only (success is silent)
110
+ if (!verificationPassed) {
111
+ console.warn(`[TokenVerifier] ⚠️ Merkle root mismatch - Calculated: ${calculatedMerkleRoot}, Blockchain: ${blockchainData.merkleRoot}`);
112
+ }
113
+ // Add owner information to tokenMetadata
114
+ const enhancedTokenMetadata = {
115
+ ...tokenMetadata,
116
+ owner: blockchainData.owner || undefined
117
+ };
118
+ return {
119
+ isTokenized: true,
120
+ tokenMetadata: enhancedTokenMetadata,
121
+ calculatedMerkleRoot,
122
+ blockchainMerkleRoot: blockchainData.merkleRoot,
123
+ blockchainTimestamp: blockchainData.timestamp ?? undefined,
124
+ verificationPassed,
125
+ errorMessage: verificationPassed ? undefined : `Merkle root mismatch - Calculated: ${calculatedMerkleRoot}, Blockchain: ${blockchainData.merkleRoot}`
126
+ };
127
+ }
128
+ catch (error) {
129
+ return {
130
+ isTokenized: false,
131
+ tokenMetadata: null,
132
+ calculatedMerkleRoot: null,
133
+ blockchainMerkleRoot: null,
134
+ verificationPassed: false,
135
+ errorMessage: `Error processing token: ${error instanceof Error ? error.message : String(error)}`
136
+ };
137
+ }
138
+ }
139
+ /**
140
+ * Validates token metadata structure
141
+ */
142
+ validateTokenInfo(tokenMetadata) {
143
+ return tokenMetadata &&
144
+ typeof tokenMetadata.version === 'string' &&
145
+ typeof tokenMetadata.tokenId === 'string' &&
146
+ typeof tokenMetadata.contractAddress === 'string' &&
147
+ typeof tokenMetadata.network === 'string' &&
148
+ typeof tokenMetadata.networkChainId === 'number' &&
149
+ typeof tokenMetadata.transactionHash === 'string' &&
150
+ typeof tokenMetadata.merkleRoot === 'string' &&
151
+ typeof tokenMetadata.mintedAt === 'string';
152
+ }
153
+ /**
154
+ * Calculates the merkle root excluding the token metadata file
155
+ */
156
+ async calculateMerkleRootExcludingToken(zipEntries) {
157
+ try {
158
+ // Get all entries except the token file
159
+ const contentEntries = zipEntries.filter(entry => entry.filename !== Headers_1.TOKENIZED_METADATA);
160
+ if (contentEntries.length === 0) {
161
+ console.error(`[TokenVerifier] ❌ No content entries found after filtering`);
162
+ return null;
163
+ }
164
+ // For each content entry, ensure we have SHA-256 hash calculated
165
+ for (const entry of contentEntries) {
166
+ if (!entry.sha256) {
167
+ // Extract the file to calculate its SHA-256 hash
168
+ await this.zipkit.extractBlob(entry);
169
+ }
170
+ }
171
+ // Calculate merkle root from content files
172
+ // getMerkleRoot() already excludes TOKENIZED_METADATA, TIMESTAMP_SUBMITTED, and TIMESTAMP_METADATA
173
+ const merkleRoot = await this.zipkit.getMerkleRoot?.() || null;
174
+ if (!merkleRoot) {
175
+ console.error(`[TokenVerifier] ❌ Failed to calculate merkle root`);
176
+ }
177
+ return merkleRoot;
178
+ }
179
+ catch (error) {
180
+ console.error(`[TokenVerifier] ❌ Error calculating merkle root:`, error);
181
+ return null;
182
+ }
183
+ }
184
+ /**
185
+ * Queries the blockchain to get the actual merkle root, timestamp, and owner stored in the smart contract
186
+ */
187
+ async queryBlockchainData(tokenMetadata) {
188
+ try {
189
+ // Get network configuration from contracts.ts (single source of truth)
190
+ if (!tokenMetadata.networkChainId) {
191
+ console.error(`[TokenVerifier] ❌ No chainId in token metadata`);
192
+ return { merkleRoot: null, timestamp: null, owner: null };
193
+ }
194
+ const networkConfig = (0, contracts_1.getContractConfig)(tokenMetadata.networkChainId);
195
+ if (!networkConfig) {
196
+ console.error(`[TokenVerifier] ❌ Could not resolve network configuration for chainId: ${tokenMetadata.networkChainId}`);
197
+ return { merkleRoot: null, timestamp: null, owner: null };
198
+ }
199
+ // Test RPC endpoints first to find working ones (same as server-side)
200
+ const workingRpcUrls = [];
201
+ for (const rpcUrl of networkConfig.rpcUrls) {
202
+ try {
203
+ const controller = new AbortController();
204
+ const timeoutId = setTimeout(() => controller.abort(), 5000);
205
+ const testResponse = await fetch(rpcUrl, {
206
+ method: 'POST',
207
+ headers: { 'Content-Type': 'application/json' },
208
+ body: JSON.stringify({
209
+ jsonrpc: '2.0',
210
+ method: 'eth_chainId',
211
+ params: [],
212
+ id: 1
213
+ }),
214
+ signal: controller.signal
215
+ });
216
+ clearTimeout(timeoutId);
217
+ if (testResponse.ok) {
218
+ const contentType = testResponse.headers.get('content-type');
219
+ if (contentType && contentType.includes('application/json')) {
220
+ const testData = await testResponse.json();
221
+ if (testData?.jsonrpc && testData?.result) {
222
+ const actualChainId = parseInt(testData.result, 16);
223
+ if (actualChainId === tokenMetadata.networkChainId) {
224
+ workingRpcUrls.push(rpcUrl);
225
+ }
226
+ }
227
+ }
228
+ }
229
+ }
230
+ catch (testError) {
231
+ // Silently skip failed endpoints
232
+ }
233
+ }
234
+ if (workingRpcUrls.length === 0) {
235
+ // Fallback to all endpoints if none tested successfully
236
+ workingRpcUrls.push(...networkConfig.rpcUrls);
237
+ }
238
+ // Try multiple RPC endpoints (only working ones if available)
239
+ for (let i = 0; i < workingRpcUrls.length; i++) {
240
+ const rpcUrl = workingRpcUrls[i];
241
+ try {
242
+ const provider = new ethers_1.ethers.JsonRpcProvider(rpcUrl);
243
+ // Test connection with a timeout
244
+ await Promise.race([
245
+ provider.getBlockNumber(),
246
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 5000))
247
+ ]);
248
+ // Create contract instance
249
+ const contract = new ethers_1.ethers.Contract(tokenMetadata.contractAddress, CONTRACT_ABI, provider);
250
+ // Call getZipFileInfo to get the blockchain-stored data
251
+ const zipInfo = await contract.getZipFileInfo(tokenMetadata.tokenId);
252
+ // Get the token owner
253
+ const owner = await contract.ownerOf(tokenMetadata.tokenId);
254
+ return {
255
+ merkleRoot: zipInfo.merkleRootHash,
256
+ timestamp: Number(zipInfo.tokenizationTime),
257
+ owner: owner
258
+ };
259
+ }
260
+ catch (error) {
261
+ // Continue to next endpoint on error
262
+ continue;
263
+ }
264
+ }
265
+ console.error(`[TokenVerifier] ❌ All RPC endpoints failed for network: ${tokenMetadata.network}`);
266
+ return { merkleRoot: null, timestamp: null, owner: null };
267
+ }
268
+ catch (error) {
269
+ console.error(`[TokenVerifier] ❌ Blockchain query error:`, error?.message || error);
270
+ return { merkleRoot: null, timestamp: null, owner: null };
271
+ }
272
+ }
273
+ /**
274
+ * Helper to convert Blob to string
275
+ */
276
+ async blobToString(blob) {
277
+ return new Promise((resolve, reject) => {
278
+ const reader = new FileReader();
279
+ reader.onload = () => resolve(reader.result);
280
+ reader.onerror = reject;
281
+ reader.readAsText(blob);
282
+ });
283
+ }
284
+ /**
285
+ * Creates a formatted summary of token information
286
+ */
287
+ createTokenSummary(tokenMetadata) {
288
+ return `
289
+ 🎫 NFT Token Information:
290
+ Token ID: ${tokenMetadata.tokenId}
291
+ Network: ${tokenMetadata.network}
292
+ Contract: ${tokenMetadata.contractAddress}
293
+ Transaction: ${tokenMetadata.transactionHash}
294
+ Type: Tokenized Archive
295
+ Minted: ${tokenMetadata.mintedAt ? new Date(tokenMetadata.mintedAt).toLocaleString() : 'Unknown'}
296
+ `;
297
+ }
298
+ }
299
+ exports.TokenVerifierBrowser = TokenVerifierBrowser;
300
+ /**
301
+ * Creates a new TokenVerifierBrowser instance
302
+ */
303
+ function createTokenVerifier(zipkit) {
304
+ return new TokenVerifierBrowser(zipkit);
305
+ }
306
+ /**
307
+ * Convenience function to check for tokenization
308
+ */
309
+ async function checkForTokenization(zipkit, zipEntries, options = {}) {
310
+ const verifier = new TokenVerifierBrowser(zipkit);
311
+ return verifier.checkForTokenization(zipEntries, options);
312
+ }
313
+ //# sourceMappingURL=TokenVerifierBrowser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenVerifierBrowser.js","sourceRoot":"","sources":["../../../src/blockchain/browser/TokenVerifierBrowser.ts"],"names":[],"mappings":";AAAA,yCAAyC;AACzC,0BAA0B;AAC1B,+EAA+E;AAC/E,yDAAyD;AACzD,yCAAyC;;;AAmXzC,kDAEC;AAKD,oDAOC;AA7XD,0DAAkE;AAElE,iDAAyE;AACzE,mCAAgC;AA6BhC,+CAA+C;AAC/C,MAAM,YAAY,GAAG,6BAAiB,CAAC;AAEvC;;GAEG;AACH,MAAa,oBAAoB;IAG/B,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CACxB,UAAsB,EACtB,UAAoC,EAAE;QAEpC,uCAAuC;QAC3C,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,4BAAkB,CAAC,CAAC;QAEjF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;gBACL,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,IAAI;gBACnB,oBAAoB,EAAE,IAAI;gBAC1B,oBAAoB,EAAE,IAAI;gBAC1B,kBAAkB,EAAE,KAAK;aAC1B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,6BAA6B;YAC7B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAE5D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;oBACL,WAAW,EAAE,KAAK;oBAClB,aAAa,EAAE,IAAI;oBACnB,oBAAoB,EAAE,IAAI;oBAC1B,oBAAoB,EAAE,IAAI;oBAC1B,kBAAkB,EAAE,KAAK;oBACzB,YAAY,EAAE,+BAA+B;iBAC9C,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACxD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAE/C,oCAAoC;YACpC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC3C,OAAO;oBACL,WAAW,EAAE,KAAK;oBAClB,aAAa,EAAE,IAAI;oBACnB,oBAAoB,EAAE,IAAI;oBAC1B,oBAAoB,EAAE,IAAI;oBAC1B,kBAAkB,EAAE,KAAK;oBACzB,YAAY,EAAE,kCAAkC;iBACjD,CAAC;YACJ,CAAC;YAED,iCAAiC;YACjC,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC1C,OAAO;oBACL,WAAW,EAAE,IAAI;oBACjB,aAAa;oBACb,oBAAoB,EAAE,IAAI;oBAC1B,oBAAoB,EAAE,IAAI;oBAC1B,kBAAkB,EAAE,KAAK;oBACzB,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,4BAA4B;iBAC5F,CAAC;YACJ,CAAC;YAED,6CAA6C;YAC7C,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,iCAAiC,CAAC,UAAU,CAAC,CAAC;YAEtF,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,OAAO;oBACL,WAAW,EAAE,IAAI;oBACjB,aAAa;oBACb,oBAAoB,EAAE,IAAI;oBAC1B,oBAAoB,EAAE,IAAI;oBAC1B,kBAAkB,EAAE,KAAK;oBACzB,YAAY,EAAE,iCAAiC;iBAChD,CAAC;YACJ,CAAC;YAED,4DAA4D;YAC5D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;YAErE,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;gBAC/B,8EAA8E;gBAC9E,MAAM,qBAAqB,GAAG;oBAC5B,GAAG,aAAa;oBAChB,KAAK,EAAE,cAAc,CAAC,KAAK,IAAI,SAAS;iBACzC,CAAC;gBAEF,OAAO;oBACL,WAAW,EAAE,IAAI;oBACjB,aAAa,EAAE,qBAAqB;oBACpC,oBAAoB;oBACpB,oBAAoB,EAAE,IAAI;oBAC1B,mBAAmB,EAAE,cAAc,CAAC,SAAS,IAAI,SAAS;oBAC1D,kBAAkB,EAAE,KAAK;oBACzB,YAAY,EAAE,gDAAgD;iBAC/D,CAAC;YACJ,CAAC;YAED,0EAA0E;YAC1E,MAAM,oBAAoB,GAAG,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YACnF,MAAM,oBAAoB,GAAG,oBAAoB,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAC9E,MAAM,kBAAkB,GAAG,oBAAoB,KAAK,oBAAoB,CAAC;YAEzE,wCAAwC;YACxC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,yDAAyD,oBAAoB,iBAAiB,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1I,CAAC;YAED,yCAAyC;YACzC,MAAM,qBAAqB,GAAG;gBAC5B,GAAG,aAAa;gBAChB,KAAK,EAAE,cAAc,CAAC,KAAK,IAAI,SAAS;aACzC,CAAC;YAEF,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,aAAa,EAAE,qBAAqB;gBACpC,oBAAoB;gBACpB,oBAAoB,EAAE,cAAc,CAAC,UAAU;gBAC/C,mBAAmB,EAAE,cAAc,CAAC,SAAS,IAAI,SAAS;gBAC1D,kBAAkB;gBAClB,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sCAAsC,oBAAoB,iBAAiB,cAAc,CAAC,UAAU,EAAE;aACtJ,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,IAAI;gBACnB,oBAAoB,EAAE,IAAI;gBAC1B,oBAAoB,EAAE,IAAI;gBAC1B,kBAAkB,EAAE,KAAK;gBACzB,YAAY,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAClG,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,aAAkB;QAC1C,OAAO,aAAa;YACb,OAAO,aAAa,CAAC,OAAO,KAAK,QAAQ;YACzC,OAAO,aAAa,CAAC,OAAO,KAAK,QAAQ;YACzC,OAAO,aAAa,CAAC,eAAe,KAAK,QAAQ;YACjD,OAAO,aAAa,CAAC,OAAO,KAAK,QAAQ;YACzC,OAAO,aAAa,CAAC,cAAc,KAAK,QAAQ;YAChD,OAAO,aAAa,CAAC,eAAe,KAAK,QAAQ;YACjD,OAAO,aAAa,CAAC,UAAU,KAAK,QAAQ;YAC5C,OAAO,aAAa,CAAC,QAAQ,KAAK,QAAQ,CAAC;IACpD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iCAAiC,CAAC,UAAsB;QACpE,IAAI,CAAC;YACH,wCAAwC;YACxC,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,4BAAkB,CAAC,CAAC;YAEzF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;gBAC5E,OAAO,IAAI,CAAC;YACd,CAAC;YAED,iEAAiE;YACjE,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBAClB,iDAAiD;oBACjD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YAED,2CAA2C;YAC3C,mGAAmG;YACnG,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,IAAI,CAAC;YAE/D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACrE,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,aAA4B;QAC5D,IAAI,CAAC;YACH,uEAAuE;YACvE,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAChE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC5D,CAAC;YAED,MAAM,aAAa,GAAG,IAAA,6BAAiB,EAAC,aAAa,CAAC,cAAc,CAAC,CAAC;YAEtE,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,0EAA0E,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;gBACxH,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC5D,CAAC;YAED,sEAAsE;YACtE,MAAM,cAAc,GAAa,EAAE,CAAC;YAEpC,KAAK,MAAM,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC3C,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;oBACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;oBAE7D,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;wBACvC,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;wBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,OAAO,EAAE,KAAK;4BACd,MAAM,EAAE,aAAa;4BACrB,MAAM,EAAE,EAAE;4BACV,EAAE,EAAE,CAAC;yBACN,CAAC;wBACF,MAAM,EAAE,UAAU,CAAC,MAAM;qBAC1B,CAAC,CAAC;oBAEH,YAAY,CAAC,SAAS,CAAC,CAAC;oBAExB,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;wBACpB,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;wBAC7D,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;4BAC5D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,EAA2C,CAAC;4BACpF,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;gCAC1C,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gCACpD,IAAI,aAAa,KAAK,aAAa,CAAC,cAAc,EAAE,CAAC;oCACnD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gCAC9B,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,SAAc,EAAE,CAAC;oBACxB,iCAAiC;gBACnC,CAAC;YACH,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,wDAAwD;gBACxD,cAAc,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC;YAED,8DAA8D;YAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAEjC,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBAEpD,iCAAiC;oBACjC,MAAM,OAAO,CAAC,IAAI,CAAC;wBACjB,QAAQ,CAAC,cAAc,EAAE;wBACzB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;qBACjF,CAAC,CAAC;oBAEH,2BAA2B;oBAC3B,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;oBAE5F,wDAAwD;oBACxD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAErE,sBAAsB;oBACtB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAE5D,OAAO;wBACL,UAAU,EAAE,OAAO,CAAC,cAAc;wBAClC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;wBAC3C,KAAK,EAAE,KAAK;qBACb,CAAC;gBAEJ,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,qCAAqC;oBACrC,SAAS;gBACX,CAAC;YACH,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,2DAA2D,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClG,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAE5D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;YACpF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,IAAU;QACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;YACvD,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;YACxB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,aAA4B;QAC7C,OAAO;;eAEI,aAAa,CAAC,OAAO;cACtB,aAAa,CAAC,OAAO;eACpB,aAAa,CAAC,eAAe;kBAC1B,aAAa,CAAC,eAAe;;aAElC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS;IAC/F,CAAC;IACH,CAAC;CACF;AApUD,oDAoUC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,MAAqB;IACvD,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAqB,EACrB,UAAsB,EACtB,UAAoC,EAAE;IAEtC,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,QAAQ,CAAC,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * WalletManagerBrowser - Handles browser-specific wallet operations
3
+ * Manages MetaMask, Coinbase Wallet, and other browser providers
4
+ * Extends CoreWalletManager with browser-specific functionality
5
+ */
6
+ import { ethers } from 'ethers';
7
+ import { CoreWalletManager } from '../core/WalletManager';
8
+ declare global {
9
+ interface Window {
10
+ ethereum?: any;
11
+ }
12
+ }
13
+ export interface WalletConfigBrowser {
14
+ chainId: number;
15
+ network: string;
16
+ address: string;
17
+ rpcUrls: string[];
18
+ explorerUrl: string;
19
+ }
20
+ export declare class WalletManagerBrowser extends CoreWalletManager {
21
+ private browserProvider;
22
+ private readProvider;
23
+ private contract;
24
+ private currentConfig;
25
+ private targetChainId;
26
+ private RPC_ENDPOINTS;
27
+ constructor(initialChainId?: number);
28
+ /**
29
+ * Cleanup method to dispose of providers and stop background processes
30
+ */
31
+ cleanup(): void;
32
+ private getNetworkName;
33
+ /**
34
+ * Set the target network for wallet operations
35
+ */
36
+ setTargetNetwork(chainId: number): void;
37
+ /**
38
+ * Get the current target network configuration
39
+ */
40
+ getCurrentConfig(): WalletConfigBrowser;
41
+ /**
42
+ * Initialize wallet with browser provider
43
+ */
44
+ initialize(walletAddress: string, existingProvider?: any): Promise<boolean>;
45
+ /**
46
+ * Get the contract instance
47
+ */
48
+ getContract(): ethers.Contract | null;
49
+ /**
50
+ * Get the browser provider instance
51
+ */
52
+ getBrowserProvider(): ethers.BrowserProvider | null;
53
+ /**
54
+ * Override parent method to return browser provider
55
+ */
56
+ getWallet(): ethers.Wallet | null;
57
+ /**
58
+ * Get the read provider instance
59
+ */
60
+ getReadProvider(): ethers.JsonRpcProvider | null;
61
+ /**
62
+ * Override parent method to check browser provider
63
+ */
64
+ isReady(): boolean;
65
+ /**
66
+ * Override parent method to check read provider
67
+ */
68
+ isOnline(): boolean;
69
+ private addAndSwitchNetwork;
70
+ private testProviderConnection;
71
+ /**
72
+ * Generate block explorer URL for a transaction
73
+ */
74
+ getExplorerUrl(transactionHash: string): string;
75
+ /**
76
+ * Generate block explorer URL for a contract
77
+ */
78
+ getContractExplorerUrl(): string;
79
+ /**
80
+ * Generate block explorer URL for a token
81
+ * Uses the contract address page where users can search for specific token IDs
82
+ */
83
+ getTokenExplorerUrl(tokenId: string): string;
84
+ /**
85
+ * Generate block explorer URL for a specific token ID
86
+ * Some explorers support direct token URLs
87
+ */
88
+ getTokenDirectUrl(tokenId: string): string;
89
+ /**
90
+ * Generate block explorer URL for an address
91
+ */
92
+ getAddressExplorerUrl(address: string): string;
93
+ /**
94
+ * Generate block explorer URL for a block
95
+ */
96
+ getBlockExplorerUrl(blockNumber: string | number): string;
97
+ }
98
+ //# sourceMappingURL=WalletManagerBrowser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletManagerBrowser.d.ts","sourceRoot":"","sources":["../../../src/blockchain/browser/WalletManagerBrowser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK1D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,QAAQ,CAAC,EAAE,GAAG,CAAA;KACf;CACF;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,oBAAqB,SAAQ,iBAAiB;IACzD,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,aAAa,CAKpB;gBAEW,cAAc,GAAE,MAAc;IAK1C;;OAEG;IACI,OAAO,IAAI,IAAI;IA4BtB,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY9C;;OAEG;IACI,gBAAgB,IAAI,mBAAmB;IAI9C;;OAEG;IACG,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAmNjF;;OAEG;IACI,WAAW,IAAI,MAAM,CAAC,QAAQ,GAAG,IAAI;IAI5C;;OAEG;IACI,kBAAkB,IAAI,MAAM,CAAC,eAAe,GAAG,IAAI;IAI1D;;OAEG;IACI,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI;IAKxC;;OAEG;IACI,eAAe,IAAI,MAAM,CAAC,eAAe,GAAG,IAAI;IAIvD;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB;;OAEG;IACI,QAAQ,IAAI,OAAO;YAIZ,mBAAmB;YA+DnB,sBAAsB;IAYpC;;OAEG;IACI,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAItD;;OAEG;IACI,sBAAsB,IAAI,MAAM;IAIvC;;;OAGG;IACI,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAInD;;;OAGG;IACI,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAKjD;;OAEG;IACI,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIrD;;OAEG;IACI,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;CAGjE"}