neozipkit 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +410 -186
- package/contracts/ABI.txt +889 -0
- package/contracts/Bytecode.txt +1 -0
- package/contracts/COMPILATION_NOTES.md +59 -0
- package/contracts/QUICK_DEPLOY.md +286 -0
- package/contracts/README.md +235 -131
- package/contracts/VERIFICATION.md +308 -0
- package/contracts/deploy-interactive.js +448 -0
- package/contracts/deployment-arbitrum-sepolia.json +12 -0
- package/contracts/deployment-arbitrum.json +12 -0
- package/contracts/deployment-eth-sepolia.json +12 -0
- package/contracts/hardhat.config.js +114 -0
- package/contracts/package.json +20 -0
- package/contracts/scripts/compile-and-extract.js +119 -0
- package/contracts/scripts/verify-contract.js +223 -0
- package/contracts/src/{NZIP-NFT-Private.sol → NZIP-NFT-v2.0.sol} +66 -151
- package/contracts/src/NZIP-NFT.sol +9 -15
- package/dist/blockchain/browser/TokenVerifierBrowser.d.ts +67 -0
- package/dist/blockchain/browser/TokenVerifierBrowser.d.ts.map +1 -0
- package/dist/blockchain/browser/TokenVerifierBrowser.js +313 -0
- package/dist/blockchain/browser/TokenVerifierBrowser.js.map +1 -0
- package/dist/blockchain/browser/WalletManagerBrowser.d.ts +98 -0
- package/dist/blockchain/browser/WalletManagerBrowser.d.ts.map +1 -0
- package/dist/blockchain/browser/WalletManagerBrowser.js +434 -0
- package/dist/blockchain/browser/WalletManagerBrowser.js.map +1 -0
- package/dist/blockchain/browser/ZipkitMinterBrowser.d.ts +58 -0
- package/dist/blockchain/browser/ZipkitMinterBrowser.d.ts.map +1 -0
- package/dist/blockchain/browser/ZipkitMinterBrowser.js +317 -0
- package/dist/blockchain/browser/ZipkitMinterBrowser.js.map +1 -0
- package/dist/blockchain/browser/index.d.ts +11 -0
- package/dist/blockchain/browser/index.d.ts.map +1 -0
- package/dist/blockchain/browser/index.js +16 -0
- package/dist/blockchain/browser/index.js.map +1 -0
- package/dist/blockchain/core/WalletManager.d.ts +124 -0
- package/dist/blockchain/core/WalletManager.d.ts.map +1 -0
- package/dist/blockchain/{ZipKitWallet.js → core/WalletManager.js} +157 -177
- package/dist/blockchain/core/WalletManager.js.map +1 -0
- package/dist/blockchain/{ZipKitMinter.d.ts → core/ZipkitMinter.d.ts} +46 -11
- package/dist/blockchain/core/ZipkitMinter.d.ts.map +1 -0
- package/dist/blockchain/core/ZipkitMinter.js +548 -0
- package/dist/blockchain/core/ZipkitMinter.js.map +1 -0
- package/dist/blockchain/{ZipKitOTS.d.ts → core/ZipkitOTS.d.ts} +6 -15
- package/dist/blockchain/core/ZipkitOTS.d.ts.map +1 -0
- package/dist/blockchain/{ZipKitOTS.js → core/ZipkitOTS.js} +26 -84
- package/dist/blockchain/core/ZipkitOTS.js.map +1 -0
- package/dist/blockchain/core/ZipkitVerifier.d.ts +177 -0
- package/dist/blockchain/core/ZipkitVerifier.d.ts.map +1 -0
- package/dist/blockchain/core/ZipkitVerifier.js +632 -0
- package/dist/blockchain/core/ZipkitVerifier.js.map +1 -0
- package/dist/blockchain/core/contracts.d.ts +83 -0
- package/dist/blockchain/core/contracts.d.ts.map +1 -0
- package/dist/blockchain/core/contracts.js +341 -0
- package/dist/blockchain/core/contracts.js.map +1 -0
- package/dist/blockchain/core/index.d.ts +12 -0
- package/dist/blockchain/core/index.d.ts.map +1 -0
- package/dist/blockchain/core/index.js +59 -0
- package/dist/blockchain/core/index.js.map +1 -0
- package/dist/blockchain/index.d.ts +11 -7
- package/dist/blockchain/index.d.ts.map +1 -0
- package/dist/blockchain/index.js +18 -34
- package/dist/blockchain/index.js.map +1 -0
- package/dist/blockchain/node/WalletManagerNode.d.ts +47 -0
- package/dist/blockchain/node/WalletManagerNode.d.ts.map +1 -0
- package/dist/blockchain/node/WalletManagerNode.js +203 -0
- package/dist/blockchain/node/WalletManagerNode.js.map +1 -0
- package/dist/blockchain/node/index.d.ts +12 -0
- package/dist/blockchain/node/index.d.ts.map +1 -0
- package/dist/blockchain/node/index.js +24 -0
- package/dist/blockchain/node/index.js.map +1 -0
- package/dist/browser/ZipkitBrowser.d.ts +27 -0
- package/dist/browser/ZipkitBrowser.d.ts.map +1 -0
- package/dist/browser/{ZipKitBrowser.js → ZipkitBrowser.js} +96 -43
- package/dist/browser/ZipkitBrowser.js.map +1 -0
- package/dist/browser/index.d.ts +12 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +42 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser-esm/index.d.ts +12 -0
- package/dist/browser-esm/index.js +59559 -0
- package/dist/browser-esm/index.js.map +7 -0
- package/dist/browser-umd/index.d.ts +12 -0
- package/dist/browser-umd/index.js +59576 -0
- package/dist/browser-umd/index.js.map +7 -0
- package/dist/browser-umd/index.min.js +63 -0
- package/dist/browser.d.ts +8 -14
- package/dist/browser.js +13 -28
- package/dist/core/ZipCompress.d.ts +99 -0
- package/dist/core/ZipCompress.d.ts.map +1 -0
- package/dist/core/ZipCompress.js +309 -0
- package/dist/core/ZipCompress.js.map +1 -0
- package/dist/core/ZipDecompress.d.ts +58 -0
- package/dist/core/ZipDecompress.d.ts.map +1 -0
- package/dist/core/ZipDecompress.js +172 -0
- package/dist/core/ZipDecompress.js.map +1 -0
- package/dist/{shared → core}/ZipEntry.d.ts +8 -1
- package/dist/core/ZipEntry.d.ts.map +1 -0
- package/dist/{shared → core}/ZipEntry.js +225 -82
- package/dist/core/ZipEntry.js.map +1 -0
- package/dist/core/Zipkit.d.ts +315 -0
- package/dist/core/Zipkit.d.ts.map +1 -0
- package/dist/core/Zipkit.js +647 -0
- package/dist/core/Zipkit.js.map +1 -0
- package/dist/core/components/HashCalculator.d.ts +138 -0
- package/dist/core/components/HashCalculator.d.ts.map +1 -0
- package/dist/core/components/HashCalculator.js +360 -0
- package/dist/core/components/HashCalculator.js.map +1 -0
- package/dist/core/components/Logger.d.ts +73 -0
- package/dist/core/components/Logger.d.ts.map +1 -0
- package/dist/core/components/Logger.js +156 -0
- package/dist/core/components/Logger.js.map +1 -0
- package/dist/core/components/ProgressTracker.d.ts +43 -0
- package/dist/core/components/ProgressTracker.d.ts.map +1 -0
- package/dist/core/components/ProgressTracker.js +112 -0
- package/dist/core/components/ProgressTracker.js.map +1 -0
- package/dist/{shared → core}/components/Support.d.ts +1 -0
- package/dist/core/components/Support.d.ts.map +1 -0
- package/dist/{shared → core}/components/Support.js +1 -0
- package/dist/core/components/Support.js.map +1 -0
- package/dist/{shared → core}/components/Util.d.ts +7 -2
- package/dist/core/components/Util.d.ts.map +1 -0
- package/dist/{shared → core}/components/Util.js +14 -34
- package/dist/core/components/Util.js.map +1 -0
- package/dist/{shared → core}/constants/Errors.d.ts +1 -2
- package/dist/core/constants/Errors.d.ts.map +1 -0
- package/dist/{shared → core}/constants/Errors.js +1 -3
- package/dist/core/constants/Errors.js.map +1 -0
- package/dist/{shared → core}/constants/Headers.d.ts +3 -0
- package/dist/core/constants/Headers.d.ts.map +1 -0
- package/dist/{shared → core}/constants/Headers.js +20 -17
- package/dist/core/constants/Headers.js.map +1 -0
- package/dist/core/encryption/Manager.d.ts +58 -0
- package/dist/core/encryption/Manager.d.ts.map +1 -0
- package/dist/core/encryption/Manager.js +121 -0
- package/dist/core/encryption/Manager.js.map +1 -0
- package/dist/core/encryption/ZipCrypto.d.ts +172 -0
- package/dist/core/encryption/ZipCrypto.d.ts.map +1 -0
- package/dist/core/encryption/ZipCrypto.js +554 -0
- package/dist/core/encryption/ZipCrypto.js.map +1 -0
- package/dist/core/encryption/index.d.ts +9 -0
- package/dist/core/encryption/index.d.ts.map +1 -0
- package/dist/core/encryption/index.js +17 -0
- package/dist/core/encryption/index.js.map +1 -0
- package/dist/core/encryption/types.d.ts +29 -0
- package/dist/core/encryption/types.d.ts.map +1 -0
- package/dist/core/encryption/types.js +12 -0
- package/dist/core/encryption/types.js.map +1 -0
- package/dist/core/index.d.ts +24 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +57 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/version.d.ts +5 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +31 -0
- package/dist/core/version.js.map +1 -0
- package/dist/index.d.ts +8 -18
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -35
- package/dist/index.js.map +1 -0
- package/dist/node/ZipCompressNode.d.ts +123 -0
- package/dist/node/ZipCompressNode.d.ts.map +1 -0
- package/dist/node/ZipCompressNode.js +576 -0
- package/dist/node/ZipCompressNode.js.map +1 -0
- package/dist/node/ZipDecompressNode.d.ts +120 -0
- package/dist/node/ZipDecompressNode.d.ts.map +1 -0
- package/dist/node/ZipDecompressNode.js +461 -0
- package/dist/node/ZipDecompressNode.js.map +1 -0
- package/dist/node/ZipkitNode.d.ts +406 -0
- package/dist/node/ZipkitNode.d.ts.map +1 -0
- package/dist/node/ZipkitNode.js +1305 -0
- package/dist/node/ZipkitNode.js.map +1 -0
- package/dist/node/index.d.ts +26 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +65 -0
- package/dist/node/index.js.map +1 -0
- package/dist/types/index.d.ts +59 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +36 -1
- package/dist/types/index.js.map +1 -0
- package/examples/README.md +269 -0
- package/examples/blockchain-tokenize.ts +354 -0
- package/examples/create-zip.ts +172 -0
- package/examples/extract-zip.ts +158 -0
- package/examples/list-zip.ts +161 -0
- package/examples/test-files/data.json +116 -0
- package/examples/test-files/document.md +80 -0
- package/examples/test-files/document.txt +2 -0
- package/examples/test-files/file1.txt +48 -0
- package/examples/test-files/file2.txt +80 -0
- package/examples/tsconfig.json +44 -0
- package/examples/unzip-token.ts +491 -0
- package/examples/verify-tokenized-zip.ts +305 -0
- package/examples/zip-token.ts +604 -0
- package/package.json +108 -24
- package/src/blockchain/README.md +59 -66
- package/src/{browser/TokenVerifierBrowser.ts-remove → blockchain/browser/TokenVerifierBrowser.ts} +125 -79
- package/src/blockchain/browser/WalletManagerBrowser.ts +486 -0
- package/src/blockchain/browser/ZipkitMinterBrowser.ts +400 -0
- package/src/blockchain/browser/index.ts +13 -0
- package/src/blockchain/{ZipKitWallet.ts → core/WalletManager.ts} +241 -143
- package/src/blockchain/core/ZipkitMinter.ts +716 -0
- package/src/blockchain/{ZipKitOTS.ts → core/ZipkitOTS.ts} +28 -62
- package/src/blockchain/core/ZipkitVerifier.ts +853 -0
- package/src/blockchain/core/contracts.ts +370 -0
- package/src/blockchain/core/index.ts +71 -0
- package/src/blockchain/index.ts +21 -55
- package/src/blockchain/node/WalletManagerNode.ts +171 -0
- package/src/blockchain/node/index.ts +40 -0
- package/src/browser/{ZipKitBrowser.ts → ZipkitBrowser.ts} +104 -41
- package/src/browser/index.esm.ts +37 -0
- package/src/browser/index.ts +25 -0
- package/src/core/ZipCompress.ts +398 -0
- package/src/core/ZipDecompress.ts +212 -0
- package/src/{shared → core}/ZipEntry.ts +240 -90
- package/src/core/Zipkit.ts +794 -0
- package/src/core/components/HashCalculator.ts +384 -0
- package/src/core/components/Logger.ts +180 -0
- package/src/core/components/ProgressTracker.ts +134 -0
- package/src/{shared → core}/components/Util.ts +12 -34
- package/src/{shared → core}/constants/Errors.ts +0 -4
- package/src/{shared → core}/constants/Headers.ts +19 -17
- package/src/core/encryption/Manager.ts +137 -0
- package/src/core/encryption/ZipCrypto.ts +650 -0
- package/src/core/encryption/index.ts +15 -0
- package/src/core/encryption/types.ts +33 -0
- package/src/core/index.ts +34 -0
- package/src/core/version.ts +33 -0
- package/src/index.ts +54 -25
- package/src/node/ZipCompressNode.ts +632 -0
- package/src/node/ZipDecompressNode.ts +508 -0
- package/src/node/ZipkitNode.ts +1559 -0
- package/src/node/index.ts +69 -0
- package/src/types/index.ts +131 -1
- package/src/types/modules.d.ts +1 -11
- package/src/types/opentimestamps.d.ts +1 -23
- package/contracts/INTEGRATION.md +0 -338
- package/contracts/NETWORKS.md +0 -156
- package/contracts/NZIP-NFT-bytecode.txt +0 -1
- package/contracts/constants.ts +0 -952
- package/contracts/deploy-bytecode.mjs +0 -94
- package/dist/blockchain/CertificateToken.d.ts +0 -48
- package/dist/blockchain/CertificateToken.js +0 -386
- package/dist/blockchain/ZipKitMinter.js +0 -347
- package/dist/blockchain/ZipKitNFT.d.ts +0 -3
- package/dist/blockchain/ZipKitNFT.js +0 -7
- package/dist/blockchain/ZipKitVerifier.d.ts +0 -69
- package/dist/blockchain/ZipKitVerifier.js +0 -289
- package/dist/blockchain/ZipKitWallet.d.ts +0 -69
- package/dist/blockchain/contracts.d.ts +0 -14
- package/dist/blockchain/contracts.js +0 -77
- package/dist/blockchain/types.d.ts +0 -47
- package/dist/blockchain/types.js +0 -30
- package/dist/browser/ZipKitBrowser.d.ts +0 -18
- package/dist/browser/ZipKitStampBrowser.d.ts +0 -2
- package/dist/browser/ZipKitStampBrowser.js +0 -12
- package/dist/browser-index.d.ts +0 -18
- package/dist/browser-index.js +0 -57
- package/dist/server/ZipKitServer.d.ts +0 -74
- package/dist/server/ZipKitServer.js +0 -310
- package/dist/shared/ZipKit.d.ts +0 -243
- package/dist/shared/ZipKit.js +0 -772
- package/dist/shared/components/CertificateOTS.d.ts +0 -15
- package/dist/shared/components/CertificateOTS.js +0 -116
- package/dist/shared/components/FileSys.d.ts +0 -2
- package/dist/shared/components/FileSys.js +0 -113
- package/dist/shared/components/HashAccumulator.d.ts +0 -55
- package/dist/shared/components/HashAccumulator.js +0 -100
- package/dist/shared/components/ZipCrypto.d.ts +0 -3
- package/dist/shared/components/ZipCrypto.js +0 -78
- package/dist/shared/components/merkleTree.d.ts +0 -66
- package/dist/shared/components/merkleTree.js +0 -136
- package/dist/shared/types/index.d.ts +0 -21
- package/dist/shared/types/index.js +0 -3
- package/dist/shared/types.d.ts +0 -33
- package/dist/shared/types.js +0 -8
- package/dist/shared/version.d.ts +0 -2
- package/dist/shared/version.js +0 -6
- package/src/blockchain/CertificateToken.ts +0 -444
- package/src/blockchain/ZipKitMinter.ts +0 -470
- package/src/blockchain/ZipKitNFT.ts +0 -12
- package/src/blockchain/ZipKitVerifier.ts +0 -382
- package/src/blockchain/contracts.ts +0 -88
- package/src/blockchain/types.ts +0 -91
- package/src/browser/CertificateGeneratorBrowser.ts-remove +0 -498
- package/src/browser/ZipKitStampBrowser.ts +0 -9
- package/src/browser-index.ts +0 -36
- package/src/server/README.md +0 -25
- package/src/server/ZipKitServer.ts +0 -305
- package/src/shared/ZipKit.ts +0 -881
- package/src/shared/components/CertificateOTS.ts +0 -132
- package/src/shared/components/FileSys.ts +0 -87
- package/src/shared/components/HashAccumulator.ts +0 -113
- package/src/shared/components/ZipCrypto.ts +0 -91
- package/src/shared/components/merkleTree.ts +0 -162
- package/src/shared/types/index.ts +0 -25
- package/src/shared/types/modules.d.ts +0 -22
- package/src/shared/types/opentimestamps.d.ts +0 -23
- package/src/shared/types.d.ts +0 -8
- package/src/shared/types.ts +0 -43
- package/src/shared/version.ts +0 -3
- /package/src/{shared → core}/components/Support.ts +0 -0
|
@@ -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,
|
|
@@ -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":"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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"}
|