@@ -6,9 +6,10 @@ use std::{
6
6
use alloy:: primitives:: Address ;
7
7
use anyhow:: { Context , Ok } ;
8
8
use espresso_types:: {
9
- v0_3:: ChainConfig , FeeAccount , FeeAmount , GenesisHeader , L1BlockInfo , L1Client , Timestamp ,
10
- Upgrade ,
9
+ v0_3:: ChainConfig , FeeAccount , FeeAmount , GenesisHeader , L1BlockInfo , L1Client , SeqTypes ,
10
+ Timestamp , Upgrade ,
11
11
} ;
12
+ use hotshot_types:: traits:: node_implementation:: NodeType ;
12
13
use serde:: { Deserialize , Serialize } ;
13
14
use vbs:: version:: Version ;
14
15
@@ -44,6 +45,48 @@ pub enum L1Finalized {
44
45
Timestamp { timestamp : Timestamp } ,
45
46
}
46
47
48
+ /// Helper type to deal with TOML keys that are u64 but represented as strings
49
+ #[ derive( Clone , Copy , Debug , PartialEq , Eq , PartialOrd , Ord , Hash ) ]
50
+ pub struct TomlKeyU64 ( u64 ) ;
51
+
52
+ impl < ' de > Deserialize < ' de > for TomlKeyU64 {
53
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
54
+ where
55
+ D : serde:: Deserializer < ' de > ,
56
+ {
57
+ tracing:: warn!( "Using TomlKeyU64::deserialize" ) ;
58
+ let s = String :: deserialize ( deserializer) ?;
59
+
60
+ let n = s
61
+ . parse :: < u64 > ( )
62
+ . map_err ( |_| serde:: de:: Error :: custom ( "invalid epoch" ) ) ?;
63
+
64
+ std:: result:: Result :: Ok ( TomlKeyU64 ( n) )
65
+ }
66
+ }
67
+
68
+ impl Serialize for TomlKeyU64 {
69
+ fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
70
+ where
71
+ S : serde:: Serializer ,
72
+ {
73
+ serializer. serialize_str ( & self . 0 . to_string ( ) )
74
+ }
75
+ }
76
+
77
+ impl Into < u64 > for & TomlKeyU64 {
78
+ fn into ( self ) -> u64 {
79
+ self . 0
80
+ }
81
+ }
82
+
83
+ #[ derive( Clone , Debug , Deserialize , Serialize ) ]
84
+ pub struct PeerConfigData {
85
+ pub stake_table_key : <SeqTypes as NodeType >:: SignatureKey ,
86
+ pub state_ver_key : <SeqTypes as NodeType >:: StateSignatureKey ,
87
+ pub stake : u64 ,
88
+ }
89
+
47
90
/// Genesis of an Espresso chain.
48
91
#[ derive( Clone , Debug , Deserialize , Serialize ) ]
49
92
pub struct Genesis {
@@ -67,6 +110,7 @@ pub struct Genesis {
67
110
#[ serde( rename = "upgrade" , with = "upgrade_ser" ) ]
68
111
#[ serde( default ) ]
69
112
pub upgrades : BTreeMap < Version , Upgrade > ,
113
+ pub da_committees : Option < BTreeMap < TomlKeyU64 , Vec < PeerConfigData > > > ,
70
114
}
71
115
72
116
impl Genesis {
0 commit comments