Skip to content

Commit 3d430b0

Browse files
authored
Merge pull request #116 from bgd-labs/feat/x-layer
feat: add X Layer network
2 parents 5507577 + 91e5deb commit 3d430b0

File tree

4 files changed

+110
-1
lines changed

4 files changed

+110
-1
lines changed

foundry.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"lib/solidity-utils": {
3+
"rev": "d9cfaf61dc2b498a15ff60944606a7320a6cdb58"
4+
}
5+
}

scripts/Adapters/DeployXLayer.sol

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// SPDX-License-Identifier: BUSL-1.1
2+
pragma solidity ^0.8.0;
3+
4+
import {XLayerAdapter, IBaseAdapter, XLayerAdapterArgs as XLayerAdapterArgsType} from '../../src/contracts/adapters/xLayer/xLayerAdapter.sol';
5+
import './BaseAdapterScript.sol';
6+
7+
library XLayerAdapterDeploymentHelper {
8+
struct XLayerAdapterArgs {
9+
BaseAdapterArgs baseArgs;
10+
address ovm;
11+
}
12+
13+
function getAdapterCode(
14+
XLayerAdapterArgs memory xLayerArgs
15+
) internal pure returns (bytes memory) {
16+
bytes memory creationCode = type(XLayerAdapter).creationCode;
17+
18+
return
19+
abi.encodePacked(
20+
creationCode,
21+
abi.encode(
22+
XLayerAdapterArgsType({
23+
crossChainController: xLayerArgs.baseArgs.crossChainController,
24+
ovmCrossDomainMessenger: xLayerArgs.ovm,
25+
providerGasLimit: xLayerArgs.baseArgs.providerGasLimit,
26+
trustedRemotes: xLayerArgs.baseArgs.trustedRemotes
27+
})
28+
)
29+
);
30+
}
31+
}
32+
33+
abstract contract BaseXLayerAdapter is BaseAdapterScript {
34+
function OVM() internal view virtual returns (address);
35+
36+
function _getAdapterByteCode(
37+
BaseAdapterArgs memory baseArgs
38+
) internal view override returns (bytes memory) {
39+
require(OVM() != address(0), 'Invalid OVM address');
40+
41+
return
42+
XLayerAdapterDeploymentHelper.getAdapterCode(
43+
XLayerAdapterDeploymentHelper.XLayerAdapterArgs({baseArgs: baseArgs, ovm: OVM()})
44+
);
45+
}
46+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// SPDX-License-Identifier: BUSL-1.1
2+
pragma solidity ^0.8.0;
3+
4+
import {BaseAdapter, IBaseAdapter} from '../BaseAdapter.sol';
5+
import {Errors} from '../../libs/Errors.sol';
6+
import {ChainIds} from 'solidity-utils/contracts/utils/ChainHelpers.sol';
7+
import {OpAdapter, IOpAdapter} from '../optimism/OpAdapter.sol';
8+
9+
/**
10+
* @param crossChainController address of the cross chain controller that will use this bridge adapter
11+
* @param ovmCrossDomainMessenger XLayer entry point address
12+
* @param providerGasLimit base gas limit used by the bridge adapter
13+
* @param trustedRemotes list of remote configurations to set as trusted
14+
*/
15+
struct XLayerAdapterArgs {
16+
address crossChainController;
17+
address ovmCrossDomainMessenger;
18+
uint256 providerGasLimit;
19+
IBaseAdapter.TrustedRemotesConfig[] trustedRemotes;
20+
}
21+
22+
/**
23+
* @title XLayerAdapter
24+
* @author BGD Labs
25+
* @notice XLayer bridge adapter. Used to send and receive messages cross chain between Ethereum and XLayer
26+
* @dev it uses the eth balance of CrossChainController contract to pay for message bridging as the method to bridge
27+
is called via delegate call
28+
* @dev note that this adapter can only be used for the communication path ETHEREUM -> XLAYER
29+
* @dev note that this adapter inherits from Optimism adapter and overrides only supported chain
30+
*/
31+
contract XLayerAdapter is OpAdapter {
32+
/**
33+
* @param args XLayerAdapterArgs necessary to initialize the adapter
34+
*/
35+
constructor(
36+
XLayerAdapterArgs memory args
37+
)
38+
OpAdapter(
39+
args.crossChainController,
40+
args.ovmCrossDomainMessenger,
41+
args.providerGasLimit,
42+
'XLayer native adapter',
43+
args.trustedRemotes
44+
)
45+
{}
46+
47+
/// @inheritdoc IOpAdapter
48+
function isDestinationChainIdSupported(
49+
uint256 chainId
50+
) public view virtual override returns (bool) {
51+
return chainId == ChainIds.XLAYER;
52+
}
53+
54+
/// @inheritdoc IOpAdapter
55+
function getOriginChainId() public pure virtual override returns (uint256) {
56+
return ChainIds.ETHEREUM;
57+
}
58+
}

0 commit comments

Comments
 (0)