Files
makemd/server/src/core/security/ProofOfComputationService.ts

67 lines
1.9 KiB
TypeScript
Raw Normal View History

import { logger } from '../../utils/logger';
import * as crypto from 'crypto';
export interface ComputationProof {
proofId: string;
nodeId: string;
timestamp: number;
inputHash: string;
outputHash: string;
zkpPayload: string; // 模拟 ZKP 证明
}
/**
* [CORE_SEC_14] (Proof of Computation)
* @description TEE
*/
export class ProofOfComputationService {
private static proofChain: ComputationProof[] = [];
/**
*
* @param input
* @param output
* @param nodeId ID
*/
static generateProof(input: any, output: any, nodeId: string): ComputationProof {
logger.info(`[PoC] Generating computation proof for node: ${nodeId}`);
const inputHash = crypto.createHash('sha256').update(JSON.stringify(input)).digest('hex');
const outputHash = crypto.createHash('sha256').update(JSON.stringify(output)).digest('hex');
const proof: ComputationProof = {
proofId: `poc-${Date.now()}-${Math.random().toString(36).substr(2, 5)}`,
nodeId,
timestamp: Date.now(),
inputHash,
outputHash,
zkpPayload: `zkp_signature_${crypto.randomBytes(16).toString('hex')}`
};
this.proofChain.push(proof);
return proof;
}
/**
*
*/
static async verifyProof(proof: ComputationProof): Promise<boolean> {
logger.debug(`[PoC] Verifying computation proof: ${proof.proofId}`);
// 1. 模拟 ZKP 校验
const isZkpValid = proof.zkpPayload.startsWith('zkp_signature_');
// 2. 模拟节点身份校验 (NodeIdentityService)
const isNodeTrusted = true;
return isZkpValid && isNodeTrusted;
}
/**
*
*/
static getProofHistory(): ComputationProof[] {
return this.proofChain;
}
}