radix_native_sdk/consensus_manager/
consensus_manager.rs

1use radix_common::crypto::Secp256k1PublicKey;
2use radix_common::data::scrypto::{scrypto_decode, scrypto_encode};
3use radix_common::math::Decimal;
4use radix_engine_interface::api::*;
5use radix_engine_interface::blueprints::consensus_manager::{
6    ConsensusManagerCreateValidatorInput, ConsensusManagerStartInput,
7    CONSENSUS_MANAGER_CREATE_VALIDATOR_IDENT, CONSENSUS_MANAGER_START_IDENT,
8};
9use radix_engine_interface::blueprints::resource::Bucket;
10use radix_engine_interface::types::ComponentAddress;
11use sbor::rust::fmt::Debug;
12
13#[derive(Debug)]
14pub struct ConsensusManager(pub ComponentAddress);
15
16impl ConsensusManager {
17    pub fn create_validator<Y: SystemObjectApi<E>, E: SystemApiError>(
18        &self,
19        key: Secp256k1PublicKey,
20        fee_factor: Decimal,
21        xrd_payment: Bucket,
22        api: &mut Y,
23    ) -> Result<(ComponentAddress, Bucket, Bucket), E> {
24        let rtn = api.call_method(
25            self.0.as_node_id(),
26            CONSENSUS_MANAGER_CREATE_VALIDATOR_IDENT,
27            scrypto_encode(&ConsensusManagerCreateValidatorInput {
28                key,
29                fee_factor,
30                xrd_payment,
31            })
32            .unwrap(),
33        )?;
34
35        Ok(scrypto_decode(&rtn).unwrap())
36    }
37
38    pub fn start<Y: SystemObjectApi<E>, E: SystemApiError>(&self, api: &mut Y) -> Result<(), E> {
39        api.call_method(
40            self.0.as_node_id(),
41            CONSENSUS_MANAGER_START_IDENT,
42            scrypto_encode(&ConsensusManagerStartInput {}).unwrap(),
43        )?;
44
45        Ok(())
46    }
47}