btc_sdk/
transaction.rs

1use secp256k1::{Secp256k1, SecretKey, Message};
2use sha2::{Sha256, Digest};
3
4pub struct TransactionInput {
5    pub txid: String,
6    pub vout: u32,
7}
8
9pub struct TransactionOutput {
10    pub value: u64,
11    pub address: String,
12}
13
14pub struct Transaction {
15    pub inputs: Vec<TransactionInput>,
16    pub outputs: Vec<TransactionOutput>,
17}
18
19impl Transaction {
20    pub fn new(inputs: Vec<TransactionInput>, outputs: Vec<TransactionOutput>) -> Self {
21        Transaction { inputs, outputs }
22    }
23
24    pub fn sign(&self, private_key: &SecretKey) -> Vec<u8> {
25        let secp = Secp256k1::new();
26
27        let message = b"transaction_data";
28        let mut hasher = Sha256::new();
29        hasher.update(message);
30        let hash = hasher.finalize();
31
32        let msg = Message::from_slice(&hash).expect("Failed to create message");
33
34        let sig = secp.sign_ecdsa_low_r(&msg, private_key);
35
36        sig.serialize_compact().to_vec()
37    }
38}