Skip to content

Commit 7ff104b

Browse files
committed
cleaning up byte compression
1 parent 4656faf commit 7ff104b

File tree

1 file changed

+63
-54
lines changed

1 file changed

+63
-54
lines changed

target_chains/stylus/contracts/pyth-receiver/src/governance_structs.rs

Lines changed: 63 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
use crate::error::PythReceiverError;
2+
use crate::structs::DataSource;
13
use alloc::vec::Vec;
24
use stylus_sdk::alloy_primitives::{Address, FixedBytes, U16};
3-
use crate::structs::DataSource;
4-
use crate::error::PythReceiverError;
55

66
const MAGIC: u32 = 0x5054474d;
77
const MODULE_TARGET: u8 = 1;
@@ -98,12 +98,16 @@ pub fn parse_instruction(payload: Vec<u8>) -> Result<GovernanceInstruction, Pyth
9898

9999
let mut cursor = 0;
100100

101-
let magic = u32::from_be_bytes([
102-
payload[cursor],
103-
payload[cursor + 1],
104-
payload[cursor + 2],
105-
payload[cursor + 3],
106-
]);
101+
let magic_bytes = payload
102+
.get(cursor..cursor + 4)
103+
.ok_or(PythReceiverError::InvalidGovernanceMessage)?;
104+
105+
let magic = u32::from_be_bytes(
106+
magic_bytes
107+
.try_into()
108+
.map_err(|_| PythReceiverError::InvalidGovernanceMessage)?,
109+
);
110+
107111
cursor += 4;
108112

109113
if magic != MAGIC {
@@ -145,12 +149,16 @@ pub fn parse_instruction(payload: Vec<u8>) -> Result<GovernanceInstruction, Pyth
145149
if payload.len() < cursor + 4 {
146150
return Err(PythReceiverError::InvalidGovernanceMessage);
147151
}
148-
let governance_data_source_index = u32::from_be_bytes([
149-
payload[cursor],
150-
payload[cursor + 1],
151-
payload[cursor + 2],
152-
payload[cursor + 3],
153-
]);
152+
let governance_data_source_bytes = payload
153+
.get(cursor..cursor + 4)
154+
.ok_or(PythReceiverError::InvalidGovernanceMessage)?;
155+
156+
let governance_data_source_index = u32::from_be_bytes(
157+
governance_data_source_bytes
158+
.try_into()
159+
.map_err(|_| PythReceiverError::InvalidGovernanceMessage)?,
160+
);
161+
154162
cursor += 4;
155163
GovernancePayload::RequestGovernanceDataSourceTransfer(
156164
RequestGovernanceDataSourceTransfer {
@@ -188,58 +196,59 @@ pub fn parse_instruction(payload: Vec<u8>) -> Result<GovernanceInstruction, Pyth
188196
if payload.len() < cursor + 16 {
189197
return Err(PythReceiverError::InvalidGovernanceMessage);
190198
}
191-
let value = u64::from_be_bytes([
192-
payload[cursor],
193-
payload[cursor + 1],
194-
payload[cursor + 2],
195-
payload[cursor + 3],
196-
payload[cursor + 4],
197-
payload[cursor + 5],
198-
payload[cursor + 6],
199-
payload[cursor + 7],
200-
]);
199+
let fee_value_bytes = payload
200+
.get(cursor..cursor + 8)
201+
.ok_or(PythReceiverError::InvalidGovernanceMessage)?;
202+
203+
let value = u64::from_be_bytes(
204+
fee_value_bytes
205+
.try_into()
206+
.map_err(|_| PythReceiverError::InvalidGovernanceMessage)?,
207+
);
208+
201209
cursor += 8;
202-
let expo = u64::from_be_bytes([
203-
payload[cursor],
204-
payload[cursor + 1],
205-
payload[cursor + 2],
206-
payload[cursor + 3],
207-
payload[cursor + 4],
208-
payload[cursor + 5],
209-
payload[cursor + 6],
210-
payload[cursor + 7],
211-
]);
210+
211+
let expo_bytes = payload
212+
.get(cursor..cursor + 8)
213+
.ok_or(PythReceiverError::InvalidGovernanceMessage)?;
214+
let expo = u64::from_be_bytes(
215+
expo_bytes
216+
.try_into()
217+
.map_err(|_| PythReceiverError::InvalidGovernanceMessage)?,
218+
);
219+
212220
cursor += 8;
213221
GovernancePayload::SetFee(SetFee { value, expo })
214222
}
215223
GovernanceAction::SetFeeInToken => {
216224
if payload.len() < cursor + 17 {
217225
return Err(PythReceiverError::InvalidGovernanceMessage);
218226
}
219-
let value = u64::from_be_bytes([
220-
payload[cursor],
221-
payload[cursor + 1],
222-
payload[cursor + 2],
223-
payload[cursor + 3],
224-
payload[cursor + 4],
225-
payload[cursor + 5],
226-
payload[cursor + 6],
227-
payload[cursor + 7],
228-
]);
227+
228+
let fee_token_value = payload
229+
.get(cursor..cursor + 8)
230+
.ok_or(PythReceiverError::InvalidGovernanceMessage)?;
231+
232+
let value = u64::from_be_bytes(
233+
fee_token_value
234+
.try_into()
235+
.map_err(|_| PythReceiverError::InvalidGovernanceMessage)?,
236+
);
229237
cursor += 8;
230-
let expo = u64::from_be_bytes([
231-
payload[cursor],
232-
payload[cursor + 1],
233-
payload[cursor + 2],
234-
payload[cursor + 3],
235-
payload[cursor + 4],
236-
payload[cursor + 5],
237-
payload[cursor + 6],
238-
payload[cursor + 7],
239-
]);
238+
239+
let expo_bytes = payload
240+
.get(cursor..cursor + 8)
241+
.ok_or(PythReceiverError::InvalidGovernanceMessage)?;
242+
let expo = u64::from_be_bytes(
243+
expo_bytes
244+
.try_into()
245+
.map_err(|_| PythReceiverError::InvalidGovernanceMessage)?,
246+
);
240247
cursor += 8;
248+
241249
let token_len = payload[cursor];
242250
cursor += 1;
251+
243252
if token_len != 20 {
244253
return Err(PythReceiverError::InvalidGovernanceMessage);
245254
}

0 commit comments

Comments
 (0)