radix-native-sdk 1.3.1

A library for developing native blueprints, from the Radix DLT project.
Documentation
use radix_common::data::scrypto::{scrypto_decode, scrypto_encode};
use radix_engine_interface::api::*;
use radix_engine_interface::blueprints::consensus_manager::{
    ValidatorAcceptsDelegatedStakeInput, ValidatorRegisterInput, ValidatorStakeInput,
    ValidatorUpdateAcceptDelegatedStakeInput, VALIDATOR_ACCEPTS_DELEGATED_STAKE_IDENT,
    VALIDATOR_REGISTER_IDENT, VALIDATOR_STAKE_IDENT, VALIDATOR_UPDATE_ACCEPT_DELEGATED_STAKE_IDENT,
};
use radix_engine_interface::blueprints::resource::Bucket;
use radix_engine_interface::types::ComponentAddress;
use sbor::rust::fmt::Debug;

#[derive(Debug)]
pub struct Validator(pub ComponentAddress);

impl Validator {
    pub fn register<Y: SystemObjectApi<E>, E: SystemApiError>(&self, api: &mut Y) -> Result<(), E> {
        api.call_method(
            self.0.as_node_id(),
            VALIDATOR_REGISTER_IDENT,
            scrypto_encode(&ValidatorRegisterInput {}).unwrap(),
        )?;

        Ok(())
    }

    pub fn update_accept_delegated_stake<Y: SystemObjectApi<E>, E: SystemApiError>(
        &self,
        accept_delegated_stake: bool,
        api: &mut Y,
    ) -> Result<(), E> {
        api.call_method(
            self.0.as_node_id(),
            VALIDATOR_UPDATE_ACCEPT_DELEGATED_STAKE_IDENT,
            scrypto_encode(&ValidatorUpdateAcceptDelegatedStakeInput {
                accept_delegated_stake,
            })
            .unwrap(),
        )?;

        Ok(())
    }

    pub fn accepts_delegated_stake<Y: SystemObjectApi<E>, E: SystemApiError>(
        &self,
        api: &mut Y,
    ) -> Result<bool, E> {
        let rtn = api.call_method(
            self.0.as_node_id(),
            VALIDATOR_ACCEPTS_DELEGATED_STAKE_IDENT,
            scrypto_encode(&ValidatorAcceptsDelegatedStakeInput {}).unwrap(),
        )?;

        Ok(scrypto_decode(&rtn).unwrap())
    }

    pub fn stake<Y: SystemObjectApi<E>, E: SystemApiError>(
        &self,
        stake: Bucket,
        api: &mut Y,
    ) -> Result<Bucket, E> {
        let rtn = api.call_method(
            self.0.as_node_id(),
            VALIDATOR_STAKE_IDENT,
            scrypto_encode(&ValidatorStakeInput { stake }).unwrap(),
        )?;

        Ok(scrypto_decode(&rtn).unwrap())
    }
}