1
1
use std:: collections:: HashMap ;
2
2
3
3
use crate :: {
4
- Anchor , DRepCredential , GovActionId , Lovelace , ProposalProcedure , Voter , VotingProcedure ,
4
+ Anchor , Credential , DRepCredential , GovActionId , Lovelace , ProposalProcedure , TxHash , Vote ,
5
+ Voter , VotingProcedure ,
5
6
} ;
6
7
8
+ pub const DEFAULT_DREPS_QUERY_TOPIC : ( & str , & str ) =
9
+ ( "drep-state-query-topic" , "cardano.query.dreps" ) ;
10
+ pub const DEFAULT_GOVERNANCE_QUERY_TOPIC : ( & str , & str ) =
11
+ ( "governance-state-query-topic" , "cardano.query.governance" ) ;
12
+
7
13
#[ derive( Debug , Clone , serde:: Serialize , serde:: Deserialize ) ]
8
14
pub enum GovernanceStateQuery {
9
15
GetDRepsList ,
10
- GetDRepInfo { drep_credential : DRepCredential } ,
16
+ GetDRepInfoWithDelegators { drep_credential : DRepCredential } ,
11
17
GetDRepDelegators { drep_credential : DRepCredential } ,
12
18
GetDRepMetadata { drep_credential : DRepCredential } ,
13
19
GetDRepUpdates { drep_credential : DRepCredential } ,
@@ -23,9 +29,9 @@ pub enum GovernanceStateQuery {
23
29
#[ derive( Debug , Clone , serde:: Serialize , serde:: Deserialize ) ]
24
30
pub enum GovernanceStateQueryResponse {
25
31
DRepsList ( DRepsList ) ,
26
- DRepInfo ( DRepInfo ) ,
32
+ DRepInfoWithDelegators ( DRepInfoWithDelegators ) ,
27
33
DRepDelegators ( DRepDelegatorAddresses ) ,
28
- DRepMetadata ( DRepMetadata ) ,
34
+ DRepMetadata ( Option < Option < Anchor > > ) ,
29
35
DRepUpdates ( DRepUpdates ) ,
30
36
DRepVotes ( DRepVotes ) ,
31
37
ProposalsList ( ProposalsList ) ,
@@ -46,20 +52,53 @@ pub struct DRepsList {
46
52
#[ derive( Debug , Clone , serde:: Serialize , serde:: Deserialize ) ]
47
53
pub struct DRepInfo {
48
54
pub deposit : Lovelace ,
49
- pub anchor : Option < Anchor > ,
55
+ pub retired : bool ,
56
+ pub expired : bool ,
57
+ pub active_epoch : Option < u64 > ,
58
+ pub last_active_epoch : u64 ,
50
59
}
51
60
52
61
#[ derive( Debug , Clone , serde:: Serialize , serde:: Deserialize ) ]
53
- pub struct DRepDelegatorAddresses { }
62
+ pub struct DRepInfoWithDelegators {
63
+ pub info : DRepInfo ,
64
+ pub delegators : Vec < Credential > ,
65
+ }
54
66
55
67
#[ derive( Debug , Clone , serde:: Serialize , serde:: Deserialize ) ]
56
- pub struct DRepMetadata { }
68
+ pub struct DRepDelegatorAddresses {
69
+ pub addresses : Vec < Credential > ,
70
+ }
57
71
58
72
#[ derive( Debug , Clone , serde:: Serialize , serde:: Deserialize ) ]
59
- pub struct DRepUpdates { }
73
+ pub struct DRepUpdates {
74
+ pub updates : Vec < DRepUpdateEvent > ,
75
+ }
60
76
61
77
#[ derive( Debug , Clone , serde:: Serialize , serde:: Deserialize ) ]
62
- pub struct DRepVotes { }
78
+ pub struct DRepUpdateEvent {
79
+ pub tx_hash : TxHash ,
80
+ pub cert_index : u64 ,
81
+ pub action : DRepActionUpdate ,
82
+ }
83
+
84
+ #[ derive( serde:: Serialize , serde:: Deserialize , Clone , Debug ) ]
85
+ pub enum DRepActionUpdate {
86
+ Registered ,
87
+ Updated ,
88
+ Deregistered ,
89
+ }
90
+
91
+ #[ derive( Clone , serde:: Serialize , serde:: Deserialize , Debug ) ]
92
+ pub struct DRepVotes {
93
+ pub votes : Vec < VoteRecord > ,
94
+ }
95
+
96
+ #[ derive( Clone , serde:: Serialize , serde:: Deserialize , Debug ) ]
97
+ pub struct VoteRecord {
98
+ pub tx_hash : TxHash ,
99
+ pub vote_index : u32 ,
100
+ pub vote : Vote ,
101
+ }
63
102
64
103
#[ derive( Debug , Clone , serde:: Serialize , serde:: Deserialize ) ]
65
104
pub struct ProposalsList {
@@ -79,8 +118,19 @@ pub struct ProposalWithdrawals {}
79
118
80
119
#[ derive( Debug , Clone , serde:: Serialize , serde:: Deserialize ) ]
81
120
pub struct ProposalVotes {
82
- pub votes : HashMap < Voter , ( Vec < u8 > , VotingProcedure ) > ,
121
+ pub votes : HashMap < Voter , ( TxHash , VotingProcedure ) > ,
83
122
}
84
123
85
124
#[ derive( Debug , Clone , serde:: Serialize , serde:: Deserialize ) ]
86
125
pub struct ProposalMetadata { }
126
+
127
+ pub fn handle_governance_query_result < T > (
128
+ result : anyhow:: Result < Option < T > > ,
129
+ mapper : impl FnOnce ( T ) -> GovernanceStateQueryResponse ,
130
+ ) -> GovernanceStateQueryResponse {
131
+ match result {
132
+ Ok ( Some ( val) ) => mapper ( val) ,
133
+ Ok ( None ) => GovernanceStateQueryResponse :: NotFound ,
134
+ Err ( e) => GovernanceStateQueryResponse :: Error ( e. to_string ( ) ) ,
135
+ }
136
+ }
0 commit comments