# Module bridge::bridge

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

```
use bridge::chain_ids;
use bridge::committee;
use bridge::crypto;
use bridge::limiter;
use bridge::message;
use bridge::message_types;
use bridge::treasury;
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::clock;
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::linked_table;
use sui::object;
use sui::object_bag;
use sui::package;
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 Bridge

```
public struct Bridge has key
```

**Fields**

**id: sui::object::UID**

**inner: sui::versioned::Versioned**

## Struct BridgeInner

```
public struct BridgeInner has store
```

**Fields**

**bridge_version: u64**

**message_version: u8**

**chain_id: u8**

**sequence_nums: sui::vec_map::VecMap&lt;u8, u64&gt;**

**committee: bridge::committee::BridgeCommittee**

**treasury: bridge::treasury::BridgeTreasury**

**token_transfer_records: sui::linked_table::LinkedTable&lt;bridge::message::BridgeMessageKey, bridge::bridge::BridgeRecord&gt;**

**limiter: bridge::limiter::TransferLimiter**

**paused: bool**

## Struct TokenDepositedEvent

```
public struct TokenDepositedEvent has copy, drop
```

**Fields**

**seq_num: u64**

**source_chain: u8**

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

**target_chain: u8**

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

**token_type: u8**

**amount: u64**

## Struct TokenDepositedEventV2

```
public struct TokenDepositedEventV2 has copy, drop
```

**Fields**

**seq_num: u64**

**source_chain: u8**

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

**target_chain: u8**

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

**token_type: u8**

**amount: u64**

**timestamp_ms: u64**

## Struct EmergencyOpEvent

```
public struct EmergencyOpEvent has copy, drop
```

**Fields**

**frozen: bool**

## Struct BridgeRecord

```
public struct BridgeRecord has drop, store
```

**Fields**

**message: bridge::message::BridgeMessage**

**verified_signatures: std::option::Option&lt;vector&lt;vector&lt;u8&gt;&gt;&gt;**

**claimed: bool**

## Struct TokenTransferApproved

```
public struct TokenTransferApproved has copy, drop
```

**Fields**

**message_key: bridge::message::BridgeMessageKey**

## Struct TokenTransferClaimed

```
public struct TokenTransferClaimed has copy, drop
```

**Fields**

**message_key: bridge::message::BridgeMessageKey**

## Struct TokenTransferAlreadyApproved

```
public struct TokenTransferAlreadyApproved has copy, drop
```

**Fields**

**message_key: bridge::message::BridgeMessageKey**

## Struct TokenTransferAlreadyClaimed

```
public struct TokenTransferAlreadyClaimed has copy, drop
```

**Fields**

**message_key: bridge::message::BridgeMessageKey**

## Struct TokenTransferLimitExceed

```
public struct TokenTransferLimitExceed has copy, drop
```

**Fields**

**message_key: bridge::message::BridgeMessageKey**

## Constants

```
const MESSAGE_VERSION: u8 = 1;
```

```
const TRANSFER_STATUS_PENDING: u8 = 0;
```

```
const TRANSFER_STATUS_APPROVED: u8 = 1;
```

```
const TRANSFER_STATUS_CLAIMED: u8 = 2;
```

```
const TRANSFER_STATUS_NOT_FOUND: u8 = 3;
```

```
const EVM_ADDRESS_LENGTH: u64 = 20;
```

```
const EUnexpectedMessageType: u64 = 0;
```

```
const EUnauthorisedClaim: u64 = 1;
```

```
const EMalformedMessageError: u64 = 2;
```

```
const EUnexpectedTokenType: u64 = 3;
```

```
const EUnexpectedChainID: u64 = 4;
```

```
const ENotSystemAddress: u64 = 5;
```

```
const EUnexpectedSeqNum: u64 = 6;
```

```
const EWrongInnerVersion: u64 = 7;
```

```
const EBridgeUnavailable: u64 = 8;
```

```
const EUnexpectedOperation: u64 = 9;
```

```
const EInvariantSuiInitializedTokenTransferShouldNotBeClaimed: u64 = 10;
```

```
const EMessageNotFoundInRecords: u64 = 11;
```

```
const EUnexpectedMessageVersion: u64 = 12;
```

```
const EBridgeAlreadyPaused: u64 = 13;
```

```
const EBridgeNotPaused: u64 = 14;
```

```
const ETokenAlreadyClaimedOrHitLimit: u64 = 15;
```

```
const EInvalidBridgeRoute: u64 = 16;
```

```
const EMustBeTokenMessage: u64 = 17;
```

```
const EInvalidEvmAddress: u64 = 18;
```

```
const ETokenValueIsZero: u64 = 19;
```

```
const CURRENT_VERSION: u64 = 1;
```

## Function create

```
fun create(id: sui::object::UID, chain_id: u8, ctx: &mut sui::tx_context::TxContext)
```

## Function init_bridge_committee

```
fun init_bridge_committee(bridge: &mut bridge::bridge::Bridge, active_validator_voting_power: sui::vec_map::VecMap&lt;address, u64&gt;, min_stake_participation_percentage: u64, ctx: &sui::tx_context::TxContext)
```

## Function committee_registration

```
public fun committee_registration(bridge: &mut bridge::bridge::Bridge, 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 update_node_url

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

## Function register_foreign_token

```
public fun register_foreign_token&lt;T&gt;(bridge: &mut bridge::bridge::Bridge, tc: sui::coin::TreasuryCap&lt;T&gt;, uc: sui::package::UpgradeCap, metadata: &sui::coin::CoinMetadata&lt;T&gt;)
```

## Function send_token

```
public fun send_token&lt;T&gt;(bridge: &mut bridge::bridge::Bridge, target_chain: u8, target_address: vector&lt;u8&gt;, token: sui::coin::Coin&lt;T&gt;, ctx: &mut sui::tx_context::TxContext)
```

## Function send_token_v2

```
public fun send_token_v2&lt;T&gt;(bridge: &mut bridge::bridge::Bridge, target_chain: u8, target_address: vector&lt;u8&gt;, token: sui::coin::Coin&lt;T&gt;, clock: &sui::clock::Clock, ctx: &mut sui::tx_context::TxContext)
```

## Function approve_token_transfer

```
public fun approve_token_transfer(bridge: &mut bridge::bridge::Bridge, message: bridge::message::BridgeMessage, signatures: vector&lt;vector&lt;u8&gt;&gt;)
```

## Function claim_token

```
public fun claim_token&lt;T&gt;(bridge: &mut bridge::bridge::Bridge, clock: &sui::clock::Clock, source_chain: u8, bridge_seq_num: u64, ctx: &mut sui::tx_context::TxContext): sui::coin::Coin&lt;T&gt;
```

## Function claim_and_transfer_token

```
public fun claim_and_transfer_token&lt;T&gt;(bridge: &mut bridge::bridge::Bridge, clock: &sui::clock::Clock, source_chain: u8, bridge_seq_num: u64, ctx: &mut sui::tx_context::TxContext)
```

## Function execute_system_message

```
public fun execute_system_message(bridge: &mut bridge::bridge::Bridge, message: bridge::message::BridgeMessage, signatures: vector&lt;vector&lt;u8&gt;&gt;)
```

## Function get_token_transfer_action_status

```
fun get_token_transfer_action_status(bridge: &bridge::bridge::Bridge, source_chain: u8, bridge_seq_num: u64): u8
```

## Function get_token_transfer_action_signatures

```
fun get_token_transfer_action_signatures(bridge: &bridge::bridge::Bridge, source_chain: u8, bridge_seq_num: u64): std::option::Option&lt;vector&lt;vector&lt;u8&gt;&gt;&gt;
```

## Function load_inner

```
fun load_inner(bridge: &bridge::bridge::Bridge): &bridge::bridge::BridgeInner
```

## Function load_inner_mut

```
fun load_inner_mut(bridge: &mut bridge::bridge::Bridge): &mut bridge::bridge::BridgeInner
```

## Function claim_token_internal

```
fun claim_token_internal&lt;T&gt;(bridge: &mut bridge::bridge::Bridge, clock: &sui::clock::Clock, source_chain: u8, bridge_seq_num: u64, ctx: &mut sui::tx_context::TxContext): (std::option::Option&lt;sui::coin::Coin&lt;T&gt;&gt;, address)
```

## Function send_token_internal

```
fun send_token_internal&lt;T&gt;(inner: &mut bridge::bridge::BridgeInner, target_chain: u8, token: sui::coin::Coin&lt;T&gt;, message: bridge::message::BridgeMessage)
```

## Function execute_emergency_op

```
fun execute_emergency_op(inner: &mut bridge::bridge::BridgeInner, payload: bridge::message::EmergencyOp)
```

## Function execute_update_bridge_limit

```
fun execute_update_bridge_limit(inner: &mut bridge::bridge::BridgeInner, payload: bridge::message::UpdateBridgeLimit)
```

## Function execute_update_asset_price

```
fun execute_update_asset_price(inner: &mut bridge::bridge::BridgeInner, payload: bridge::message::UpdateAssetPrice)
```

## Function execute_add_tokens_on_sui

```
fun execute_add_tokens_on_sui(inner: &mut bridge::bridge::BridgeInner, payload: bridge::message::AddTokenOnSui)
```

## Function get_current_seq_num_and_increment

```
fun get_current_seq_num_and_increment(bridge: &mut bridge::bridge::BridgeInner, msg_type: u8): u64
```

## Function get_parsed_token_transfer_message

```
fun get_parsed_token_transfer_message(bridge: &bridge::bridge::Bridge, source_chain: u8, bridge_seq_num: u64): std::option::Option&lt;bridge::message::ParsedTokenTransferMessage&gt;
```
