@@ -95,9 +95,10 @@ fd_exec_txn_ctx_get_account_at_index( fd_exec_txn_ctx_t * ctx,
95
95
fd_txn_account_t * txn_account = & ctx -> accounts [idx ];
96
96
* account = txn_account ;
97
97
98
- if ( condition != NULL ) {
99
- if ( FD_UNLIKELY ( !condition ( ctx , idx , * account ) ) )
98
+ if ( FD_LIKELY ( condition != NULL ) ) {
99
+ if ( FD_UNLIKELY ( !condition ( ctx , idx , * account ) ) ) {
100
100
return FD_ACC_MGR_ERR_UNKNOWN_ACCOUNT ;
101
+ }
101
102
}
102
103
103
104
return FD_ACC_MGR_SUCCESS ;
@@ -134,14 +135,15 @@ fd_exec_txn_ctx_get_executable_account( fd_exec_txn_ctx_t * ctx,
134
135
return FD_ACC_MGR_SUCCESS ;
135
136
}
136
137
137
- for ( ulong i = 0 ; i < ctx -> executable_cnt ; i ++ ) {
138
+ for ( ulong i = 0 ; i < ctx -> executable_cnt ; i ++ ) {
138
139
if ( memcmp ( pubkey -> uc , ctx -> executable_accounts [i ].pubkey -> uc , sizeof (fd_pubkey_t ) )== 0 ) {
139
140
fd_txn_account_t * txn_account = & ctx -> executable_accounts [i ];
140
141
* account = txn_account ;
141
142
142
- if ( condition != NULL ) {
143
- if ( FD_UNLIKELY ( !condition ( ctx , (int )i , * account ) ) )
143
+ if ( FD_LIKELY ( condition != NULL ) ) {
144
+ if ( FD_UNLIKELY ( !condition ( ctx , (int )i , * account ) ) ) {
144
145
return FD_ACC_MGR_ERR_UNKNOWN_ACCOUNT ;
146
+ }
145
147
}
146
148
147
149
return FD_ACC_MGR_SUCCESS ;
@@ -152,99 +154,99 @@ fd_exec_txn_ctx_get_executable_account( fd_exec_txn_ctx_t * ctx,
152
154
}
153
155
154
156
void
155
- fd_exec_txn_ctx_setup_basic ( fd_exec_txn_ctx_t * txn_ctx ) {
156
- txn_ctx -> compute_unit_limit = 200000 ;
157
- txn_ctx -> compute_unit_price = 0 ;
158
- txn_ctx -> compute_meter = 200000 ;
159
- txn_ctx -> prioritization_fee_type = FD_COMPUTE_BUDGET_PRIORITIZATION_FEE_TYPE_DEPRECATED ;
160
- txn_ctx -> custom_err = UINT_MAX ;
161
-
162
- txn_ctx -> instr_stack_sz = 0 ;
163
- txn_ctx -> accounts_cnt = 0UL ;
164
- txn_ctx -> executable_cnt = 0UL ;
165
- txn_ctx -> paid_fees = 0UL ;
166
- txn_ctx -> heap_size = FD_VM_HEAP_DEFAULT ;
167
- txn_ctx -> loaded_accounts_data_size_limit = FD_VM_LOADED_ACCOUNTS_DATA_SIZE_LIMIT ;
168
- txn_ctx -> loaded_accounts_data_size = 0UL ;
169
- txn_ctx -> accounts_resize_delta = 0UL ;
170
- txn_ctx -> collected_rent = 0UL ;
171
-
172
- txn_ctx -> num_instructions = 0 ;
173
- memset ( txn_ctx -> return_data .program_id .key , 0 , sizeof (fd_pubkey_t ) );
174
- txn_ctx -> return_data .len = 0 ;
175
-
176
- txn_ctx -> dirty_vote_acc = 0 ;
177
- txn_ctx -> dirty_stake_acc = 0 ;
178
- txn_ctx -> failed_instr = NULL ;
179
- txn_ctx -> instr_err_idx = INT_MAX ;
180
- txn_ctx -> capture_ctx = NULL ;
181
-
182
- txn_ctx -> instr_info_cnt = 0UL ;
183
- txn_ctx -> cpi_instr_info_cnt = 0UL ;
184
- txn_ctx -> instr_trace_length = 0UL ;
185
-
186
- txn_ctx -> exec_err = 0 ;
187
- txn_ctx -> exec_err_kind = FD_EXECUTOR_ERR_KIND_NONE ;
157
+ fd_exec_txn_ctx_setup_basic ( fd_exec_txn_ctx_t * ctx ) {
158
+ ctx -> compute_unit_limit = 200000 ;
159
+ ctx -> compute_unit_price = 0 ;
160
+ ctx -> compute_meter = 200000 ;
161
+ ctx -> prioritization_fee_type = FD_COMPUTE_BUDGET_PRIORITIZATION_FEE_TYPE_DEPRECATED ;
162
+ ctx -> custom_err = UINT_MAX ;
163
+
164
+ ctx -> instr_stack_sz = 0 ;
165
+ ctx -> accounts_cnt = 0UL ;
166
+ ctx -> executable_cnt = 0UL ;
167
+ ctx -> paid_fees = 0UL ;
168
+ ctx -> heap_size = FD_VM_HEAP_DEFAULT ;
169
+ ctx -> loaded_accounts_data_size_limit = FD_VM_LOADED_ACCOUNTS_DATA_SIZE_LIMIT ;
170
+ ctx -> loaded_accounts_data_size = 0UL ;
171
+ ctx -> accounts_resize_delta = 0UL ;
172
+ ctx -> collected_rent = 0UL ;
173
+
174
+ ctx -> num_instructions = 0 ;
175
+ memset ( ctx -> return_data .program_id .key , 0 , sizeof (fd_pubkey_t ) );
176
+ ctx -> return_data .len = 0 ;
177
+
178
+ ctx -> dirty_vote_acc = 0 ;
179
+ ctx -> dirty_stake_acc = 0 ;
180
+ ctx -> failed_instr = NULL ;
181
+ ctx -> instr_err_idx = INT_MAX ;
182
+ ctx -> capture_ctx = NULL ;
183
+
184
+ ctx -> instr_info_cnt = 0UL ;
185
+ ctx -> cpi_instr_info_cnt = 0UL ;
186
+ ctx -> instr_trace_length = 0UL ;
187
+
188
+ ctx -> exec_err = 0 ;
189
+ ctx -> exec_err_kind = FD_EXECUTOR_ERR_KIND_NONE ;
188
190
}
189
191
190
192
void
191
- fd_exec_txn_ctx_setup ( fd_exec_txn_ctx_t * txn_ctx ,
193
+ fd_exec_txn_ctx_setup ( fd_exec_txn_ctx_t * ctx ,
192
194
fd_txn_t const * txn_descriptor ,
193
195
fd_rawtxn_b_t const * txn_raw ) {
194
- fd_exec_txn_ctx_setup_basic ( txn_ctx );
195
- txn_ctx -> txn_descriptor = txn_descriptor ;
196
- txn_ctx -> _txn_raw -> raw = txn_raw -> raw ;
197
- txn_ctx -> _txn_raw -> txn_sz = txn_raw -> txn_sz ;
196
+ fd_exec_txn_ctx_setup_basic ( ctx );
197
+ ctx -> txn_descriptor = txn_descriptor ;
198
+ ctx -> _txn_raw -> raw = txn_raw -> raw ;
199
+ ctx -> _txn_raw -> txn_sz = txn_raw -> txn_sz ;
198
200
}
199
201
200
202
void
201
- fd_exec_txn_ctx_teardown ( fd_exec_txn_ctx_t * txn_ctx ) {
202
- (void )txn_ctx ;
203
+ fd_exec_txn_ctx_teardown ( fd_exec_txn_ctx_t * ctx ) {
204
+ (void )ctx ;
203
205
}
204
206
205
207
void
206
208
fd_exec_txn_ctx_from_exec_slot_ctx ( fd_exec_slot_ctx_t const * slot_ctx ,
207
- fd_exec_txn_ctx_t * txn_ctx ,
209
+ fd_exec_txn_ctx_t * ctx ,
208
210
fd_wksp_t const * funk_wksp ,
209
211
fd_wksp_t const * runtime_pub_wksp ,
210
212
ulong funk_txn_gaddr ,
211
213
ulong acc_mgr_gaddr ,
212
214
ulong sysvar_cache_gaddr ,
213
215
ulong funk_gaddr ) {
214
216
215
- txn_ctx -> runtime_pub_wksp = (fd_wksp_t * )runtime_pub_wksp ;
217
+ ctx -> runtime_pub_wksp = (fd_wksp_t * )runtime_pub_wksp ;
216
218
217
- txn_ctx -> funk_txn = fd_wksp_laddr ( funk_wksp , funk_txn_gaddr );
218
- if ( FD_UNLIKELY ( !txn_ctx -> funk_txn ) ) {
219
+ ctx -> funk_txn = fd_wksp_laddr ( funk_wksp , funk_txn_gaddr );
220
+ if ( FD_UNLIKELY ( !ctx -> funk_txn ) ) {
219
221
FD_LOG_ERR (( "Could not find valid funk transaction" ));
220
222
}
221
223
222
- txn_ctx -> acc_mgr = fd_wksp_laddr ( runtime_pub_wksp , acc_mgr_gaddr );
223
- if ( FD_UNLIKELY ( !txn_ctx -> acc_mgr ) ) {
224
+ ctx -> acc_mgr = fd_wksp_laddr ( runtime_pub_wksp , acc_mgr_gaddr );
225
+ if ( FD_UNLIKELY ( !ctx -> acc_mgr ) ) {
224
226
FD_LOG_ERR (( "Could not find valid account manager" ));
225
227
}
226
- txn_ctx -> acc_mgr -> funk = fd_wksp_laddr ( funk_wksp , funk_gaddr );
228
+ ctx -> acc_mgr -> funk = fd_wksp_laddr ( funk_wksp , funk_gaddr );
227
229
228
- txn_ctx -> sysvar_cache = fd_wksp_laddr ( runtime_pub_wksp , sysvar_cache_gaddr );
230
+ ctx -> sysvar_cache = fd_wksp_laddr ( runtime_pub_wksp , sysvar_cache_gaddr );
229
231
230
- txn_ctx -> features = slot_ctx -> epoch_ctx -> features ;
231
- txn_ctx -> status_cache = slot_ctx -> status_cache ;
232
+ ctx -> features = slot_ctx -> epoch_ctx -> features ;
233
+ ctx -> status_cache = slot_ctx -> status_cache ;
232
234
233
- txn_ctx -> bank_hash_cmp = slot_ctx -> epoch_ctx -> bank_hash_cmp ;
235
+ ctx -> bank_hash_cmp = slot_ctx -> epoch_ctx -> bank_hash_cmp ;
234
236
235
- txn_ctx -> prev_lamports_per_signature = slot_ctx -> prev_lamports_per_signature ;
236
- txn_ctx -> enable_exec_recording = slot_ctx -> enable_exec_recording ;
237
- txn_ctx -> total_epoch_stake = slot_ctx -> epoch_ctx -> total_epoch_stake ;
237
+ ctx -> prev_lamports_per_signature = slot_ctx -> prev_lamports_per_signature ;
238
+ ctx -> enable_exec_recording = slot_ctx -> enable_exec_recording ;
239
+ ctx -> total_epoch_stake = slot_ctx -> epoch_ctx -> total_epoch_stake ;
238
240
239
- txn_ctx -> slot = slot_ctx -> slot_bank .slot ;
240
- txn_ctx -> fee_rate_governor = slot_ctx -> slot_bank .fee_rate_governor ;
241
- txn_ctx -> block_hash_queue = slot_ctx -> slot_bank .block_hash_queue ; /* MAKE GLOBAL */
241
+ ctx -> slot = slot_ctx -> slot_bank .slot ;
242
+ ctx -> fee_rate_governor = slot_ctx -> slot_bank .fee_rate_governor ;
243
+ ctx -> block_hash_queue = slot_ctx -> slot_bank .block_hash_queue ; /* MAKE GLOBAL */
242
244
243
245
fd_epoch_bank_t const * epoch_bank = fd_exec_epoch_ctx_epoch_bank_const ( slot_ctx -> epoch_ctx );
244
- txn_ctx -> schedule = epoch_bank -> epoch_schedule ;
245
- txn_ctx -> rent = epoch_bank -> rent ;
246
- txn_ctx -> slots_per_year = epoch_bank -> slots_per_year ;
247
- txn_ctx -> stakes = epoch_bank -> stakes ;
246
+ ctx -> schedule = epoch_bank -> epoch_schedule ;
247
+ ctx -> rent = epoch_bank -> rent ;
248
+ ctx -> slots_per_year = epoch_bank -> slots_per_year ;
249
+ ctx -> stakes = epoch_bank -> stakes ;
248
250
249
251
}
250
252
@@ -255,19 +257,19 @@ fd_exec_txn_ctx_reset_return_data( fd_exec_txn_ctx_t * txn_ctx ) {
255
257
256
258
/* https://github.com/anza-xyz/agave/blob/v2.1.1/sdk/program/src/message/versions/v0/loaded.rs#L162 */
257
259
int
258
- fd_txn_account_is_demotion ( fd_exec_txn_ctx_t const * txn_ctx , int idx )
260
+ fd_txn_account_is_demotion ( fd_exec_txn_ctx_t const * ctx , int idx )
259
261
{
260
262
uint is_program = 0U ;
261
- for ( ulong j = 0UL ; j < txn_ctx -> txn_descriptor -> instr_cnt ; j ++ ) {
262
- if ( txn_ctx -> txn_descriptor -> instr [j ].program_id == idx ) {
263
+ for ( ulong j = 0UL ; j < ctx -> txn_descriptor -> instr_cnt ; j ++ ) {
264
+ if ( ctx -> txn_descriptor -> instr [j ].program_id == idx ) {
263
265
is_program = 1U ;
264
266
break ;
265
267
}
266
268
}
267
269
268
270
uint bpf_upgradeable_in_txn = 0U ;
269
- for ( ulong j = 0 ; j < txn_ctx -> accounts_cnt ; j ++ ) {
270
- const fd_pubkey_t * acc = & txn_ctx -> account_keys [j ];
271
+ for ( ulong j = 0 ; j < ctx -> accounts_cnt ; j ++ ) {
272
+ const fd_pubkey_t * acc = & ctx -> account_keys [j ];
271
273
if ( memcmp ( acc -> uc , fd_solana_bpf_loader_upgradeable_program_id .key , sizeof (fd_pubkey_t ) ) == 0 ) {
272
274
bpf_upgradeable_in_txn = 1U ;
273
275
break ;
0 commit comments