neozipkit 0.1.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 +371 -200
- 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 +256 -0
- 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/{browser → blockchain/browser}/TokenVerifierBrowser.d.ts +11 -20
- package/dist/blockchain/browser/TokenVerifierBrowser.d.ts.map +1 -0
- package/dist/{browser → blockchain/browser}/TokenVerifierBrowser.js +106 -92
- 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/{server/blockchain/WalletAnalyzer.d.ts → blockchain/core/WalletManager.d.ts} +69 -26
- package/dist/blockchain/core/WalletManager.d.ts.map +1 -0
- package/dist/{server/blockchain/WalletAnalyzer.js → blockchain/core/WalletManager.js} +172 -160
- package/dist/blockchain/core/WalletManager.js.map +1 -0
- package/dist/blockchain/core/ZipkitMinter.d.ts +141 -0
- 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/core/ZipkitOTS.d.ts +126 -0
- package/dist/blockchain/core/ZipkitOTS.d.ts.map +1 -0
- package/dist/blockchain/core/ZipkitOTS.js +506 -0
- 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 -0
- package/dist/blockchain/index.d.ts.map +1 -0
- package/dist/blockchain/index.js +34 -0
- 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 -17
- package/dist/browser.js +13 -29
- 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 +224 -81
- 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/{shared → core}/version.d.ts +1 -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 -25
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -47
- 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 +6 -3
- package/examples/verify-tokenized-zip.ts +305 -0
- package/package.json +117 -23
- package/src/blockchain/README.md +222 -0
- package/src/{browser → 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/core/WalletManager.ts +436 -0
- package/src/blockchain/core/ZipkitMinter.ts +716 -0
- package/src/blockchain/core/ZipkitOTS.ts +588 -0
- 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 +27 -0
- 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 +239 -89
- 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 -32
- 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/opentimestamps.d.ts +1 -23
- package/contracts/Lock.sol +0 -34
- package/contracts/bytecode.txt +0 -1
- package/contracts/compile-contract.js +0 -168
- package/contracts/deploy/deploy-both-contracts.js +0 -286
- package/contracts/deploy/deploy-enhanced-contract.js +0 -197
- package/contracts/deploy/deploy-private-contract.js +0 -190
- package/contracts/deploy/deploy-public-clean.js +0 -1063
- package/contracts/deploy/deploy-public-contract.js +0 -1107
- package/contracts/deployment.config.example.js +0 -25
- package/contracts/remix-compile.js +0 -222
- package/contracts/setup-deployment.js +0 -51
- package/contracts/src/ZipFileNFT-DEPRECATED-6field.sol +0 -260
- package/contracts/src/ZipFileNFT-DEPRECATED-Enhanced.sol +0 -289
- package/dist/browser/CertificateGeneratorBrowser.d.ts +0 -75
- package/dist/browser/CertificateGeneratorBrowser.js +0 -433
- 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 -21
- package/dist/browser-index.js +0 -58
- package/dist/server/blockchain/CertificateToken.d.ts +0 -48
- package/dist/server/blockchain/CertificateToken.js +0 -386
- package/dist/server/blockchain/NFTMinter.d.ts +0 -41
- package/dist/server/blockchain/NFTMinter.js +0 -323
- package/dist/server/blockchain/TokenQuerier.d.ts +0 -31
- package/dist/server/blockchain/TokenQuerier.js +0 -259
- package/dist/server/blockchain/TokenVerifier.d.ts +0 -20
- package/dist/server/blockchain/TokenVerifier.js +0 -395
- package/dist/server/blockchain/WalletFormatter.d.ts +0 -39
- package/dist/server/blockchain/WalletFormatter.js +0 -196
- package/dist/server/blockchain/WalletManager.d.ts +0 -46
- package/dist/server/blockchain/WalletManager.js +0 -294
- package/dist/server/blockchain/ZipMetadata.d.ts +0 -27
- package/dist/server/blockchain/ZipMetadata.js +0 -131
- package/dist/server/blockchain/ZipTokenProcessor.d.ts +0 -44
- package/dist/server/blockchain/ZipTokenProcessor.js +0 -204
- package/dist/server/blockchain/constants.d.ts +0 -102
- package/dist/server/blockchain/constants.js +0 -968
- package/dist/server/blockchain/index.d.ts +0 -9
- package/dist/server/blockchain/index.js +0 -44
- package/dist/server/blockchain/test-certificate.d.ts +0 -8
- package/dist/server/blockchain/test-certificate.js +0 -100
- package/dist/server/blockchain/types.d.ts +0 -69
- package/dist/server/blockchain/types.js +0 -51
- package/dist/server/platform/server/ZipKitServer.d.ts +0 -105
- package/dist/server/platform/server/ZipKitServer.js +0 -437
- package/dist/server/platform/servercomponents/ZipKitOTS.d.ts +0 -91
- package/dist/server/platform/servercomponents/ZipKitOTS.js +0 -271
- package/dist/shared/ZipKit.d.ts +0 -249
- package/dist/shared/ZipKit.js +0 -789
- 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.js +0 -7
- package/src/browser/CertificateGeneratorBrowser.ts +0 -498
- package/src/browser/ZipKitStampBrowser.ts +0 -9
- package/src/browser-index.ts +0 -36
- package/src/server/blockchain/CertificateToken.ts +0 -444
- package/src/server/blockchain/NFTMinter.ts +0 -357
- package/src/server/blockchain/TokenQuerier.ts +0 -287
- package/src/server/blockchain/TokenVerifier.ts +0 -453
- package/src/server/blockchain/WalletAnalyzer.ts +0 -397
- package/src/server/blockchain/WalletFormatter.ts +0 -206
- package/src/server/blockchain/WalletManager.ts +0 -294
- package/src/server/blockchain/ZipMetadata.ts +0 -117
- package/src/server/blockchain/ZipTokenProcessor.ts +0 -234
- package/src/server/blockchain/constants.ts +0 -969
- package/src/server/blockchain/index.ts +0 -42
- package/src/server/blockchain/test-certificate.ts +0 -137
- package/src/server/blockchain/types.ts +0 -134
- package/src/server/platform/server/ZipKitServer.ts +0 -459
- package/src/server/platform/servercomponents/ZipKitOTS.ts +0 -313
- package/src/server/platform/servercomponents/opentimestamps.d.ts +0 -23
- package/src/shared/ZipKit.ts +0 -899
- 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 -4
- /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.
|
|
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.
|
|
20
|
-
* Previous Contract: 0xb78CB3bcC788fca38c731b1E9D70CF60b04CA015 (
|
|
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
|
|
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.
|
|
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,
|
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ZipEntry } from '
|
|
3
|
-
|
|
4
|
-
version: string;
|
|
5
|
-
tokenId: string;
|
|
6
|
-
contractAddress: string;
|
|
7
|
-
network: string;
|
|
8
|
-
networkChainId: number;
|
|
9
|
-
transactionHash: string;
|
|
10
|
-
merkleRoot: string;
|
|
11
|
-
fileName: string;
|
|
12
|
-
mintedAt: string;
|
|
13
|
-
}
|
|
1
|
+
import ZipkitBrowser from '../../browser/ZipkitBrowser';
|
|
2
|
+
import { ZipEntry } from '../../core';
|
|
3
|
+
import { TokenMetadata } from '../../types';
|
|
14
4
|
export interface TokenVerificationOptions {
|
|
15
5
|
skipHash?: boolean;
|
|
16
6
|
skipToken?: boolean;
|
|
@@ -19,7 +9,7 @@ export interface TokenVerificationOptions {
|
|
|
19
9
|
}
|
|
20
10
|
export interface TokenVerificationResult {
|
|
21
11
|
isTokenized: boolean;
|
|
22
|
-
tokenMetadata:
|
|
12
|
+
tokenMetadata: TokenMetadata | null;
|
|
23
13
|
calculatedMerkleRoot: string | null;
|
|
24
14
|
blockchainMerkleRoot: string | null;
|
|
25
15
|
blockchainTimestamp?: number;
|
|
@@ -39,8 +29,8 @@ export interface BlockchainVerification {
|
|
|
39
29
|
* Browser-compatible token verification class
|
|
40
30
|
*/
|
|
41
31
|
export declare class TokenVerifierBrowser {
|
|
42
|
-
private
|
|
43
|
-
constructor(
|
|
32
|
+
private zipkit;
|
|
33
|
+
constructor(zipkit: ZipkitBrowser);
|
|
44
34
|
/**
|
|
45
35
|
* Checks if the ZIP file contains NFT token metadata and verifies the merkle root
|
|
46
36
|
*/
|
|
@@ -54,7 +44,7 @@ export declare class TokenVerifierBrowser {
|
|
|
54
44
|
*/
|
|
55
45
|
private calculateMerkleRootExcludingToken;
|
|
56
46
|
/**
|
|
57
|
-
* Queries the blockchain to get the actual merkle root and
|
|
47
|
+
* Queries the blockchain to get the actual merkle root, timestamp, and owner stored in the smart contract
|
|
58
48
|
*/
|
|
59
49
|
private queryBlockchainData;
|
|
60
50
|
/**
|
|
@@ -64,13 +54,14 @@ export declare class TokenVerifierBrowser {
|
|
|
64
54
|
/**
|
|
65
55
|
* Creates a formatted summary of token information
|
|
66
56
|
*/
|
|
67
|
-
createTokenSummary(tokenMetadata:
|
|
57
|
+
createTokenSummary(tokenMetadata: TokenMetadata): string;
|
|
68
58
|
}
|
|
69
59
|
/**
|
|
70
60
|
* Creates a new TokenVerifierBrowser instance
|
|
71
61
|
*/
|
|
72
|
-
export declare function createTokenVerifier(
|
|
62
|
+
export declare function createTokenVerifier(zipkit: ZipkitBrowser): TokenVerifierBrowser;
|
|
73
63
|
/**
|
|
74
64
|
* Convenience function to check for tokenization
|
|
75
65
|
*/
|
|
76
|
-
export declare function checkForTokenization(
|
|
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"}
|
|
@@ -4,74 +4,21 @@
|
|
|
4
4
|
// Browser-compatible blockchain token verification utilities for ZIP archives
|
|
5
5
|
// Copyright (c) 2025 NeoWare, Inc. All rights reserved.
|
|
6
6
|
// ======================================
|
|
7
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
-
if (k2 === undefined) k2 = k;
|
|
9
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
-
}
|
|
13
|
-
Object.defineProperty(o, k2, desc);
|
|
14
|
-
}) : (function(o, m, k, k2) {
|
|
15
|
-
if (k2 === undefined) k2 = k;
|
|
16
|
-
o[k2] = m[k];
|
|
17
|
-
}));
|
|
18
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
-
}) : function(o, v) {
|
|
21
|
-
o["default"] = v;
|
|
22
|
-
});
|
|
23
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
-
var ownKeys = function(o) {
|
|
25
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
-
var ar = [];
|
|
27
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
-
return ar;
|
|
29
|
-
};
|
|
30
|
-
return ownKeys(o);
|
|
31
|
-
};
|
|
32
|
-
return function (mod) {
|
|
33
|
-
if (mod && mod.__esModule) return mod;
|
|
34
|
-
var result = {};
|
|
35
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
-
__setModuleDefault(result, mod);
|
|
37
|
-
return result;
|
|
38
|
-
};
|
|
39
|
-
})();
|
|
40
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
8
|
exports.TokenVerifierBrowser = void 0;
|
|
42
9
|
exports.createTokenVerifier = createTokenVerifier;
|
|
43
10
|
exports.checkForTokenization = checkForTokenization;
|
|
44
|
-
const Headers_1 = require("
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
const NETWORK_CONFIG = {
|
|
48
|
-
'Base Sepolia': {
|
|
49
|
-
chainId: 84532,
|
|
50
|
-
rpcUrls: [
|
|
51
|
-
'https://sepolia.base.org',
|
|
52
|
-
'https://base-sepolia.g.alchemy.com/v2/demo',
|
|
53
|
-
'https://base-sepolia-rpc.publicnode.com',
|
|
54
|
-
'https://base-sepolia.blockpi.network/v1/rpc/public'
|
|
55
|
-
]
|
|
56
|
-
},
|
|
57
|
-
'Base Mainnet': {
|
|
58
|
-
chainId: 8453,
|
|
59
|
-
rpcUrls: [
|
|
60
|
-
'https://mainnet.base.org',
|
|
61
|
-
'https://base-mainnet.g.alchemy.com/v2/demo',
|
|
62
|
-
'https://base-rpc.publicnode.com',
|
|
63
|
-
'https://base.blockpi.network/v1/rpc/public'
|
|
64
|
-
]
|
|
65
|
-
}
|
|
66
|
-
};
|
|
11
|
+
const Headers_1 = require("../../core/constants/Headers");
|
|
12
|
+
const contracts_1 = require("../core/contracts");
|
|
13
|
+
const ethers_1 = require("ethers");
|
|
67
14
|
// Use the complete contract ABI from constants
|
|
68
|
-
const CONTRACT_ABI =
|
|
15
|
+
const CONTRACT_ABI = contracts_1.NZIP_CONTRACT_ABI;
|
|
69
16
|
/**
|
|
70
17
|
* Browser-compatible token verification class
|
|
71
18
|
*/
|
|
72
19
|
class TokenVerifierBrowser {
|
|
73
|
-
constructor(
|
|
74
|
-
this.
|
|
20
|
+
constructor(zipkit) {
|
|
21
|
+
this.zipkit = zipkit;
|
|
75
22
|
}
|
|
76
23
|
/**
|
|
77
24
|
* Checks if the ZIP file contains NFT token metadata and verifies the merkle root
|
|
@@ -90,7 +37,7 @@ class TokenVerifierBrowser {
|
|
|
90
37
|
}
|
|
91
38
|
try {
|
|
92
39
|
// Extract the token metadata
|
|
93
|
-
const tokenData = await this.
|
|
40
|
+
const tokenData = await this.zipkit.extractBlob(tokenEntry);
|
|
94
41
|
if (!tokenData) {
|
|
95
42
|
return {
|
|
96
43
|
isTokenized: false,
|
|
@@ -140,9 +87,14 @@ class TokenVerifierBrowser {
|
|
|
140
87
|
// Query blockchain for the actual merkle root and timestamp
|
|
141
88
|
const blockchainData = await this.queryBlockchainData(tokenMetadata);
|
|
142
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
|
+
};
|
|
143
95
|
return {
|
|
144
96
|
isTokenized: true,
|
|
145
|
-
tokenMetadata,
|
|
97
|
+
tokenMetadata: enhancedTokenMetadata,
|
|
146
98
|
calculatedMerkleRoot,
|
|
147
99
|
blockchainMerkleRoot: null,
|
|
148
100
|
blockchainTimestamp: blockchainData.timestamp ?? undefined,
|
|
@@ -150,15 +102,27 @@ class TokenVerifierBrowser {
|
|
|
150
102
|
errorMessage: 'Could not retrieve merkle root from blockchain'
|
|
151
103
|
};
|
|
152
104
|
}
|
|
153
|
-
|
|
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
|
+
};
|
|
154
118
|
return {
|
|
155
119
|
isTokenized: true,
|
|
156
|
-
tokenMetadata,
|
|
120
|
+
tokenMetadata: enhancedTokenMetadata,
|
|
157
121
|
calculatedMerkleRoot,
|
|
158
122
|
blockchainMerkleRoot: blockchainData.merkleRoot,
|
|
159
123
|
blockchainTimestamp: blockchainData.timestamp ?? undefined,
|
|
160
124
|
verificationPassed,
|
|
161
|
-
errorMessage: verificationPassed ? undefined :
|
|
125
|
+
errorMessage: verificationPassed ? undefined : `Merkle root mismatch - Calculated: ${calculatedMerkleRoot}, Blockchain: ${blockchainData.merkleRoot}`
|
|
162
126
|
};
|
|
163
127
|
}
|
|
164
128
|
catch (error) {
|
|
@@ -184,7 +148,6 @@ class TokenVerifierBrowser {
|
|
|
184
148
|
typeof tokenMetadata.networkChainId === 'number' &&
|
|
185
149
|
typeof tokenMetadata.transactionHash === 'string' &&
|
|
186
150
|
typeof tokenMetadata.merkleRoot === 'string' &&
|
|
187
|
-
typeof tokenMetadata.fileName === 'string' &&
|
|
188
151
|
typeof tokenMetadata.mintedAt === 'string';
|
|
189
152
|
}
|
|
190
153
|
/**
|
|
@@ -195,66 +158,116 @@ class TokenVerifierBrowser {
|
|
|
195
158
|
// Get all entries except the token file
|
|
196
159
|
const contentEntries = zipEntries.filter(entry => entry.filename !== Headers_1.TOKENIZED_METADATA);
|
|
197
160
|
if (contentEntries.length === 0) {
|
|
161
|
+
console.error(`[TokenVerifier] ❌ No content entries found after filtering`);
|
|
198
162
|
return null;
|
|
199
163
|
}
|
|
200
164
|
// For each content entry, ensure we have SHA-256 hash calculated
|
|
201
165
|
for (const entry of contentEntries) {
|
|
202
166
|
if (!entry.sha256) {
|
|
203
167
|
// Extract the file to calculate its SHA-256 hash
|
|
204
|
-
await this.
|
|
168
|
+
await this.zipkit.extractBlob(entry);
|
|
205
169
|
}
|
|
206
170
|
}
|
|
207
171
|
// Calculate merkle root from content files
|
|
208
|
-
//
|
|
209
|
-
|
|
210
|
-
|
|
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;
|
|
211
178
|
}
|
|
212
179
|
catch (error) {
|
|
213
|
-
console.error(
|
|
180
|
+
console.error(`[TokenVerifier] ❌ Error calculating merkle root:`, error);
|
|
214
181
|
return null;
|
|
215
182
|
}
|
|
216
183
|
}
|
|
217
184
|
/**
|
|
218
|
-
* Queries the blockchain to get the actual merkle root and
|
|
185
|
+
* Queries the blockchain to get the actual merkle root, timestamp, and owner stored in the smart contract
|
|
219
186
|
*/
|
|
220
187
|
async queryBlockchainData(tokenMetadata) {
|
|
221
188
|
try {
|
|
222
|
-
//
|
|
223
|
-
|
|
224
|
-
|
|
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);
|
|
225
195
|
if (!networkConfig) {
|
|
226
|
-
console.
|
|
227
|
-
return { merkleRoot: null, timestamp: null };
|
|
196
|
+
console.error(`[TokenVerifier] ❌ Could not resolve network configuration for chainId: ${tokenMetadata.networkChainId}`);
|
|
197
|
+
return { merkleRoot: null, timestamp: null, owner: null };
|
|
228
198
|
}
|
|
229
|
-
//
|
|
199
|
+
// Test RPC endpoints first to find working ones (same as server-side)
|
|
200
|
+
const workingRpcUrls = [];
|
|
230
201
|
for (const rpcUrl of networkConfig.rpcUrls) {
|
|
231
202
|
try {
|
|
232
|
-
const
|
|
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);
|
|
233
243
|
// Test connection with a timeout
|
|
234
|
-
|
|
244
|
+
await Promise.race([
|
|
235
245
|
provider.getBlockNumber(),
|
|
236
246
|
new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 5000))
|
|
237
247
|
]);
|
|
238
248
|
// Create contract instance
|
|
239
|
-
const contract = new ethers.Contract(tokenMetadata.contractAddress, CONTRACT_ABI, provider);
|
|
249
|
+
const contract = new ethers_1.ethers.Contract(tokenMetadata.contractAddress, CONTRACT_ABI, provider);
|
|
240
250
|
// Call getZipFileInfo to get the blockchain-stored data
|
|
241
251
|
const zipInfo = await contract.getZipFileInfo(tokenMetadata.tokenId);
|
|
252
|
+
// Get the token owner
|
|
253
|
+
const owner = await contract.ownerOf(tokenMetadata.tokenId);
|
|
242
254
|
return {
|
|
243
255
|
merkleRoot: zipInfo.merkleRootHash,
|
|
244
|
-
timestamp: Number(zipInfo.tokenizationTime)
|
|
256
|
+
timestamp: Number(zipInfo.tokenizationTime),
|
|
257
|
+
owner: owner
|
|
245
258
|
};
|
|
246
259
|
}
|
|
247
260
|
catch (error) {
|
|
248
|
-
|
|
261
|
+
// Continue to next endpoint on error
|
|
249
262
|
continue;
|
|
250
263
|
}
|
|
251
264
|
}
|
|
252
|
-
console.
|
|
253
|
-
return { merkleRoot: null, timestamp: null };
|
|
265
|
+
console.error(`[TokenVerifier] ❌ All RPC endpoints failed for network: ${tokenMetadata.network}`);
|
|
266
|
+
return { merkleRoot: null, timestamp: null, owner: null };
|
|
254
267
|
}
|
|
255
268
|
catch (error) {
|
|
256
|
-
console.error(
|
|
257
|
-
return { merkleRoot: null, timestamp: null };
|
|
269
|
+
console.error(`[TokenVerifier] ❌ Blockchain query error:`, error?.message || error);
|
|
270
|
+
return { merkleRoot: null, timestamp: null, owner: null };
|
|
258
271
|
}
|
|
259
272
|
}
|
|
260
273
|
/**
|
|
@@ -278,8 +291,8 @@ class TokenVerifierBrowser {
|
|
|
278
291
|
Network: ${tokenMetadata.network}
|
|
279
292
|
Contract: ${tokenMetadata.contractAddress}
|
|
280
293
|
Transaction: ${tokenMetadata.transactionHash}
|
|
281
|
-
|
|
282
|
-
Minted: ${new Date(tokenMetadata.mintedAt).toLocaleString()}
|
|
294
|
+
Type: Tokenized Archive
|
|
295
|
+
Minted: ${tokenMetadata.mintedAt ? new Date(tokenMetadata.mintedAt).toLocaleString() : 'Unknown'}
|
|
283
296
|
`;
|
|
284
297
|
}
|
|
285
298
|
}
|
|
@@ -287,13 +300,14 @@ exports.TokenVerifierBrowser = TokenVerifierBrowser;
|
|
|
287
300
|
/**
|
|
288
301
|
* Creates a new TokenVerifierBrowser instance
|
|
289
302
|
*/
|
|
290
|
-
function createTokenVerifier(
|
|
291
|
-
return new TokenVerifierBrowser(
|
|
303
|
+
function createTokenVerifier(zipkit) {
|
|
304
|
+
return new TokenVerifierBrowser(zipkit);
|
|
292
305
|
}
|
|
293
306
|
/**
|
|
294
307
|
* Convenience function to check for tokenization
|
|
295
308
|
*/
|
|
296
|
-
async function checkForTokenization(
|
|
297
|
-
const verifier = new TokenVerifierBrowser(
|
|
309
|
+
async function checkForTokenization(zipkit, zipEntries, options = {}) {
|
|
310
|
+
const verifier = new TokenVerifierBrowser(zipkit);
|
|
298
311
|
return verifier.checkForTokenization(zipEntries, options);
|
|
299
312
|
}
|
|
313
|
+
//# sourceMappingURL=TokenVerifierBrowser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenVerifierBrowser.js","sourceRoot":"","sources":["../../../src/blockchain/browser/TokenVerifierBrowser.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|