Skip to content

Commit 4509fff

Browse files
authored
Merge pull request #107 from bgd-labs/feat/soneium
feat: Add soneium network
2 parents 685c97e + 6a7d088 commit 4509fff

File tree

3 files changed

+105
-1
lines changed

3 files changed

+105
-1
lines changed
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 {SoneiumAdapter, IBaseAdapter, SoneiumAdapterArgs as SoneiumAdapterArgsType} from '../../src/contracts/adapters/soneium/soneiumAdapter.sol';
5+
import './BaseAdapterScript.sol';
6+
7+
library SoneiumAdapterDeploymentHelper {
8+
struct SoneiumAdapterArgs {
9+
BaseAdapterArgs baseArgs;
10+
address ovm;
11+
}
12+
13+
function getAdapterCode(
14+
SoneiumAdapterArgs memory soneiumArgs
15+
) internal pure returns (bytes memory) {
16+
bytes memory creationCode = type(SoneiumAdapter).creationCode;
17+
18+
return
19+
abi.encodePacked(
20+
creationCode,
21+
abi.encode(
22+
SoneiumAdapterArgsType({
23+
crossChainController: soneiumArgs.baseArgs.crossChainController,
24+
ovmCrossDomainMessenger: soneiumArgs.ovm,
25+
providerGasLimit: soneiumArgs.baseArgs.providerGasLimit,
26+
trustedRemotes: soneiumArgs.baseArgs.trustedRemotes
27+
})
28+
)
29+
);
30+
}
31+
}
32+
33+
abstract contract BaseSoneiumAdapter 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+
SoneiumAdapterDeploymentHelper.getAdapterCode(
43+
SoneiumAdapterDeploymentHelper.SoneiumAdapterArgs({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 ink 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 SoneiumAdapterArgs {
16+
address crossChainController;
17+
address ovmCrossDomainMessenger;
18+
uint256 providerGasLimit;
19+
IBaseAdapter.TrustedRemotesConfig[] trustedRemotes;
20+
}
21+
22+
/**
23+
* @title SoneiumAdapter
24+
* @author BGD Labs
25+
* @notice Soneium bridge adapter. Used to send and receive messages cross chain between Ethereum and Soneium
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 -> SONEIUM
29+
* @dev note that this adapter inherits from Optimism adapter and overrides only supported chain
30+
*/
31+
contract SoneiumAdapter is OpAdapter {
32+
/**
33+
* @param args SoneiumAdapterArgs necessary to initialize the adapter
34+
*/
35+
constructor(
36+
SoneiumAdapterArgs memory args
37+
)
38+
OpAdapter(
39+
args.crossChainController,
40+
args.ovmCrossDomainMessenger,
41+
args.providerGasLimit,
42+
'Soneium 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.SONEIUM;
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)