first commit
This commit is contained in:
commit
c9fb67e751
423 files changed
+53287
No files matched your search
@@ -0,0 +1,73 @@
|
||||
import OpenTimestamps from 'opentimestamps-javascript'; // Atualizar import
|
||||
import { createHash } from 'crypto';
|
||||
import * as fs from 'fs/promises';
|
||||
import * as path from 'path';
|
||||
|
||||
export class BlockchainService {
|
||||
private readonly storageDir: string;
|
||||
|
||||
constructor() {
|
||||
this.storageDir = path.join(process.cwd(), 'storage', 'timestamps');
|
||||
this.ensureStorageDir();
|
||||
}
|
||||
|
||||
private async ensureStorageDir() {
|
||||
try {
|
||||
await fs.mkdir(this.storageDir, { recursive: true });
|
||||
} catch (error) {
|
||||
console.error('Erro ao criar diretório de timestamps:', error);
|
||||
}
|
||||
}
|
||||
|
||||
async createTimestamp(buffer: Buffer) {
|
||||
try {
|
||||
// 1. Criar hash do arquivo
|
||||
const fileHash = createHash('sha256').update(buffer).digest();
|
||||
|
||||
// 2. Criar timestamp
|
||||
const timestamp = await OpenTimestamps.stamp(fileHash);
|
||||
|
||||
// 3. Salvar arquivo .ots
|
||||
const otsPath = path.join(this.storageDir, `${fileHash.toString('hex')}.ots`);
|
||||
await fs.writeFile(otsPath, Buffer.from(timestamp));
|
||||
|
||||
return {
|
||||
hash: fileHash.toString('hex'),
|
||||
timestamp,
|
||||
otsPath
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Erro ao criar timestamp:', error);
|
||||
throw new Error('Falha ao criar timestamp na blockchain');
|
||||
}
|
||||
}
|
||||
|
||||
async verifyTimestamp(hash: string, timestamp: Buffer) {
|
||||
try {
|
||||
// Usar a API correta do OpenTimestamps
|
||||
const result = await OpenTimestamps.verify(
|
||||
Buffer.from(timestamp),
|
||||
Buffer.from(hash, 'hex')
|
||||
);
|
||||
|
||||
if (!result) {
|
||||
return {
|
||||
verified: false,
|
||||
message: 'Timestamp ainda não confirmado na blockchain'
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
verified: true,
|
||||
timestamp: new Date(result * 1000),
|
||||
message: 'Timestamp verificado na blockchain do Bitcoin'
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Erro ao verificar timestamp:', error);
|
||||
return {
|
||||
verified: false,
|
||||
message: 'Erro ao verificar timestamp'
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user