# Module bridge::committee

*[Documentation index](/llms.txt) · [Full index](/llms-full.txt)*

```
use bridge::chain_ids;
use bridge::crypto;
use bridge::message;
use bridge::message_types;
use std::address;
use std::ascii;
use std::bcs;
use std::internal;
use std::option;
use std::string;
use std::type_name;
use std::u128;
use std::u64;
use std::vector;
use sui::accumulator;
use sui::accumulator_settlement;
use sui::address;
use sui::bag;
use sui::balance;
use sui::bcs;
use sui::coin;
use sui::config;
use sui::deny_list;
use sui::dynamic_field;
use sui::dynamic_object_field;
use sui::ecdsa_k1;
use sui::event;
use sui::funds_accumulator;
use sui::hash;
use sui::hex;
use sui::object;
use sui::party;
use sui::priority_queue;
use sui::protocol_config;
use sui::sui;
use sui::table;
use sui::table_vec;
use sui::transfer;
use sui::tx_context;
use sui::types;
use sui::url;
use sui::vec_map;
use sui::vec_set;
use sui::versioned;
use sui_system::stake_subsidy;
use sui_system::staking_pool;
use sui_system::storage_fund;
use sui_system::sui_system;
use sui_system::sui_system_state_inner;
use sui_system::validator;
use sui_system::validator_cap;
use sui_system::validator_set;
use sui_system::validator_wrapper;
use sui_system::voting_power;
```

## Struct BlocklistValidatorEvent

```
public struct BlocklistValidatorEvent has copy, drop
```

**Fields**

**blocklisted: bool**

**public_keys: vector&lt;vector&lt;u8&gt;&gt;**

## Struct BridgeCommittee

```
public struct BridgeCommittee has store
```

**Fields**

**members: sui::vec_map::VecMap&lt;vector&lt;u8&gt;, bridge::committee::CommitteeMember&gt;**

**member_registrations: sui::vec_map::VecMap&lt;address, bridge::committee::CommitteeMemberRegistration&gt;**

**last_committee_update_epoch: u64**

## Struct CommitteeUpdateEvent

```
public struct CommitteeUpdateEvent has copy, drop
```

**Fields**

**members: sui::vec_map::VecMap&lt;vector&lt;u8&gt;, bridge::committee::CommitteeMember&gt;**

**stake_participation_percentage: u64**

## Struct CommitteeMemberUrlUpdateEvent

```
public struct CommitteeMemberUrlUpdateEvent has copy, drop
```

**Fields**

**member: vector&lt;u8&gt;**

**new_url: vector&lt;u8&gt;**

## Struct CommitteeMember

```
public struct CommitteeMember has copy, drop, store
```

**Fields**

**sui_address: address**

The Sui Address of the validator

**bridge_pubkey_bytes: vector&lt;u8&gt;**

The public key bytes of the bridge key

**voting_power: u64**

Voting power, values are voting power in the scale of 10000.

**http_rest_url: vector&lt;u8&gt;**

The HTTP REST URL the member's node listens to
 it looks like b'https://127.0.0.1:9191'

**blocklisted: bool**

If this member is blocklisted

## Struct CommitteeMemberRegistration

```
public struct CommitteeMemberRegistration has copy, drop, store
```

**Fields**

**sui_address: address**

The Sui Address of the validator

**bridge_pubkey_bytes: vector&lt;u8&gt;**

The public key bytes of the bridge key

**http_rest_url: vector&lt;u8&gt;**

The HTTP REST URL the member's node listens to
 it looks like b'https://127.0.0.1:9191'

## Constants

```
const ESignatureBelowThreshold: u64 = 0;
```

```
const EDuplicatedSignature: u64 = 1;
```

```
const EInvalidSignature: u64 = 2;
```

```
const ENotSystemAddress: u64 = 3;
```

```
const EValidatorBlocklistContainsUnknownKey: u64 = 4;
```

```
const ESenderNotActiveValidator: u64 = 5;
```

```
const EInvalidPubkeyLength: u64 = 6;
```

```
const ECommitteeAlreadyInitiated: u64 = 7;
```

```
const EDuplicatePubkey: u64 = 8;
```

```
const ESenderIsNotInBridgeCommittee: u64 = 9;
```

```
const SUI_MESSAGE_PREFIX: vector&lt;u8&gt; = vector[83, 85, 73, 95, 66, 82, 73, 68, 71, 69, 95, 77, 69, 83, 83, 65, 71, 69];
```

```
const ECDSA_COMPRESSED_PUBKEY_LENGTH: u64 = 33;
```

## Function verify_signatures

```
public fun verify_signatures(self: &bridge::committee::BridgeCommittee, message: bridge::message::BridgeMessage, signatures: vector&lt;vector&lt;u8&gt;&gt;)
```

## Function create

```
public(package) fun create(ctx: &sui::tx_context::TxContext): bridge::committee::BridgeCommittee
```

## Function register

```
public(package) fun register(self: &mut bridge::committee::BridgeCommittee, system_state: &mut sui_system::sui_system::SuiSystemState, bridge_pubkey_bytes: vector&lt;u8&gt;, http_rest_url: vector&lt;u8&gt;, ctx: &sui::tx_context::TxContext)
```

## Function try_create_next_committee

```
public(package) fun try_create_next_committee(self: &mut bridge::committee::BridgeCommittee, active_validator_voting_power: sui::vec_map::VecMap&lt;address, u64&gt;, min_stake_participation_percentage: u64, ctx: &sui::tx_context::TxContext)
```

## Function execute_blocklist

```
public(package) fun execute_blocklist(self: &mut bridge::committee::BridgeCommittee, blocklist: bridge::message::Blocklist)
```

## Function committee_members

```
public(package) fun committee_members(self: &bridge::committee::BridgeCommittee): &sui::vec_map::VecMap&lt;vector&lt;u8&gt;, bridge::committee::CommitteeMember&gt;
```

## Function update_node_url

```
public(package) fun update_node_url(self: &mut bridge::committee::BridgeCommittee, new_url: vector&lt;u8&gt;, ctx: &sui::tx_context::TxContext)
```

## Function check_uniqueness_bridge_keys

```
fun check_uniqueness_bridge_keys(self: &bridge::committee::BridgeCommittee, bridge_pubkey_bytes: vector&lt;u8&gt;)
```
