deprecates Signature::new in favor of Signature::{try_,}from (#32481)
This commit is contained in:
parent
78230050fb
commit
cfb028819a
|
@ -134,7 +134,7 @@ fn make_accounts_txs(
|
||||||
hash,
|
hash,
|
||||||
compute_unit_price,
|
compute_unit_price,
|
||||||
);
|
);
|
||||||
let sig: Vec<u8> = (0..64).map(|_| thread_rng().gen::<u8>()).collect();
|
let sig: [u8; 64] = std::array::from_fn(|_| thread_rng().gen::<u8>());
|
||||||
new.message.account_keys[0] = pubkey::new_rand();
|
new.message.account_keys[0] = pubkey::new_rand();
|
||||||
new.message.account_keys[1] = match contention {
|
new.message.account_keys[1] = match contention {
|
||||||
WriteLockContention::None => pubkey::new_rand(),
|
WriteLockContention::None => pubkey::new_rand(),
|
||||||
|
@ -148,7 +148,7 @@ fn make_accounts_txs(
|
||||||
}
|
}
|
||||||
WriteLockContention::Full => to_pubkey,
|
WriteLockContention::Full => to_pubkey,
|
||||||
};
|
};
|
||||||
new.signatures = vec![Signature::new(&sig[0..64])];
|
new.signatures = vec![Signature::from(sig)];
|
||||||
new
|
new
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
|
@ -220,8 +220,8 @@ impl PacketsPerIteration {
|
||||||
fn refresh_blockhash(&mut self, new_blockhash: Hash) {
|
fn refresh_blockhash(&mut self, new_blockhash: Hash) {
|
||||||
for tx in self.transactions.iter_mut() {
|
for tx in self.transactions.iter_mut() {
|
||||||
tx.message.recent_blockhash = new_blockhash;
|
tx.message.recent_blockhash = new_blockhash;
|
||||||
let sig: Vec<u8> = (0..64).map(|_| thread_rng().gen::<u8>()).collect();
|
let sig: [u8; 64] = std::array::from_fn(|_| thread_rng().gen::<u8>());
|
||||||
tx.signatures[0] = Signature::new(&sig[0..64]);
|
tx.signatures[0] = Signature::from(sig);
|
||||||
}
|
}
|
||||||
self.packet_batches = to_packet_batches(&self.transactions, self.packets_per_batch);
|
self.packet_batches = to_packet_batches(&self.transactions, self.packets_per_batch);
|
||||||
}
|
}
|
||||||
|
@ -377,8 +377,8 @@ fn main() {
|
||||||
genesis_config.hash(),
|
genesis_config.hash(),
|
||||||
);
|
);
|
||||||
// Ignore any pesky duplicate signature errors in the case we are using single-payer
|
// Ignore any pesky duplicate signature errors in the case we are using single-payer
|
||||||
let sig: Vec<u8> = (0..64).map(|_| thread_rng().gen::<u8>()).collect();
|
let sig: [u8; 64] = std::array::from_fn(|_| thread_rng().gen::<u8>());
|
||||||
fund.signatures = vec![Signature::new(&sig[0..64])];
|
fund.signatures = vec![Signature::from(sig)];
|
||||||
bank.process_transaction(&fund).unwrap();
|
bank.process_transaction(&fund).unwrap();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -61,7 +61,7 @@ fn bench_sigs_bloom(bencher: &mut Bencher) {
|
||||||
id = hash(id.as_ref());
|
id = hash(id.as_ref());
|
||||||
sigbytes.extend(id.as_ref());
|
sigbytes.extend(id.as_ref());
|
||||||
|
|
||||||
let sig = Signature::new(&sigbytes);
|
let sig = Signature::try_from(sigbytes).unwrap();
|
||||||
if sigs.contains(&sig) {
|
if sigs.contains(&sig) {
|
||||||
falses += 1;
|
falses += 1;
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@ fn bench_sigs_hashmap(bencher: &mut Bencher) {
|
||||||
id = hash(id.as_ref());
|
id = hash(id.as_ref());
|
||||||
sigbytes.extend(id.as_ref());
|
sigbytes.extend(id.as_ref());
|
||||||
|
|
||||||
let sig = Signature::new(&sigbytes);
|
let sig = Signature::try_from(sigbytes).unwrap();
|
||||||
if sigs.contains(&sig) {
|
if sigs.contains(&sig) {
|
||||||
falses += 1;
|
falses += 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3052,7 +3052,7 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn try_sign_message(&self, _message: &[u8]) -> Result<Signature, SignerError> {
|
fn try_sign_message(&self, _message: &[u8]) -> Result<Signature, SignerError> {
|
||||||
Ok(Signature::new(&[1u8; 64]))
|
Ok(Signature::from([1u8; 64]))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_interactive(&self) -> bool {
|
fn is_interactive(&self) -> bool {
|
||||||
|
|
|
@ -1898,7 +1898,7 @@ mod tests {
|
||||||
);
|
);
|
||||||
|
|
||||||
// Test Confirm Subcommand
|
// Test Confirm Subcommand
|
||||||
let signature = Signature::new(&[1; 64]);
|
let signature = Signature::from([1; 64]);
|
||||||
let signature_string = format!("{signature:?}");
|
let signature_string = format!("{signature:?}");
|
||||||
let test_confirm =
|
let test_confirm =
|
||||||
test_commands
|
test_commands
|
||||||
|
@ -2053,7 +2053,11 @@ mod tests {
|
||||||
};
|
};
|
||||||
assert_eq!(process_command(&config).unwrap(), "0.00000005 SOL");
|
assert_eq!(process_command(&config).unwrap(), "0.00000005 SOL");
|
||||||
|
|
||||||
let good_signature = Signature::new(&bs58::decode(SIGNATURE).into_vec().unwrap());
|
let good_signature = bs58::decode(SIGNATURE)
|
||||||
|
.into_vec()
|
||||||
|
.map(Signature::try_from)
|
||||||
|
.unwrap()
|
||||||
|
.unwrap();
|
||||||
config.command = CliCommand::Confirm(good_signature);
|
config.command = CliCommand::Confirm(good_signature);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
process_command(&config).unwrap(),
|
process_command(&config).unwrap(),
|
||||||
|
@ -2283,13 +2287,21 @@ mod tests {
|
||||||
|
|
||||||
// sig_not_found case
|
// sig_not_found case
|
||||||
config.rpc_client = Some(Arc::new(RpcClient::new_mock("sig_not_found".to_string())));
|
config.rpc_client = Some(Arc::new(RpcClient::new_mock("sig_not_found".to_string())));
|
||||||
let missing_signature = Signature::new(&bs58::decode("5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW").into_vec().unwrap());
|
let missing_signature = bs58::decode("5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW")
|
||||||
|
.into_vec()
|
||||||
|
.map(Signature::try_from)
|
||||||
|
.unwrap()
|
||||||
|
.unwrap();
|
||||||
config.command = CliCommand::Confirm(missing_signature);
|
config.command = CliCommand::Confirm(missing_signature);
|
||||||
assert_eq!(process_command(&config).unwrap(), "Not found");
|
assert_eq!(process_command(&config).unwrap(), "Not found");
|
||||||
|
|
||||||
// Tx error case
|
// Tx error case
|
||||||
config.rpc_client = Some(Arc::new(RpcClient::new_mock("account_in_use".to_string())));
|
config.rpc_client = Some(Arc::new(RpcClient::new_mock("account_in_use".to_string())));
|
||||||
let any_signature = Signature::new(&bs58::decode(SIGNATURE).into_vec().unwrap());
|
let any_signature = bs58::decode(SIGNATURE)
|
||||||
|
.into_vec()
|
||||||
|
.map(Signature::try_from)
|
||||||
|
.unwrap()
|
||||||
|
.unwrap();
|
||||||
config.command = CliCommand::Confirm(any_signature);
|
config.command = CliCommand::Confirm(any_signature);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
process_command(&config).unwrap(),
|
process_command(&config).unwrap(),
|
||||||
|
|
|
@ -132,10 +132,10 @@ fn make_accounts_txs(txes: usize, mint_keypair: &Keypair, hash: Hash) -> Vec<Tra
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
.map(|_| {
|
.map(|_| {
|
||||||
let mut new = dummy.clone();
|
let mut new = dummy.clone();
|
||||||
let sig: Vec<_> = (0..64).map(|_| thread_rng().gen::<u8>()).collect();
|
let sig: [u8; 64] = std::array::from_fn(|_| thread_rng().gen::<u8>());
|
||||||
new.message.account_keys[0] = pubkey::new_rand();
|
new.message.account_keys[0] = pubkey::new_rand();
|
||||||
new.message.account_keys[1] = pubkey::new_rand();
|
new.message.account_keys[1] = pubkey::new_rand();
|
||||||
new.signatures = vec![Signature::new(&sig[0..64])];
|
new.signatures = vec![Signature::from(sig)];
|
||||||
new
|
new
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
|
|
|
@ -337,7 +337,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote: VoteTransaction::from(vote.clone()),
|
vote: VoteTransaction::from(vote.clone()),
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
verified_vote_packets
|
verified_vote_packets
|
||||||
|
@ -357,7 +357,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote: VoteTransaction::from(vote),
|
vote: VoteTransaction::from(vote),
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
verified_vote_packets
|
verified_vote_packets
|
||||||
|
@ -379,7 +379,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote: VoteTransaction::from(vote),
|
vote: VoteTransaction::from(vote),
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
verified_vote_packets
|
verified_vote_packets
|
||||||
|
@ -402,7 +402,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote: VoteTransaction::from(vote),
|
vote: VoteTransaction::from(vote),
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[2u8; 64]),
|
signature: Signature::from([2u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
verified_vote_packets
|
verified_vote_packets
|
||||||
|
@ -441,7 +441,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote: VoteTransaction::from(vote),
|
vote: VoteTransaction::from(vote),
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
@ -627,7 +627,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote: VoteTransaction::from(vote),
|
vote: VoteTransaction::from(vote),
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
@ -650,7 +650,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote: VoteTransaction::from(third_vote.clone()),
|
vote: VoteTransaction::from(third_vote.clone()),
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
@ -670,7 +670,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote: VoteTransaction::from(vote),
|
vote: VoteTransaction::from(vote),
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
@ -701,7 +701,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote: VoteTransaction::from(vote),
|
vote: VoteTransaction::from(vote),
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
verified_vote_packets
|
verified_vote_packets
|
||||||
|
@ -802,7 +802,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote,
|
vote,
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
@ -837,7 +837,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote,
|
vote,
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
@ -865,7 +865,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote,
|
vote,
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
@ -894,7 +894,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote,
|
vote,
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
@ -917,7 +917,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote,
|
vote,
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
@ -938,7 +938,7 @@ mod tests {
|
||||||
vote_account_key,
|
vote_account_key,
|
||||||
vote,
|
vote,
|
||||||
packet_batch: PacketBatch::default(),
|
packet_batch: PacketBatch::default(),
|
||||||
signature: Signature::new(&[1u8; 64]),
|
signature: Signature::from([1u8; 64]),
|
||||||
}])
|
}])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
|
|
@ -7339,7 +7339,7 @@ pub mod tests {
|
||||||
}
|
}
|
||||||
.into();
|
.into();
|
||||||
assert!(transaction_status_cf
|
assert!(transaction_status_cf
|
||||||
.put_protobuf((0, Signature::new(&[2u8; 64]), 9), &status,)
|
.put_protobuf((0, Signature::from([2u8; 64]), 9), &status,)
|
||||||
.is_ok());
|
.is_ok());
|
||||||
|
|
||||||
// result found
|
// result found
|
||||||
|
@ -7359,7 +7359,7 @@ pub mod tests {
|
||||||
} = transaction_status_cf
|
} = transaction_status_cf
|
||||||
.get_protobuf_or_bincode::<StoredTransactionStatusMeta>((
|
.get_protobuf_or_bincode::<StoredTransactionStatusMeta>((
|
||||||
0,
|
0,
|
||||||
Signature::new(&[2u8; 64]),
|
Signature::from([2u8; 64]),
|
||||||
9,
|
9,
|
||||||
))
|
))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
@ -7396,11 +7396,11 @@ pub mod tests {
|
||||||
assert!(transaction_status_index_cf.get(1).unwrap().is_some());
|
assert!(transaction_status_index_cf.get(1).unwrap().is_some());
|
||||||
|
|
||||||
for _ in 0..5 {
|
for _ in 0..5 {
|
||||||
let random_bytes: Vec<u8> = (0..64).map(|_| rand::random::<u8>()).collect();
|
let random_bytes: [u8; 64] = std::array::from_fn(|_| rand::random::<u8>());
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
slot0,
|
slot0,
|
||||||
Signature::new(&random_bytes),
|
Signature::from(random_bytes),
|
||||||
vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()],
|
vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()],
|
||||||
vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()],
|
vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()],
|
||||||
TransactionStatusMeta::default(),
|
TransactionStatusMeta::default(),
|
||||||
|
@ -7462,11 +7462,11 @@ pub mod tests {
|
||||||
|
|
||||||
let slot1 = 20;
|
let slot1 = 20;
|
||||||
for _ in 0..5 {
|
for _ in 0..5 {
|
||||||
let random_bytes: Vec<u8> = (0..64).map(|_| rand::random::<u8>()).collect();
|
let random_bytes: [u8; 64] = std::array::from_fn(|_| rand::random::<u8>());
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
slot1,
|
slot1,
|
||||||
Signature::new(&random_bytes),
|
Signature::from(random_bytes),
|
||||||
vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()],
|
vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()],
|
||||||
vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()],
|
vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()],
|
||||||
TransactionStatusMeta::default(),
|
TransactionStatusMeta::default(),
|
||||||
|
@ -7613,13 +7613,13 @@ pub mod tests {
|
||||||
}
|
}
|
||||||
.into();
|
.into();
|
||||||
|
|
||||||
let signature1 = Signature::new(&[1u8; 64]);
|
let signature1 = Signature::from([1u8; 64]);
|
||||||
let signature2 = Signature::new(&[2u8; 64]);
|
let signature2 = Signature::from([2u8; 64]);
|
||||||
let signature3 = Signature::new(&[3u8; 64]);
|
let signature3 = Signature::from([3u8; 64]);
|
||||||
let signature4 = Signature::new(&[4u8; 64]);
|
let signature4 = Signature::from([4u8; 64]);
|
||||||
let signature5 = Signature::new(&[5u8; 64]);
|
let signature5 = Signature::from([5u8; 64]);
|
||||||
let signature6 = Signature::new(&[6u8; 64]);
|
let signature6 = Signature::from([6u8; 64]);
|
||||||
let signature7 = Signature::new(&[7u8; 64]);
|
let signature7 = Signature::from([7u8; 64]);
|
||||||
|
|
||||||
// Insert slots with fork
|
// Insert slots with fork
|
||||||
// 0 (root)
|
// 0 (root)
|
||||||
|
@ -7807,8 +7807,8 @@ pub mod tests {
|
||||||
}
|
}
|
||||||
.into();
|
.into();
|
||||||
|
|
||||||
let signature1 = Signature::new(&[2u8; 64]);
|
let signature1 = Signature::from([2u8; 64]);
|
||||||
let signature2 = Signature::new(&[3u8; 64]);
|
let signature2 = Signature::from([3u8; 64]);
|
||||||
|
|
||||||
// Insert rooted slots 0..=3 with no fork
|
// Insert rooted slots 0..=3 with no fork
|
||||||
let meta0 = SlotMeta::new(0, Some(0));
|
let meta0 = SlotMeta::new(0, Some(0));
|
||||||
|
@ -8179,7 +8179,7 @@ pub mod tests {
|
||||||
|
|
||||||
let slot0 = 10;
|
let slot0 = 10;
|
||||||
for x in 1..5 {
|
for x in 1..5 {
|
||||||
let signature = Signature::new(&[x; 64]);
|
let signature = Signature::from([x; 64]);
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
slot0,
|
slot0,
|
||||||
|
@ -8192,7 +8192,7 @@ pub mod tests {
|
||||||
}
|
}
|
||||||
let slot1 = 20;
|
let slot1 = 20;
|
||||||
for x in 5..9 {
|
for x in 5..9 {
|
||||||
let signature = Signature::new(&[x; 64]);
|
let signature = Signature::from([x; 64]);
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
slot1,
|
slot1,
|
||||||
|
@ -8210,7 +8210,7 @@ pub mod tests {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(all0.len(), 8);
|
assert_eq!(all0.len(), 8);
|
||||||
for x in 1..9 {
|
for x in 1..9 {
|
||||||
let expected_signature = Signature::new(&[x; 64]);
|
let expected_signature = Signature::from([x; 64]);
|
||||||
assert_eq!(all0[x as usize - 1], expected_signature);
|
assert_eq!(all0[x as usize - 1], expected_signature);
|
||||||
}
|
}
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -8244,7 +8244,7 @@ pub mod tests {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(all1.len(), 8);
|
assert_eq!(all1.len(), 8);
|
||||||
for x in 1..9 {
|
for x in 1..9 {
|
||||||
let expected_signature = Signature::new(&[x; 64]);
|
let expected_signature = Signature::from([x; 64]);
|
||||||
assert_eq!(all1[x as usize - 1], expected_signature);
|
assert_eq!(all1[x as usize - 1], expected_signature);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8284,8 +8284,8 @@ pub mod tests {
|
||||||
|
|
||||||
// Test sort, regardless of entry order or signature value
|
// Test sort, regardless of entry order or signature value
|
||||||
for slot in (21..25).rev() {
|
for slot in (21..25).rev() {
|
||||||
let random_bytes: Vec<u8> = (0..64).map(|_| rand::random::<u8>()).collect();
|
let random_bytes: [u8; 64] = std::array::from_fn(|_| rand::random::<u8>());
|
||||||
let signature = Signature::new(&random_bytes);
|
let signature = Signature::from(random_bytes);
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
slot,
|
slot,
|
||||||
|
@ -8314,7 +8314,7 @@ pub mod tests {
|
||||||
|
|
||||||
let slot1 = 1;
|
let slot1 = 1;
|
||||||
for x in 1..5 {
|
for x in 1..5 {
|
||||||
let signature = Signature::new(&[x; 64]);
|
let signature = Signature::from([x; 64]);
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
slot1,
|
slot1,
|
||||||
|
@ -8327,7 +8327,7 @@ pub mod tests {
|
||||||
}
|
}
|
||||||
let slot2 = 2;
|
let slot2 = 2;
|
||||||
for x in 5..7 {
|
for x in 5..7 {
|
||||||
let signature = Signature::new(&[x; 64]);
|
let signature = Signature::from([x; 64]);
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
slot2,
|
slot2,
|
||||||
|
@ -8339,7 +8339,7 @@ pub mod tests {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
for x in 7..9 {
|
for x in 7..9 {
|
||||||
let signature = Signature::new(&[x; 64]);
|
let signature = Signature::from([x; 64]);
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
slot2,
|
slot2,
|
||||||
|
@ -8352,7 +8352,7 @@ pub mod tests {
|
||||||
}
|
}
|
||||||
let slot3 = 3;
|
let slot3 = 3;
|
||||||
for x in 9..13 {
|
for x in 9..13 {
|
||||||
let signature = Signature::new(&[x; 64]);
|
let signature = Signature::from([x; 64]);
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
slot3,
|
slot3,
|
||||||
|
@ -8370,7 +8370,7 @@ pub mod tests {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
for (i, (slot, signature)) in slot1_signatures.iter().enumerate() {
|
for (i, (slot, signature)) in slot1_signatures.iter().enumerate() {
|
||||||
assert_eq!(*slot, slot1);
|
assert_eq!(*slot, slot1);
|
||||||
assert_eq!(*signature, Signature::new(&[i as u8 + 1; 64]));
|
assert_eq!(*signature, Signature::from([i as u8 + 1; 64]));
|
||||||
}
|
}
|
||||||
|
|
||||||
let slot2_signatures = blockstore
|
let slot2_signatures = blockstore
|
||||||
|
@ -8378,7 +8378,7 @@ pub mod tests {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
for (i, (slot, signature)) in slot2_signatures.iter().enumerate() {
|
for (i, (slot, signature)) in slot2_signatures.iter().enumerate() {
|
||||||
assert_eq!(*slot, slot2);
|
assert_eq!(*slot, slot2);
|
||||||
assert_eq!(*signature, Signature::new(&[i as u8 + 5; 64]));
|
assert_eq!(*signature, Signature::from([i as u8 + 5; 64]));
|
||||||
}
|
}
|
||||||
|
|
||||||
let slot3_signatures = blockstore
|
let slot3_signatures = blockstore
|
||||||
|
@ -8386,7 +8386,7 @@ pub mod tests {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
for (i, (slot, signature)) in slot3_signatures.iter().enumerate() {
|
for (i, (slot, signature)) in slot3_signatures.iter().enumerate() {
|
||||||
assert_eq!(*slot, slot3);
|
assert_eq!(*slot, slot3);
|
||||||
assert_eq!(*signature, Signature::new(&[i as u8 + 9; 64]));
|
assert_eq!(*signature, Signature::from([i as u8 + 9; 64]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -471,11 +471,11 @@ pub mod tests {
|
||||||
|
|
||||||
let max_slot = 10;
|
let max_slot = 10;
|
||||||
for x in 0..max_slot {
|
for x in 0..max_slot {
|
||||||
let random_bytes: Vec<u8> = (0..64).map(|_| rand::random::<u8>()).collect();
|
let random_bytes: [u8; 64] = std::array::from_fn(|_| rand::random::<u8>());
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
x,
|
x,
|
||||||
Signature::new(&random_bytes),
|
Signature::from(random_bytes),
|
||||||
vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()],
|
vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()],
|
||||||
vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()],
|
vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()],
|
||||||
TransactionStatusMeta::default(),
|
TransactionStatusMeta::default(),
|
||||||
|
@ -486,11 +486,11 @@ pub mod tests {
|
||||||
blockstore.run_purge(0, 1, PurgeType::PrimaryIndex).unwrap();
|
blockstore.run_purge(0, 1, PurgeType::PrimaryIndex).unwrap();
|
||||||
|
|
||||||
for x in max_slot..2 * max_slot {
|
for x in max_slot..2 * max_slot {
|
||||||
let random_bytes: Vec<u8> = (0..64).map(|_| rand::random::<u8>()).collect();
|
let random_bytes: [u8; 64] = std::array::from_fn(|_| rand::random::<u8>());
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
x,
|
x,
|
||||||
Signature::new(&random_bytes),
|
Signature::from(random_bytes),
|
||||||
vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()],
|
vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()],
|
||||||
vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()],
|
vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()],
|
||||||
TransactionStatusMeta::default(),
|
TransactionStatusMeta::default(),
|
||||||
|
@ -521,11 +521,11 @@ pub mod tests {
|
||||||
let transaction_status_index_cf = &blockstore.transaction_status_index_cf;
|
let transaction_status_index_cf = &blockstore.transaction_status_index_cf;
|
||||||
let slot = 10;
|
let slot = 10;
|
||||||
for _ in 0..5 {
|
for _ in 0..5 {
|
||||||
let random_bytes: Vec<u8> = (0..64).map(|_| rand::random::<u8>()).collect();
|
let random_bytes: [u8; 64] = std::array::from_fn(|_| rand::random::<u8>());
|
||||||
blockstore
|
blockstore
|
||||||
.write_transaction_status(
|
.write_transaction_status(
|
||||||
slot,
|
slot,
|
||||||
Signature::new(&random_bytes),
|
Signature::from(random_bytes),
|
||||||
vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()],
|
vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()],
|
||||||
vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()],
|
vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()],
|
||||||
TransactionStatusMeta::default(),
|
TransactionStatusMeta::default(),
|
||||||
|
|
|
@ -693,7 +693,7 @@ impl Column for columns::TransactionStatus {
|
||||||
Self::as_index(0)
|
Self::as_index(0)
|
||||||
} else {
|
} else {
|
||||||
let index = BigEndian::read_u64(&key[0..8]);
|
let index = BigEndian::read_u64(&key[0..8]);
|
||||||
let signature = Signature::new(&key[8..72]);
|
let signature = Signature::try_from(&key[8..72]).unwrap();
|
||||||
let slot = BigEndian::read_u64(&key[72..80]);
|
let slot = BigEndian::read_u64(&key[72..80]);
|
||||||
(index, signature, slot)
|
(index, signature, slot)
|
||||||
}
|
}
|
||||||
|
@ -734,7 +734,7 @@ impl Column for columns::AddressSignatures {
|
||||||
let index = BigEndian::read_u64(&key[0..8]);
|
let index = BigEndian::read_u64(&key[0..8]);
|
||||||
let pubkey = Pubkey::try_from(&key[8..40]).unwrap();
|
let pubkey = Pubkey::try_from(&key[8..40]).unwrap();
|
||||||
let slot = BigEndian::read_u64(&key[40..48]);
|
let slot = BigEndian::read_u64(&key[40..48]);
|
||||||
let signature = Signature::new(&key[48..112]);
|
let signature = Signature::try_from(&key[48..112]).unwrap();
|
||||||
(index, pubkey, slot, signature)
|
(index, pubkey, slot, signature)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -764,7 +764,7 @@ impl Column for columns::TransactionMemos {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn index(key: &[u8]) -> Signature {
|
fn index(key: &[u8]) -> Signature {
|
||||||
Signature::new(&key[0..64])
|
Signature::try_from(&key[..64]).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn primary_index(_index: Self::Index) -> u64 {
|
fn primary_index(_index: Self::Index) -> u64 {
|
||||||
|
|
|
@ -578,7 +578,10 @@ pub mod layout {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn get_signature(shred: &[u8]) -> Option<Signature> {
|
pub(crate) fn get_signature(shred: &[u8]) -> Option<Signature> {
|
||||||
Some(Signature::new(shred.get(..SIZE_OF_SIGNATURE)?))
|
shred
|
||||||
|
.get(..SIZE_OF_SIGNATURE)
|
||||||
|
.map(Signature::try_from)?
|
||||||
|
.ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) const fn get_signature_range() -> Range<usize> {
|
pub(crate) const fn get_signature_range() -> Range<usize> {
|
||||||
|
|
|
@ -988,7 +988,7 @@ mod tests {
|
||||||
// Also randomize the signatre bytes.
|
// Also randomize the signatre bytes.
|
||||||
let mut signature = [0u8; 64];
|
let mut signature = [0u8; 64];
|
||||||
rng.fill(&mut signature[..]);
|
rng.fill(&mut signature[..]);
|
||||||
tx.signatures = vec![Signature::new(&signature)];
|
tx.signatures = vec![Signature::from(signature)];
|
||||||
tx
|
tx
|
||||||
})
|
})
|
||||||
.take(num_tx)
|
.take(num_tx)
|
||||||
|
|
|
@ -134,7 +134,7 @@ fn verify_packet(packet: &mut Packet, reject_non_vote: bool) -> bool {
|
||||||
let Some(sig_end) = sig_start.checked_add(size_of::<Signature>()) else {
|
let Some(sig_end) = sig_start.checked_add(size_of::<Signature>()) else {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
let Some(signature) = packet.data(sig_start..sig_end).map(Signature::new) else {
|
let Some(Ok(signature)) = packet.data(sig_start..sig_end).map(Signature::try_from) else {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
let Some(pubkey) = packet.data(pubkey_start..pubkey_end) else {
|
let Some(pubkey) = packet.data(pubkey_start..pubkey_end) else {
|
||||||
|
|
|
@ -516,12 +516,8 @@ impl RemoteWallet<hidapi::DeviceInfo> for LedgerWallet {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if result.len() != 64 {
|
Signature::try_from(result)
|
||||||
return Err(RemoteWalletError::Protocol(
|
.map_err(|_| RemoteWalletError::Protocol("Signature packet size mismatch"))
|
||||||
"Signature packet size mismatch",
|
|
||||||
));
|
|
||||||
}
|
|
||||||
Ok(Signature::new(&result))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sign_offchain_message(
|
fn sign_offchain_message(
|
||||||
|
@ -552,12 +548,8 @@ impl RemoteWallet<hidapi::DeviceInfo> for LedgerWallet {
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = self.send_apdu(commands::SIGN_OFFCHAIN_MESSAGE, p1, p2, payload)?;
|
let result = self.send_apdu(commands::SIGN_OFFCHAIN_MESSAGE, p1, p2, payload)?;
|
||||||
if result.len() != 64 {
|
Signature::try_from(result)
|
||||||
return Err(RemoteWalletError::Protocol(
|
.map_err(|_| RemoteWalletError::Protocol("Signature packet size mismatch"))
|
||||||
"Signature packet size mismatch",
|
|
||||||
));
|
|
||||||
}
|
|
||||||
Ok(Signature::new(&result))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -241,7 +241,7 @@ impl RpcSender for MockSender {
|
||||||
"getTransactionCount" => json![1234],
|
"getTransactionCount" => json![1234],
|
||||||
"getSlot" => json![0],
|
"getSlot" => json![0],
|
||||||
"getMaxShredInsertSlot" => json![0],
|
"getMaxShredInsertSlot" => json![0],
|
||||||
"requestAirdrop" => Value::String(Signature::new(&[8; 64]).to_string()),
|
"requestAirdrop" => Value::String(Signature::from([8; 64]).to_string()),
|
||||||
"getSnapshotSlot" => Value::Number(Number::from(0)),
|
"getSnapshotSlot" => Value::Number(Number::from(0)),
|
||||||
"getHighestSnapshotSlot" => json!(RpcSnapshotSlotInfo {
|
"getHighestSnapshotSlot" => json!(RpcSnapshotSlotInfo {
|
||||||
full: 100,
|
full: 100,
|
||||||
|
@ -333,7 +333,7 @@ impl RpcSender for MockSender {
|
||||||
}
|
}
|
||||||
"sendTransaction" => {
|
"sendTransaction" => {
|
||||||
let signature = if self.url == "malicious" {
|
let signature = if self.url == "malicious" {
|
||||||
Signature::new(&[8; 64]).to_string()
|
Signature::from([8; 64]).to_string()
|
||||||
} else {
|
} else {
|
||||||
let tx_str = params.as_array().unwrap()[0].as_str().unwrap().to_string();
|
let tx_str = params.as_array().unwrap()[0].as_str().unwrap().to_string();
|
||||||
let data = BASE64_STANDARD.decode(tx_str).unwrap();
|
let data = BASE64_STANDARD.decode(tx_str).unwrap();
|
||||||
|
|
|
@ -24,7 +24,7 @@ fn bench_status_cache_serialize(bencher: &mut Bencher) {
|
||||||
let mut sigbytes = Vec::from(id.as_ref());
|
let mut sigbytes = Vec::from(id.as_ref());
|
||||||
id = hash(id.as_ref());
|
id = hash(id.as_ref());
|
||||||
sigbytes.extend(id.as_ref());
|
sigbytes.extend(id.as_ref());
|
||||||
let sig = Signature::new(&sigbytes);
|
let sig = Signature::try_from(sigbytes).unwrap();
|
||||||
status_cache.insert(&blockhash, sig, 0, Ok(()));
|
status_cache.insert(&blockhash, sig, 0, Ok(()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ use {
|
||||||
std::{
|
std::{
|
||||||
borrow::{Borrow, Cow},
|
borrow::{Borrow, Cow},
|
||||||
convert::TryInto,
|
convert::TryInto,
|
||||||
fmt, mem,
|
fmt,
|
||||||
str::FromStr,
|
str::FromStr,
|
||||||
},
|
},
|
||||||
thiserror::Error,
|
thiserror::Error,
|
||||||
|
@ -29,13 +29,16 @@ pub struct Signature(GenericArray<u8, U64>);
|
||||||
impl crate::sanitize::Sanitize for Signature {}
|
impl crate::sanitize::Sanitize for Signature {}
|
||||||
|
|
||||||
impl Signature {
|
impl Signature {
|
||||||
|
#[deprecated(
|
||||||
|
since = "1.16.4",
|
||||||
|
note = "Please use 'Signature::from' or 'Signature::try_from' instead"
|
||||||
|
)]
|
||||||
pub fn new(signature_slice: &[u8]) -> Self {
|
pub fn new(signature_slice: &[u8]) -> Self {
|
||||||
Self(GenericArray::clone_from_slice(signature_slice))
|
Self(GenericArray::clone_from_slice(signature_slice))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_unique() -> Self {
|
pub fn new_unique() -> Self {
|
||||||
let random_bytes: Vec<u8> = (0..64).map(|_| rand::random::<u8>()).collect();
|
Self::from(std::array::from_fn(|_| rand::random()))
|
||||||
Self::new(&random_bytes)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(self) fn verify_verbose(
|
pub(self) fn verify_verbose(
|
||||||
|
@ -93,6 +96,31 @@ impl From<Signature> for [u8; 64] {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<[u8; SIGNATURE_BYTES]> for Signature {
|
||||||
|
#[inline]
|
||||||
|
fn from(signature: [u8; SIGNATURE_BYTES]) -> Self {
|
||||||
|
Self(GenericArray::from(signature))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> TryFrom<&'a [u8]> for Signature {
|
||||||
|
type Error = <[u8; SIGNATURE_BYTES] as TryFrom<&'a [u8]>>::Error;
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn try_from(signature: &'a [u8]) -> Result<Self, Self::Error> {
|
||||||
|
<[u8; SIGNATURE_BYTES]>::try_from(signature).map(Self::from)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Vec<u8>> for Signature {
|
||||||
|
type Error = <[u8; SIGNATURE_BYTES] as TryFrom<Vec<u8>>>::Error;
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn try_from(signature: Vec<u8>) -> Result<Self, Self::Error> {
|
||||||
|
<[u8; SIGNATURE_BYTES]>::try_from(signature).map(Self::from)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Error)]
|
#[derive(Debug, Clone, PartialEq, Eq, Error)]
|
||||||
pub enum ParseSignatureError {
|
pub enum ParseSignatureError {
|
||||||
#[error("string decoded to wrong size for signature")]
|
#[error("string decoded to wrong size for signature")]
|
||||||
|
@ -111,11 +139,7 @@ impl FromStr for Signature {
|
||||||
let bytes = bs58::decode(s)
|
let bytes = bs58::decode(s)
|
||||||
.into_vec()
|
.into_vec()
|
||||||
.map_err(|_| ParseSignatureError::Invalid)?;
|
.map_err(|_| ParseSignatureError::Invalid)?;
|
||||||
if bytes.len() != mem::size_of::<Signature>() {
|
Signature::try_from(bytes).map_err(|_| ParseSignatureError::WrongSize)
|
||||||
Err(ParseSignatureError::WrongSize)
|
|
||||||
} else {
|
|
||||||
Ok(Signature::new(&bytes))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ impl Signer for Keypair {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sign_message(&self, message: &[u8]) -> Signature {
|
fn sign_message(&self, message: &[u8]) -> Signature {
|
||||||
Signature::new(&self.0.sign(message).to_bytes())
|
Signature::from(self.0.sign(message).to_bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn try_sign_message(&self, message: &[u8]) -> Result<Signature, SignerError> {
|
fn try_sign_message(&self, message: &[u8]) -> Result<Signature, SignerError> {
|
||||||
|
|
|
@ -1068,7 +1068,7 @@ mod test {
|
||||||
|
|
||||||
info!("Transactions are only retried until max_retries");
|
info!("Transactions are only retried until max_retries");
|
||||||
transactions.insert(
|
transactions.insert(
|
||||||
Signature::new(&[1; 64]),
|
Signature::from([1; 64]),
|
||||||
TransactionInfo::new(
|
TransactionInfo::new(
|
||||||
Signature::default(),
|
Signature::default(),
|
||||||
vec![],
|
vec![],
|
||||||
|
@ -1079,7 +1079,7 @@ mod test {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
transactions.insert(
|
transactions.insert(
|
||||||
Signature::new(&[2; 64]),
|
Signature::from([2; 64]),
|
||||||
TransactionInfo::new(
|
TransactionInfo::new(
|
||||||
Signature::default(),
|
Signature::default(),
|
||||||
vec![],
|
vec![],
|
||||||
|
|
|
@ -242,8 +242,9 @@ impl From<generated::Transaction> for VersionedTransaction {
|
||||||
signatures: value
|
signatures: value
|
||||||
.signatures
|
.signatures
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|x| Signature::new(&x))
|
.map(Signature::try_from)
|
||||||
.collect(),
|
.collect::<Result<_, _>>()
|
||||||
|
.unwrap(),
|
||||||
message: value.message.expect("message is required").into(),
|
message: value.message.expect("message is required").into(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1158,7 +1159,8 @@ impl TryFrom<tx_by_addr::TransactionByAddrInfo> for TransactionByAddrInfo {
|
||||||
.transpose()?;
|
.transpose()?;
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
signature: Signature::new(&transaction_by_addr.signature),
|
signature: Signature::try_from(transaction_by_addr.signature)
|
||||||
|
.map_err(|_| "Invalid Signature")?,
|
||||||
err,
|
err,
|
||||||
index: transaction_by_addr.index,
|
index: transaction_by_addr.index,
|
||||||
memo: transaction_by_addr
|
memo: transaction_by_addr
|
||||||
|
@ -1219,7 +1221,11 @@ mod test {
|
||||||
#[test]
|
#[test]
|
||||||
fn test_transaction_by_addr_encode() {
|
fn test_transaction_by_addr_encode() {
|
||||||
let info = TransactionByAddrInfo {
|
let info = TransactionByAddrInfo {
|
||||||
signature: Signature::new(&bs58::decode("Nfo6rgemG1KLbk1xuNwfrQTsdxaGfLuWURHNRy9LYnDrubG7LFQZaA5obPNas9LQ6DdorJqxh2LxA3PsnWdkSrL").into_vec().unwrap()),
|
signature: bs58::decode("Nfo6rgemG1KLbk1xuNwfrQTsdxaGfLuWURHNRy9LYnDrubG7LFQZaA5obPNas9LQ6DdorJqxh2LxA3PsnWdkSrL")
|
||||||
|
.into_vec()
|
||||||
|
.map(Signature::try_from)
|
||||||
|
.unwrap()
|
||||||
|
.unwrap(),
|
||||||
err: None,
|
err: None,
|
||||||
index: 5,
|
index: 5,
|
||||||
memo: Some("string".to_string()),
|
memo: Some("string".to_string()),
|
||||||
|
|
Loading…
Reference in New Issue