Skip to content

Commit 8224dcb

Browse files
authored
Merge pull request #31 from bgd-labs/feat/aip-activate-linea
feat: Add linea activation path payload
2 parents e30d5d0 + 5b6a711 commit 8224dcb

File tree

10 files changed

+170
-6
lines changed

10 files changed

+170
-6
lines changed

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ BASE_KEY = --private-key ${PRIVATE_KEY}
1717

1818

1919

20-
custom_ethereum := --with-gas-price 30000000000 # 53 gwei
20+
custom_ethereum := --with-gas-price 20000000000 # 53 gwei
2121
#custom_polygon := --with-gas-price 190000000000 # 560 gwei
2222
#custom_avalanche := --with-gas-price 27000000000 # 27 gwei
2323
#custom_metis-testnet := --legacy --verifier-url https://goerli.explorer.metisdevops.link/api/
@@ -280,5 +280,8 @@ deploy-ccc-shuffle-payload:
280280
deploy-zksync-path-payload:
281281
$(call deploy_fn,payloads/adapters/zksync/Network_Deployments,ethereum)
282282

283+
deploy-linea-path-payload:
284+
$(call deploy_fn,payloads/adapters/ethereum/Network_Deployments,ethereum)
285+
283286
update-owners-and-guardians:
284287
$(call deploy_fn,helpers/Update_Ownership,zksync)

deployments/linea.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"crossChainControllerImpl": "0xcb5C27e1EF28949b354904ee8D3088330D806a6f",
1010
"emergencyRegistry": "0x0000000000000000000000000000000000000000",
1111
"gnosisAdapter": "0x0000000000000000000000000000000000000000",
12-
"granularCCCGuardian": "0x8CAdaAE6cd278c7C8FBaD5d6F55Ca6129A627E10",
12+
"granularCCCGuardian": "0xc1cd6faF6e9138b4e6C21d438f9ebF2bd6F6cA16",
1313
"guardian": "0xEAF6183bAb3eFD3bF856Ac5C058431C8592394d6",
1414
"hlAdapter": "0x0000000000000000000000000000000000000000",
1515
"lineaAdapter": "0xB3332d31ECFC3ef3BF6Cda79833D11d1A53f5cE6",
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+
"59144": {
7+
"from": "",
8+
"to": {
9+
"0x8097555ffDa4176C93FEf92dF473b9763e467686": "0xB3332d31ECFC3ef3BF6Cda79833D11d1A53f5cE6"
10+
}
11+
}
12+
}
13+
}
14+
```

foundry.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ metadata="none"
1111
solc = "0.8.20"
1212
ffi = true
1313

14-
#evm_version = 'london'
1514

1615
[profile.zksync.zksync]
1716
fallback_oz = true

scripts/access_control/network_scripts/GranularGuardianNetworkDeploys.s.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ contract Linea is DeployGranularGuardian {
231231
}
232232

233233
function SOLVE_EMERGENCY_GUARDIAN() internal pure override returns (address) {
234-
return 0x0BF186764D8333a938f35e5dD124a7b9b9dccDF9; // dao guardian
234+
return 0x056E4C4E80D1D14a637ccbD0412CDAAEc5B51F4E; // dao governance guardian
235235
}
236236

237237
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
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_Lina_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 Linea 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.lineaAdapter,
29+
destinationChainBridgeAdapter: destinationAddresses.lineaAdapter,
30+
destinationChainId: DESTINATION_CHAIN_ID()
31+
})
32+
);
33+
}
34+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import './Ethereum_Activate_Lina_Bridge_Adapter_Payload.s.sol';
5+
6+
contract Ethereum is Ethereum_Activate_Lina_Bridge_Adapter_Payload {
7+
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
8+
return ChainIds.ETHEREUM;
9+
}
10+
11+
function _getPayloadByteCode() internal pure override returns (bytes memory) {
12+
return type(SimpleAddForwarderAdapter).creationCode;
13+
}
14+
15+
function DESTINATION_CHAIN_ID() internal pure override returns (uint256) {
16+
return ChainIds.LINEA;
17+
}
18+
}

tests/access_control/GranularGuardianDeployTest.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ contract CBaseGGTest is Base, BaseGGTest('base', 15896446) {
526526
}
527527
}
528528

529-
contract LineaGGTest is Linea, BaseGGTest('linea', 13215719) {
529+
contract LineaGGTest is Linea, BaseGGTest('linea', 13223742) {
530530
function CROSS_CHAIN_CONTROLLER() internal view override returns (address) {
531531
return _getAddresses(TRANSACTION_NETWORK()).crossChainController;
532532
}

tests/adi/ADITestBase.sol

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {GovernanceV3Base} from 'aave-address-book/GovernanceV3Base.sol';
1919
import {GovernanceV3Arbitrum} from 'aave-address-book/GovernanceV3Arbitrum.sol';
2020
import {GovernanceV3Gnosis} from 'aave-address-book/GovernanceV3Gnosis.sol';
2121
import {GovernanceV3Scroll} from 'aave-address-book/GovernanceV3Scroll.sol';
22+
//import {GovernanceV3Linea} from 'aave-address-book/GovernanceV3Linea.sol';
2223
import {IBaseAdapter} from 'aave-address-book/common/IBaseAdapter.sol';
2324

2425
contract ADITestBase is Test {
@@ -586,7 +587,7 @@ contract ADITestBase is Test {
586587
uint256 chainId
587588
) internal pure returns (uint256[] memory) {
588589
if (chainId == ChainIds.MAINNET) {
589-
uint256[] memory chainIds = new uint256[](10);
590+
uint256[] memory chainIds = new uint256[](11);
590591
chainIds[0] = ChainIds.MAINNET;
591592
chainIds[1] = ChainIds.POLYGON;
592593
chainIds[2] = ChainIds.AVALANCHE;
@@ -597,6 +598,7 @@ contract ADITestBase is Test {
597598
chainIds[7] = ChainIds.METIS;
598599
chainIds[8] = ChainIds.BASE;
599600
chainIds[9] = ChainIds.SCROLL;
601+
chainIds[10] = ChainIds.LINEA;
600602

601603
return chainIds;
602604
} else if (chainId == ChainIds.POLYGON) {
@@ -672,6 +674,8 @@ contract ADITestBase is Test {
672674
return GovernanceV3Gnosis.CROSS_CHAIN_CONTROLLER;
673675
} else if (chainId == ChainIds.SCROLL) {
674676
return GovernanceV3Scroll.CROSS_CHAIN_CONTROLLER;
677+
} else if (chainId == ChainIds.LINEA) {
678+
return 0x0D3f821e9741C8a8Bcac231162320251Db0cdf52;
675679
}
676680
revert();
677681
}
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 PayloadEthereumScript} from '../../../scripts/payloads/adapters/ethereum/Network_Deployments.s.sol';
7+
import '../../../src/templates/SimpleAddForwarderAdapter.sol';
8+
9+
abstract contract BaseAddLineaPathPayloadTest 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_linea_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 EthereumAddLineaPathPayloadTest is
69+
PayloadEthereumScript,
70+
BaseAddLineaPathPayloadTest('ethereum', 21386891)
71+
{
72+
function _getDeployedPayload() internal pure override returns (address) {
73+
return 0x3C2A076cD5ECbed55D8Fc0A341c14Fc808bA7fF7;
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: 0x8097555ffDa4176C93FEf92dF473b9763e467686, // ethereum -> linea bridge adapter
87+
destinationChainBridgeAdapter: 0xB3332d31ECFC3ef3BF6Cda79833D11d1A53f5cE6, // linea bridge adapter
88+
destinationChainId: DESTINATION_CHAIN_ID()
89+
});
90+
return _deployPayload(args);
91+
}
92+
}

0 commit comments

Comments
 (0)