Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gas-snapshot
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
VerifyAlwaysApprovedAccountStatusAtTimeTest:testAccountStatusAtTime(address,uint256) (runs: 256, μ: 66486, ~: 66486)
18 changes: 18 additions & 0 deletions src/concrete/VerifyAlwaysApproved.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// SPDX-License-Identifier: LicenseRef-DCL-1.0
// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd
pragma solidity =0.8.25;

import {IVerifyV1, VerifyStatus, VERIFY_STATUS_APPROVED} from "../interface/IVerifyV1.sol";

/// @title VerifyAlwaysApproved
/// @notice A concrete implementation of `IVerifyV1` that always returns
/// `VERIFY_STATUS_APPROVED` for any account at any timestamp. This can generally
/// be used as a "no-op" verifier that approves all accounts without any
/// conditions or checks.
contract VerifyAlwaysApproved is IVerifyV1 {
/// Always returns `VERIFY_STATUS_APPROVED` for any account.
/// @inheritdoc IVerifyV1
function accountStatusAtTime(address, uint256) external pure override returns (VerifyStatus) {
return VERIFY_STATUS_APPROVED;
}
}
21 changes: 21 additions & 0 deletions test/src/concrete/VerifyAlwaysApproved.accountStatusAtTime.t.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// SPDX-License-Identifier: LicenseRef-DCL-1.0
// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd
pragma solidity =0.8.25;

import {Test} from "forge-std/Test.sol";

import {VerifyAlwaysApproved} from "src/concrete/VerifyAlwaysApproved.sol";
import {VerifyStatus, VERIFY_STATUS_APPROVED} from "src/interface/IVerifyV1.sol";

contract VerifyAlwaysApprovedAccountStatusAtTimeTest is Test {
function testAccountStatusAtTime(address account, uint256 timestamp) external {
VerifyAlwaysApproved verifyAlwaysApproved = new VerifyAlwaysApproved();

VerifyStatus status = verifyAlwaysApproved.accountStatusAtTime(account, timestamp);
assertEq(
VerifyStatus.unwrap(status),
VerifyStatus.unwrap(VERIFY_STATUS_APPROVED),
"VerifyAlwaysApproved.accountStatusAtTime should always return VERIFY_STATUS_APPROVED"
);
}
}
Comment on lines +10 to +21
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

LGTM! Good test coverage with a minor optimization opportunity.

The test effectively uses property-based testing with fuzzed inputs to verify the contract always returns the expected status. The assertion logic is correct and includes a helpful error message.

Consider optimizing by using a shared contract instance:

contract VerifyAlwaysApprovedAccountStatusAtTimeTest is Test {
+    VerifyAlwaysApproved verifyAlwaysApproved;
+    
+    function setUp() external {
+        verifyAlwaysApproved = new VerifyAlwaysApproved();
+    }
+
    function testAccountStatusAtTime(address account, uint256 timestamp) external {
-        VerifyAlwaysApproved verifyAlwaysApproved = new VerifyAlwaysApproved();
-
        VerifyStatus status = verifyAlwaysApproved.accountStatusAtTime(account, timestamp);
        assertEq(
            VerifyStatus.unwrap(status),
            VerifyStatus.unwrap(VERIFY_STATUS_APPROVED),
            "VerifyAlwaysApproved.accountStatusAtTime should always return VERIFY_STATUS_APPROVED"
        );
    }
}

This would reduce gas costs and improve test efficiency by reusing the same contract instance.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
contract VerifyAlwaysApprovedAccountStatusAtTimeTest is Test {
function testAccountStatusAtTime(address account, uint256 timestamp) external {
VerifyAlwaysApproved verifyAlwaysApproved = new VerifyAlwaysApproved();
VerifyStatus status = verifyAlwaysApproved.accountStatusAtTime(account, timestamp);
assertEq(
VerifyStatus.unwrap(status),
VerifyStatus.unwrap(VERIFY_STATUS_APPROVED),
"VerifyAlwaysApproved.accountStatusAtTime should always return VERIFY_STATUS_APPROVED"
);
}
}
contract VerifyAlwaysApprovedAccountStatusAtTimeTest is Test {
VerifyAlwaysApproved verifyAlwaysApproved;
function setUp() external {
verifyAlwaysApproved = new VerifyAlwaysApproved();
}
function testAccountStatusAtTime(address account, uint256 timestamp) external {
VerifyStatus status = verifyAlwaysApproved.accountStatusAtTime(account, timestamp);
assertEq(
VerifyStatus.unwrap(status),
VerifyStatus.unwrap(VERIFY_STATUS_APPROVED),
"VerifyAlwaysApproved.accountStatusAtTime should always return VERIFY_STATUS_APPROVED"
);
}
}
🤖 Prompt for AI Agents
In test/src/concrete/VerifyAlwaysApproved.accountStatusAtTime.t.sol around lines
10 to 21, the test creates a new VerifyAlwaysApproved contract instance inside
the test function for each call, which is inefficient. To optimize, declare a
single VerifyAlwaysApproved contract instance as a state variable initialized
once before running tests, and reuse this instance in the
testAccountStatusAtTime function to reduce gas costs and improve test
efficiency.