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

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

Feedback #8

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

archon.audit.report
100.0

Off-chain feedback document

raw JSON
{
  "chain": {
    "name": "Mantle Mainnet",
    "chainId": 5000
  },
  "report": {
    "id": "cc474bb8-3678-4017-8e71-1c7a6c008cba",
    "scope": {
      "pragma": "^0.8.24",
      "network": "mantle-mainnet",
      "lineCount": 409,
      "protocols": [
        "mETH",
        "cmETH",
        "USDY",
        "Aave V3",
        "Merchant Moe",
        "Agni"
      ],
      "sourceKind": "paste",
      "aiReasoning": {
        "hits": 33,
        "total": 33,
        "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:52:56.339Z",
          "l2GasPriceWei": "50000100000",
          "deployDataFeeMnt": "0.0373200531351395",
          "deployDataFeeWei": "37320053135139500",
          "calldataZeroBytes": 396,
          "calibrationErrorPct": 0,
          "calldataGasEstimate": 165088,
          "calldataNonZeroBytes": 10219,
          "creationBytecodeBytes": 10615
        },
        "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": "0x2e9acb3a677483a4969dac0f8c15db853c731390ba7d7c96502e763b70004eca",
        "measurement": {
          "forge": {
            "ok": false,
            "error": "Command failed: forge test --gas-report --root /tmp/archon-gas-measure-VlKuKr\nError: Compiler run failed:\nError (6275): Source \"@openzeppelin/contracts/token/ERC20/IERC20.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-VlKuKr\".\nParserError: Source \"@openzeppelin/contracts/token/ERC20/IERC20.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-VlKuKr\".\n  --> src/VaultV2_Demo_Vault.sol:19:1:\n   |\n19 | import \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nError (6275): Source \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-VlKuKr\".\nParserError: Source \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-VlKuKr\".\n  --> src/VaultV2_Demo_Vault.sol:20:1:\n   |\n20 | import \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nError (6275): Source \"@openzeppelin/contracts/token/ERC721/ERC721.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-VlKuKr\".\nParserError: Source \"@openzeppelin/contracts/token/ERC721/ERC721.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-VlKuKr\".\n  --> src/VaultV2_Demo_Vault.sol:22:1:\n   |\n22 | import \"@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-VlKuKr\".\nParserError: Source \"@openzeppelin/contracts/access/Ownable.sol\" not found: File not found. Searched the following locations: \"/tmp/archon-gas-measure-VlKuKr\".\n  --> src/VaultV2_Demo_Vault.sol:23:1:\n",
            "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": "uint256 cached = positions[positionId]; // reuse cached value",
              "before": "positions[positionId] read 8 times",
              "ruleId": "cache-repeated-sload",
              "safety": "review",
              "status": "skipped",
              "l2GasDelta": 700,
              "l1DaDeltaWei": null
            },
            {
              "note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
              "after": "if (isEarly && earlyWithdrawalPenaltyBps != 0) {",
              "before": "if (isEarly && earlyWithdrawalPenaltyBps > 0) {",
              "ruleId": "nonzero-comparison",
              "safety": "safe",
              "status": "estimated",
              "l2GasDelta": 3,
              "l1DaDeltaWei": null
            },
            {
              "note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
              "after": "if (penaltyAmount != 0) {",
              "before": "if (penaltyAmount > 0) {",
              "ruleId": "nonzero-comparison",
              "safety": "safe",
              "status": "estimated",
              "l2GasDelta": 3,
              "l1DaDeltaWei": null
            },
            {
              "note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
              "after": "if (reward != 0) {",
              "before": "if (reward > 0) {",
              "ruleId": "nonzero-comparison",
              "safety": "safe",
              "status": "estimated",
              "l2GasDelta": 3,
              "l1DaDeltaWei": null
            },
            {
              "note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
              "after": "return positionId != 0 && positionId < nextPositionId;",
              "before": "return positionId > 0 && positionId < nextPositionId;",
              "ruleId": "nonzero-comparison",
              "safety": "safe",
              "status": "estimated",
              "l2GasDelta": 3,
              "l1DaDeltaWei": null
            },
            {
              "note": "Review-only patch is not auto-applied for measurement.",
              "after": "event TreasuryUpdated(address indexed oldTreasury, address newTreasury);",
              "before": "event TreasuryUpdated(address oldTreasury, address newTreasury);",
              "ruleId": "indexed-events-vs-storage",
              "safety": "review",
              "status": "skipped",
              "l2GasDelta": null,
              "l1DaDeltaWei": null
            }
          ],
          "version": "archon.gasMeasurement.v1",
          "measuredAt": "2026-06-11T20:04:42.416Z",
          "rulesetHash": "9cfd5c081c308f40176d3c782f08a88a765c9c45c6e8e3af953487d8aeed781f",
          "contractHash": "2e9acb3a677483a4969dac0f8c15db853c731390ba7d7c96502e763b70004eca"
        },
        "opportunities": [
          {
            "id": "cache-repeated-sload",
            "file": "VaultV2_Demo_Vault.sol",
            "after": "uint256 cached = positions[positionId]; // reuse cached value",
            "patch": {
              "newText": "positions[positionId]",
              "oldText": "positions[positionId]"
            },
            "title": "Cache repeated storage read",
            "where": "VaultV2_Demo_Vault.sol:128",
            "before": "positions[positionId] read 8 times",
            "safety": "review",
            "newText": "positions[positionId]",
            "oldText": "positions[positionId]",
            "category": "storage",
            "severity": "info",
            "lineStart": 128,
            "rationale": "Repeated SLOADs should be cached in stack/memory when state cannot change between reads.",
            "confidence": 0.7,
            "estL1Delta": null,
            "estL2Delta": 700,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 700,
            "estimatedDataBytesSaved": null
          },
          {
            "id": "nonzero-comparison",
            "file": "VaultV2_Demo_Vault.sol",
            "after": "if (isEarly && earlyWithdrawalPenaltyBps != 0) {",
            "patch": {
              "newText": "        if (isEarly && earlyWithdrawalPenaltyBps != 0) {",
              "oldText": "        if (isEarly && earlyWithdrawalPenaltyBps > 0) {"
            },
            "title": "Use != 0 for unsigned non-zero checks",
            "where": "VaultV2_Demo_Vault.sol:225",
            "before": "if (isEarly && earlyWithdrawalPenaltyBps > 0) {",
            "safety": "safe",
            "newText": "        if (isEarly && earlyWithdrawalPenaltyBps != 0) {",
            "oldText": "        if (isEarly && earlyWithdrawalPenaltyBps > 0) {",
            "category": "computation",
            "severity": "info",
            "lineStart": 225,
            "rationale": "For unsigned integers, != 0 is equivalent for non-zero checks and can compile slightly cheaper.",
            "confidence": 0.7,
            "estL1Delta": null,
            "estL2Delta": 3,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 3,
            "estimatedDataBytesSaved": null
          },
          {
            "id": "nonzero-comparison",
            "file": "VaultV2_Demo_Vault.sol",
            "after": "if (penaltyAmount != 0) {",
            "patch": {
              "newText": "        if (penaltyAmount != 0) {",
              "oldText": "        if (penaltyAmount > 0) {"
            },
            "title": "Use != 0 for unsigned non-zero checks",
            "where": "VaultV2_Demo_Vault.sol:237",
            "before": "if (penaltyAmount > 0) {",
            "safety": "safe",
            "newText": "        if (penaltyAmount != 0) {",
            "oldText": "        if (penaltyAmount > 0) {",
            "category": "computation",
            "severity": "info",
            "lineStart": 237,
            "rationale": "For unsigned integers, != 0 is equivalent for non-zero checks and can compile slightly cheaper.",
            "confidence": 0.7,
            "estL1Delta": null,
            "estL2Delta": 3,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 3,
            "estimatedDataBytesSaved": null
          },
          {
            "id": "nonzero-comparison",
            "file": "VaultV2_Demo_Vault.sol",
            "after": "if (reward != 0) {",
            "patch": {
              "newText": "        if (reward != 0) {",
              "oldText": "        if (reward > 0) {"
            },
            "title": "Use != 0 for unsigned non-zero checks",
            "where": "VaultV2_Demo_Vault.sol:243",
            "before": "if (reward > 0) {",
            "safety": "safe",
            "newText": "        if (reward != 0) {",
            "oldText": "        if (reward > 0) {",
            "category": "computation",
            "severity": "info",
            "lineStart": 243,
            "rationale": "For unsigned integers, != 0 is equivalent for non-zero checks and can compile slightly cheaper.",
            "confidence": 0.7,
            "estL1Delta": null,
            "estL2Delta": 3,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 3,
            "estimatedDataBytesSaved": null
          },
          {
            "id": "nonzero-comparison",
            "file": "VaultV2_Demo_Vault.sol",
            "after": "return positionId != 0 && positionId < nextPositionId;",
            "patch": {
              "newText": "        return positionId != 0 && positionId < nextPositionId;",
              "oldText": "        return positionId > 0 && positionId < nextPositionId;"
            },
            "title": "Use != 0 for unsigned non-zero checks",
            "where": "VaultV2_Demo_Vault.sol:407",
            "before": "return positionId > 0 && positionId < nextPositionId;",
            "safety": "safe",
            "newText": "        return positionId != 0 && positionId < nextPositionId;",
            "oldText": "        return positionId > 0 && positionId < nextPositionId;",
            "category": "computation",
            "severity": "info",
            "lineStart": 407,
            "rationale": "For unsigned integers, != 0 is equivalent for non-zero checks and can compile slightly cheaper.",
            "confidence": 0.7,
            "estL1Delta": null,
            "estL2Delta": 3,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": 3,
            "estimatedDataBytesSaved": null
          },
          {
            "id": "indexed-events-vs-storage",
            "file": "VaultV2_Demo_Vault.sol",
            "after": "event TreasuryUpdated(address indexed oldTreasury, address newTreasury);",
            "patch": {
              "newText": "    event TreasuryUpdated(address indexed oldTreasury, address newTreasury);",
              "oldText": "    event TreasuryUpdated(address oldTreasury, address newTreasury);"
            },
            "title": "Index high-value event fields instead of extra lookup storage",
            "where": "VaultV2_Demo_Vault.sol:85",
            "before": "event TreasuryUpdated(address oldTreasury, address newTreasury);",
            "safety": "review",
            "newText": "    event TreasuryUpdated(address indexed oldTreasury, address newTreasury);",
            "oldText": "    event TreasuryUpdated(address oldTreasury, address newTreasury);",
            "category": "storage",
            "severity": "info",
            "lineStart": 85,
            "rationale": "Indexed events can support off-chain lookup without adding storage writes, when query patterns permit it.",
            "confidence": 0.6,
            "estL1Delta": null,
            "estL2Delta": null,
            "annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
            "estimatedGasSaved": null,
            "estimatedDataBytesSaved": null
          }
        ]
      }
    },
    "scanId": "c17a6cd1-d4a1-49ef-8d25-4291f9f647c1",
    "createdAt": "2026-06-15T21:52:59.579Z",
    "riskScore": 86,
    "contractName": "VaultV2_Demo_Vault",
    "severityCounts": {
      "low": 2,
      "high": 1,
      "info": 28,
      "medium": 2,
      "critical": 0
    },
    "executiveSummary": "Archon completed a read-only Mantle Mainnet audit of VaultV2_Demo_Vault and found 33 deterministic findings. The highest-priority issue is Incorrect Exp, with risk score 86/100 based on severity-weighted findings. The function may allow incorrect calculations of rewards due to improper handling of position ownership. 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": "9f93e64b-c6f0-4886-aee4-a18aaddd99c2",
      "title": "Incorrect Exp",
      "category": "incorrect-exp",
      "location": {
        "file": "Math.sol",
        "lineEnd": 202,
        "lineStart": 123
      },
      "severity": "high"
    },
    {
      "id": "c4f40a18-06dd-4d7d-88b2-6540ea8a958c",
      "title": "Divide Before Multiply",
      "category": "divide-before-multiply",
      "location": {
        "file": "Math.sol",
        "lineEnd": 202,
        "lineStart": 123
      },
      "severity": "medium"
    },
    {
      "id": "70b86404-9b28-452c-9842-77f5c04eb35d",
      "title": "Incorrect Equality",
      "category": "incorrect-equality",
      "location": {
        "file": "VaultV2_Demo_Vault.sol",
        "lineEnd": 400,
        "lineStart": 379
      },
      "severity": "medium"
    },
    {
      "id": "aa50d921-6022-44d2-86cd-ae5e4590b9bb",
      "title": "Timestamp",
      "category": "timestamp",
      "location": {
        "file": "VaultV2_Demo_Vault.sol",
        "lineEnd": 400,
        "lineStart": 379
      },
      "severity": "low"
    },
    {
      "id": "33817692-da1d-4aaa-a7da-779b7b4e19c4",
      "title": "Timestamp",
      "category": "timestamp",
      "location": {
        "file": "VaultV2_Demo_Vault.sol",
        "lineEnd": 253,
        "lineStart": 206
      },
      "severity": "low"
    },
    {
      "id": "49033ae9-89ec-49e4-b03b-62c7ff3dba62",
      "title": "Assembly",
      "category": "assembly",
      "location": {
        "file": "Address.sol",
        "lineEnd": 158,
        "lineStart": 146
      },
      "severity": "info"
    },
    {
      "id": "b50945ca-7205-41d6-84fb-6ff50b065651",
      "title": "Assembly",
      "category": "assembly",
      "location": {
        "file": "Strings.sol",
        "lineEnd": 44,
        "lineStart": 24
      },
      "severity": "info"
    },
    {
      "id": "a7710810-be32-4fb5-973a-bc876ce367d4",
      "title": "Assembly",
      "category": "assembly",
      "location": {
        "file": "Math.sol",
        "lineEnd": 202,
        "lineStart": 123
      },
      "severity": "info"
    },
    {
      "id": "f1329086-9292-45bb-9943-0b763a40b73e",
      "title": "Assembly",
      "category": "assembly",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 482,
        "lineStart": 465
      },
      "severity": "info"
    },
    {
      "id": "123b8b18-4860-4218-bf4b-047047198999",
      "title": "Pragma",
      "category": "pragma",
      "location": {
        "file": "VaultV2_Demo_Vault.sol",
        "lineEnd": 2,
        "lineStart": 2
      },
      "severity": "info"
    },
    {
      "id": "a8b52654-a8ac-4018-ac16-5f15c62aff6d",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "Context.sol",
        "lineEnd": 27,
        "lineStart": 25
      },
      "severity": "info"
    },
    {
      "id": "0f5bc0e6-e840-4596-b759-43e6918ae7f2",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 388,
        "lineStart": 385
      },
      "severity": "info"
    },
    {
      "id": "a8182a9d-f9bd-4517-9d16-c6cbc310f810",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 356,
        "lineStart": 346
      },
      "severity": "info"
    },
    {
      "id": "8914d9c3-1078-4d6d-9ca5-39262417fe49",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "Context.sol",
        "lineEnd": 23,
        "lineStart": 21
      },
      "severity": "info"
    },
    {
      "id": "941229e8-be41-4143-84e0-b191f28318e4",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 379,
        "lineStart": 377
      },
      "severity": "info"
    },
    {
      "id": "a2200ac1-bff3-47a4-95d9-955acae3fc74",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "ReentrancyGuard.sol",
        "lineEnd": 83,
        "lineStart": 81
      },
      "severity": "info"
    },
    {
      "id": "42730213-21e4-4593-b799-3d859d3254da",
      "title": "Dead Code",
      "category": "dead-code",
      "location": {
        "file": "ERC721.sol",
        "lineEnd": 228,
        "lineStart": 224
      },
      "severity": "info"
    },
    {
      "id": "7736325d-55cd-45ba-871e-37ba9d8bcd56",
      "title": "Solc Version",
      "category": "solc-version",
      "location": {
        "file": "Ownable.sol",
        "lineEnd": 4,
        "lineStart": 4
      },
      "severity": "info"
    },
    {
      "id": "19234509-e4c4-458f-942f-40ee667e80b0",
      "title": "Low Level Calls",
      "category": "low-level-calls",
      "location": {
        "file": "Address.sol",
        "lineEnd": 89,
        "lineStart": 83
      },
      "severity": "info"
    },
    {
      "id": "2a138746-161b-4fe4-80da-69549b74d544",
      "title": "Low Level Calls",
      "category": "low-level-calls",
      "location": {
        "file": "Address.sol",
        "lineEnd": 50,
        "lineStart": 41
      },
      "severity": "info"
    },
    {
      "id": "b39fc28d-3ad9-4b08-834f-a535a93a9f93",
      "title": "Low Level Calls",
      "category": "low-level-calls",
      "location": {
        "file": "Address.sol",
        "lineEnd": 107,
        "lineStart": 104
      },
      "severity": "info"
    },
    {
      "id": "b0865d4f-0273-45ba-8dbe-f7473290de22",
      "title": "Low Level Calls",
      "category": "low-level-calls",
      "location": {
        "file": "SafeERC20.sol",
        "lineEnd": 117,
        "lineStart": 110
      },
      "severity": "info"
    },
    {
      "id": "cac0f6df-41f7-495c-b6ac-b78383eca00a",
      "title": "Low Level Calls",
      "category": "low-level-calls",
      "location": {
        "file": "Address.sol",
        "lineEnd": 98,
        "lineStart": 95
      },
      "severity": "info"
    },
    {
      "id": "b752d85c-0500-4247-adc1-c3f9391c5a25",
      "title": "Naming Convention",
      "category": "naming-convention",
      "location": {
        "file": "IERC20Permit.sol",
        "lineEnd": 89,
        "lineStart": 89
      },
      "severity": "info"
    },
    {
      "id": "f805b48e-871f-4a03-94fa-17795f38332e",
      "title": "Unindexed Event Address",
      "category": "unindexed-event-address",
      "location": {
        "file": "VaultV2_Demo_Vault.sol",
        "lineEnd": 85,
        "lineStart": 85
      },
      "severity": "info"
    },
    {
      "id": "e8c3483d-29cc-4b0e-8a1f-bfd173546e3f",
      "title": "Unindexed Event Address",
      "category": "unindexed-event-address",
      "location": {
        "file": "Pausable.sol",
        "lineEnd": 28,
        "lineStart": 28
      },
      "severity": "info"
    },
    {
      "id": "c5e2f126-dc3d-43b0-80cd-fe2372857c81",
      "title": "Unindexed Event Address",
      "category": "unindexed-event-address",
      "location": {
        "file": "Pausable.sol",
        "lineEnd": 23,
        "lineStart": 23
      },
      "severity": "info"
    },
    {
      "id": "d780a03d-d3cd-4afe-9a65-9d7b414fc1e3",
      "title": "Cache repeated storage read",
      "category": "mantle-gas-optimizer/storage/cache-repeated-sload",
      "location": {
        "file": "VaultV2_Demo_Vault.sol",
        "lineEnd": 128,
        "lineStart": 128
      },
      "severity": "info"
    },
    {
      "id": "c79a6fd6-9211-4a69-ac30-4a8e372474fd",
      "title": "Use != 0 for unsigned non-zero checks",
      "category": "mantle-gas-optimizer/computation/nonzero-comparison",
      "location": {
        "file": "VaultV2_Demo_Vault.sol",
        "lineEnd": 225,
        "lineStart": 225
      },
      "severity": "info"
    },
    {
      "id": "87005c29-9f06-4ab5-b893-8bb520871272",
      "title": "Use != 0 for unsigned non-zero checks",
      "category": "mantle-gas-optimizer/computation/nonzero-comparison",
      "location": {
        "file": "VaultV2_Demo_Vault.sol",
        "lineEnd": 237,
        "lineStart": 237
      },
      "severity": "info"
    },
    {
      "id": "1b8f9f1b-3b3b-460e-aeb8-a4419b76e124",
      "title": "Use != 0 for unsigned non-zero checks",
      "category": "mantle-gas-optimizer/computation/nonzero-comparison",
      "location": {
        "file": "VaultV2_Demo_Vault.sol",
        "lineEnd": 243,
        "lineStart": 243
      },
      "severity": "info"
    },
    {
      "id": "46d85dce-7162-49d6-a29f-6a8ac3e59086",
      "title": "Use != 0 for unsigned non-zero checks",
      "category": "mantle-gas-optimizer/computation/nonzero-comparison",
      "location": {
        "file": "VaultV2_Demo_Vault.sol",
        "lineEnd": 407,
        "lineStart": 407
      },
      "severity": "info"
    },
    {
      "id": "630a4039-92f0-4e35-92e8-bc8380e66576",
      "title": "Index high-value event fields instead of extra lookup storage",
      "category": "mantle-gas-optimizer/storage/indexed-events-vs-storage",
      "location": {
        "file": "VaultV2_Demo_Vault.sol",
        "lineEnd": 85,
        "lineStart": 85
      },
      "severity": "info"
    }
  ]
}
source URI: ipfs://QmYT9C5JyNgQwV7YgGnPEKGgrYcKUj4tMFty8xpm8QhNem