@@ -109,6 +109,37 @@ metrics_write( fd_snapin_tile_t * ctx ) {
109
109
FD_MGAUGE_SET ( SNAPIN , STATE , (ulong )ctx -> state );
110
110
}
111
111
112
+ static void
113
+ calculate_lthash ( fd_snapin_tile_t * ctx ) {
114
+ fd_funk_all_iter_t iter [1 ];
115
+ for ( fd_funk_all_iter_new ( ctx -> funk , iter );
116
+ !fd_funk_all_iter_done ( iter );
117
+ fd_funk_all_iter_next ( iter ) ) {
118
+ fd_funk_rec_t const * rec = fd_funk_all_iter_ele_const ( iter );
119
+ if ( !fd_funk_key_is_acc ( rec -> pair .key ) || /* not a solana record */
120
+ (rec -> flags & FD_FUNK_REC_FLAG_ERASE ) || /* this is a tombstone */
121
+ (rec -> pair .xid -> ul [0 ] | rec -> pair .xid -> ul [1 ]) != 0 /* not root xid */ ) {
122
+ continue ;
123
+ }
124
+
125
+ fd_account_meta_t const * meta = fd_funk_val ( rec , fd_funk_wksp (ctx -> funk ) );
126
+ fd_lthash_value_t new_account_lthash [1 ];
127
+ fd_hashes_account_lthash ( fd_type_pun_const (rec -> pair .key -> uc ),
128
+ meta ,
129
+ fd_account_meta_get_data_const ( meta ),
130
+ new_account_lthash );
131
+ FD_LOG_WARNING (("calculated account hash %s for %s" ,
132
+ FD_LTHASH_ENC_32_ALLOCA ( new_account_lthash ),
133
+ FD_BASE58_ENC_32_ALLOCA ( (fd_pubkey_t * )rec -> pair .key -> uc ) ));
134
+ fd_lthash_add ( & ctx -> lthash_info .full .lthash , new_account_lthash );
135
+ }
136
+ if ( FD_UNLIKELY ( memcmp ( ctx -> lthash_info .full .lthash .bytes , ctx -> lthash_info .full .manifest_lthash .bytes , sizeof (fd_lthash_value_t ) ) ) ) {
137
+ FD_LOG_ERR (( "calculated accounts lthash %s does not match accounts lthash %s in snapshot manifest" ,
138
+ FD_LTHASH_ENC_32_ALLOCA ( & ctx -> lthash_info .full .lthash ),
139
+ FD_LTHASH_ENC_32_ALLOCA ( & ctx -> lthash_info .full .manifest_lthash ) ));
140
+ }
141
+ }
142
+
112
143
static void
113
144
manifest_cb ( void * _ctx ,
114
145
ulong manifest_sz ) {
@@ -142,13 +173,13 @@ is_duplicate_account( fd_snapin_tile_t * ctx,
142
173
/* TODO: Reaching here means the existing value is a duplicate
143
174
account. We need to hash the existing account and subtract that
144
175
hash from the running lthash. */
145
- fd_lthash_value_t old_account_lthash [1 ];
146
- fd_lthash_value_t * lthash = ctx -> full ? & ctx -> lthash_info .full .lthash : & ctx -> lthash_info .incremental .lthash ;
147
- fd_hashes_account_lthash ( (fd_pubkey_t * )account_pubkey ,
148
- rec_meta ,
149
- fd_account_meta_get_data_const ( rec_meta ),
150
- old_account_lthash );
151
- fd_lthash_sub ( lthash , old_account_lthash );
176
+ // fd_lthash_value_t old_account_lthash[1];
177
+ // fd_lthash_value_t * lthash = ctx->full ? &ctx->lthash_info.full.lthash : &ctx->lthash_info.incremental.lthash;
178
+ // fd_hashes_account_lthash( (fd_pubkey_t*)account_pubkey,
179
+ // rec_meta,
180
+ // fd_account_meta_get_data_const( rec_meta ),
181
+ // old_account_lthash );
182
+ // fd_lthash_sub( lthash, old_account_lthash );
152
183
}
153
184
154
185
return 0 ;
@@ -201,13 +232,13 @@ account_data_cb( void * _ctx,
201
232
ctx -> acc_data += data_sz ;
202
233
203
234
if ( ctx -> acc_data == ctx -> acc_data_end ) {
204
- fd_lthash_value_t new_account_lthash [1 ];
205
- fd_lthash_value_t * lthash = ctx -> full ? & ctx -> lthash_info .full .lthash : & ctx -> lthash_info .incremental .lthash ;
206
- fd_hashes_account_lthash ( & ctx -> acc_pubkey ,
207
- ctx -> acc_meta ,
208
- ctx -> acc_data_start ,
209
- new_account_lthash );
210
- fd_lthash_add ( lthash , new_account_lthash );
235
+ // fd_lthash_value_t new_account_lthash[1];
236
+ // fd_lthash_value_t * lthash = ctx->full ? &ctx->lthash_info.full.lthash : &ctx->lthash_info.incremental.lthash;
237
+ // fd_hashes_account_lthash( &ctx->acc_pubkey,
238
+ // ctx->acc_meta,
239
+ // ctx->acc_data_start,
240
+ // new_account_lthash );
241
+ // fd_lthash_add( lthash, new_account_lthash );
211
242
}
212
243
}
213
244
@@ -290,13 +321,14 @@ handle_control_frag( fd_snapin_tile_t * ctx,
290
321
break ;
291
322
}
292
323
293
- if ( FD_UNLIKELY ( memcmp ( ctx -> lthash_info .full .lthash .bytes , ctx -> lthash_info .full .manifest_lthash .bytes , sizeof (fd_lthash_value_t ) ) ) ) {
294
- FD_LOG_WARNING (( "calculated accounts lthash %s does not match accounts lthash %s in snapshot manifest" ,
295
- FD_LTHASH_ENC_32_ALLOCA ( & ctx -> lthash_info .full .lthash ),
296
- FD_LTHASH_ENC_32_ALLOCA ( & ctx -> lthash_info .full .manifest_lthash ) ));
297
- transition_malformed ( ctx , stem );
298
- break ;
299
- }
324
+ calculate_lthash ( ctx );
325
+ // if( FD_UNLIKELY( memcmp( ctx->lthash_info.full.lthash.bytes, ctx->lthash_info.full.manifest_lthash.bytes, sizeof(fd_lthash_value_t) ) ) ) {
326
+ // FD_LOG_WARNING(( "calculated accounts lthash %s does not match accounts lthash %s in snapshot manifest",
327
+ // FD_LTHASH_ENC_32_ALLOCA( &ctx->lthash_info.full.lthash ),
328
+ // FD_LTHASH_ENC_32_ALLOCA( &ctx->lthash_info.full.manifest_lthash ) ));
329
+ // transition_malformed( ctx, stem );
330
+ // break;
331
+ // }
300
332
301
333
fd_snapshot_parser_reset ( ctx -> ssparse , fd_chunk_to_laddr ( ctx -> manifest_out .wksp , ctx -> manifest_out .chunk ), ctx -> manifest_out .mtu );
302
334
@@ -312,14 +344,15 @@ handle_control_frag( fd_snapin_tile_t * ctx,
312
344
break ;
313
345
}
314
346
315
- if ( FD_UNLIKELY ( memcmp ( ctx -> lthash_info .full .lthash .bytes , ctx -> lthash_info .full .manifest_lthash .bytes , sizeof (fd_lthash_value_t ) ) ||
316
- memcmp ( ctx -> lthash_info .incremental .lthash .bytes , ctx -> lthash_info .incremental .manifest_lthash .bytes , sizeof (fd_lthash_value_t ) ) ) ) {
317
- FD_LOG_WARNING (( "calculated accounts lthash %s does not match accounts lthash %s in snapshot manifest" ,
318
- FD_LTHASH_ENC_32_ALLOCA ( & ctx -> lthash_info .full .lthash ),
319
- FD_LTHASH_ENC_32_ALLOCA ( & ctx -> lthash_info .full .manifest_lthash ) ));
320
- transition_malformed ( ctx , stem );
321
- break ;
322
- }
347
+ calculate_lthash ( ctx );
348
+ // if( FD_UNLIKELY( memcmp( ctx->lthash_info.full.lthash.bytes, ctx->lthash_info.full.manifest_lthash.bytes, sizeof(fd_lthash_value_t) ) ||
349
+ // memcmp( ctx->lthash_info.incremental.lthash.bytes, ctx->lthash_info.incremental.manifest_lthash.bytes, sizeof(fd_lthash_value_t) ) ) ) {
350
+ // FD_LOG_WARNING(( "calculated accounts lthash %s does not match accounts lthash %s in snapshot manifest",
351
+ // FD_LTHASH_ENC_32_ALLOCA( &ctx->lthash_info.full.lthash ),
352
+ // FD_LTHASH_ENC_32_ALLOCA( &ctx->lthash_info.full.manifest_lthash ) ));
353
+ // transition_malformed( ctx, stem );
354
+ // break;
355
+ // }
323
356
324
357
if ( FD_LIKELY ( ctx -> funk_txn ) ) fd_funk_txn_publish_into_parent ( ctx -> funk , ctx -> funk_txn , 0 );
325
358
fd_stem_publish ( stem , 0UL , fd_ssmsg_sig ( FD_SSMSG_DONE , 0UL ), 0UL , 0UL , 0UL , 0UL , 0UL );
0 commit comments