1010
1111pragma solidity ^ 0.8.0 ;
1212
13- import "./interfaces/ISafeBridge .sol " ;
13+ import "./SafeBridgeSenderToEthereum .sol " ;
1414import "./interfaces/IFastBridgeSender.sol " ;
1515import "./interfaces/IFastBridgeReceiver.sol " ;
1616
1717/**
1818 * Fast Bridge Sender to Ethereum from Arbitrum
1919 * Counterpart of `FastBridgeReceiverOnEthereum`
2020 */
21- contract FastBridgeSenderToEthereum is IFastBridgeSender {
21+ contract FastBridgeSenderToEthereum is SafeBridgeSenderToEthereum , IFastBridgeSender {
2222 // ************************************* //
2323 // * Storage * //
2424 // ************************************* //
2525
2626 address public governor;
27- ISafeBridge public safebridge;
2827 IFastBridgeReceiver public fastBridgeReceiver;
2928 address public fastSender;
3029
@@ -47,13 +46,8 @@ contract FastBridgeSenderToEthereum is IFastBridgeSender {
4746 _;
4847 }
4948
50- constructor (
51- address _governor ,
52- ISafeBridge _safebridge ,
53- IFastBridgeReceiver _fastBridgeReceiver
54- ) {
49+ constructor (address _governor , IFastBridgeReceiver _fastBridgeReceiver ) SafeBridgeSenderToEthereum () {
5550 governor = _governor;
56- safebridge = _safebridge;
5751 fastBridgeReceiver = _fastBridgeReceiver;
5852 }
5953
@@ -72,9 +66,9 @@ contract FastBridgeSenderToEthereum is IFastBridgeSender {
7266 require (msg .sender == fastSender, "Access not allowed: Fast Sender only. " );
7367
7468 // Encode the receiver address with the function signature + arguments i.e calldata
75- bytes memory encodedData = abi.encode (_receiver, _calldata);
69+ bytes memory messageData = abi.encode (_receiver, _calldata);
7670
77- emit OutgoingMessage (_receiver, keccak256 (encodedData ), encodedData );
71+ emit OutgoingMessage (_receiver, keccak256 (messageData ), messageData );
7872 }
7973
8074 /**
@@ -89,17 +83,15 @@ contract FastBridgeSenderToEthereum is IFastBridgeSender {
8983 * @param _receiver The L1 contract address who will receive the calldata
9084 * @param _calldata The receiving domain encoded message data.
9185 */
92- function sendSafe (address _receiver , bytes memory _calldata ) external payable {
93- // The safe bridge sends the encoded data to the FastBridgeReceiverOnEthereum
94- // in order for the FastBridgeReceiverOnEthereum to resolve any potential
95- // challenges and then forwards the message to the actual
96- // intended recipient encoded in `data`
97- // TODO: For this encodedData needs to be wrapped into an
98- // IFastBridgeReceiver function.
99- // TODO: add access checks for this on the FastBridgeReceiverOnEthereum.
100- // TODO: how much ETH should be provided for bridging? add an ISafeBridge.bridgingCost()
101- bytes memory encodedData = abi.encode (_receiver, _calldata);
102- safebridge.sendSafe {value: msg .value }(address (fastBridgeReceiver), encodedData);
86+ function sendSafeFallback (address _receiver , bytes memory _calldata ) external payable override {
87+ bytes memory messageData = abi.encode (_receiver, _calldata);
88+
89+ // Safe Bridge message envelope
90+ bytes4 methodSelector = IFastBridgeReceiver.verifyAndRelaySafe.selector ;
91+ bytes memory safeMessageData = abi.encodeWithSelector (methodSelector, keccak256 (messageData), messageData);
92+
93+ // TODO: how much ETH should be provided for bridging? add an ISafeBridgeSender.bridgingCost() if needed
94+ _sendSafe (address (fastBridgeReceiver), safeMessageData);
10395 }
10496
10597 // ************************ //
0 commit comments