LCOV - code coverage report
Current view: top level - flamenco/runtime/sysvar - fd_sysvar_last_restart_slot.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 33 36 91.7 %
Date: 2026-07-25 05:22:36 Functions: 4 5 80.0 %

          Line data    Source code
       1             : #include "fd_sysvar_last_restart_slot.h"
       2             : #include "fd_sysvar.h"
       3             : #include "../fd_bank.h"
       4             : #include "../fd_system_ids.h"
       5             : 
       6             : static void
       7             : fd_sysvar_last_restart_slot_write( fd_bank_t *        bank,
       8             :                                    fd_accdb_t *       accdb,
       9             :                                    fd_capture_ctx_t * capture_ctx,
      10           6 :                                    ulong              slot ) {
      11           6 :   uchar enc[ 8 ];
      12           6 :   FD_STORE( ulong, enc, slot );
      13           6 :   fd_sysvar_account_update( bank, accdb, capture_ctx, &fd_sysvar_last_restart_slot_id, enc, sizeof(enc) );
      14           6 : }
      15             : 
      16             : void
      17             : fd_sysvar_last_restart_slot_init( fd_bank_t *        bank,
      18             :                                   fd_accdb_t *       accdb,
      19           0 :                                   fd_capture_ctx_t * capture_ctx ) {
      20           0 :   fd_sysvar_last_restart_slot_write( bank, accdb, capture_ctx, 0UL );
      21           0 : }
      22             : 
      23             : ulong
      24             : fd_sysvar_last_restart_slot_read( fd_accdb_t *       accdb,
      25             :                                   fd_accdb_fork_id_t fork_id,
      26        4542 :                                   ulong              sentinel ) {
      27        4542 :   fd_acc_t acc = fd_accdb_read_one( accdb, fork_id, fd_sysvar_last_restart_slot_id.uc );
      28        4542 :   if( FD_UNLIKELY( !acc.lamports || acc.data_len!=FD_SYSVAR_LAST_RESTART_SLOT_BINCODE_SZ ) ) {
      29           6 :     fd_accdb_unread_one( accdb, &acc );
      30           6 :     return sentinel;
      31           6 :   }
      32             : 
      33        4536 :   ulong result = FD_LOAD( ulong, acc.data );
      34        4536 :   fd_accdb_unread_one( accdb, &acc );
      35        4536 :   return result;
      36        4542 : }
      37             : 
      38             : /* fd_sysvar_last_restart_slot_update is equivalent to
      39             :    Agave's solana_runtime::bank::Bank::update_last_restart_slot */
      40             : 
      41             : ulong
      42        4557 : fd_sysvar_last_restart_slot_derive( fd_bank_t const * bank ) {
      43        4557 :   ulong slot = bank->f.slot;
      44        4557 :   ulong last_restart_slot = 0UL;
      45             : 
      46        4593 :   for( ulong i=0UL; i<bank->f.hard_fork_cnt; i++ ) {
      47          36 :     ulong hard_fork_slot = bank->f.hard_forks[ i ].slot;
      48          36 :     if( hard_fork_slot<=slot && hard_fork_slot>last_restart_slot ) {
      49          24 :       last_restart_slot = hard_fork_slot;
      50          24 :     }
      51          36 :   }
      52             : 
      53        4557 :   return last_restart_slot;
      54        4557 : }
      55             : 
      56             : void
      57             : fd_sysvar_last_restart_slot_update( fd_bank_t *        bank,
      58             :                                     fd_accdb_t *       accdb,
      59        4542 :                                     fd_capture_ctx_t * capture_ctx ) {
      60             : 
      61        4542 :   ulong last_restart_slot_want = fd_sysvar_last_restart_slot_derive( bank );
      62             : 
      63             :   /* https://github.com/solana-labs/solana/blob/v1.18.18/runtime/src/bank.rs#L2098-L2106 */
      64        4542 :   ulong last_restart_slot_have = fd_sysvar_last_restart_slot_read( accdb, bank->accdb_fork_id, ULONG_MAX );
      65             : 
      66             :   /* https://github.com/solana-labs/solana/blob/v1.18.18/runtime/src/bank.rs#L2122-L2130 */
      67        4542 :   if( last_restart_slot_have!=last_restart_slot_want ) {
      68           6 :     fd_sysvar_last_restart_slot_write( bank, accdb, capture_ctx, last_restart_slot_want );
      69           6 :   }
      70        4542 : }

Generated by: LCOV version 1.14