Files
LexiChain/lib/services/blockchain.types.ts
2026-04-22 11:04:59 +01:00

62 lines
2.1 KiB
TypeScript

// ═══════════════════════════════════════════════════════════════
// Blockchain Types
// ═══════════════════════════════════════════════════════════════
// TypeScript interfaces for all blockchain-related data structures
// used across the service layer, server actions, and UI components.
// ═══════════════════════════════════════════════════════════════
/**
* Represents the on-chain proof data for a registered document.
* This is what gets stored in PostgreSQL after a successful blockchain tx.
*/
export interface BlockchainProof {
documentHash: string;
txHash: string;
blockNumber: number;
blockTimestamp: Date;
network: "hardhat" | "sepolia";
contractAddress: string;
explorerUrl: string | null; // Sepolia etherscan link (null for hardhat)
}
/**
* Result of verifying a document hash on-chain.
*/
export interface BlockchainVerification {
exists: boolean;
timestamp: number; // Unix timestamp (seconds)
depositor: string; // Ethereum address
}
/**
* Serialized blockchain transaction for frontend display.
* All dates are ISO strings for safe JSON serialization across server/client.
*/
export interface BlockchainTransactionView {
id: string;
contractId: string;
contractTitle: string | null;
contractFileName: string;
documentHash: string;
txHash: string;
blockNumber: number;
blockTimestamp: string; // ISO string
network: string;
contractAddress: string;
status: string;
createdAt: string; // ISO string
explorerUrl: string | null;
}
/**
* Stats displayed at the top of the blockchain explorer page.
*/
export interface BlockchainStats {
totalVerified: number;
latestBlockNumber: number | null;
networkName: string;
networkStatus: "connected" | "disconnected";
walletAddress: string;
chainId?: number;
}