1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
use crate::{
account::AccountHash,
auction::{EraId, EraInfo},
bytesrepr::{FromBytes, ToBytes},
system_contract_errors::auction::Error,
CLTyped, Key, TransferredTo, URef, BLAKE2B_DIGEST_LENGTH, U512,
};
pub trait RuntimeProvider {
fn get_caller(&self) -> AccountHash;
fn get_key(&self, name: &str) -> Option<Key>;
fn blake2b<T: AsRef<[u8]>>(&self, data: T) -> [u8; BLAKE2B_DIGEST_LENGTH];
}
pub trait StorageProvider {
fn read<T: FromBytes + CLTyped>(&mut self, uref: URef) -> Result<Option<T>, Error>;
fn write<T: ToBytes + CLTyped>(&mut self, uref: URef, value: T) -> Result<(), Error>;
}
pub trait SystemProvider {
fn create_purse(&mut self) -> Result<URef, Error>;
fn get_balance(&mut self, purse: URef) -> Result<Option<U512>, Error>;
fn transfer_from_purse_to_purse(
&mut self,
source: URef,
target: URef,
amount: U512,
) -> Result<(), Error>;
fn record_era_info(&mut self, era_id: EraId, era_info: EraInfo) -> Result<(), Error>;
}
pub trait MintProvider {
fn transfer_purse_to_account(
&mut self,
source: URef,
target: AccountHash,
amount: U512,
) -> Result<TransferredTo, Error>;
fn transfer_purse_to_purse(
&mut self,
source: URef,
target: URef,
amount: U512,
) -> Result<(), Error>;
fn balance(&mut self, purse: URef) -> Result<Option<U512>, Error>;
fn read_base_round_reward(&mut self) -> Result<U512, Error>;
fn mint(&mut self, amount: U512) -> Result<URef, Error>;
fn reduce_total_supply(&mut self, amount: U512) -> Result<(), Error>;
}