spark_sdk/signer/traits/
frost_signing.rs

1// use std::cell::RefCell;
2use std::collections::HashMap;
3use std::sync::Arc;
4
5use bitcoin::secp256k1::PublicKey;
6use parking_lot::RwLock;
7use spark_protos::common::SigningCommitment;
8use spark_protos::frost::AggregateFrostRequest;
9use spark_protos::frost::AggregateFrostResponse;
10use spark_protos::frost::FrostSigningJob;
11use spark_protos::frost::SignFrostResponse;
12use spark_protos::spark::LeafRefundTxSigningResult;
13use spark_protos::spark::NodeSignatures;
14use spark_protos::spark::RequestedSigningCommitments;
15
16use crate::error::SparkSdkError;
17use crate::wallet::internal_handlers::traits::create_tree::DepositAddressTree;
18use crate::wallet::internal_handlers::traits::transfer::LeafKeyTweak;
19use crate::wallet::internal_handlers::traits::transfer::LeafRefundSigningData;
20
21pub trait SparkSignerFrostSigning {
22    /// Signs a message using FROST threshold signature scheme
23    ///
24    /// # Arguments
25    /// * `request` - The request to sign the message
26    ///
27    /// # Returns
28    /// The FROST signature
29    fn sign_frost(
30        &self,
31        signing_jobs: Vec<FrostSigningJob>,
32    ) -> Result<SignFrostResponse, SparkSdkError>;
33
34    /// Aggregates multiple FROST signature shares into a complete signature
35    ///
36    /// # Arguments
37    /// * `request` - The request to aggregate the FROST signatures
38    ///
39    /// # Returns
40    /// The aggregated FROST signature
41    fn aggregate_frost(
42        &self,
43        request: AggregateFrostRequest,
44    ) -> Result<AggregateFrostResponse, SparkSdkError>;
45
46    fn sign_created_tree_in_bfs_order(
47        &self,
48        tx: bitcoin::Transaction,
49        vout: u32,
50        internal_tree_root: Arc<RwLock<DepositAddressTree>>,
51        request_tree_root: spark_protos::spark::CreationNode,
52        creation_result_tree_root: spark_protos::spark::CreationResponseNode,
53    ) -> Result<(Vec<NodeSignatures>, Vec<Vec<u8>>), SparkSdkError>;
54
55    fn sign_transfer_refunds(
56        &self,
57        leaf_data_map: &HashMap<String, LeafRefundSigningData>,
58        operator_signing_results: &Vec<LeafRefundTxSigningResult>,
59        adaptor_public_key: Vec<u8>,
60    ) -> Result<Vec<NodeSignatures>, SparkSdkError>;
61
62    fn sign_for_lightning_swap(
63        &self,
64        leaves: &Vec<LeafKeyTweak>,
65        signing_commitments: &Vec<RequestedSigningCommitments>,
66        receiver_identity_pubkey: PublicKey,
67    ) -> Result<(SignFrostResponse, Vec<Vec<u8>>, Vec<SigningCommitment>), SparkSdkError>;
68}