Rename TransactionCompiler to Script and use it to replace the type alias

This commit is contained in:
Greg Fitzgerald
2019-03-17 09:55:42 -06:00
committed by Grimes
parent 99671472d1
commit 122c7bc2ef
9 changed files with 60 additions and 47 deletions

View File

@ -1,8 +1,9 @@
use crate::bank::Bank;
use solana_sdk::pubkey::Pubkey;
use solana_sdk::script::Script;
use solana_sdk::signature::{Keypair, KeypairUtil};
use solana_sdk::system_instruction::SystemInstruction;
use solana_sdk::transaction::{Script, Transaction, TransactionError};
use solana_sdk::transaction::{Instruction, Transaction, TransactionError};
pub struct BankClient<'a> {
bank: &'a Bank,
@ -25,12 +26,25 @@ impl<'a> BankClient<'a> {
/// Create and process a transaction.
pub fn process_script(&self, script: Script) -> Result<(), TransactionError> {
self.process_transaction(Transaction::new(script))
self.process_transaction(script.compile())
}
/// Create and process a transaction from a list of instructions.
pub fn process_instructions(
&self,
instructions: Vec<Instruction>,
) -> Result<(), TransactionError> {
self.process_script(Script::new(instructions))
}
/// Create and process a transaction from a single instruction.
pub fn process_instruction(&self, instruction: Instruction) -> Result<(), TransactionError> {
self.process_instructions(vec![instruction])
}
/// Transfer lamports to pubkey
pub fn transfer(&self, lamports: u64, pubkey: &Pubkey) -> Result<(), TransactionError> {
let move_instruction = SystemInstruction::new_move(&self.pubkey(), pubkey, lamports);
self.process_script(vec![move_instruction])
self.process_instruction(move_instruction)
}
}

View File

@ -109,6 +109,7 @@ mod tests {
use solana_sdk::account::Account;
use solana_sdk::genesis_block::GenesisBlock;
use solana_sdk::native_program::ProgramError;
use solana_sdk::script::Script;
use solana_sdk::signature::{Keypair, KeypairUtil};
use solana_sdk::system_instruction::SystemInstruction;
use solana_sdk::system_program;
@ -291,11 +292,11 @@ mod tests {
// Erroneously sign transaction with recipient account key
// No signature case is tested by bank `test_zero_signatures()`
let malicious_script = vec![Instruction::new(
let malicious_script = Script::new(vec![Instruction::new(
system_program::id(),
&SystemInstruction::Move { lamports: 10 },
vec![(alice_pubkey, false), (mallory_pubkey, true)],
)];
)]);
assert_eq!(
mallory_client.process_script(malicious_script),
Err(TransactionError::InstructionError(