casper_storage/data_access_layer/
handle_fee.rs1use crate::{
2 data_access_layer::BalanceIdentifier, system::runtime_native::Config as NativeRuntimeConfig,
3 tracking_copy::TrackingCopyError,
4};
5use casper_types::{
6 execution::Effects, Digest, EraId, InitiatorAddr, ProtocolVersion, PublicKey, TransactionHash,
7 Transfer, U512,
8};
9
10#[derive(Debug, Clone, PartialEq, Eq)]
12pub enum HandleFeeMode {
13 Pay {
15 initiator_addr: Box<InitiatorAddr>,
17 source: Box<BalanceIdentifier>,
19 target: Box<BalanceIdentifier>,
21 amount: U512,
23 },
24 Burn {
26 source: BalanceIdentifier,
28 amount: Option<U512>,
30 },
31 Credit {
33 validator: Box<PublicKey>,
35 amount: U512,
37 era_id: EraId,
39 },
40}
41
42impl HandleFeeMode {
43 pub fn pay(
45 initiator_addr: Box<InitiatorAddr>,
46 source: BalanceIdentifier,
47 target: BalanceIdentifier,
48 amount: U512,
49 ) -> Self {
50 HandleFeeMode::Pay {
51 initiator_addr,
52 source: Box::new(source),
53 target: Box::new(target),
54 amount,
55 }
56 }
57
58 pub fn burn(source: BalanceIdentifier, amount: Option<U512>) -> Self {
63 HandleFeeMode::Burn { source, amount }
64 }
65
66 pub fn credit(validator: Box<PublicKey>, amount: U512, era_id: EraId) -> Self {
69 HandleFeeMode::Credit {
70 validator,
71 amount,
72 era_id,
73 }
74 }
75}
76
77#[derive(Debug, Clone, PartialEq, Eq)]
79pub struct HandleFeeRequest {
80 pub(crate) config: NativeRuntimeConfig,
82 pub(crate) state_hash: Digest,
84 pub(crate) protocol_version: ProtocolVersion,
86 pub(crate) transaction_hash: TransactionHash,
88 pub(crate) handle_fee_mode: HandleFeeMode,
90}
91
92impl HandleFeeRequest {
93 #[allow(clippy::too_many_arguments)]
95 pub fn new(
96 config: NativeRuntimeConfig,
97 state_hash: Digest,
98 protocol_version: ProtocolVersion,
99 transaction_hash: TransactionHash,
100 handle_fee_mode: HandleFeeMode,
101 ) -> Self {
102 Self {
103 config,
104 state_hash,
105 protocol_version,
106 transaction_hash,
107 handle_fee_mode,
108 }
109 }
110
111 pub fn config(&self) -> &NativeRuntimeConfig {
113 &self.config
114 }
115
116 pub fn state_hash(&self) -> Digest {
118 self.state_hash
119 }
120
121 pub fn protocol_version(&self) -> ProtocolVersion {
123 self.protocol_version
124 }
125
126 pub fn transaction_hash(&self) -> TransactionHash {
128 self.transaction_hash
129 }
130
131 pub fn handle_fee_mode(&self) -> &HandleFeeMode {
133 &self.handle_fee_mode
134 }
135}
136
137#[derive(Debug)]
139pub enum HandleFeeResult {
140 RootNotFound,
142 Success {
144 transfers: Vec<Transfer>,
146 effects: Effects,
148 },
149 Failure(TrackingCopyError),
151}
152
153impl HandleFeeResult {
154 pub fn effects(&self) -> Effects {
156 match self {
157 HandleFeeResult::RootNotFound | HandleFeeResult::Failure(_) => Effects::new(),
158 HandleFeeResult::Success { effects, .. } => effects.clone(),
159 }
160 }
161}