archon.audit.report
100.0
1,000,000 free RPC requestsJust a wallet, via x402.
Start buildingFor agent 97 on Mantle Mainnet · 2026-06-15
https://archonaudit.xyz/app/proofs
{
"chain": {
"name": "Mantle Mainnet",
"chainId": 5000
},
"report": {
"id": "bb8765ff-11b3-40ff-976e-223c77afbd56",
"scope": {
"pragma": "0.8.24",
"network": "mantle-mainnet",
"lineCount": 159,
"protocols": [
"mETH",
"cmETH",
"USDY",
"Aave V3",
"Merchant Moe",
"Agni"
],
"sourceKind": "paste",
"aiReasoning": {
"hits": 23,
"total": 23,
"misses": 0,
"batches": 0,
"skipped": 0,
"provider": "openai",
"timeoutMs": 75000,
"fallbackCount": 0
},
"reducedMode": null,
"solcVersion": "0.8.24",
"gasOptimizer": {
"pricing": {
"mode": "calibrated-receipts",
"pricedAt": "2026-06-15T21:37:58.476Z",
"l2GasPriceWei": "50000100000",
"deployDataFeeMnt": "0.026320239346116316",
"deployDataFeeWei": "26320239346116316",
"calldataZeroBytes": 72,
"calibrationErrorPct": 0,
"calldataGasEstimate": 118160,
"calldataNonZeroBytes": 7367,
"creationBytecodeBytes": 7439
},
"daPricing": {
"model": {
"mode": "calibrated-receipts",
"samples": [
{
"txHash": "0x82d99588e5f1bff33d618743025d598445493032637de25844a67aa8e88088ef",
"l1FeeWei": "699231354481640",
"l1GasUsed": "2530",
"zeroBytes": 135,
"l1GasPrice": "538782662",
"totalBytes": 228,
"blobGasUsed": "63200",
"blockNumber": "96205628",
"nonZeroBytes": 93,
"l1BlobBaseFee": "330004069609410902",
"l1BaseFeeScalar": "169019",
"operatorFeeScalar": "100000000",
"calldataGasEstimate": 2028,
"l1BlobBaseFeeScalar": "0",
"operatorFeeConstant": "0",
"daFootprintGasScalar": "400"
},
{
"txHash": "0xb9ce87de86b212b91eb64012bbdab91014373da1f6d960470b340e1991a1a7c5",
"l1FeeWei": "6874261528561290",
"l1GasUsed": "22258",
"zeroBytes": 28,
"l1GasPrice": "603039864",
"totalBytes": 1945,
"blobGasUsed": "556400",
"blockNumber": "96205472",
"nonZeroBytes": 1917,
"l1BlobBaseFee": "321479049246759320",
"l1BaseFeeScalar": "169019",
"operatorFeeScalar": "100000000",
"calldataGasEstimate": 30784,
"l1BlobBaseFeeScalar": "0",
"operatorFeeConstant": "0",
"daFootprintGasScalar": "400"
}
],
"validation": [
{
"txHash": "0x82d99588e5f1bff33d618743025d598445493032637de25844a67aa8e88088ef",
"errorPct": 0,
"actualL1FeeWei": "699231354481640",
"predictedL1FeeWei": "699231354481572"
},
{
"txHash": "0xb9ce87de86b212b91eb64012bbdab91014373da1f6d960470b340e1991a1a7c5",
"errorPct": 0,
"actualL1FeeWei": "6874261528561290",
"predictedL1FeeWei": "6874261528560500"
}
],
"sampleCount": 2,
"zeroByteFeeWei": "2736708878864",
"nonZeroByteFeeWei": "3545974793924",
"maxValidationErrorPct": 0,
"meanValidationErrorPct": 0
},
"source": "receipt-calibrated",
"groundTruthField": "l1Fee"
},
"sourceHash": "0x3338826f3e755620a44acda7698cc338657094419b257ac3416e9de2649f3137",
"measurement": {
"forge": {
"ok": false,
"error": "Command failed: forge test --gas-report --root /tmp/archon-gas-measure-74jlCT\nError: Compiler run failed:\nError (6275): Source \"@openzeppelin/contracts/token/ERC721/ERC721.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-74jlCT\".\nParserError: Source \"@openzeppelin/contracts/token/ERC721/ERC721.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-74jlCT\".\n --> src/decoupled_Suite__3_contracts_.sol:4:1:\n |\n4 | import {ERC721} from \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nError (6275): Source \"@openzeppelin/contracts/access/Ownable.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-74jlCT\".\nParserError: Source \"@openzeppelin/contracts/access/Ownable.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-74jlCT\".\n --> src/decoupled_Suite__3_contracts_.sol:5:1:\n |\n5 | import {Ownable} from \"@openzeppelin/contracts/access/Ownable.sol\";\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nError (6275): Source \"forge-std/Test.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-74jlCT\".\nParserError: Source \"forge-std/Test.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-74jlCT\".\n --> test/decoupled_Suite__3_contracts_.t.sol:4:1:\n |\n4 | import {Test} from \"forge-std/Test.sol\";\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
"command": "forge test --gas-report",
"attempted": true,
"gasReport": null
},
"source": "deterministic-estimate",
"status": "degraded",
"patches": [
{
"note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
"after": "error AURALISZeroOperator(); … if (!(condition)) revert AURALISZeroOperator();",
"before": "require(operator != address(0), \"AURALIS: zero operator\");",
"ruleId": "custom-errors",
"safety": "safe",
"status": "estimated",
"l2GasDelta": 120,
"l1DaDeltaWei": null
},
{
"note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
"after": "error AURALISEmptyName(); … if (!(condition)) revert AURALISEmptyName();",
"before": "require(bytes(name).length != 0, \"AURALIS: empty name\");",
"ruleId": "custom-errors",
"safety": "safe",
"status": "estimated",
"l2GasDelta": 120,
"l1DaDeltaWei": null
},
{
"note": "Review-only patch is not auto-applied for measurement.",
"after": "uint256 cached = _tokenURIs[tokenId]; // reuse cached value",
"before": "_tokenURIs[tokenId] read 3 times",
"ruleId": "cache-repeated-sload",
"safety": "review",
"status": "skipped",
"l2GasDelta": 200,
"l1DaDeltaWei": null
},
{
"note": "Review-only patch is not auto-applied for measurement.",
"after": "uint256 cached = agents[tokenId]; // reuse cached value",
"before": "agents[tokenId] read 3 times",
"ruleId": "cache-repeated-sload",
"safety": "review",
"status": "skipped",
"l2GasDelta": 200,
"l1DaDeltaWei": null
},
{
"note": "Review-only patch is not auto-applied for measurement.",
"after": "mapping(uint256 => uint256) bitmap; // pack 256 flags per slot",
"before": "mapping(address => bool) public approvedMinters;",
"ruleId": "bitmap-bools",
"safety": "review",
"status": "skipped",
"l2GasDelta": 20000,
"l1DaDeltaWei": null
}
],
"version": "archon.gasMeasurement.v1",
"measuredAt": "2026-06-11T19:51:40.289Z",
"rulesetHash": "cf887ab2946daf6aeb1463a693d04dd599555d55f8d68120e1de171d344f1b15",
"contractHash": "3338826f3e755620a44acda7698cc338657094419b257ac3416e9de2649f3137"
},
"opportunities": [
{
"id": "custom-errors",
"file": "AuralisAgentRegistry.sol",
"after": "error AURALISZeroOperator(); … if (!(condition)) revert AURALISZeroOperator();",
"patch": {
"newText": " if (!(operator != address(0))) revert AURALISZeroOperator();",
"oldText": " require(operator != address(0), \"AURALIS: zero operator\");"
},
"title": "Replace long revert string with custom error",
"where": "AuralisAgentRegistry.sol:93",
"before": "require(operator != address(0), \"AURALIS: zero operator\");",
"safety": "safe",
"newText": " if (!(operator != address(0))) revert AURALISZeroOperator();",
"oldText": " require(operator != address(0), \"AURALIS: zero operator\");",
"category": "deployment",
"severity": "info",
"lineStart": 93,
"rationale": "Custom errors reduce deployment bytecode and revert-path gas while preserving typed failure semantics.",
"confidence": 0.9,
"estL1Delta": 22,
"estL2Delta": 120,
"annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
"estimatedGasSaved": 120,
"estimatedDataBytesSaved": 22
},
{
"id": "custom-errors",
"file": "AuralisAgentRegistry.sol",
"after": "error AURALISEmptyName(); … if (!(condition)) revert AURALISEmptyName();",
"patch": {
"newText": " if (!(bytes(name).length != 0)) revert AURALISEmptyName();",
"oldText": " require(bytes(name).length != 0, \"AURALIS: empty name\");"
},
"title": "Replace long revert string with custom error",
"where": "AuralisAgentRegistry.sol:94",
"before": "require(bytes(name).length != 0, \"AURALIS: empty name\");",
"safety": "safe",
"newText": " if (!(bytes(name).length != 0)) revert AURALISEmptyName();",
"oldText": " require(bytes(name).length != 0, \"AURALIS: empty name\");",
"category": "deployment",
"severity": "info",
"lineStart": 94,
"rationale": "Custom errors reduce deployment bytecode and revert-path gas while preserving typed failure semantics.",
"confidence": 0.9,
"estL1Delta": 19,
"estL2Delta": 120,
"annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
"estimatedGasSaved": 120,
"estimatedDataBytesSaved": 19
},
{
"id": "cache-repeated-sload",
"file": "AuralisAgentRegistry.sol",
"after": "uint256 cached = _tokenURIs[tokenId]; // reuse cached value",
"patch": {
"newText": "_tokenURIs[tokenId]",
"oldText": "_tokenURIs[tokenId]"
},
"title": "Cache repeated storage read",
"where": "AuralisAgentRegistry.sol:98",
"before": "_tokenURIs[tokenId] read 3 times",
"safety": "review",
"newText": "_tokenURIs[tokenId]",
"oldText": "_tokenURIs[tokenId]",
"category": "storage",
"severity": "info",
"lineStart": 98,
"rationale": "Repeated SLOADs should be cached in stack/memory when state cannot change between reads.",
"confidence": 0.7,
"estL1Delta": null,
"estL2Delta": 200,
"annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
"estimatedGasSaved": 200,
"estimatedDataBytesSaved": null
},
{
"id": "cache-repeated-sload",
"file": "AuralisAgentRegistry.sol",
"after": "uint256 cached = agents[tokenId]; // reuse cached value",
"patch": {
"newText": "agents[tokenId]",
"oldText": "agents[tokenId]"
},
"title": "Cache repeated storage read",
"where": "AuralisAgentRegistry.sol:99",
"before": "agents[tokenId] read 3 times",
"safety": "review",
"newText": "agents[tokenId]",
"oldText": "agents[tokenId]",
"category": "storage",
"severity": "info",
"lineStart": 99,
"rationale": "Repeated SLOADs should be cached in stack/memory when state cannot change between reads.",
"confidence": 0.7,
"estL1Delta": null,
"estL2Delta": 200,
"annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
"estimatedGasSaved": 200,
"estimatedDataBytesSaved": null
},
{
"id": "bitmap-bools",
"file": "AuralisAgentRegistry.sol",
"after": "mapping(uint256 => uint256) bitmap; // pack 256 flags per slot",
"patch": {
"newText": " mapping(address => bool) public approvedMinters; // REVIEW: high-volume bool flags can be bitmap-packed",
"oldText": " mapping(address => bool) public approvedMinters;"
},
"title": "Bitmap-pack boolean flags",
"where": "AuralisAgentRegistry.sol:37",
"before": "mapping(address => bool) public approvedMinters;",
"safety": "review",
"newText": " mapping(address => bool) public approvedMinters; // REVIEW: high-volume bool flags can be bitmap-packed",
"oldText": " mapping(address => bool) public approvedMinters;",
"category": "storage",
"severity": "medium",
"lineStart": 37,
"rationale": "Bitmap packing can reduce many boolean SSTOREs from one slot per flag to one slot per 256 flags.",
"confidence": 0.62,
"estL1Delta": null,
"estL2Delta": 20000,
"annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
"estimatedGasSaved": 20000,
"estimatedDataBytesSaved": null
}
]
}
},
"scanId": "b39827f8-fb3d-4166-9f9d-e0963646b865",
"createdAt": "2026-06-15T21:38:01.172Z",
"riskScore": 79,
"contractName": "AuralisAgentRegistry",
"severityCounts": {
"low": 3,
"high": 1,
"info": 17,
"medium": 2,
"critical": 0
},
"executiveSummary": "Archon completed a read-only Mantle Mainnet audit of AuralisAgentRegistry and found 23 deterministic findings. The highest-priority issue is Incorrect Exp, with risk score 79/100 based on severity-weighted findings. The function setActive allows unauthorized users to change the active state of agents. Review the recommended fixes and run regression tests before deployment."
},
"schema": "archon.proof.metadata.v1",
"erc8004": {
"verifiedConfig": true,
"agentIdentityRef": "eip155:5000:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432:97",
"identityRegistry": "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
"reputationRegistry": "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63",
"validationRegistry": null
},
"product": "Archon",
"findings": [
{
"id": "cbc9a485-1d4b-4ee3-ad9d-af785b047249",
"title": "Incorrect Exp",
"category": "incorrect-exp",
"location": {
"file": "Math.sol",
"lineEnd": 202,
"lineStart": 123
},
"severity": "high"
},
{
"id": "ddae8672-d433-4e8f-a758-cdbc0acc99a4",
"title": "Divide Before Multiply",
"category": "divide-before-multiply",
"location": {
"file": "Math.sol",
"lineEnd": 202,
"lineStart": 123
},
"severity": "medium"
},
{
"id": "9f775d3a-42a5-4a2c-97df-f040a17f9a78",
"title": "Shadowing Local",
"category": "shadowing-local",
"location": {
"file": "AuralisAgentRegistry.sol",
"lineEnd": 89,
"lineStart": 89
},
"severity": "low"
},
{
"id": "04c3fedc-0de0-41d0-9af8-e847e9059a80",
"title": "Reentrancy Benign",
"category": "reentrancy-benign",
"location": {
"file": "AuralisAgentRegistry.sol",
"lineEnd": 108,
"lineStart": 87
},
"severity": "low"
},
{
"id": "2fe0503e-766d-4b5b-9cfc-d38a0193f382",
"title": "Reentrancy Events",
"category": "reentrancy-events",
"location": {
"file": "AuralisAgentRegistry.sol",
"lineEnd": 108,
"lineStart": 87
},
"severity": "low"
},
{
"id": "604afcc4-60d4-4743-b8af-95c1a80f42cf",
"title": "Assembly",
"category": "assembly",
"location": {
"file": "Strings.sol",
"lineEnd": 44,
"lineStart": 24
},
"severity": "info"
},
{
"id": "d8665616-6791-481b-bbdb-6f72b4760fd6",
"title": "Assembly",
"category": "assembly",
"location": {
"file": "Math.sol",
"lineEnd": 202,
"lineStart": 123
},
"severity": "info"
},
{
"id": "2445c8b0-8c82-43cf-89cd-5bad16682b1e",
"title": "Assembly",
"category": "assembly",
"location": {
"file": "ERC721.sol",
"lineEnd": 482,
"lineStart": 465
},
"severity": "info"
},
{
"id": "1337b017-c685-4c55-9b99-3c2314f2d792",
"title": "Pragma",
"category": "pragma",
"location": {
"file": "AuralisAgentRegistry.sol",
"lineEnd": 2,
"lineStart": 2
},
"severity": "info"
},
{
"id": "18e2957c-0624-4e52-8856-75a948a41fce",
"title": "Dead Code",
"category": "dead-code",
"location": {
"file": "Context.sol",
"lineEnd": 27,
"lineStart": 25
},
"severity": "info"
},
{
"id": "ce50390d-57c0-4cb7-ab08-c2e4dd41fef4",
"title": "Dead Code",
"category": "dead-code",
"location": {
"file": "ERC721.sol",
"lineEnd": 388,
"lineStart": 385
},
"severity": "info"
},
{
"id": "5384d05a-e2ba-4a61-9fec-94c43e2d2346",
"title": "Dead Code",
"category": "dead-code",
"location": {
"file": "ERC721.sol",
"lineEnd": 356,
"lineStart": 346
},
"severity": "info"
},
{
"id": "ab4991c2-46a7-4ad6-a5eb-c25367b05e3c",
"title": "Dead Code",
"category": "dead-code",
"location": {
"file": "ERC721.sol",
"lineEnd": 333,
"lineStart": 328
},
"severity": "info"
},
{
"id": "4cbf047a-b8ac-4e6c-8d8d-84c27858c5f2",
"title": "Dead Code",
"category": "dead-code",
"location": {
"file": "Context.sol",
"lineEnd": 23,
"lineStart": 21
},
"severity": "info"
},
{
"id": "760d6603-dbbf-44af-bfc2-0b8bef9c1f27",
"title": "Dead Code",
"category": "dead-code",
"location": {
"file": "ERC721.sol",
"lineEnd": 102,
"lineStart": 100
},
"severity": "info"
},
{
"id": "0a81726b-e365-4189-887d-7894633c4d17",
"title": "Dead Code",
"category": "dead-code",
"location": {
"file": "ERC721.sol",
"lineEnd": 379,
"lineStart": 377
},
"severity": "info"
},
{
"id": "ca1a2700-e6cf-4ba8-96af-c8690c07a60b",
"title": "Dead Code",
"category": "dead-code",
"location": {
"file": "ERC721.sol",
"lineEnd": 228,
"lineStart": 224
},
"severity": "info"
},
{
"id": "e045b7a4-d8b2-492f-932b-f7ad6ab07a76",
"title": "Solc Version",
"category": "solc-version",
"location": {
"file": "Ownable.sol",
"lineEnd": 4,
"lineStart": 4
},
"severity": "info"
},
{
"id": "a5d2828d-2db6-4b58-9f8d-d5aa57d09b75",
"title": "Replace long revert string with custom error",
"category": "mantle-gas-optimizer/deployment/custom-errors",
"location": {
"file": "AuralisAgentRegistry.sol",
"lineEnd": 93,
"lineStart": 93
},
"severity": "info"
},
{
"id": "6e36c961-cd39-4c33-a42f-665e43e4a2c5",
"title": "Replace long revert string with custom error",
"category": "mantle-gas-optimizer/deployment/custom-errors",
"location": {
"file": "AuralisAgentRegistry.sol",
"lineEnd": 94,
"lineStart": 94
},
"severity": "info"
},
{
"id": "b9341220-d88d-457f-b7d9-a376441a14e4",
"title": "Cache repeated storage read",
"category": "mantle-gas-optimizer/storage/cache-repeated-sload",
"location": {
"file": "AuralisAgentRegistry.sol",
"lineEnd": 98,
"lineStart": 98
},
"severity": "info"
},
{
"id": "44a0fa73-5a47-4e7b-a2e7-e452b6e609fb",
"title": "Cache repeated storage read",
"category": "mantle-gas-optimizer/storage/cache-repeated-sload",
"location": {
"file": "AuralisAgentRegistry.sol",
"lineEnd": 99,
"lineStart": 99
},
"severity": "info"
},
{
"id": "2e11286f-c1cc-43aa-942b-a42de27f7161",
"title": "Bitmap-pack boolean flags",
"category": "mantle-gas-optimizer/storage/bitmap-bools",
"location": {
"file": "AuralisAgentRegistry.sol",
"lineEnd": 37,
"lineStart": 37
},
"severity": "medium"
}
]
}
ipfs://QmSt2NuC345jpNs5XqMQst9xv6Cgc9jDTYqgfqs6fFGRA4