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}