Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- name: Install components
run: |
rustup component add rustfmt clippy
cargo install cargo-machete
cargo install cargo-machete --version 0.8.0
- name: Check format
run: cargo fmt --all -- --check
- name: Check clippy
Expand Down
57 changes: 50 additions & 7 deletions light-client/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,7 @@ mod test {
use crate::l1::tests::get_l1_config;
use crate::misbehaviour::FaultDisputeGameConfig;
use alloc::collections::BTreeMap;
use alloc::format;
use alloc::string::{String, ToString};
use alloc::vec::Vec;
use alloy_primitives::{hex, B256};
Expand Down Expand Up @@ -447,12 +448,16 @@ mod test {
}
}
}
fn get_raw_initial_state() -> (Vec<u8>, Vec<u8>) {
// All the test parameters are created by optimism-ibc-relay-prover#prover_test.go#TestSetupHeadersForUpdate
let raw_cs = hex!("08e4ab8301121430346563383746363433353343344435433835331a201ee222554989dda120e26ecacf756fe1235cd8d726706b57517715dde4f0c900220310fa0632e0097b2267656e65736973223a7b226c31223a7b2268617368223a22307833323036646233326531363237623866323332383536653665653235323266343036346638333439333535666663376637333039363966313232303261613236222c226e756d626572223a31327d2c226c32223a7b2268617368223a22307839313834313637643634393239373632303463336436643361383730323566613834383934326161323663666435323632303034326635306433346366353464222c226e756d626572223a307d2c226c325f74696d65223a313735313433353737342c2273797374656d5f636f6e666967223a7b226261746368657241646472223a22307864336632633561666232643736663535373966333236623063643764613566356134313236633335222c226f76657268656164223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030222c227363616c6172223a22307830313030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303063356663353030303030353538222c226761734c696d6974223a36303030303030302c2265697031353539506172616d73223a22307830303030303030303030303030303030222c226f70657261746f72466565506172616d73223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030227d7d2c22626c6f636b5f74696d65223a322c226d61785f73657175656e6365725f6472696674223a3630302c227365715f77696e646f775f73697a65223a333630302c226368616e6e656c5f74696d656f7574223a3330302c226c315f636861696e5f6964223a333135313930382c226c325f636861696e5f6964223a323135313930382c227265676f6c6974685f74696d65223a302c2263616e796f6e5f74696d65223a302c2264656c74615f74696d65223a302c2265636f746f6e655f74696d65223a302c22666a6f72645f74696d65223a302c226772616e6974655f74696d65223a302c22686f6c6f63656e655f74696d65223a302c22697374686d75735f74696d65223a302c2262617463685f696e626f785f61646472657373223a22307830306134666534633661616130373239643736393963333837653766323831646436346166613261222c226465706f7369745f636f6e74726163745f61646472657373223a22307866343831373130613162653561366164393036656439656334643665386465353633326262323764222c226c315f73797374656d5f636f6e6669675f61646472657373223a22307864373736366162663339336132383132343835353335343130326134623865353561396164613035222c2270726f746f636f6c5f76657273696f6e735f61646472657373223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030222c22636861696e5f6f705f636f6e666967223a7b2265697031353539456c6173746963697479223a362c226569703135353944656e6f6d696e61746f72223a35302c226569703135353944656e6f6d696e61746f7243616e796f6e223a3235307d7d3ab3010a20d61ea484febacfae5298d52a2b581f3e305a51f3112a9241b968dccf019f7b11100118b69393c306226f0a0410000038120e0a04200000381a0608691036183712140a04300000381a0c08691036183720192812301612140a04400000381a0c08691036183720192812301612140a04500000381a0c08691036183720192822302612150a04600000381a0d08a901105618572019282230262806300838084204080210034a040880a305520410c0843d421c0a1400000000000000000000000000000000000000001067200f2818");
let raw_cons_state = hex!("0a20000000000000000000000000000000000000000000000000000000000000000010f2a193c3061a2022c0a7b70704f4b53ad38209d3bd6b65acee53b2a3bb09a41a6f94055d13ccd52080022a30b4d15930c89d177627d58c0beae3d8ba6d8b373a9d3bb83dbd9b2eb174b00b7d2debeaf52c4ebe1ac79c4f87c5ae87e13230b87c99df253587f882502475ba00541d608e5bc82c6a488f70ab56c43dbf25ae60e264b77715ffc664ebc4bfa1ba2fc938b69f93c30640b002");
(raw_cs.into(), raw_cons_state.into())
}

fn get_initial_state() -> (ClientState, ConsensusState) {
// All the test parameters are created by optimism-ibc-relay-prover#prover_test.go#TestSetupHeadersForUpdateShort
let raw_cs = hex!("08e4ab8301121430346563383746363433353343344435433835331a201ee222554989dda120e26ecacf756fe1235cd8d726706b57517715dde4f0c900220310fa0632e0097b2267656e65736973223a7b226c31223a7b2268617368223a22307833323036646233326531363237623866323332383536653665653235323266343036346638333439333535666663376637333039363966313232303261613236222c226e756d626572223a31327d2c226c32223a7b2268617368223a22307839313834313637643634393239373632303463336436643361383730323566613834383934326161323663666435323632303034326635306433346366353464222c226e756d626572223a307d2c226c325f74696d65223a313735313433353737342c2273797374656d5f636f6e666967223a7b226261746368657241646472223a22307864336632633561666232643736663535373966333236623063643764613566356134313236633335222c226f76657268656164223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030222c227363616c6172223a22307830313030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303063356663353030303030353538222c226761734c696d6974223a36303030303030302c2265697031353539506172616d73223a22307830303030303030303030303030303030222c226f70657261746f72466565506172616d73223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030227d7d2c22626c6f636b5f74696d65223a322c226d61785f73657175656e6365725f6472696674223a3630302c227365715f77696e646f775f73697a65223a333630302c226368616e6e656c5f74696d656f7574223a3330302c226c315f636861696e5f6964223a333135313930382c226c325f636861696e5f6964223a323135313930382c227265676f6c6974685f74696d65223a302c2263616e796f6e5f74696d65223a302c2264656c74615f74696d65223a302c2265636f746f6e655f74696d65223a302c22666a6f72645f74696d65223a302c226772616e6974655f74696d65223a302c22686f6c6f63656e655f74696d65223a302c22697374686d75735f74696d65223a302c2262617463685f696e626f785f61646472657373223a22307830306134666534633661616130373239643736393963333837653766323831646436346166613261222c226465706f7369745f636f6e74726163745f61646472657373223a22307866343831373130613162653561366164393036656439656334643665386465353633326262323764222c226c315f73797374656d5f636f6e6669675f61646472657373223a22307864373736366162663339336132383132343835353335343130326134623865353561396164613035222c2270726f746f636f6c5f76657273696f6e735f61646472657373223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030222c22636861696e5f6f705f636f6e666967223a7b2265697031353539456c6173746963697479223a362c226569703135353944656e6f6d696e61746f72223a35302c226569703135353944656e6f6d696e61746f7243616e796f6e223a3235307d7d3ab3010a20d61ea484febacfae5298d52a2b581f3e305a51f3112a9241b968dccf019f7b11100118b69393c306226f0a0410000038120e0a04200000381a0608691036183712140a04300000381a0c08691036183720192812301612140a04400000381a0c08691036183720192812301612140a04500000381a0c08691036183720192822302612150a04600000381a0d08a901105618572019282230262806300838084204080210034a040880a305520410c0843d421c0a1400000000000000000000000000000000000000001067200f2818");
let (raw_cs, raw_cons_state) = get_raw_initial_state();
let raw_cs = RawClientState::decode(raw_cs.as_slice()).unwrap();
let raw_cons_state = hex!("0a20000000000000000000000000000000000000000000000000000000000000000010f2a193c3061a2022c0a7b70704f4b53ad38209d3bd6b65acee53b2a3bb09a41a6f94055d13ccd52080022a30b4d15930c89d177627d58c0beae3d8ba6d8b373a9d3bb83dbd9b2eb174b00b7d2debeaf52c4ebe1ac79c4f87c5ae87e13230b87c99df253587f882502475ba00541d608e5bc82c6a488f70ab56c43dbf25ae60e264b77715ffc664ebc4bfa1ba2fc938b69f93c30640b002");
let raw_cons_state = RawConsensusState::decode(raw_cons_state.as_slice()).unwrap();

let cs = ClientState::try_from(raw_cs).unwrap();
Expand Down Expand Up @@ -558,24 +563,62 @@ mod test {
);
}

/// trusted_to_deterministic = trusted(=deterministic)
/// deterministic_to_latest = any period + latest
#[test]
fn test_update_client_t_pl() {
let (raw_cs, raw_cons_state) = get_raw_initial_state();
test_update_client(1751437975, raw_cs, raw_cons_state, "t_pl");
}

/// trusted_to_deterministic = trusted + deterministic
/// deterministic_to_latest = latest
#[test]
fn test_update_client_trusted_td_l() {
// All the test parameters are created by optimism-ibc-relay-prover#prover_test.go#TestSetupHeadersForUpdate
test_update_client(
1755429633,
hex!("08e4ab8301121430346563383746363433353343344435433835331a201ee222554989dda120e26ecacf756fe1235cd8d726706b57517715dde4f0c900220310a92e32e0097b2267656e65736973223a7b226c31223a7b2268617368223a22307830633333396361663032383963323734626263373934393038303030663138623833343066373363663666323331613533633161643839343835663635346536222c226e756d626572223a31307d2c226c32223a7b2268617368223a22307865353237373766326136306432366131613939656261386662323738346638613230376433623338333838383034653538376633653935613034316262386534222c226e756d626572223a307d2c226c325f74696d65223a313735353431353736302c2273797374656d5f636f6e666967223a7b226261746368657241646472223a22307864336632633561666232643736663535373966333236623063643764613566356134313236633335222c226f76657268656164223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030222c227363616c6172223a22307830313030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303063356663353030303030353538222c226761734c696d6974223a36303030303030302c2265697031353539506172616d73223a22307830303030303030303030303030303030222c226f70657261746f72466565506172616d73223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030227d7d2c22626c6f636b5f74696d65223a322c226d61785f73657175656e6365725f6472696674223a3630302c227365715f77696e646f775f73697a65223a333630302c226368616e6e656c5f74696d656f7574223a3330302c226c315f636861696e5f6964223a333135313930382c226c325f636861696e5f6964223a323135313930382c227265676f6c6974685f74696d65223a302c2263616e796f6e5f74696d65223a302c2264656c74615f74696d65223a302c2265636f746f6e655f74696d65223a302c22666a6f72645f74696d65223a302c226772616e6974655f74696d65223a302c22686f6c6f63656e655f74696d65223a302c22697374686d75735f74696d65223a302c2262617463685f696e626f785f61646472657373223a22307830306134666534633661616130373239643736393963333837653766323831646436346166613261222c226465706f7369745f636f6e74726163745f61646472657373223a22307834363830396434653736666533613461376437646665386534626338396631343034346234623136222c226c315f73797374656d5f636f6e6669675f61646472657373223a22307863373932303165383438363838353137323961316663643866316161396162353064633036393335222c2270726f746f636f6c5f76657273696f6e735f61646472657373223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030222c22636861696e5f6f705f636f6e666967223a7b2265697031353539456c6173746963697479223a362c226569703135353944656e6f6d696e61746f72223a35302c226569703135353944656e6f6d696e61746f7243616e796f6e223a3235307d7d3ab3010a20d61ea484febacfae5298d52a2b581f3e305a51f3112a9241b968dccf019f7b11100118948986c506226f0a0410000038120e0a04200000381a0608691036183712140a04300000381a0c08691036183720192812301612140a04400000381a0c08691036183720192812301612140a04500000381a0c08691036183720192822302612150a04600000381a0d08a901105618572019282230262806300838084204080210034a040880a305520410c0843d421c0a1400000000000000000000000000000000000000001067200f2818").into(),
hex!("0a20000000000000000000000000000000000000000000000000000000000000000010a2e686c5061a202e42a8dbd395e1276ee2ff71c9e25535bfd4fbccba1d4923aa0e2b178e52436f20800f2a30945545a7968c93c743dad6ec355d5ed620ea15b9e9bbca10c97383e8e422beacf939393b76ee7143413f6c7d2a8e5bb8323095d295402443f24a68f46dcc19488fc26374786247a661ad1f42c0c94b87edb33bd6c96ad9aa25a02cdc2081c5520fda3894e386c50640bd0f").into(),
"td_l",
);
}

/// trusted_to_deterministic = trusted + deterministic
/// deterministic_to_latest = any period + latest
#[test]
fn test_update_client() {
fn test_update_client_trusted_td_pl() {
// All the test parameters are created by optimism-ibc-relay-prover#prover_test.go#TestSetupHeadersForUpdate
test_update_client(
1755488051,
hex!("08e4ab8301121430346563383746363433353343344435433835331a201ee222554989dda120e26ecacf756fe1235cd8d726706b57517715dde4f0c900220310c02f32e0097b2267656e65736973223a7b226c31223a7b2268617368223a22307831373937393865386434343238653064326331336430313632646533653637333432613839363563336261303732323136636631636632323739656566643939222c226e756d626572223a31327d2c226c32223a7b2268617368223a22307864633661396161316636336631343161356265326338353932633232633735386537336462333933373532616637633933393336363136376635653035633564222c226e756d626572223a307d2c226c325f74696d65223a313735353437343733342c2273797374656d5f636f6e666967223a7b226261746368657241646472223a22307864336632633561666232643736663535373966333236623063643764613566356134313236633335222c226f76657268656164223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030222c227363616c6172223a22307830313030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303063356663353030303030353538222c226761734c696d6974223a36303030303030302c2265697031353539506172616d73223a22307830303030303030303030303030303030222c226f70657261746f72466565506172616d73223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030227d7d2c22626c6f636b5f74696d65223a322c226d61785f73657175656e6365725f6472696674223a3630302c227365715f77696e646f775f73697a65223a333630302c226368616e6e656c5f74696d656f7574223a3330302c226c315f636861696e5f6964223a333135313930382c226c325f636861696e5f6964223a323135313930382c227265676f6c6974685f74696d65223a302c2263616e796f6e5f74696d65223a302c2264656c74615f74696d65223a302c2265636f746f6e655f74696d65223a302c22666a6f72645f74696d65223a302c226772616e6974655f74696d65223a302c22686f6c6f63656e655f74696d65223a302c22697374686d75735f74696d65223a302c2262617463685f696e626f785f61646472657373223a22307830306134666534633661616130373239643736393963333837653766323831646436346166613261222c226465706f7369745f636f6e74726163745f61646472657373223a22307837316634633364306361363232616665303566616633653633653033353061343362366233353265222c226c315f73797374656d5f636f6e6669675f61646472657373223a22307864636339326462303931393665326138386162623137356238646232376338623063643066383433222c2270726f746f636f6c5f76657273696f6e735f61646472657373223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030222c22636861696e5f6f705f636f6e666967223a7b2265697031353539456c6173746963697479223a362c226569703135353944656e6f6d696e61746f72223a35302c226569703135353944656e6f6d696e61746f7243616e796f6e223a3235307d7d3ab3010a20d61ea484febacfae5298d52a2b581f3e305a51f3112a9241b968dccf019f7b11100118e6d589c506226f0a0410000038120e0a04200000381a0608691036183712140a04300000381a0c08691036183720192812301612140a04400000381a0c08691036183720192812301612140a04500000381a0c08691036183720192822302612150a04600000381a0d08a901105618572019282230262806300838084204080210034a040880a305520410c0843d421c0a1400000000000000000000000000000000000000001067200f2818").into(),
hex!("0a20000000000000000000000000000000000000000000000000000000000000000010aeb58ac5061a2099dfa87560b741cfa2724ed4d00c60850aa438a5244b9f57b8d2755688c982a420c00f2a30b6579d5afbcb5d775a140dde9a03beeaae5a60d702db3fa022f559aba4187b5158007c30d17340489e1c9771eda024c53230890f2fd3af0fabb8f909e502f803db3ed3370a50a7adc1a04f76d292faf5f4a01eafca952e8bb46bcc706801ca2003e038e6b28ac50640f30f").into(),
"td_pl",
);
}

fn test_update_client(now: i64, raw_cs: Vec<u8>, raw_cons_state: Vec<u8>, suffix: &str) {
let client = OptimismLightClient::<
{ ethereum_consensus::preset::minimal::PRESET.SYNC_COMMITTEE_SIZE },
>;
let (cs, cons_state) = get_initial_state();
let raw_cs = RawClientState::decode(raw_cs.as_slice()).unwrap();
let raw_cons_state = RawConsensusState::decode(raw_cons_state.as_slice()).unwrap();

let cs = ClientState::try_from(raw_cs).unwrap();
let cons_state = ConsensusState::try_from(raw_cons_state).unwrap();

let mut cons_states = BTreeMap::new();
cons_states.insert(cs.latest_height, cons_state);

let client_message =
std::fs::read("../testdata/update_client_header.bin").expect("file not found");
std::fs::read(format!("../testdata/update_client_header_{}.bin", suffix))
.expect("file not found");
let client_message = Any::try_from(client_message).unwrap();

let ctx = MockClientReader {
client_state: Some(cs),
consensus_state: cons_states,
time: Some(Time::from_unix_timestamp(1751437975, 0).unwrap()),
time: Some(Time::from_unix_timestamp(now, 0).unwrap()),
};

let client_id = ClientId::from_str("optimism-1").unwrap();
Expand Down
Binary file added testdata/update_client_header_td_l.bin
Binary file not shown.
Binary file added testdata/update_client_header_td_pl.bin
Binary file not shown.
Loading