Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion contrib/test/test-vectors-commit-sha.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
c2f0bc1d4153f8f962a808f27e36a048adbdaeff
8c92099402fbf0d97538969d247b5bc5f457f3f1
4 changes: 2 additions & 2 deletions src/flamenco/runtime/context/fd_exec_instr_ctx.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ fd_exec_instr_ctx_get_signers( fd_exec_instr_ctx_t const * ctx,
fd_pubkey_t const * signers[static FD_TXN_SIG_MAX] ) {
ulong j = 0UL;
for( ushort i=0; i<ctx->instr->acct_cnt && j<FD_TXN_SIG_MAX; i++ )
if( fd_instr_acc_is_signer_idx( ctx->instr, i ) ) {
if( fd_instr_acc_is_signer_idx( ctx->instr, i, NULL ) ) {
ushort idx_in_txn = ctx->instr->accounts[i].index_in_transaction;
int err = fd_exec_txn_ctx_get_key_of_account_at_index( ctx->txn_ctx,
idx_in_txn,
Expand All @@ -146,7 +146,7 @@ fd_exec_instr_ctx_any_signed( fd_exec_instr_ctx_t const * ctx,
for( ushort j=0; j<ctx->instr->acct_cnt; j++ ) {
ushort idx_in_txn = ctx->instr->accounts[ j ].index_in_transaction;
is_signer |=
( ( !!fd_instr_acc_is_signer_idx( ctx->instr, j ) ) &
( ( !!fd_instr_acc_is_signer_idx( ctx->instr, j, NULL ) ) &
( 0==memcmp( pubkey->key, ctx->txn_ctx->account_keys[ idx_in_txn ].key, sizeof(fd_pubkey_t) ) ) );
}
return is_signer;
Expand Down
2 changes: 1 addition & 1 deletion src/flamenco/runtime/fd_borrowed_account.h
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ fd_borrowed_account_is_signer( fd_borrowed_account_t const * borrowed_acct ) {
return 0;
}

return fd_instr_acc_is_signer_idx( instr, borrowed_acct->index_in_instruction );
return fd_instr_acc_is_signer_idx( instr, borrowed_acct->index_in_instruction, NULL );
}

/* fd_borrowed_account_is_writer mirrors the Agave function
Expand Down
21 changes: 18 additions & 3 deletions src/flamenco/runtime/info/fd_instr_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,23 +109,38 @@ fd_instr_info_init_from_txn_instr( fd_instr_info_t * instr,
fd_exec_txn_ctx_t * txn_ctx,
fd_txn_instr_t const * txn_instr );

/* https://github.com/anza-xyz/solana-sdk/blob/589e6237f203c2719c300dc044f4e00f48e66a8f/message/src/versions/v0/loaded.rs#L152-L157 */
FD_FN_PURE static inline int
fd_instr_acc_is_writable_idx( fd_instr_info_t const * instr,
ushort idx ) {
if( FD_UNLIKELY( idx>=instr->acct_cnt ) ) {
return FD_EXECUTOR_INSTR_ERR_MISSING_ACC;
return 0;
}

return !!(instr->accounts[idx].is_writable);
}

/* fd_instr_acc_is_signer_idx returns:
- 1 if account is signer
- 0 (with *out_opt_err==0) if account is not signer
If an error occurs during query, returns 0 and writes the
error code to *out_opt_err. Possible values for out_opt_err:
- FD_EXECUTOR_INSTR_ERR_MISSING_ACC occurs when the instr account
index provided is invalid (out of bounds).
- 0 if the query was successful. Check the return value to see
if the account is a signer.

https://github.com/firedancer-io/agave/blob/9e6bb8209d012e819e55ad90949dec17bc150fca/transaction-context/src/lib.rs#L782-L791 */
FD_FN_PURE static inline int
fd_instr_acc_is_signer_idx( fd_instr_info_t const * instr,
ushort idx ) {
ushort idx,
int * out_opt_err ) {
if( FD_UNLIKELY( idx>=instr->acct_cnt ) ) {
return FD_EXECUTOR_INSTR_ERR_MISSING_ACC;
if( out_opt_err ) *out_opt_err = FD_EXECUTOR_INSTR_ERR_MISSING_ACC;
return 0;
}

if( out_opt_err ) *out_opt_err = 0;
return !!(instr->accounts[idx].is_signer);
}

Expand Down
14 changes: 7 additions & 7 deletions src/flamenco/runtime/program/fd_address_lookup_table_program.c
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ create_lookup_table( fd_exec_instr_ctx_t * ctx,

/* https://github.com/solana-labs/solana/blob/v1.17.4/programs/address-lookup-table/src/processor.rs#L76-L83 */
if( !FD_FEATURE_ACTIVE_BANK( ctx->txn_ctx->bank, relax_authority_signer_check_for_lookup_table_creation )
&& !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_AUTHORITY ) ) {
&& !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_AUTHORITY, NULL ) ) {
fd_log_collector_msg_literal( ctx, "Authority account must be a signer" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand All @@ -242,7 +242,7 @@ create_lookup_table( fd_exec_instr_ctx_t * ctx,
payer_key = payer_acct.acct->pubkey;

/* https://github.com/solana-labs/solana/blob/v1.17.4/programs/address-lookup-table/src/processor.rs#L89-L92 */
if( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_PAYER ) ) {
if( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_PAYER, NULL ) ) {
fd_log_collector_msg_literal( ctx, "Payer account must be a signer" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -491,7 +491,7 @@ freeze_lookup_table( fd_exec_instr_ctx_t * ctx ) {
authority_key = authority_acct.acct->pubkey;

/* https://github.com/solana-labs/solana/blob/v1.17.4/programs/address-lookup-table/src/processor.rs#L186-L189 */
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_AUTHORITY ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_AUTHORITY, NULL ) ) ) {
fd_log_collector_msg_literal( ctx, "Authority account must be a signer" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -599,7 +599,7 @@ extend_lookup_table( fd_exec_instr_ctx_t * ctx,
authority_key = authority_acct.acct->pubkey;

/* https://github.com/solana-labs/solana/blob/v1.17.4/programs/address-lookup-table/src/processor.rs#L241-L244 */
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_AUTHORITY ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_AUTHORITY, NULL ) ) ) {
fd_log_collector_msg_literal( ctx, "Authority account must be a signer" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -728,7 +728,7 @@ extend_lookup_table( fd_exec_instr_ctx_t * ctx,

payer_key = payer_acct.acct->pubkey;
/* https://github.com/solana-labs/solana/blob/v1.17.4/programs/address-lookup-table/src/processor.rs#L327-L330 */
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_PAYER ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_PAYER, NULL ) ) ) {
fd_log_collector_msg_literal( ctx, "Payer account must be a signer" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -823,7 +823,7 @@ deactivate_lookup_table( fd_exec_instr_ctx_t * ctx ) {
authority_key = authority_acct.acct->pubkey;

/* https://github.com/solana-labs/solana/blob/v1.17.4/programs/address-lookup-table/src/processor.rs#L356-L359 */
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_AUTHORITY ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_AUTHORITY, NULL ) ) ) {
fd_log_collector_msg_literal( ctx, "Authority account must be a signer" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -931,7 +931,7 @@ close_lookup_table( fd_exec_instr_ctx_t * ctx ) {
authority_key = authority_acct.acct->pubkey;

/* https://github.com/solana-labs/solana/blob/v1.17.4/programs/address-lookup-table/src/processor.rs#L405-L408 */
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_AUTHORITY ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_AUTHORITY, NULL ) ) ) {
fd_log_collector_msg_literal( ctx, "Authority account must be a signer" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down
52 changes: 40 additions & 12 deletions src/flamenco/runtime/program/fd_bpf_loader_program.c
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,9 @@ common_close_account( fd_pubkey_t * authority_address,
}

/* https://github.com/anza-xyz/agave/blob/v2.1.14/programs/bpf_loader/src/lib.rs#L1319-L1322 */
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 2UL ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 2UL, &err ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!err ) ) return err;
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}

Expand Down Expand Up @@ -757,7 +759,9 @@ common_extend_program( fd_exec_instr_ctx_t * instr_ctx,
}

/* https://github.com/anza-xyz/agave/blob/v2.3.1/programs/bpf_loader/src/lib.rs#L1468-L1471 */
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, AUTHORITY_ACCOUNT_INDEX ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, AUTHORITY_ACCOUNT_INDEX, &err ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!err ) ) return err;
fd_log_collector_msg_literal( instr_ctx, "Upgrade authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -997,7 +1001,9 @@ process_loader_upgradeable_instruction( fd_exec_instr_ctx_t * instr_ctx ) {
fd_log_collector_msg_literal( instr_ctx, "Incorrect buffer authority provided" );
return FD_EXECUTOR_INSTR_ERR_INCORRECT_AUTHORITY;
}
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL, &err ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!err ) ) return err;
fd_log_collector_msg_literal( instr_ctx, "Buffer authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -1129,7 +1135,9 @@ process_loader_upgradeable_instruction( fd_exec_instr_ctx_t * instr_ctx ) {
fd_log_collector_msg_literal( instr_ctx, "Buffer and upgrade authority don't match" );
return FD_EXECUTOR_INSTR_ERR_INCORRECT_AUTHORITY;
}
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 7UL ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 7UL, &err ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!err ) ) return err;
fd_log_collector_msg_literal( instr_ctx, "Upgrade authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -1458,7 +1466,9 @@ process_loader_upgradeable_instruction( fd_exec_instr_ctx_t * instr_ctx ) {
fd_log_collector_msg_literal( instr_ctx, "Buffer and upgrade authority don't match" );
return FD_EXECUTOR_INSTR_ERR_INCORRECT_AUTHORITY;
}
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 6UL ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 6UL, &err ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!err ) ) return err;
fd_log_collector_msg_literal( instr_ctx, "Upgrade authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -1524,7 +1534,9 @@ process_loader_upgradeable_instruction( fd_exec_instr_ctx_t * instr_ctx ) {
fd_log_collector_msg_literal( instr_ctx, "Incorrect upgrade authority provided" );
return FD_EXECUTOR_INSTR_ERR_INCORRECT_AUTHORITY;
}
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 6UL ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 6UL, &err ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!err ) ) return err;
fd_log_collector_msg_literal( instr_ctx, "Upgrade authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -1684,7 +1696,9 @@ process_loader_upgradeable_instruction( fd_exec_instr_ctx_t * instr_ctx ) {
fd_log_collector_msg_literal( instr_ctx, "Incorrect buffer authority provided" );
return FD_EXECUTOR_INSTR_ERR_INCORRECT_AUTHORITY;
}
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL, &err ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!err ) ) return err;
fd_log_collector_msg_literal( instr_ctx, "Buffer authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand All @@ -1709,7 +1723,9 @@ process_loader_upgradeable_instruction( fd_exec_instr_ctx_t * instr_ctx ) {
fd_log_collector_msg_literal( instr_ctx, "Incorrect upgrade authority provided" );
return FD_EXECUTOR_INSTR_ERR_INCORRECT_AUTHORITY;
}
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL, &err ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!err ) ) return err;
fd_log_collector_msg_literal( instr_ctx, "Upgrade authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -1780,11 +1796,17 @@ process_loader_upgradeable_instruction( fd_exec_instr_ctx_t * instr_ctx ) {
fd_log_collector_msg_literal( instr_ctx, "Incorrect buffer authority provided" );
return FD_EXECUTOR_INSTR_ERR_INCORRECT_AUTHORITY;
}
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL ) ) ) {
int instr_err_code = 0;
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL, &instr_err_code ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!instr_err_code ) ) return instr_err_code;
fd_log_collector_msg_literal( instr_ctx, "Buffer authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 2UL ) ) ) {
instr_err_code = 0;
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 2UL, &instr_err_code ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!instr_err_code ) ) return instr_err_code;
fd_log_collector_msg_literal( instr_ctx, "New authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand All @@ -1803,11 +1825,17 @@ process_loader_upgradeable_instruction( fd_exec_instr_ctx_t * instr_ctx ) {
fd_log_collector_msg_literal( instr_ctx, "Incorrect upgrade authority provided" );
return FD_EXECUTOR_INSTR_ERR_INCORRECT_AUTHORITY;
}
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL ) ) ) {
int instr_err_code = 0;
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL, &instr_err_code ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!instr_err_code ) ) return instr_err_code;
fd_log_collector_msg_literal( instr_ctx, "Upgrade authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 2UL ) ) ) {
instr_err_code = 0;
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 2UL, &instr_err_code ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!instr_err_code ) ) return instr_err_code;
fd_log_collector_msg_literal( instr_ctx, "New authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down
4 changes: 2 additions & 2 deletions src/flamenco/runtime/program/fd_bpf_loader_serialization.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ fd_bpf_loader_input_serialize_aligned( fd_exec_instr_ctx_t * ctx,
/* https://github.com/anza-xyz/agave/blob/b5f5c3cdd3f9a5859c49ebc27221dc27e143d760/programs/bpf_loader/src/serialization.rs#L465 */
fd_account_meta_t const * metadata = fd_borrowed_account_get_acc_meta( &view_acc );

uchar is_signer = (uchar)fd_instr_acc_is_signer_idx( ctx->instr, (uchar)i );
uchar is_signer = (uchar)fd_instr_acc_is_signer_idx( ctx->instr, (uchar)i, NULL );
FD_STORE( uchar, serialized_params, is_signer );
serialized_params += sizeof(uchar);

Expand Down Expand Up @@ -540,7 +540,7 @@ fd_bpf_loader_input_serialize_unaligned( fd_exec_instr_ctx_t * ctx,

fd_account_meta_t const * metadata = fd_borrowed_account_get_acc_meta( &view_acc );

uchar is_signer = (uchar)fd_instr_acc_is_signer_idx( ctx->instr, (uchar)i );
uchar is_signer = (uchar)fd_instr_acc_is_signer_idx( ctx->instr, (uchar)i, NULL );
FD_STORE( uchar, serialized_params, is_signer );
serialized_params += sizeof(uchar);

Expand Down
4 changes: 2 additions & 2 deletions src/flamenco/runtime/program/fd_config_program.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ _process_config_instr( fd_exec_instr_ctx_t * ctx ) {

/* https://github.com/solana-labs/solana/blob/v1.17.17/programs/config/src/config_processor.rs#L27 */

is_config_account_signer = fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_CONFIG );
is_config_account_signer = fd_instr_acc_is_signer_idx( ctx->instr, ACC_IDX_CONFIG, NULL );

/* https://github.com/solana-labs/solana/blob/v1.17.17/programs/config/src/config_processor.rs#L29-L31 */

Expand Down Expand Up @@ -128,7 +128,7 @@ _process_config_instr( fd_exec_instr_ctx_t * ctx ) {

/* https://github.com/solana-labs/solana/blob/v1.17.17/programs/config/src/config_processor.rs#L72-L79 */

if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, (uchar)counter ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( ctx->instr, (uchar)counter, NULL ) ) ) {
/* Max msg_sz: 33 - 2 + 45 = 76 < 127 => we can use printf */
fd_log_collector_printf_dangerous_max_127( ctx,
"account %s signer_key().is_none()", FD_BASE58_ENC_32_ALLOCA( signer ) );
Expand Down
14 changes: 11 additions & 3 deletions src/flamenco/runtime/program/fd_loader_v4_program.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,11 @@ check_program_account( fd_exec_instr_ctx_t * instr_ctx,
}

/* https://github.com/anza-xyz/agave/blob/v2.2.6/programs/loader-v4/src/lib.rs#L75-L78 */
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL, err ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!(*err) ) ) {
return NULL;
}
fd_log_collector_msg_literal( instr_ctx, "Authority did not sign" );
*err = FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
return NULL;
Expand Down Expand Up @@ -314,7 +318,9 @@ fd_loader_v4_program_instruction_set_program_length( fd_exec_instr_ctx_t *
}

/* https://github.com/anza-xyz/agave/blob/v2.2.6/programs/loader-v4/src/lib.rs#L205-L208 */
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 1UL, &err ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!err ) ) return err;
fd_log_collector_msg_literal( instr_ctx, "Authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down Expand Up @@ -639,7 +645,9 @@ fd_loader_v4_program_instruction_transfer_authority( fd_exec_instr_ctx_t * instr
}

/* https://github.com/anza-xyz/agave/blob/v2.2.6/programs/loader-v4/src/lib.rs#L414-L417 */
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 2UL ) ) ) {
if( FD_UNLIKELY( !fd_instr_acc_is_signer_idx( instr_ctx->instr, 2UL, &err ) ) ) {
/* https://github.com/anza-xyz/agave/blob/v3.0.3/transaction-context/src/lib.rs#L789 */
if( FD_UNLIKELY( !!err ) ) return err;
fd_log_collector_msg_literal( instr_ctx, "New authority did not sign" );
return FD_EXECUTOR_INSTR_ERR_MISSING_REQUIRED_SIGNATURE;
}
Expand Down
Loading
Loading