Skip to content

Commit 87e9975

Browse files
authored
removes dependency on byteorder crate (anza-xyz#4561)
Numeric types already implement fn from_{le,be}_bytes(bytes: [u8; N]) -> Self fn to_{le,be}_bytes(&self) -> [u8; N] and an external dependencies is superfluous.
1 parent 5144d71 commit 87e9975

File tree

15 files changed

+25
-67
lines changed

15 files changed

+25
-67
lines changed

Cargo.lock

-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,6 @@ byte-unit = "4.0.19"
294294
bytecount = "0.6.8"
295295
bytemuck = "1.21.0"
296296
bytemuck_derive = "1.8.1"
297-
byteorder = "1.5.0"
298297
bytes = "1.9"
299298
bzip2 = "0.4.4"
300299
caps = "0.5.5"

faucet/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ edition = { workspace = true }
1111

1212
[dependencies]
1313
bincode = { workspace = true }
14-
byteorder = { workspace = true }
1514
clap = { workspace = true }
1615
crossbeam-channel = { workspace = true }
1716
log = { workspace = true }

faucet/src/faucet.rs

+4-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
77
use {
88
bincode::{deserialize, serialize, serialized_size},
9-
byteorder::{ByteOrder, LittleEndian},
109
crossbeam_channel::{unbounded, Sender},
1110
log::*,
1211
serde_derive::{Deserialize, Serialize},
@@ -252,8 +251,8 @@ impl Faucet {
252251
};
253252
let response_vec = bincode::serialize(&tx)?;
254253

255-
let mut response_vec_with_length = vec![0; 2];
256-
LittleEndian::write_u16(&mut response_vec_with_length, response_vec.len() as u16);
254+
let mut response_vec_with_length =
255+
(response_vec.len() as u16).to_le_bytes().to_vec();
257256
response_vec_with_length.extend_from_slice(&response_vec);
258257

259258
Ok(response_vec_with_length)
@@ -302,7 +301,7 @@ pub fn request_airdrop_transaction(
302301
);
303302
err
304303
})?;
305-
let transaction_length = LittleEndian::read_u16(&buffer) as usize;
304+
let transaction_length = u16::from_le_bytes(buffer) as usize;
306305
if transaction_length > PACKET_DATA_SIZE {
307306
return Err(FaucetError::TransactionDataTooLarge(transaction_length));
308307
} else if transaction_length == 0 {
@@ -663,8 +662,7 @@ mod tests {
663662
let message = Message::new(&[expected_instruction], Some(&keypair.pubkey()));
664663
let expected_tx = Transaction::new(&[&keypair], message, blockhash);
665664
let expected_bytes = serialize(&expected_tx).unwrap();
666-
let mut expected_vec_with_length = vec![0; 2];
667-
LittleEndian::write_u16(&mut expected_vec_with_length, expected_bytes.len() as u16);
665+
let mut expected_vec_with_length = (expected_bytes.len() as u16).to_le_bytes().to_vec();
668666
expected_vec_with_length.extend_from_slice(&expected_bytes);
669667

670668
let mut faucet = Faucet::new(keypair, None, None, None);

programs/bpf_loader/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ edition = { workspace = true }
1111

1212
[dependencies]
1313
bincode = { workspace = true }
14-
byteorder = { workspace = true }
1514
libsecp256k1 = { workspace = true }
1615
qualifier_attr = { workspace = true }
1716
scopeguard = { workspace = true }

programs/bpf_loader/src/serialization.rs

+18-16
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#![allow(clippy::arithmetic_side_effects)]
22

33
use {
4-
byteorder::{ByteOrder, LittleEndian},
54
solana_instruction::error::InstructionError,
65
solana_program_entrypoint::{BPF_ALIGN_OF_U128, MAX_PERMITTED_DATA_INCREASE, NON_DUP_MARKER},
76
solana_program_runtime::invoke_context::SerializedAccountMetadata,
@@ -379,11 +378,12 @@ fn deserialize_parameters_unaligned<I: IntoIterator<Item = usize>>(
379378
start += size_of::<u8>(); // is_signer
380379
start += size_of::<u8>(); // is_writable
381380
start += size_of::<Pubkey>(); // key
382-
let lamports = LittleEndian::read_u64(
383-
buffer
384-
.get(start..)
385-
.ok_or(InstructionError::InvalidArgument)?,
386-
);
381+
let lamports = buffer
382+
.get(start..start.saturating_add(8))
383+
.map(<[u8; 8]>::try_from)
384+
.and_then(Result::ok)
385+
.map(u64::from_le_bytes)
386+
.ok_or(InstructionError::InvalidArgument)?;
387387
if borrowed_account.get_lamports() != lamports {
388388
borrowed_account.set_lamports(lamports)?;
389389
}
@@ -527,20 +527,22 @@ fn deserialize_parameters_aligned<I: IntoIterator<Item = usize>>(
527527
.get(start..start + size_of::<Pubkey>())
528528
.ok_or(InstructionError::InvalidArgument)?;
529529
start += size_of::<Pubkey>(); // owner
530-
let lamports = LittleEndian::read_u64(
531-
buffer
532-
.get(start..)
533-
.ok_or(InstructionError::InvalidArgument)?,
534-
);
530+
let lamports = buffer
531+
.get(start..start.saturating_add(8))
532+
.map(<[u8; 8]>::try_from)
533+
.and_then(Result::ok)
534+
.map(u64::from_le_bytes)
535+
.ok_or(InstructionError::InvalidArgument)?;
535536
if borrowed_account.get_lamports() != lamports {
536537
borrowed_account.set_lamports(lamports)?;
537538
}
538539
start += size_of::<u64>(); // lamports
539-
let post_len = LittleEndian::read_u64(
540-
buffer
541-
.get(start..)
542-
.ok_or(InstructionError::InvalidArgument)?,
543-
) as usize;
540+
let post_len = buffer
541+
.get(start..start.saturating_add(8))
542+
.map(<[u8; 8]>::try_from)
543+
.and_then(Result::ok)
544+
.map(u64::from_le_bytes)
545+
.ok_or(InstructionError::InvalidArgument)? as usize;
544546
start += size_of::<u64>(); // data length
545547
if post_len.saturating_sub(pre_len) > MAX_PERMITTED_DATA_INCREASE
546548
|| post_len > MAX_PERMITTED_DATA_LENGTH as usize

programs/sbf/Cargo.lock

-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

runtime/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ bincode = { workspace = true }
1818
blake3 = { workspace = true }
1919
bv = { workspace = true, features = ["serde"] }
2020
bytemuck = { workspace = true }
21-
byteorder = { workspace = true }
2221
bzip2 = { workspace = true }
2322
crossbeam-channel = { workspace = true }
2423
dashmap = { workspace = true, features = ["rayon", "raw-api"] }

sdk/Cargo.toml

-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ default = [
2121
"full", # functionality that is not compatible or needed for on-chain programs
2222
]
2323
full = [
24-
"byteorder",
2524
"rand",
2625
"rand0-7",
2726
"serde_json",
@@ -98,7 +97,6 @@ borsh = { workspace = true, optional = true }
9897
bs58 = { workspace = true }
9998
bytemuck = { workspace = true }
10099
bytemuck_derive = { workspace = true }
101-
byteorder = { workspace = true, optional = true }
102100
curve25519-dalek = { workspace = true, optional = true }
103101
digest = { workspace = true, optional = true }
104102
ed25519-dalek = { workspace = true, optional = true }

sdk/hard-forks/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ license = { workspace = true }
1010
edition = { workspace = true }
1111

1212
[dependencies]
13-
byteorder = { workspace = true }
1413
serde = { workspace = true, optional = true }
1514
serde_derive = { workspace = true, optional = true }
1615
solana-frozen-abi = { workspace = true, optional = true, features = ["frozen-abi"] }

sdk/hard-forks/src/lib.rs

+1-9
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
44
#![cfg_attr(feature = "frozen-abi", feature(min_specialization))]
55

6-
use byteorder::{ByteOrder, LittleEndian};
7-
86
#[cfg_attr(feature = "frozen-abi", derive(solana_frozen_abi_macro::AbiExample))]
97
#[cfg_attr(
108
feature = "serde",
@@ -57,13 +55,7 @@ impl HardForks {
5755
})
5856
.sum();
5957

60-
if fork_count > 0 {
61-
let mut buf = [0u8; 8];
62-
LittleEndian::write_u64(&mut buf[..], fork_count as u64);
63-
Some(buf)
64-
} else {
65-
None
66-
}
58+
(fork_count > 0).then(|| (fork_count as u64).to_le_bytes())
6759
}
6860
}
6961

sdk/shred-version/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ license = { workspace = true }
1010
edition = { workspace = true }
1111

1212
[dependencies]
13-
byteorder = { workspace = true }
1413
solana-hard-forks = { workspace = true }
1514
solana-hash = { workspace = true }
1615
solana-sha256-hasher = { workspace = true }

sdk/shred-version/src/lib.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,10 @@ pub fn version_from_hash(hash: &Hash) -> u16 {
2323
}
2424

2525
pub fn compute_shred_version(genesis_hash: &Hash, hard_forks: Option<&HardForks>) -> u16 {
26-
use byteorder::{ByteOrder, LittleEndian};
27-
2826
let mut hash = *genesis_hash;
2927
if let Some(hard_forks) = hard_forks {
30-
for (slot, count) in hard_forks.iter() {
31-
let mut buf = [0u8; 16];
32-
LittleEndian::write_u64(&mut buf[..8], *slot);
33-
LittleEndian::write_u64(&mut buf[8..], *count as u64);
28+
for &(slot, count) in hard_forks.iter() {
29+
let buf = [slot.to_le_bytes(), (count as u64).to_le_bytes()].concat();
3430
hash = extend_and_hash(&hash, &buf);
3531
}
3632
}

svm/examples/Cargo.lock

-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

zk-token-sdk/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ tiny-bip39 = { workspace = true }
2828
[target.'cfg(not(target_os = "solana"))'.dependencies]
2929
aes-gcm-siv = { workspace = true }
3030
bincode = { workspace = true }
31-
byteorder = { workspace = true }
3231
curve25519-dalek = { workspace = true, features = ["serde"] }
3332
itertools = { workspace = true }
3433
lazy_static = { workspace = true }

0 commit comments

Comments
 (0)