Add a way to build unsigned transactions
This commit is contained in:
@ -90,25 +90,34 @@ impl TransactionBuilder {
|
|||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a signed transaction.
|
/// Return an unsigned transaction that requires signatures. To more safely return an unsigned
|
||||||
pub fn sign<T: KeypairUtil>(&self, keypairs: &[&T], recent_blockhash: Hash) -> Transaction {
|
/// transaction that *doesn't* require signatures, pass `sign()` zero keypairs.
|
||||||
|
pub fn unsigned(&self, recent_blockhash: Hash) -> Transaction {
|
||||||
let program_ids = self.program_ids();
|
let program_ids = self.program_ids();
|
||||||
let (mut signed_keys, unsigned_keys) = self.keys();
|
let (mut signed_keys, unsigned_keys) = self.keys();
|
||||||
|
signed_keys.extend(&unsigned_keys);
|
||||||
|
let instructions = self.instructions(&signed_keys, &program_ids);
|
||||||
|
Transaction {
|
||||||
|
signatures: vec![],
|
||||||
|
account_keys: signed_keys,
|
||||||
|
recent_blockhash,
|
||||||
|
fee: self.fee,
|
||||||
|
program_ids,
|
||||||
|
instructions,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return a signed transaction.
|
||||||
|
pub fn sign<T: KeypairUtil>(&self, keypairs: &[&T], recent_blockhash: Hash) -> Transaction {
|
||||||
|
let signed_keys = self.keys().0;
|
||||||
for (i, keypair) in keypairs.iter().enumerate() {
|
for (i, keypair) in keypairs.iter().enumerate() {
|
||||||
assert_eq!(keypair.pubkey(), signed_keys[i], "keypair-pubkey mismatch");
|
assert_eq!(keypair.pubkey(), signed_keys[i], "keypair-pubkey mismatch");
|
||||||
}
|
}
|
||||||
assert_eq!(keypairs.len(), signed_keys.len(), "not enough keypairs");
|
assert_eq!(keypairs.len(), signed_keys.len(), "not enough keypairs");
|
||||||
|
|
||||||
signed_keys.extend(&unsigned_keys);
|
let mut tx = self.unsigned(Hash::default());
|
||||||
let instructions = self.instructions(&signed_keys, &program_ids);
|
tx.sign(keypairs, recent_blockhash);
|
||||||
Transaction::new_with_instructions(
|
tx
|
||||||
keypairs,
|
|
||||||
&unsigned_keys,
|
|
||||||
recent_blockhash,
|
|
||||||
self.fee,
|
|
||||||
program_ids,
|
|
||||||
instructions,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user