feat: add transaction details
This commit is contained in:
parent
aa035588a0
commit
ab9763bb58
@ -37,8 +37,8 @@ class LiveWalletTest {
|
|||||||
println("Transactions count: ${wallet.transactions().count()}")
|
println("Transactions count: ${wallet.transactions().count()}")
|
||||||
val transactions = wallet.transactions().take(3)
|
val transactions = wallet.transactions().take(3)
|
||||||
for (tx in transactions) {
|
for (tx in transactions) {
|
||||||
val sentAndReceived = wallet.sentAndReceived(tx)
|
val sentAndReceived = wallet.sentAndReceived(tx.transaction)
|
||||||
println("Transaction: ${tx.txid()}")
|
println("Transaction: ${tx.transaction.txid()}")
|
||||||
println("Sent ${sentAndReceived.sent}")
|
println("Sent ${sentAndReceived.sent}")
|
||||||
println("Received ${sentAndReceived.received}")
|
println("Received ${sentAndReceived.received}")
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ interface Wallet {
|
|||||||
|
|
||||||
SentAndReceivedValues sent_and_received([ByRef] Transaction tx);
|
SentAndReceivedValues sent_and_received([ByRef] Transaction tx);
|
||||||
|
|
||||||
sequence<Transaction> transactions();
|
sequence<TransactionDetails> transactions();
|
||||||
|
|
||||||
[Throws=CalculateFeeError]
|
[Throws=CalculateFeeError]
|
||||||
u64 calculate_fee([ByRef] Transaction tx);
|
u64 calculate_fee([ByRef] Transaction tx);
|
||||||
@ -363,6 +363,17 @@ interface Address {
|
|||||||
boolean is_valid_for_network(Network network);
|
boolean is_valid_for_network(Network network);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
[Enum]
|
||||||
|
interface ConfirmationDetails {
|
||||||
|
Confirmed(u32 height, u64 timestamp);
|
||||||
|
Unconfirmed(u64 timestamp);
|
||||||
|
};
|
||||||
|
|
||||||
|
dictionary TransactionDetails {
|
||||||
|
Transaction transaction;
|
||||||
|
ConfirmationDetails confirmation;
|
||||||
|
};
|
||||||
|
|
||||||
interface Transaction {
|
interface Transaction {
|
||||||
[Throws=Alpha3Error]
|
[Throws=Alpha3Error]
|
||||||
constructor(sequence<u8> transaction_bytes);
|
constructor(sequence<u8> transaction_bytes);
|
||||||
|
@ -8,8 +8,10 @@ use bdk::bitcoin::Network;
|
|||||||
use bdk::bitcoin::OutPoint as BdkOutPoint;
|
use bdk::bitcoin::OutPoint as BdkOutPoint;
|
||||||
use bdk::bitcoin::Transaction as BdkTransaction;
|
use bdk::bitcoin::Transaction as BdkTransaction;
|
||||||
use bdk::bitcoin::Txid;
|
use bdk::bitcoin::Txid;
|
||||||
|
use bdk::chain::tx_graph::CanonicalTx as BdkCanonicalTx;
|
||||||
|
|
||||||
use crate::error::Alpha3Error;
|
use crate::error::Alpha3Error;
|
||||||
|
use bdk::chain::{ChainPosition, ConfirmationTimeHeightAnchor};
|
||||||
use std::io::Cursor;
|
use std::io::Cursor;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
@ -114,6 +116,36 @@ impl From<BdkAddress> for Address {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
|
pub enum ConfirmationDetails {
|
||||||
|
Confirmed { height: u32, timestamp: u64 },
|
||||||
|
Unconfirmed { timestamp: u64 },
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct TransactionDetails {
|
||||||
|
pub transaction: Arc<Transaction>,
|
||||||
|
pub confirmation: ConfirmationDetails,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> From<BdkCanonicalTx<'a, BdkTransaction, ConfirmationTimeHeightAnchor>>
|
||||||
|
for TransactionDetails
|
||||||
|
{
|
||||||
|
fn from(tx: BdkCanonicalTx<'a, BdkTransaction, ConfirmationTimeHeightAnchor>) -> Self {
|
||||||
|
let confirmation = match tx.chain_position {
|
||||||
|
ChainPosition::Confirmed(anchor) => ConfirmationDetails::Confirmed {
|
||||||
|
height: anchor.confirmation_height,
|
||||||
|
timestamp: anchor.confirmation_time,
|
||||||
|
},
|
||||||
|
ChainPosition::Unconfirmed(timestamp) => ConfirmationDetails::Unconfirmed { timestamp },
|
||||||
|
};
|
||||||
|
|
||||||
|
TransactionDetails {
|
||||||
|
transaction: Arc::new(Transaction::from(tx.tx_node.tx)),
|
||||||
|
confirmation,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct Transaction {
|
pub struct Transaction {
|
||||||
inner: BdkTransaction,
|
inner: BdkTransaction,
|
||||||
|
@ -34,6 +34,9 @@ use crate::wallet::TxBuilder;
|
|||||||
use crate::wallet::Update;
|
use crate::wallet::Update;
|
||||||
use crate::wallet::Wallet;
|
use crate::wallet::Wallet;
|
||||||
|
|
||||||
|
use crate::bitcoin::ConfirmationDetails;
|
||||||
|
use crate::bitcoin::TransactionDetails;
|
||||||
|
|
||||||
use crate::error::PersistenceError;
|
use crate::error::PersistenceError;
|
||||||
use crate::error::WalletCreationError;
|
use crate::error::WalletCreationError;
|
||||||
use bdk::bitcoin::Network;
|
use bdk::bitcoin::Network;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use crate::bitcoin::{OutPoint, PartiallySignedTransaction, Transaction};
|
use crate::bitcoin::{OutPoint, PartiallySignedTransaction, Transaction, TransactionDetails};
|
||||||
use crate::descriptor::Descriptor;
|
use crate::descriptor::Descriptor;
|
||||||
use crate::error::{Alpha3Error, CalculateFeeError, PersistenceError, WalletCreationError};
|
use crate::error::{Alpha3Error, CalculateFeeError, PersistenceError, WalletCreationError};
|
||||||
use crate::types::ScriptAmount;
|
use crate::types::ScriptAmount;
|
||||||
@ -104,10 +104,10 @@ impl Wallet {
|
|||||||
SentAndReceivedValues { sent, received }
|
SentAndReceivedValues { sent, received }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn transactions(&self) -> Vec<Arc<Transaction>> {
|
pub fn transactions(&self) -> Vec<TransactionDetails> {
|
||||||
self.get_wallet()
|
self.get_wallet()
|
||||||
.transactions()
|
.transactions()
|
||||||
.map(|tx| Arc::new(tx.tx_node.tx.into()))
|
.map(|tx| tx.into())
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,8 +35,8 @@ class LiveWalletTest {
|
|||||||
println("Transactions count: ${wallet.transactions().count()}")
|
println("Transactions count: ${wallet.transactions().count()}")
|
||||||
val transactions = wallet.transactions().take(3)
|
val transactions = wallet.transactions().take(3)
|
||||||
for (tx in transactions) {
|
for (tx in transactions) {
|
||||||
val sentAndReceived = wallet.sentAndReceived(tx)
|
val sentAndReceived = wallet.sentAndReceived(tx.transaction)
|
||||||
println("Transaction: ${tx.txid()}")
|
println("Transaction: ${tx.transaction.txid()}")
|
||||||
println("Sent ${sentAndReceived.sent}")
|
println("Sent ${sentAndReceived.sent}")
|
||||||
println("Received ${sentAndReceived.received}")
|
println("Received ${sentAndReceived.received}")
|
||||||
}
|
}
|
||||||
|
@ -32,8 +32,8 @@ class LiveWalletTest(unittest.TestCase):
|
|||||||
print(f"Transactions count: {len(wallet.transactions())}")
|
print(f"Transactions count: {len(wallet.transactions())}")
|
||||||
transactions = wallet.transactions()[:3]
|
transactions = wallet.transactions()[:3]
|
||||||
for tx in transactions:
|
for tx in transactions:
|
||||||
sent_and_received = wallet.sent_and_received(tx)
|
sent_and_received = wallet.sent_and_received(tx.transaction)
|
||||||
print(f"Transaction: {tx.txid()}")
|
print(f"Transaction: {tx.transaction.txid()}")
|
||||||
print(f"Sent {sent_and_received.sent}")
|
print(f"Sent {sent_and_received.sent}")
|
||||||
print(f"Received {sent_and_received.received}")
|
print(f"Received {sent_and_received.received}")
|
||||||
|
|
||||||
|
@ -47,8 +47,8 @@ final class LiveWalletTests: XCTestCase {
|
|||||||
print("Transactions count: \(wallet.transactions().count)")
|
print("Transactions count: \(wallet.transactions().count)")
|
||||||
let transactions = wallet.transactions().prefix(3)
|
let transactions = wallet.transactions().prefix(3)
|
||||||
for tx in transactions {
|
for tx in transactions {
|
||||||
let sentAndReceived = wallet.sentAndReceived(tx: tx)
|
let sentAndReceived = wallet.sentAndReceived(tx: tx.transaction)
|
||||||
print("Transaction: \(tx.txid())")
|
print("Transaction: \(tx.transaction.txid())")
|
||||||
print("Sent \(sentAndReceived.sent)")
|
print("Sent \(sentAndReceived.sent)")
|
||||||
print("Received \(sentAndReceived.received)")
|
print("Received \(sentAndReceived.received)")
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user