use serde::{Deserialize, Serialize};
use bsv::wallet::interfaces::{
CreateActionOptions, CreateActionOutput, InternalizeOutput, ReviewActionResult, SendWithResult,
SignActionOptions, SignActionSpend,
};
use bsv::wallet::types::{
DescriptionString5to50Bytes, LabelStringUnder300Bytes, OutpointString, TXIDHexString,
};
use crate::storage::action_types::StorageCreateActionResult;
pub const DEFAULT_FEE_RATE_SAT_PER_KB: u64 = 100;
#[derive(Debug, Clone)]
pub struct ValidCreateActionArgs {
pub description: DescriptionString5to50Bytes,
pub inputs: Vec<ValidCreateActionInput>,
pub outputs: Vec<CreateActionOutput>,
pub lock_time: u32,
pub version: u32,
pub labels: Vec<LabelStringUnder300Bytes>,
pub options: CreateActionOptions,
pub input_beef: Option<Vec<u8>>,
pub is_new_tx: bool,
pub is_sign_action: bool,
pub is_no_send: bool,
pub is_delayed: bool,
pub is_send_with: bool,
}
#[derive(Debug, Clone)]
pub struct ValidCreateActionInput {
pub outpoint: OutpointInfo,
pub input_description: String,
pub unlocking_script: Option<Vec<u8>>,
pub unlocking_script_length: usize,
pub sequence_number: u32,
}
#[derive(Debug, Clone)]
pub struct OutpointInfo {
pub txid: TXIDHexString,
pub vout: u32,
}
#[derive(Debug, Clone)]
pub struct ValidSignActionArgs {
pub reference: String,
pub spends: std::collections::HashMap<u32, SignActionSpend>,
pub options: SignActionOptions,
pub is_new_tx: bool,
pub is_no_send: Option<bool>,
pub is_delayed: Option<bool>,
pub is_send_with: Option<bool>,
}
#[derive(Debug, Clone)]
pub struct ValidInternalizeActionArgs {
pub tx: Vec<u8>,
pub description: String,
pub labels: Vec<LabelStringUnder300Bytes>,
pub outputs: Vec<InternalizeOutput>,
}
#[derive(Debug, Clone)]
pub struct ValidAbortActionArgs {
pub reference: String,
}
#[derive(Debug, Clone)]
pub struct PendingSignAction {
pub reference: String,
pub dcr: StorageCreateActionResult,
pub args: ValidCreateActionArgs,
pub tx: Vec<u8>,
pub amount: u64,
pub pdi: Vec<PendingStorageInput>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PendingStorageInput {
pub vin: u32,
pub derivation_prefix: String,
pub derivation_suffix: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub unlocker_pub_key: Option<String>,
pub source_satoshis: u64,
pub locking_script: String,
}
#[derive(Debug, Clone)]
pub struct SignerCreateActionResult {
pub txid: Option<TXIDHexString>,
pub tx: Option<Vec<u8>>,
pub no_send_change: Vec<OutpointString>,
pub send_with_results: Vec<SendWithResult>,
pub signable_transaction: Option<SignableTransactionRef>,
pub not_delayed_results: Option<Vec<ReviewActionResult>>,
}
#[derive(Debug, Clone)]
pub struct SignableTransactionRef {
pub reference: String,
pub tx: Vec<u8>,
}
#[derive(Debug, Clone)]
pub struct SignerSignActionResult {
pub txid: Option<TXIDHexString>,
pub tx: Option<Vec<u8>>,
pub send_with_results: Vec<SendWithResult>,
pub not_delayed_results: Option<Vec<ReviewActionResult>>,
}
#[derive(Debug, Clone)]
pub struct SignerInternalizeActionResult {
pub accepted: bool,
pub is_merge: bool,
pub txid: String,
pub satoshis: i64,
pub send_with_results: Option<Vec<SendWithResult>>,
pub not_delayed_results: Option<Vec<ReviewActionResult>>,
}