Skip to content

Commit 7821313

Browse files
authored
Merge pull request #3 from onflow/locked-tokens-templates
Add locked token transaction templates
2 parents 1373a72 + b2df80c commit 7821313

11 files changed

+5180
-52
lines changed

app/src/coin_script_hashes.h

-31
This file was deleted.

app/src/parser.c

+1,044
Large diffs are not rendered by default.

app/src/parser_impl.c

+166-5
Original file line numberDiff line numberDiff line change
@@ -252,23 +252,148 @@ parser_error_t _matchScriptType(uint8_t scriptHash[32], script_type_e *scriptTyp
252252
}
253253

254254
if (
255-
(MEMCMP(CONTRACT_HASH_TOKEN_TRANSFER_EMULATOR, buffer, 64) == 0) ||
256-
(MEMCMP(CONTRACT_HASH_TOKEN_TRANSFER_TESTNET, buffer, 64) == 0) ||
257-
(MEMCMP(CONTRACT_HASH_TOKEN_TRANSFER_MAINNET, buffer, 64) == 0)) {
255+
(MEMCMP(TEMPLATE_HASH_TOKEN_TRANSFER_EMULATOR, buffer, 64) == 0) ||
256+
(MEMCMP(TEMPLATE_HASH_TOKEN_TRANSFER_TESTNET, buffer, 64) == 0) ||
257+
(MEMCMP(TEMPLATE_HASH_TOKEN_TRANSFER_MAINNET, buffer, 64) == 0)) {
258258
*scriptType = script_token_transfer;
259259
return parser_ok;
260260
}
261261

262-
if (MEMCMP(CONTRACT_HASH_CREATE_ACCOUNT, buffer, 64) == 0) {
262+
if (MEMCMP(TEMPLATE_HASH_CREATE_ACCOUNT, buffer, 64) == 0) {
263263
*scriptType = script_create_account;
264264
return parser_ok;
265265
}
266266

267-
if (MEMCMP(CONTRACT_HASH_ADD_NEW_KEY, buffer, 64) == 0) {
267+
if (MEMCMP(TEMPLATE_HASH_ADD_NEW_KEY, buffer, 64) == 0) {
268268
*scriptType = script_add_new_key;
269269
return parser_ok;
270270
}
271271

272+
if (
273+
(MEMCMP(TEMPLATE_HASH_TH01_WITHDRAW_UNLOCKED_TOKENS_TESTNET, buffer, 64) == 0) ||
274+
(MEMCMP(TEMPLATE_HASH_TH01_WITHDRAW_UNLOCKED_TOKENS_MAINNET, buffer, 64) == 0)) {
275+
*scriptType = script_th01_withdraw_unlocked_tokens;
276+
return parser_ok;
277+
}
278+
279+
if (
280+
(MEMCMP(TEMPLATE_HASH_TH02_DEPOSIT_UNLOCKED_TOKENS_TESTNET, buffer, 64) == 0) ||
281+
(MEMCMP(TEMPLATE_HASH_TH02_DEPOSIT_UNLOCKED_TOKENS_MAINNET, buffer, 64) == 0)) {
282+
*scriptType = script_th02_deposit_unlocked_tokens;
283+
return parser_ok;
284+
}
285+
286+
if (
287+
(MEMCMP(TEMPLATE_HASH_TH06_REGISTER_NODE_TESTNET, buffer, 64) == 0) ||
288+
(MEMCMP(TEMPLATE_HASH_TH06_REGISTER_NODE_MAINNET, buffer, 64) == 0)) {
289+
*scriptType = script_th06_register_node;
290+
return parser_ok;
291+
}
292+
293+
if (
294+
(MEMCMP(TEMPLATE_HASH_TH08_STAKE_NEW_TOKENS_TESTNET, buffer, 64) == 0) ||
295+
(MEMCMP(TEMPLATE_HASH_TH08_STAKE_NEW_TOKENS_MAINNET, buffer, 64) == 0)) {
296+
*scriptType = script_th08_stake_new_tokens;
297+
return parser_ok;
298+
}
299+
if (
300+
(MEMCMP(TEMPLATE_HASH_TH09_RESTAKE_UNSTAKED_TOKENS_TESTNET, buffer, 64) == 0) ||
301+
(MEMCMP(TEMPLATE_HASH_TH09_RESTAKE_UNSTAKED_TOKENS_MAINNET, buffer, 64) == 0)) {
302+
*scriptType = script_th09_restake_unstaked_tokens;
303+
return parser_ok;
304+
}
305+
306+
if (
307+
(MEMCMP(TEMPLATE_HASH_TH10_RESTAKE_REWARDED_TOKENS_TESTNET, buffer, 64) == 0) ||
308+
(MEMCMP(TEMPLATE_HASH_TH10_RESTAKE_REWARDED_TOKENS_MAINNET, buffer, 64) == 0)) {
309+
*scriptType = script_th10_restake_rewarded_tokens;
310+
return parser_ok;
311+
}
312+
313+
if (
314+
(MEMCMP(TEMPLATE_HASH_TH11_UNSTAKE_TOKENS_TESTNET, buffer, 64) == 0) ||
315+
(MEMCMP(TEMPLATE_HASH_TH11_UNSTAKE_TOKENS_MAINNET, buffer, 64) == 0)) {
316+
*scriptType = script_th11_unstake_tokens;
317+
return parser_ok;
318+
}
319+
320+
if (
321+
(MEMCMP(TEMPLATE_HASH_TH12_UNSTAKE_ALL_TOKENS_TESTNET, buffer, 64) == 0) ||
322+
(MEMCMP(TEMPLATE_HASH_TH12_UNSTAKE_ALL_TOKENS_MAINNET, buffer, 64) == 0)) {
323+
*scriptType = script_th12_unstake_all_tokens;
324+
return parser_ok;
325+
}
326+
327+
if (
328+
(MEMCMP(TEMPLATE_HASH_TH13_WITHDRAW_UNSTAKED_TOKENS_TESTNET, buffer, 64) == 0) ||
329+
(MEMCMP(TEMPLATE_HASH_TH13_WITHDRAW_UNSTAKED_TOKENS_MAINNET, buffer, 64) == 0)) {
330+
*scriptType = script_th13_withdraw_unstaked_tokens;
331+
return parser_ok;
332+
}
333+
334+
if (
335+
(MEMCMP(TEMPLATE_HASH_TH14_WITHDRAW_REWARDED_TOKENS_TESTNET, buffer, 64) == 0) ||
336+
(MEMCMP(TEMPLATE_HASH_TH14_WITHDRAW_REWARDED_TOKENS_MAINNET, buffer, 64) == 0)) {
337+
*scriptType = script_th14_withdraw_rewarded_tokens;
338+
return parser_ok;
339+
}
340+
341+
if (
342+
(MEMCMP(TEMPLATE_HASH_TH16_REGISTER_OPERATOR_NODE_TESTNET, buffer, 64) == 0) ||
343+
(MEMCMP(TEMPLATE_HASH_TH16_REGISTER_OPERATOR_NODE_MAINNET, buffer, 64) == 0)) {
344+
*scriptType = script_th16_register_operator_node;
345+
return parser_ok;
346+
}
347+
348+
if (
349+
(MEMCMP(TEMPLATE_HASH_TH17_REGISTER_DELEGATOR_TESTNET, buffer, 64) == 0) ||
350+
(MEMCMP(TEMPLATE_HASH_TH17_REGISTER_DELEGATOR_MAINNET, buffer, 64) == 0)) {
351+
*scriptType = script_th17_register_delegator;
352+
return parser_ok;
353+
}
354+
355+
if (
356+
(MEMCMP(TEMPLATE_HASH_TH19_DELEGATE_NEW_TOKENS_TESTNET, buffer, 64) == 0) ||
357+
(MEMCMP(TEMPLATE_HASH_TH19_DELEGATE_NEW_TOKENS_MAINNET, buffer, 64) == 0)) {
358+
*scriptType = script_th19_delegate_new_tokens;
359+
return parser_ok;
360+
}
361+
362+
if (
363+
(MEMCMP(TEMPLATE_HASH_TH20_RESTAKE_UNSTAKED_DELEGATED_TOKENS_TESTNET, buffer, 64) == 0) ||
364+
(MEMCMP(TEMPLATE_HASH_TH20_RESTAKE_UNSTAKED_DELEGATED_TOKENS_MAINNET, buffer, 64) == 0)) {
365+
*scriptType = script_th20_restake_unstaked_delegated_tokens;
366+
return parser_ok;
367+
}
368+
369+
if (
370+
(MEMCMP(TEMPLATE_HASH_TH21_RESTAKE_REWARDED_DELEGATED_TOKENS_TESTNET, buffer, 64) == 0) ||
371+
(MEMCMP(TEMPLATE_HASH_TH21_RESTAKE_REWARDED_DELEGATED_TOKENS_MAINNET, buffer, 64) == 0)) {
372+
*scriptType = script_th21_restake_rewarded_delegated_tokens;
373+
return parser_ok;
374+
}
375+
376+
if (
377+
(MEMCMP(TEMPLATE_HASH_TH22_UNSTAKE_DELEGATED_TOKENS_TESTNET, buffer, 64) == 0) ||
378+
(MEMCMP(TEMPLATE_HASH_TH22_UNSTAKE_DELEGATED_TOKENS_MAINNET, buffer, 64) == 0)) {
379+
*scriptType = script_th22_unstake_delegated_tokens;
380+
return parser_ok;
381+
}
382+
383+
if (
384+
(MEMCMP(TEMPLATE_HASH_TH23_WITHDRAW_UNSTAKED_DELEGATED_TOKENS_TESTNET, buffer, 64) == 0) ||
385+
(MEMCMP(TEMPLATE_HASH_TH23_WITHDRAW_UNSTAKED_DELEGATED_TOKENS_MAINNET, buffer, 64) == 0)) {
386+
*scriptType = script_th23_withdraw_unstaked_delegated_tokens;
387+
return parser_ok;
388+
}
389+
390+
if (
391+
(MEMCMP(TEMPLATE_HASH_TH24_WITHDRAW_REWARDED_DELEGATED_TOKENS_TESTNET, buffer, 64) == 0) ||
392+
(MEMCMP(TEMPLATE_HASH_TH24_WITHDRAW_REWARDED_DELEGATED_TOKENS_MAINNET, buffer, 64) == 0)) {
393+
*scriptType = script_th24_withdraw_rewarded_delegated_tokens;
394+
return parser_ok;
395+
}
396+
272397
return parser_unexpected_script;
273398
}
274399

@@ -517,6 +642,42 @@ uint8_t _getNumItems(const parser_context_t *c, const parser_tx_t *v) {
517642
return 8 + _countArgumentItems(&v->arguments, 0) + v->authorizers.authorizer_count;
518643
case script_add_new_key:
519644
return 9 + v->authorizers.authorizer_count;
645+
case script_th01_withdraw_unlocked_tokens:
646+
return 9 + v->authorizers.authorizer_count;
647+
case script_th02_deposit_unlocked_tokens:
648+
return 9 + v->authorizers.authorizer_count;
649+
case script_th06_register_node:
650+
return 14 + v->authorizers.authorizer_count;
651+
case script_th08_stake_new_tokens:
652+
return 9 + v->authorizers.authorizer_count;
653+
case script_th09_restake_unstaked_tokens:
654+
return 9 + v->authorizers.authorizer_count;
655+
case script_th10_restake_rewarded_tokens:
656+
return 9 + v->authorizers.authorizer_count;
657+
case script_th11_unstake_tokens:
658+
return 9 + v->authorizers.authorizer_count;
659+
case script_th12_unstake_all_tokens:
660+
return 8 + v->authorizers.authorizer_count;
661+
case script_th13_withdraw_unstaked_tokens:
662+
return 9 + v->authorizers.authorizer_count;
663+
case script_th14_withdraw_rewarded_tokens:
664+
return 9 + v->authorizers.authorizer_count;
665+
case script_th16_register_operator_node:
666+
return 11 + v->authorizers.authorizer_count;
667+
case script_th17_register_delegator:
668+
return 10 + v->authorizers.authorizer_count;
669+
case script_th19_delegate_new_tokens:
670+
return 9 + v->authorizers.authorizer_count;
671+
case script_th20_restake_unstaked_delegated_tokens:
672+
return 9 + v->authorizers.authorizer_count;
673+
case script_th21_restake_rewarded_delegated_tokens:
674+
return 9 + v->authorizers.authorizer_count;
675+
case script_th22_unstake_delegated_tokens:
676+
return 9 + v->authorizers.authorizer_count;
677+
case script_th23_withdraw_unstaked_delegated_tokens:
678+
return 9 + v->authorizers.authorizer_count;
679+
case script_th24_withdraw_rewarded_delegated_tokens:
680+
return 9 + v->authorizers.authorizer_count;
520681
case script_unknown:
521682
default:
522683
return 0;

app/src/parser_txdef.h

+20-2
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,33 @@ extern "C" {
2727
#include <stdint.h>
2828
#include <stddef.h>
2929
#include "crypto.h"
30-
#include "coin_script_hashes.h"
30+
#include "template_hashes.h"
3131

3232
#define PARSER_MAX_ARGCOUNT 10
3333

3434
typedef enum {
3535
script_unknown,
3636
script_token_transfer,
3737
script_create_account,
38-
script_add_new_key
38+
script_add_new_key,
39+
script_th01_withdraw_unlocked_tokens,
40+
script_th02_deposit_unlocked_tokens,
41+
script_th06_register_node,
42+
script_th08_stake_new_tokens,
43+
script_th09_restake_unstaked_tokens,
44+
script_th10_restake_rewarded_tokens,
45+
script_th11_unstake_tokens,
46+
script_th12_unstake_all_tokens,
47+
script_th13_withdraw_unstaked_tokens,
48+
script_th14_withdraw_rewarded_tokens,
49+
script_th16_register_operator_node,
50+
script_th17_register_delegator,
51+
script_th19_delegate_new_tokens,
52+
script_th20_restake_unstaked_delegated_tokens,
53+
script_th21_restake_rewarded_delegated_tokens,
54+
script_th22_unstake_delegated_tokens,
55+
script_th23_withdraw_unstaked_delegated_tokens,
56+
script_th24_withdraw_rewarded_delegated_tokens,
3957
} script_type_e;
4058

4159
typedef enum {

app/src/template_hashes.h

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/*******************************************************************************
2+
* (c) 2019 Zondax GmbH
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
********************************************************************************/
16+
#pragma once
17+
18+
#ifdef __cplusplus
19+
extern "C" {
20+
#endif
21+
22+
#define TEMPLATE_HASH_CREATE_ACCOUNT "eef2d0494448554177612e63026256258339230cbc6931ded78d6149443c6173"
23+
#define TEMPLATE_HASH_ADD_NEW_KEY "595c86561441b32b2b91ee03f9e10ca6efa7b41bcc994f51317ec0aa9d8f8a42"
24+
25+
#define TEMPLATE_HASH_TOKEN_TRANSFER_EMULATOR "ca80b628d985b358ae1cb136bcd976997c942fa10dbabfeafb4e20fa66a5a5e2"
26+
#define TEMPLATE_HASH_TOKEN_TRANSFER_TESTNET "d56f4e1d2355cdcfacfd01e471459c6ef168bfdf84371a685ccf31cf3cdedc2d"
27+
#define TEMPLATE_HASH_TOKEN_TRANSFER_MAINNET "47851586d962335e3f7d9e5d11a4c527ee4b5fd1c3895e3ce1b9c2821f60b166"
28+
29+
#define TEMPLATE_HASH_TH01_WITHDRAW_UNLOCKED_TOKENS_TESTNET "6e73db6edd0190f5311f6adc5f2b1f27e9e60c68574b00ee90da867da52cdbb1"
30+
#define TEMPLATE_HASH_TH01_WITHDRAW_UNLOCKED_TOKENS_MAINNET "a2146e3e6e7718779ce59376b88760c154d82b7d132fe2c377114ec7cf434e7b"
31+
32+
#define TEMPLATE_HASH_TH02_DEPOSIT_UNLOCKED_TOKENS_TESTNET "0cb11c10b86d2afeae086ef511d28b14760eb854935a0b0dcfeecc85db847f48"
33+
#define TEMPLATE_HASH_TH02_DEPOSIT_UNLOCKED_TOKENS_MAINNET "74355dc8df221bc0d170b2fe8deacd6f1f554d6beea58ad9fee7a07f740eaefe"
34+
35+
#define TEMPLATE_HASH_TH06_REGISTER_NODE_TESTNET "d7c3a22ca7f254e89479621115a8cd81504d57ae4e19f480c437377e7ace19ca"
36+
#define TEMPLATE_HASH_TH06_REGISTER_NODE_MAINNET "6ffa49f84f795db62af8928c820aaac199876278db291d82ff66e30ae9cd513c"
37+
38+
#define TEMPLATE_HASH_TH08_STAKE_NEW_TOKENS_TESTNET "d5689b89f53214e7ce9ba7be2bb651961f7e3036b85f9250494290da9e9ba989"
39+
#define TEMPLATE_HASH_TH08_STAKE_NEW_TOKENS_MAINNET "1929e4f38894b8641848a3c0a3b9d35495b35083d42e8a3d4c928b9db4174ee8"
40+
41+
#define TEMPLATE_HASH_TH09_RESTAKE_UNSTAKED_TOKENS_TESTNET "23e5bfd594bb3245090e3e0bafb9cb9246fc84d30e4a35a7fde1b51085624d86"
42+
#define TEMPLATE_HASH_TH09_RESTAKE_UNSTAKED_TOKENS_MAINNET "677cc0ac3962ec136ca26dbec0aa942d926640ecf8418433f0db4b7925f5d0fe"
43+
44+
#define TEMPLATE_HASH_TH10_RESTAKE_REWARDED_TOKENS_TESTNET "239319825ad68178e76465b5ea18cb43f06c4ee11341f8fe9424809163a027a5"
45+
#define TEMPLATE_HASH_TH10_RESTAKE_REWARDED_TOKENS_MAINNET "28d1719c5b21c88c62665db5ba04886809f3234c27057b057c36d5f265ee9de4"
46+
47+
#define TEMPLATE_HASH_TH11_UNSTAKE_TOKENS_TESTNET "33e3977c45e7c23c1472bcf334d00b03ebf91b06b67c57b63b562c7b1ff5c59f"
48+
#define TEMPLATE_HASH_TH11_UNSTAKE_TOKENS_MAINNET "4e2a35541453f89c55e5dc6dbc963290380d779c81df0b3bf89c29b2a8d7a9fe"
49+
50+
#define TEMPLATE_HASH_TH12_UNSTAKE_ALL_TOKENS_TESTNET "f92c4cd663b2e335cd821a656bb2ebcf239b222036a7825af5e512fad4d82035"
51+
#define TEMPLATE_HASH_TH12_UNSTAKE_ALL_TOKENS_MAINNET "7099904b953b062e81e2575a2c2081b3d98bfccf5c743b4bdb224b937e292dad"
52+
53+
#define TEMPLATE_HASH_TH13_WITHDRAW_UNSTAKED_TOKENS_TESTNET "90097e3aff9b67f65bbada3cdedbb73d45d093ff333aaaff38809bf9910a3e39"
54+
#define TEMPLATE_HASH_TH13_WITHDRAW_UNSTAKED_TOKENS_MAINNET "dcae4faa6d689873f7caf7c5efef669f9fe1d4113e58b474b7aec1e07113a7ff"
55+
56+
#define TEMPLATE_HASH_TH14_WITHDRAW_REWARDED_TOKENS_TESTNET "121464057141fd6c790b31876669d7e83b17e800da1809acf41a0879326fa324"
57+
#define TEMPLATE_HASH_TH14_WITHDRAW_REWARDED_TOKENS_MAINNET "4c5c67ff1581c7a51819835ddda4fcd18ea5b11acd93aaee022c324364d4532f"
58+
59+
#define TEMPLATE_HASH_TH16_REGISTER_OPERATOR_NODE_TESTNET "c29d4024aaeb71ab478182542499e0ba3d5d303ec027252e3b8333515ee3de48"
60+
#define TEMPLATE_HASH_TH16_REGISTER_OPERATOR_NODE_MAINNET "97b3436482c5aefc1baf8b850e92c829202e468c57241dec707b6c27bd89d15c"
61+
62+
#define TEMPLATE_HASH_TH17_REGISTER_DELEGATOR_TESTNET "2a519aca1c9ca4568a30c893bd97580ee754f70cad65d2d2dd10abbfa31168ee"
63+
#define TEMPLATE_HASH_TH17_REGISTER_DELEGATOR_MAINNET "94a37cfffbd452d6139967282862be747297c60f9f0c78b1bb2c27c59cb9dbf6"
64+
65+
#define TEMPLATE_HASH_TH19_DELEGATE_NEW_TOKENS_TESTNET "18fad68368a4394b245db91217d7dc979e1316ab757388d416eaef831f565ab3"
66+
#define TEMPLATE_HASH_TH19_DELEGATE_NEW_TOKENS_MAINNET "802354d8b3e7908e584bcb5217637fb9f4ef045427c32d57d81ad4a390ed1a60"
67+
68+
#define TEMPLATE_HASH_TH20_RESTAKE_UNSTAKED_DELEGATED_TOKENS_TESTNET "8776b1521b04395754734f8f40d4a0482863274f8d832973d9e011b3cbb48c85"
69+
#define TEMPLATE_HASH_TH20_RESTAKE_UNSTAKED_DELEGATED_TOKENS_MAINNET "2027331b72d8710a1a05feb6ecebadb5858d134bc8c95d6f261319cd9fa1bb95"
70+
71+
#define TEMPLATE_HASH_TH21_RESTAKE_REWARDED_DELEGATED_TOKENS_TESTNET "6b40ffc9169abd75107a45da5974c7e502d38773275abb231d747e4760b7ebee"
72+
#define TEMPLATE_HASH_TH21_RESTAKE_REWARDED_DELEGATED_TOKENS_MAINNET "864edbff384335ef21c26b3bcf17d36b2b1d894afbe2b203f58099cc457971e4"
73+
74+
#define TEMPLATE_HASH_TH22_UNSTAKE_DELEGATED_TOKENS_TESTNET "61cbcd1c31bbfc9ceb4a5ac726e2f8b3d845a4fdf59b0ab23cbbfa8f16d7a024"
75+
#define TEMPLATE_HASH_TH22_UNSTAKE_DELEGATED_TOKENS_MAINNET "262aeddd3f49fd6222d706c02696bd7d359ba962b6c30232cc93d7cf4166a23e"
76+
77+
#define TEMPLATE_HASH_TH23_WITHDRAW_UNSTAKED_DELEGATED_TOKENS_TESTNET "2ae983f78e32b989fafa58ee7910b131fb51a2a74356f7916624695cb8bf5964"
78+
#define TEMPLATE_HASH_TH23_WITHDRAW_UNSTAKED_DELEGATED_TOKENS_MAINNET "12675a013c064b6d0ef11dbf13f92210489bf2b3d299b2f14cd09be70b37577f"
79+
80+
#define TEMPLATE_HASH_TH24_WITHDRAW_REWARDED_DELEGATED_TOKENS_TESTNET "b6d044a2a8f76dc148849d2edeffbc78226b00e0b7bb696bd120d05148d9ea73"
81+
#define TEMPLATE_HASH_TH24_WITHDRAW_REWARDED_DELEGATED_TOKENS_MAINNET "2920ed29151943c1c061ba3eb81b904bdc78f658ad18b44b95df48cd96056929"
82+
83+
#ifdef __cplusplus
84+
}
85+
#endif

0 commit comments

Comments
 (0)