Skip to content

Commit c4623f8

Browse files
committed
add transfer of call message
1 parent e33195a commit c4623f8

3 files changed

Lines changed: 51 additions & 8 deletions

File tree

app/src/parser_txdef.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ extern "C" {
2727

2828
#define GAS_DIMENSIONS 2
2929
#define TOKEN_ID_SIZE 32
30-
#define ADDRESS_SIZE 29
30+
#define ADDRESS_SIZE 28
31+
3132
typedef enum {
3233
RUNTIME_BANK,
3334
RUNTIME_SEQUENCER_REGISTRY,
@@ -70,6 +71,11 @@ typedef struct {
7071
} address_t;
7172

7273
// CallMessage structs
74+
typedef struct {
75+
address_t to;
76+
coins_t coins;
77+
} transfer_t;
78+
7379
typedef struct {
7480
coins_t coins;
7581
} burn_t;
@@ -80,12 +86,13 @@ typedef struct {
8086
} mint_t;
8187

8288
typedef struct {
83-
address_t mint_to_address;
89+
token_id_t token_id;
8490
} freeze_t;
8591

8692
typedef struct {
8793
call_message_type_t type;
8894
union {
95+
transfer_t transfer;
8996
burn_t burn;
9097
mint_t mint;
9198
freeze_t freeze;

app/src/unsigned_transaction_reader.c

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ parser_error_t read_address(parser_context_t *ctx, address_t *address) {
5555
CHECK_INPUT(ctx);
5656
CHECK_INPUT(address);
5757

58-
// TODO: check if size is correct
58+
// TODO: check this value, MultiAddress enum?
59+
uint8_t unknown = 0;
60+
CHECK_ERROR(read_u8(ctx, &unknown));
61+
printf("unknown: %d\n", unknown);
62+
5963
address->address.len = ADDRESS_SIZE;
6064
address->address.ptr = ctx->buffer + ctx->offset;
6165
CTX_CHECK_AND_ADVANCE(ctx, ADDRESS_SIZE);
@@ -75,6 +79,16 @@ parser_error_t read_coins(parser_context_t *ctx, coins_t *coins) {
7579
return parser_ok;
7680
}
7781

82+
parser_error_t read_transfer(parser_context_t *ctx, transfer_t *transfer) {
83+
CHECK_INPUT(ctx);
84+
CHECK_INPUT(transfer);
85+
86+
CHECK_ERROR(read_address(ctx, &transfer->to));
87+
CHECK_ERROR(read_coins(ctx, &transfer->coins));
88+
89+
return parser_ok;
90+
}
91+
7892
parser_error_t read_mint(parser_context_t *ctx, mint_t *mint) {
7993
CHECK_INPUT(ctx);
8094
CHECK_INPUT(mint);
@@ -85,6 +99,22 @@ parser_error_t read_mint(parser_context_t *ctx, mint_t *mint) {
8599
return parser_ok;
86100
}
87101

102+
parser_error_t read_burn(parser_context_t *ctx, burn_t *burn) {
103+
CHECK_INPUT(ctx);
104+
CHECK_INPUT(burn);
105+
106+
CHECK_ERROR(read_coins(ctx, &burn->coins));
107+
return parser_ok;
108+
}
109+
110+
parser_error_t read_freeze(parser_context_t *ctx, freeze_t *freeze) {
111+
CHECK_INPUT(ctx);
112+
CHECK_INPUT(freeze);
113+
114+
CHECK_ERROR(read_token_id(ctx, &freeze->token_id));
115+
return parser_ok;
116+
}
117+
88118
parser_error_t read_call_message(parser_context_t *ctx, call_message_t *call_message) {
89119
CHECK_INPUT(ctx);
90120
CHECK_INPUT(call_message);
@@ -96,15 +126,21 @@ parser_error_t read_call_message(parser_context_t *ctx, call_message_t *call_mes
96126
print_string("CALL_MESSAGE_CREATE_TOKEN NOT IMPLEMENTED");
97127
return parser_unexpected_error;
98128
case CALL_MESSAGE_TRANSFER:
99-
print_string("CALL_MESSAGE_TRANSFER NOT IMPLEMENTED");
100-
return parser_unexpected_error;
129+
print_string("CALL_MESSAGE_TRANSFER");
130+
CHECK_ERROR(read_transfer(ctx, &call_message->transfer));
131+
break;
101132
case CALL_MESSAGE_BURN:
102-
print_string("CALL_MESSAGE_BURN NOT IMPLEMENTED");
103-
return parser_unexpected_error;
133+
print_string("CALL_MESSAGE_BURN");
134+
CHECK_ERROR(read_burn(ctx, &call_message->burn));
135+
break;
104136
case CALL_MESSAGE_MINT:
105137
print_string("CALL_MESSAGE_MINT");
106138
CHECK_ERROR(read_mint(ctx, &call_message->mint));
107139
break;
140+
case CALL_MESSAGE_FREEZE:
141+
print_string("CALL_MESSAGE_FREEZE");
142+
CHECK_ERROR(read_freeze(ctx, &call_message->freeze));
143+
break;
108144
default:
109145
printf("Unexpected call message type: %d\n", call_message->type);
110146
return parser_unexpected_error;

tests/parser_impl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ TEST(SCALE, ReadBytes) {
3636
uint8_t buffer[9000];
3737
auto bufferLen = parseHexString(
3838
buffer, sizeof(buffer),
39-
"00031032547698badcfe1032547698badcfe1717171717171717171717171717171717171717171717171717171717171706000b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b1032547698badcfe000000000000000000e876481700000000000000000000000100ca9a3b0000000000ca9a3b00000000e110000000000000");
39+
"0001000b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b1027000000000000000000000000000017171717171717171717171717171717171717171717171717171717171717060000000000000000000000000000000000e876481700000000000000000000000100ca9a3b0000000000ca9a3b00000000e110000000000000");
4040

4141
parser_parse(&ctx, buffer, bufferLen, &tx_obj);
4242

0 commit comments

Comments
 (0)