Skip to content
This repository has been archived by the owner on Nov 29, 2024. It is now read-only.

Commit

Permalink
refactor(operator): light block refactor (#45)
Browse files Browse the repository at this point in the history
* refactor: genesis refactored

* refactor: refactored operator

* refactor: update client

* refactor: genesis

* refactor: operator

* refactor: verify membership fixture

* rename

* refactor: programs

* refactor: vm

* refactor: uc

* refactor: genesis

* refactor

* imp: regen fixtures
  • Loading branch information
srdtrk authored Jul 5, 2024
1 parent 6f9e12f commit 0e35a29
Show file tree
Hide file tree
Showing 14 changed files with 240 additions and 255 deletions.
2 changes: 1 addition & 1 deletion contracts/fixtures/mock_update_client_fixture.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@
"targetHeight": 2110668,
"updateClientVkey": "0x00e33cd84cd15c77bd6c40a30e1189c9012cddbd08e4eb6145f57ecf633f4715",
"verifyMembershipVkey": "0x00a3a59ebe9594fa1f4b8ce4e5ddbd4cc23df2834b47fa5c1cf40831a609fa9e",
"publicValues": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000017db9605c70f5a75994a2058af458e1a97f19bfa85c99ba5db6534473e8040e671a45431f78651bfb73058223e788b1b021cd25d9d8b80f1e21f742014d270fc850bacda1e63c41900000000000000000000000000000000000000000000000017db962167923e1a92a23d699a0d59f2e1b034c129b0051fb711a3d0d1f2e895fce82e933b8e36fdb73058223e788b1b021cd25d9d8b80f1e21f742014d270fc850bacda1e63c4190000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000002034c2000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000002034cc00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000044c1ff252000000000000000000000000000000000000000000000000000017defeec2fceb8d000000000000000000000000000000000000000000000000000000000000000076d6f6368612d3400000000000000000000000000000000000000000000000000",
"publicValues": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000017db9605c70f5a75994a2058af458e1a97f19bfa85c99ba5db6534473e8040e671a45431f78651bfb73058223e788b1b021cd25d9d8b80f1e21f742014d270fc850bacda1e63c41900000000000000000000000000000000000000000000000017db962167923e1a92a23d699a0d59f2e1b034c129b0051fb711a3d0d1f2e895fce82e933b8e36fdb73058223e788b1b021cd25d9d8b80f1e21f742014d270fc850bacda1e63c4190000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000002034c2000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000002034cc00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000044c1ff252000000000000000000000000000000000000000000000000000017df3332863d6a2000000000000000000000000000000000000000000000000000000000000000076d6f6368612d3400000000000000000000000000000000000000000000000000",
"proof": "0x"
}
4 changes: 2 additions & 2 deletions contracts/fixtures/update_client_fixture.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@
"targetHeight": 2110668,
"updateClientVkey": "0x00e33cd84cd15c77bd6c40a30e1189c9012cddbd08e4eb6145f57ecf633f4715",
"verifyMembershipVkey": "0x00a3a59ebe9594fa1f4b8ce4e5ddbd4cc23df2834b47fa5c1cf40831a609fa9e",
"publicValues": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000017db9605c70f5a75994a2058af458e1a97f19bfa85c99ba5db6534473e8040e671a45431f78651bfb73058223e788b1b021cd25d9d8b80f1e21f742014d270fc850bacda1e63c41900000000000000000000000000000000000000000000000017db962167923e1a92a23d699a0d59f2e1b034c129b0051fb711a3d0d1f2e895fce82e933b8e36fdb73058223e788b1b021cd25d9d8b80f1e21f742014d270fc850bacda1e63c4190000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000002034c2000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000002034cc00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000044c1ff252000000000000000000000000000000000000000000000000000017deff05ccc26b2800000000000000000000000000000000000000000000000000000000000000076d6f6368612d3400000000000000000000000000000000000000000000000000",
"proof": "0x24434bf65b49886b34885f3dead09d1dd05282d2e3745a71d6cbd12166b6af3b24c6a50ace6cbc31dd4d567ee4f4ffaf8071f7bd779cfc2c0f2ec13fe4a4af200dab900f11dcba42ac5632be8b80fb379086e3e09ab86bb794beb0df7a9667b0143baa197c7e78cb2c5013508ecdb7f5ac39fea2be5759a98706268553cbe2b23024611cac866db5d0652fc0b238e83914735bfea96fd2840c9ccdeb5d9646c701fb61595aeb4013c0e42bab80cef4b778919be3b937f01b67f2faa187e23362048c83648b14b19692f37bdea2803ce6c9592c12dd542004e422448db4d225b91db763fbb3cfa3f833549b0f132d33625e6bae0bb7f6b3602756203d5216cb84109eebf97593486aca7e459197214dac26a3f7b8cb8130a19e551f5b9880718908ed99a9f99fbb6180a2e2107144a89d3cad774ad168513afb87d8c2cb0979192dcd0553d62d02b20689578ea1ef3c48cc727337b23793589cc094d3c7a9bc6b25d229ee7901c148a3f1e38429c158c64afa326f6f12240f79d8bdc4f9b71178068bb7747b3a8b3815a8ca2f65288a8f5fb1afe100eadf295f1a9e0e0e008c181144d1f046c232c5cc185a1c7259c4d2291795aa2de36ca11d562bec547673e61cdf70dbb1d411d465f40f72120d17c0819eb6e135d321befa16ccb0b37e58dd260f7597072511f89c99cf60724b2d69004a266697468a48d1e7838f5e2a23742a1ad77318c94a3212cd5c0a257ed458b653c39dd3458bc47cceeecdb585b2de0b1f8bddfe805fc311fe4f697368edd142b584a14b4aaaa15cab64a06499036d06b316e2a776a8af1abd791ff215b620d5ec82b454c0f53869bef7f7e73c0f7c1733a47f2b733112162dd7d6cd5c51ba8242b464729263d169ae42e3c39462b9108987ba2d9c3386c3a542ed30a731c16756e334fee0a7aa11eb8fb173f42b772b2079c772bcfbe890d4c3c153c446867bcdad26f2171d78fc0989559663d95a09f279803a49d702cef9c809ee00fe8a61e42fd6c9711b6d8786548194bfb993233801a470887acd550948e9fd7c9a7b28a3a0adde19f6d831e12ab7a7dfc7c91146edbf647a289d2526b0b62ee2de3326592970e9518dd4bc33e54005c90c9a039445904ae0c746f2113c0c36ede9dc5f74627fb401929c2783b06a7e4846612393f35d7aedfd8f014bedecb3114378a3f099e2d441d3b5d96650cca5dc0159"
"publicValues": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000017db9605c70f5a75994a2058af458e1a97f19bfa85c99ba5db6534473e8040e671a45431f78651bfb73058223e788b1b021cd25d9d8b80f1e21f742014d270fc850bacda1e63c41900000000000000000000000000000000000000000000000017db962167923e1a92a23d699a0d59f2e1b034c129b0051fb711a3d0d1f2e895fce82e933b8e36fdb73058223e788b1b021cd25d9d8b80f1e21f742014d270fc850bacda1e63c4190000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000002034c2000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000002034cc00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000044c1ff252000000000000000000000000000000000000000000000000000017df33439e34ab0000000000000000000000000000000000000000000000000000000000000000076d6f6368612d3400000000000000000000000000000000000000000000000000",
"proof": "0x27911635c24bf86242b1521f98bad8d57c2d1fc0040bafc70b5edd5cf30a6e360a4bb8ee38826c502768d05294f6297b96f5489a0460c024d66c164e8f87a884285770686617563be97e57d180faf43204304cee0eaae778843f072fcc48971521d8e6a1a7c2666339bb8d34c8b670c5507c3fd45353933286a1a0ccfb552e0f09ca73f1f31e782ced364a06f60e497a76b385c600e423a7df4c3da69130507f004f999f7df4ef940854b06ab8704b11aafc6bce1cb0715272d746fc7abfb481291fef788e4556b1de6e73dc0f116c490af3eb4faea88f14b1272ae2f41148801709386ee816b5f50920c66c6905e68583cfa21220edbdd0c5fed86df65197242e7a97f64eb1c7e30c8b93dae5d945b128735bcdc14f535a4d3979ef16728fb70d47029ec8cb058252aad793595feee253c404eb7ccd5ba5b1b211792ff1b7ca29e52fa67c654798d3502cf9bc15922bd9fb52c545b179d2d4a624d1d701c2b31a390ce3e9dcee01c5254baba96c79cfab10e13aeaaa98e25b0bd6683f7e24270c33d7b4e14578d855c04731e1e774be8ba54e1be1ba3b837367174b3bcf53a91456cb4575ae3972c008adbd69eab962c24d5bb09079caeba970bb367ab4e0cf22bd422264e40c51be4e2abc71a3400cbbd8f3478407c0af714dc964b33173ca14603bc02458910db34093e27b60e648ebb2f9a9a27bb68fedcb5cd2588e71be2b3ce204701baf385dd8b017b17bc54f8edf5a38af47ec57e9d20c84f09dae3a07c6e14907baaec1a536da08c5da7c2018ad3db8f743bebb0a3f5fa6cf8a2d542400c286a32b873302d7e9d1129d178bf8bf800a1ed30726a981dbe5abd122872c035c4c0cad0113b059ba0197ed325b6b8203334cec1d784b3388d27b8fb6db04251eee422542b0aae6250d14a691e8712b55bade5c353dd84901395ec7ebed057958fd97a806ccb69a9d5217a979405fd938d61d3f53e4aa1b42e750f94805189ebc846b848d6cc6129e2abb36ab544bb0ae670c216a83f5a1d893f6a1431a0057d022702c2b1991fa9dcf54f1af0f6aab878a907a7c149cc39a085ecf7d992f99da2cf1574c7b288e7465276cd81d87d4a14814717a431cf2d2a560c3851c1e18be0f3253774a4869f24429242b45edd9411f84ab02a218388b935982bc1b22e84e7d26e2927e4a3bffe5f1215406928b8580740fbcaa4fbf63f38a54efda"
}
2 changes: 1 addition & 1 deletion contracts/fixtures/verify_membership_fixture.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@
"updateClientVkey": "0x00e33cd84cd15c77bd6c40a30e1189c9012cddbd08e4eb6145f57ecf633f4715",
"verifyMembershipVkey": "0x00a3a59ebe9594fa1f4b8ce4e5ddbd4cc23df2834b47fa5c1cf40831a609fa9e",
"publicValues": "0x0000000000000000000000000000000000000000000000000000000000000020994a2058af458e1a97f19bfa85c99ba5db6534473e8040e671a45431f78651bf000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000023636c69656e74732f30372d74656e6465726d696e742d302f636c69656e745374617465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b70a2b2f6962632e6c69676874636c69656e74732e74656e6465726d696e742e76312e436c69656e7453746174651287010a1174686574612d746573746e65742d3030311204080110031a040880840722040880c60a2a02082832003a0510b7e3c60842190a090801180120012a0100120c0a02000110211804200c300142190a090801180120012a0100120c0a02000110201801200130014a07757067726164654a107570677261646564494243537461746550015801000000000000000000",
"proof": "0x2cdb0e6924ff08bd92e71589814bf5f1fdfc8bed477e675e67ef3eea5bfdb942136e40813f51cf0512c1ca6849c33278087e5c20cf594964233cb79fadd7cb670092db66aaeb08c9fb4d9db4c2a865ad9a1bb780a9d6a0e8db65fa16b6d5edcf1bef3b374da3c712b74bddc32130374002399db3bbe2bceb8483bf10825b107309a7cc1e85022f087f212f8c080febd9c3dfb4a4c41b8730aa16167ae3b93c3016ed469ad278aeddf2ee2bbce3f10d0ea4d982d8ea707434611d2ba87bb03b9d082f3fc39ae82c4f6ff27144e2bd22aa0e2b982c7e3fa28ef81ecfec480e20dd2be2ba8120cb4a1cf9d945dfa1fd5180ae581d004810b52a1a742e5a6b57e0f82b3f580710208abb5cbad98e556ab92cf327b424ef05b675928be18ff584df1e2255147aaed90eb7fbac0cdd4ef6e6d78c904375d931d99614834a37336bd99118d9fb09322a436df6e3f6937ad23e16fc5383a0c7732494c0a59ecd733ac0292c9cff2b6de0202bff61c1270c9eb9f60320f7e228d36c049b1736cac4afbc6a1b14869217b0e90531491fffd419652e759cde9de3b4b4967003ba4e80eb7c90116a7c87f200696660618a58edff497ce34089967770ce0a8d5cc4287b378dfa26b77383e2af7eb37cce9d91a8f88c3ff2857a4107c1d54d31181b79ea4055d61af02ddd94c57c107285e576c406b31a6fac03c9b154ae320c6cf17fddeb9a111dd8344beba342224f472143262bf2f40f9b0afcff159957a8303d2328bab2f5088e038dd4c683ba949c66f73c9599c7d65e699a86d672abfaf147e488dbaf250c01794411254675425febc1d894d20983461c6d2f4d21b71d0fd095673338071939a78434a98f755cd06d78998694c4ca2ae7aadb18950df9febe718a3d578d141e6dfeed47900ed837a35cd4c66d567b267bdf559babf8e1426b9fe11b139a079f04c2ff34b7551949ba627403c61871cde883114706b67605ff67e02930d5060678adae2f30dbb286c5ed597bf96475166b0f9061fa00e5a19787a0eff39c1771e57daa430e88ad66005d1803339afb6e3cd695f60ae923a9ae4d0f22d2bc1f9da8d2e544a95d97e5ff53566acaf373fd39f12c29bd5d4527c15f7ced60a30596267e081af4d438ad77765509b8016593d8e68fef2ba4ac2440ba569c3d53238edc505cc54bed45f8702ed83d6b14bd1319df20bdd19babfabb65d3f0677b",
"proof": "0x2cdcf8836c712736296df71b7a4b16f83fcb8f61c3c9572ccfd43167906b06ac191550183b3ad56c0358a9a202d4225058138ca5a16f983f0fa709d8f8d9f56728505f24404d4c28f3b2e1beb4ae9bb978051a77ca7aeef38e17b9f46f1f9a8f01e900ec7c68d1dadc6914cae12d2464d58522440e900f79810d14f2fe44d88f2080f71ab09a50f90593647da8ff83652f849e4ad798377d632ac2c31ae98cdb0752efb561f2f6d66132a08f61ef2e577427310916cb4d784b7705d9948b83cc2415aa4a6c229bd9b37960b17049d01e7df3083fa638495605787023ca705158262090cb4c99fea1fa8f1253838802200ff548193258228d99229e1b5d5b8a702bcc2f8a6c5ade636556532db45244b4e6fa0960200ae8386a2f60a4e75c84b00b781842c5f65b866afc91f8ccf81362cab0511f60cddaf5f2b4f38296c941a21c99be19e9140e9eab34a8aa5c92fb7e05dfec457ef8c6ddca4f845182d55f8616d651ad3914e66020120f6fbd60e6e43cf9668461bab9a9cd1694b9793543520a820cf96c9060455d16b29a00a035a2530c3ba3077777e6c9664d0e3a3ed1511bcf26891b21babd303b429ddfc50101ee1a133e24a559fbdbd81cef828f5377290b50a803b66a9214bb534ca71af6e224efe5cb85f8e7c6cc50756d362ca1460383fefc9572c309915eb5a10b6aeb4d0706f98734d19e446e69cd1495d989910d748f4e786b3bd26b26eb1047e4aaec07b88687dce5c591dda48a176255c84e242968c354b4dd4983fbf121a07580aa107f96c79a65c350c0425467c868b73f2c6cd1b23165f4cb5d339822bb876516dfec3630a7571616bd1469dbc3cefcae24a73bc14880cc493c2fb06acb50ed09d4bdf0ae9291285d32882e77c74746ee19ea430f00d1bc11f11c5460e8baaeffccd3530297ab0254a4e8efa3f83440f509aa37006ac3c31647a317ad73858d3b770f405df61b3d9969ff0bc87791c3ec06998749c1c5a97d419be3f78ece9417313dfc5bbdef0405e627338fd60d647f079524afa9483daefc2a22b7f8c0de84f9109250a20bc9431b3a2445d15a66ef17f820b31c6dda159f63014c7b165595ce87687106fee1104af54f5f620a40b028053358d49d29500e00a56336c81030e69942b6145ce5e3bf1cf22e0c3a9d5c247883796775d54d5241be648dfb30d1e84552eaadb52cc6bede9bcb44678923",
"value": "0a2b2f6962632e6c69676874636c69656e74732e74656e6465726d696e742e76312e436c69656e7453746174651287010a1174686574612d746573746e65742d3030311204080110031a040880840722040880c60a2a02082832003a0510b7e3c60842190a090801180120012a0100120c0a02000110211804200c300142190a090801180120012a0100120c0a02000110201801200130014a07757067726164654a107570677261646564494243537461746550015801"
}
21 changes: 21 additions & 0 deletions operator/src/helpers/eth.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//! Helpers for interacting with EVM.
use std::env;

use alloy::{network::EthereumWallet, signers::local::PrivateKeySigner};

/// Create an Ethereum wallet from the `PRIVATE_KEY` environment variable.
///
/// # Panics
/// Panics if the `PRIVATE_KEY` environment variable is not set.
/// Panics if the `PRIVATE_KEY` environment variable is not a valid private key.
#[must_use]
pub fn wallet_from_env() -> EthereumWallet {
let mut private_key = env::var("PRIVATE_KEY").expect("PRIVATE_KEY not set");
if let Some(stripped) = private_key.strip_prefix("0x") {
private_key = stripped.to_string();
}

let signer: PrivateKeySigner = private_key.parse().unwrap();
EthereumWallet::from(signer)
}
87 changes: 87 additions & 0 deletions operator/src/helpers/light_block.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
//! Provides helpers for deriving other types from `LightBlock`.
use ibc_client_tendermint::types::{ConsensusState, Header};
use ibc_core_client_types::Height as IbcHeight;
use ibc_core_commitment_types::commitment::CommitmentRoot;
use ibc_core_host_types::{error::IdentifierError, identifiers::ChainId};
use sp1_ics07_tendermint_solidity::sp1_ics07_tendermint::{ClientState, Height, TrustThreshold};
use std::str::FromStr;
use tendermint_light_client_verifier::types::LightBlock;

/// A wrapper around a [`LightBlock`] that provides additional methods.
#[allow(clippy::module_name_repetitions)]
pub struct LightBlockWrapper(LightBlock);

impl LightBlockWrapper {
/// Create a new instance of the `LightBlockWrapper`.
#[must_use]
pub const fn new(light_block: LightBlock) -> Self {
Self(light_block)
}

/// Get the inner `LightBlock`.
#[must_use]
pub const fn as_light_block(&self) -> &LightBlock {
&self.0
}

/// Convert the [`LightBlockWrapper`] to a new solidity [`ClientState`].
///
/// # Errors
/// Returns an error if the chain identifier or height cannot be parsed.
pub fn to_sol_client_state(&self) -> anyhow::Result<ClientState> {
let chain_id = ChainId::from_str(self.0.signed_header.header.chain_id.as_str())?;
let two_weeks_in_nanos = 14 * 24 * 60 * 60 * 1_000_000_000;
Ok(ClientState {
chain_id: chain_id.to_string(),
trust_level: TrustThreshold {
numerator: 1,
denominator: 3,
},
latest_height: Height {
revision_number: chain_id.revision_number().try_into()?,
revision_height: self.0.height().value().try_into()?,
},
is_frozen: false,
trusting_period: two_weeks_in_nanos,
unbonding_period: two_weeks_in_nanos,
})
}

/// Convert the [`LightBlockWrapper`] to a new [`ConsensusState`].
#[must_use]
pub fn to_consensus_state(&self) -> ConsensusState {
ConsensusState {
timestamp: self.0.signed_header.header.time,
root: CommitmentRoot::from_bytes(self.0.signed_header.header.app_hash.as_bytes()),
next_validators_hash: self.0.signed_header.header.next_validators_hash,
}
}

/// Convert the [`LightBlockWrapper`] to a new [`Header`].
///
/// # Panics
/// Panics if the `trusted_height` is zero.
#[must_use]
pub fn into_header(self, trusted_light_block: &LightBlock) -> Header {
let trusted_revision_number =
ChainId::from_str(trusted_light_block.signed_header.header.chain_id.as_str())
.unwrap()
.revision_number();
let trusted_block_height = trusted_light_block.height().value();
Header {
signed_header: self.0.signed_header,
validator_set: self.0.validators,
trusted_height: IbcHeight::new(trusted_revision_number, trusted_block_height).unwrap(),
trusted_next_validator_set: trusted_light_block.next_validators.clone(),
}
}

/// Get the chain identifier from the [`LightBlock`].
///
/// # Errors
/// Returns an error if the chain identifier cannot be parsed.
pub fn chain_id(&self) -> Result<ChainId, IdentifierError> {
ChainId::from_str(self.0.signed_header.header.chain_id.as_str())
}
}
4 changes: 4 additions & 0 deletions operator/src/helpers/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
//! Provides helpers for `sp1-ics07-tendermint-operator`.
pub mod eth;
pub mod light_block;
2 changes: 2 additions & 0 deletions operator/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#![deny(missing_docs, clippy::nursery, clippy::pedantic, warnings)]

pub mod cli;
pub mod helpers;
pub mod programs;
pub mod prover;
pub mod rpc;
pub mod runners;
33 changes: 33 additions & 0 deletions operator/src/programs.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
//! Programs for `sp1-ics07-tendermint`.
use sp1_sdk::{MockProver, Prover, SP1VerifyingKey};

/// Trait for SP1 ICS07 Tendermint programs.
pub trait SP1Program {
/// The ELF file for the program.
const ELF: &'static [u8];

/// Get the verifying key for the program using [`MockProver`].
#[must_use]
fn get_vkey() -> SP1VerifyingKey {
let mock_prover = MockProver::new();
let (_, vkey) = mock_prover.setup(Self::ELF);
vkey
}
}

/// SP1 ICS07 Tendermint update client program.
pub struct UpdateClientProgram;

/// SP1 ICS07 Tendermint verify membership program.
pub struct VerifyMembershipProgram;

impl SP1Program for UpdateClientProgram {
const ELF: &'static [u8] =
include_bytes!("../../elf/update-client-riscv32im-succinct-zkvm-elf");
}

impl SP1Program for VerifyMembershipProgram {
const ELF: &'static [u8] =
include_bytes!("../../elf/verify-membership-riscv32im-succinct-zkvm-elf");
}
Loading

0 comments on commit 0e35a29

Please sign in to comment.