Skip to content

Commit 37f4bd9

Browse files
author
Naohiro Yoshida
committed
check pascal timestamp
Signed-off-by: Naohiro Yoshida <naohiro.yoshida@datachain.jp>
1 parent e1a5feb commit 37f4bd9

File tree

5 files changed

+52
-7
lines changed

5 files changed

+52
-7
lines changed

.github/workflows/ci.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,10 @@ jobs:
4949
env:
5050
MINIMUM_TIMESTAMP_SUPPORTED: 1731495592
5151
MINIMUM_HEIGHT_SUPPORTED: 100
52+
- uses: actions-rs/cargo@v1
53+
name: unit-test-dev-test-pascal
54+
with:
55+
command: test
56+
args: --release --features=dev --manifest-path light-client/Cargo.toml --lib test::dev_test_pascal
57+
env:
58+
PASCAL_TIMESTAMP: 1

light-client/build.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,14 @@ fn main() {
2020
std::env::var("MINIMUM_TIMESTAMP_SUPPORTED").unwrap_or_else(|_| "0".to_string());
2121
let minimum_height_supported =
2222
std::env::var("MINIMUM_HEIGHT_SUPPORTED").unwrap_or_else(|_| "0".to_string());
23+
let pascal_timestamp =
24+
std::env::var("PASCAL_TIMESTAMP").unwrap_or_else(|_| "0".to_string());
2325
writeln!(
2426
file,
25-
"pub const MINIMUM_TIMESTAMP_SUPPORTED: u64 = {};\npub const MINIMUM_HEIGHT_SUPPORTED: u64 = {};",
27+
"pub const MINIMUM_TIMESTAMP_SUPPORTED: u64 = {};\npub const MINIMUM_HEIGHT_SUPPORTED: u64 = {};\npub const PASCAL_TIMESTAMP: u64 = {};",
2628
minimum_time_stamp_supported,
27-
minimum_height_supported
29+
minimum_height_supported,
30+
pascal_timestamp
2831
)
2932
.unwrap();
3033
}

light-client/src/errors.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ pub enum Error {
9898
UnexpectedUntrustedValidatorsHashInEpoch(Height, Height, Hash, Hash),
9999
UnexpectedCurrentValidatorsHashInEpoch(Height, Height, Hash, Hash),
100100
UnexpectedUntrustedValidators(BlockNumber, BlockNumber),
101+
MissingRequestsHash(BlockNumber),
101102

102103
// Vote attestation
103104
UnexpectedTooManyHeadersToFinalize(BlockNumber, usize),
@@ -384,6 +385,9 @@ impl core::fmt::Display for Error {
384385
Error::UnexpectedRevisionHeight(e1) => {
385386
write!(f, "UnexpectedRevisionHeight : {}", e1)
386387
}
388+
Error::MissingRequestsHash(e1) => {
389+
write!(f, "MissingRequestsHash : {}", e1)
390+
}
387391
}
388392
}
389393
}

light-client/src/header/eth_header.rs

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use parlia_ibc_proto::ibc::lightclients::parlia::v1::EthHeader as RawETHHeader;
1111

1212
use crate::errors::Error;
1313
use crate::header::epoch::Epoch;
14-
14+
use crate::header::hardfork::PASCAL_TIMESTAMP;
1515
use crate::header::vote_attestation::VoteAttestation;
1616
use crate::misc::{Address, BlockNumber, ChainId, Hash, RlpIterator, Validators};
1717

@@ -431,6 +431,10 @@ impl TryFrom<RawETHHeader> for ETHHeader {
431431
None
432432
};
433433

434+
if PASCAL_TIMESTAMP > 0 && timestamp >= PASCAL_TIMESTAMP && requests_hash.is_none() {
435+
return Err(Error::MissingRequestsHash(number));
436+
}
437+
434438
Ok(Self {
435439
parent_hash,
436440
uncle_hash,
@@ -470,10 +474,9 @@ pub(crate) mod test {
470474
use rlp::RlpStream;
471475
use rstest::*;
472476

473-
use crate::fixture::localnet::Localnet;
474477
use crate::fixture::{decode_header, localnet, Network};
475478
use crate::header::epoch::Epoch;
476-
use crate::misc::ChainId;
479+
477480
use alloc::boxed::Box;
478481
use hex_literal::hex;
479482
use parlia_ibc_proto::ibc::lightclients::parlia::v1::EthHeader as RawETHHeader;
@@ -832,4 +835,31 @@ pub(crate) mod test {
832835
assert!(&header.requests_hash.is_some());
833836
assert_eq!(32, header.requests_hash.unwrap().len());
834837
}
838+
839+
#[cfg(feature = "dev")]
840+
mod dev_test_pascal {
841+
use crate::errors::Error;
842+
use crate::fixture::{decode_header, localnet};
843+
use crate::header::eth_header::ETHHeader;
844+
use hex_literal::hex;
845+
use parlia_ibc_proto::ibc::lightclients::parlia::v1::EthHeader;
846+
847+
#[test]
848+
fn test_error_missing_request_hash() {
849+
// number = 401
850+
let raw_header = localnet().epoch_header_plus_1_rlp();
851+
let raw_header = EthHeader { header: raw_header };
852+
let result = ETHHeader::try_from(raw_header).unwrap_err();
853+
match result {
854+
Error::MissingRequestsHash(_) => {}
855+
_ => unreachable!(),
856+
}
857+
}
858+
859+
#[test]
860+
fn test_success_after_bep466() {
861+
let header = hex!("f90370a04a99d244666a287d9aaa1a81aa5bba573f156865369023eaa53a4ba8bb303ad1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e04db2de85453e0936b441c339a26d10cfa71b50a0d0a25a7c6b93d5d2e8f7e2075d2886fa62840f31c127b880b7cd503e2d364163a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000282071b8402625a008084678f4827b90111d883010503846765746888676f312e32332e35856c696e75780000002f5b9772f8ae0fb860959e5c417ecd8a5e5ddabd85485cf2cc4433f26beea076d77bbc6f461e4129881b8772bdae5fdd6ca927b571662ac5750d4abeca4f44a4406ab3254e0d98e6ee92b5b6396122853b45db2d18d24fb79e8397e253ca10a2a03b3b18e5961173b5f848820719a0e5ef3de482ecc3de5aea0efb17457d7edc5b1a39fc97c29cc5780b4665c9ca2082071aa04a99d244666a287d9aaa1a81aa5bba573f156865369023eaa53a4ba8bb303ad180aba9a203cbc9ac6e2eabbc44b15f7c526ec5f9d570a0addc005d5958d8415f760794e65762057ff9956dce68034d30cca6d9cc2ac3eb35f699d47c74931c470a01a0000000000000000000000000000000000000000000000000000000000000000088000000000000000080a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855").to_vec();
862+
decode_header(header);
863+
}
864+
}
835865
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1-
pub const MINIMUM_TIMESTAMP_SUPPORTED: u64 = 0;
2-
pub const MINIMUM_HEIGHT_SUPPORTED: u64 = 0;
1+
pub const MINIMUM_TIMESTAMP_SUPPORTED: u64 = 1731495592;
2+
pub const MINIMUM_HEIGHT_SUPPORTED: u64 = 100;
3+
pub const PASCAL_TIMESTAMP: u64 = 1;

0 commit comments

Comments
 (0)