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
46 changes: 23 additions & 23 deletions crates/lib/src/fee/fee.rs
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,7 @@ mod tests {
let message = VersionedMessage::Legacy(Message::new(&[instruction], Some(&fee_payer)));

let resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

assert!(FeeConfigUtil::is_fee_payer_in_signers(&resolved_transaction, &fee_payer).unwrap());
}
Expand All @@ -571,7 +571,7 @@ mod tests {
VersionedMessage::Legacy(Message::new(&[instruction], Some(&sender.pubkey())));

let resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

assert!(!FeeConfigUtil::is_fee_payer_in_signers(&resolved_transaction, &fee_payer_pubkey)
.unwrap());
Expand All @@ -593,7 +593,7 @@ mod tests {

let message = VersionedMessage::V0(v0_message);
let resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

assert!(FeeConfigUtil::is_fee_payer_in_signers(&resolved_transaction, &fee_payer).unwrap());
}
Expand All @@ -614,7 +614,7 @@ mod tests {

let message = VersionedMessage::V0(v0_message);
let resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

assert!(!FeeConfigUtil::is_fee_payer_in_signers(&resolved_transaction, &fee_payer_pubkey)
.unwrap());
Expand All @@ -632,7 +632,7 @@ mod tests {
let message =
VersionedMessage::Legacy(Message::new(&[transfer_instruction], Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
Expand All @@ -650,7 +650,7 @@ mod tests {
let message =
VersionedMessage::Legacy(Message::new(&[transfer_instruction], Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();
let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
&mut resolved_transaction,
Expand All @@ -667,7 +667,7 @@ mod tests {
let message =
VersionedMessage::Legacy(Message::new(&[transfer_instruction], Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();
let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
&mut resolved_transaction,
Expand Down Expand Up @@ -698,7 +698,7 @@ mod tests {
let message =
VersionedMessage::Legacy(Message::new(&[transfer_instruction], Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();
let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
&mut resolved_transaction,
Expand All @@ -722,7 +722,7 @@ mod tests {
let message =
VersionedMessage::Legacy(Message::new(&[transfer_instruction], Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();
let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
&mut resolved_transaction,
Expand Down Expand Up @@ -750,7 +750,7 @@ mod tests {
let message =
VersionedMessage::Legacy(Message::new(&[create_instruction], Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();
let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
&mut resolved_transaction,
Expand All @@ -768,7 +768,7 @@ mod tests {
let message =
VersionedMessage::Legacy(Message::new(&[create_instruction], Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();
let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
&mut resolved_transaction,
Expand Down Expand Up @@ -800,7 +800,7 @@ mod tests {
let message =
VersionedMessage::Legacy(Message::new(&[create_instruction], Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();
let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
&mut resolved_transaction,
Expand Down Expand Up @@ -829,7 +829,7 @@ mod tests {
let message =
VersionedMessage::Legacy(Message::new(&[withdraw_instruction], Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();
let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
&mut resolved_transaction,
Expand All @@ -850,7 +850,7 @@ mod tests {
let message =
VersionedMessage::Legacy(Message::new(&[withdraw_instruction], Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();
let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
&mut resolved_transaction,
Expand Down Expand Up @@ -882,7 +882,7 @@ mod tests {
];
let message = VersionedMessage::Legacy(Message::new(&instructions, Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();
let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
&mut resolved_transaction,
Expand Down Expand Up @@ -912,7 +912,7 @@ mod tests {
);
let message = VersionedMessage::Legacy(Message::new(&[instruction], Some(&fee_payer)));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();
let outflow = FeeConfigUtil::calculate_fee_payer_outflow(
&fee_payer,
&mut resolved_transaction,
Expand Down Expand Up @@ -955,7 +955,7 @@ mod tests {
// Create message with the payment instruction
let message = VersionedMessage::Legacy(Message::new(&[transfer_instruction], None));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

let (has_payment, transfer_fees) = FeeConfigUtil::analyze_payment_instructions(
&mut resolved_transaction,
Expand Down Expand Up @@ -984,7 +984,7 @@ mod tests {
// Create message without payment instruction
let message = VersionedMessage::Legacy(Message::new(&[sol_transfer], None));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

let (has_payment, transfer_fees) = FeeConfigUtil::analyze_payment_instructions(
&mut resolved_transaction,
Expand Down Expand Up @@ -1030,7 +1030,7 @@ mod tests {
// Create message with non-payment transfer
let message = VersionedMessage::Legacy(Message::new(&[transfer_instruction], None));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

let (has_payment, transfer_fees) = FeeConfigUtil::analyze_payment_instructions(
&mut resolved_transaction,
Expand Down Expand Up @@ -1061,7 +1061,7 @@ mod tests {
Some(&fee_payer.pubkey()),
));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

let result = FeeConfigUtil::estimate_transaction_fee(
&mocked_rpc_client,
Expand Down Expand Up @@ -1091,7 +1091,7 @@ mod tests {
let message =
VersionedMessage::Legacy(Message::new(&[transfer_instruction], Some(&sender.pubkey())));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

let result = FeeConfigUtil::estimate_transaction_fee(
&mocked_rpc_client,
Expand Down Expand Up @@ -1128,7 +1128,7 @@ mod tests {
Some(&fee_payer.pubkey()),
));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

let result = FeeConfigUtil::estimate_transaction_fee(
&mocked_rpc_client,
Expand Down Expand Up @@ -1184,7 +1184,7 @@ mod tests {

let message = VersionedMessage::Legacy(Message::new(&[transfer_1, transfer_2], None));
let mut resolved_transaction =
TransactionUtil::new_unsigned_versioned_transaction_resolved(message);
TransactionUtil::new_unsigned_versioned_transaction_resolved(message).unwrap();

let (has_payment, transfer_fees) = FeeConfigUtil::analyze_payment_instructions(
&mut resolved_transaction,
Expand Down
2 changes: 1 addition & 1 deletion crates/lib/src/rpc_server/method/transfer_transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ pub async fn transfer_transaction(
let transaction = TransactionUtil::new_unsigned_versioned_transaction(message);

let mut resolved_transaction =
VersionedTransactionResolved::from_kora_built_transaction(&transaction);
VersionedTransactionResolved::from_kora_built_transaction(&transaction)?;

// validate transaction before signing
validator.validate_transaction(&mut resolved_transaction, rpc_client).await?;
Expand Down
30 changes: 21 additions & 9 deletions crates/lib/src/transaction/instruction_util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -326,29 +326,41 @@ impl IxUtils {
Some(ix.accounts[index].pubkey)
}

pub fn get_account_key_required(
account_keys: &[Pubkey],
index: usize,
) -> Result<Pubkey, KoraError> {
account_keys.get(index).copied().ok_or_else(|| {
KoraError::SerializationError(format!("Account key at index {} not found", index))
})
}

pub fn build_default_compiled_instruction(program_id_index: u8) -> CompiledInstruction {
CompiledInstruction { program_id_index, accounts: vec![], data: vec![] }
}

pub fn uncompile_instructions(
instructions: &[CompiledInstruction],
account_keys: &[Pubkey],
) -> Vec<Instruction> {
) -> Result<Vec<Instruction>, KoraError> {
instructions
.iter()
.map(|ix| {
let program_id = account_keys[ix.program_id_index as usize];
let accounts = ix
let program_id =
Self::get_account_key_required(account_keys, ix.program_id_index as usize)?;
let accounts: Result<Vec<AccountMeta>, KoraError> = ix
.accounts
.iter()
.map(|idx| AccountMeta {
pubkey: account_keys[*idx as usize],
is_signer: false,
is_writable: true,
.map(|idx| {
Ok(AccountMeta {
pubkey: Self::get_account_key_required(account_keys, *idx as usize)?,
is_signer: false,
is_writable: true,
})
})
.collect();

Instruction { program_id, accounts, data: ix.data.clone() }
Ok(Instruction { program_id, accounts: accounts?, data: ix.data.clone() })
})
.collect()
}
Expand Down Expand Up @@ -2529,7 +2541,7 @@ mod tests {
data: vec![1, 2, 3],
};

let instructions = IxUtils::uncompile_instructions(&[compiled_ix], &account_keys);
let instructions = IxUtils::uncompile_instructions(&[compiled_ix], &account_keys).unwrap();

assert_eq!(instructions.len(), 1);
let uncompiled = &instructions[0];
Expand Down
2 changes: 1 addition & 1 deletion crates/lib/src/transaction/transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ impl TransactionUtil {

pub fn new_unsigned_versioned_transaction_resolved(
message: VersionedMessage,
) -> VersionedTransactionResolved {
) -> Result<VersionedTransactionResolved, KoraError> {
let transaction = TransactionUtil::new_unsigned_versioned_transaction(message);
VersionedTransactionResolved::from_kora_built_transaction(&transaction)
}
Expand Down
Loading