Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding tests for Crosschain_Base and PP_Connext_Crosschain - DRAFT #694

Draft
wants to merge 108 commits into
base: feature/crosschain-paymentProcessor
Choose a base branch
from
Draft
Changes from 1 commit
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
dc03239
add cross-chain module, contracts compile
leeftk Oct 30, 2024
b4b0c1f
refactor tempalte module
leeftk Nov 1, 2024
7041fa4
fix compile issues
zzzuhaibmohd Nov 4, 2024
6cd983c
add todo's for implementation contract
leeftk Nov 5, 2024
07e9b81
added notes handoff
leeftk Nov 5, 2024
a12749e
fix compile issues before everclear impl
zzzuhaibmohd Nov 5, 2024
793d8a7
add everclear poc impl
zzzuhaibmohd Nov 5, 2024
af340d1
add everclear logic impl
zzzuhaibmohd Nov 7, 2024
b565de2
remove old templates
leeftk Nov 7, 2024
7da377d
code compile issue solved
zzzuhaibmohd Nov 7, 2024
865e268
fix minor dependency
zzzuhaibmohd Nov 7, 2024
960fcd2
remove file
zzzuhaibmohd Nov 7, 2024
fc33b2e
added contract for bridge testing
leeftk Nov 8, 2024
7584abb
add tests for base contracts
leeftk Nov 8, 2024
7f20d42
fix file structure
leeftk Nov 8, 2024
5ff8e1c
uncomment bridge return value and run fmt
leeftk Nov 9, 2024
dfdb828
change contract to abstract
leeftk Nov 12, 2024
0fa97c5
add logic to PP_Connext_Crosschain
leeftk Nov 13, 2024
c06d6ec
fix inheritance chain
leeftk Nov 14, 2024
802f3b5
remove function impl
leeftk Nov 15, 2024
e0608ea
seperate interfaces
leeftk Nov 15, 2024
6909a38
remove unecessary state variables
leeftk Nov 18, 2024
54f1eea
remove unecessary state variables
leeftk Nov 18, 2024
09047da
add unit tests for Connext
zzzuhaibmohd Nov 8, 2024
d8f88b9
unit test processPayments & xcall
zzzuhaibmohd Nov 8, 2024
46df46a
fix directory structure
leeftk Nov 12, 2024
a5a10bf
unit test chainid test
zzzuhaibmohd Nov 11, 2024
5a78d5f
unit test processpayments test
zzzuhaibmohd Nov 11, 2024
ac662d5
unit test paymentId check and test
zzzuhaibmohd Nov 11, 2024
4b74169
unit test chainId and ProcessPayment
zzzuhaibmohd Nov 12, 2024
32b2c05
unit test paymentId check and test
zzzuhaibmohd Nov 12, 2024
567815e
resolve conflicts
zzzuhaibmohd Nov 13, 2024
af9df30
add unit test verify bridgeData
zzzuhaibmohd Nov 13, 2024
2c96138
add unit test process payments insufficient balance
zzzuhaibmohd Nov 13, 2024
330cbc2
add feedback comment
leeftk Nov 18, 2024
be2fc27
fixed unit tests after rebase
zzzuhaibmohd Nov 19, 2024
6928ec0
add comments and fuzz tests
leeftk Nov 20, 2024
ca1b6a8
refrator test file and add unit tests
zzzuhaibmohd Nov 20, 2024
3468df9
verify executionData & add unit tests
zzzuhaibmohd Nov 20, 2024
293db4f
add ttl validation
leeftk Nov 21, 2024
e96b3fb
refractor unit tests
zzzuhaibmohd Nov 22, 2024
45816bf
add unit tests CrosschainBase_v1
zzzuhaibmohd Nov 22, 2024
f460be3
singlePayment fuzz tests added
zzzuhaibmohd Nov 25, 2024
c251997
move balance setup internal function
zzzuhaibmohd Nov 25, 2024
01f5ff8
multiplePayment fuzz tests added
zzzuhaibmohd Nov 25, 2024
8e0b414
camelcase changes for CrossChainBase contract
zzzuhaibmohd Nov 26, 2024
6300df5
add gherking comments
leeftk Nov 27, 2024
084e594
remove unecessary variables and add comments
leeftk Nov 27, 2024
3fff1b7
add more gherkin to each test
leeftk Nov 27, 2024
8fc2cd8
add validation of ttl
leeftk Nov 27, 2024
d3d0af3
add getbridgedata and natspec
leeftk Nov 27, 2024
24ba1ce
chore: cleaned code changed event name
leeftk Nov 27, 2024
eb14eeb
add templates folder
leeftk Nov 28, 2024
167f624
emit PaymentProcessed via Interface
zzzuhaibmohd Nov 28, 2024
66f5208
chore: use exposed payment processor
zzzuhaibmohd Nov 28, 2024
bdb3c65
update gherkin for tests
leeftk Dec 9, 2024
ee1e448
add assertions to payment processor test
leeftk Dec 9, 2024
918b836
update gherkin and remove vs code settings
leeftk Dec 9, 2024
3c98fa7
feat: add cancel payments
leeftk Dec 11, 2024
855f6f2
feat:add cancel payment & test
leeftk Dec 12, 2024
d64d977
feat:add retry payments & test
leeftk Dec 12, 2024
cedbb59
fix:retry payments test
leeftk Dec 12, 2024
f1e0e69
fix:format
leeftk Dec 12, 2024
a15150f
fix:fmt and standard updates
leeftk Dec 12, 2024
c3fbdf8
chore:delete bridging folder
leeftk Dec 13, 2024
197a65a
fix:rebase onto feature
leeftk Dec 17, 2024
90615c2
chore:remove redundant files
leeftk Dec 17, 2024
8f34e00
fix:add standard to test file
leeftk Dec 17, 2024
18aa1f4
chore:remove redundant files
leeftk Dec 17, 2024
102cbd4
fix:update crosschain base format
leeftk Dec 17, 2024
b93500c
fix:delete console import
leeftk Dec 17, 2024
9bdbf8a
fix:move files to proper directories
leeftk Dec 17, 2024
d6bdba6
fix:remove impl for functions
leeftk Jan 6, 2025
bd55516
fix: fix retry failed payments
leeftk Jan 6, 2025
ed26634
chore:add comments for clarity
leeftk Jan 6, 2025
81e4275
fix:remove files
leeftk Jan 7, 2025
54e595f
add tests for unhappy paths
leeftk Jan 7, 2025
a22d76b
chore:change mapping name
leeftk Jan 7, 2025
d986ff1
remove redundant file
leeftk Jan 7, 2025
c9a9d9a
chore:rename file
leeftk Jan 7, 2025
e17ae52
add base test file
leeftk Jan 7, 2025
a3d5311
fix: remove chainid impl
zzzuhaibmohd Jan 13, 2025
6d0378c
chore: add unit tests
zzzuhaibmohd Jan 13, 2025
f4164af
chore: add unit tests
zzzuhaibmohd Jan 16, 2025
89184cd
fix: make unit tests generic input
zzzuhaibmohd Jan 16, 2025
3e76524
fix: process payment if else
zzzuhaibmohd Jan 17, 2025
3a753d4
chore: add unit tests for PP_Crosschain_v1
zzzuhaibmohd Jan 20, 2025
7adcca7
fix: add auth checks and retrypayment issue and format unit tests
zzzuhaibmohd Jan 23, 2025
238254c
fix: change test to fuzz tests, fix minor bugs
zzzuhaibmohd Jan 24, 2025
e7d0660
fix: code format invertor standard
zzzuhaibmohd Jan 24, 2025
002b3f6
fix: change the _validateTransferRequest msg.sender to client
zzzuhaibmohd Jan 27, 2025
4e5b488
fix: refractor the unit tests
zzzuhaibmohd Jan 29, 2025
d400668
chore: add unit tests for client.amountPaid functionality
zzzuhaibmohd Feb 7, 2025
a3564ea
fix: track processedIntentId fix
zzzuhaibmohd Feb 12, 2025
b4d9f77
feat: add unclaimed amount impl
zzzuhaibmohd Feb 13, 2025
85ca775
fix: format code
zzzuhaibmohd Feb 13, 2025
8a406cd
fix: follow invertor standard
zzzuhaibmohd Feb 17, 2025
baf13d7
Merge remote-tracking branch 'upstream/feature/crosschain-paymentProc…
Zitzak Feb 19, 2025
289221e
Merge remote-tracking branch 'upstream/feature/crosschain-paymentProc…
Zitzak Feb 19, 2025
377f888
refactor: Rename ERC20PaymentClientBase_v1 to v2
Zitzak Feb 19, 2025
6c351c8
refactor: adapt implementation and tests to new Payment order struct
Zitzak Feb 19, 2025
27dd77c
feat(IERC20PaymentClientBase_v2): add maxFee and TTL to payment order…
Zitzak Feb 19, 2025
e53ebb5
refactor: CrossChainBase_v1 & ICrossChainBase_v1
Zitzak Feb 19, 2025
7dfb039
refactor: PP_Crosschain_v1 & IPP_Crosschain_v1
Zitzak Feb 19, 2025
b9e7168
refactor: PP_Connext_Crosschain_v1 & IPP_Connext_Crosschain_v1
Zitzak Feb 19, 2025
a3534bb
test: WIP
Zitzak Feb 19, 2025
db1ec3e
fix: code refactor & fix unit tests
zzzuhaibmohd Feb 24, 2025
34961e1
fix: code refactor & fix unit tests
zzzuhaibmohd Feb 25, 2025
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
Prev Previous commit
Next Next commit
fix:add standard to test file
leeftk committed Dec 17, 2024
commit 8f34e00dea797a4adb418be123325c6f7665ffd7
4 changes: 3 additions & 1 deletion src/modules/paymentProcessor/abstracts/CrossChainBase_v1.sol
Original file line number Diff line number Diff line change
@@ -23,7 +23,9 @@ import {ICrossChainBase_v1} from "../interfaces/ICrosschainBase_v1.sol";
* In case of any concerns or findings, please refer to our
* Security Policy at security.inverter.network or email us
* directly!
* @author Inverter Network
* @custom:version 1.0.0
* @custom:standard-version 1.0.0
* @author 33Audits
*/
abstract contract CrossChainBase_v1 is ICrossChainBase_v1, Module_v1 {
// Storage Variables
66 changes: 39 additions & 27 deletions src/modules/paymentProcessor/abstracts/PP_Crosschain_v1.sol
Original file line number Diff line number Diff line change
@@ -39,19 +39,32 @@ import {IPP_Crosschain_v1} from "../interfaces/IPP_Crosschain_v1.sol";
* at security.inverter.network or email us directly!
*
* @author Inverter Network
* @custom:version 1.0.0
* @custom:standard-version 1.0.0
*/
abstract contract PP_Crosschain_v1 is CrossChainBase_v1, IPP_Crosschain_v1 {
/// @inheritdoc ERC165Upgradeable
function supportsInterface(bytes4 interfaceId_)
public
view
virtual
override(CrossChainBase_v1)
returns (bool)
{
return interfaceId_ == type(IPP_Crosschain_v1).interfaceId
|| super.supportsInterface(interfaceId_);
}
//--------------------------------------------------------------------------
// Events
event PaymentProcessed(uint indexed paymentId, address indexed client);
event PaymentCancelled(uint indexed paymentId, address indexed client);
event UnclaimablePaymentClaimed(
address indexed client,
address indexed token,
address indexed receiver,
uint amount
);

//--------------------------------------------------------------------------
// Constants
uint public constant VERSION = 1;

Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
/// @notice Payment ID incremented for each crosschain payment

//--------------------------------------------------------------------------
// Storage Variables
bytes public executionData;
uint public _paymentId;

/// @dev Gap for possible future upgrades.
uint[50] private __gap;

//--------------------------------------------------------------------------
// Modifiers
@@ -73,18 +86,19 @@ abstract contract PP_Crosschain_v1 is CrossChainBase_v1, IPP_Crosschain_v1 {
}

//--------------------------------------------------------------------------
// Storage
// External/Public Functions

bytes public executionData;

/// @dev Gap for possible future upgrades.
uint[50] private __gap;

//@dev paymentId
uint public _paymentId;

//--------------------------------------------------------------------------
// Virtual Functions
/// @inheritdoc ERC165Upgradeable
function supportsInterface(bytes4 interfaceId_)
public
view
virtual
override(CrossChainBase_v1)
returns (bool)
{
return interfaceId_ == type(IPP_Crosschain_v1).interfaceId
|| super.supportsInterface(interfaceId_);
}

/// @notice Process payments for a given payment client
/// @param client The payment client to process payments for
@@ -134,6 +148,9 @@ abstract contract PP_Crosschain_v1 is CrossChainBase_v1, IPP_Crosschain_v1 {
&& _validPaymentToken(order.paymentToken);
}

//--------------------------------------------------------------------------
// Internal Functions

/// @dev Validate address input.
/// @param addr Address to validate.
/// @return True if address is valid.
@@ -162,18 +179,13 @@ abstract contract PP_Crosschain_v1 is CrossChainBase_v1, IPP_Crosschain_v1 {
pure
returns (bool)
{
// _start + _cliff should be less or equal to _end
// this already implies that _start is not greater than _end
return _start + _cliff <= _end;
}

/// @dev Validate payment token input.
/// @param _token Address of the token to validate.
/// @return True if address is valid.
function _validPaymentToken(address _token) internal returns (bool) {
// Only a basic sanity check that the address supports the balanceOf() function. The corresponding
// module should ensure it's sending an ERC20.

(bool success, bytes memory data) = _token.call(
abi.encodeWithSelector(
IERC20(_token).balanceOf.selector, address(this)
Original file line number Diff line number Diff line change
@@ -2,68 +2,72 @@

pragma solidity ^0.8.20;

//--------------------------------------------------------------------------
// Imports

// External Dependencies
import {Test} from "forge-std/Test.sol";
import {Clones} from "@oz/proxy/Clones.sol";
import {IERC20Errors} from "@oz/interfaces/draft-IERC6093.sol";
import {IWETH} from "src/modules/paymentProcessor/interfaces/IWETH.sol";
import "forge-std/console2.sol";

// Internal Dependencies
import {PP_Connext_Crosschain_v1} from
"src/modules/paymentProcessor/PP_Connext_Crosschain_v1.sol";

import {CrossChainBase_v1} from
"src/modules/paymentProcessor/abstracts/CrossChainBase_v1.sol";
import {CrossChainBase_v1_Exposed} from
"test/modules/paymentProcessor/abstracts/CrossChainBase_v1_Exposed.sol";
import {IERC20PaymentClientBase_v1} from
"@lm/interfaces/IERC20PaymentClientBase_v1.sol";
import {ICrossChainBase_v1} from
"src/modules/paymentProcessor/interfaces/ICrosschainBase_v1.sol";
import {IPaymentProcessor_v1} from
"src/modules/paymentProcessor/IPaymentProcessor_v1.sol";
import {IPP_Crosschain_v1} from
"src/modules/paymentProcessor/interfaces/IPP_Crosschain_v1.sol";
import {IModule_v1, IOrchestrator_v1} from "src/modules/base/IModule_v1.sol";
import {IERC20PaymentClientBase_v1} from
"@lm/interfaces/IERC20PaymentClientBase_v1.sol";

// Tests and Mocks
import {CrossChainBase_v1_Exposed} from
"test/modules/paymentProcessor/abstracts/CrossChainBase_v1_Exposed.sol";
import {PP_Connext_Crosschain_v1_Exposed} from
"test/modules/paymentProcessor/abstracts/PP_Connext_Crosschain_v1_Exposed.sol";
// Tests and Mocks
import {Mock_EverclearPayment} from
"test/modules/paymentProcessor/abstracts/mocks/Mock_EverclearPayment.sol";
import {
IERC20PaymentClientBase_v1,
ERC20PaymentClientBaseV1Mock
} from "test/utils/mocks/modules/paymentClient/ERC20PaymentClientBaseV1Mock.sol";
import {
ModuleTest,
IModule_v1,
IOrchestrator_v1
} from "test/modules/ModuleTest.sol";
import {ModuleTest} from "test/modules/ModuleTest.sol";
import {OZErrors} from "test/utils/errors/OZErrors.sol";
import {IERC20Errors} from "@oz/interfaces/draft-IERC6093.sol";
import {IWETH} from "src/modules/paymentProcessor/interfaces/IWETH.sol";
import "forge-std/console2.sol";
import {IPP_Crosschain_v1} from
"src/modules/paymentProcessor/interfaces/IPP_Crosschain_v1.sol";

import {IModule_v1, IOrchestrator_v1} from "src/modules/base/IModule_v1.sol";

contract PP_Connext_Crosschain_v1_Test is ModuleTest {
//--------------------------------------------------------------------------
// Constants
uint constant MINTED_SUPPLY = 1000 ether;

//--------------------------------------------------------------------------
// Test Storage
PP_Connext_Crosschain_v1_Exposed public paymentProcessor;
Mock_EverclearPayment public everclearPaymentMock;
ERC20PaymentClientBaseV1Mock paymentClient;
IPP_Crosschain_v1 public crossChainBase;

IWETH public weth;

uint public chainId;

// Add these as contract state variables
// Bridge-related storage
address public mockConnextBridge;
address public mockEverClearSpoke;
address public mockWeth;

// Execution data storage
uint maxFee = 0;
uint ttl = 1;
bytes executionData;
bytes invalidExecutionData;

uint constant MINTED_SUPPLY = 1000 ether;
//--------------------------------------------------------------------------
// Setup Function

function setUp() public {
// Set chain ID for test environment
@@ -104,6 +108,9 @@ contract PP_Connext_Crosschain_v1_Test is ModuleTest {
_setupInitialBalances();
}

//--------------------------------------------------------------------------
// Initialization Tests

/* Test initialization
*/
function testInit() public override(ModuleTest) {
@@ -138,6 +145,9 @@ contract PP_Connext_Crosschain_v1_Test is ModuleTest {
paymentProcessor.init(_orchestrator, _METADATA, abi.encode(1));
}

//--------------------------------------------------------------------------
// Payment Processing Tests

/* Test single payment processing
└── Given single valid payment order
└── When processing cross-chain payments
@@ -267,6 +277,9 @@ contract PP_Connext_Crosschain_v1_Test is ModuleTest {
);
}

//--------------------------------------------------------------------------
// Error Case Tests

/* Test invalid execution data
└── When processing with invalid Connext parameters
└── Then it should revert
@@ -628,7 +641,8 @@ contract PP_Connext_Crosschain_v1_Test is ModuleTest {
);
}

// Helper functions
//--------------------------------------------------------------------------
// Helper Functions

function _setupSinglePayment(address _recipient, uint _amount)
internal