@@ -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+
7892parser_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+
88118parser_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 ;
0 commit comments