mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-07-20 23:48:10 -07:00
server: documentation part 1
This commit is contained in:
@@ -7,6 +7,7 @@ use std::{
|
||||
|
||||
use allocative::Allocative;
|
||||
use derive_deref::Deref;
|
||||
use schemars::JsonSchema;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use vecdb::{CheckedSub, StoredCompressed};
|
||||
use zerocopy_derive::{FromBytes, Immutable, IntoBytes, KnownLayout};
|
||||
@@ -29,6 +30,7 @@ use super::{Bitcoin, Cents, Close, High, Sats, StoredF32, StoredF64};
|
||||
Deserialize,
|
||||
StoredCompressed,
|
||||
Allocative,
|
||||
JsonSchema,
|
||||
)]
|
||||
pub struct Dollars(f64);
|
||||
|
||||
|
||||
@@ -11,23 +11,23 @@ pub struct LoadedAddressData {
|
||||
pub sent: Sats,
|
||||
pub received: Sats,
|
||||
pub realized_cap: Dollars,
|
||||
pub utxos: u32,
|
||||
pub utxo_count: u32,
|
||||
#[serde(skip)]
|
||||
padding: u32,
|
||||
}
|
||||
|
||||
impl LoadedAddressData {
|
||||
pub fn amount(&self) -> Sats {
|
||||
pub fn balance(&self) -> Sats {
|
||||
(u64::from(self.received) - u64::from(self.sent)).into()
|
||||
}
|
||||
|
||||
pub fn realized_price(&self) -> Dollars {
|
||||
let p = (self.realized_cap / Bitcoin::from(self.amount())).round_to(4);
|
||||
let p = (self.realized_cap / Bitcoin::from(self.balance())).round_to(4);
|
||||
if p.is_negative() {
|
||||
dbg!((
|
||||
self.realized_cap,
|
||||
self.amount(),
|
||||
Bitcoin::from(self.amount()),
|
||||
self.balance(),
|
||||
Bitcoin::from(self.balance()),
|
||||
p
|
||||
));
|
||||
panic!("");
|
||||
@@ -37,17 +37,17 @@ impl LoadedAddressData {
|
||||
|
||||
#[inline]
|
||||
pub fn has_0_sats(&self) -> bool {
|
||||
self.amount() == Sats::ZERO
|
||||
self.balance() == Sats::ZERO
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn has_0_utxos(&self) -> bool {
|
||||
self.utxos == 0
|
||||
self.utxo_count == 0
|
||||
}
|
||||
|
||||
pub fn receive(&mut self, amount: Sats, price: Option<Dollars>) {
|
||||
self.received += amount;
|
||||
self.utxos += 1;
|
||||
self.utxo_count += 1;
|
||||
if let Some(price) = price {
|
||||
let added = price * amount;
|
||||
self.realized_cap += added;
|
||||
@@ -59,11 +59,11 @@ impl LoadedAddressData {
|
||||
}
|
||||
|
||||
pub fn send(&mut self, amount: Sats, previous_price: Option<Dollars>) -> Result<()> {
|
||||
if self.amount() < amount {
|
||||
if self.balance() < amount {
|
||||
return Err(Error::Str("Previous_amount smaller than sent amount"));
|
||||
}
|
||||
self.sent += amount;
|
||||
self.utxos -= 1;
|
||||
self.utxo_count -= 1;
|
||||
if let Some(previous_price) = previous_price {
|
||||
let subtracted = previous_price * amount;
|
||||
let realized_cap = self.realized_cap.checked_sub(subtracted).unwrap();
|
||||
@@ -96,7 +96,7 @@ impl From<&EmptyAddressData> for LoadedAddressData {
|
||||
sent: value.transfered,
|
||||
received: value.transfered,
|
||||
realized_cap: Dollars::ZERO,
|
||||
utxos: 0,
|
||||
utxo_count: 0,
|
||||
padding: 0,
|
||||
}
|
||||
}
|
||||
@@ -107,7 +107,7 @@ impl std::fmt::Display for LoadedAddressData {
|
||||
write!(
|
||||
f,
|
||||
"sent: {}, received: {}, realized_cap: {}, utxos: {}",
|
||||
self.sent, self.received, self.realized_cap, self.utxos
|
||||
self.sent, self.received, self.realized_cap, self.utxo_count
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use bitcoin::{Address, AddressType, ScriptBuf, opcodes::all::OP_PUSHBYTES_2};
|
||||
use brk_error::Error;
|
||||
use serde::Serialize;
|
||||
use schemars::JsonSchema;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use strum::Display;
|
||||
use zerocopy_derive::{FromBytes, Immutable, IntoBytes, KnownLayout};
|
||||
|
||||
@@ -18,10 +19,12 @@ use zerocopy_derive::{FromBytes, Immutable, IntoBytes, KnownLayout};
|
||||
IntoBytes,
|
||||
KnownLayout,
|
||||
Serialize,
|
||||
JsonSchema,
|
||||
)]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
#[strum(serialize_all = "lowercase")]
|
||||
#[repr(u8)]
|
||||
/// Type (P2PKH, P2WPKH, P2SH, P2TR, etc.)
|
||||
pub enum OutputType {
|
||||
P2PK65,
|
||||
P2PK33,
|
||||
@@ -33,249 +36,493 @@ pub enum OutputType {
|
||||
P2WSH,
|
||||
P2TR,
|
||||
P2A,
|
||||
#[schemars(skip)]
|
||||
Dummy10,
|
||||
#[schemars(skip)]
|
||||
Dummy11,
|
||||
#[schemars(skip)]
|
||||
Dummy12,
|
||||
#[schemars(skip)]
|
||||
Dummy13,
|
||||
#[schemars(skip)]
|
||||
Dummy14,
|
||||
#[schemars(skip)]
|
||||
Dummy15,
|
||||
#[schemars(skip)]
|
||||
Dummy16,
|
||||
#[schemars(skip)]
|
||||
Dummy17,
|
||||
#[schemars(skip)]
|
||||
Dummy18,
|
||||
#[schemars(skip)]
|
||||
Dummy19,
|
||||
#[schemars(skip)]
|
||||
Dummy20,
|
||||
#[schemars(skip)]
|
||||
Dummy21,
|
||||
#[schemars(skip)]
|
||||
Dummy22,
|
||||
#[schemars(skip)]
|
||||
Dummy23,
|
||||
#[schemars(skip)]
|
||||
Dummy24,
|
||||
#[schemars(skip)]
|
||||
Dummy25,
|
||||
#[schemars(skip)]
|
||||
Dummy26,
|
||||
#[schemars(skip)]
|
||||
Dummy27,
|
||||
#[schemars(skip)]
|
||||
Dummy28,
|
||||
#[schemars(skip)]
|
||||
Dummy29,
|
||||
#[schemars(skip)]
|
||||
Dummy30,
|
||||
#[schemars(skip)]
|
||||
Dummy31,
|
||||
#[schemars(skip)]
|
||||
Dummy32,
|
||||
#[schemars(skip)]
|
||||
Dummy33,
|
||||
#[schemars(skip)]
|
||||
Dummy34,
|
||||
#[schemars(skip)]
|
||||
Dummy35,
|
||||
#[schemars(skip)]
|
||||
Dummy36,
|
||||
#[schemars(skip)]
|
||||
Dummy37,
|
||||
#[schemars(skip)]
|
||||
Dummy38,
|
||||
#[schemars(skip)]
|
||||
Dummy39,
|
||||
#[schemars(skip)]
|
||||
Dummy40,
|
||||
#[schemars(skip)]
|
||||
Dummy41,
|
||||
#[schemars(skip)]
|
||||
Dummy42,
|
||||
#[schemars(skip)]
|
||||
Dummy43,
|
||||
#[schemars(skip)]
|
||||
Dummy44,
|
||||
#[schemars(skip)]
|
||||
Dummy45,
|
||||
#[schemars(skip)]
|
||||
Dummy46,
|
||||
#[schemars(skip)]
|
||||
Dummy47,
|
||||
#[schemars(skip)]
|
||||
Dummy48,
|
||||
#[schemars(skip)]
|
||||
Dummy49,
|
||||
#[schemars(skip)]
|
||||
Dummy50,
|
||||
#[schemars(skip)]
|
||||
Dummy51,
|
||||
#[schemars(skip)]
|
||||
Dummy52,
|
||||
#[schemars(skip)]
|
||||
Dummy53,
|
||||
#[schemars(skip)]
|
||||
Dummy54,
|
||||
#[schemars(skip)]
|
||||
Dummy55,
|
||||
#[schemars(skip)]
|
||||
Dummy56,
|
||||
#[schemars(skip)]
|
||||
Dummy57,
|
||||
#[schemars(skip)]
|
||||
Dummy58,
|
||||
#[schemars(skip)]
|
||||
Dummy59,
|
||||
#[schemars(skip)]
|
||||
Dummy60,
|
||||
#[schemars(skip)]
|
||||
Dummy61,
|
||||
#[schemars(skip)]
|
||||
Dummy62,
|
||||
#[schemars(skip)]
|
||||
Dummy63,
|
||||
#[schemars(skip)]
|
||||
Dummy64,
|
||||
#[schemars(skip)]
|
||||
Dummy65,
|
||||
#[schemars(skip)]
|
||||
Dummy66,
|
||||
#[schemars(skip)]
|
||||
Dummy67,
|
||||
#[schemars(skip)]
|
||||
Dummy68,
|
||||
#[schemars(skip)]
|
||||
Dummy69,
|
||||
#[schemars(skip)]
|
||||
Dummy70,
|
||||
#[schemars(skip)]
|
||||
Dummy71,
|
||||
#[schemars(skip)]
|
||||
Dummy72,
|
||||
#[schemars(skip)]
|
||||
Dummy73,
|
||||
#[schemars(skip)]
|
||||
Dummy74,
|
||||
#[schemars(skip)]
|
||||
Dummy75,
|
||||
#[schemars(skip)]
|
||||
Dummy76,
|
||||
#[schemars(skip)]
|
||||
Dummy77,
|
||||
#[schemars(skip)]
|
||||
Dummy78,
|
||||
#[schemars(skip)]
|
||||
Dummy79,
|
||||
#[schemars(skip)]
|
||||
Dummy80,
|
||||
#[schemars(skip)]
|
||||
Dummy81,
|
||||
#[schemars(skip)]
|
||||
Dummy82,
|
||||
#[schemars(skip)]
|
||||
Dummy83,
|
||||
#[schemars(skip)]
|
||||
Dummy84,
|
||||
#[schemars(skip)]
|
||||
Dummy85,
|
||||
#[schemars(skip)]
|
||||
Dummy86,
|
||||
#[schemars(skip)]
|
||||
Dummy87,
|
||||
#[schemars(skip)]
|
||||
Dummy88,
|
||||
#[schemars(skip)]
|
||||
Dummy89,
|
||||
#[schemars(skip)]
|
||||
Dummy90,
|
||||
#[schemars(skip)]
|
||||
Dummy91,
|
||||
#[schemars(skip)]
|
||||
Dummy92,
|
||||
#[schemars(skip)]
|
||||
Dummy93,
|
||||
#[schemars(skip)]
|
||||
Dummy94,
|
||||
#[schemars(skip)]
|
||||
Dummy95,
|
||||
#[schemars(skip)]
|
||||
Dummy96,
|
||||
#[schemars(skip)]
|
||||
Dummy97,
|
||||
#[schemars(skip)]
|
||||
Dummy98,
|
||||
#[schemars(skip)]
|
||||
Dummy99,
|
||||
#[schemars(skip)]
|
||||
Dummy100,
|
||||
#[schemars(skip)]
|
||||
Dummy101,
|
||||
#[schemars(skip)]
|
||||
Dummy102,
|
||||
#[schemars(skip)]
|
||||
Dummy103,
|
||||
#[schemars(skip)]
|
||||
Dummy104,
|
||||
#[schemars(skip)]
|
||||
Dummy105,
|
||||
#[schemars(skip)]
|
||||
Dummy106,
|
||||
#[schemars(skip)]
|
||||
Dummy107,
|
||||
#[schemars(skip)]
|
||||
Dummy108,
|
||||
#[schemars(skip)]
|
||||
Dummy109,
|
||||
#[schemars(skip)]
|
||||
Dummy110,
|
||||
#[schemars(skip)]
|
||||
Dummy111,
|
||||
#[schemars(skip)]
|
||||
Dummy112,
|
||||
#[schemars(skip)]
|
||||
Dummy113,
|
||||
#[schemars(skip)]
|
||||
Dummy114,
|
||||
#[schemars(skip)]
|
||||
Dummy115,
|
||||
#[schemars(skip)]
|
||||
Dummy116,
|
||||
#[schemars(skip)]
|
||||
Dummy117,
|
||||
#[schemars(skip)]
|
||||
Dummy118,
|
||||
#[schemars(skip)]
|
||||
Dummy119,
|
||||
#[schemars(skip)]
|
||||
Dummy120,
|
||||
#[schemars(skip)]
|
||||
Dummy121,
|
||||
#[schemars(skip)]
|
||||
Dummy122,
|
||||
#[schemars(skip)]
|
||||
Dummy123,
|
||||
#[schemars(skip)]
|
||||
Dummy124,
|
||||
#[schemars(skip)]
|
||||
Dummy125,
|
||||
#[schemars(skip)]
|
||||
Dummy126,
|
||||
#[schemars(skip)]
|
||||
Dummy127,
|
||||
#[schemars(skip)]
|
||||
Dummy128,
|
||||
#[schemars(skip)]
|
||||
Dummy129,
|
||||
#[schemars(skip)]
|
||||
Dummy130,
|
||||
#[schemars(skip)]
|
||||
Dummy131,
|
||||
#[schemars(skip)]
|
||||
Dummy132,
|
||||
#[schemars(skip)]
|
||||
Dummy133,
|
||||
#[schemars(skip)]
|
||||
Dummy134,
|
||||
#[schemars(skip)]
|
||||
Dummy135,
|
||||
#[schemars(skip)]
|
||||
Dummy136,
|
||||
#[schemars(skip)]
|
||||
Dummy137,
|
||||
#[schemars(skip)]
|
||||
Dummy138,
|
||||
#[schemars(skip)]
|
||||
Dummy139,
|
||||
#[schemars(skip)]
|
||||
Dummy140,
|
||||
#[schemars(skip)]
|
||||
Dummy141,
|
||||
#[schemars(skip)]
|
||||
Dummy142,
|
||||
#[schemars(skip)]
|
||||
Dummy143,
|
||||
#[schemars(skip)]
|
||||
Dummy144,
|
||||
#[schemars(skip)]
|
||||
Dummy145,
|
||||
#[schemars(skip)]
|
||||
Dummy146,
|
||||
#[schemars(skip)]
|
||||
Dummy147,
|
||||
#[schemars(skip)]
|
||||
Dummy148,
|
||||
#[schemars(skip)]
|
||||
Dummy149,
|
||||
#[schemars(skip)]
|
||||
Dummy150,
|
||||
#[schemars(skip)]
|
||||
Dummy151,
|
||||
#[schemars(skip)]
|
||||
Dummy152,
|
||||
#[schemars(skip)]
|
||||
Dummy153,
|
||||
#[schemars(skip)]
|
||||
Dummy154,
|
||||
#[schemars(skip)]
|
||||
Dummy155,
|
||||
#[schemars(skip)]
|
||||
Dummy156,
|
||||
#[schemars(skip)]
|
||||
Dummy157,
|
||||
#[schemars(skip)]
|
||||
Dummy158,
|
||||
#[schemars(skip)]
|
||||
Dummy159,
|
||||
#[schemars(skip)]
|
||||
Dummy160,
|
||||
#[schemars(skip)]
|
||||
Dummy161,
|
||||
#[schemars(skip)]
|
||||
Dummy162,
|
||||
#[schemars(skip)]
|
||||
Dummy163,
|
||||
#[schemars(skip)]
|
||||
Dummy164,
|
||||
#[schemars(skip)]
|
||||
Dummy165,
|
||||
#[schemars(skip)]
|
||||
Dummy166,
|
||||
#[schemars(skip)]
|
||||
Dummy167,
|
||||
#[schemars(skip)]
|
||||
Dummy168,
|
||||
#[schemars(skip)]
|
||||
Dummy169,
|
||||
#[schemars(skip)]
|
||||
Dummy170,
|
||||
#[schemars(skip)]
|
||||
Dummy171,
|
||||
#[schemars(skip)]
|
||||
Dummy172,
|
||||
#[schemars(skip)]
|
||||
Dummy173,
|
||||
#[schemars(skip)]
|
||||
Dummy174,
|
||||
#[schemars(skip)]
|
||||
Dummy175,
|
||||
#[schemars(skip)]
|
||||
Dummy176,
|
||||
#[schemars(skip)]
|
||||
Dummy177,
|
||||
#[schemars(skip)]
|
||||
Dummy178,
|
||||
#[schemars(skip)]
|
||||
Dummy179,
|
||||
#[schemars(skip)]
|
||||
Dummy180,
|
||||
#[schemars(skip)]
|
||||
Dummy181,
|
||||
#[schemars(skip)]
|
||||
Dummy182,
|
||||
#[schemars(skip)]
|
||||
Dummy183,
|
||||
#[schemars(skip)]
|
||||
Dummy184,
|
||||
#[schemars(skip)]
|
||||
Dummy185,
|
||||
#[schemars(skip)]
|
||||
Dummy186,
|
||||
#[schemars(skip)]
|
||||
Dummy187,
|
||||
#[schemars(skip)]
|
||||
Dummy188,
|
||||
#[schemars(skip)]
|
||||
Dummy189,
|
||||
#[schemars(skip)]
|
||||
Dummy190,
|
||||
#[schemars(skip)]
|
||||
Dummy191,
|
||||
#[schemars(skip)]
|
||||
Dummy192,
|
||||
#[schemars(skip)]
|
||||
Dummy193,
|
||||
#[schemars(skip)]
|
||||
Dummy194,
|
||||
#[schemars(skip)]
|
||||
Dummy195,
|
||||
#[schemars(skip)]
|
||||
Dummy196,
|
||||
#[schemars(skip)]
|
||||
Dummy197,
|
||||
#[schemars(skip)]
|
||||
Dummy198,
|
||||
#[schemars(skip)]
|
||||
Dummy199,
|
||||
#[schemars(skip)]
|
||||
Dummy200,
|
||||
#[schemars(skip)]
|
||||
Dummy201,
|
||||
#[schemars(skip)]
|
||||
Dummy202,
|
||||
#[schemars(skip)]
|
||||
Dummy203,
|
||||
#[schemars(skip)]
|
||||
Dummy204,
|
||||
#[schemars(skip)]
|
||||
Dummy205,
|
||||
#[schemars(skip)]
|
||||
Dummy206,
|
||||
#[schemars(skip)]
|
||||
Dummy207,
|
||||
#[schemars(skip)]
|
||||
Dummy208,
|
||||
#[schemars(skip)]
|
||||
Dummy209,
|
||||
#[schemars(skip)]
|
||||
Dummy210,
|
||||
#[schemars(skip)]
|
||||
Dummy211,
|
||||
#[schemars(skip)]
|
||||
Dummy212,
|
||||
#[schemars(skip)]
|
||||
Dummy213,
|
||||
#[schemars(skip)]
|
||||
Dummy214,
|
||||
#[schemars(skip)]
|
||||
Dummy215,
|
||||
#[schemars(skip)]
|
||||
Dummy216,
|
||||
#[schemars(skip)]
|
||||
Dummy217,
|
||||
#[schemars(skip)]
|
||||
Dummy218,
|
||||
#[schemars(skip)]
|
||||
Dummy219,
|
||||
#[schemars(skip)]
|
||||
Dummy220,
|
||||
#[schemars(skip)]
|
||||
Dummy221,
|
||||
#[schemars(skip)]
|
||||
Dummy222,
|
||||
#[schemars(skip)]
|
||||
Dummy223,
|
||||
#[schemars(skip)]
|
||||
Dummy224,
|
||||
#[schemars(skip)]
|
||||
Dummy225,
|
||||
#[schemars(skip)]
|
||||
Dummy226,
|
||||
#[schemars(skip)]
|
||||
Dummy227,
|
||||
#[schemars(skip)]
|
||||
Dummy228,
|
||||
#[schemars(skip)]
|
||||
Dummy229,
|
||||
#[schemars(skip)]
|
||||
Dummy230,
|
||||
#[schemars(skip)]
|
||||
Dummy231,
|
||||
#[schemars(skip)]
|
||||
Dummy232,
|
||||
#[schemars(skip)]
|
||||
Dummy233,
|
||||
#[schemars(skip)]
|
||||
Dummy234,
|
||||
#[schemars(skip)]
|
||||
Dummy235,
|
||||
#[schemars(skip)]
|
||||
Dummy236,
|
||||
#[schemars(skip)]
|
||||
Dummy237,
|
||||
#[schemars(skip)]
|
||||
Dummy238,
|
||||
#[schemars(skip)]
|
||||
Dummy239,
|
||||
#[schemars(skip)]
|
||||
Dummy240,
|
||||
#[schemars(skip)]
|
||||
Dummy241,
|
||||
#[schemars(skip)]
|
||||
Dummy242,
|
||||
#[schemars(skip)]
|
||||
Dummy243,
|
||||
#[schemars(skip)]
|
||||
Dummy244,
|
||||
#[schemars(skip)]
|
||||
Dummy245,
|
||||
#[schemars(skip)]
|
||||
Dummy246,
|
||||
#[schemars(skip)]
|
||||
Dummy247,
|
||||
#[schemars(skip)]
|
||||
Dummy248,
|
||||
#[schemars(skip)]
|
||||
Dummy249,
|
||||
#[schemars(skip)]
|
||||
Dummy250,
|
||||
#[schemars(skip)]
|
||||
Dummy251,
|
||||
#[schemars(skip)]
|
||||
Dummy252,
|
||||
#[schemars(skip)]
|
||||
Dummy253,
|
||||
Empty = 254,
|
||||
Unknown = 255,
|
||||
|
||||
@@ -6,6 +6,7 @@ use std::{
|
||||
use allocative::Allocative;
|
||||
use bitcoin::Amount;
|
||||
use derive_deref::Deref;
|
||||
use schemars::JsonSchema;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use vecdb::{CheckedSub, StoredCompressed};
|
||||
use zerocopy_derive::{FromBytes, Immutable, IntoBytes, KnownLayout};
|
||||
@@ -32,6 +33,7 @@ use super::{Bitcoin, Cents, Dollars, Height};
|
||||
Deserialize,
|
||||
StoredCompressed,
|
||||
Allocative,
|
||||
JsonSchema,
|
||||
)]
|
||||
pub struct Sats(u64);
|
||||
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
use std::ops::Add;
|
||||
|
||||
use byteview::ByteView;
|
||||
use serde::Serialize;
|
||||
use schemars::JsonSchema;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use vecdb::{CheckedSub, StoredCompressed};
|
||||
use zerocopy::IntoBytes;
|
||||
use zerocopy_derive::{FromBytes, Immutable, IntoBytes, KnownLayout};
|
||||
|
||||
use crate::copy_first_4bytes;
|
||||
|
||||
/// Index within its type (e.g., 0 for first P2WPKH address)
|
||||
#[derive(
|
||||
Debug,
|
||||
PartialEq,
|
||||
@@ -22,11 +24,17 @@ use crate::copy_first_4bytes;
|
||||
IntoBytes,
|
||||
KnownLayout,
|
||||
Serialize,
|
||||
Deserialize,
|
||||
StoredCompressed,
|
||||
JsonSchema,
|
||||
)]
|
||||
pub struct TypeIndex(u32);
|
||||
|
||||
impl TypeIndex {
|
||||
pub fn new(i: u32) -> Self {
|
||||
Self(i)
|
||||
}
|
||||
|
||||
pub fn increment(&mut self) {
|
||||
self.0 += 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user