multi-agent-smart-contracts / tests /run-input-test.ts
Tales-Cunha
feat: Validated Implementation with Centrifuge Case
086d1ff
Raw
History Blame
2.59 kB
import { testerAgent } from "../src/agents/tester/agent.js";
import { Finding, VulnerabilityReport } from "../src/agents/tester/types.js";
import { readFileSync } from "fs";
function mapFindingToReport(finding: Finding, sourceCode: string): VulnerabilityReport {
const nameMatch = finding.path.match(/([^\/]+)\.sol$/);
const contractName = nameMatch ? nameMatch[1] : "TargetContract";
return {
id: finding.title.toLowerCase().replace(/[^a-z0-9]+/g, "-").slice(0, 50),
severity: finding.severity === "high" ? "high" : finding.severity === "medium" ? "medium" : "low",
type: "custom",
title: finding.title,
description: finding.description,
affectedContract: {
name: contractName,
sourceCode: sourceCode,
},
attackVector: finding.judgeReview.exploitablePaths[0] || "Unknown vector",
exploitablePaths: finding.judgeReview.exploitablePaths,
codeSnippet: finding.codeSnippet,
location: finding.location
};
}
async function main() {
const input = JSON.parse(readFileSync("src/agents/tester/data/input.json", "utf-8"));
// O Finding do auditor já tem o 'codeSnippet', mas para o Oracle precisamos do 'sourceCode' completo.
// Como não temos o repositório do coder aqui, vamos usar o codeSnippet envolto em um contrato mínimo
// ou assumir que o codeSnippet é representativo para o teste.
// Na vida real, o index.ts passa o coderResult.contract.
// Vamos criar um sourceCode fake que contém o snippet para testar o fluxo.
const fakeSourceCode = `
pragma solidity ^0.8.20;
contract CafeToken {
mapping(address => uint256) public balances;
event RewardRedeemed(address indexed user, uint256 amount, string recompensa);
function _burn(address account, uint256 amount) internal {
balances[account] -= amount;
}
function balanceOf(address account) public view returns (uint256) {
return balances[account];
}
function mint(address account, uint256 amount) public {
balances[account] += amount;
}
${input.codeSnippet}
}
`;
const report = mapFindingToReport(input, fakeSourceCode);
console.log("Iniciando execução do Agente Tester com input.json...");
const result = await testerAgent.invoke({ report });
console.log("\n======= Resultado =======");
console.log("Status Final:", result.status);
console.log("Iterações:", result.iterations);
if (result.lastError) console.log("Último Erro:", result.lastError);
console.log("\n======= Código Gerado =======");
console.log(result.pocCode);
}
main().catch(console.error);