radix_native_sdk/consensus_manager/
consensus_manager.rs1use 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}