Skip to content

Commit 04b5f26

Browse files
committed
Added Moar Tests
1 parent 3e78411 commit 04b5f26

File tree

1 file changed

+88
-6
lines changed

1 file changed

+88
-6
lines changed

beacon_node/execution_layer/src/engine_api/new_payload_request.rs

Lines changed: 88 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -179,18 +179,100 @@ impl<'a, E: EthSpec> TryFrom<ExecutionPayloadRef<'a, E>> for NewPayloadRequest<'
179179

180180
#[cfg(test)]
181181
mod test {
182-
use crate::NewPayloadRequest;
183-
use types::{BeaconBlock, MainnetEthSpec};
182+
use crate::versioned_hashes::Error as VersionedHashError;
183+
use crate::{Error, NewPayloadRequest};
184+
use state_processing::per_block_processing::deneb::kzg_commitment_to_versioned_hash;
185+
use types::{BeaconBlock, ExecPayload, ExecutionBlockHash, Hash256, MainnetEthSpec};
184186

185187
#[test]
186-
fn test_optimistic_sync_verifications() {
188+
fn test_optimistic_sync_verifications_valid_block() {
187189
let beacon_block = get_valid_beacon_block();
188190
let new_payload_request = NewPayloadRequest::try_from(beacon_block.to_ref())
189191
.expect("should create new payload request");
190192

191-
assert!(new_payload_request
192-
.perform_optimistic_sync_verifications()
193-
.is_ok());
193+
assert!(
194+
new_payload_request
195+
.perform_optimistic_sync_verifications()
196+
.is_ok(),
197+
"validations should pass"
198+
);
199+
}
200+
201+
#[test]
202+
fn test_optimistic_sync_verifications_bad_block_hash() {
203+
let mut beacon_block = get_valid_beacon_block();
204+
let correct_block_hash = beacon_block
205+
.body()
206+
.execution_payload()
207+
.expect("should get payload")
208+
.block_hash();
209+
let invalid_block_hash = ExecutionBlockHash(Hash256::repeat_byte(0x42));
210+
211+
// now mutate the block hash
212+
beacon_block
213+
.body_mut()
214+
.execution_payload_deneb_mut()
215+
.expect("should get payload")
216+
.execution_payload
217+
.block_hash = invalid_block_hash;
218+
219+
let new_payload_request = NewPayloadRequest::try_from(beacon_block.to_ref())
220+
.expect("should create new payload request");
221+
let verification_result = new_payload_request.perform_optimistic_sync_verifications();
222+
println!("verification_result: {:?}", verification_result);
223+
let got_expected_result = match verification_result {
224+
Err(Error::BlockHashMismatch {
225+
computed, payload, ..
226+
}) => computed == correct_block_hash && payload == invalid_block_hash,
227+
_ => false,
228+
};
229+
assert!(got_expected_result, "should return expected error");
230+
}
231+
232+
#[test]
233+
fn test_optimistic_sync_verifications_bad_versioned_hashes() {
234+
let mut beacon_block = get_valid_beacon_block();
235+
236+
let mut commitments: Vec<_> = beacon_block
237+
.body()
238+
.blob_kzg_commitments()
239+
.expect("should get commitments")
240+
.clone()
241+
.into();
242+
243+
let correct_versioned_hash = kzg_commitment_to_versioned_hash(
244+
commitments.last().expect("should get last commitment"),
245+
);
246+
247+
// mutate the last commitment
248+
commitments
249+
.last_mut()
250+
.expect("should get last commitment")
251+
.0[0] = 0x42;
252+
253+
// calculate versioned hash from mutated commitment
254+
let bad_versioned_hash = kzg_commitment_to_versioned_hash(
255+
commitments.last().expect("should get last commitment"),
256+
);
257+
258+
*beacon_block
259+
.body_mut()
260+
.blob_kzg_commitments_mut()
261+
.expect("should get commitments") = commitments.into();
262+
263+
let new_payload_request = NewPayloadRequest::try_from(beacon_block.to_ref())
264+
.expect("should create new payload request");
265+
let verification_result = new_payload_request.perform_optimistic_sync_verifications();
266+
println!("verification_result: {:?}", verification_result);
267+
268+
let got_expected_result = match verification_result {
269+
Err(Error::VerifyingVersionedHashes(VersionedHashError::VersionHashMismatch {
270+
expected,
271+
found,
272+
})) => expected == bad_versioned_hash && found == correct_versioned_hash,
273+
_ => false,
274+
};
275+
assert!(got_expected_result, "should return expected error");
194276
}
195277

196278
fn get_valid_beacon_block() -> BeaconBlock<MainnetEthSpec> {

0 commit comments

Comments
 (0)