use std::collections::BTreeSet;
use casper_types::{
account::AccountHash,
bytesrepr::{FromBytes, ToBytes},
system::{
auction::{BidAddr, BidKind, EraInfo, Error, Unbond, UnbondEra, UnbondKind},
mint,
},
CLTyped, Key, KeyTag, URef, U512,
};
pub trait RuntimeProvider {
fn get_caller(&self) -> AccountHash;
fn is_allowed_session_caller(&self, account_hash: &AccountHash) -> bool;
fn is_valid_uref(&self, uref: URef) -> bool;
fn named_keys_get(&self, name: &str) -> Option<Key>;
fn get_keys(&mut self, key_tag: &KeyTag) -> Result<BTreeSet<Key>, Error>;
fn get_keys_by_prefix(&mut self, prefix: &[u8]) -> Result<Vec<Key>, Error>;
fn delegator_count(&mut self, bid_addr: &BidAddr) -> Result<usize, Error>;
fn reservation_count(&mut self, bid_addr: &BidAddr) -> Result<usize, Error>;
fn used_reservation_count(&mut self, bid_addr: &BidAddr) -> Result<usize, Error>;
fn vesting_schedule_period_millis(&self) -> u64;
fn allow_auction_bids(&self) -> bool;
fn should_compute_rewards(&self) -> bool;
}
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>;
fn read_bid(&mut self, key: &Key) -> Result<Option<BidKind>, Error>;
fn write_bid(&mut self, key: Key, bid_kind: BidKind) -> Result<(), Error>;
fn read_unbond(&mut self, bid_addr: BidAddr) -> Result<Option<Unbond>, Error>;
fn write_unbond(&mut self, bid_addr: BidAddr, unbond: Option<Unbond>) -> Result<(), Error>;
fn record_era_info(&mut self, era_info: EraInfo) -> Result<(), Error>;
fn prune_bid(&mut self, bid_addr: BidAddr);
}
pub trait MintProvider {
fn unbond(&mut self, unbond_kind: &UnbondKind, unbond_era: &UnbondEra) -> Result<(), Error>;
fn mint_transfer_direct(
&mut self,
to: Option<AccountHash>,
source: URef,
target: URef,
amount: U512,
id: Option<u64>,
) -> Result<Result<(), mint::Error>, Error>;
fn mint_into_existing_purse(&mut self, amount: U512, existing_purse: URef)
-> Result<(), Error>;
fn create_purse(&mut self) -> Result<URef, Error>;
fn available_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>;
}
pub trait AccountProvider {
fn get_main_purse(&self) -> Result<URef, Error>;
fn set_main_purse(&mut self, purse: URef);
}