@@ -23,6 +23,10 @@ use crate::{
2323 zkp_verifier:: ZkpVerifier ,
2424} ;
2525
26+ pub const WASMD_MODULE_STORE_KEY : & [ u8 ] = b"wasm" ;
27+ pub const WASMD_CONTRACT_STORE_PREFIX : u8 = 0x03 ;
28+ pub const IBC_UNION_COSMWASM_COMMITMENT_PREFIX : u8 = 0x00 ;
29+
2630pub struct CometblsLightClient < T : ZkpVerifier = ( ) > ( PhantomData < T > ) ;
2731
2832impl < T : ZkpVerifier > IbcClient for CometblsLightClient < T > {
@@ -56,11 +60,12 @@ impl<T: ZkpVerifier> IbcClient for CometblsLightClient<T> {
5660 & SDK_SPECS ,
5761 & consensus_state. app_hash ,
5862 & [
59- b"wasm" . to_vec ( ) ,
60- 0x3u8
63+ WASMD_MODULE_STORE_KEY . into ( ) ,
64+ WASMD_CONTRACT_STORE_PREFIX
6165 . to_le_bytes ( )
6266 . into_iter ( )
6367 . chain ( client_state. contract_address )
68+ . chain ( vec ! [ IBC_UNION_COSMWASM_COMMITMENT_PREFIX ] )
6469 . chain ( key)
6570 . collect :: < Vec < _ > > ( ) ,
6671 ] ,
@@ -75,13 +80,22 @@ impl<T: ZkpVerifier> IbcClient for CometblsLightClient<T> {
7580 key : Vec < u8 > ,
7681 storage_proof : Self :: StorageProof ,
7782 ) -> Result < ( ) , IbcClientError < Self > > {
83+ let client_state = ctx. read_self_client_state ( ) ?;
7884 let consensus_state = ctx. read_self_consensus_state ( height) ?;
7985 Ok ( ics23:: ibc_api:: verify_non_membership (
8086 & storage_proof,
8187 & SDK_SPECS ,
8288 & consensus_state. app_hash ,
83- // FIXME: concat(contract, key) right?
84- & [ b"wasm" . to_vec ( ) , key] ,
89+ & [
90+ WASMD_MODULE_STORE_KEY . into ( ) ,
91+ WASMD_CONTRACT_STORE_PREFIX
92+ . to_le_bytes ( )
93+ . into_iter ( )
94+ . chain ( client_state. contract_address )
95+ . chain ( vec ! [ IBC_UNION_COSMWASM_COMMITMENT_PREFIX ] )
96+ . chain ( key)
97+ . collect :: < Vec < _ > > ( ) ,
98+ ] ,
8599 )
86100 . map_err ( Into :: < Error > :: into) ?)
87101 }
0 commit comments