Skip to content

Commit efaa21c

Browse files
authored
Merge pull request #108 from bgd-labs/feat/bob
feat: add BOB network
2 parents 4509fff + 45e37dc commit efaa21c

File tree

4 files changed

+104
-1
lines changed

4 files changed

+104
-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 {BobAdapter, IBaseAdapter, BobAdapterArgs as BobAdapterArgsType} from '../../src/contracts/adapters/bob/BobAdapter.sol';
5+
import './BaseAdapterScript.sol';
6+
7+
library BobAdapterDeploymentHelper {
8+
struct BobAdapterArgs {
9+
BaseAdapterArgs baseArgs;
10+
address ovm;
11+
}
12+
13+
function getAdapterCode(BobAdapterArgs memory bobArgs) internal pure returns (bytes memory) {
14+
bytes memory creationCode = type(BobAdapter).creationCode;
15+
16+
return
17+
abi.encodePacked(
18+
creationCode,
19+
abi.encode(
20+
BobAdapterArgsType({
21+
crossChainController: bobArgs.baseArgs.crossChainController,
22+
ovmCrossDomainMessenger: bobArgs.ovm,
23+
providerGasLimit: bobArgs.baseArgs.providerGasLimit,
24+
trustedRemotes: bobArgs.baseArgs.trustedRemotes
25+
})
26+
)
27+
);
28+
}
29+
}
30+
31+
abstract contract BaseBobAdapter 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+
BobAdapterDeploymentHelper.getAdapterCode(
41+
BobAdapterDeploymentHelper.BobAdapterArgs({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 bob 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 BobAdapterArgs {
16+
address crossChainController;
17+
address ovmCrossDomainMessenger;
18+
uint256 providerGasLimit;
19+
IBaseAdapter.TrustedRemotesConfig[] trustedRemotes;
20+
}
21+
22+
/**
23+
* @title BobAdapter
24+
* @author BGD Labs
25+
* @notice Bob bridge adapter. Used to send and receive messages cross chain between Ethereum and Bob
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 -> BOB
29+
* @dev note that this adapter inherits from Optimism adapter and overrides only supported chain
30+
*/
31+
contract BobAdapter is OpAdapter {
32+
/**
33+
* @param args BobAdapterArgs necessary to initialize the adapter
34+
*/
35+
constructor(
36+
BobAdapterArgs memory args
37+
)
38+
OpAdapter(
39+
args.crossChainController,
40+
args.ovmCrossDomainMessenger,
41+
args.providerGasLimit,
42+
'Bob 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.BOB;
52+
}
53+
54+
/// @inheritdoc IOpAdapter
55+
function getOriginChainId() public pure virtual override returns (uint256) {
56+
return ChainIds.ETHEREUM;
57+
}
58+
}

tests/emergency/EmergencyConsumer.t.sol

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ contract EmergencyConsumerTest is Test, EmergencyConsumer {
2626
assertEq(getChainlinkEmergencyOracle(), CL_EMERGENCY_ORACLE);
2727
}
2828

29+
/// forge-config: default.allow_internal_expect_revert = true
2930
function testUpdateCLEmergencyOracleInternalWhenAddress0() public {
3031
vm.expectRevert(bytes(Errors.INVALID_EMERGENCY_ORACLE));
3132
_updateCLEmergencyOracle(address(0));

0 commit comments

Comments
 (0)