Skip to content

Commit c373975

Browse files
committed
added a batch tx caller service
1 parent b7f36ba commit c373975

File tree

10 files changed

+163
-124
lines changed

10 files changed

+163
-124
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// SPDX-License-Identifier: GPL-3.0-or-later
2+
pragma solidity 0.7.3;
3+
pragma experimental ABIEncoderV2;
4+
5+
/**
6+
* @title BatchTxCaller
7+
* @notice Utility that executes an array of provided transactions.
8+
*/
9+
contract BatchTxCaller {
10+
event TransactionFailed(address indexed destination, uint256 index, bytes data, bytes reason);
11+
12+
/**
13+
* @notice Executes all transactions marked enabled.
14+
* If any transaction in the transaction list reverts, it returns false.
15+
*/
16+
function executeAll(
17+
address[] memory destinations,
18+
bytes[] memory data,
19+
uint256[] memory values
20+
) external payable returns (bool) {
21+
bool exeuctionSuccess = true;
22+
23+
for (uint256 i = 0; i < destinations.length; i++) {
24+
(bool result, bytes memory reason) = destinations[i].call{value: values[i]}(data[i]);
25+
if (!result) {
26+
emit TransactionFailed(destinations[i], i, data[i], reason);
27+
exeuctionSuccess = false;
28+
}
29+
}
30+
31+
return exeuctionSuccess;
32+
}
33+
}

contracts/_utilities/BatchTxExecutor.sol

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,20 @@ contract BatchTxExecutor is Ownable {
2323

2424
Transaction[] public transactions;
2525

26+
/**
27+
* @notice Computes and returns the total value for all enabled transactions.
28+
*/
29+
function totalValue() external view returns (uint256) {
30+
uint256 fee;
31+
for (uint256 i = 0; i < transactions.length; i++) {
32+
Transaction storage t = transactions[i];
33+
if (t.enabled) {
34+
fee += t.value;
35+
}
36+
}
37+
return fee;
38+
}
39+
2640
/**
2741
* @notice Executes all transactions marked enabled.
2842
* If any transaction in the transaction list reverts, it returns false.

helpers/contracts.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const ContractABIPaths = {
2626
XCAmple: 'contracts/satellite-chain/xc-ampleforth',
2727
XCAmpleController: 'contracts/satellite-chain/xc-ampleforth',
2828
BatchTxExecutor: 'contracts/_utilities',
29+
BatchTxCaller: 'contracts/_utilities',
2930

3031
TokenVault: 'contracts/base-chain',
3132

sdk/deployments/dev1RopstenBaseChain.json

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -336,22 +336,12 @@
336336
"blockNumber": 10359882
337337
},
338338
"batchRebaseReporter": {
339-
"address": "0x5F4241DC1e35D88ABE8C588B3EDD165AdF1F27fB",
339+
"address": "0x0b9116D4d08C4D3842C2818F4A03419d230B1370",
340340
"abi": [
341-
"event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)",
342341
"event TransactionFailed(address indexed destination, uint256 index, bytes data, bytes reason)",
343-
"function addTransaction(address destination, uint256 value, bytes data)",
344-
"function checkExecution(uint256 index) payable returns (bool)",
345-
"function executeAll() payable returns (bool)",
346-
"function owner() view returns (address)",
347-
"function removeTransaction(uint256 index)",
348-
"function renounceOwnership()",
349-
"function setTransactionEnabled(uint256 index, bool enabled)",
350-
"function transactions(uint256) view returns (bool enabled, address destination, uint256 value, bytes data)",
351-
"function transactionsSize() view returns (uint256)",
352-
"function transferOwnership(address newOwner)"
342+
"function executeAll(address[] destinations, bytes[] data, uint256[] values) payable returns (bool)"
353343
],
354-
"hash": "0x255c39c2c7084c934bd764bc82ad5d316b57068a387845960d775c01c0809209",
355-
"blockNumber": 10542785
344+
"hash": "0x52d27c364e745da890655c957294a415dba03435fe6255e42fcb2ce7a279674a",
345+
"blockNumber": 10909164
356346
}
357-
}
347+
}

sdk/deployments/dev2GoerliBaseChain.json

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -245,22 +245,12 @@
245245
"blockNumber": 5031511
246246
},
247247
"batchRebaseReporter": {
248-
"address": "0x36ebc6ff9aDb001Ac216bA9F55dcd384B8cFeC6A",
248+
"address": "0xFECBF6202508943fd4d169c4aBC5D7C9f9EfE221",
249249
"abi": [
250-
"event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)",
251250
"event TransactionFailed(address indexed destination, uint256 index, bytes data, bytes reason)",
252-
"function addTransaction(address destination, uint256 value, bytes data)",
253-
"function checkExecution(uint256 index) payable returns (bool)",
254-
"function executeAll() payable returns (bool)",
255-
"function owner() view returns (address)",
256-
"function removeTransaction(uint256 index)",
257-
"function renounceOwnership()",
258-
"function setTransactionEnabled(uint256 index, bool enabled)",
259-
"function transactions(uint256) view returns (bool enabled, address destination, uint256 value, bytes data)",
260-
"function transactionsSize() view returns (uint256)",
261-
"function transferOwnership(address newOwner)"
251+
"function executeAll(address[] destinations, bytes[] data, uint256[] values) payable returns (bool)"
262252
],
263-
"hash": "0x0deba6485ddef65b18e70b03f4eca3a66c5b29df28dea3da825d6eac5ccb914d",
264-
"blockNumber": 5060206
253+
"hash": "0xff9863647fcb87f8c54e70bfc955172effc86198451a362e3b8ad9faed9139b7",
254+
"blockNumber": 5387916
265255
}
266256
}

sdk/deployments/prodBscSatChain.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@
111111
},
112112
"isBaseChain": false,
113113
"chainBridge/bridge": {
114-
"address": "0x223fafbc2cA53A75CcfF5B2369128d3d1a828F36",
114+
"address": "0xFd55eBc7bBde603A048648C6eAb8775c997C1001",
115115
"abi": [
116116
"constructor(uint8 chainID, address[] initialRelayers, uint256 initialRelayerThreshold, uint256 fee, uint256 expiry)",
117117
"event Deposit(uint8 indexed destinationChainID, bytes32 indexed resourceID, uint64 indexed depositNonce)",
@@ -136,21 +136,29 @@
136136
"function _proposals(uint72, bytes32) view returns (bytes32 _resourceID, bytes32 _dataHash, uint8 _status, uint256 _proposedBlock)",
137137
"function _relayerThreshold() view returns (uint256)",
138138
"function _resourceIDToHandlerAddress(bytes32) view returns (address)",
139+
"function _specialFee() view returns (uint256)",
140+
"function _specialFeeChainID() view returns (uint8)",
139141
"function _totalProposals() view returns (uint256)",
140142
"function _totalRelayers() view returns (uint256)",
143+
"function _wtokenAddress() view returns (address)",
141144
"function adminAddRelayer(address relayerAddress)",
142145
"function adminChangeFee(uint256 newFee)",
143146
"function adminChangeRelayerThreshold(uint256 newThreshold)",
147+
"function adminChangeSpecialFee(uint256 newFee, uint8 chainID)",
144148
"function adminPauseTransfers()",
145149
"function adminRemoveRelayer(address relayerAddress)",
146150
"function adminSetBurnable(address handlerAddress, address tokenAddress)",
147151
"function adminSetGenericResource(address handlerAddress, bytes32 resourceID, address contractAddress, bytes4 depositFunctionSig, uint256 depositFunctionDepositerOffset, bytes4 executeFunctionSig)",
148152
"function adminSetResource(address handlerAddress, bytes32 resourceID, address tokenAddress)",
149153
"function adminUnpauseTransfers()",
154+
"function adminUpdateBridgeAddress(address handlerAddress, address newBridgeAddress)",
150155
"function adminWithdraw(address handlerAddress, address tokenAddress, address recipient, uint256 amountOrTokenID)",
151156
"function cancelProposal(uint8 chainID, uint64 depositNonce, bytes32 dataHash)",
152157
"function deposit(uint8 destinationChainID, bytes32 resourceID, bytes data) payable",
158+
"function depositETH(uint8 destinationChainID, bytes32 resourceID, bytes data) payable",
153159
"function executeProposal(uint8 chainID, uint64 depositNonce, bytes data, bytes32 resourceID)",
160+
"function getFee(uint8 destinationChainID) view returns (uint256)",
161+
"function getFees() view returns (uint256, uint256, uint8)",
154162
"function getProposal(uint8 originChainID, uint64 depositNonce, bytes32 dataHash) view returns (tuple(bytes32 _resourceID, bytes32 _dataHash, address[] _yesVotes, address[] _noVotes, uint8 _status, uint256 _proposedBlock))",
155163
"function getRoleAdmin(bytes32 role) view returns (bytes32)",
156164
"function getRoleMember(bytes32 role, uint256 index) view returns (address)",

sdk/deployments/prodEthereumBaseChain.json

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@
154154
]
155155
},
156156
"chainBridge/bridge": {
157-
"address": "0xbD515E41DF155112Cc883f8981CB763a286261be",
157+
"address": "0xa2A22B46B8df38cd7C55E6bf32Ea5a32637Cf2b1",
158158
"abi": [
159159
"constructor(uint8 chainID, address[] initialRelayers, uint256 initialRelayerThreshold, uint256 fee, uint256 expiry)",
160160
"event Deposit(uint8 indexed destinationChainID, bytes32 indexed resourceID, uint64 indexed depositNonce)",
@@ -179,21 +179,29 @@
179179
"function _proposals(uint72, bytes32) view returns (bytes32 _resourceID, bytes32 _dataHash, uint8 _status, uint256 _proposedBlock)",
180180
"function _relayerThreshold() view returns (uint256)",
181181
"function _resourceIDToHandlerAddress(bytes32) view returns (address)",
182+
"function _specialFee() view returns (uint256)",
183+
"function _specialFeeChainID() view returns (uint8)",
182184
"function _totalProposals() view returns (uint256)",
183185
"function _totalRelayers() view returns (uint256)",
186+
"function _wtokenAddress() view returns (address)",
184187
"function adminAddRelayer(address relayerAddress)",
185188
"function adminChangeFee(uint256 newFee)",
186189
"function adminChangeRelayerThreshold(uint256 newThreshold)",
190+
"function adminChangeSpecialFee(uint256 newFee, uint8 chainID)",
187191
"function adminPauseTransfers()",
188192
"function adminRemoveRelayer(address relayerAddress)",
189193
"function adminSetBurnable(address handlerAddress, address tokenAddress)",
190194
"function adminSetGenericResource(address handlerAddress, bytes32 resourceID, address contractAddress, bytes4 depositFunctionSig, uint256 depositFunctionDepositerOffset, bytes4 executeFunctionSig)",
191195
"function adminSetResource(address handlerAddress, bytes32 resourceID, address tokenAddress)",
192196
"function adminUnpauseTransfers()",
197+
"function adminUpdateBridgeAddress(address handlerAddress, address newBridgeAddress)",
193198
"function adminWithdraw(address handlerAddress, address tokenAddress, address recipient, uint256 amountOrTokenID)",
194199
"function cancelProposal(uint8 chainID, uint64 depositNonce, bytes32 dataHash)",
195200
"function deposit(uint8 destinationChainID, bytes32 resourceID, bytes data) payable",
201+
"function depositETH(uint8 destinationChainID, bytes32 resourceID, bytes data) payable",
196202
"function executeProposal(uint8 chainID, uint64 depositNonce, bytes data, bytes32 resourceID)",
203+
"function getFee(uint8 destinationChainID) view returns (uint256)",
204+
"function getFees() view returns (uint256, uint256, uint8)",
197205
"function getProposal(uint8 originChainID, uint64 depositNonce, bytes32 dataHash) view returns (tuple(bytes32 _resourceID, bytes32 _dataHash, address[] _yesVotes, address[] _noVotes, uint8 _status, uint256 _proposedBlock))",
198206
"function getRoleAdmin(bytes32 role) view returns (bytes32)",
199207
"function getRoleMember(bytes32 role, uint256 index) view returns (address)",
@@ -361,22 +369,12 @@
361369
"blockNumber": 12795542
362370
},
363371
"batchRebaseReporter": {
364-
"address": "0x25fbC7D475B5013f631E5BB7f9Da57A8d1522179",
372+
"address": "0x36aAf46CAB4B6E5390Fb44311b5664a71A398400",
365373
"abi": [
366-
"event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)",
367374
"event TransactionFailed(address indexed destination, uint256 index, bytes data, bytes reason)",
368-
"function addTransaction(address destination, uint256 value, bytes data)",
369-
"function checkExecution(uint256 index) payable returns (bool)",
370-
"function executeAll() payable returns (bool)",
371-
"function owner() view returns (address)",
372-
"function removeTransaction(uint256 index)",
373-
"function renounceOwnership()",
374-
"function setTransactionEnabled(uint256 index, bool enabled)",
375-
"function transactions(uint256) view returns (bool enabled, address destination, uint256 value, bytes data)",
376-
"function transactionsSize() view returns (uint256)",
377-
"function transferOwnership(address newOwner)"
375+
"function executeAll(address[] destinations, bytes[] data, uint256[] values) payable returns (bool)"
378376
],
379-
"hash": "0x3974b71ec5143a95f56f8ec20707f3d6bc46a0c9c31c407a96bf2d07d6c1e029",
380-
"blockNumber": 12801448
377+
"hash": "0x062d0fb489800960d83da2b93a8ca129e5f170d6dac5e44ea55669c3e8c88dd2",
378+
"blockNumber": 13096932
381379
}
382380
}

tasks/deploy/chain_bridge.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ txTask(
355355
);
356356
const transferGateway = await getDeployedContractInstance(
357357
network,
358-
'chainBridge/rebaseGateway',
358+
'chainBridge/transferGateway',
359359
provider,
360360
);
361361

@@ -434,7 +434,7 @@ txTask(
434434
);
435435
const transferGateway = await getDeployedContractInstance(
436436
network,
437-
'chainBridge/rebaseGateway',
437+
'chainBridge/transferGateway',
438438
provider,
439439
);
440440
const adminRole = await bridge.DEFAULT_ADMIN_ROLE();

0 commit comments

Comments
 (0)