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
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,17 @@ contract CCTPMessageTransmitterMock is ICCTPMessageTransmitter {
uint8 constant BURN_MESSAGE_V2_MESSAGE_SENDER_INDEX = 100;
uint8 constant BURN_MESSAGE_V2_HOOK_DATA_INDEX = 228;

uint16 public messageFinality = 2000;
address public messageSender;
uint32 public sourceDomain = 4294967295; // 0xFFFFFFFF

// Full message with header
struct Message {
uint32 version;
uint32 sourceDomain;
uint32 destinationDomain;
bytes32 recipient;
bytes32 messageHeaderRecipient;
bytes32 sender;
bytes32 destinationCaller;
uint32 minFinalityThreshold;
Expand Down Expand Up @@ -64,6 +69,7 @@ contract CCTPMessageTransmitterMock is ICCTPMessageTransmitter {
sourceDomain: sourceDomain,
destinationDomain: destinationDomain,
recipient: recipient,
messageHeaderRecipient: recipient,
sender: bytes32(uint256(uint160(msg.sender))),
destinationCaller: destinationCaller,
minFinalityThreshold: minFinalityThreshold,
Expand Down Expand Up @@ -96,6 +102,7 @@ contract CCTPMessageTransmitterMock is ICCTPMessageTransmitter {
sourceDomain: sourceDomain,
destinationDomain: destinationDomain,
recipient: recipient,
messageHeaderRecipient: recipient,
sender: bytes32(uint256(uint160(msg.sender))),
destinationCaller: destinationCaller,
minFinalityThreshold: minFinalityThreshold,
Expand Down Expand Up @@ -140,16 +147,30 @@ contract CCTPMessageTransmitterMock is ICCTPMessageTransmitter {
storedMsg.messageBody.length
);
} else {
recipient.handleReceiveFinalizedMessage(
storedMsg.sourceDomain,
sender,
2000, // finality threshold
messageBody
bytes32 overrideSenderBytes = bytes32(
uint256(uint160(messageSender))
);
if (messageFinality >= 2000) {
recipient.handleReceiveFinalizedMessage(
sourceDomain == 4294967295
? storedMsg.sourceDomain
: sourceDomain,
messageSender == address(0) ? sender : overrideSenderBytes,
messageFinality,
messageBody
);
} else {
recipient.handleReceiveUnfinalizedMessage(
sourceDomain == 4294967295
? storedMsg.sourceDomain
: sourceDomain,
messageSender == address(0) ? sender : overrideSenderBytes,
messageFinality,
messageBody
);
}
}

// TODO: should we also handle unfinalized messages: handleReceiveUnfinalizedMessage?

return true;
}

Expand Down Expand Up @@ -193,7 +214,7 @@ contract CCTPMessageTransmitterMock is ICCTPMessageTransmitter {
storedMsg.version,
storedMsg.sourceDomain,
storedMsg.sender,
storedMsg.recipient,
storedMsg.messageHeaderRecipient,
storedMsg.messageBody
);

Expand All @@ -215,6 +236,39 @@ contract CCTPMessageTransmitterMock is ICCTPMessageTransmitter {
return messages.length;
}

function processFrontOverrideHeader(bytes4 customHeader) external {
Message memory storedMsg = _removeFront();

bytes memory modifiedBody = abi.encodePacked(
customHeader,
storedMsg.messageBody.extractSlice(4, storedMsg.messageBody.length)
);

storedMsg.messageBody = modifiedBody;

_processMessage(storedMsg);
}

function processFrontOverrideVersion(uint32 customVersion) external {
Message memory storedMsg = _removeFront();
storedMsg.version = customVersion;
_processMessage(storedMsg);
}

function processFrontOverrideSender(address customSender) external {
Message memory storedMsg = _removeFront();
storedMsg.sender = bytes32(uint256(uint160(customSender)));
_processMessage(storedMsg);
}

function processFrontOverrideRecipient(address customRecipient) external {
Message memory storedMsg = _removeFront();
storedMsg.messageHeaderRecipient = bytes32(
uint256(uint160(customRecipient))
);
_processMessage(storedMsg);
}

function processFront() external {
Message memory storedMsg = _removeFront();
_processMessage(storedMsg);
Expand All @@ -228,4 +282,16 @@ contract CCTPMessageTransmitterMock is ICCTPMessageTransmitter {
function getMessagesLength() external view returns (uint256) {
return messages.length;
}

function overrideMessageFinality(uint16 _finality) external {
messageFinality = _finality;
}

function overrideSender(address _sender) external {
messageSender = _sender;
}

function overrideSourceDomain(uint32 _sourceDomain) external {
sourceDomain = _sourceDomain;
}
}
3 changes: 3 additions & 0 deletions contracts/test/_fixture.js
Original file line number Diff line number Diff line change
Expand Up @@ -2655,6 +2655,9 @@ async function crossChainFixtureUnit() {

const morphoVault = await ethers.getContract("MockERC4626Vault");

// Impersonate the OUSD Vault
fixture.vaultSigner = await impersonateAndFund(vault.address);

return {
...fixture,
crossChainMasterStrategy: cCrossChainMasterStrategy,
Expand Down
Loading
Loading