Skip to content

Commit

Permalink
Merge pull request #3 from onflow/locked-tokens-templates
Browse files Browse the repository at this point in the history
Add locked token transaction templates
  • Loading branch information
grydz authored Nov 4, 2020
2 parents 1373a72 + b2df80c commit 7821313
Show file tree
Hide file tree
Showing 11 changed files with 5,180 additions and 52 deletions.
31 changes: 0 additions & 31 deletions app/src/coin_script_hashes.h

This file was deleted.

1,044 changes: 1,044 additions & 0 deletions app/src/parser.c

Large diffs are not rendered by default.

171 changes: 166 additions & 5 deletions app/src/parser_impl.c
Original file line number Diff line number Diff line change
Expand Up @@ -252,23 +252,148 @@ parser_error_t _matchScriptType(uint8_t scriptHash[32], script_type_e *scriptTyp
}

if (
(MEMCMP(CONTRACT_HASH_TOKEN_TRANSFER_EMULATOR, buffer, 64) == 0) ||
(MEMCMP(CONTRACT_HASH_TOKEN_TRANSFER_TESTNET, buffer, 64) == 0) ||
(MEMCMP(CONTRACT_HASH_TOKEN_TRANSFER_MAINNET, buffer, 64) == 0)) {
(MEMCMP(TEMPLATE_HASH_TOKEN_TRANSFER_EMULATOR, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TOKEN_TRANSFER_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TOKEN_TRANSFER_MAINNET, buffer, 64) == 0)) {
*scriptType = script_token_transfer;
return parser_ok;
}

if (MEMCMP(CONTRACT_HASH_CREATE_ACCOUNT, buffer, 64) == 0) {
if (MEMCMP(TEMPLATE_HASH_CREATE_ACCOUNT, buffer, 64) == 0) {
*scriptType = script_create_account;
return parser_ok;
}

if (MEMCMP(CONTRACT_HASH_ADD_NEW_KEY, buffer, 64) == 0) {
if (MEMCMP(TEMPLATE_HASH_ADD_NEW_KEY, buffer, 64) == 0) {
*scriptType = script_add_new_key;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH01_WITHDRAW_UNLOCKED_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH01_WITHDRAW_UNLOCKED_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th01_withdraw_unlocked_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH02_DEPOSIT_UNLOCKED_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH02_DEPOSIT_UNLOCKED_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th02_deposit_unlocked_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH06_REGISTER_NODE_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH06_REGISTER_NODE_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th06_register_node;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH08_STAKE_NEW_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH08_STAKE_NEW_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th08_stake_new_tokens;
return parser_ok;
}
if (
(MEMCMP(TEMPLATE_HASH_TH09_RESTAKE_UNSTAKED_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH09_RESTAKE_UNSTAKED_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th09_restake_unstaked_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH10_RESTAKE_REWARDED_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH10_RESTAKE_REWARDED_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th10_restake_rewarded_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH11_UNSTAKE_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH11_UNSTAKE_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th11_unstake_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH12_UNSTAKE_ALL_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH12_UNSTAKE_ALL_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th12_unstake_all_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH13_WITHDRAW_UNSTAKED_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH13_WITHDRAW_UNSTAKED_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th13_withdraw_unstaked_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH14_WITHDRAW_REWARDED_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH14_WITHDRAW_REWARDED_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th14_withdraw_rewarded_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH16_REGISTER_OPERATOR_NODE_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH16_REGISTER_OPERATOR_NODE_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th16_register_operator_node;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH17_REGISTER_DELEGATOR_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH17_REGISTER_DELEGATOR_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th17_register_delegator;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH19_DELEGATE_NEW_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH19_DELEGATE_NEW_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th19_delegate_new_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH20_RESTAKE_UNSTAKED_DELEGATED_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH20_RESTAKE_UNSTAKED_DELEGATED_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th20_restake_unstaked_delegated_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH21_RESTAKE_REWARDED_DELEGATED_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH21_RESTAKE_REWARDED_DELEGATED_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th21_restake_rewarded_delegated_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH22_UNSTAKE_DELEGATED_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH22_UNSTAKE_DELEGATED_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th22_unstake_delegated_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH23_WITHDRAW_UNSTAKED_DELEGATED_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH23_WITHDRAW_UNSTAKED_DELEGATED_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th23_withdraw_unstaked_delegated_tokens;
return parser_ok;
}

if (
(MEMCMP(TEMPLATE_HASH_TH24_WITHDRAW_REWARDED_DELEGATED_TOKENS_TESTNET, buffer, 64) == 0) ||
(MEMCMP(TEMPLATE_HASH_TH24_WITHDRAW_REWARDED_DELEGATED_TOKENS_MAINNET, buffer, 64) == 0)) {
*scriptType = script_th24_withdraw_rewarded_delegated_tokens;
return parser_ok;
}

return parser_unexpected_script;
}

Expand Down Expand Up @@ -517,6 +642,42 @@ uint8_t _getNumItems(const parser_context_t *c, const parser_tx_t *v) {
return 8 + _countArgumentItems(&v->arguments, 0) + v->authorizers.authorizer_count;
case script_add_new_key:
return 9 + v->authorizers.authorizer_count;
case script_th01_withdraw_unlocked_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th02_deposit_unlocked_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th06_register_node:
return 14 + v->authorizers.authorizer_count;
case script_th08_stake_new_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th09_restake_unstaked_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th10_restake_rewarded_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th11_unstake_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th12_unstake_all_tokens:
return 8 + v->authorizers.authorizer_count;
case script_th13_withdraw_unstaked_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th14_withdraw_rewarded_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th16_register_operator_node:
return 11 + v->authorizers.authorizer_count;
case script_th17_register_delegator:
return 10 + v->authorizers.authorizer_count;
case script_th19_delegate_new_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th20_restake_unstaked_delegated_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th21_restake_rewarded_delegated_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th22_unstake_delegated_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th23_withdraw_unstaked_delegated_tokens:
return 9 + v->authorizers.authorizer_count;
case script_th24_withdraw_rewarded_delegated_tokens:
return 9 + v->authorizers.authorizer_count;
case script_unknown:
default:
return 0;
Expand Down
22 changes: 20 additions & 2 deletions app/src/parser_txdef.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,33 @@ extern "C" {
#include <stdint.h>
#include <stddef.h>
#include "crypto.h"
#include "coin_script_hashes.h"
#include "template_hashes.h"

#define PARSER_MAX_ARGCOUNT 10

typedef enum {
script_unknown,
script_token_transfer,
script_create_account,
script_add_new_key
script_add_new_key,
script_th01_withdraw_unlocked_tokens,
script_th02_deposit_unlocked_tokens,
script_th06_register_node,
script_th08_stake_new_tokens,
script_th09_restake_unstaked_tokens,
script_th10_restake_rewarded_tokens,
script_th11_unstake_tokens,
script_th12_unstake_all_tokens,
script_th13_withdraw_unstaked_tokens,
script_th14_withdraw_rewarded_tokens,
script_th16_register_operator_node,
script_th17_register_delegator,
script_th19_delegate_new_tokens,
script_th20_restake_unstaked_delegated_tokens,
script_th21_restake_rewarded_delegated_tokens,
script_th22_unstake_delegated_tokens,
script_th23_withdraw_unstaked_delegated_tokens,
script_th24_withdraw_rewarded_delegated_tokens,
} script_type_e;

typedef enum {
Expand Down
85 changes: 85 additions & 0 deletions app/src/template_hashes.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/*******************************************************************************
* (c) 2019 Zondax GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
********************************************************************************/
#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#define TEMPLATE_HASH_CREATE_ACCOUNT "eef2d0494448554177612e63026256258339230cbc6931ded78d6149443c6173"
#define TEMPLATE_HASH_ADD_NEW_KEY "595c86561441b32b2b91ee03f9e10ca6efa7b41bcc994f51317ec0aa9d8f8a42"

#define TEMPLATE_HASH_TOKEN_TRANSFER_EMULATOR "ca80b628d985b358ae1cb136bcd976997c942fa10dbabfeafb4e20fa66a5a5e2"
#define TEMPLATE_HASH_TOKEN_TRANSFER_TESTNET "d56f4e1d2355cdcfacfd01e471459c6ef168bfdf84371a685ccf31cf3cdedc2d"
#define TEMPLATE_HASH_TOKEN_TRANSFER_MAINNET "47851586d962335e3f7d9e5d11a4c527ee4b5fd1c3895e3ce1b9c2821f60b166"

#define TEMPLATE_HASH_TH01_WITHDRAW_UNLOCKED_TOKENS_TESTNET "6e73db6edd0190f5311f6adc5f2b1f27e9e60c68574b00ee90da867da52cdbb1"
#define TEMPLATE_HASH_TH01_WITHDRAW_UNLOCKED_TOKENS_MAINNET "a2146e3e6e7718779ce59376b88760c154d82b7d132fe2c377114ec7cf434e7b"

#define TEMPLATE_HASH_TH02_DEPOSIT_UNLOCKED_TOKENS_TESTNET "0cb11c10b86d2afeae086ef511d28b14760eb854935a0b0dcfeecc85db847f48"
#define TEMPLATE_HASH_TH02_DEPOSIT_UNLOCKED_TOKENS_MAINNET "74355dc8df221bc0d170b2fe8deacd6f1f554d6beea58ad9fee7a07f740eaefe"

#define TEMPLATE_HASH_TH06_REGISTER_NODE_TESTNET "d7c3a22ca7f254e89479621115a8cd81504d57ae4e19f480c437377e7ace19ca"
#define TEMPLATE_HASH_TH06_REGISTER_NODE_MAINNET "6ffa49f84f795db62af8928c820aaac199876278db291d82ff66e30ae9cd513c"

#define TEMPLATE_HASH_TH08_STAKE_NEW_TOKENS_TESTNET "d5689b89f53214e7ce9ba7be2bb651961f7e3036b85f9250494290da9e9ba989"
#define TEMPLATE_HASH_TH08_STAKE_NEW_TOKENS_MAINNET "1929e4f38894b8641848a3c0a3b9d35495b35083d42e8a3d4c928b9db4174ee8"

#define TEMPLATE_HASH_TH09_RESTAKE_UNSTAKED_TOKENS_TESTNET "23e5bfd594bb3245090e3e0bafb9cb9246fc84d30e4a35a7fde1b51085624d86"
#define TEMPLATE_HASH_TH09_RESTAKE_UNSTAKED_TOKENS_MAINNET "677cc0ac3962ec136ca26dbec0aa942d926640ecf8418433f0db4b7925f5d0fe"

#define TEMPLATE_HASH_TH10_RESTAKE_REWARDED_TOKENS_TESTNET "239319825ad68178e76465b5ea18cb43f06c4ee11341f8fe9424809163a027a5"
#define TEMPLATE_HASH_TH10_RESTAKE_REWARDED_TOKENS_MAINNET "28d1719c5b21c88c62665db5ba04886809f3234c27057b057c36d5f265ee9de4"

#define TEMPLATE_HASH_TH11_UNSTAKE_TOKENS_TESTNET "33e3977c45e7c23c1472bcf334d00b03ebf91b06b67c57b63b562c7b1ff5c59f"
#define TEMPLATE_HASH_TH11_UNSTAKE_TOKENS_MAINNET "4e2a35541453f89c55e5dc6dbc963290380d779c81df0b3bf89c29b2a8d7a9fe"

#define TEMPLATE_HASH_TH12_UNSTAKE_ALL_TOKENS_TESTNET "f92c4cd663b2e335cd821a656bb2ebcf239b222036a7825af5e512fad4d82035"
#define TEMPLATE_HASH_TH12_UNSTAKE_ALL_TOKENS_MAINNET "7099904b953b062e81e2575a2c2081b3d98bfccf5c743b4bdb224b937e292dad"

#define TEMPLATE_HASH_TH13_WITHDRAW_UNSTAKED_TOKENS_TESTNET "90097e3aff9b67f65bbada3cdedbb73d45d093ff333aaaff38809bf9910a3e39"
#define TEMPLATE_HASH_TH13_WITHDRAW_UNSTAKED_TOKENS_MAINNET "dcae4faa6d689873f7caf7c5efef669f9fe1d4113e58b474b7aec1e07113a7ff"

#define TEMPLATE_HASH_TH14_WITHDRAW_REWARDED_TOKENS_TESTNET "121464057141fd6c790b31876669d7e83b17e800da1809acf41a0879326fa324"
#define TEMPLATE_HASH_TH14_WITHDRAW_REWARDED_TOKENS_MAINNET "4c5c67ff1581c7a51819835ddda4fcd18ea5b11acd93aaee022c324364d4532f"

#define TEMPLATE_HASH_TH16_REGISTER_OPERATOR_NODE_TESTNET "c29d4024aaeb71ab478182542499e0ba3d5d303ec027252e3b8333515ee3de48"
#define TEMPLATE_HASH_TH16_REGISTER_OPERATOR_NODE_MAINNET "97b3436482c5aefc1baf8b850e92c829202e468c57241dec707b6c27bd89d15c"

#define TEMPLATE_HASH_TH17_REGISTER_DELEGATOR_TESTNET "2a519aca1c9ca4568a30c893bd97580ee754f70cad65d2d2dd10abbfa31168ee"
#define TEMPLATE_HASH_TH17_REGISTER_DELEGATOR_MAINNET "94a37cfffbd452d6139967282862be747297c60f9f0c78b1bb2c27c59cb9dbf6"

#define TEMPLATE_HASH_TH19_DELEGATE_NEW_TOKENS_TESTNET "18fad68368a4394b245db91217d7dc979e1316ab757388d416eaef831f565ab3"
#define TEMPLATE_HASH_TH19_DELEGATE_NEW_TOKENS_MAINNET "802354d8b3e7908e584bcb5217637fb9f4ef045427c32d57d81ad4a390ed1a60"

#define TEMPLATE_HASH_TH20_RESTAKE_UNSTAKED_DELEGATED_TOKENS_TESTNET "8776b1521b04395754734f8f40d4a0482863274f8d832973d9e011b3cbb48c85"
#define TEMPLATE_HASH_TH20_RESTAKE_UNSTAKED_DELEGATED_TOKENS_MAINNET "2027331b72d8710a1a05feb6ecebadb5858d134bc8c95d6f261319cd9fa1bb95"

#define TEMPLATE_HASH_TH21_RESTAKE_REWARDED_DELEGATED_TOKENS_TESTNET "6b40ffc9169abd75107a45da5974c7e502d38773275abb231d747e4760b7ebee"
#define TEMPLATE_HASH_TH21_RESTAKE_REWARDED_DELEGATED_TOKENS_MAINNET "864edbff384335ef21c26b3bcf17d36b2b1d894afbe2b203f58099cc457971e4"

#define TEMPLATE_HASH_TH22_UNSTAKE_DELEGATED_TOKENS_TESTNET "61cbcd1c31bbfc9ceb4a5ac726e2f8b3d845a4fdf59b0ab23cbbfa8f16d7a024"
#define TEMPLATE_HASH_TH22_UNSTAKE_DELEGATED_TOKENS_MAINNET "262aeddd3f49fd6222d706c02696bd7d359ba962b6c30232cc93d7cf4166a23e"

#define TEMPLATE_HASH_TH23_WITHDRAW_UNSTAKED_DELEGATED_TOKENS_TESTNET "2ae983f78e32b989fafa58ee7910b131fb51a2a74356f7916624695cb8bf5964"
#define TEMPLATE_HASH_TH23_WITHDRAW_UNSTAKED_DELEGATED_TOKENS_MAINNET "12675a013c064b6d0ef11dbf13f92210489bf2b3d299b2f14cd09be70b37577f"

#define TEMPLATE_HASH_TH24_WITHDRAW_REWARDED_DELEGATED_TOKENS_TESTNET "b6d044a2a8f76dc148849d2edeffbc78226b00e0b7bb696bd120d05148d9ea73"
#define TEMPLATE_HASH_TH24_WITHDRAW_REWARDED_DELEGATED_TOKENS_MAINNET "2920ed29151943c1c061ba3eb81b904bdc78f658ad18b44b95df48cd96056929"

#ifdef __cplusplus
}
#endif
Loading

0 comments on commit 7821313

Please sign in to comment.