use std::collections::{BTreeMap, HashSet};
use std::ops::DerefMut;
use std::str::FromStr;
-use std::time::{Instant, SystemTime, UNIX_EPOCH};
use bitcoin::blockdata::opcodes;
use bitcoin::blockdata::script::Builder;
#[allow(unused_imports)]
use log::{debug, error, info, trace};
+pub mod time;
pub mod utils;
use self::utils::IsDust;
+
use crate::blockchain::{noop_progress, Blockchain, OfflineBlockchain, OnlineBlockchain};
use crate::database::{BatchDatabase, BatchOperations, DatabaseUtils};
use crate::descriptor::{get_checksum, DescriptorMeta, ExtendedDescriptor, ExtractPolicy, Policy};
let transaction_details = TransactionDetails {
transaction: None,
txid: txid,
- timestamp: Self::get_timestamp(),
+ timestamp: time::get_timestamp(),
received,
sent: outgoing,
height: None,
// Internals
- #[cfg(not(target_arch = "wasm32"))]
- fn get_timestamp() -> u64 {
- SystemTime::now()
- .duration_since(UNIX_EPOCH)
- .unwrap()
- .as_secs()
- }
-
- #[cfg(target_arch = "wasm32")]
- fn get_timestamp() -> u64 {
- 0
- }
-
fn get_descriptor_for(&self, script_type: ScriptType) -> &ExtendedDescriptor {
let desc = match script_type {
ScriptType::External => &self.descriptor,
// cache a few of our addresses
if last_addr.is_none() {
let mut address_batch = self.database.borrow().begin_batch();
- #[cfg(not(target_arch = "wasm32"))]
- let start = Instant::now();
+ let start = time::Instant::new();
for i in 0..=max_address {
let derived = self.descriptor.derive(i).unwrap();
}
}
- #[cfg(not(target_arch = "wasm32"))]
info!(
"derivation of {} addresses, took {} ms",
max_address,
--- /dev/null
+use std::time::Duration;
+
+#[cfg(target_arch = "wasm32")]
+use js_sys::Date;
+#[cfg(not(target_arch = "wasm32"))]
+use std::time::{Instant as SystemInstant, SystemTime, UNIX_EPOCH};
+
+#[cfg(not(target_arch = "wasm32"))]
+pub fn get_timestamp() -> u64 {
+ SystemTime::now()
+ .duration_since(UNIX_EPOCH)
+ .unwrap()
+ .as_secs()
+}
+#[cfg(target_arch = "wasm32")]
+pub fn get_timestamp() -> u64 {
+ let millis = Date::now();
+
+ (millis / 1000.0) as u64
+}
+
+#[cfg(not(target_arch = "wasm32"))]
+pub struct Instant(SystemInstant);
+#[cfg(target_arch = "wasm32")]
+pub struct Instant(Duration);
+
+impl Instant {
+ #[cfg(not(target_arch = "wasm32"))]
+ pub fn new() -> Self {
+ Instant(SystemInstant::now())
+ }
+ #[cfg(target_arch = "wasm32")]
+ pub fn new() -> Self {
+ let millis = Date::now();
+
+ let secs = millis / 1000.0;
+ let nanos = (millis % 1000.0) * 1e6;
+
+ Instant(Duration::new(secs as u64, nanos as u32))
+ }
+
+ #[cfg(not(target_arch = "wasm32"))]
+ pub fn elapsed(&self) -> Duration {
+ self.0.elapsed()
+ }
+ #[cfg(target_arch = "wasm32")]
+ pub fn elapsed(&self) -> Duration {
+ let now = Instant::new();
+
+ now.0.checked_sub(self.0).unwrap_or(Duration::new(0, 0))
+ }
+}