aptos_network_sdk/
bridge.rs

1use crate::{Aptos, types::ContractCall, wallet::Wallet};
2use serde_json::{Value, json};
3use std::sync::Arc;
4
5/// Implementation of aptos system bridge.
6pub struct SystemBridge;
7
8impl SystemBridge {
9    /// Bridging assets to other chains
10    pub async fn bridge_asset(
11        client: Arc<Aptos>,
12        wallet: Arc<Wallet>,
13        target_chain: &str,
14        token_type: &str,
15        amount: u64,
16        recipient: &str,
17    ) -> Result<Value, String> {
18        let contract_call = ContractCall {
19            module_address: "0x1".to_string(),
20            module_name: "bridge".to_string(),
21            function_name: "transfer_to_chain".to_string(),
22            type_arguments: vec![token_type.to_string()],
23            arguments: vec![
24                json!(target_chain),
25                json!(amount.to_string()),
26                json!(recipient),
27            ],
28        };
29        crate::contract::Contract::write(client, wallet, contract_call)
30            .await
31            .map(|result| json!(result))
32    }
33
34    /// Collect assets from other links
35    pub async fn claim_bridged_asset(
36        client: Arc<Aptos>,
37        wallet: Arc<Wallet>,
38        source_chain: &str,
39        transaction_hash: &str,
40    ) -> Result<Value, String> {
41        let contract_call = ContractCall {
42            module_address: "0x1".to_string(),
43            module_name: "bridge".to_string(),
44            function_name: "claim_from_chain".to_string(),
45            type_arguments: vec![],
46            arguments: vec![json!(source_chain), json!(transaction_hash)],
47        };
48        crate::contract::Contract::write(client, wallet, contract_call)
49            .await
50            .map(|result| json!(result))
51    }
52}