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": "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"
}
]
}
ipfs://QmYT9C5JyNgQwV7YgGnPEKGgrYcKUj4tMFty8xpm8QhNem