eigensdk_types/
operator.rs

1use eigensdk_crypto_bls::attestation::{G1Point, G2Point};
2use ethers::types::{Address, U256};
3use num_bigint::BigUint;
4const MAX_NUMBER_OF_QUORUMS: usize = 192;
5
6pub fn bitmap_to_quorum_ids(quorum_bitmaps: U256) -> Vec<u8> {
7    let mut bytes: [u8; 32] = [0u8; 32];
8    quorum_bitmaps.to_big_endian(&mut bytes);
9
10    let mut quorum_ids: Vec<u8> = Vec::with_capacity(MAX_NUMBER_OF_QUORUMS);
11
12    for i in 0..MAX_NUMBER_OF_QUORUMS {
13        let bitmap = BigUint::from_bytes_be(&bytes);
14        if bitmap.bit(i.try_into().unwrap()) {
15            quorum_ids.push(i.try_into().unwrap());
16        }
17    }
18    quorum_ids
19}
20
21pub struct OperatorPubKeys {
22    pub g1_pub_key: G1Point,
23    pub g2_pub_key: G2Point,
24}
25
26pub struct Operator {
27    address: Address,
28    earnings_receiver_address: Address,
29    delegation_approver_address: Address,
30    staker_opt_out_window_blocks: u32,
31    metadata_url: String,
32}
33
34impl Operator {
35    pub fn new(
36        address: Address,
37        earnings_receiver_address: Address,
38        delegation_approver_address: Address,
39        staker_opt_out_window_blocks: u32,
40        metadata_url: Option<String>,
41    ) -> Self {
42        Operator {
43            address,
44            earnings_receiver_address,
45            delegation_approver_address,
46            staker_opt_out_window_blocks,
47            metadata_url: metadata_url.unwrap(),
48        }
49    }
50
51    pub fn address(&mut self, address: Address) {
52        self.address = address;
53    }
54
55    pub fn metadata_url(&mut self, metadata: String) {
56        self.metadata_url = metadata;
57    }
58
59    pub fn earnings_receiver_address(&mut self, address: Address) {
60        self.earnings_receiver_address = address;
61    }
62
63    pub fn delegation_approver_address(&mut self, address: Address) {
64        self.delegation_approver_address = address;
65    }
66
67    pub fn staker_opt_out_window_blocks(&mut self, block: u32) {
68        self.staker_opt_out_window_blocks = block;
69    }
70
71    pub fn has_address(&self) -> Address {
72        self.address
73    }
74
75    pub fn has_metadata_url(&self) -> String {
76        self.metadata_url.clone()
77    }
78
79    pub fn has_earnings_receiver_address(&self) -> Address {
80        self.earnings_receiver_address
81    }
82
83    pub fn has_delegation_approver_address(&self) -> Address {
84        self.delegation_approver_address
85    }
86
87    pub fn has_staker_opt_out_window_blocks(&self) -> u32 {
88        self.staker_opt_out_window_blocks
89    }
90}