@@ -12,11 +12,12 @@ import "../../lib/Drainable.sol";
1212import "../../lib/ERC1271.sol " ;
1313import "../../lib/MathUint.sol " ;
1414import "../../lib/SignatureUtil.sol " ;
15+ import "../gas/ChiDiscount.sol " ;
1516import "./SelectorBasedAccessManager.sol " ;
1617import "./IBlockReceiver.sol " ;
1718
1819
19- contract LoopringIOExchangeOwner is SelectorBasedAccessManager , ERC1271 , Drainable
20+ contract LoopringIOExchangeOwner is SelectorBasedAccessManager , ChiDiscount , ERC1271 , Drainable
2021{
2122 using AddressUtil for address ;
2223 using AddressUtil for address payable ;
@@ -25,8 +26,9 @@ contract LoopringIOExchangeOwner is SelectorBasedAccessManager, ERC1271, Drainab
2526 using SignatureUtil for bytes32 ;
2627 using TransactionReader for ExchangeData.Block;
2728
28- bytes4 private constant SUBMITBLOCKS_SELECTOR = IExchangeV3.submitBlocks.selector ;
29- bool public open;
29+ bytes4 private constant SUBMITBLOCKS_SELECTOR = IExchangeV3.submitBlocks.selector ;
30+ bool public open;
31+ address public immutable chiToken;
3032
3133 event SubmitBlocksAccessOpened (bool open );
3234
@@ -50,9 +52,13 @@ contract LoopringIOExchangeOwner is SelectorBasedAccessManager, ERC1271, Drainab
5052 address [] receivers;
5153 }
5254
53- constructor (address _exchange )
55+ constructor (
56+ address _exchange ,
57+ address _chiToken
58+ )
5459 SelectorBasedAccessManager (_exchange)
5560 {
61+ chiToken = _chiToken;
5662 }
5763
5864 function openAccessToSubmitBlocks (bool _open )
@@ -88,12 +94,17 @@ contract LoopringIOExchangeOwner is SelectorBasedAccessManager, ERC1271, Drainab
8894 return hasAccessTo (drainer, this .drain.selector );
8995 }
9096
97+ /// @dev chiConfig.expectedGasRefund shall be set to numDeposits * 15,000, and
98+ /// chiConfig.calldataCost shall be set to 16 * msg.data.length or calculated
99+ /// perfectly offchain (16 gas for non-zero byte, 4 gas for zero byte).
91100 function submitBlocksWithCallbacks (
92101 bool isDataCompressed ,
93102 bytes calldata data ,
94- CallbackConfig calldata config
103+ CallbackConfig calldata config ,
104+ ChiConfig calldata chiConfig
95105 )
96106 external
107+ discountCHI (chiToken, chiConfig)
97108 {
98109 if (config.blockCallbacks.length > 0 ) {
99110 require (config.receivers.length > 0 , "MISSING_RECEIVERS " );
0 commit comments