hpl_interface/hook/
merkle.rs1use cosmwasm_schema::{cw_serde, QueryResponses};
2use cosmwasm_std::HexBinary;
3
4use super::{HookQueryMsg, PostDispatchMsg};
5
6pub const TREE_DEPTH: usize = 32;
7
8#[cw_serde]
9pub struct InstantiateMsg {
10 pub mailbox: String,
11}
12
13#[cw_serde]
14pub enum ExecuteMsg {
15 PostDispatch(PostDispatchMsg),
16}
17
18#[cw_serde]
19#[derive(QueryResponses)]
20#[query_responses(nested)]
21pub enum QueryMsg {
22 Hook(HookQueryMsg),
23 MerkleHook(MerkleHookQueryMsg),
24}
25
26#[cw_serde]
27#[derive(QueryResponses)]
28pub enum MerkleHookQueryMsg {
29 #[returns(CountResponse)]
30 Count {},
31
32 #[returns(RootResponse)]
33 Root {},
34
35 #[returns(BranchResponse)]
36 Branch {},
37
38 #[returns(TreeResponse)]
39 Tree {},
40
41 #[returns(CheckPointResponse)]
42 CheckPoint {},
43}
44
45#[cw_serde]
46pub struct CountResponse {
47 pub count: u32,
48}
49
50#[cw_serde]
51pub struct RootResponse {
52 pub root: HexBinary,
53}
54
55#[cw_serde]
56pub struct BranchResponse {
57 pub branch: [HexBinary; TREE_DEPTH],
58}
59
60#[cw_serde]
61pub struct TreeResponse {
62 pub branch: [HexBinary; TREE_DEPTH],
63 pub count: u32,
64}
65
66#[cw_serde]
67pub struct CheckPointResponse {
68 pub root: HexBinary,
69 pub count: u32,
70}
71
72#[cfg(test)]
73mod test {
74 use super::*;
75 use crate::{
76 hook::{ExpectedHookQueryMsg, PostDispatchMsg, QuoteDispatchMsg},
77 msg_checker,
78 };
79
80 #[test]
81 fn test_hook_interface() {
82 let _checked: ExecuteMsg = msg_checker(
83 PostDispatchMsg {
84 metadata: HexBinary::default(),
85 message: HexBinary::default(),
86 }
87 .wrap(),
88 );
89
90 let _checked: QueryMsg = msg_checker(ExpectedHookQueryMsg::Hook(HookQueryMsg::Mailbox {}));
91 let _checked: QueryMsg = msg_checker(
92 QuoteDispatchMsg {
93 metadata: HexBinary::default(),
94 message: HexBinary::default(),
95 }
96 .request(),
97 );
98 }
99}