Skip to content

Commit eeb6623

Browse files
committed
Fix: Check burn token is usdc on remote chain
1 parent c7d633f commit eeb6623

File tree

4 files changed

+20
-1
lines changed

4 files changed

+20
-1
lines changed

contracts/contracts/strategies/crosschain/AbstractCCTPIntegrator.sol

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ abstract contract AbstractCCTPIntegrator is Governable, IMessageHandlerV2 {
8282
/// @notice USDC address on local chain
8383
address public immutable usdcToken;
8484

85+
/// @notice USDC address on remote chain
86+
address public immutable peerUsdcToken;
87+
8588
/// @notice Domain ID of the chain from which messages are accepted
8689
uint32 public immutable peerDomainID;
8790

@@ -142,10 +145,15 @@ abstract contract AbstractCCTPIntegrator is Governable, IMessageHandlerV2 {
142145
uint32 peerDomainID;
143146
address peerStrategy;
144147
address usdcToken;
148+
address peerUsdcToken;
145149
}
146150

147151
constructor(CCTPIntegrationConfig memory _config) {
148152
require(_config.usdcToken != address(0), "Invalid USDC address");
153+
require(
154+
_config.peerUsdcToken != address(0),
155+
"Invalid peer USDC address"
156+
);
149157
require(
150158
_config.cctpTokenMessenger != address(0),
151159
"Invalid CCTP config"
@@ -183,6 +191,9 @@ abstract contract AbstractCCTPIntegrator is Governable, IMessageHandlerV2 {
183191
keccak256(abi.encodePacked("USDC")),
184192
"Token symbol must be USDC"
185193
);
194+
195+
// USDC address on remote chain
196+
peerUsdcToken = _config.peerUsdcToken;
186197
}
187198

188199
/**
@@ -477,7 +488,7 @@ abstract contract AbstractCCTPIntegrator is Governable, IMessageHandlerV2 {
477488
address burnToken = messageBody.extractAddress(
478489
BURN_MESSAGE_V2_BURN_TOKEN_INDEX
479490
);
480-
require(burnToken == usdcToken, "Invalid burn token");
491+
require(burnToken == peerUsdcToken, "Invalid burn token");
481492

482493
// Address of caller of depositForBurn (or depositForBurnWithCaller) on source domain
483494
sender = messageBody.extractAddress(

contracts/deploy/base/041_crosschain_strategy.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ module.exports = deployOnBase(
2424
cctpDomainIds.Ethereum,
2525
crossChainStrategyProxyAddress,
2626
addresses.base.USDC,
27+
addresses.mainnet.USDC,
2728
"CrossChainRemoteStrategy",
2829
addresses.CCTPTokenMessengerV2,
2930
addresses.CCTPMessageTransmitterV2,

contracts/deploy/deployActions.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1833,6 +1833,7 @@ const deployCrossChainMasterStrategyImpl = async (
18331833
targetDomainId,
18341834
remoteStrategyAddress,
18351835
baseToken,
1836+
peerBaseToken,
18361837
vaultAddress,
18371838
implementationName = "CrossChainMasterStrategy",
18381839
skipInitialize = false,
@@ -1860,6 +1861,7 @@ const deployCrossChainMasterStrategyImpl = async (
18601861
targetDomainId,
18611862
remoteStrategyAddress,
18621863
baseToken,
1864+
peerBaseToken,
18631865
],
18641866
]);
18651867
const dCrossChainMasterStrategy = await ethers.getContract(
@@ -1894,6 +1896,7 @@ const deployCrossChainRemoteStrategyImpl = async (
18941896
targetDomainId,
18951897
remoteStrategyAddress,
18961898
baseToken,
1899+
peerBaseToken,
18971900
implementationName = "CrossChainRemoteStrategy",
18981901
tokenMessengerAddress = addresses.CCTPTokenMessengerV2,
18991902
messageTransmitterAddress = addresses.CCTPMessageTransmitterV2,
@@ -1920,6 +1923,7 @@ const deployCrossChainRemoteStrategyImpl = async (
19201923
targetDomainId,
19211924
remoteStrategyAddress,
19221925
baseToken,
1926+
peerBaseToken,
19231927
],
19241928
]);
19251929
const dCrossChainRemoteStrategy = await ethers.getContract(
@@ -1977,6 +1981,7 @@ const deployCrossChainUnitTestStrategy = async (usdcAddress) => {
19771981
// unit tests differ from mainnet where remote strategy has a different address
19781982
dRemoteProxy.address,
19791983
usdcAddress,
1984+
usdcAddress, // Assume both are same on unit tests
19801985
cVaultProxy.address,
19811986
"CrossChainMasterStrategy",
19821987
false,
@@ -1991,6 +1996,7 @@ const deployCrossChainUnitTestStrategy = async (usdcAddress) => {
19911996
0, // Ethereum domain id
19921997
dMasterProxy.address,
19931998
usdcAddress,
1999+
usdcAddress, // Assume both are same on unit tests
19942000
"CrossChainRemoteStrategy",
19952001
tokenMessenger.address,
19962002
messageTransmitter.address,

contracts/deploy/mainnet/166_crosschain_strategy.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ module.exports = deploymentWithGovernanceProposal(
3232
// Same address for both master and remote strategy
3333
crossChainStrategyProxyAddress,
3434
addresses.mainnet.USDC,
35+
addresses.base.USDC,
3536
cVaultProxy.address,
3637
"CrossChainMasterStrategy",
3738
false,

0 commit comments

Comments
 (0)