Skip to content

Commit a6cd8d0

Browse files
authored
feat: X Layer path activation payload (#60)
1 parent 73604ac commit a6cd8d0

File tree

6 files changed

+171
-8
lines changed

6 files changed

+171
-8
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
## Raw diff
2+
3+
```json
4+
{
5+
"forwarderAdaptersByChain": {
6+
"196": {
7+
"from": "",
8+
"to": {
9+
"0x9fD570da8fFe3384F1093833D44072ea79ABdEB0": "0xEbc2c80073E4752e9A1D2e9A9bC98e8F4EeE9Be9"
10+
}
11+
}
12+
}
13+
}
14+
```
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import '../../../BaseDeployerScript.sol';
5+
import '../../../../src/templates/SimpleAddForwarderAdapter.sol';
6+
7+
abstract contract Ethereum_Activate_XLayer_Bridge_Adapter_Payload is BaseDeployerScript {
8+
function _getPayloadByteCode() internal virtual returns (bytes memory);
9+
10+
function PAYLOAD_SALT() internal pure virtual returns (string memory) {
11+
return 'Add XLayer path to a.DI';
12+
}
13+
14+
function DESTINATION_CHAIN_ID() internal pure virtual returns (uint256);
15+
16+
function _deployPayload(AddForwarderAdapterArgs memory args) internal returns (address) {
17+
bytes memory payloadCode = abi.encodePacked(_getPayloadByteCode(), abi.encode(args));
18+
19+
return _deployByteCode(payloadCode, PAYLOAD_SALT());
20+
}
21+
22+
function _execute(Addresses memory addresses) internal virtual override {
23+
Addresses memory destinationAddresses = _getAddresses(DESTINATION_CHAIN_ID());
24+
25+
_deployPayload(
26+
AddForwarderAdapterArgs({
27+
crossChainController: addresses.crossChainController,
28+
currentChainBridgeAdapter: addresses.xlayerAdapter,
29+
destinationChainBridgeAdapter: destinationAddresses.xlayerAdapter,
30+
destinationChainId: DESTINATION_CHAIN_ID()
31+
})
32+
);
33+
}
34+
}

scripts/payloads/adapters/ethereum/Network_Deployments.s.sol

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,23 @@ import {Ethereum_Sonic_Path_Payload} from '../../../../src/adapter_payloads/Ethe
1414
import {SimpleAddForwarderAdapter} from '../../../../src/templates/SimpleAddForwarderAdapter.sol';
1515
import {Ethereum_Plasma_Path_Payload} from '../../../../src/adapter_payloads/Ethereum_Plasma_Path_Payload.sol';
1616
import {Ethereum_Activate_Bob_Bridge_Adapter_Payload} from './Ethereum_Activate_Bob_Bridge_Adapter_Payload.s.sol';
17+
import {Ethereum_Activate_XLayer_Bridge_Adapter_Payload} from './Ethereum_Activate_XLayer_Bridge_Adapter_Payload.s.sol';
1718

18-
contract Ethereum is Ethereum_Activate_Bob_Bridge_Adapter_Payload {
19+
contract Ethereum is Ethereum_Activate_XLayer_Bridge_Adapter_Payload {
20+
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
21+
return ChainIds.ETHEREUM;
22+
}
23+
24+
function _getPayloadByteCode() internal pure override returns (bytes memory) {
25+
return type(SimpleAddForwarderAdapter).creationCode;
26+
}
27+
28+
function DESTINATION_CHAIN_ID() internal pure override returns (uint256) {
29+
return ChainIds.XLAYER;
30+
}
31+
}
32+
33+
contract Ethereum_Bob is Ethereum_Activate_Bob_Bridge_Adapter_Payload {
1934
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
2035
return ChainIds.ETHEREUM;
2136
}

tests/adi/ADITestBase.sol

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ import {GovernanceV3Scroll} from 'aave-address-book/GovernanceV3Scroll.sol';
2323
import {GovernanceV3Linea} from 'aave-address-book/GovernanceV3Linea.sol';
2424
import {GovernanceV3Sonic} from 'aave-address-book/GovernanceV3Sonic.sol';
2525
import {GovernanceV3Celo} from 'aave-address-book/GovernanceV3Celo.sol';
26+
import {GovernanceV3Bob} from 'aave-address-book/GovernanceV3Bob.sol';
27+
import {GovernanceV3Soneium} from 'aave-address-book/GovernanceV3Soneium.sol';
28+
import {GovernanceV3Plasma} from 'aave-address-book/GovernanceV3Plasma.sol';
29+
import {GovernanceV3Mantle} from 'aave-address-book/GovernanceV3Mantle.sol';
30+
import {GovernanceV3Ink} from 'aave-address-book/GovernanceV3Ink.sol';
2631
import {IBaseAdapter} from 'aave-address-book/common/IBaseAdapter.sol';
2732

2833
contract ADITestBase is Test {
@@ -630,7 +635,7 @@ contract ADITestBase is Test {
630635
uint256 chainId
631636
) internal pure returns (uint256[] memory) {
632637
if (chainId == ChainIds.MAINNET) {
633-
uint256[] memory chainIds = new uint256[](18);
638+
uint256[] memory chainIds = new uint256[](19);
634639
chainIds[0] = ChainIds.MAINNET;
635640
chainIds[1] = ChainIds.POLYGON;
636641
chainIds[2] = ChainIds.AVALANCHE;
@@ -649,6 +654,7 @@ contract ADITestBase is Test {
649654
chainIds[15] = ChainIds.SONEIUM;
650655
chainIds[16] = ChainIds.BOB;
651656
chainIds[17] = ChainIds.PLASMA;
657+
chainIds[18] = ChainIds.XLAYER;
652658

653659
return chainIds;
654660
} else if (chainId == ChainIds.POLYGON) {
@@ -731,15 +737,17 @@ contract ADITestBase is Test {
731737
} else if (chainId == ChainIds.SONIC) {
732738
return GovernanceV3Sonic.CROSS_CHAIN_CONTROLLER;
733739
} else if (chainId == ChainIds.MANTLE) {
734-
return 0x1283C5015B1Fb5616FA3aCb0C18e6879a02869cB;
740+
return GovernanceV3Mantle.CROSS_CHAIN_CONTROLLER;
735741
} else if (chainId == ChainIds.INK) {
736-
return 0x990B75fD1a2345D905a385dBC6e17BEe0Cb2f505;
742+
return GovernanceV3Ink.CROSS_CHAIN_CONTROLLER;
737743
} else if (chainId == ChainIds.SONEIUM) {
738-
return 0xD92b37a5114b33F668D274Fb48f23b726a854d6E;
744+
return GovernanceV3Soneium.CROSS_CHAIN_CONTROLLER;
739745
} else if (chainId == ChainIds.BOB) {
740-
return 0xBd28fb717A779e9a5E4CB8023D46C5d0d708d91f;
746+
return GovernanceV3Bob.CROSS_CHAIN_CONTROLLER;
741747
} else if (chainId == ChainIds.PLASMA) {
742-
return 0x643441742f73e270e565619be6DE5f4D55E08cd6;
748+
return GovernanceV3Plasma.CROSS_CHAIN_CONTROLLER;
749+
} else if (chainId == ChainIds.XLAYER) {
750+
return 0xFdd46155fD3DA5B907AD3B9f9395366290f58097;
743751
}
744752
revert();
745753
}

tests/payloads/ethereum/AddBobPathTest.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ pragma solidity ^0.8.0;
33

44
import 'forge-std/console.sol';
55
import {ADITestBase} from '../../adi/ADITestBase.sol';
6-
import {Addresses, Ethereum as PayloadEthereumScript} from '../../../scripts/payloads/adapters/ethereum/Network_Deployments.s.sol';
6+
import {Addresses, Ethereum_Bob as PayloadEthereumScript} from '../../../scripts/payloads/adapters/ethereum/Network_Deployments.s.sol';
77
import {SimpleAddForwarderAdapter, AddForwarderAdapterArgs} from '../../../src/templates/SimpleAddForwarderAdapter.sol';
88

99
abstract contract BaseAddBobPathPayloadTest is ADITestBase {
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// SPDX-License-Identifier: BUSL-1.1
2+
pragma solidity ^0.8.0;
3+
4+
import 'forge-std/console.sol';
5+
import {ADITestBase} from '../../adi/ADITestBase.sol';
6+
import {Addresses, Ethereum as Ethereum} from '../../../scripts/payloads/adapters/ethereum/Network_Deployments.s.sol';
7+
import {SimpleAddForwarderAdapter, AddForwarderAdapterArgs} from '../../../src/templates/SimpleAddForwarderAdapter.sol';
8+
9+
abstract contract BaseAddXLayerPathPayloadTest is ADITestBase {
10+
address internal _payload;
11+
address internal _crossChainController;
12+
13+
string internal NETWORK;
14+
uint256 internal immutable BLOCK_NUMBER;
15+
16+
constructor(string memory network, uint256 blockNumber) {
17+
NETWORK = network;
18+
BLOCK_NUMBER = blockNumber;
19+
}
20+
21+
function _getDeployedPayload() internal virtual returns (address);
22+
23+
function _getPayload() internal virtual returns (address);
24+
25+
function _getCurrentNetworkAddresses() internal virtual returns (Addresses memory);
26+
27+
function setUp() public {
28+
vm.createSelectFork(vm.rpcUrl(NETWORK), BLOCK_NUMBER);
29+
30+
Addresses memory addresses = _getCurrentNetworkAddresses();
31+
_crossChainController = addresses.crossChainController;
32+
33+
_payload = _getPayload();
34+
}
35+
36+
function test_defaultTest() public {
37+
defaultTest(
38+
string.concat('add_xlayer_path_to_adi', NETWORK),
39+
_crossChainController,
40+
address(_payload),
41+
false,
42+
vm
43+
);
44+
}
45+
46+
function test_samePayloadAddress(
47+
address currentChainAdapter,
48+
address destinationChainAdapter,
49+
address crossChainController,
50+
uint256 destinationChainId
51+
) public {
52+
SimpleAddForwarderAdapter deployedPayload = SimpleAddForwarderAdapter(_getDeployedPayload());
53+
SimpleAddForwarderAdapter predictedPayload = SimpleAddForwarderAdapter(_getPayload());
54+
55+
assertEq(predictedPayload.DESTINATION_CHAIN_ID(), deployedPayload.DESTINATION_CHAIN_ID());
56+
assertEq(predictedPayload.CROSS_CHAIN_CONTROLLER(), deployedPayload.CROSS_CHAIN_CONTROLLER());
57+
assertEq(
58+
predictedPayload.CURRENT_CHAIN_BRIDGE_ADAPTER(),
59+
deployedPayload.CURRENT_CHAIN_BRIDGE_ADAPTER()
60+
);
61+
assertEq(
62+
predictedPayload.DESTINATION_CHAIN_BRIDGE_ADAPTER(),
63+
deployedPayload.DESTINATION_CHAIN_BRIDGE_ADAPTER()
64+
);
65+
}
66+
}
67+
68+
contract EthereumAddXLayerPathPayloadTest is
69+
Ethereum,
70+
BaseAddXLayerPathPayloadTest('ethereum', 23726764)
71+
{
72+
function _getDeployedPayload() internal pure override returns (address) {
73+
return 0x90345B3f6d25684EB921c056Fad6CCf6360ceA5B;
74+
}
75+
76+
function _getCurrentNetworkAddresses() internal view override returns (Addresses memory) {
77+
return _getAddresses(TRANSACTION_NETWORK());
78+
}
79+
80+
function _getPayload() internal override returns (address) {
81+
Addresses memory currentAddresses = _getCurrentNetworkAddresses();
82+
Addresses memory destinationAddresses = _getAddresses(DESTINATION_CHAIN_ID());
83+
84+
AddForwarderAdapterArgs memory args = AddForwarderAdapterArgs({
85+
crossChainController: currentAddresses.crossChainController,
86+
currentChainBridgeAdapter: currentAddresses.xlayerAdapter, // ethereum -> xlayer bridge adapter
87+
destinationChainBridgeAdapter: destinationAddresses.xlayerAdapter, // xlayer bridge adapter
88+
destinationChainId: DESTINATION_CHAIN_ID()
89+
});
90+
return _deployPayload(args);
91+
}
92+
}

0 commit comments

Comments
 (0)