espresso_types/v0/v0_1/
state.rs1use std::collections::HashSet;
2
3use alloy::primitives::{Address, U256};
4use committable::Commitment;
5use derive_more::{derive::AddAssign, Add, Display, From, Into, Mul, Sub};
6use jf_merkle_tree::{
7 prelude::{LightWeightSHA3MerkleTree, Sha3Digest, Sha3Node},
8 universal_merkle_tree::UniversalMerkleTree,
9 MerkleTreeScheme, UniversalMerkleTreeScheme,
10};
11use serde::{Deserialize, Serialize};
12
13use super::{FeeAccount, FeeAmount};
14use crate::Header;
15
16#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
17pub struct Delta {
18 pub fees_delta: HashSet<FeeAccount>,
19 pub rewards_delta: HashSet<RewardAccount>,
20}
21
22pub const BLOCK_MERKLE_TREE_HEIGHT: usize = 32;
23pub const FEE_MERKLE_TREE_HEIGHT: usize = 20;
24pub const REWARD_MERKLE_TREE_HEIGHT: usize = 20;
25const FEE_MERKLE_TREE_ARITY: usize = 256;
26const REWARD_MERKLE_TREE_ARITY: usize = 256;
27
28pub type BlockMerkleTree = LightWeightSHA3MerkleTree<Commitment<Header>>;
32pub type BlockMerkleCommitment = <BlockMerkleTree as MerkleTreeScheme>::Commitment;
33
34pub type FeeMerkleTree =
35 UniversalMerkleTree<FeeAmount, Sha3Digest, FeeAccount, FEE_MERKLE_TREE_ARITY, Sha3Node>;
36pub type FeeMerkleCommitment = <FeeMerkleTree as MerkleTreeScheme>::Commitment;
37
38pub type RewardMerkleTree = UniversalMerkleTree<
40 RewardAmount,
41 Sha3Digest,
42 RewardAccount,
43 REWARD_MERKLE_TREE_ARITY,
44 Sha3Node,
45>;
46pub type RewardMerkleCommitment = <RewardMerkleTree as MerkleTreeScheme>::Commitment;
47
48#[derive(
51 Default,
52 Hash,
53 Copy,
54 Clone,
55 Debug,
56 Display,
57 Deserialize,
58 Serialize,
59 PartialEq,
60 Eq,
61 PartialOrd,
62 Ord,
63 From,
64 Into,
65)]
66#[display("{_0:x}")]
67pub struct RewardAccount(pub Address);
68
69#[derive(
72 Default,
73 Hash,
74 Copy,
75 Clone,
76 Debug,
77 Display,
78 PartialEq,
79 Eq,
80 PartialOrd,
81 Ord,
82 Add,
83 Sub,
84 Mul,
85 From,
86 Into,
87 AddAssign,
88)]
89#[display("{_0}")]
90pub struct RewardAmount(pub U256);
91
92
93pub(crate) const INFLATION_RATE: u128 = 300; pub(crate) const ASSUMED_BLOCK_TIME_SECONDS: u128 = 2;
95pub(crate) const SECONDS_PER_YEAR: u128 = 60 * 60 * 24 * 365;
96pub(crate) const BLOCKS_PER_YEAR: u128 = SECONDS_PER_YEAR / ASSUMED_BLOCK_TIME_SECONDS;
97pub const COMMISSION_BASIS_POINTS: u16 = 10_000;
98
99#[derive(Clone, Debug, Default)]
100pub struct RewardInfo {
101 pub account: RewardAccount,
102 pub amount: RewardAmount,
103}
104
105#[derive(Clone, Debug, Deserialize, Serialize)]
110pub struct RewardAccountProof {
111 pub account: Address,
112 pub proof: RewardMerkleProof,
113}
114
115#[derive(Clone, Debug, Deserialize, Serialize)]
116pub enum RewardMerkleProof {
117 Presence(<RewardMerkleTree as MerkleTreeScheme>::MembershipProof),
118 Absence(<RewardMerkleTree as UniversalMerkleTreeScheme>::NonMembershipProof),
119}
120
121#[derive(Clone, Debug, Serialize, Deserialize)]
122pub struct RewardAccountQueryData {
123 pub balance: U256,
124 pub proof: RewardAccountProof,
125}