generated from bgd-labs/bgd-forge-template
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #26 from bgd-labs/feat/add-base-payload-templates
add payload templates
- Loading branch information
Showing
17 changed files
with
1,245 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
Oops, something went wrong.