Module bridge::bridge
- Struct Bridge
- Struct BridgeInner
- Struct TokenDepositedEvent
- Struct TokenDepositedEventV2
- Struct EmergencyOpEvent
- Struct BridgeRecord
- Struct TokenTransferApproved
- Struct TokenTransferClaimed
- Struct TokenTransferAlreadyApproved
- Struct TokenTransferAlreadyClaimed
- Struct TokenTransferLimitExceed
- Constants
- Function create
- Function init_bridge_committee
- Function committee_registration
- Function update_node_url
- Function register_foreign_token
- Function send_token
- Function send_token_v2
- Function approve_token_transfer
- Function claim_token
- Function claim_and_transfer_token
- Function execute_system_message
- Function get_token_transfer_action_status
- Function get_token_transfer_action_signatures
- Function load_inner
- Function load_inner_mut
- Function claim_token_internal
- Function send_token_internal
- Function execute_emergency_op
- Function execute_update_bridge_limit
- Function execute_update_asset_price
- Function execute_add_tokens_on_sui
- Function get_current_seq_num_and_increment
- Function get_parsed_token_transfer_message
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
- id: sui::object::UID
- inner: sui::versioned::Versioned
Struct BridgeInner
public struct BridgeInner has store
Click to open
Fields
- bridge_version: u64
- message_version: u8
- chain_id: u8
- sequence_nums: sui::vec_map::VecMap<u8, u64>
- committee: bridge::committee::BridgeCommittee
- treasury: bridge::treasury::BridgeTreasury
- token_transfer_records: sui::linked_table::LinkedTable<bridge::message::BridgeMessageKey, bridge::bridge::BridgeRecord>
- limiter: bridge::limiter::TransferLimiter
- paused: bool
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
- message_key: bridge::message::BridgeMessageKey
Struct TokenTransferClaimed
public struct TokenTransferClaimed has copy, drop
Click to open
Fields
- message_key: bridge::message::BridgeMessageKey
Struct TokenTransferAlreadyApproved
public struct TokenTransferAlreadyApproved has copy, drop
Click to open
Fields
- message_key: bridge::message::BridgeMessageKey
Struct TokenTransferAlreadyClaimed
public struct TokenTransferAlreadyClaimed has copy, drop
Click to open
Fields
- message_key: bridge::message::BridgeMessageKey
Struct TokenTransferLimitExceed
public struct TokenTransferLimitExceed has copy, drop
Click to open
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<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>