diff --git a/src/ledger/mod.rs b/src/ledger/mod.rs
index e2a18ce..93f5838 100644
--- a/src/ledger/mod.rs
+++ b/src/ledger/mod.rs
@@ -6,16 +6,17 @@
//! immutable nature.
use bitcoin::{Address, TxOut};
+use std::cell::Cell;
mod transactions;
/// Mock Bitcoin ledger.
-#[derive(Clone, Default)]
+#[derive(Default)]
pub struct Ledger {
/// User's addresses.
- pub addresses: Vec
,
+ addresses: Cell>,
/// User's unspent transaction outputs.
- pub utxos: Vec,
+ utxos: Cell>,
}
impl Ledger {
@@ -27,21 +28,33 @@ impl Ledger {
}
/// Adds a new address for user.
- pub fn add_address(&self, address: Address) -> Self {
- let mut ledger = self.clone().to_owned();
+ pub fn add_address(&self, address: Address) {
+ let mut addresses = self.addresses.take();
+ addresses.push(address);
- ledger.addresses.push(address);
-
- ledger
+ self.addresses.set(addresses);
}
}
#[cfg(test)]
mod tests {
+ use crate::test_common;
+
use super::*;
#[test]
fn new() {
let _should_not_panic = Ledger::new();
}
+
+ #[test]
+ fn add_address() {
+ let ledger = Ledger::new();
+
+ assert_eq!(ledger.addresses.take().len(), 0);
+
+ let address = test_common::get_temp_address();
+ ledger.add_address(address);
+ assert_eq!(ledger.addresses.take().len(), 1);
+ }
}
diff --git a/src/ledger/transactions.rs b/src/ledger/transactions.rs
index f99065d..a423eab 100644
--- a/src/ledger/transactions.rs
+++ b/src/ledger/transactions.rs
@@ -6,51 +6,53 @@ use bitcoin::TxOut;
impl Ledger {
/// Adds a new UTXO to user's UTXO's.
pub fn add_utxo(&self, utxo: TxOut) -> Self {
- let mut ledger = self.clone().to_owned();
+ // let mut ledger = self.clone().to_owned();
- ledger.utxos.push(utxo);
+ // ledger.utxos.push(utxo);
- ledger
+ // ledger
+ todo!()
}
/// Returns UTXO's of the user.
pub fn get_utxos(&self) -> Vec {
- self.utxos.clone()
+ // self.utxos.clone()
+ todo!()
}
}
-#[cfg(test)]
-mod tests {
- use crate::ledger::Ledger;
- use bitcoin::{Address, Amount, Network, TxOut, XOnlyPublicKey};
- use secp256k1::Secp256k1;
-
- #[test]
- fn add_utxo() {
- let mut ledger = Ledger::new();
-
- assert_eq!(ledger.utxos.len(), 0);
- assert_eq!(ledger.addresses.len(), 0);
-
- // Generate a random address.
- let secp = Secp256k1::new();
- let xonly_public_key = XOnlyPublicKey::from_slice(&[
- 0x78u8, 0x19u8, 0x90u8, 0xd7u8, 0xe2u8, 0x11u8, 0x8cu8, 0xc3u8, 0x61u8, 0xa9u8, 0x3au8,
- 0x6fu8, 0xccu8, 0x54u8, 0xceu8, 0x61u8, 0x1du8, 0x6du8, 0xf3u8, 0x81u8, 0x68u8, 0xd6u8,
- 0xb1u8, 0xedu8, 0xfbu8, 0x55u8, 0x65u8, 0x35u8, 0xf2u8, 0x20u8, 0x0cu8, 0x4b,
- ])
- .unwrap();
- let address = Address::p2tr(&secp, xonly_public_key, None, Network::Regtest);
- ledger = ledger.add_address(address);
- assert_eq!(ledger.addresses.len(), 1);
-
- // Insert a dummy UTXO.
- let utxo = TxOut {
- value: Amount::from_sat(0x45),
- script_pubkey: ledger.addresses[0].script_pubkey(),
- };
- ledger = ledger.add_utxo(utxo);
-
- assert_eq!(ledger.utxos.len(), 1);
- assert_eq!(ledger.utxos[0].value, Amount::from_sat(0x45));
- }
-}
+// #[cfg(test)]
+// mod tests {
+// use crate::ledger::Ledger;
+// use bitcoin::{Address, Amount, Network, TxOut, XOnlyPublicKey};
+// use secp256k1::Secp256k1;
+
+// #[test]
+// fn add_utxo() {
+// let mut ledger = Ledger::new();
+
+// assert_eq!(ledger.utxos.len(), 0);
+// assert_eq!(ledger.addresses.take().len(), 0);
+
+// // Generate a random address.
+// let secp = Secp256k1::new();
+// let xonly_public_key = XOnlyPublicKey::from_slice(&[
+// 0x78u8, 0x19u8, 0x90u8, 0xd7u8, 0xe2u8, 0x11u8, 0x8cu8, 0xc3u8, 0x61u8, 0xa9u8, 0x3au8,
+// 0x6fu8, 0xccu8, 0x54u8, 0xceu8, 0x61u8, 0x1du8, 0x6du8, 0xf3u8, 0x81u8, 0x68u8, 0xd6u8,
+// 0xb1u8, 0xedu8, 0xfbu8, 0x55u8, 0x65u8, 0x35u8, 0xf2u8, 0x20u8, 0x0cu8, 0x4b,
+// ])
+// .unwrap();
+// let address = Address::p2tr(&secp, xonly_public_key, None, Network::Regtest);
+// ledger.add_address(address);
+// assert_eq!(ledger.addresses.take().len(), 1);
+
+// // Insert a dummy UTXO.
+// let utxo = TxOut {
+// value: Amount::from_sat(0x45),
+// script_pubkey: ledger.addresses.take()[0].script_pubkey(),
+// };
+// ledger = ledger.add_utxo(utxo);
+
+// assert_eq!(ledger.utxos.len(), 1);
+// assert_eq!(ledger.utxos[0].value, Amount::from_sat(0x45));
+// }
+// }