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": "08551c24-7f48-491e-bd65-89d27add17c5",
"scope": {
"pragma": "^0.8.24",
"network": "mantle-mainnet",
"lineCount": 63,
"protocols": [
"mETH",
"cmETH",
"USDY",
"Aave V3",
"Merchant Moe",
"Agni"
],
"sourceKind": "paste",
"aiReasoning": {
"hits": 17,
"total": 17,
"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-15T08:18:44.788Z",
"l2GasPriceWei": "50000100000",
"deployDataFeeMnt": "0.006395246020247076",
"deployDataFeeWei": "6395246020247076",
"calldataZeroBytes": 24,
"calibrationErrorPct": 0,
"calldataGasEstimate": 28656,
"calldataNonZeroBytes": 1785,
"creationBytecodeBytes": 1809
},
"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": "0xd7d6b27a06d59cc30ccd87bc372addb959896ab00f9ff8263077e2eab57bfaab",
"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": "Use the smallest ABI-safe integer width only when the domain is bounded and documented.",
"before": "function withdraw(uint256 amount) external {",
"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 INSUFFICIENTBALANCE(); … if (!(condition)) revert INSUFFICIENTBALANCE();",
"before": "require(balances[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(balances[msg.sender] >= amountIn, \"INSUFFICIENT_BALANCE\");",
"ruleId": "custom-errors",
"safety": "safe",
"status": "estimated",
"l2GasDelta": 120,
"l1DaDeltaWei": null
},
{
"note": "Review-only patch is not auto-applied for measurement.",
"after": "uint256 cached = balances[msg.sender]; // reuse cached value",
"before": "balances[msg.sender] read 7 times",
"ruleId": "cache-repeated-sload",
"safety": "review",
"status": "skipped",
"l2GasDelta": 600,
"l1DaDeltaWei": null
},
{
"note": "Review-only patch is not auto-applied for measurement.",
"after": "for (uint256 i = 0; i < depositors.length; unchecked { ++i; }) {",
"before": "for (uint256 i = 0; i < depositors.length; i++) {",
"ruleId": "unchecked-loop-increment",
"safety": "review",
"status": "skipped",
"l2GasDelta": 30,
"l1DaDeltaWei": null
},
{
"note": "Review-only patch is not auto-applied for measurement.",
"after": "uint256 len = array.length; for (...; i < len; ) { ... }",
"before": "for (uint256 i = 0; i < depositors.length; i++) {",
"ruleId": "loop-hygiene",
"safety": "review",
"status": "skipped",
"l2GasDelta": 100,
"l1DaDeltaWei": null
},
{
"note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
"after": "require(msg.value != 0, \"NO_VALUE\");",
"before": "require(msg.value > 0, \"NO_VALUE\");",
"ruleId": "nonzero-comparison",
"safety": "safe",
"status": "estimated",
"l2GasDelta": 3,
"l1DaDeltaWei": null
},
{
"note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
"after": "require(amountIn != 0, \"BAD_AMOUNT\");",
"before": "require(amountIn > 0, \"BAD_AMOUNT\");",
"ruleId": "nonzero-comparison",
"safety": "safe",
"status": "estimated",
"l2GasDelta": 3,
"l1DaDeltaWei": null
},
{
"note": "Foundry measurement unavailable; deterministic rule estimate retained and clearly labeled.",
"after": "for (uint256 i; i < depositors.length; i++) {",
"before": "for (uint256 i = 0; i < depositors.length; i++) {",
"ruleId": "remove-zero-init",
"safety": "safe",
"status": "estimated",
"l2GasDelta": 3,
"l1DaDeltaWei": null
}
],
"version": "archon.gasMeasurement.v1",
"measuredAt": "2026-06-15T07:27:41.549Z",
"rulesetHash": "72a68b7ce6f5e5608c921f739be80a1ee353f022dafe9e4452ede5edf06fcca2",
"contractHash": "d7d6b27a06d59cc30ccd87bc372addb959896ab00f9ff8263077e2eab57bfaab"
},
"opportunities": [
{
"id": "calldata-smaller-types",
"file": "VaultV2_Demo_Vault.sol",
"after": "Use the smallest ABI-safe integer width only when the domain is bounded and documented.",
"patch": {
"newText": " function withdraw(uint256 amount) external { // REVIEW: bounded calldata params may be packable/smaller in structs or encoded batches",
"oldText": " function withdraw(uint256 amount) external {"
},
"title": "Review calldata parameter width",
"where": "VaultV2_Demo_Vault.sol:27",
"before": "function withdraw(uint256 amount) external {",
"safety": "review",
"newText": " function withdraw(uint256 amount) external { // REVIEW: bounded calldata params may be packable/smaller in structs or encoded batches",
"oldText": " function withdraw(uint256 amount) external {",
"category": "calldata",
"severity": "low",
"lineStart": 27,
"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": "VaultV2_Demo_Vault.sol",
"after": "error INSUFFICIENTBALANCE(); … if (!(condition)) revert INSUFFICIENTBALANCE();",
"patch": {
"newText": " if (!(balances[msg.sender] >= amount)) revert INSUFFICIENTBALANCE();",
"oldText": " require(balances[msg.sender] >= amount, \"INSUFFICIENT_BALANCE\");"
},
"title": "Replace long revert string with custom error",
"where": "VaultV2_Demo_Vault.sol:28",
"before": "require(balances[msg.sender] >= amount, \"INSUFFICIENT_BALANCE\");",
"safety": "safe",
"newText": " if (!(balances[msg.sender] >= amount)) revert INSUFFICIENTBALANCE();",
"oldText": " require(balances[msg.sender] >= amount, \"INSUFFICIENT_BALANCE\");",
"category": "deployment",
"severity": "info",
"lineStart": 28,
"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": "VaultV2_Demo_Vault.sol",
"after": "error INSUFFICIENTBALANCE(); … if (!(condition)) revert INSUFFICIENTBALANCE();",
"patch": {
"newText": " if (!(balances[msg.sender] >= amountIn)) revert INSUFFICIENTBALANCE();",
"oldText": " require(balances[msg.sender] >= amountIn, \"INSUFFICIENT_BALANCE\");"
},
"title": "Replace long revert string with custom error",
"where": "VaultV2_Demo_Vault.sol:41",
"before": "require(balances[msg.sender] >= amountIn, \"INSUFFICIENT_BALANCE\");",
"safety": "safe",
"newText": " if (!(balances[msg.sender] >= amountIn)) revert INSUFFICIENTBALANCE();",
"oldText": " require(balances[msg.sender] >= amountIn, \"INSUFFICIENT_BALANCE\");",
"category": "deployment",
"severity": "info",
"lineStart": 41,
"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": "cache-repeated-sload",
"file": "VaultV2_Demo_Vault.sol",
"after": "uint256 cached = balances[msg.sender]; // reuse cached value",
"patch": {
"newText": "balances[msg.sender]",
"oldText": "balances[msg.sender]"
},
"title": "Cache repeated storage read",
"where": "VaultV2_Demo_Vault.sol:18",
"before": "balances[msg.sender] read 7 times",
"safety": "review",
"newText": "balances[msg.sender]",
"oldText": "balances[msg.sender]",
"category": "storage",
"severity": "info",
"lineStart": 18,
"rationale": "Repeated SLOADs should be cached in stack/memory when state cannot change between reads.",
"confidence": 0.7,
"estL1Delta": null,
"estL2Delta": 600,
"annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
"estimatedGasSaved": 600,
"estimatedDataBytesSaved": null
},
{
"id": "unchecked-loop-increment",
"file": "VaultV2_Demo_Vault.sol",
"after": "for (uint256 i = 0; i < depositors.length; unchecked { ++i; }) {",
"patch": {
"newText": " for (uint256 i = 0; i < depositors.length; ++i /* wrap increment in unchecked block after refactor */) {",
"oldText": " for (uint256 i = 0; i < depositors.length; i++) {"
},
"title": "Use unchecked loop increment where bounded",
"where": "VaultV2_Demo_Vault.sol:55",
"before": "for (uint256 i = 0; i < depositors.length; i++) {",
"safety": "review",
"newText": " for (uint256 i = 0; i < depositors.length; ++i /* wrap increment in unchecked block after refactor */) {",
"oldText": " for (uint256 i = 0; i < depositors.length; i++) {",
"category": "computation",
"severity": "info",
"lineStart": 55,
"rationale": "A loop counter bounded by array length cannot overflow in practical execution; unchecked removes overflow checks after manual review.",
"confidence": 0.58,
"estL1Delta": null,
"estL2Delta": 30,
"annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
"estimatedGasSaved": 30,
"estimatedDataBytesSaved": null
},
{
"id": "loop-hygiene",
"file": "VaultV2_Demo_Vault.sol",
"after": "uint256 len = array.length; for (...; i < len; ) { ... }",
"patch": {
"newText": " for (uint256 i = 0; i < depositors.length; i++) { // REVIEW: cache .length before loop and prefer ++i",
"oldText": " for (uint256 i = 0; i < depositors.length; i++) {"
},
"title": "Cache array length before loop",
"where": "VaultV2_Demo_Vault.sol:55",
"before": "for (uint256 i = 0; i < depositors.length; i++) {",
"safety": "review",
"newText": " for (uint256 i = 0; i < depositors.length; i++) { // REVIEW: cache .length before loop and prefer ++i",
"oldText": " for (uint256 i = 0; i < depositors.length; i++) {",
"category": "storage",
"severity": "info",
"lineStart": 55,
"rationale": "Caching storage array length avoids repeated SLOADs; using ++i/unchecked can reduce loop overhead.",
"confidence": 0.82,
"estL1Delta": null,
"estL2Delta": 100,
"annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
"estimatedGasSaved": 100,
"estimatedDataBytesSaved": null
},
{
"id": "nonzero-comparison",
"file": "VaultV2_Demo_Vault.sol",
"after": "require(msg.value != 0, \"NO_VALUE\");",
"patch": {
"newText": " require(msg.value != 0, \"NO_VALUE\");",
"oldText": " require(msg.value > 0, \"NO_VALUE\");"
},
"title": "Use != 0 for unsigned non-zero checks",
"where": "VaultV2_Demo_Vault.sol:16",
"before": "require(msg.value > 0, \"NO_VALUE\");",
"safety": "safe",
"newText": " require(msg.value != 0, \"NO_VALUE\");",
"oldText": " require(msg.value > 0, \"NO_VALUE\");",
"category": "computation",
"severity": "info",
"lineStart": 16,
"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": "require(amountIn != 0, \"BAD_AMOUNT\");",
"patch": {
"newText": " require(amountIn != 0, \"BAD_AMOUNT\");",
"oldText": " require(amountIn > 0, \"BAD_AMOUNT\");"
},
"title": "Use != 0 for unsigned non-zero checks",
"where": "VaultV2_Demo_Vault.sol:40",
"before": "require(amountIn > 0, \"BAD_AMOUNT\");",
"safety": "safe",
"newText": " require(amountIn != 0, \"BAD_AMOUNT\");",
"oldText": " require(amountIn > 0, \"BAD_AMOUNT\");",
"category": "computation",
"severity": "info",
"lineStart": 40,
"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": "remove-zero-init",
"file": "VaultV2_Demo_Vault.sol",
"after": "for (uint256 i; i < depositors.length; i++) {",
"patch": {
"newText": " for (uint256 i; i < depositors.length; i++) {",
"oldText": " for (uint256 i = 0; i < depositors.length; i++) {"
},
"title": "Remove redundant zero initialization",
"where": "VaultV2_Demo_Vault.sol:55",
"before": "for (uint256 i = 0; i < depositors.length; i++) {",
"safety": "safe",
"newText": " for (uint256 i; i < depositors.length; i++) {",
"oldText": " for (uint256 i = 0; i < depositors.length; i++) {",
"category": "deployment",
"severity": "info",
"lineStart": 55,
"rationale": "Solidity initializes variables to zero by default; explicit zero init adds bytecode/instructions.",
"confidence": 0.86,
"estL1Delta": 4,
"estL2Delta": 3,
"annualizedBasis": "Static deterministic estimate. Exact runtime deltas require queued Foundry snapshots with representative inputs.",
"estimatedGasSaved": 3,
"estimatedDataBytesSaved": 4
}
]
}
},
"scanId": "8349fd56-2371-4e40-bd87-ada536fe6468",
"createdAt": "2026-06-15T08:18:47.033Z",
"riskScore": 100,
"contractName": "VaultV2_Demo_Vault",
"severityCounts": {
"low": 3,
"high": 2,
"info": 10,
"medium": 1,
"critical": 1
},
"executiveSummary": "Archon completed a read-only Mantle Mainnet audit of VaultV2_Demo_Vault and found 17 deterministic findings. The highest-priority issue is Reentrancy Eth, with risk score 100/100 based on severity-weighted findings. The withdraw function is vulnerable to reentrancy attacks due to the external call occurring before the state change. 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": "53617bbe-7deb-492b-9ce8-9b98fe831758",
"title": "Reentrancy Eth",
"category": "reentrancy-eth",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 35,
"lineStart": 27
},
"severity": "high"
},
{
"id": "ffeec010-854a-48d0-8705-b85162ae65f8",
"title": "Reentrancy Events",
"category": "reentrancy-events",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 35,
"lineStart": 27
},
"severity": "low"
},
{
"id": "04afec96-a82e-4847-9aa3-0113b3cbe0fa",
"title": "Low Level Calls",
"category": "low-level-calls",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 35,
"lineStart": 27
},
"severity": "info"
},
{
"id": "cd0e73db-05fd-46f7-8018-839a29f49648",
"title": "Redundant Statements",
"category": "redundant-statements",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 48,
"lineStart": 48
},
"severity": "info"
},
{
"id": "89b4fbc4-2315-4925-a25b-476f3e95bf27",
"title": "Cache Array Length",
"category": "cache-array-length",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 55,
"lineStart": 55
},
"severity": "low"
},
{
"id": "e7c1978d-3c68-4122-9e46-2d662fe6e808",
"title": "External value transfer before balance update",
"category": "mantle-reentrancy-rule",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": null,
"lineStart": 30
},
"severity": "critical"
},
{
"id": "d9ecb8d6-85b7-4627-ad67-f0fb6df20d4d",
"title": "Missing slippage enforcement for swap output",
"category": "mantle-missing-slippage-bound",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": null,
"lineStart": 37
},
"severity": "high"
},
{
"id": "8a35e7f3-7ab5-4893-b07d-d091dcbd57a2",
"title": "Unbounded storage iteration can create runaway gas cost",
"category": "mantle-l1-data-fee-unaware-gas",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": null,
"lineStart": 55
},
"severity": "medium"
},
{
"id": "b18fa995-5fe8-441b-92e0-90eaadc81f8c",
"title": "Review calldata parameter width",
"category": "mantle-gas-optimizer/calldata/calldata-smaller-types",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 27,
"lineStart": 27
},
"severity": "low"
},
{
"id": "9e982a67-d1e2-4093-93de-238e43281d26",
"title": "Replace long revert string with custom error",
"category": "mantle-gas-optimizer/deployment/custom-errors",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 28,
"lineStart": 28
},
"severity": "info"
},
{
"id": "df412846-80ee-477c-86c7-8c4fa0dfcc2e",
"title": "Replace long revert string with custom error",
"category": "mantle-gas-optimizer/deployment/custom-errors",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 41,
"lineStart": 41
},
"severity": "info"
},
{
"id": "b5bbfec6-eac9-4ccc-b657-f5df9d54a5cf",
"title": "Cache repeated storage read",
"category": "mantle-gas-optimizer/storage/cache-repeated-sload",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 18,
"lineStart": 18
},
"severity": "info"
},
{
"id": "ded9498e-2f68-4b5a-b62e-02955c39efb7",
"title": "Use unchecked loop increment where bounded",
"category": "mantle-gas-optimizer/computation/unchecked-loop-increment",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 55,
"lineStart": 55
},
"severity": "info"
},
{
"id": "db4808bf-1603-4eb3-8033-a49d92ccc500",
"title": "Cache array length before loop",
"category": "mantle-gas-optimizer/storage/loop-hygiene",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 55,
"lineStart": 55
},
"severity": "info"
},
{
"id": "066ad761-0668-44c5-903c-6ab910e3343f",
"title": "Use != 0 for unsigned non-zero checks",
"category": "mantle-gas-optimizer/computation/nonzero-comparison",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 16,
"lineStart": 16
},
"severity": "info"
},
{
"id": "78ad397a-e805-49e0-a63d-e0560ed09f03",
"title": "Use != 0 for unsigned non-zero checks",
"category": "mantle-gas-optimizer/computation/nonzero-comparison",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 40,
"lineStart": 40
},
"severity": "info"
},
{
"id": "c390e07a-5436-425c-8d3b-2b22377d3dd5",
"title": "Remove redundant zero initialization",
"category": "mantle-gas-optimizer/deployment/remove-zero-init",
"location": {
"file": "VaultV2_Demo_Vault.sol",
"lineEnd": 55,
"lineStart": 55
},
"severity": "info"
}
]
}
ipfs://QmYZ6JNbhpCSvo5Ky2T5P3Fu2QfKNBH5X5djZZDGPWxWjX