crates/sui-framework/docs/bridge/message.md
BridgeMessageBridgeMessageKeyTokenTransferPayloadTokenTransferPayloadV2EmergencyOpBlocklistUpdateBridgeLimitUpdateAssetPriceAddTokenOnSuiParsedTokenTransferMessageextract_token_bridge_payloadextract_token_bridge_payload_v2to_token_payload_v1extract_emergency_op_payloadextract_blocklist_payloadextract_update_bridge_limitextract_update_asset_priceextract_add_tokens_on_suiserialize_messagecreate_token_bridge_messagecreate_token_bridge_message_v2create_emergency_op_messagecreate_blocklist_messagecreate_update_bridge_limit_messagecreate_update_asset_price_messagecreate_add_tokens_on_sui_messagecreate_keykeymessage_versionmessage_typeseq_numsource_chainpayloadtoken_target_chaintoken_target_addresstoken_typetoken_amounttimestamp_msemergency_op_typeblocklist_typeblocklist_validator_addressesupdate_bridge_limit_payload_sending_chainupdate_bridge_limit_payload_receiving_chainupdate_bridge_limit_payload_limitupdate_asset_price_payload_token_idupdate_asset_price_payload_new_priceis_nativetoken_idstoken_type_namestoken_pricesemergency_op_pauseemergency_op_unpauserequired_voting_powerto_parsed_token_transfer_messagetoken_transfer_message_versionreverse_bytespeel_u64_be<a name="bridge_message_BridgeMessage"></a>
BridgeMessage<a name="bridge_message_BridgeMessageKey"></a>
BridgeMessageKey<a name="bridge_message_TokenTransferPayload"></a>
TokenTransferPayload<a name="bridge_message_TokenTransferPayloadV2"></a>
TokenTransferPayloadV2<a name="bridge_message_EmergencyOp"></a>
EmergencyOp<a name="bridge_message_Blocklist"></a>
Blocklist<a name="bridge_message_UpdateBridgeLimit"></a>
UpdateBridgeLimit<a name="bridge_message_UpdateAssetPrice"></a>
UpdateAssetPrice<a name="bridge_message_AddTokenOnSui"></a>
AddTokenOnSui<a name="bridge_message_ParsedTokenTransferMessage"></a>
ParsedTokenTransferMessage<a name="@Constants_0"></a>
<a name="bridge_message_CURRENT_MESSAGE_VERSION"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_CURRENT_MESSAGE_VERSION">CURRENT_MESSAGE_VERSION</a>: u8 = 1; </code></pre><a name="bridge_message_TOKEN_TRANSFER_MESSAGE_VERSION_V2"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_TOKEN_TRANSFER_MESSAGE_VERSION_V2">TOKEN_TRANSFER_MESSAGE_VERSION_V2</a>: u8 = 2; </code></pre><a name="bridge_message_ECDSA_ADDRESS_LENGTH"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_ECDSA_ADDRESS_LENGTH">ECDSA_ADDRESS_LENGTH</a>: u64 = 20; </code></pre><a name="bridge_message_ETrailingBytes"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_ETrailingBytes">ETrailingBytes</a>: u64 = 0; </code></pre><a name="bridge_message_EInvalidAddressLength"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_EInvalidAddressLength">EInvalidAddressLength</a>: u64 = 1; </code></pre><a name="bridge_message_EEmptyList"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_EEmptyList">EEmptyList</a>: u64 = 2; </code></pre><a name="bridge_message_EInvalidMessageType"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_EInvalidMessageType">EInvalidMessageType</a>: u64 = 3; </code></pre><a name="bridge_message_EInvalidEmergencyOpType"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_EInvalidEmergencyOpType">EInvalidEmergencyOpType</a>: u64 = 4; </code></pre><a name="bridge_message_EInvalidPayloadLength"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_EInvalidPayloadLength">EInvalidPayloadLength</a>: u64 = 5; </code></pre><a name="bridge_message_EMustBeTokenMessage"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_EMustBeTokenMessage">EMustBeTokenMessage</a>: u64 = 6; </code></pre><a name="bridge_message_EInvalidMessageVersion"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_EInvalidMessageVersion">EInvalidMessageVersion</a>: u64 = 7; </code></pre><a name="bridge_message_PAUSE"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_PAUSE">PAUSE</a>: u8 = 0; </code></pre><a name="bridge_message_UNPAUSE"></a>
<pre><code><b>const</b> <a href="../bridge/message.md#bridge_message_UNPAUSE">UNPAUSE</a>: u8 = 1; </code></pre><a name="bridge_message_extract_token_bridge_payload"></a>
extract_token_bridge_payload<a name="bridge_message_extract_token_bridge_payload_v2"></a>
extract_token_bridge_payload_v2<a name="bridge_message_to_token_payload_v1"></a>
to_token_payload_v1<a name="bridge_message_extract_emergency_op_payload"></a>
extract_emergency_op_payloadEmergency op payload is just a single byte
<pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_extract_emergency_op_payload">extract_emergency_op_payload</a>(<a href="../bridge/message.md#bridge_message">message</a>: &<a href="../bridge/message.md#bridge_message_BridgeMessage">bridge::message::BridgeMessage</a>): <a href="../bridge/message.md#bridge_message_EmergencyOp">bridge::message::EmergencyOp</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_extract_emergency_op_payload">extract_emergency_op_payload</a>(<a href="../bridge/message.md#bridge_message">message</a>: &<a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a>): <a href="../bridge/message.md#bridge_message_EmergencyOp">EmergencyOp</a> { <b>assert</b>!(<a href="../bridge/message.md#bridge_message">message</a>.<a href="../bridge/message.md#bridge_message_payload">payload</a>.length() == 1, <a href="../bridge/message.md#bridge_message_ETrailingBytes">ETrailingBytes</a>); <a href="../bridge/message.md#bridge_message_EmergencyOp">EmergencyOp</a> { op_type: <a href="../bridge/message.md#bridge_message">message</a>.<a href="../bridge/message.md#bridge_message_payload">payload</a>[0] } } </code></pre> </details><a name="bridge_message_extract_blocklist_payload"></a>
extract_blocklist_payload<a name="bridge_message_extract_update_bridge_limit"></a>
extract_update_bridge_limit<a name="bridge_message_extract_update_asset_price"></a>
extract_update_asset_price<a name="bridge_message_extract_add_tokens_on_sui"></a>
extract_add_tokens_on_sui<a name="bridge_message_serialize_message"></a>
serialize_message<a name="bridge_message_create_token_bridge_message"></a>
create_token_bridge_messageToken Transfer Message Format: [message_type: u8] [version:u8] [nonce:u64] [source_chain: u8] [sender_address_length:u8] [sender_address: byte[]] [target_chain:u8] [target_address_length:u8] [target_address: byte[]] [token_type:u8] [amount:u64]
<pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_token_bridge_message">create_token_bridge_message</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, sender_address: vector<u8>, target_chain: u8, target_address: vector<u8>, <a href="../bridge/message.md#bridge_message_token_type">token_type</a>: u8, amount: u64): <a href="../bridge/message.md#bridge_message_BridgeMessage">bridge::message::BridgeMessage</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_token_bridge_message">create_token_bridge_message</a>( <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, sender_address: vector<u8>, target_chain: u8, target_address: vector<u8>, <a href="../bridge/message.md#bridge_message_token_type">token_type</a>: u8, amount: u64, ): <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/chain_ids.md#bridge_chain_ids_assert_valid_chain_id">chain_ids::assert_valid_chain_id</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>); <a href="../bridge/chain_ids.md#bridge_chain_ids_assert_valid_chain_id">chain_ids::assert_valid_chain_id</a>(target_chain); <b>let</b> <b>mut</b> <a href="../bridge/message.md#bridge_message_payload">payload</a> = vector[]; // sender <b>address</b> should be less than 255 bytes so can fit into u8 <a href="../bridge/message.md#bridge_message_payload">payload</a>.push_back((vector::length(&sender_address) <b>as</b> u8)); <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(sender_address); <a href="../bridge/message.md#bridge_message_payload">payload</a>.push_back(target_chain); // target <b>address</b> should be less than 255 bytes so can fit into u8 <a href="../bridge/message.md#bridge_message_payload">payload</a>.push_back((vector::length(&target_address) <b>as</b> u8)); <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(target_address); <a href="../bridge/message.md#bridge_message_payload">payload</a>.push_back(<a href="../bridge/message.md#bridge_message_token_type">token_type</a>); // bcs serialzies u64 <b>as</b> 8 bytes <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(<a href="../bridge/message.md#bridge_message_reverse_bytes">reverse_bytes</a>(bcs::to_bytes(&amount))); <b>assert</b>!(vector::length(&<a href="../bridge/message.md#bridge_message_payload">payload</a>) == 64, <a href="../bridge/message.md#bridge_message_EInvalidPayloadLength">EInvalidPayloadLength</a>); <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/message.md#bridge_message_message_type">message_type</a>: <a href="../bridge/message_types.md#bridge_message_types_token">message_types::token</a>(), <a href="../bridge/message.md#bridge_message_message_version">message_version</a>: <a href="../bridge/message.md#bridge_message_CURRENT_MESSAGE_VERSION">CURRENT_MESSAGE_VERSION</a>, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>, <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>, <a href="../bridge/message.md#bridge_message_payload">payload</a>, } } </code></pre> </details><a name="bridge_message_create_token_bridge_message_v2"></a>
create_token_bridge_message_v2Token Transfer Message Format: [message_type: u8] [version:u8] [nonce:u64] [source_chain: u8] [sender_address_length:u8] [sender_address: byte[]] [target_chain:u8] [target_address_length:u8] [target_address: byte[]] [token_type:u8] [amount:u64] [timestamp:u64]
<pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_token_bridge_message_v2">create_token_bridge_message_v2</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, sender_address: vector<u8>, target_chain: u8, target_address: vector<u8>, <a href="../bridge/message.md#bridge_message_token_type">token_type</a>: u8, amount: u64, timestamp: u64): <a href="../bridge/message.md#bridge_message_BridgeMessage">bridge::message::BridgeMessage</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_token_bridge_message_v2">create_token_bridge_message_v2</a>( <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, sender_address: vector<u8>, target_chain: u8, target_address: vector<u8>, <a href="../bridge/message.md#bridge_message_token_type">token_type</a>: u8, amount: u64, timestamp: u64, ): <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/chain_ids.md#bridge_chain_ids_assert_valid_chain_id">chain_ids::assert_valid_chain_id</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>); <a href="../bridge/chain_ids.md#bridge_chain_ids_assert_valid_chain_id">chain_ids::assert_valid_chain_id</a>(target_chain); <b>let</b> <b>mut</b> <a href="../bridge/message.md#bridge_message_payload">payload</a> = vector[]; // sender <b>address</b> should be less than 255 bytes so can fit into u8 <a href="../bridge/message.md#bridge_message_payload">payload</a>.push_back((vector::length(&sender_address) <b>as</b> u8)); <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(sender_address); <a href="../bridge/message.md#bridge_message_payload">payload</a>.push_back(target_chain); // target <b>address</b> should be less than 255 bytes so can fit into u8 <a href="../bridge/message.md#bridge_message_payload">payload</a>.push_back((vector::length(&target_address) <b>as</b> u8)); <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(target_address); <a href="../bridge/message.md#bridge_message_payload">payload</a>.push_back(<a href="../bridge/message.md#bridge_message_token_type">token_type</a>); // bcs serialzies u64 <b>as</b> 8 bytes <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(<a href="../bridge/message.md#bridge_message_reverse_bytes">reverse_bytes</a>(bcs::to_bytes(&amount))); <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(<a href="../bridge/message.md#bridge_message_reverse_bytes">reverse_bytes</a>(bcs::to_bytes(×tamp))); <b>assert</b>!(vector::length(&<a href="../bridge/message.md#bridge_message_payload">payload</a>) == 72, <a href="../bridge/message.md#bridge_message_EInvalidPayloadLength">EInvalidPayloadLength</a>); <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/message.md#bridge_message_message_type">message_type</a>: <a href="../bridge/message_types.md#bridge_message_types_token">message_types::token</a>(), <a href="../bridge/message.md#bridge_message_message_version">message_version</a>: <a href="../bridge/message.md#bridge_message_TOKEN_TRANSFER_MESSAGE_VERSION_V2">TOKEN_TRANSFER_MESSAGE_VERSION_V2</a>, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>, <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>, <a href="../bridge/message.md#bridge_message_payload">payload</a>, } } </code></pre> </details><a name="bridge_message_create_emergency_op_message"></a>
create_emergency_op_messageEmergency Op Message Format: [message_type: u8] [version:u8] [nonce:u64] [chain_id: u8] [op_type: u8]
<pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_emergency_op_message">create_emergency_op_message</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, op_type: u8): <a href="../bridge/message.md#bridge_message_BridgeMessage">bridge::message::BridgeMessage</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_emergency_op_message">create_emergency_op_message</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, op_type: u8): <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/chain_ids.md#bridge_chain_ids_assert_valid_chain_id">chain_ids::assert_valid_chain_id</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>); <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/message.md#bridge_message_message_type">message_type</a>: <a href="../bridge/message_types.md#bridge_message_types_emergency_op">message_types::emergency_op</a>(), <a href="../bridge/message.md#bridge_message_message_version">message_version</a>: <a href="../bridge/message.md#bridge_message_CURRENT_MESSAGE_VERSION">CURRENT_MESSAGE_VERSION</a>, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>, <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>, <a href="../bridge/message.md#bridge_message_payload">payload</a>: vector[op_type], } } </code></pre> </details><a name="bridge_message_create_blocklist_message"></a>
create_blocklist_messageBlocklist Message Format: [message_type: u8] [version:u8] [nonce:u64] [chain_id: u8] [blocklist_type: u8] [validator_length: u8] [validator_ecdsa_addresses: byte[][]]
<pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_blocklist_message">create_blocklist_message</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, <a href="../bridge/message.md#bridge_message_blocklist_type">blocklist_type</a>: u8, validator_ecdsa_addresses: vector<vector<u8>>): <a href="../bridge/message.md#bridge_message_BridgeMessage">bridge::message::BridgeMessage</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_blocklist_message">create_blocklist_message</a>( <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, // 0: block, 1: unblock <a href="../bridge/message.md#bridge_message_blocklist_type">blocklist_type</a>: u8, validator_ecdsa_addresses: vector<vector<u8>>, ): <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/chain_ids.md#bridge_chain_ids_assert_valid_chain_id">chain_ids::assert_valid_chain_id</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>); <b>let</b> address_length = validator_ecdsa_addresses.length(); <b>let</b> <b>mut</b> <a href="../bridge/message.md#bridge_message_payload">payload</a> = vector[<a href="../bridge/message.md#bridge_message_blocklist_type">blocklist_type</a>, (address_length <b>as</b> u8)]; <b>let</b> <b>mut</b> i = 0; <b>while</b> (i < address_length) { <b>let</b> <b>address</b> = validator_ecdsa_addresses[i]; <b>assert</b>!(<b>address</b>.length() == <a href="../bridge/message.md#bridge_message_ECDSA_ADDRESS_LENGTH">ECDSA_ADDRESS_LENGTH</a>, <a href="../bridge/message.md#bridge_message_EInvalidAddressLength">EInvalidAddressLength</a>); <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(<b>address</b>); i = i + 1; }; <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/message.md#bridge_message_message_type">message_type</a>: <a href="../bridge/message_types.md#bridge_message_types_committee_blocklist">message_types::committee_blocklist</a>(), <a href="../bridge/message.md#bridge_message_message_version">message_version</a>: <a href="../bridge/message.md#bridge_message_CURRENT_MESSAGE_VERSION">CURRENT_MESSAGE_VERSION</a>, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>, <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>, <a href="../bridge/message.md#bridge_message_payload">payload</a>, } } </code></pre> </details><a name="bridge_message_create_update_bridge_limit_message"></a>
create_update_bridge_limit_messageUpdate bridge limit Message Format: [message_type: u8] [version:u8] [nonce:u64] [receiving_chain_id: u8] [sending_chain_id: u8] [new_limit: u64]
<pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_update_bridge_limit_message">create_update_bridge_limit_message</a>(receiving_chain: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, sending_chain: u8, new_limit: u64): <a href="../bridge/message.md#bridge_message_BridgeMessage">bridge::message::BridgeMessage</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_update_bridge_limit_message">create_update_bridge_limit_message</a>( receiving_chain: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, sending_chain: u8, new_limit: u64, ): <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/chain_ids.md#bridge_chain_ids_assert_valid_chain_id">chain_ids::assert_valid_chain_id</a>(receiving_chain); <a href="../bridge/chain_ids.md#bridge_chain_ids_assert_valid_chain_id">chain_ids::assert_valid_chain_id</a>(sending_chain); <b>let</b> <b>mut</b> <a href="../bridge/message.md#bridge_message_payload">payload</a> = vector[sending_chain]; <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(<a href="../bridge/message.md#bridge_message_reverse_bytes">reverse_bytes</a>(bcs::to_bytes(&new_limit))); <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/message.md#bridge_message_message_type">message_type</a>: <a href="../bridge/message_types.md#bridge_message_types_update_bridge_limit">message_types::update_bridge_limit</a>(), <a href="../bridge/message.md#bridge_message_message_version">message_version</a>: <a href="../bridge/message.md#bridge_message_CURRENT_MESSAGE_VERSION">CURRENT_MESSAGE_VERSION</a>, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>, <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: receiving_chain, <a href="../bridge/message.md#bridge_message_payload">payload</a>, } } </code></pre> </details><a name="bridge_message_create_update_asset_price_message"></a>
create_update_asset_price_messageUpdate asset price message [message_type: u8] [version:u8] [nonce:u64] [chain_id: u8] [token_id: u8] [new_price:u64]
<pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_update_asset_price_message">create_update_asset_price_message</a>(token_id: u8, <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, new_price: u64): <a href="../bridge/message.md#bridge_message_BridgeMessage">bridge::message::BridgeMessage</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_update_asset_price_message">create_update_asset_price_message</a>( token_id: u8, <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, new_price: u64, ): <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/chain_ids.md#bridge_chain_ids_assert_valid_chain_id">chain_ids::assert_valid_chain_id</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>); <b>let</b> <b>mut</b> <a href="../bridge/message.md#bridge_message_payload">payload</a> = vector[token_id]; <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(<a href="../bridge/message.md#bridge_message_reverse_bytes">reverse_bytes</a>(bcs::to_bytes(&new_price))); <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/message.md#bridge_message_message_type">message_type</a>: <a href="../bridge/message_types.md#bridge_message_types_update_asset_price">message_types::update_asset_price</a>(), <a href="../bridge/message.md#bridge_message_message_version">message_version</a>: <a href="../bridge/message.md#bridge_message_CURRENT_MESSAGE_VERSION">CURRENT_MESSAGE_VERSION</a>, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>, <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>, <a href="../bridge/message.md#bridge_message_payload">payload</a>, } } </code></pre> </details><a name="bridge_message_create_add_tokens_on_sui_message"></a>
create_add_tokens_on_sui_messageUpdate Sui token message [message_type:u8] [version:u8] [nonce:u64] [chain_id: u8] [native_token:bool] [token_ids:vector<u8>] [token_type_name:vector<String>] [token_prices:vector<u64>]
<pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_add_tokens_on_sui_message">create_add_tokens_on_sui_message</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, native_token: bool, <a href="../bridge/message.md#bridge_message_token_ids">token_ids</a>: vector<u8>, type_names: vector<<a href="../std/ascii.md#std_ascii_String">std::ascii::String</a>>, <a href="../bridge/message.md#bridge_message_token_prices">token_prices</a>: vector<u64>): <a href="../bridge/message.md#bridge_message_BridgeMessage">bridge::message::BridgeMessage</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_create_add_tokens_on_sui_message">create_add_tokens_on_sui_message</a>( <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>: u8, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>: u64, native_token: bool, <a href="../bridge/message.md#bridge_message_token_ids">token_ids</a>: vector<u8>, type_names: vector<String>, <a href="../bridge/message.md#bridge_message_token_prices">token_prices</a>: vector<u64>, ): <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/chain_ids.md#bridge_chain_ids_assert_valid_chain_id">chain_ids::assert_valid_chain_id</a>(<a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>); <b>let</b> <b>mut</b> <a href="../bridge/message.md#bridge_message_payload">payload</a> = bcs::to_bytes(&native_token); <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(bcs::to_bytes(&<a href="../bridge/message.md#bridge_message_token_ids">token_ids</a>)); <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(bcs::to_bytes(&type_names)); <a href="../bridge/message.md#bridge_message_payload">payload</a>.append(bcs::to_bytes(&<a href="../bridge/message.md#bridge_message_token_prices">token_prices</a>)); <a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a> { <a href="../bridge/message.md#bridge_message_message_type">message_type</a>: <a href="../bridge/message_types.md#bridge_message_types_add_tokens_on_sui">message_types::add_tokens_on_sui</a>(), <a href="../bridge/message.md#bridge_message_message_version">message_version</a>: <a href="../bridge/message.md#bridge_message_CURRENT_MESSAGE_VERSION">CURRENT_MESSAGE_VERSION</a>, <a href="../bridge/message.md#bridge_message_seq_num">seq_num</a>, <a href="../bridge/message.md#bridge_message_source_chain">source_chain</a>, <a href="../bridge/message.md#bridge_message_payload">payload</a>, } } </code></pre> </details><a name="bridge_message_create_key"></a>
create_key<a name="bridge_message_key"></a>
key<a name="bridge_message_message_version"></a>
message_version<a name="bridge_message_message_type"></a>
message_type<a name="bridge_message_seq_num"></a>
seq_num<a name="bridge_message_source_chain"></a>
source_chain<a name="bridge_message_payload"></a>
payload<a name="bridge_message_token_target_chain"></a>
token_target_chain<a name="bridge_message_token_target_address"></a>
token_target_address<a name="bridge_message_token_type"></a>
token_type<a name="bridge_message_token_amount"></a>
token_amount<a name="bridge_message_timestamp_ms"></a>
timestamp_ms<a name="bridge_message_emergency_op_type"></a>
emergency_op_type<a name="bridge_message_blocklist_type"></a>
blocklist_type<a name="bridge_message_blocklist_validator_addresses"></a>
blocklist_validator_addresses<a name="bridge_message_update_bridge_limit_payload_sending_chain"></a>
update_bridge_limit_payload_sending_chain<a name="bridge_message_update_bridge_limit_payload_receiving_chain"></a>
update_bridge_limit_payload_receiving_chain<a name="bridge_message_update_bridge_limit_payload_limit"></a>
update_bridge_limit_payload_limit<a name="bridge_message_update_asset_price_payload_token_id"></a>
update_asset_price_payload_token_id<a name="bridge_message_update_asset_price_payload_new_price"></a>
update_asset_price_payload_new_price<a name="bridge_message_is_native"></a>
is_native<a name="bridge_message_token_ids"></a>
token_ids<a name="bridge_message_token_type_names"></a>
token_type_names<a name="bridge_message_token_prices"></a>
token_prices<a name="bridge_message_emergency_op_pause"></a>
emergency_op_pause<a name="bridge_message_emergency_op_unpause"></a>
emergency_op_unpause<a name="bridge_message_required_voting_power"></a>
required_voting_powerReturn the required signature threshold for the message, values are voting power in the scale of 10000
<pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_required_voting_power">required_voting_power</a>(self: &<a href="../bridge/message.md#bridge_message_BridgeMessage">bridge::message::BridgeMessage</a>): u64 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../bridge/message.md#bridge_message_required_voting_power">required_voting_power</a>(self: &<a href="../bridge/message.md#bridge_message_BridgeMessage">BridgeMessage</a>): u64 { <b>let</b> <a href="../bridge/message.md#bridge_message_message_type">message_type</a> = <a href="../bridge/message.md#bridge_message_message_type">message_type</a>(self); <b>if</b> (<a href="../bridge/message.md#bridge_message_message_type">message_type</a> == <a href="../bridge/message_types.md#bridge_message_types_token">message_types::token</a>()) { 3334 } <b>else</b> <b>if</b> (<a href="../bridge/message.md#bridge_message_message_type">message_type</a> == <a href="../bridge/message_types.md#bridge_message_types_emergency_op">message_types::emergency_op</a>()) { <b>let</b> <a href="../bridge/message.md#bridge_message_payload">payload</a> = <a href="../bridge/message.md#bridge_message_extract_emergency_op_payload">extract_emergency_op_payload</a>(self); <b>if</b> (<a href="../bridge/message.md#bridge_message_payload">payload</a>.op_type == <a href="../bridge/message.md#bridge_message_PAUSE">PAUSE</a>) { 450 } <b>else</b> <b>if</b> (<a href="../bridge/message.md#bridge_message_payload">payload</a>.op_type == <a href="../bridge/message.md#bridge_message_UNPAUSE">UNPAUSE</a>) { 5001 } <b>else</b> { <b>abort</b> <a href="../bridge/message.md#bridge_message_EInvalidEmergencyOpType">EInvalidEmergencyOpType</a> } } <b>else</b> <b>if</b> (<a href="../bridge/message.md#bridge_message_message_type">message_type</a> == <a href="../bridge/message_types.md#bridge_message_types_committee_blocklist">message_types::committee_blocklist</a>()) { 5001 } <b>else</b> <b>if</b> (<a href="../bridge/message.md#bridge_message_message_type">message_type</a> == <a href="../bridge/message_types.md#bridge_message_types_update_asset_price">message_types::update_asset_price</a>()) { 5001 } <b>else</b> <b>if</b> (<a href="../bridge/message.md#bridge_message_message_type">message_type</a> == <a href="../bridge/message_types.md#bridge_message_types_update_bridge_limit">message_types::update_bridge_limit</a>()) { 5001 } <b>else</b> <b>if</b> (<a href="../bridge/message.md#bridge_message_message_type">message_type</a> == <a href="../bridge/message_types.md#bridge_message_types_add_tokens_on_sui">message_types::add_tokens_on_sui</a>()) { 5001 } <b>else</b> { <b>abort</b> <a href="../bridge/message.md#bridge_message_EInvalidMessageType">EInvalidMessageType</a> } } </code></pre> </details><a name="bridge_message_to_parsed_token_transfer_message"></a>
to_parsed_token_transfer_message<a name="bridge_message_token_transfer_message_version"></a>
token_transfer_message_version<a name="bridge_message_reverse_bytes"></a>
reverse_bytes<a name="bridge_message_peel_u64_be"></a>
peel_u64_be