radix_native_sdk/consensus_manager/
validator.rs

1use radix_common::data::scrypto::{scrypto_decode, scrypto_encode};
2use radix_engine_interface::api::*;
3use radix_engine_interface::blueprints::consensus_manager::{
4    ValidatorAcceptsDelegatedStakeInput, ValidatorRegisterInput, ValidatorStakeInput,
5    ValidatorUpdateAcceptDelegatedStakeInput, VALIDATOR_ACCEPTS_DELEGATED_STAKE_IDENT,
6    VALIDATOR_REGISTER_IDENT, VALIDATOR_STAKE_IDENT, VALIDATOR_UPDATE_ACCEPT_DELEGATED_STAKE_IDENT,
7};
8use radix_engine_interface::blueprints::resource::Bucket;
9use radix_engine_interface::types::ComponentAddress;
10use sbor::rust::fmt::Debug;
11
12#[derive(Debug)]
13pub struct Validator(pub ComponentAddress);
14
15impl Validator {
16    pub fn register<Y: SystemObjectApi<E>, E: SystemApiError>(&self, api: &mut Y) -> Result<(), E> {
17        api.call_method(
18            self.0.as_node_id(),
19            VALIDATOR_REGISTER_IDENT,
20            scrypto_encode(&ValidatorRegisterInput {}).unwrap(),
21        )?;
22
23        Ok(())
24    }
25
26    pub fn update_accept_delegated_stake<Y: SystemObjectApi<E>, E: SystemApiError>(
27        &self,
28        accept_delegated_stake: bool,
29        api: &mut Y,
30    ) -> Result<(), E> {
31        api.call_method(
32            self.0.as_node_id(),
33            VALIDATOR_UPDATE_ACCEPT_DELEGATED_STAKE_IDENT,
34            scrypto_encode(&ValidatorUpdateAcceptDelegatedStakeInput {
35                accept_delegated_stake,
36            })
37            .unwrap(),
38        )?;
39
40        Ok(())
41    }
42
43    pub fn accepts_delegated_stake<Y: SystemObjectApi<E>, E: SystemApiError>(
44        &self,
45        api: &mut Y,
46    ) -> Result<bool, E> {
47        let rtn = api.call_method(
48            self.0.as_node_id(),
49            VALIDATOR_ACCEPTS_DELEGATED_STAKE_IDENT,
50            scrypto_encode(&ValidatorAcceptsDelegatedStakeInput {}).unwrap(),
51        )?;
52
53        Ok(scrypto_decode(&rtn).unwrap())
54    }
55
56    pub fn stake<Y: SystemObjectApi<E>, E: SystemApiError>(
57        &self,
58        stake: Bucket,
59        api: &mut Y,
60    ) -> Result<Bucket, E> {
61        let rtn = api.call_method(
62            self.0.as_node_id(),
63            VALIDATOR_STAKE_IDENT,
64            scrypto_encode(&ValidatorStakeInput { stake }).unwrap(),
65        )?;
66
67        Ok(scrypto_decode(&rtn).unwrap())
68    }
69}