Add replacements for Pubkey::new_rand()/Hash::new_rand() (bp #12987) (#13076)

* Add pubkey_new_rand(), mark Pubkey::new_rand() deprecated

(cherry picked from commit 0e68ed6a8d)

* Add hash_new_rand(), mark Hash::new_rand() as deprecated

(cherry picked from commit 76f11c7dae)

* Run `codemod --extensions rs Pubkey::new_rand solana_sdk::pubkey::new_rand`

(cherry picked from commit 7bc073defe)

# Conflicts:
#	programs/bpf/benches/bpf_loader.rs
#	runtime/benches/accounts.rs
#	runtime/src/accounts.rs

* Run `codemod --extensions rs Hash::new_rand solana_sdk:#️⃣:new_rand`

(cherry picked from commit 17c391121a)

* Remove unused pubkey::Pubkey imports

(cherry picked from commit 959880db60)

# Conflicts:
#	runtime/src/accounts_index.rs

* Resolve conflicts

Co-authored-by: Michael Vines <mvines@gmail.com>
This commit is contained in:
mergify[bot]
2020-10-22 05:08:01 +00:00
committed by GitHub
parent e0ae54fd7e
commit edfbd8d65a
121 changed files with 1166 additions and 1020 deletions

View File

@@ -4,13 +4,13 @@ extern crate test;
use bincode::{deserialize, serialize};
use solana_sdk::instruction::{AccountMeta, Instruction};
use solana_sdk::message::Message;
use solana_sdk::pubkey::Pubkey;
use solana_sdk::pubkey;
use solana_sdk::sysvar::instructions;
use test::Bencher;
fn make_instructions() -> Vec<Instruction> {
let meta = AccountMeta::new(Pubkey::new_rand(), false);
let inst = Instruction::new(Pubkey::new_rand(), &[0; 10], vec![meta; 4]);
let meta = AccountMeta::new(pubkey::new_rand(), false);
let inst = Instruction::new(pubkey::new_rand(), &[0; 10], vec![meta; 4]);
vec![inst; 4]
}

View File

@@ -310,8 +310,11 @@ mod tests {
faucet_keypair.pubkey(),
Account::new(10_000, 0, &Pubkey::default()),
);
config.add_account(Pubkey::new_rand(), Account::new(1, 0, &Pubkey::default()));
config.add_native_instruction_processor("hi".to_string(), Pubkey::new_rand());
config.add_account(
solana_sdk::pubkey::new_rand(),
Account::new(1, 0, &Pubkey::default()),
);
config.add_native_instruction_processor("hi".to_string(), solana_sdk::pubkey::new_rand());
assert_eq!(config.accounts.len(), 2);
assert!(config

View File

@@ -76,6 +76,17 @@ impl FromStr for Hash {
}
}
/// New random hash value for tests and benchmarks.
#[cfg(feature = "everything")]
pub fn new_rand<R: ?Sized>(rng: &mut R) -> Hash
where
R: rand::Rng,
{
let mut buf = [0u8; HASH_BYTES];
rng.fill(&mut buf);
Hash::new(&buf)
}
impl Hash {
pub fn new(hash_slice: &[u8]) -> Self {
Hash(<[u8; HASH_BYTES]>::try_from(hash_slice).unwrap())
@@ -90,14 +101,13 @@ impl Hash {
}
/// New random hash value for tests and benchmarks.
#[cfg(feature = "everything")]
#[cfg(all(feature = "everything", not(target_arch = "bpf")))]
#[deprecated(since = "1.3.9", note = "Please use 'hash::new_rand' instead")]
pub fn new_rand<R: ?Sized>(rng: &mut R) -> Self
where
R: rand::Rng,
{
let mut buf = [0u8; HASH_BYTES];
rng.fill(&mut buf);
Hash::new(&buf)
new_rand(rng)
}
}

View File

@@ -444,7 +444,7 @@ mod tests {
#[test]
fn test_message_unique_program_ids_not_adjacent() {
let program_id0 = Pubkey::default();
let program_id1 = Pubkey::new_rand();
let program_id1 = solana_sdk::pubkey::new_rand();
let program_ids = get_program_ids(&[
Instruction::new(program_id0, &0, vec![]),
Instruction::new(program_id1, &0, vec![]),
@@ -455,7 +455,7 @@ mod tests {
#[test]
fn test_message_unique_program_ids_order_preserved() {
let program_id0 = Pubkey::new_rand();
let program_id0 = solana_sdk::pubkey::new_rand();
let program_id1 = Pubkey::default(); // Key less than program_id0
let program_ids = get_program_ids(&[
Instruction::new(program_id0, &0, vec![]),
@@ -558,7 +558,7 @@ mod tests {
#[test]
fn test_message_unique_keys_order_preserved() {
let program_id = Pubkey::default();
let id0 = Pubkey::new_rand();
let id0 = solana_sdk::pubkey::new_rand();
let id1 = Pubkey::default(); // Key less than id0
let keys = get_keys(
&[
@@ -574,7 +574,7 @@ mod tests {
fn test_message_unique_keys_not_adjacent() {
let program_id = Pubkey::default();
let id0 = Pubkey::default();
let id1 = Pubkey::new_rand();
let id1 = solana_sdk::pubkey::new_rand();
let keys = get_keys(
&[
Instruction::new(program_id, &0, vec![AccountMeta::new(id0, false)]),
@@ -590,7 +590,7 @@ mod tests {
fn test_message_signed_keys_first() {
let program_id = Pubkey::default();
let id0 = Pubkey::default();
let id1 = Pubkey::new_rand();
let id1 = solana_sdk::pubkey::new_rand();
let keys = get_keys(
&[
Instruction::new(program_id, &0, vec![AccountMeta::new(id0, false)]),
@@ -619,9 +619,9 @@ mod tests {
fn test_message_readonly_keys_last() {
let program_id = Pubkey::default();
let id0 = Pubkey::default(); // Identical key/program_id should be de-duped
let id1 = Pubkey::new_rand();
let id2 = Pubkey::new_rand();
let id3 = Pubkey::new_rand();
let id1 = solana_sdk::pubkey::new_rand();
let id2 = solana_sdk::pubkey::new_rand();
let id3 = solana_sdk::pubkey::new_rand();
let keys = get_keys(
&[
Instruction::new(program_id, &0, vec![AccountMeta::new_readonly(id0, false)]),
@@ -639,8 +639,8 @@ mod tests {
#[test]
fn test_message_kitchen_sink() {
let program_id0 = Pubkey::new_rand();
let program_id1 = Pubkey::new_rand();
let program_id0 = solana_sdk::pubkey::new_rand();
let program_id1 = solana_sdk::pubkey::new_rand();
let id0 = Pubkey::default();
let keypair1 = Keypair::new();
let id1 = keypair1.pubkey();
@@ -669,7 +669,7 @@ mod tests {
#[test]
fn test_message_payer_first() {
let program_id = Pubkey::default();
let payer = Pubkey::new_rand();
let payer = solana_sdk::pubkey::new_rand();
let id0 = Pubkey::default();
let ix = Instruction::new(program_id, &0, vec![AccountMeta::new(id0, false)]);
@@ -692,8 +692,8 @@ mod tests {
#[test]
fn test_message_program_last() {
let program_id = Pubkey::default();
let id0 = Pubkey::new_rand();
let id1 = Pubkey::new_rand();
let id0 = solana_sdk::pubkey::new_rand();
let id1 = solana_sdk::pubkey::new_rand();
let keys = get_keys(
&[
Instruction::new(program_id, &0, vec![AccountMeta::new_readonly(id0, false)]),
@@ -710,8 +710,8 @@ mod tests {
#[test]
fn test_program_position() {
let program_id0 = Pubkey::default();
let program_id1 = Pubkey::new_rand();
let id = Pubkey::new_rand();
let program_id1 = solana_sdk::pubkey::new_rand();
let id = solana_sdk::pubkey::new_rand();
let message = Message::new(
&[
Instruction::new(program_id0, &0, vec![AccountMeta::new(id, false)]),
@@ -726,12 +726,12 @@ mod tests {
#[test]
fn test_is_writable() {
let key0 = Pubkey::new_rand();
let key1 = Pubkey::new_rand();
let key2 = Pubkey::new_rand();
let key3 = Pubkey::new_rand();
let key4 = Pubkey::new_rand();
let key5 = Pubkey::new_rand();
let key0 = solana_sdk::pubkey::new_rand();
let key1 = solana_sdk::pubkey::new_rand();
let key2 = solana_sdk::pubkey::new_rand();
let key3 = solana_sdk::pubkey::new_rand();
let key4 = solana_sdk::pubkey::new_rand();
let key5 = solana_sdk::pubkey::new_rand();
let message = Message {
header: MessageHeader {
@@ -754,10 +754,10 @@ mod tests {
#[test]
fn test_get_account_keys_by_lock_type() {
let program_id = Pubkey::default();
let id0 = Pubkey::new_rand();
let id1 = Pubkey::new_rand();
let id2 = Pubkey::new_rand();
let id3 = Pubkey::new_rand();
let id0 = solana_sdk::pubkey::new_rand();
let id1 = solana_sdk::pubkey::new_rand();
let id2 = solana_sdk::pubkey::new_rand();
let id3 = solana_sdk::pubkey::new_rand();
let message = Message::new(
&[
Instruction::new(program_id, &0, vec![AccountMeta::new(id0, false)]),
@@ -776,12 +776,12 @@ mod tests {
#[test]
fn test_decompile_instructions() {
solana_logger::setup();
let program_id0 = Pubkey::new_rand();
let program_id1 = Pubkey::new_rand();
let id0 = Pubkey::new_rand();
let id1 = Pubkey::new_rand();
let id2 = Pubkey::new_rand();
let id3 = Pubkey::new_rand();
let program_id0 = solana_sdk::pubkey::new_rand();
let program_id1 = solana_sdk::pubkey::new_rand();
let id0 = solana_sdk::pubkey::new_rand();
let id1 = solana_sdk::pubkey::new_rand();
let id2 = solana_sdk::pubkey::new_rand();
let id3 = solana_sdk::pubkey::new_rand();
let instructions = vec![
Instruction::new(program_id0, &0, vec![AccountMeta::new(id0, false)]),
Instruction::new(program_id0, &0, vec![AccountMeta::new(id1, true)]),

View File

@@ -175,7 +175,7 @@ pub fn with_test_keyed_account<F>(lamports: u64, signer: bool, f: F)
where
F: Fn(&KeyedAccount),
{
let pubkey = Pubkey::new_rand();
let pubkey = solana_sdk::pubkey::new_rand();
let account = create_account(lamports);
let keyed_account = KeyedAccount::new(&pubkey, signer, &account);
f(&keyed_account)

View File

@@ -67,6 +67,12 @@ impl FromStr for Pubkey {
}
}
/// New random Pubkey for tests and benchmarks.
#[cfg(feature = "everything")]
pub fn new_rand() -> Pubkey {
Pubkey::new(&rand::random::<[u8; 32]>())
}
impl Pubkey {
pub fn new(pubkey_vec: &[u8]) -> Self {
Self(
@@ -188,9 +194,11 @@ impl Pubkey {
panic!("Unable to find a viable program address bump seed");
}
#[cfg(feature = "everything")]
#[cfg(all(feature = "everything", not(target_arch = "bpf")))]
#[deprecated(since = "1.3.9", note = "Please use 'pubkey::new_rand' instead")]
pub fn new_rand() -> Self {
Self::new(&rand::random::<[u8; 32]>())
// Consider removing Pubkey::new_rand() entirely in the v1.5 or v1.6 timeframe
new_rand()
}
pub fn to_bytes(self) -> [u8; 32] {
@@ -260,7 +268,7 @@ mod tests {
#[test]
fn pubkey_fromstr() {
let pubkey = Pubkey::new_rand();
let pubkey = solana_sdk::pubkey::new_rand();
let mut pubkey_base58_str = bs58::encode(pubkey.0).into_string();
assert_eq!(pubkey_base58_str.parse::<Pubkey>(), Ok(pubkey));
@@ -293,43 +301,53 @@ mod tests {
#[test]
fn test_create_with_seed() {
assert!(Pubkey::create_with_seed(&Pubkey::new_rand(), "", &Pubkey::new_rand()).is_ok());
assert!(Pubkey::create_with_seed(
&solana_sdk::pubkey::new_rand(),
"",
&solana_sdk::pubkey::new_rand()
)
.is_ok());
assert_eq!(
Pubkey::create_with_seed(
&Pubkey::new_rand(),
&solana_sdk::pubkey::new_rand(),
from_utf8(&[127; MAX_SEED_LEN + 1]).unwrap(),
&Pubkey::new_rand()
&solana_sdk::pubkey::new_rand()
),
Err(PubkeyError::MaxSeedLengthExceeded)
);
assert!(Pubkey::create_with_seed(
&Pubkey::new_rand(),
&solana_sdk::pubkey::new_rand(),
"\
\u{10FFFF}\u{10FFFF}\u{10FFFF}\u{10FFFF}\u{10FFFF}\u{10FFFF}\u{10FFFF}\u{10FFFF}\
",
&Pubkey::new_rand()
&solana_sdk::pubkey::new_rand()
)
.is_ok());
// utf-8 abuse ;)
assert_eq!(
Pubkey::create_with_seed(
&Pubkey::new_rand(),
&solana_sdk::pubkey::new_rand(),
"\
x\u{10FFFF}\u{10FFFF}\u{10FFFF}\u{10FFFF}\u{10FFFF}\u{10FFFF}\u{10FFFF}\u{10FFFF}\
",
&Pubkey::new_rand()
&solana_sdk::pubkey::new_rand()
),
Err(PubkeyError::MaxSeedLengthExceeded)
);
assert!(Pubkey::create_with_seed(
&Pubkey::new_rand(),
&solana_sdk::pubkey::new_rand(),
std::str::from_utf8(&[0; MAX_SEED_LEN]).unwrap(),
&Pubkey::new_rand(),
&solana_sdk::pubkey::new_rand(),
)
.is_ok());
assert!(Pubkey::create_with_seed(&Pubkey::new_rand(), "", &Pubkey::new_rand(),).is_ok());
assert!(Pubkey::create_with_seed(
&solana_sdk::pubkey::new_rand(),
"",
&solana_sdk::pubkey::new_rand(),
)
.is_ok());
assert_eq!(
Pubkey::create_with_seed(
@@ -395,7 +413,7 @@ mod tests {
// addresses must land off the curve and be unique
let mut addresses = vec![];
for _ in 0..1_000 {
let program_id = Pubkey::new_rand();
let program_id = solana_sdk::pubkey::new_rand();
let bytes1 = rand::random::<[u8; 10]>();
let bytes2 = rand::random::<[u8; 32]>();
if let Ok(program_address) =
@@ -416,7 +434,7 @@ mod tests {
#[test]
fn test_find_program_address() {
for _ in 0..1_000 {
let program_id = Pubkey::new_rand();
let program_id = solana_sdk::pubkey::new_rand();
let (address, bump_seed) =
Pubkey::find_program_address(&[b"Lil'", b"Bits"], &program_id);
assert_eq!(
@@ -430,7 +448,7 @@ mod tests {
#[test]
fn test_read_write_pubkey() -> Result<(), Box<dyn std::error::Error>> {
let filename = "test_pubkey.json";
let pubkey = Pubkey::new_rand();
let pubkey = solana_sdk::pubkey::new_rand();
write_pubkey_file(filename, pubkey)?;
let read = read_pubkey_file(filename)?;
assert_eq!(read, pubkey);

View File

@@ -47,10 +47,10 @@ pub mod tests {
let slot = 5;
let slot_duration = Duration::from_millis(400);
let expected_offset = (slot * slot_duration).as_secs();
let pubkey0 = Pubkey::new_rand();
let pubkey1 = Pubkey::new_rand();
let pubkey2 = Pubkey::new_rand();
let pubkey3 = Pubkey::new_rand();
let pubkey0 = solana_sdk::pubkey::new_rand();
let pubkey1 = solana_sdk::pubkey::new_rand();
let pubkey2 = solana_sdk::pubkey::new_rand();
let pubkey3 = solana_sdk::pubkey::new_rand();
let unique_timestamps: HashMap<Pubkey, (Slot, UnixTimestamp)> = [
(pubkey0, (0, recent_timestamp)),
(pubkey1, (0, recent_timestamp)),

View File

@@ -491,9 +491,9 @@ mod tests {
#[test]
fn test_move_many() {
let alice_pubkey = Pubkey::new_rand();
let bob_pubkey = Pubkey::new_rand();
let carol_pubkey = Pubkey::new_rand();
let alice_pubkey = solana_sdk::pubkey::new_rand();
let bob_pubkey = solana_sdk::pubkey::new_rand();
let carol_pubkey = solana_sdk::pubkey::new_rand();
let to_lamports = vec![(bob_pubkey, 1), (carol_pubkey, 2)];
let instructions = transfer_many(&alice_pubkey, &to_lamports);
@@ -504,8 +504,8 @@ mod tests {
#[test]
fn test_create_nonce_account() {
let from_pubkey = Pubkey::new_rand();
let nonce_pubkey = Pubkey::new_rand();
let from_pubkey = solana_sdk::pubkey::new_rand();
let nonce_pubkey = solana_sdk::pubkey::new_rand();
let authorized = nonce_pubkey;
let ixs = create_nonce_account(&from_pubkey, &nonce_pubkey, &authorized, 42);
assert_eq!(ixs.len(), 2);

View File

@@ -444,10 +444,10 @@ mod tests {
#[test]
fn test_refs() {
let key = Keypair::new();
let key1 = Pubkey::new_rand();
let key2 = Pubkey::new_rand();
let prog1 = Pubkey::new_rand();
let prog2 = Pubkey::new_rand();
let key1 = solana_sdk::pubkey::new_rand();
let key2 = solana_sdk::pubkey::new_rand();
let prog1 = solana_sdk::pubkey::new_rand();
let prog2 = solana_sdk::pubkey::new_rand();
let instructions = vec![
CompiledInstruction::new(3, &(), vec![0, 1]),
CompiledInstruction::new(4, &(), vec![0, 2]),
@@ -514,7 +514,7 @@ mod tests {
fn test_sanitize_txs() {
let key = Keypair::new();
let id0 = Pubkey::default();
let program_id = Pubkey::new_rand();
let program_id = solana_sdk::pubkey::new_rand();
let ix = Instruction::new(
program_id,
&0,
@@ -610,7 +610,7 @@ mod tests {
fn test_transaction_minimum_serialized_size() {
let alice_keypair = Keypair::new();
let alice_pubkey = alice_keypair.pubkey();
let bob_pubkey = Pubkey::new_rand();
let bob_pubkey = solana_sdk::pubkey::new_rand();
let ix = system_instruction::transfer(&alice_pubkey, &bob_pubkey, 42);
let expected_data_size = size_of::<u32>() + size_of::<u64>();
@@ -688,7 +688,7 @@ mod tests {
#[should_panic]
fn test_partial_sign_mismatched_key() {
let keypair = Keypair::new();
let fee_payer = Pubkey::new_rand();
let fee_payer = solana_sdk::pubkey::new_rand();
let ix = Instruction::new(
Pubkey::default(),
&0,
@@ -770,7 +770,7 @@ mod tests {
let program_id = Pubkey::default();
let keypair0 = Keypair::new();
let id0 = keypair0.pubkey();
let id1 = Pubkey::new_rand();
let id1 = solana_sdk::pubkey::new_rand();
let ix = Instruction::new(
program_id,
&0,
@@ -821,7 +821,7 @@ mod tests {
assert_eq!(tx.signatures[1], presigner_sig);
// Wrong key should error, not panic
let another_pubkey = Pubkey::new_rand();
let another_pubkey = solana_sdk::pubkey::new_rand();
let ix = Instruction::new(
program_id,
&0,