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

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

Feedback #22

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

archon.audit.report
100.0

Off-chain feedback document

raw JSON
{
  "chain": {
    "name": "Mantle Mainnet",
    "chainId": 5000
  },
  "report": {
    "id": "42d7a3ba-7a39-40da-979e-7050358e7134",
    "scope": {
      "pragma": "^0.8.24",
      "network": "mantle-mainnet",
      "lineCount": 86,
      "protocols": [
        "mETH",
        "cmETH",
        "USDY",
        "Aave V3",
        "Merchant Moe",
        "Agni"
      ],
      "sourceKind": "paste",
      "aiReasoning": {
        "hits": 0,
        "total": 18,
        "misses": 18,
        "batches": 9,
        "reasons": {},
        "skipped": 0,
        "enriched": 18,
        "provider": "tokenhub",
        "timeoutMs": 75000,
        "fallbackCount": 0,
        "providersUsed": [
          "Tencent Cloud TokenHub (deepseek-v4-pro)",
          "OpenAI (gpt-4o-mini)"
        ]
      },
      "reducedMode": null,
      "solcVersion": "0.8.24",
      "gasOptimizer": {
        "pricing": {
          "mode": "calibrated-receipts",
          "pricedAt": "2026-06-18T16:11:28.881Z",
          "l2GasPriceWei": "50000100000",
          "deployDataFeeMnt": "0.011591025826746788",
          "deployDataFeeWei": "11591025826746788",
          "calldataZeroBytes": 36,
          "calibrationErrorPct": 0,
          "calldataGasEstimate": 52000,
          "calldataNonZeroBytes": 3241,
          "creationBytecodeBytes": 3277
        },
        "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": "0x483751e7c4679319a07bc8a3e919abc991584219ef711d1248d495723c7efda0",
        "measurement": {
          "forge": {
            "ok": false,
            "error": "Error (7576): Undeclared identifier.",
            "command": "forge test --gas-report",
            "attempted": true,
            "gasReport": null
          },
          "source": "deterministic-estimate",
          "status": "degraded",
          "patches": [
            {
              "note": "Review-only patch is not auto-applied for measurement.",
              "after": "Group adjacent bool/address/small uint fields together and place full-slot fields after them.",
              "before": "uint8 public decimals = 18; … address public owner;",
              "ruleId": "storage-packing",
              "safety": "review",
              "status": "skipped",
              "l2GasDelta": 20000,
              "l1DaDeltaWei": null
            },
            {
              "note": "Review-only patch is not auto-applied for measurement.",
              "after": "Use the smallest ABI-safe integer width only when the domain is bounded and documented.",
              "before": "function approve(address spender, uint256 amount) external returns (bool) {",
              "ruleId": "calldata-smaller-types",
              "safety": "review",
              "status": "skipped",
              "l2GasDelta": null,
              "l1DaDeltaWei": null
            },
            {
              "note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
              "after": "error TRANSFERSPAUSED(); … if (!(condition)) revert TRANSFERSPAUSED();",
              "before": "require(!transfersPaused, \"TRANSFERS_PAUSED\");",
              "ruleId": "custom-errors",
              "safety": "safe",
              "status": "estimated",
              "l2GasDelta": 120,
              "l1DaDeltaWei": null
            },
            {
              "note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
              "after": "error INSUFFICIENTBALANCE(); … if (!(condition)) revert INSUFFICIENTBALANCE();",
              "before": "require(balanceOf[msg.sender] >= amount, \"INSUFFICIENT_BALANCE\");",
              "ruleId": "custom-errors",
              "safety": "safe",
              "status": "estimated",
              "l2GasDelta": 120,
              "l1DaDeltaWei": null
            },
            {
              "note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
              "after": "error INSUFFICIENTBALANCE(); … if (!(condition)) revert INSUFFICIENTBALANCE();",
              "before": "require(balanceOf[from] >= amount, \"INSUFFICIENT_BALANCE\");",
              "ruleId": "custom-errors",
              "safety": "safe",
              "status": "estimated",
              "l2GasDelta": 120,
              "l1DaDeltaWei": null
            },
            {
              "note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
              "after": "error INSUFFICIENTALLOWANCE(); … if (!(condition)) revert INSUFFICIENTALLOWANCE();",
              "before": "require(allowance[from][msg.sender] >= amount, \"INSUFFICIENT_ALLOWANCE\");",
              "ruleId": "custom-errors",
              "safety": "safe",
              "status": "estimated",
              "l2GasDelta": 120,
              "l1DaDeltaWei": null
            },
            {
              "note": "Review-only patch is not auto-applied for measurement.",
              "after": "address immutable public owner;",
              "before": "address public owner;",
              "ruleId": "immutable-constant",
              "safety": "review",
              "status": "skipped",
              "l2GasDelta": 2100,
              "l1DaDeltaWei": null
            },
            {
              "note": "Review-only patch is not auto-applied for measurement.",
              "after": "uint256 cached = balanceOf[msg.sender]; // reuse cached value",
              "before": "balanceOf[msg.sender] read 2 times",
              "ruleId": "cache-repeated-sload",
              "safety": "review",
              "status": "skipped",
              "l2GasDelta": 100,
              "l1DaDeltaWei": null
            },
            {
              "note": "Review-only patch is not auto-applied for measurement.",
              "after": "uint256 cached = balanceOf[to]; // reuse cached value",
              "before": "balanceOf[to] read 2 times",
              "ruleId": "cache-repeated-sload",
              "safety": "review",
              "status": "skipped",
              "l2GasDelta": 100,
              "l1DaDeltaWei": null
            },
            {
              "note": "Review-only patch is not auto-applied for measurement.",
              "after": "uint256 cached = balanceOf[from]; // reuse cached value",
              "before": "balanceOf[from] read 2 times",
              "ruleId": "cache-repeated-sload",
              "safety": "review",
              "status": "skipped",
              "l2GasDelta": 100,
              "l1DaDeltaWei": null
            },
            {
              "note": "Review-only patch is not auto-applied for measurement.",
              "after": "uint256 cached = allowance[from]; // reuse cached value",
              "before": "allowance[from] read 2 times",
              "ruleId": "cache-repeated-sload",
              "safety": "review",
              "status": "skipped",
              "l2GasDelta": 100,
              "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 blocked;",
              "ruleId": "bitmap-bools",
              "safety": "review",
              "status": "skipped",
              "l2GasDelta": 20000,
              "l1DaDeltaWei": null
            }
          ],
          "version": "archon.gasMeasurement.v1",
          "measuredAt": "2026-06-18T16:11:29.148Z",
          "rulesetHash": "a62c3998c785c1f95830b880881924bd856e8fe20855e783ac0f84b3262fc6d8",
          "contractHash": "483751e7c4679319a07bc8a3e919abc991584219ef711d1248d495723c7efda0"
        },
        "opportunities": [
          {
            "id": "storage-packing",
            "file": "MantleUSDY_Interface.sol",
            "after": "Group adjacent bool/address/small uint fields together and place full-slot fields after them.",
            "patch": {
              "newText": "    uint8 public decimals = 18; // REVIEW: reorder adjacent small storage fields with nearby small fields to reduce SSTORE/SLOAD slots",
              "oldText": "    uint8 public decimals = 18;"
            },
            "title": "Pack small storage variables into fewer slots",
            "where": "MantleUSDY_Interface.sol:10",
            "before": "uint8 public decimals = 18; … address public owner;",
            "safety": "review",
            "newText": "    uint8 public decimals = 18; // REVIEW: reorder adjacent small storage fields with nearby small fields to reduce SSTORE/SLOAD slots",
            "oldText": "    uint8 public decimals = 18;",
            "category": "storage",
            "severity": "medium",
            "lineStart": 10,
            "rationale": "Storage slot packing can remove entire SSTORE/SLOAD slots but changes layout, so upgradeable contracts need manual review.",
            "confidence": 0.64,
            "estL1Delta": null,
            "estL2Delta": 20000,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 20000,
            "estimatedDataBytesSaved": null
          },
          {
            "id": "calldata-smaller-types",
            "file": "MantleUSDY_Interface.sol",
            "after": "Use the smallest ABI-safe integer width only when the domain is bounded and documented.",
            "patch": {
              "newText": "    function approve(address spender, uint256 amount) external returns (bool) { // REVIEW: bounded calldata params may be packable/smaller in structs or encoded batches",
              "oldText": "    function approve(address spender, uint256 amount) external returns (bool) {"
            },
            "title": "Review calldata parameter width",
            "where": "MantleUSDY_Interface.sol:40",
            "before": "function approve(address spender, uint256 amount) external returns (bool) {",
            "safety": "review",
            "newText": "    function approve(address spender, uint256 amount) external returns (bool) { // REVIEW: bounded calldata params may be packable/smaller in structs or encoded batches",
            "oldText": "    function approve(address spender, uint256 amount) external returns (bool) {",
            "category": "calldata",
            "severity": "low",
            "lineStart": 40,
            "rationale": "For individual ABI params uint256 still occupies a full word, but bounded types help packed structs/batches and prevent redundant calldata.",
            "confidence": 0.55,
            "estL1Delta": 16,
            "estL2Delta": null,
            "annualizedBasis": "Receipt-calibrated DA estimate for calldata/data bytes; exact deltas require V2.1.2 harness measurement.",
            "estimatedGasSaved": null,
            "estimatedDataBytesSaved": 16
          },
          {
            "id": "custom-errors",
            "file": "MantleUSDY_Interface.sol",
            "after": "error TRANSFERSPAUSED(); … if (!(condition)) revert TRANSFERSPAUSED();",
            "patch": {
              "newText": "        if (!(!transfersPaused)) revert TRANSFERSPAUSED();",
              "oldText": "        require(!transfersPaused, \"TRANSFERS_PAUSED\");"
            },
            "title": "Replace long revert string with custom error",
            "where": "MantleUSDY_Interface.sol:31",
            "before": "require(!transfersPaused, \"TRANSFERS_PAUSED\");",
            "safety": "safe",
            "newText": "        if (!(!transfersPaused)) revert TRANSFERSPAUSED();",
            "oldText": "        require(!transfersPaused, \"TRANSFERS_PAUSED\");",
            "category": "deployment",
            "severity": "info",
            "lineStart": 31,
            "rationale": "Custom errors reduce deployment bytecode and revert-path gas while preserving typed failure semantics.",
            "confidence": 0.9,
            "estL1Delta": 16,
            "estL2Delta": 120,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 120,
            "estimatedDataBytesSaved": 16
          },
          {
            "id": "custom-errors",
            "file": "MantleUSDY_Interface.sol",
            "after": "error INSUFFICIENTBALANCE(); … if (!(condition)) revert INSUFFICIENTBALANCE();",
            "patch": {
              "newText": "        if (!(balanceOf[msg.sender] >= amount)) revert INSUFFICIENTBALANCE();",
              "oldText": "        require(balanceOf[msg.sender] >= amount, \"INSUFFICIENT_BALANCE\");"
            },
            "title": "Replace long revert string with custom error",
            "where": "MantleUSDY_Interface.sol:52",
            "before": "require(balanceOf[msg.sender] >= amount, \"INSUFFICIENT_BALANCE\");",
            "safety": "safe",
            "newText": "        if (!(balanceOf[msg.sender] >= amount)) revert INSUFFICIENTBALANCE();",
            "oldText": "        require(balanceOf[msg.sender] >= amount, \"INSUFFICIENT_BALANCE\");",
            "category": "deployment",
            "severity": "info",
            "lineStart": 52,
            "rationale": "Custom errors reduce deployment bytecode and revert-path gas while preserving typed failure semantics.",
            "confidence": 0.9,
            "estL1Delta": 20,
            "estL2Delta": 120,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 120,
            "estimatedDataBytesSaved": 20
          },
          {
            "id": "custom-errors",
            "file": "MantleUSDY_Interface.sol",
            "after": "error INSUFFICIENTBALANCE(); … if (!(condition)) revert INSUFFICIENTBALANCE();",
            "patch": {
              "newText": "        if (!(balanceOf[from] >= amount)) revert INSUFFICIENTBALANCE();",
              "oldText": "        require(balanceOf[from] >= amount, \"INSUFFICIENT_BALANCE\");"
            },
            "title": "Replace long revert string with custom error",
            "where": "MantleUSDY_Interface.sol:66",
            "before": "require(balanceOf[from] >= amount, \"INSUFFICIENT_BALANCE\");",
            "safety": "safe",
            "newText": "        if (!(balanceOf[from] >= amount)) revert INSUFFICIENTBALANCE();",
            "oldText": "        require(balanceOf[from] >= amount, \"INSUFFICIENT_BALANCE\");",
            "category": "deployment",
            "severity": "info",
            "lineStart": 66,
            "rationale": "Custom errors reduce deployment bytecode and revert-path gas while preserving typed failure semantics.",
            "confidence": 0.9,
            "estL1Delta": 20,
            "estL2Delta": 120,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 120,
            "estimatedDataBytesSaved": 20
          },
          {
            "id": "custom-errors",
            "file": "MantleUSDY_Interface.sol",
            "after": "error INSUFFICIENTALLOWANCE(); … if (!(condition)) revert INSUFFICIENTALLOWANCE();",
            "patch": {
              "newText": "        if (!(allowance[from][msg.sender] >= amount)) revert INSUFFICIENTALLOWANCE();",
              "oldText": "        require(allowance[from][msg.sender] >= amount, \"INSUFFICIENT_ALLOWANCE\");"
            },
            "title": "Replace long revert string with custom error",
            "where": "MantleUSDY_Interface.sol:67",
            "before": "require(allowance[from][msg.sender] >= amount, \"INSUFFICIENT_ALLOWANCE\");",
            "safety": "safe",
            "newText": "        if (!(allowance[from][msg.sender] >= amount)) revert INSUFFICIENTALLOWANCE();",
            "oldText": "        require(allowance[from][msg.sender] >= amount, \"INSUFFICIENT_ALLOWANCE\");",
            "category": "deployment",
            "severity": "info",
            "lineStart": 67,
            "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": "immutable-constant",
            "file": "MantleUSDY_Interface.sol",
            "after": "address immutable public owner;",
            "patch": {
              "newText": "    address immutable public owner;",
              "oldText": "    address public owner;"
            },
            "title": "Mark never-changing value constant or immutable",
            "where": "MantleUSDY_Interface.sol:13",
            "before": "address public owner;",
            "safety": "review",
            "newText": "    address immutable public owner;",
            "oldText": "    address public owner;",
            "category": "storage",
            "severity": "info",
            "lineStart": 13,
            "rationale": "Constants/immutables avoid storage reads for values that do not change after deployment.",
            "confidence": 0.62,
            "estL1Delta": null,
            "estL2Delta": 2100,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 2100,
            "estimatedDataBytesSaved": null
          },
          {
            "id": "cache-repeated-sload",
            "file": "MantleUSDY_Interface.sol",
            "after": "uint256 cached = balanceOf[msg.sender]; // reuse cached value",
            "patch": {
              "newText": "balanceOf[msg.sender]",
              "oldText": "balanceOf[msg.sender]"
            },
            "title": "Cache repeated storage read",
            "where": "MantleUSDY_Interface.sol:52",
            "before": "balanceOf[msg.sender] read 2 times",
            "safety": "review",
            "newText": "balanceOf[msg.sender]",
            "oldText": "balanceOf[msg.sender]",
            "category": "storage",
            "severity": "info",
            "lineStart": 52,
            "rationale": "Repeated SLOADs should be cached in stack/memory when state cannot change between reads.",
            "confidence": 0.7,
            "estL1Delta": null,
            "estL2Delta": 100,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 100,
            "estimatedDataBytesSaved": null
          },
          {
            "id": "cache-repeated-sload",
            "file": "MantleUSDY_Interface.sol",
            "after": "uint256 cached = balanceOf[to]; // reuse cached value",
            "patch": {
              "newText": "balanceOf[to]",
              "oldText": "balanceOf[to]"
            },
            "title": "Cache repeated storage read",
            "where": "MantleUSDY_Interface.sol:55",
            "before": "balanceOf[to] read 2 times",
            "safety": "review",
            "newText": "balanceOf[to]",
            "oldText": "balanceOf[to]",
            "category": "storage",
            "severity": "info",
            "lineStart": 55,
            "rationale": "Repeated SLOADs should be cached in stack/memory when state cannot change between reads.",
            "confidence": 0.7,
            "estL1Delta": null,
            "estL2Delta": 100,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 100,
            "estimatedDataBytesSaved": null
          },
          {
            "id": "cache-repeated-sload",
            "file": "MantleUSDY_Interface.sol",
            "after": "uint256 cached = balanceOf[from]; // reuse cached value",
            "patch": {
              "newText": "balanceOf[from]",
              "oldText": "balanceOf[from]"
            },
            "title": "Cache repeated storage read",
            "where": "MantleUSDY_Interface.sol:66",
            "before": "balanceOf[from] read 2 times",
            "safety": "review",
            "newText": "balanceOf[from]",
            "oldText": "balanceOf[from]",
            "category": "storage",
            "severity": "info",
            "lineStart": 66,
            "rationale": "Repeated SLOADs should be cached in stack/memory when state cannot change between reads.",
            "confidence": 0.7,
            "estL1Delta": null,
            "estL2Delta": 100,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 100,
            "estimatedDataBytesSaved": null
          },
          {
            "id": "cache-repeated-sload",
            "file": "MantleUSDY_Interface.sol",
            "after": "uint256 cached = allowance[from]; // reuse cached value",
            "patch": {
              "newText": "allowance[from]",
              "oldText": "allowance[from]"
            },
            "title": "Cache repeated storage read",
            "where": "MantleUSDY_Interface.sol:67",
            "before": "allowance[from] read 2 times",
            "safety": "review",
            "newText": "allowance[from]",
            "oldText": "allowance[from]",
            "category": "storage",
            "severity": "info",
            "lineStart": 67,
            "rationale": "Repeated SLOADs should be cached in stack/memory when state cannot change between reads.",
            "confidence": 0.7,
            "estL1Delta": null,
            "estL2Delta": 100,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 100,
            "estimatedDataBytesSaved": null
          },
          {
            "id": "bitmap-bools",
            "file": "MantleUSDY_Interface.sol",
            "after": "mapping(uint256 => uint256) bitmap; // pack 256 flags per slot",
            "patch": {
              "newText": "    mapping(address => bool) public blocked; // REVIEW: high-volume bool flags can be bitmap-packed",
              "oldText": "    mapping(address => bool) public blocked;"
            },
            "title": "Bitmap-pack boolean flags",
            "where": "MantleUSDY_Interface.sol:18",
            "before": "mapping(address => bool) public blocked;",
            "safety": "review",
            "newText": "    mapping(address => bool) public blocked; // REVIEW: high-volume bool flags can be bitmap-packed",
            "oldText": "    mapping(address => bool) public blocked;",
            "category": "storage",
            "severity": "medium",
            "lineStart": 18,
            "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": "08eafc71-ddbf-4608-90e3-58133bb083b0",
    "createdAt": "2026-06-18T16:15:18.240Z",
    "riskScore": 66,
    "contractName": "MantleUSDY_Interface",
    "severityCounts": {
      "low": 6,
      "high": 0,
      "info": 10,
      "medium": 2,
      "critical": 0
    },
    "executiveSummary": "Archon completed a read-only Mantle Mainnet audit of MantleUSDY_Interface and found 18 deterministic findings. The highest-priority issue is Naming Convention, with risk score 66/100 based on severity-weighted findings. The contract naming convention does not follow standard Solidity practices. 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": "97776e53-39e4-448e-a4e3-3c249a917032",
      "title": "Naming Convention",
      "category": "naming-convention",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 87,
        "lineStart": 7
      },
      "severity": "info"
    },
    {
      "id": "4a16fdd0-34e4-454a-b7f1-8a065653c79c",
      "title": "Constable States",
      "category": "constable-states",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 12,
        "lineStart": 12
      },
      "severity": "low"
    },
    {
      "id": "8eed60aa-24ca-4a9a-8da3-dc15e58aa0fe",
      "title": "Constable States",
      "category": "constable-states",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 10,
        "lineStart": 10
      },
      "severity": "low"
    },
    {
      "id": "aa77b7cd-b6b6-46ea-b342-038e73469451",
      "title": "Constable States",
      "category": "constable-states",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 8,
        "lineStart": 8
      },
      "severity": "low"
    },
    {
      "id": "daacda5b-d217-4ef5-afba-db2ba431fd76",
      "title": "Constable States",
      "category": "constable-states",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 9,
        "lineStart": 9
      },
      "severity": "low"
    },
    {
      "id": "d5027052-d1fb-49bb-9edf-0e3bf9da568a",
      "title": "Immutable States",
      "category": "immutable-states",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 13,
        "lineStart": 13
      },
      "severity": "low"
    },
    {
      "id": "22068fd8-d9ff-4bc8-a83a-2412c3ba04d8",
      "title": "Pack small storage variables into fewer slots",
      "category": "mantle-gas-optimizer/storage/storage-packing",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 10,
        "lineStart": 10
      },
      "severity": "medium"
    },
    {
      "id": "b853b2c2-fef3-4824-895c-b9aac48861ac",
      "title": "Review calldata parameter width",
      "category": "mantle-gas-optimizer/calldata/calldata-smaller-types",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 40,
        "lineStart": 40
      },
      "severity": "low"
    },
    {
      "id": "3c709ee0-5361-4b59-8e46-991f97d34683",
      "title": "Replace long revert string with custom error",
      "category": "mantle-gas-optimizer/deployment/custom-errors",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 31,
        "lineStart": 31
      },
      "severity": "info"
    },
    {
      "id": "a65ca5ad-fa54-4775-9d5b-eecf32dcbd7b",
      "title": "Replace long revert string with custom error",
      "category": "mantle-gas-optimizer/deployment/custom-errors",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 52,
        "lineStart": 52
      },
      "severity": "info"
    },
    {
      "id": "32cb1dbf-6af8-4236-9280-22a8fb43bced",
      "title": "Replace long revert string with custom error",
      "category": "mantle-gas-optimizer/deployment/custom-errors",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 66,
        "lineStart": 66
      },
      "severity": "info"
    },
    {
      "id": "a86ece0c-6aa7-46d1-b0d3-538da5304cb4",
      "title": "Replace long revert string with custom error",
      "category": "mantle-gas-optimizer/deployment/custom-errors",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 67,
        "lineStart": 67
      },
      "severity": "info"
    },
    {
      "id": "d390b5fe-e214-45b9-b73d-77aa3c343d93",
      "title": "Mark never-changing value constant or immutable",
      "category": "mantle-gas-optimizer/storage/immutable-constant",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 13,
        "lineStart": 13
      },
      "severity": "info"
    },
    {
      "id": "05194cbc-47bf-4bf7-bc79-872aec11914d",
      "title": "Cache repeated storage read",
      "category": "mantle-gas-optimizer/storage/cache-repeated-sload",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 52,
        "lineStart": 52
      },
      "severity": "info"
    },
    {
      "id": "1fa89937-2b76-4f6f-87f9-4214e98d92c7",
      "title": "Cache repeated storage read",
      "category": "mantle-gas-optimizer/storage/cache-repeated-sload",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 55,
        "lineStart": 55
      },
      "severity": "info"
    },
    {
      "id": "e490bd37-3d3a-4ce9-a186-e8b8f9ca5acf",
      "title": "Cache repeated storage read",
      "category": "mantle-gas-optimizer/storage/cache-repeated-sload",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 66,
        "lineStart": 66
      },
      "severity": "info"
    },
    {
      "id": "25979cd2-4461-4237-84da-24d774890656",
      "title": "Cache repeated storage read",
      "category": "mantle-gas-optimizer/storage/cache-repeated-sload",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 67,
        "lineStart": 67
      },
      "severity": "info"
    },
    {
      "id": "91dbd435-13d3-42c9-a327-89d4f6a184d2",
      "title": "Bitmap-pack boolean flags",
      "category": "mantle-gas-optimizer/storage/bitmap-bools",
      "location": {
        "file": "MantleUSDY_Interface.sol",
        "lineEnd": 18,
        "lineStart": 18
      },
      "severity": "medium"
    }
  ]
}
source URI: ipfs://QmVHDWaWZHrps9a1tdSXoRJ1pdcwfLPaET1CJKAkrKcNgF