eigensdk_types/
operator.rs1use 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}