Skip to content

Commit

Permalink
Merge pull request #26 from bgd-labs/feat/add-base-payload-templates
Browse files Browse the repository at this point in the history
add payload templates
  • Loading branch information
sendra authored Jul 30, 2024
2 parents 55d2020 + 0362a18 commit a27e9a6
Show file tree
Hide file tree
Showing 17 changed files with 1,245 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pragma solidity ^0.8.0;

import '../../../BaseDeployerScript.sol';
import 'aave-helpers/adi/SimpleAddForwarderAdapter.sol';
import '../../../../src/templates/SimpleAddForwarderAdapter.sol';

abstract contract Base_Deploy_Add_ZkSync_Path_Payload is BaseDeployerScript {
function _getPayloadByteCode() internal virtual returns (bytes memory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import '../../../BaseDeployerScript.sol';
import {CrossChainControllerUpgradeRev3} from 'adi/revisions/update_to_rev_3/CrossChainController.sol';
import {CrossChainControllerWithEmergencyModeUpgradeRev3} from 'adi/revisions/update_to_rev_3/CrossChainControllerWithEmergencyMode.sol';
import {CCCUpdateArgs} from 'aave-helpers/adi/BaseCCCUpdate.sol';
import {CCCUpdateArgs} from '../../../../src/templates/BaseCCCUpdate.sol';

// Library to get the code of ccc revision 3 (shuffle)
library CCCUpdateDeploymentHelper {
Expand Down
2 changes: 1 addition & 1 deletion src/ccc_payloads/shuffle/ShuffleCCCUpdatePayload.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import 'aave-helpers/adi/BaseCCCUpdate.sol';
import '../../../src/templates/BaseCCCUpdate.sol';
import {IReinitialize} from 'adi/revisions/update_to_rev_3/IReinitialize.sol';
import {ICrossChainForwarder} from 'adi/interfaces/ICrossChainForwarder.sol';
import {ChainIds} from 'solidity-utils/contracts/utils/ChainHelpers.sol';
Expand Down
15 changes: 15 additions & 0 deletions src/templates/BaseADIPayloadUpdate.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;

import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';

abstract contract BaseADIPayloadUpdate is IProposalGenericExecutor {
address public immutable CROSS_CHAIN_CONTROLLER;

/**
* @param crossChainController address of the CCC of the network where payload will be deployed
*/
constructor(address crossChainController) {
CROSS_CHAIN_CONTROLLER = crossChainController;
}
}
27 changes: 27 additions & 0 deletions src/templates/BaseAdaptersUpdate.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import './BaseReceiverAdaptersUpdate.sol';
import './BaseForwarderAdaptersUpdate.sol';
import './BaseADIPayloadUpdate.sol';

/**
* @title Base payload aDI and bridge adapters update
* @author BGD Labs @bgdlabs
*/
abstract contract BaseAdaptersUpdate is
BaseReceiverAdaptersUpdate,
BaseForwarderAdaptersUpdate,
BaseADIPayloadUpdate
{
/**
* @param crossChainController address of the CCC of the network where payload will be deployed
*/
constructor(address crossChainController) BaseADIPayloadUpdate(crossChainController) {}

function execute() public virtual {
executeReceiversUpdate(CROSS_CHAIN_CONTROLLER);

executeForwardersUpdate(CROSS_CHAIN_CONTROLLER);
}
}
48 changes: 48 additions & 0 deletions src/templates/BaseCCCUpdate.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;

import {TransparentUpgradeableProxy} from 'solidity-utils/contracts/transparent-proxy/TransparentUpgradeableProxy.sol';
import {TransparentProxyFactory} from 'solidity-utils/contracts/transparent-proxy/TransparentProxyFactory.sol';
import {ProxyAdmin} from 'solidity-utils/contracts/transparent-proxy/ProxyAdmin.sol';
import './BaseADIPayloadUpdate.sol';

/**
* @param crossChainController address of the CCC of the network where payload will be deployed
* @param newCCCImpl address of the new ccc implementation
* @param proxyAdmin address of the proxy admin owner of ccc
*/
struct CCCUpdateArgs {
address crossChainController;
address crossChainControllerImpl;
address proxyAdmin;
}

/**
* @title Base payload to update CCC
* @author BGD Labs @bgdlabs
*/
abstract contract BaseCCCUpdate is BaseADIPayloadUpdate {
address public immutable NEW_CCC_IMPL;
address public immutable PROXY_ADMIN;

/*
* @param cccUpdateArgs arguments necessary to update ccc implementation
*/
constructor(
CCCUpdateArgs memory cccUpdateArgs
) BaseADIPayloadUpdate(cccUpdateArgs.crossChainController) {
NEW_CCC_IMPL = cccUpdateArgs.crossChainControllerImpl;
PROXY_ADMIN = cccUpdateArgs.proxyAdmin;
}

function getInitializeSignature() public virtual returns (bytes memory);

/// @inheritdoc IProposalGenericExecutor
function execute() external virtual override {
ProxyAdmin(PROXY_ADMIN).upgradeAndCall(
TransparentUpgradeableProxy(payable(CROSS_CHAIN_CONTROLLER)),
NEW_CCC_IMPL,
getInitializeSignature()
);
}
}
47 changes: 47 additions & 0 deletions src/templates/BaseForwarderAdaptersUpdate.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {IBaseForwarderAdaptersUpdate, ICrossChainForwarder} from './interfaces/IBaseForwarderAdaptersUpdate.sol';

/**
* @title Base forwarder payload. It has the methods to update the forwarder bridge adapters.
* @author BGD Labs @bgdlabs
*/
abstract contract BaseForwarderAdaptersUpdate is IBaseForwarderAdaptersUpdate {
/// @inheritdoc IBaseForwarderAdaptersUpdate
function getForwarderBridgeAdaptersToRemove()
public
view
virtual
returns (ICrossChainForwarder.BridgeAdapterToDisable[] memory)
{
return new ICrossChainForwarder.BridgeAdapterToDisable[](0);
}

/// @inheritdoc IBaseForwarderAdaptersUpdate
function getForwarderBridgeAdaptersToEnable()
public
view
virtual
returns (ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[] memory)
{
return new ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[](0);
}

/// @inheritdoc IBaseForwarderAdaptersUpdate
function executeForwardersUpdate(address crossChainController) public virtual {
// remove forwarding adapters
ICrossChainForwarder.BridgeAdapterToDisable[]
memory forwardersToRemove = getForwarderBridgeAdaptersToRemove();
if (forwardersToRemove.length != 0) {
ICrossChainForwarder(crossChainController).disableBridgeAdapters(forwardersToRemove);
}

// add forwarding adapters
ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[]
memory forwardersToEnable = getForwarderBridgeAdaptersToEnable();
if (forwardersToEnable.length != 0) {
ICrossChainForwarder(crossChainController).enableBridgeAdapters(forwardersToEnable);
}
}
}
48 changes: 48 additions & 0 deletions src/templates/BaseReceiverAdaptersUpdate.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {IBaseReceiverAdaptersUpdate, ICrossChainReceiver} from './interfaces/IBaseReceiverAdaptersUpdate.sol';

/**
* @title Base receiver payload. It has the methods to update the receiver bridge adapters.
* @author BGD Labs @bgdlabs
*/
abstract contract BaseReceiverAdaptersUpdate is IBaseReceiverAdaptersUpdate {
/// @inheritdoc IBaseReceiverAdaptersUpdate
function getReceiverBridgeAdaptersToRemove()
public
view
virtual
returns (ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[] memory)
{
// remove old Receiver bridge adapter
return new ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[](0);
}

/// @inheritdoc IBaseReceiverAdaptersUpdate
function getReceiverBridgeAdaptersToAllow()
public
view
virtual
returns (ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[] memory)
{
return new ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[](0);
}

/// @inheritdoc IBaseReceiverAdaptersUpdate
function executeReceiversUpdate(address crossChainController) public virtual {
// remove old Receiver bridge adapter
ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]
memory receiversToRemove = getReceiverBridgeAdaptersToRemove();
if (receiversToRemove.length != 0) {
ICrossChainReceiver(crossChainController).disallowReceiverBridgeAdapters(receiversToRemove);
}

// add receiver adapters
ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]
memory receiversToAllow = getReceiverBridgeAdaptersToAllow();
if (receiversToAllow.length != 0) {
ICrossChainReceiver(crossChainController).allowReceiverBridgeAdapters(receiversToAllow);
}
}
}
48 changes: 48 additions & 0 deletions src/templates/SimpleAddForwarderAdapter.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import './BaseAdaptersUpdate.sol';

struct AddForwarderAdapterArgs {
address crossChainController;
address currentChainBridgeAdapter;
address destinationChainBridgeAdapter;
uint256 destinationChainId;
}

/**
* @title SimpleAddForwarderAdapter
* @author BGD Labs @bgdlabs
* @dev this payload should be used when adding a new bridging path to adi
*/
contract SimpleAddForwarderAdapter is BaseAdaptersUpdate {
address public immutable CURRENT_CHAIN_BRIDGE_ADAPTER;
address public immutable DESTINATION_CHAIN_BRIDGE_ADAPTER;
uint256 public immutable DESTINATION_CHAIN_ID;

constructor(
AddForwarderAdapterArgs memory forwarderArgs
) BaseAdaptersUpdate(forwarderArgs.crossChainController) {
CURRENT_CHAIN_BRIDGE_ADAPTER = forwarderArgs.currentChainBridgeAdapter;
DESTINATION_CHAIN_BRIDGE_ADAPTER = forwarderArgs.destinationChainBridgeAdapter;
DESTINATION_CHAIN_ID = forwarderArgs.destinationChainId;
}

function getForwarderBridgeAdaptersToEnable()
public
view
override
returns (ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[] memory)
{
ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[]
memory newForwarders = new ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[](1);

newForwarders[0] = ICrossChainForwarder.ForwarderBridgeAdapterConfigInput({
currentChainBridgeAdapter: CURRENT_CHAIN_BRIDGE_ADAPTER,
destinationBridgeAdapter: DESTINATION_CHAIN_BRIDGE_ADAPTER,
destinationChainId: DESTINATION_CHAIN_ID
});

return newForwarders;
}
}
Loading

0 comments on commit a27e9a6

Please sign in to comment.