Skip to main content

Module bridge::bridge

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
Click to open
Fields

Struct BridgeInner​

public struct BridgeInner has store

Struct TokenDepositedEvent​

public struct TokenDepositedEvent has copy, drop
Click to open
Fields
seq_num: u64
source_chain: u8
sender_address: vector<u8>
target_chain: u8
target_address: vector<u8>
token_type: u8
amount: u64

Struct TokenDepositedEventV2​

public struct TokenDepositedEventV2 has copy, drop
Click to open
Fields
seq_num: u64
source_chain: u8
sender_address: vector<u8>
target_chain: u8
target_address: vector<u8>
token_type: u8
amount: u64
timestamp_ms: u64

Struct EmergencyOpEvent​

public struct EmergencyOpEvent has copy, drop
Click to open
Fields
frozen: bool

Struct BridgeRecord​

public struct BridgeRecord has drop, store
Click to open
Fields
message: bridge::message::BridgeMessage
verified_signatures: std::option::Option<vector<vector<u8>>>
claimed: bool

Struct TokenTransferApproved​

public struct TokenTransferApproved has copy, drop
Click to open
Fields

Struct TokenTransferClaimed​

public struct TokenTransferClaimed has copy, drop
Click to open
Fields

Struct TokenTransferAlreadyApproved​

public struct TokenTransferAlreadyApproved has copy, drop
Click to open
Fields

Struct TokenTransferAlreadyClaimed​

public struct TokenTransferAlreadyClaimed has copy, drop
Click to open
Fields

Struct TokenTransferLimitExceed​

public struct TokenTransferLimitExceed has copy, drop
Click to open
Fields

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<address, u64>, 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<u8>, http_rest_url: vector<u8>, ctx: &sui::tx_context::TxContext)

Function update_node_url​

public fun update_node_url(bridge: &mut bridge::bridge::Bridge, new_url: vector<u8>, ctx: &sui::tx_context::TxContext)

Function register_foreign_token​

public fun register_foreign_token<T>(bridge: &mut bridge::bridge::Bridge, tc: sui::coin::TreasuryCap<T>, uc: sui::package::UpgradeCap, metadata: &sui::coin::CoinMetadata<T>)

Function send_token​

public fun send_token<T>(bridge: &mut bridge::bridge::Bridge, target_chain: u8, target_address: vector<u8>, token: sui::coin::Coin<T>, ctx: &mut sui::tx_context::TxContext)

Function send_token_v2​

public fun send_token_v2<T>(bridge: &mut bridge::bridge::Bridge, target_chain: u8, target_address: vector<u8>, token: sui::coin::Coin<T>, 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<vector<u8>>)

Function claim_token​

public fun claim_token<T>(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<T>

Function claim_and_transfer_token​

public fun claim_and_transfer_token<T>(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<vector<u8>>)

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<vector<vector<u8>>>

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<T>(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<sui::coin::Coin<T>>, address)

Function send_token_internal​

fun send_token_internal<T>(inner: &mut bridge::bridge::BridgeInner, target_chain: u8, token: sui::coin::Coin<T>, 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<bridge::message::ParsedTokenTransferMessage>