Skip to content

Commit 685c97e

Browse files
authored
Merge pull request #106 from bgd-labs/feat/ink
feat: Add Ink native adapter
2 parents 9a79f79 + 14355a4 commit 685c97e

File tree

3 files changed

+103
-1
lines changed

3 files changed

+103
-1
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// SPDX-License-Identifier: BUSL-1.1
2+
pragma solidity ^0.8.0;
3+
4+
import {InkAdapter, IBaseAdapter, InkAdapterArgs as InkAdapterArgsType} from '../../src/contracts/adapters/ink/InkAdapter.sol';
5+
import './BaseAdapterScript.sol';
6+
7+
library InkAdapterDeploymentHelper {
8+
struct InkAdapterArgs {
9+
BaseAdapterArgs baseArgs;
10+
address ovm;
11+
}
12+
13+
function getAdapterCode(InkAdapterArgs memory inkArgs) internal pure returns (bytes memory) {
14+
bytes memory creationCode = type(InkAdapter).creationCode;
15+
16+
return
17+
abi.encodePacked(
18+
creationCode,
19+
abi.encode(
20+
InkAdapterArgsType({
21+
crossChainController: inkArgs.baseArgs.crossChainController,
22+
ovmCrossDomainMessenger: inkArgs.ovm,
23+
providerGasLimit: inkArgs.baseArgs.providerGasLimit,
24+
trustedRemotes: inkArgs.baseArgs.trustedRemotes
25+
})
26+
)
27+
);
28+
}
29+
}
30+
31+
abstract contract BaseInkAdapter is BaseAdapterScript {
32+
function OVM() internal view virtual returns (address);
33+
34+
function _getAdapterByteCode(
35+
BaseAdapterArgs memory baseArgs
36+
) internal view override returns (bytes memory) {
37+
require(OVM() != address(0), 'Invalid OVM address');
38+
39+
return
40+
InkAdapterDeploymentHelper.getAdapterCode(
41+
InkAdapterDeploymentHelper.InkAdapterArgs({baseArgs: baseArgs, ovm: OVM()})
42+
);
43+
}
44+
}
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 InkAdapterArgs {
16+
address crossChainController;
17+
address ovmCrossDomainMessenger;
18+
uint256 providerGasLimit;
19+
IBaseAdapter.TrustedRemotesConfig[] trustedRemotes;
20+
}
21+
22+
/**
23+
* @title InkAdapter
24+
* @author BGD Labs
25+
* @notice Ink bridge adapter. Used to send and receive messages cross chain between Ethereum and Ink
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 -> INK
29+
* @dev note that this adapter inherits from Optimism adapter and overrides only supported chain
30+
*/
31+
contract InkAdapter is OpAdapter {
32+
/**
33+
* @param args InkAdapterArgs necessary to initialize the adapter
34+
*/
35+
constructor(
36+
InkAdapterArgs memory args
37+
)
38+
OpAdapter(
39+
args.crossChainController,
40+
args.ovmCrossDomainMessenger,
41+
args.providerGasLimit,
42+
'Ink 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.INK;
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)