-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparser.h
More file actions
305 lines (278 loc) · 11 KB
/
parser.h
File metadata and controls
305 lines (278 loc) · 11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
#ifndef CMA_PARSER_H
#define CMA_PARSER_H
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Compiler visibility definition
#ifndef CMA_PARSER_API
#define CMA_PARSER_API __attribute__((visibility("default")))
#endif
#include <libcmt/abi.h>
#include <libcmt/rollup.h>
#include "types.h"
enum {
// Bytecode for solidity WithdrawEther(uint256,bytes) = 8cf70f0b
WITHDRAW_ETHER = 0x8cf70f0b,
// Bytecode for solidity WithdrawErc20(address,uint256,bytes) = 4f94d342
WITHDRAW_ERC20 = 0x4f94d342,
// Bytecode for solidity WithdrawErc721(address,uint256,bytes) = 33acf293
WITHDRAW_ERC721 = 0x33acf293,
// Bytecode for solidity WithdrawErc1155Single(address,uint256,uint256,bytes) = 8bb0a811
WITHDRAW_ERC1155_SINGLE = 0x8bb0a811,
// Bytecode for solidity WithdrawErc1155Batch(address,uint256[],uint256[],bytes) = 50c80019
WITHDRAW_ERC1155_BATCH = 0x50c80019,
// Bytecode for solidity TransferEther(bytes32,uint256,bytes) = ff67c903
TRANSFER_ETHER = 0xff67c903,
// Bytecode for solidity TransferErc20(address,bytes32,uint256,bytes) = 03d61dcd
TRANSFER_ERC20 = 0x03d61dcd,
// Bytecode for solidity TransferErc721(address,bytes32,uint256,bytes) = af615a5a
TRANSFER_ERC721 = 0xaf615a5a,
// Bytecode for solidity TransferErc1155Single(address,bytes32,uint256,uint256,bytes) = e1c913ed
TRANSFER_ERC1155_SINGLE = 0xe1c913ed,
// Bytecode for solidity TransferErc1155Batch(address,bytes32,uint256[],uint256[],bytes) = 638ac6f9
TRANSFER_ERC1155_BATCH = 0x638ac6f9,
// Bytecode for solidity transfer(address,uint256) = a9059cbb
ERC20_TRANSFER_FUNCTION_SELECTOR_FUNSEL = 0xa9059cbb,
// Bytecode for solidity safeTransferFrom(address,address,uint256) = 42842e0e
ERC721_TRANSFER_FUNCTION_SELECTOR_FUNSEL = 0x42842e0e,
// Bytecode for solidity safeTransferFrom(address,address,uint256,uint256,bytes) = f242432a
ERC1155_SINGLE_TRANSFER_FUNCTION_SELECTOR_FUNSEL = 0xf242432a,
// Bytecode for solidity safeBatchTransferFrom(address,address,uint256[],uint256[],bytes) = 2eb2c2d6
ERC1155_BATCH_TRANSFER_FUNCTION_SELECTOR_FUNSEL = 0x2eb2c2d6,
};
typedef enum {
CMA_PARSER_INPUT_TYPE_NONE,
CMA_PARSER_INPUT_TYPE_AUTO,
CMA_PARSER_INPUT_TYPE_ETHER_DEPOSIT,
CMA_PARSER_INPUT_TYPE_ERC20_DEPOSIT,
CMA_PARSER_INPUT_TYPE_ERC721_DEPOSIT,
CMA_PARSER_INPUT_TYPE_ERC1155_SINGLE_DEPOSIT,
CMA_PARSER_INPUT_TYPE_ERC1155_BATCH_DEPOSIT,
CMA_PARSER_INPUT_TYPE_ETHER_WITHDRAWAL,
CMA_PARSER_INPUT_TYPE_ERC20_WITHDRAWAL,
CMA_PARSER_INPUT_TYPE_ERC721_WITHDRAWAL,
CMA_PARSER_INPUT_TYPE_ERC1155_SINGLE_WITHDRAWAL,
CMA_PARSER_INPUT_TYPE_ERC1155_BATCH_WITHDRAWAL,
CMA_PARSER_INPUT_TYPE_ETHER_TRANSFER,
CMA_PARSER_INPUT_TYPE_ERC20_TRANSFER,
CMA_PARSER_INPUT_TYPE_ERC721_TRANSFER,
CMA_PARSER_INPUT_TYPE_ERC1155_SINGLE_TRANSFER,
CMA_PARSER_INPUT_TYPE_ERC1155_BATCH_TRANSFER,
CMA_PARSER_INPUT_TYPE_BALANCE,
CMA_PARSER_INPUT_TYPE_BALANCE_ACCOUNT,
CMA_PARSER_INPUT_TYPE_BALANCE_ACCOUNT_TOKEN_ADDRESS,
CMA_PARSER_INPUT_TYPE_BALANCE_ACCOUNT_TOKEN_ADDRESS_ID,
CMA_PARSER_INPUT_TYPE_SUPPLY,
CMA_PARSER_INPUT_TYPE_SUPPLY_TOKEN_ADDRESS,
CMA_PARSER_INPUT_TYPE_SUPPLY_TOKEN_ADDRESS_ID,
} cma_parser_input_type_t;
typedef uint8_t cma_abi_u256_data[CMT_ABI_U256_LENGTH];
typedef struct cma_abi_u256_list {
size_t length;
cma_abi_u256_data *data;
} cma_abi_u256_list_t;
typedef cma_abi_u256_list_t cma_amounts_t;
typedef cma_abi_u256_list_t cma_token_ids_t;
typedef struct cma_parser_ether_deposit {
cma_abi_address_t sender;
cma_amount_t amount;
cma_abi_bytes_t exec_layer_data;
} cma_parser_ether_deposit_t;
typedef struct cma_parser_erc20_deposit {
cma_abi_address_t sender;
cma_token_address_t token;
cma_amount_t amount;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc20_deposit_t;
typedef struct cma_parser_erc721_deposit {
cma_abi_address_t sender;
cma_token_address_t token;
cma_token_id_t token_id;
cma_abi_bytes_t base_layer_data;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc721_deposit_t;
typedef struct cma_parser_erc1155_single_deposit {
cma_abi_address_t sender;
cma_token_address_t token;
cma_token_id_t token_id;
cma_amount_t amount;
cma_abi_bytes_t base_layer_data;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc1155_single_deposit_t;
typedef struct cma_parser_erc1155_batch_deposit {
cma_abi_address_t sender;
cma_token_address_t token;
cma_token_ids_t token_ids;
cma_amounts_t amounts;
cma_abi_bytes_t base_layer_data;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc1155_batch_deposit_t;
typedef struct cma_parser_ether_withdrawal {
cma_amount_t amount;
cma_abi_bytes_t exec_layer_data;
} cma_parser_ether_withdrawal_t;
typedef struct cma_parser_erc20_withdrawal {
cma_token_address_t token;
cma_amount_t amount;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc20_withdrawal_t;
typedef struct cma_parser_erc721_withdrawal {
cma_token_address_t token;
cma_token_id_t token_id;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc721_withdrawal_t;
typedef struct cma_parser_erc1155_single_withdrawal {
cma_token_address_t token;
cma_token_id_t token_id;
cma_amount_t amount;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc1155_single_withdrawal_t;
typedef struct cma_parser_erc1155_batch_withdrawal {
cma_token_address_t token;
cma_token_ids_t token_ids;
cma_amounts_t amounts;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc1155_batch_withdrawal_t;
typedef struct cma_parser_ether_transfer {
cma_account_id_t receiver;
cma_amount_t amount;
cma_abi_bytes_t exec_layer_data;
} cma_parser_ether_transfer_t;
typedef struct cma_parser_erc20_transfer {
cma_account_id_t receiver;
cma_token_address_t token;
cma_amount_t amount;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc20_transfer_t;
typedef struct cma_parser_erc721_transfer {
cma_account_id_t receiver;
cma_token_address_t token;
cma_token_id_t token_id;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc721_transfer_t;
typedef struct cma_parser_erc1155_single_transfer {
cma_account_id_t receiver;
cma_token_address_t token;
cma_token_id_t token_id;
cma_amount_t amount;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc1155_single_transfer_t;
typedef struct cma_parser_erc1155_batch_transfer {
cma_account_id_t receiver;
cma_token_address_t token;
cma_token_ids_t token_ids;
cma_amounts_t amounts;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc1155_batch_transfer_t;
typedef struct cma_parser_balance {
cma_account_id_t account;
cma_token_address_t token;
cma_token_id_t token_id;
cma_abi_bytes_t exec_layer_data;
} cma_parser_balance_t;
typedef struct cma_parser_supply {
cma_token_address_t token;
cma_token_id_t token_id;
cma_abi_bytes_t exec_layer_data;
} cma_parser_supply_t;
typedef struct cma_parser_input {
cma_parser_input_type_t type;
union {
cma_parser_ether_deposit_t ether_deposit;
cma_parser_erc20_deposit_t erc20_deposit;
cma_parser_erc721_deposit_t erc721_deposit;
cma_parser_erc1155_single_deposit_t erc1155_single_deposit;
cma_parser_erc1155_batch_deposit_t erc1155_batch_deposit;
cma_parser_ether_withdrawal_t ether_withdrawal;
cma_parser_erc20_withdrawal_t erc20_withdrawal;
cma_parser_erc721_withdrawal_t erc721_withdrawal;
cma_parser_erc1155_single_withdrawal_t erc1155_single_withdrawal;
cma_parser_erc1155_batch_withdrawal_t erc1155_batch_withdrawal;
cma_parser_ether_transfer_t ether_transfer;
cma_parser_erc20_transfer_t erc20_transfer;
cma_parser_erc721_transfer_t erc721_transfer;
cma_parser_erc1155_single_transfer_t erc1155_single_transfer;
cma_parser_erc1155_batch_transfer_t erc1155_batch_transfer;
cma_parser_balance_t balance;
cma_parser_supply_t supply;
};
} cma_parser_input_t;
typedef enum {
CMA_PARSER_VOUCHER_TYPE_NONE,
CMA_PARSER_VOUCHER_TYPE_ETHER,
CMA_PARSER_VOUCHER_TYPE_ERC20,
CMA_PARSER_VOUCHER_TYPE_ERC721,
CMA_PARSER_VOUCHER_TYPE_ERC1155_SINGLE,
CMA_PARSER_VOUCHER_TYPE_ERC1155_BATCH,
} cma_parser_voucher_type_t;
enum {
CMA_PARSER_SELECTOR_SIZE = 4,
CMA_PARSER_ETHER_VOUCHER_PAYLOAD_SIZE = 0,
CMA_PARSER_ERC20_VOUCHER_PAYLOAD_SIZE = CMA_PARSER_SELECTOR_SIZE + 2 * CMA_ABI_U256_LENGTH,
CMA_PARSER_ERC721_VOUCHER_PAYLOAD_SIZE = CMA_PARSER_SELECTOR_SIZE + 3 * CMA_ABI_U256_LENGTH,
CMA_PARSER_ERC1155_SINGLE_VOUCHER_PAYLOAD_MIN_SIZE = CMA_PARSER_SELECTOR_SIZE + 6 * CMA_ABI_U256_LENGTH,
CMA_PARSER_ERC1155_BATCH_VOUCHER_PAYLOAD_MIN_SIZE = CMA_PARSER_SELECTOR_SIZE + 8 * CMA_ABI_U256_LENGTH,
};
typedef struct cma_parser_ether_voucher_fields {
cma_amount_t amount;
} cma_parser_ether_voucher_fields_t;
typedef struct cma_parser_erc20_voucher_fields {
cma_token_address_t token;
cma_amount_t amount;
} cma_parser_erc20_voucher_fields_t;
typedef struct cma_parser_erc721_voucher_fields {
cma_token_address_t token;
cma_token_id_t token_id;
} cma_parser_erc721_voucher_fields_t;
typedef struct cma_parser_erc1155_single_voucher_fields {
cma_token_address_t token;
cma_token_id_t token_id;
cma_amount_t amount;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc1155_single_voucher_fields_t;
typedef struct cma_parser_erc1155_batch_voucher_fields {
cma_token_address_t token;
cma_token_ids_t token_ids;
cma_amounts_t amounts;
cma_abi_bytes_t exec_layer_data;
} cma_parser_erc1155_batch_voucher_fields_t;
typedef struct cma_parser_voucher_data {
cma_abi_address_t receiver;
union {
cma_parser_ether_voucher_fields_t ether;
cma_parser_erc20_voucher_fields_t erc20;
cma_parser_erc721_voucher_fields_t erc721;
cma_parser_erc1155_single_voucher_fields_t erc1155_single;
cma_parser_erc1155_batch_voucher_fields_t erc1155_batch;
};
} cma_parser_voucher_data_t;
typedef struct cma_voucher {
cmt_abi_address_t address;
cmt_abi_u256_t value;
cmt_abi_bytes_t payload;
} cma_voucher_t;
enum {
CMA_PARSER_SUCCESS = 0,
CMA_PARSER_ERROR_UNKNOWN = -2001,
CMA_PARSER_ERROR_EXCEPTION = -2002,
CMA_PARSER_ERROR_INCOMPATIBLE_INPUT = -2003,
CMA_PARSER_ERROR_MALFORMED_INPUT = -2004,
CMA_PARSER_ERROR_INVALID_AMOUNT = -2005,
};
// decode advance
CMA_PARSER_API int cma_parser_decode_advance(cma_parser_input_type_t type, const cmt_rollup_advance_t *input,
cma_parser_input_t *parser_input);
// decode inspect
CMA_PARSER_API int cma_parser_decode_inspect(cma_parser_input_type_t type, const cmt_rollup_inspect_t *input,
cma_parser_input_t *parser_input);
// encode voucher
CMA_PARSER_API int cma_parser_encode_voucher(cma_parser_voucher_type_t type, const cma_abi_address_t *app_address,
const cma_parser_voucher_data_t *voucher_request, cma_voucher_t *voucher);
// get error message
CMA_PARSER_API const char *cma_parser_get_last_error_message();
#ifdef __cplusplus
} // extern "C"
#endif
#endif // CMA_PARSER_H