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

feat: ccc scripts #16

Merged
merged 7 commits into from
Jul 10, 2024
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
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[submodule "lib/aave-delivery-infrastructure"]
path = lib/aave-delivery-infrastructure
url = https://github.com/bgd-labs/aave-delivery-infrastructure
branch = feat/phase-3
branch = fix/add-old-interface-gg
2 changes: 1 addition & 1 deletion lib/aave-delivery-infrastructure
Submodule aave-delivery-infrastructure updated 62 files
+56 −0 .github/workflows/certora-review-controller.yml
+4 −2 .github/workflows/certora-review-forwarder.yml
+4 −16 .github/workflows/certora-review-receiver.yml
+0 −10 Makefile
+6 −0 README.md
+14 −0 docs/overview.md
+3 −0 docs/properties.md
+5 −1 scripts/examples/Payload_SolveEmergency.s.sol
+5 −1 scripts/examples/Payload_SolveEmergencyPrePopulated.s.sol
+9 −6 security/certora/confs/verifyCrossChainControllerWithEmergency.conf
+27 −0 security/certora/confs/verifyCrossChainForwarder-encode-decode-correct.conf
+6 −7 security/certora/confs/verifyCrossChainForwarder-envelopRetry.conf
+6 −8 security/certora/confs/verifyCrossChainForwarder-invariants.conf
+7 −8 security/certora/confs/verifyCrossChainForwarder-newEnvelope.conf
+5 −7 security/certora/confs/verifyCrossChainForwarder-sanity.conf
+26 −0 security/certora/confs/verifyCrossChainForwarder-shuffle.conf
+5 −6 security/certora/confs/verifyCrossChainForwarder-simpleRules.conf
+11 −4 security/certora/confs/verifyCrossChainReceiver.conf
+4 −2 security/certora/harness/BaseReceiverPortalDummy.sol
+43 −16 security/certora/harness/CrossChainForwarderHarness.sol
+126 −0 security/certora/harness/CrossChainForwarderHarnessED.sol
+2 −10 security/certora/harness/CrossChainReceiverHarnessAbstract.sol
+0 −9 security/certora/harness/ICrossChainReceiverHarness.sol
+ security/certora/reports/aDI-Shuffle.pdf
+26 −0 security/certora/scripts/CrossChainForwarder-encode-decode-correct.sh
+1 −1 security/certora/scripts/CrossChainForwarder-newEnvelope.sh
+11 −15 security/certora/scripts/CrossChainForwarder-run-all.sh
+1 −1 security/certora/scripts/CrossChainForwarder-sanity.sh
+1 −1 security/certora/scripts/CrossChainForwarder-simpleRules.sh
+10 −8 security/certora/specs/CrossChainControllerWithEmergencyMode.spec
+113 −0 security/certora/specs/CrossChainForwarder-encode-decode-correct.spec
+6 −41 security/certora/specs/CrossChainForwarder-envelopRetry.spec
+6 −40 security/certora/specs/CrossChainForwarder-newEnvelope.spec
+85 −0 security/certora/specs/CrossChainForwarder-shuffle.spec
+6 −44 security/certora/specs/CrossChainForwarder-simpleRules.spec
+300 −473 security/certora/specs/CrossChainReceiver.spec
+6 −6 security/certora/specs/allowedBridgeAdaptersAddressSet.spec
+35 −21 security/certora/specs/base.spec
+1 −1 security/certora/specs/invariants.spec
+9 −3 src/contracts/BaseCrossChainController.sol
+4 −2 src/contracts/CrossChainController.sol
+8 −4 src/contracts/CrossChainControllerWithEmergencyMode.sol
+86 −7 src/contracts/CrossChainForwarder.sol
+27 −1 src/contracts/access_control/GranularGuardianAccessControl.sol
+25 −0 src/contracts/access_control/IGranularGuardianAccessControl.sol
+3 −1 src/contracts/interfaces/ICrossChainController.sol
+6 −2 src/contracts/interfaces/ICrossChainControllerWithEmergencyMode.sol
+37 −0 src/contracts/interfaces/ICrossChainControllerWithEmergencyModeRev2.sol
+32 −0 src/contracts/interfaces/ICrossChainForwarder.sol
+47 −0 src/contracts/libs/Utils.sol
+21 −0 src/contracts/revisions/update_to_rev_3/CrossChainController.sol
+26 −0 src/contracts/revisions/update_to_rev_3/CrossChainControllerWithEmergencyMode.sol
+19 −0 src/contracts/revisions/update_to_rev_3/IReinitialize.sol
+61 −14 tests/BaseCCForwarder.t.sol
+12 −3 tests/BaseCrossChainController.t.sol
+4 −2 tests/CrossChainController.t.sol
+113 −97 tests/CrossChainControllerWithEmergencyMode.t.sol
+38 −2 tests/CrossChainForwarder.t.sol
+78 −1 tests/Forwarder.t.sol
+6 −2 tests/access_control/GranularGuardianAccessControl.t.sol
+57 −2 tests/access_control/GranularGuardianAccessControl_int.t.sol
+18 −0 tests/libs/Math.t.sol
211 changes: 211 additions & 0 deletions scripts/ccc/DeployCCC.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

import {BaseDeployerScript, Addresses} from '../BaseDeployerScript.sol';
import {TransparentUpgradeableProxy} from 'solidity-utils/contracts/transparent-proxy/TransparentUpgradeableProxy.sol';
import {TransparentProxyFactory} from 'solidity-utils/contracts/transparent-proxy/TransparentProxyFactory.sol';
import 'adi-scripts/CCC/DeployCrossChainController.sol';

abstract contract BaseCCCNetworkDeployment is BaseDeployerScript, BaseCCCDeploy {
function _execute(Addresses memory addresses) internal override {
addresses.crossChainControllerImpl = _deployCCCImpl();
address crossChainController;
// if address is 0 means that ccc will not be emergency consumer
if (CL_EMERGENCY_ORACLE() == address(0)) {
crossChainController = TransparentProxyFactory(addresses.proxyFactory).createDeterministic(
addresses.crossChainControllerImpl,
addresses.proxyAdmin,
abi.encodeWithSelector(
CrossChainController.initialize.selector,
addresses.owner,
addresses.guardian,
new ICrossChainController.ConfirmationInput[](0),
new ICrossChainController.ReceiverBridgeAdapterConfigInput[](0),
new ICrossChainController.ForwarderBridgeAdapterConfigInput[](0),
new address[](0),
new ICrossChainController.OptimalBandwidthByChain[](0)
),
keccak256(abi.encode(SALT()))
);
} else {
crossChainController = TransparentProxyFactory(addresses.proxyFactory).createDeterministic(
addresses.crossChainControllerImpl,
addresses.proxyAdmin,
abi.encodeWithSelector(
ICrossChainControllerWithEmergencyMode.initialize.selector,
addresses.owner,
addresses.guardian,
CL_EMERGENCY_ORACLE(),
new ICrossChainController.ConfirmationInput[](0),
new ICrossChainController.ReceiverBridgeAdapterConfigInput[](0),
new ICrossChainController.ForwarderBridgeAdapterConfigInput[](0),
new address[](0),
new ICrossChainController.OptimalBandwidthByChain[](0)
),
keccak256(abi.encode(SALT()))
);

addresses.clEmergencyOracle = CL_EMERGENCY_ORACLE();
}

addresses.crossChainController = crossChainController;
}
}

contract Ethereum is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.ETHEREUM;
}
}

contract Polygon is BaseCCCNetworkDeployment {
function CL_EMERGENCY_ORACLE() internal pure override returns (address) {
return 0xDAFA1989A504c48Ee20a582f2891eeB25E2fA23F;
}

function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.POLYGON;
}
}

contract Avalanche is BaseCCCNetworkDeployment {
function CL_EMERGENCY_ORACLE() internal pure override returns (address) {
return 0x41185495Bc8297a65DC46f94001DC7233775EbEe;
}

function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.AVALANCHE;
}
}

contract Arbitrum is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.ARBITRUM;
}
}

contract Optimism is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.OPTIMISM;
}
}

contract Metis is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.METIS;
}
}

contract Binance is BaseCCCNetworkDeployment {
function CL_EMERGENCY_ORACLE() internal pure override returns (address) {
return 0xcabb46FfB38c93348Df16558DF156e9f68F9F7F1;
}

function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.BNB;
}
}

contract Base is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.BASE;
}
}

contract Gnosis is BaseCCCNetworkDeployment {
function CL_EMERGENCY_ORACLE() internal pure override returns (address) {
return 0xF937ffAeA1363e4Fa260760bDFA2aA8Fc911F84D;
}

function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.GNOSIS;
}
}

contract Zkevm is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.POLYGON_ZK_EVM;
}
}

contract Scroll is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.SCROLL;
}
}

contract Celo is BaseCCCNetworkDeployment {
function CL_EMERGENCY_ORACLE() internal pure override returns (address) {
return 0x91b21900E91CD302EBeD05E45D8f270ddAED944d;
}

function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return ChainIds.CELO;
}
}

contract Ethereum_testnet is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.ETHEREUM_SEPOLIA;
}
}

contract Polygon_testnet is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.POLYGON_AMOY;
}
}

contract Avalanche_testnet is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.AVALANCHE_FUJI;
}
}

contract Arbitrum_testnet is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.ARBITRUM_SEPOLIA;
}
}

contract Optimism_testnet is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.OPTIMISM_SEPOLIA;
}
}

contract Metis_testnet is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.METIS_TESTNET;
}
}

contract Binance_testnet is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.BNB_TESTNET;
}
}

contract Base_testnet is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.BASE_SEPOLIA;
}
}

contract Gnosis_testnet is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.GNOSIS_CHIADO;
}
}

contract Scroll_testnet is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.SCROLL_SEPOLIA;
}
}

contract Celo_testnet is BaseCCCNetworkDeployment {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.CELO_ALFAJORES;
}
}
16 changes: 16 additions & 0 deletions scripts/ccc/Remove_CCF_Approved_Senders.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

import {ICrossChainForwarder} from 'adi/interfaces/ICrossChainForwarder.sol';
import '../BaseDeployerScript.sol';

/**
* @notice This script needs to be implemented from where the senders are known
*/
abstract contract BaseRemoveCCFApprovedSenders is BaseDeployerScript {
function getSendersToRemove() public virtual returns (address[] memory);

function _execute(Addresses memory addresses) internal override {
ICrossChainForwarder(addresses.crossChainController).removeSenders(getSendersToRemove());
}
}
74 changes: 74 additions & 0 deletions scripts/ccc/Remove_CCF_Sender_Adapters.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

import '../BaseDeployerScript.sol';
import {ICrossChainForwarder} from 'adi/interfaces/ICrossChainForwarder.sol';
import {ICrossChainReceiver} from 'adi/interfaces/ICrossChainReceiver.sol';

abstract contract BaseDisableCCFAdapter is BaseDeployerScript {
function getBridgeAdaptersToDisable()
public
pure
virtual
returns (ICrossChainForwarder.BridgeAdapterToDisable[] memory);

function _execute(Addresses memory addresses) internal override {
ICrossChainForwarder(addresses.crossChainController).disableBridgeAdapters(
getBridgeAdaptersToDisable()
);
}
}

contract Ethereum_testnet is BaseDisableCCFAdapter {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.ETHEREUM_SEPOLIA;
}

function getBridgeAdaptersToDisable()
public
pure
override
returns (ICrossChainForwarder.BridgeAdapterToDisable[] memory)
{
ICrossChainForwarder.BridgeAdapterToDisable[]
memory adapters = new ICrossChainForwarder.BridgeAdapterToDisable[](1);
adapters[0].bridgeAdapter = 0xc3f2AB225a94c3c8315e52D3b2B86a2af260c804;
adapters[0].chainIds = new uint256[](1);
adapters[0].chainIds[0] = TestNetChainIds.SCROLL_SEPOLIA;
return adapters;
}
}

abstract contract BaseDisableCCRAdapter is BaseDeployerScript {
function getBridgeAdaptersToDisable()
public
pure
virtual
returns (ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[] memory);

function _execute(Addresses memory addresses) internal override {
ICrossChainReceiver(addresses.crossChainController).disallowReceiverBridgeAdapters(
getBridgeAdaptersToDisable()
);
}
}

contract Scroll_testnet is BaseDisableCCRAdapter {
function TRANSACTION_NETWORK() internal pure override returns (uint256) {
return TestNetChainIds.SCROLL_SEPOLIA;
}

function getBridgeAdaptersToDisable()
public
pure
override
returns (ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[] memory)
{
ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]
memory adapters = new ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[](1);
adapters[0].bridgeAdapter = 0x18536013913f763bc199A5b20c1d170b6058373e;
adapters[0].chainIds = new uint256[](1);
adapters[0].chainIds[0] = TestNetChainIds.ETHEREUM_SEPOLIA;
return adapters;
}
}
16 changes: 16 additions & 0 deletions scripts/ccc/Set_CCF_Approved_Senders.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

import {ICrossChainForwarder} from 'adi/interfaces/ICrossChainForwarder.sol';
import '../BaseDeployerScript.sol';

/**
* @notice This script needs to be implemented from where the senders are known
*/
abstract contract BaseSetCCFApprovedSenders is BaseDeployerScript {
function getSendersToApprove() public virtual returns (address[] memory);

function _execute(Addresses memory addresses) internal override {
ICrossChainForwarder(addresses.crossChainController).approveSenders(getSendersToApprove());
}
}
Loading
Loading