LCOV - code coverage report
Current view: top level - flamenco/runtime/sysvar - fd_sysvar.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 32 0.0 %
Date: 2025-07-01 05:00:49 Functions: 0 2 0.0 %

          Line data    Source code
       1             : #include "fd_sysvar.h"
       2             : #include "../context/fd_exec_slot_ctx.h"
       3             : #include "../context/fd_exec_instr_ctx.h"
       4             : #include "../context/fd_exec_txn_ctx.h"
       5             : 
       6             : #include "fd_sysvar_rent.h"
       7             : 
       8             : /* https://github.com/anza-xyz/agave/blob/cbc8320d35358da14d79ebcada4dfb6756ffac79/runtime/src/bank.rs#L1813 */
       9             : int
      10             : fd_sysvar_set( fd_bank_t *          bank,
      11             :                fd_funk_t *          funk,
      12             :                fd_funk_txn_t *      funk_txn,
      13             :                fd_pubkey_t const *  owner,
      14             :                fd_pubkey_t const *  pubkey,
      15             :                void const *         data,
      16             :                ulong                sz,
      17           0 :                ulong                slot ) {
      18             : 
      19           0 :   FD_TXN_ACCOUNT_DECL( rec );
      20             : 
      21           0 :   int err = fd_txn_account_init_from_funk_mutable( rec, pubkey, funk, funk_txn, 1, sz );
      22           0 :   if( FD_UNLIKELY( err != FD_ACC_MGR_SUCCESS ) )
      23           0 :     return FD_ACC_MGR_ERR_READ_FAILED;
      24             : 
      25           0 :   fd_memcpy(rec->vt->get_data_mut( rec ), data, sz);
      26             : 
      27             :   /* https://github.com/anza-xyz/agave/blob/cbc8320d35358da14d79ebcada4dfb6756ffac79/runtime/src/bank.rs#L1825 */
      28           0 :   fd_acc_lamports_t lamports_before = rec->vt->get_lamports( rec );
      29             :   /* https://github.com/anza-xyz/agave/blob/ae18213c19ea5335dfc75e6b6116def0f0910aff/runtime/src/bank.rs#L6184
      30             :      The account passed in via the updater is always the current sysvar account, so we take the max of the
      31             :      current account lamports and the minimum rent exempt balance needed. */
      32           0 :   fd_rent_t const * rent           = fd_bank_rent_query( bank );
      33           0 :   fd_acc_lamports_t lamports_after = fd_ulong_max( lamports_before, fd_rent_exempt_minimum_balance( rent, sz ) );
      34           0 :   rec->vt->set_lamports( rec, lamports_after );
      35             : 
      36             :   /* https://github.com/anza-xyz/agave/blob/cbc8320d35358da14d79ebcada4dfb6756ffac79/runtime/src/bank.rs#L1826 */
      37           0 :   if( lamports_after > lamports_before ) {
      38           0 :     fd_bank_capitalization_set( bank, fd_bank_capitalization_get( bank ) + (lamports_after - lamports_before) );
      39           0 :   } else if( lamports_after < lamports_before ) {
      40           0 :     fd_bank_capitalization_set( bank, fd_bank_capitalization_get( bank ) - (lamports_before - lamports_after) );
      41           0 :   }
      42             : 
      43           0 :   rec->vt->set_data_len( rec, sz );
      44           0 :   rec->vt->set_owner( rec, owner );
      45           0 :   rec->vt->set_slot( rec, slot );
      46             : 
      47           0 :   fd_txn_account_mutable_fini( rec, funk, funk_txn );
      48           0 :   return 0;
      49           0 : }
      50             : 
      51             : int
      52             : fd_sysvar_instr_acct_check( fd_exec_instr_ctx_t const * ctx,
      53             :                             ulong                       idx,
      54           0 :                             fd_pubkey_t const *         addr_want ) {
      55             : 
      56           0 :   if( FD_UNLIKELY( idx >= ctx->instr->acct_cnt ) ) {
      57           0 :     return FD_EXECUTOR_INSTR_ERR_NOT_ENOUGH_ACC_KEYS;
      58           0 :   }
      59             : 
      60           0 :   ushort idx_in_txn = ctx->instr->accounts[idx].index_in_transaction;
      61           0 :   fd_pubkey_t const * addr_have = &ctx->txn_ctx->account_keys[ idx_in_txn ];
      62           0 :   if( FD_UNLIKELY( 0!=memcmp( addr_have, addr_want, sizeof(fd_pubkey_t) ) ) ) {
      63           0 :     return FD_EXECUTOR_INSTR_ERR_INVALID_ARG;
      64           0 :   }
      65             : 
      66           0 :   return FD_EXECUTOR_INSTR_SUCCESS;
      67           0 : }

Generated by: LCOV version 1.14