diff --git a/src/flamenco/types/fd_type_names.c b/src/flamenco/types/fd_type_names.c index c98102db29..7f8e76d17b 100644 --- a/src/flamenco/types/fd_type_names.c +++ b/src/flamenco/types/fd_type_names.c @@ -1,5 +1,5 @@ // This is an auto-generated file. To add entries, edit fd_types.json -#define FD_TYPE_NAME_COUNT 197 +#define FD_TYPE_NAME_COUNT 199 static char const * fd_type_names[FD_TYPE_NAME_COUNT] = { "fd_hash", "fd_pubkey", @@ -79,6 +79,8 @@ static char const * fd_type_names[FD_TYPE_NAME_COUNT] = { "fd_vote_state_update", "fd_compact_vote_state_update", "fd_compact_vote_state_update_switch", + "fd_tower_sync", + "fd_tower_sync_switch", "fd_slot_history_inner", "fd_slot_history_bitvec", "fd_slot_history", diff --git a/src/flamenco/types/fd_types.c b/src/flamenco/types/fd_types.c index b36a3c04ff..3db7f08477 100644 --- a/src/flamenco/types/fd_types.c +++ b/src/flamenco/types/fd_types.c @@ -8585,6 +8585,266 @@ int fd_compact_vote_state_update_switch_encode(fd_compact_vote_state_update_swit return FD_BINCODE_SUCCESS; } +int fd_tower_sync_decode(fd_tower_sync_t* self, fd_bincode_decode_ctx_t * ctx) { + void const * data = ctx->data; + int err = fd_tower_sync_decode_preflight(ctx); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + ctx->data = data; + fd_tower_sync_new(self); + fd_tower_sync_decode_unsafe(self, ctx); + return FD_BINCODE_SUCCESS; +} +int fd_tower_sync_decode_preflight(fd_bincode_decode_ctx_t * ctx) { + int err; + for (ulong i = 0; i < 32; ++i) { + err = fd_vote_lockout_decode_preflight(ctx); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + } + err = fd_bincode_uint64_decode_preflight(ctx); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + { + uchar o; + err = fd_bincode_bool_decode( &o, ctx ); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + if( o ) { + err = fd_bincode_uint64_decode_preflight( ctx ); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + } + } + err = fd_hash_decode_preflight(ctx); + if ( FD_UNLIKELY(err) ) return err; + { + uchar o; + err = fd_bincode_bool_decode( &o, ctx ); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + if( o ) { + err = fd_bincode_uint64_decode_preflight( ctx ); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + } + } + err = fd_hash_decode_preflight(ctx); + if ( FD_UNLIKELY(err) ) return err; + return FD_BINCODE_SUCCESS; +} +void fd_tower_sync_decode_unsafe(fd_tower_sync_t* self, fd_bincode_decode_ctx_t * ctx) { + for (ulong i = 0; i < 32; ++i) { + fd_vote_lockout_decode_unsafe(self->lockouts + i, ctx); + } + fd_bincode_uint64_decode_unsafe(&self->lockouts_cnt, ctx); + { + uchar o; + fd_bincode_bool_decode_unsafe( &o, ctx ); + self->has_root = !!o; + if( o ) { + fd_bincode_uint64_decode_unsafe( &self->root, ctx ); + } + } + fd_hash_decode_unsafe(&self->hash, ctx); + { + uchar o; + fd_bincode_bool_decode_unsafe( &o, ctx ); + self->has_timestamp = !!o; + if( o ) { + fd_bincode_uint64_decode_unsafe( &self->timestamp, ctx ); + } + } + fd_hash_decode_unsafe(&self->block_id, ctx); +} +int fd_tower_sync_decode_offsets(fd_tower_sync_off_t* self, fd_bincode_decode_ctx_t * ctx) { + uchar const * data = ctx->data; + int err; + self->lockouts_off = (uint)((ulong)ctx->data - (ulong)data); + for (ulong i = 0; i < 32; ++i) { + err = fd_vote_lockout_decode_preflight(ctx); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + } + self->lockouts_cnt_off = (uint)((ulong)ctx->data - (ulong)data); + err = fd_bincode_uint64_decode_preflight(ctx); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + self->root_off = (uint)((ulong)ctx->data - (ulong)data); + { + uchar o; + err = fd_bincode_bool_decode( &o, ctx ); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + if( o ) { + err = fd_bincode_uint64_decode_preflight( ctx ); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + } + } + self->hash_off = (uint)((ulong)ctx->data - (ulong)data); + err = fd_hash_decode_preflight(ctx); + if ( FD_UNLIKELY(err) ) return err; + self->timestamp_off = (uint)((ulong)ctx->data - (ulong)data); + { + uchar o; + err = fd_bincode_bool_decode( &o, ctx ); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + if( o ) { + err = fd_bincode_uint64_decode_preflight( ctx ); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + } + } + self->block_id_off = (uint)((ulong)ctx->data - (ulong)data); + err = fd_hash_decode_preflight(ctx); + if ( FD_UNLIKELY(err) ) return err; + return FD_BINCODE_SUCCESS; +} +void fd_tower_sync_new(fd_tower_sync_t* self) { + fd_memset(self, 0, sizeof(fd_tower_sync_t)); + for (ulong i = 0; i < 32; ++i) + fd_vote_lockout_new(self->lockouts + i); + fd_hash_new(&self->hash); + fd_hash_new(&self->block_id); +} +void fd_tower_sync_destroy(fd_tower_sync_t* self, fd_bincode_destroy_ctx_t * ctx) { + for (ulong i = 0; i < 32; ++i) + fd_vote_lockout_destroy(self->lockouts + i, ctx); + if( self->has_root ) { + self->has_root = 0; + } + fd_hash_destroy(&self->hash, ctx); + if( self->has_timestamp ) { + self->has_timestamp = 0; + } + fd_hash_destroy(&self->block_id, ctx); +} + +ulong fd_tower_sync_footprint( void ){ return FD_TOWER_SYNC_FOOTPRINT; } +ulong fd_tower_sync_align( void ){ return FD_TOWER_SYNC_ALIGN; } + +void fd_tower_sync_walk(void * w, fd_tower_sync_t const * self, fd_types_walk_fn_t fun, const char *name, uint level) { + fun(w, self, name, FD_FLAMENCO_TYPE_MAP, "fd_tower_sync", level++); + fun(w, NULL, "lockouts", FD_FLAMENCO_TYPE_ARR, "vote_lockout[]", level++); + for (ulong i = 0; i < 32; ++i) + fd_vote_lockout_walk(w, self->lockouts + i, fun, "vote_lockout", level ); + fun(w, NULL, "lockouts", FD_FLAMENCO_TYPE_ARR_END, "vote_lockout[]", level--); + fun( w, &self->lockouts_cnt, "lockouts_cnt", FD_FLAMENCO_TYPE_ULONG, "ulong", level ); + if( !self->has_root ) { + fun( w, NULL, "root", FD_FLAMENCO_TYPE_NULL, "ulong", level ); + } else { + fun( w, &self->root, "root", FD_FLAMENCO_TYPE_ULONG, "ulong", level ); + } + fd_hash_walk(w, &self->hash, fun, "hash", level); + if( !self->has_timestamp ) { + fun( w, NULL, "timestamp", FD_FLAMENCO_TYPE_NULL, "ulong", level ); + } else { + fun( w, &self->timestamp, "timestamp", FD_FLAMENCO_TYPE_ULONG, "ulong", level ); + } + fd_hash_walk(w, &self->block_id, fun, "block_id", level); + fun(w, self, name, FD_FLAMENCO_TYPE_MAP_END, "fd_tower_sync", level--); +} +ulong fd_tower_sync_size(fd_tower_sync_t const * self) { + ulong size = 0; + for (ulong i = 0; i < 32; ++i) + size += fd_vote_lockout_size(self->lockouts + i); + size += sizeof(ulong); + size += sizeof(char); + if( self->has_root ) { + size += sizeof(ulong); + } + size += fd_hash_size(&self->hash); + size += sizeof(char); + if( self->has_timestamp ) { + size += sizeof(ulong); + } + size += fd_hash_size(&self->block_id); + return size; +} + +int fd_tower_sync_encode(fd_tower_sync_t const * self, fd_bincode_encode_ctx_t * ctx) { + int err; + for (ulong i = 0; i < 32; ++i) { + err = fd_vote_lockout_encode(self->lockouts + i, ctx); + if ( FD_UNLIKELY(err) ) return err; + } + err = fd_bincode_uint64_encode(self->lockouts_cnt, ctx); + if ( FD_UNLIKELY(err) ) return err; + err = fd_bincode_bool_encode( self->has_root, ctx ); + if( FD_UNLIKELY( err ) ) return err; + if( self->has_root ) { + err = fd_bincode_uint64_encode( self->root, ctx ); + if( FD_UNLIKELY( err ) ) return err; + } + err = fd_hash_encode(&self->hash, ctx); + if ( FD_UNLIKELY(err) ) return err; + err = fd_bincode_bool_encode( self->has_timestamp, ctx ); + if( FD_UNLIKELY( err ) ) return err; + if( self->has_timestamp ) { + err = fd_bincode_uint64_encode( self->timestamp, ctx ); + if( FD_UNLIKELY( err ) ) return err; + } + err = fd_hash_encode(&self->block_id, ctx); + if ( FD_UNLIKELY(err) ) return err; + return FD_BINCODE_SUCCESS; +} + +int fd_tower_sync_switch_decode(fd_tower_sync_switch_t* self, fd_bincode_decode_ctx_t * ctx) { + void const * data = ctx->data; + int err = fd_tower_sync_switch_decode_preflight(ctx); + if( FD_UNLIKELY( err!=FD_BINCODE_SUCCESS ) ) return err; + ctx->data = data; + fd_tower_sync_switch_new(self); + fd_tower_sync_switch_decode_unsafe(self, ctx); + return FD_BINCODE_SUCCESS; +} +int fd_tower_sync_switch_decode_preflight(fd_bincode_decode_ctx_t * ctx) { + int err; + err = fd_tower_sync_decode_preflight(ctx); + if ( FD_UNLIKELY(err) ) return err; + err = fd_hash_decode_preflight(ctx); + if ( FD_UNLIKELY(err) ) return err; + return FD_BINCODE_SUCCESS; +} +void fd_tower_sync_switch_decode_unsafe(fd_tower_sync_switch_t* self, fd_bincode_decode_ctx_t * ctx) { + fd_tower_sync_decode_unsafe(&self->tower_sync, ctx); + fd_hash_decode_unsafe(&self->hash, ctx); +} +int fd_tower_sync_switch_decode_offsets(fd_tower_sync_switch_off_t* self, fd_bincode_decode_ctx_t * ctx) { + uchar const * data = ctx->data; + int err; + self->tower_sync_off = (uint)((ulong)ctx->data - (ulong)data); + err = fd_tower_sync_decode_preflight(ctx); + if ( FD_UNLIKELY(err) ) return err; + self->hash_off = (uint)((ulong)ctx->data - (ulong)data); + err = fd_hash_decode_preflight(ctx); + if ( FD_UNLIKELY(err) ) return err; + return FD_BINCODE_SUCCESS; +} +void fd_tower_sync_switch_new(fd_tower_sync_switch_t* self) { + fd_memset(self, 0, sizeof(fd_tower_sync_switch_t)); + fd_tower_sync_new(&self->tower_sync); + fd_hash_new(&self->hash); +} +void fd_tower_sync_switch_destroy(fd_tower_sync_switch_t* self, fd_bincode_destroy_ctx_t * ctx) { + fd_tower_sync_destroy(&self->tower_sync, ctx); + fd_hash_destroy(&self->hash, ctx); +} + +ulong fd_tower_sync_switch_footprint( void ){ return FD_TOWER_SYNC_SWITCH_FOOTPRINT; } +ulong fd_tower_sync_switch_align( void ){ return FD_TOWER_SYNC_SWITCH_ALIGN; } + +void fd_tower_sync_switch_walk(void * w, fd_tower_sync_switch_t const * self, fd_types_walk_fn_t fun, const char *name, uint level) { + fun(w, self, name, FD_FLAMENCO_TYPE_MAP, "fd_tower_sync_switch", level++); + fd_tower_sync_walk(w, &self->tower_sync, fun, "tower_sync", level); + fd_hash_walk(w, &self->hash, fun, "hash", level); + fun(w, self, name, FD_FLAMENCO_TYPE_MAP_END, "fd_tower_sync_switch", level--); +} +ulong fd_tower_sync_switch_size(fd_tower_sync_switch_t const * self) { + ulong size = 0; + size += fd_tower_sync_size(&self->tower_sync); + size += fd_hash_size(&self->hash); + return size; +} + +int fd_tower_sync_switch_encode(fd_tower_sync_switch_t const * self, fd_bincode_encode_ctx_t * ctx) { + int err; + err = fd_tower_sync_encode(&self->tower_sync, ctx); + if ( FD_UNLIKELY(err) ) return err; + err = fd_hash_encode(&self->hash, ctx); + if ( FD_UNLIKELY(err) ) return err; + return FD_BINCODE_SUCCESS; +} + int fd_slot_history_inner_decode(fd_slot_history_inner_t* self, fd_bincode_decode_ctx_t * ctx) { void const * data = ctx->data; int err = fd_slot_history_inner_decode_preflight(ctx); @@ -11670,6 +11930,12 @@ FD_FN_PURE uchar fd_vote_instruction_is_compact_update_vote_state(fd_vote_instru FD_FN_PURE uchar fd_vote_instruction_is_compact_update_vote_state_switch(fd_vote_instruction_t const * self) { return self->discriminant == 13; } +FD_FN_PURE uchar fd_vote_instruction_is_tower_sync(fd_vote_instruction_t const * self) { + return self->discriminant == 14; +} +FD_FN_PURE uchar fd_vote_instruction_is_tower_sync_switch(fd_vote_instruction_t const * self) { + return self->discriminant == 15; +} void fd_vote_instruction_inner_new(fd_vote_instruction_inner_t* self, uint discriminant); int fd_vote_instruction_inner_decode_preflight(uint discriminant, fd_bincode_decode_ctx_t * ctx) { int err; @@ -11742,6 +12008,16 @@ int fd_vote_instruction_inner_decode_preflight(uint discriminant, fd_bincode_dec if ( FD_UNLIKELY(err) ) return err; return FD_BINCODE_SUCCESS; } + case 14: { + err = fd_tower_sync_decode_preflight(ctx); + if ( FD_UNLIKELY(err) ) return err; + return FD_BINCODE_SUCCESS; + } + case 15: { + err = fd_tower_sync_switch_decode_preflight(ctx); + if ( FD_UNLIKELY(err) ) return err; + return FD_BINCODE_SUCCESS; + } default: return FD_BINCODE_ERR_ENCODING; } } @@ -11802,6 +12078,14 @@ void fd_vote_instruction_inner_decode_unsafe(fd_vote_instruction_inner_t* self, fd_compact_vote_state_update_switch_decode_unsafe(&self->compact_update_vote_state_switch, ctx); break; } + case 14: { + fd_tower_sync_decode_unsafe(&self->tower_sync, ctx); + break; + } + case 15: { + fd_tower_sync_switch_decode_unsafe(&self->tower_sync_switch, ctx); + break; + } } } int fd_vote_instruction_decode(fd_vote_instruction_t* self, fd_bincode_decode_ctx_t * ctx) { @@ -11878,6 +12162,14 @@ void fd_vote_instruction_inner_new(fd_vote_instruction_inner_t* self, uint discr fd_compact_vote_state_update_switch_new(&self->compact_update_vote_state_switch); break; } + case 14: { + fd_tower_sync_new(&self->tower_sync); + break; + } + case 15: { + fd_tower_sync_switch_new(&self->tower_sync_switch); + break; + } default: break; // FD_LOG_ERR(( "unhandled type")); } } @@ -11941,6 +12233,14 @@ void fd_vote_instruction_inner_destroy(fd_vote_instruction_inner_t* self, uint d fd_compact_vote_state_update_switch_destroy(&self->compact_update_vote_state_switch, ctx); break; } + case 14: { + fd_tower_sync_destroy(&self->tower_sync, ctx); + break; + } + case 15: { + fd_tower_sync_switch_destroy(&self->tower_sync_switch, ctx); + break; + } default: break; // FD_LOG_ERR(( "unhandled type" )); } } @@ -12006,6 +12306,14 @@ void fd_vote_instruction_walk(void * w, fd_vote_instruction_t const * self, fd_t fd_compact_vote_state_update_switch_walk(w, &self->inner.compact_update_vote_state_switch, fun, "compact_update_vote_state_switch", level); break; } + case 14: { + fd_tower_sync_walk(w, &self->inner.tower_sync, fun, "tower_sync", level); + break; + } + case 15: { + fd_tower_sync_switch_walk(w, &self->inner.tower_sync_switch, fun, "tower_sync_switch", level); + break; + } } fun(w, self, name, FD_FLAMENCO_TYPE_MAP_END, "fd_vote_instruction", level--); } @@ -12065,6 +12373,14 @@ ulong fd_vote_instruction_size(fd_vote_instruction_t const * self) { size += fd_compact_vote_state_update_switch_size(&self->inner.compact_update_vote_state_switch); break; } + case 14: { + size += fd_tower_sync_size(&self->inner.tower_sync); + break; + } + case 15: { + size += fd_tower_sync_switch_size(&self->inner.tower_sync_switch); + break; + } } return size; } @@ -12137,6 +12453,16 @@ int fd_vote_instruction_inner_encode(fd_vote_instruction_inner_t const * self, u if ( FD_UNLIKELY(err) ) return err; break; } + case 14: { + err = fd_tower_sync_encode(&self->tower_sync, ctx); + if ( FD_UNLIKELY(err) ) return err; + break; + } + case 15: { + err = fd_tower_sync_switch_encode(&self->tower_sync_switch, ctx); + if ( FD_UNLIKELY(err) ) return err; + break; + } } return FD_BINCODE_SUCCESS; } diff --git a/src/flamenco/types/fd_types.h b/src/flamenco/types/fd_types.h index 49f042d0e0..7100aff89f 100644 --- a/src/flamenco/types/fd_types.h +++ b/src/flamenco/types/fd_types.h @@ -1837,6 +1837,52 @@ typedef struct fd_compact_vote_state_update_switch_off fd_compact_vote_state_upd #define FD_COMPACT_VOTE_STATE_UPDATE_SWITCH_OFF_FOOTPRINT sizeof(fd_compact_vote_state_update_switch_off_t) #define FD_COMPACT_VOTE_STATE_UPDATE_SWITCH_OFF_ALIGN (8UL) +/* https://github.com/solana-labs/solana/blob/8f2c8b8388a495d2728909e30460aa40dcc5d733/programs/vote/src/vote_state/mod.rs#L185 */ +/* Encoded Size: Dynamic */ +struct __attribute__((aligned(8UL))) fd_tower_sync { + fd_vote_lockout_t lockouts[32]; + ulong lockouts_cnt; + ulong root; + uchar has_root; + fd_hash_t hash; + ulong timestamp; + uchar has_timestamp; + fd_hash_t block_id; +}; +typedef struct fd_tower_sync fd_tower_sync_t; +#define FD_TOWER_SYNC_FOOTPRINT sizeof(fd_tower_sync_t) +#define FD_TOWER_SYNC_ALIGN (8UL) + +struct __attribute__((aligned(8UL))) fd_tower_sync_off { + uint lockouts_off; + uint lockouts_cnt_off; + uint root_off; + uint hash_off; + uint timestamp_off; + uint block_id_off; +}; +typedef struct fd_tower_sync_off fd_tower_sync_off_t; +#define FD_TOWER_SYNC_OFF_FOOTPRINT sizeof(fd_tower_sync_off_t) +#define FD_TOWER_SYNC_OFF_ALIGN (8UL) + +/* https://github.com/solana-labs/solana/blob/8f2c8b8388a495d2728909e30460aa40dcc5d733/programs/vote/src/vote_instruction.rs#L104 */ +/* Encoded Size: Dynamic */ +struct __attribute__((aligned(8UL))) fd_tower_sync_switch { + fd_tower_sync_t tower_sync; + fd_hash_t hash; +}; +typedef struct fd_tower_sync_switch fd_tower_sync_switch_t; +#define FD_TOWER_SYNC_SWITCH_FOOTPRINT sizeof(fd_tower_sync_switch_t) +#define FD_TOWER_SYNC_SWITCH_ALIGN (8UL) + +struct __attribute__((aligned(8UL))) fd_tower_sync_switch_off { + uint tower_sync_off; + uint hash_off; +}; +typedef struct fd_tower_sync_switch_off fd_tower_sync_switch_off_t; +#define FD_TOWER_SYNC_SWITCH_OFF_FOOTPRINT sizeof(fd_tower_sync_switch_off_t) +#define FD_TOWER_SYNC_SWITCH_OFF_ALIGN (8UL) + /* Encoded Size: Dynamic */ struct __attribute__((aligned(8UL))) fd_slot_history_inner { ulong blocks_len; @@ -2518,6 +2564,8 @@ union fd_vote_instruction_inner { fd_vote_authorize_checked_with_seed_args_t authorize_checked_with_seed; fd_compact_vote_state_update_t compact_update_vote_state; fd_compact_vote_state_update_switch_t compact_update_vote_state_switch; + fd_tower_sync_t tower_sync; + fd_tower_sync_switch_t tower_sync_switch; }; typedef union fd_vote_instruction_inner fd_vote_instruction_inner_t; @@ -5228,6 +5276,30 @@ ulong fd_compact_vote_state_update_switch_size(fd_compact_vote_state_update_swit ulong fd_compact_vote_state_update_switch_footprint( void ); ulong fd_compact_vote_state_update_switch_align( void ); +void fd_tower_sync_new(fd_tower_sync_t* self); +int fd_tower_sync_decode(fd_tower_sync_t* self, fd_bincode_decode_ctx_t * ctx); +int fd_tower_sync_decode_preflight(fd_bincode_decode_ctx_t * ctx); +void fd_tower_sync_decode_unsafe(fd_tower_sync_t* self, fd_bincode_decode_ctx_t * ctx); +int fd_tower_sync_decode_offsets(fd_tower_sync_off_t* self, fd_bincode_decode_ctx_t * ctx); +int fd_tower_sync_encode(fd_tower_sync_t const * self, fd_bincode_encode_ctx_t * ctx); +void fd_tower_sync_destroy(fd_tower_sync_t* self, fd_bincode_destroy_ctx_t * ctx); +void fd_tower_sync_walk(void * w, fd_tower_sync_t const * self, fd_types_walk_fn_t fun, const char *name, uint level); +ulong fd_tower_sync_size(fd_tower_sync_t const * self); +ulong fd_tower_sync_footprint( void ); +ulong fd_tower_sync_align( void ); + +void fd_tower_sync_switch_new(fd_tower_sync_switch_t* self); +int fd_tower_sync_switch_decode(fd_tower_sync_switch_t* self, fd_bincode_decode_ctx_t * ctx); +int fd_tower_sync_switch_decode_preflight(fd_bincode_decode_ctx_t * ctx); +void fd_tower_sync_switch_decode_unsafe(fd_tower_sync_switch_t* self, fd_bincode_decode_ctx_t * ctx); +int fd_tower_sync_switch_decode_offsets(fd_tower_sync_switch_off_t* self, fd_bincode_decode_ctx_t * ctx); +int fd_tower_sync_switch_encode(fd_tower_sync_switch_t const * self, fd_bincode_encode_ctx_t * ctx); +void fd_tower_sync_switch_destroy(fd_tower_sync_switch_t* self, fd_bincode_destroy_ctx_t * ctx); +void fd_tower_sync_switch_walk(void * w, fd_tower_sync_switch_t const * self, fd_types_walk_fn_t fun, const char *name, uint level); +ulong fd_tower_sync_switch_size(fd_tower_sync_switch_t const * self); +ulong fd_tower_sync_switch_footprint( void ); +ulong fd_tower_sync_switch_align( void ); + void fd_slot_history_inner_new(fd_slot_history_inner_t* self); int fd_slot_history_inner_decode(fd_slot_history_inner_t* self, fd_bincode_decode_ctx_t * ctx); int fd_slot_history_inner_decode_preflight(fd_bincode_decode_ctx_t * ctx); @@ -5584,6 +5656,8 @@ FD_FN_PURE uchar fd_vote_instruction_is_authorize_with_seed(fd_vote_instruction_ FD_FN_PURE uchar fd_vote_instruction_is_authorize_checked_with_seed(fd_vote_instruction_t const * self); FD_FN_PURE uchar fd_vote_instruction_is_compact_update_vote_state(fd_vote_instruction_t const * self); FD_FN_PURE uchar fd_vote_instruction_is_compact_update_vote_state_switch(fd_vote_instruction_t const * self); +FD_FN_PURE uchar fd_vote_instruction_is_tower_sync(fd_vote_instruction_t const * self); +FD_FN_PURE uchar fd_vote_instruction_is_tower_sync_switch(fd_vote_instruction_t const * self); enum { fd_vote_instruction_enum_initialize_account = 0, fd_vote_instruction_enum_authorize = 1, @@ -5599,6 +5673,8 @@ fd_vote_instruction_enum_authorize_with_seed = 10, fd_vote_instruction_enum_authorize_checked_with_seed = 11, fd_vote_instruction_enum_compact_update_vote_state = 12, fd_vote_instruction_enum_compact_update_vote_state_switch = 13, +fd_vote_instruction_enum_tower_sync = 14, +fd_vote_instruction_enum_tower_sync_switch = 15, }; void fd_system_program_instruction_create_account_new(fd_system_program_instruction_create_account_t* self); int fd_system_program_instruction_create_account_decode(fd_system_program_instruction_create_account_t* self, fd_bincode_decode_ctx_t * ctx); diff --git a/src/flamenco/types/fd_types.json b/src/flamenco/types/fd_types.json index 9d982718e3..264eeca83d 100644 --- a/src/flamenco/types/fd_types.json +++ b/src/flamenco/types/fd_types.json @@ -822,6 +822,28 @@ ], "comment": "https://github.com/solana-labs/solana/blob/252438e28fbfb2c695fe1215171b83456e4b761c/programs/vote/src/vote_instruction.rs#L143" }, + { + "name": "tower_sync", + "type": "struct", + "fields": [ + { "name": "lockouts", "type": "array", "element": "vote_lockout", "length": 32 }, + { "name": "lockouts_cnt", "type": "ulong" }, + { "name": "root", "type": "option", "element": "ulong", "flat": true }, + { "name": "hash", "type": "hash" }, + { "name": "timestamp", "type": "option", "element": "ulong", "flat": true }, + { "name": "block_id", "type": "hash" } + ], + "comment": "https://github.com/solana-labs/solana/blob/8f2c8b8388a495d2728909e30460aa40dcc5d733/programs/vote/src/vote_state/mod.rs#L185" + }, + { + "name": "tower_sync_switch", + "type": "struct", + "fields": [ + { "name": "tower_sync", "type": "tower_sync" }, + { "name": "hash", "type": "hash" } + ], + "comment": "https://github.com/solana-labs/solana/blob/8f2c8b8388a495d2728909e30460aa40dcc5d733/programs/vote/src/vote_instruction.rs#L104" + }, { "name": "slot_history_inner", "type": "struct", @@ -1142,7 +1164,9 @@ { "name": "authorize_with_seed", "type": "vote_authorize_with_seed_args" }, { "name": "authorize_checked_with_seed", "type": "vote_authorize_checked_with_seed_args" }, { "name": "compact_update_vote_state", "type": "compact_vote_state_update"}, - { "name": "compact_update_vote_state_switch", "type": "compact_vote_state_update_switch"} + { "name": "compact_update_vote_state_switch", "type": "compact_vote_state_update_switch"}, + { "name": "tower_sync", "type": "tower_sync"}, + { "name": "tower_sync_switch", "type": "tower_sync_switch"} ], "comment": "https://github.com/firedancer-io/solana/blob/53a4e5d6c58b2ffe89b09304e4437f8ca198dadd/programs/vote/src/vote_instruction.rs#L21" },