1,000,000 free RPC requestsJust a wallet, via x402.

Start building
ERC-8004 Explorer by
Mantle Mainnet risk:79 verified

Feedback #1

For agent 97 on Mantle Mainnet · 2026-06-14

archon.audit.report
100.0

Off-chain feedback document

raw JSON
{
  "chain": {
    "name": "Mantle Mainnet",
    "chainId": 5000
  },
  "report": {
    "id": "5364195a-82c0-471a-a4af-76bc71345c88",
    "scope": {
      "pragma": "0.8.24",
      "network": "mantle-mainnet",
      "lineCount": 159,
      "protocols": [
        "mETH",
        "cmETH",
        "USDY",
        "Aave V3",
        "Merchant Moe",
        "Agni"
      ],
      "sourceKind": "paste",
      "aiReasoning": {
        "hits": 6,
        "total": 23,
        "misses": 17,
        "batches": 4,
        "reasons": {
          "schema": 3
        },
        "skipped": 0,
        "provider": "openai",
        "timeoutMs": 75000,
        "fallbackCount": 3
      },
      "reducedMode": null,
      "solcVersion": "0.8.24",
      "gasOptimizer": {
        "pricing": {
          "mode": "calibrated-receipts",
          "pricedAt": "2026-06-14T12:35:21.234Z",
          "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": "24025c02-21a7-4683-8532-f0ec4a8c2aae",
    "createdAt": "2026-06-14T12:36:34.506Z",
    "riskScore": 79,
    "contractName": "Contract_code_registry",
    "severityCounts": {
      "low": 3,
      "high": 1,
      "info": 17,
      "medium": 2,
      "critical": 0
    },
    "executiveSummary": "Archon completed a read-only Mantle Mainnet audit of Contract_code_registry 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": "1cfcb529-8352-4b05-9542-09daa4667c01",
      "title": "Incorrect Exp",
      "category": "incorrect-exp",
      "location": {
        "file": "Math.sol",
        "lineEnd": 202,
        "lineStart": 123
      },
      "severity": "high"
    },
    {
      "id": "00176557-200d-4e0b-b282-242f7512d38d",
      "title": "Divide Before Multiply",
      "category": "divide-before-multiply",
      "location": {
        "file": "Math.sol",
        "lineEnd": 202,
        "lineStart": 123
      },
      "severity": "medium"
    },
    {
      "id": "949222e0-743e-4ec0-9c1f-f3b3e26eeb5e",
      "title": "Shadowing Local",
      "category": "shadowing-local",
      "location": {
        "file": "AuralisAgentRegistry.sol",
        "lineEnd": 89,
        "lineStart": 89
      },
      "severity": "low"
    },
    {
      "id": "aae435e2-24e7-4359-aef2-cf8b6cdf88c0",
      "title": "Reentrancy Benign",
      "category": "reentrancy-benign",
      "location": {
        "file": "AuralisAgentRegistry.sol",
        "lineEnd": 108,
        "lineStart": 87
      },
      "severity": "low"
    },
    {
      "id": "7ddc5973-303f-4fa9-8ef2-4924fc3be900",
      "title": "Reentrancy Events",
      "category": "reentrancy-events",
      "location": {
        "file": "AuralisAgentRegistry.sol",
        "lineEnd": 108,
        "lineStart": 87
      },
      "severity": "low"
    },
    {
      "id": "e04e2ba9-6b95-43a7-aec3-d34eb8efb163",
      "title": "Assembly",
      "category": "assembly",
      "location": {
        "file": "Strings.sol",
        "lineEnd": 44,
        "lineStart": 24
      },
      "severity": "info"
    },
    {
      "id": "d4d3bd22-c0b4-4e73-acb2-67474845d53a",
      "title": "Assembly",
      "category": "assembly",
      "location": {
        "file": "Math.sol",
        "lineEnd": 202,
        "lineStart": 123
      },
      "severity": "info"
    },
    {
      "id": "bdc34715-39b2-4c26-b738-ad3f1e703d58",
      "title": "Assembly",
      "category": "assembly",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 482,
        "lineStart": 465
      },
      "severity": "info"
    },
    {
      "id": "0bfd461d-3adf-484f-a42f-d9cedf0c3116",
      "title": "Pragma",
      "category": "pragma",
      "location": {
        "file": "AuralisAgentRegistry.sol",
        "lineEnd": 2,
        "lineStart": 2
      },
      "severity": "info"
    },
    {
      "id": "1327c9d9-78d7-466d-804c-bfb2569c54f1",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "Context.sol",
        "lineEnd": 27,
        "lineStart": 25
      },
      "severity": "info"
    },
    {
      "id": "8a53a2b9-0cac-4a39-8aa5-0236551ce981",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 388,
        "lineStart": 385
      },
      "severity": "info"
    },
    {
      "id": "dd736501-5f25-499e-801b-6c85853b4b30",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 356,
        "lineStart": 346
      },
      "severity": "info"
    },
    {
      "id": "98f3d804-7e79-4e26-af53-b52f1b659641",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 333,
        "lineStart": 328
      },
      "severity": "info"
    },
    {
      "id": "de3a7fc6-54e9-413b-b520-39248a82f763",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "Context.sol",
        "lineEnd": 23,
        "lineStart": 21
      },
      "severity": "info"
    },
    {
      "id": "4a9e9666-a1aa-4309-902b-66d956fae108",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 102,
        "lineStart": 100
      },
      "severity": "info"
    },
    {
      "id": "8286d64e-aa17-429f-b31a-929b075aad2b",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 379,
        "lineStart": 377
      },
      "severity": "info"
    },
    {
      "id": "173b3956-40fb-4b49-8b3d-b1e3ed6948d9",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 228,
        "lineStart": 224
      },
      "severity": "info"
    },
    {
      "id": "cbdcfb71-d0fa-4910-8e4a-283dc20d7686",
      "title": "Solc Version",
      "category": "solc-version",
      "location": {
        "file": "Ownable.sol",
        "lineEnd": 4,
        "lineStart": 4
      },
      "severity": "info"
    },
    {
      "id": "03b75d20-a5ee-4ee4-a2ab-f1c37c1e4893",
      "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": "66b547ef-dc99-4a3f-8e57-10f1f8b04043",
      "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": "577226ef-3b80-431c-85b8-cad3bf51223d",
      "title": "Cache repeated storage read",
      "category": "mantle-gas-optimizer/storage/cache-repeated-sload",
      "location": {
        "file": "AuralisAgentRegistry.sol",
        "lineEnd": 98,
        "lineStart": 98
      },
      "severity": "info"
    },
    {
      "id": "a2ce221d-bdf6-410e-a46d-5376ea296763",
      "title": "Cache repeated storage read",
      "category": "mantle-gas-optimizer/storage/cache-repeated-sload",
      "location": {
        "file": "AuralisAgentRegistry.sol",
        "lineEnd": 99,
        "lineStart": 99
      },
      "severity": "info"
    },
    {
      "id": "f036fda8-3c87-4da8-a5d3-238fd1bd50b9",
      "title": "Bitmap-pack boolean flags",
      "category": "mantle-gas-optimizer/storage/bitmap-bools",
      "location": {
        "file": "AuralisAgentRegistry.sol",
        "lineEnd": 37,
        "lineStart": 37
      },
      "severity": "medium"
    }
  ]
}
source URI: ipfs://QmXUJWgsX9gEhg2sx6ZmuzYaKiibWNvY9zx1jt9cuwrahU