1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use crate::{
    make_contract_call::{MakeContractCall, SignedContractCallOptions, ANY},
    peg_wallet::{PegWalletAddress, StacksWallet},
    stacks_node::{PegInOp, PegOutRequestOp},
    stacks_transaction::StacksTransaction,
};

pub struct StacksWalletJs {
    make_contract_call: MakeContractCall,
    contract_address: String,
    sender_key: String,
}

impl StacksWalletJs {
    pub fn new(path: &str, contract_address: String, sender_key: String) -> Self {
        Self {
            make_contract_call: MakeContractCall::new(path),
            contract_address,
            sender_key,
        }
    }
    fn call(&mut self, function_name: String) -> StacksTransaction {
        let input = SignedContractCallOptions {
            contractAddress: self.contract_address.clone(),
            contractName: "".to_string(),
            functionName: function_name,
            functionArgs: Vec::default(),
            fee: Some(0.to_string()),
            feeEstimateApiUrl: None,
            nonce: None,
            network: None,
            anchorMode: ANY,
            postConditionMode: None,
            postConditions: None,
            validateWithAbi: None,
            sponsored: None,
            senderKey: self.sender_key.clone(),
        };
        self.make_contract_call.call(&input)
    }
}

impl StacksWallet for StacksWalletJs {
    fn mint(&mut self, _op: &PegInOp) -> StacksTransaction {
        self.call("mint".to_string())
    }
    fn burn(&mut self, _op: &PegOutRequestOp) -> StacksTransaction {
        self.call("burn".to_string())
    }
    fn set_wallet_address(&mut self, _address: PegWalletAddress) -> StacksTransaction {
        self.call("set_wallet_address".to_string())
    }
}