mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-07-10 18:48:13 -07:00
265 lines
9.5 KiB
Rust
265 lines
9.5 KiB
Rust
use brk_indexer::Indexer;
|
|
use brk_traversable::Traversable;
|
|
use brk_types::{
|
|
Addr, AddrBytes, EmptyOutputIndex, OpReturnIndex, P2AAddrIndex, P2ABytes, P2MSOutputIndex,
|
|
P2PK33AddrIndex, P2PK33Bytes, P2PK65AddrIndex, P2PK65Bytes, P2PKHAddrIndex, P2PKHBytes,
|
|
P2SHAddrIndex, P2SHBytes, P2TRAddrIndex, P2TRBytes, P2WPKHAddrIndex, P2WPKHBytes,
|
|
P2WSHAddrIndex, P2WSHBytes, TxIndex, UnknownOutputIndex, Version,
|
|
};
|
|
use vecdb::{LazyVecFrom1, ReadableCloneableVec};
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct Vecs {
|
|
pub p2pk33: P2PK33Vecs,
|
|
pub p2pk65: P2PK65Vecs,
|
|
pub p2pkh: P2PKHVecs,
|
|
pub p2sh: P2SHVecs,
|
|
pub p2tr: P2TRVecs,
|
|
pub p2wpkh: P2WPKHVecs,
|
|
pub p2wsh: P2WSHVecs,
|
|
pub p2a: P2AVecs,
|
|
pub p2ms: P2MSVecs,
|
|
pub empty: EmptyVecs,
|
|
pub unknown: UnknownVecs,
|
|
pub op_return: OpReturnVecs,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct P2PK33Vecs {
|
|
pub identity: LazyVecFrom1<P2PK33AddrIndex, P2PK33AddrIndex, P2PK33AddrIndex, P2PK33Bytes>,
|
|
pub addr: LazyVecFrom1<P2PK33AddrIndex, Addr, P2PK33AddrIndex, P2PK33Bytes>,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct P2PK65Vecs {
|
|
pub identity: LazyVecFrom1<P2PK65AddrIndex, P2PK65AddrIndex, P2PK65AddrIndex, P2PK65Bytes>,
|
|
pub addr: LazyVecFrom1<P2PK65AddrIndex, Addr, P2PK65AddrIndex, P2PK65Bytes>,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct P2PKHVecs {
|
|
pub identity: LazyVecFrom1<P2PKHAddrIndex, P2PKHAddrIndex, P2PKHAddrIndex, P2PKHBytes>,
|
|
pub addr: LazyVecFrom1<P2PKHAddrIndex, Addr, P2PKHAddrIndex, P2PKHBytes>,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct P2SHVecs {
|
|
pub identity: LazyVecFrom1<P2SHAddrIndex, P2SHAddrIndex, P2SHAddrIndex, P2SHBytes>,
|
|
pub addr: LazyVecFrom1<P2SHAddrIndex, Addr, P2SHAddrIndex, P2SHBytes>,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct P2TRVecs {
|
|
pub identity: LazyVecFrom1<P2TRAddrIndex, P2TRAddrIndex, P2TRAddrIndex, P2TRBytes>,
|
|
pub addr: LazyVecFrom1<P2TRAddrIndex, Addr, P2TRAddrIndex, P2TRBytes>,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct P2WPKHVecs {
|
|
pub identity: LazyVecFrom1<P2WPKHAddrIndex, P2WPKHAddrIndex, P2WPKHAddrIndex, P2WPKHBytes>,
|
|
pub addr: LazyVecFrom1<P2WPKHAddrIndex, Addr, P2WPKHAddrIndex, P2WPKHBytes>,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct P2WSHVecs {
|
|
pub identity: LazyVecFrom1<P2WSHAddrIndex, P2WSHAddrIndex, P2WSHAddrIndex, P2WSHBytes>,
|
|
pub addr: LazyVecFrom1<P2WSHAddrIndex, Addr, P2WSHAddrIndex, P2WSHBytes>,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct P2AVecs {
|
|
pub identity: LazyVecFrom1<P2AAddrIndex, P2AAddrIndex, P2AAddrIndex, P2ABytes>,
|
|
pub addr: LazyVecFrom1<P2AAddrIndex, Addr, P2AAddrIndex, P2ABytes>,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct P2MSVecs {
|
|
pub identity: LazyVecFrom1<P2MSOutputIndex, P2MSOutputIndex, P2MSOutputIndex, TxIndex>,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct EmptyVecs {
|
|
pub identity: LazyVecFrom1<EmptyOutputIndex, EmptyOutputIndex, EmptyOutputIndex, TxIndex>,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct UnknownVecs {
|
|
pub identity: LazyVecFrom1<UnknownOutputIndex, UnknownOutputIndex, UnknownOutputIndex, TxIndex>,
|
|
}
|
|
|
|
#[derive(Clone, Traversable)]
|
|
pub struct OpReturnVecs {
|
|
pub identity: LazyVecFrom1<OpReturnIndex, OpReturnIndex, OpReturnIndex, TxIndex>,
|
|
}
|
|
|
|
impl Vecs {
|
|
pub(crate) fn forced_import(version: Version, indexer: &Indexer) -> Self {
|
|
Self {
|
|
p2pk33: P2PK33Vecs {
|
|
identity: LazyVecFrom1::init(
|
|
"p2pk33_addr_index",
|
|
version,
|
|
indexer.vecs.addrs.p2pk33.bytes.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
addr: LazyVecFrom1::init(
|
|
"p2pk33_addr",
|
|
version,
|
|
indexer.vecs.addrs.p2pk33.bytes.read_only_boxed_clone(),
|
|
|_, bytes| Addr::try_from(&AddrBytes::from(bytes)).unwrap(),
|
|
),
|
|
},
|
|
p2pk65: P2PK65Vecs {
|
|
identity: LazyVecFrom1::init(
|
|
"p2pk65_addr_index",
|
|
version,
|
|
indexer.vecs.addrs.p2pk65.bytes.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
addr: LazyVecFrom1::init(
|
|
"p2pk65_addr",
|
|
version,
|
|
indexer.vecs.addrs.p2pk65.bytes.read_only_boxed_clone(),
|
|
|_, bytes| Addr::try_from(&AddrBytes::from(bytes)).unwrap(),
|
|
),
|
|
},
|
|
p2pkh: P2PKHVecs {
|
|
identity: LazyVecFrom1::init(
|
|
"p2pkh_addr_index",
|
|
version,
|
|
indexer.vecs.addrs.p2pkh.bytes.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
addr: LazyVecFrom1::init(
|
|
"p2pkh_addr",
|
|
version,
|
|
indexer.vecs.addrs.p2pkh.bytes.read_only_boxed_clone(),
|
|
|_, bytes| Addr::try_from(&AddrBytes::from(bytes)).unwrap(),
|
|
),
|
|
},
|
|
p2sh: P2SHVecs {
|
|
identity: LazyVecFrom1::init(
|
|
"p2sh_addr_index",
|
|
version,
|
|
indexer.vecs.addrs.p2sh.bytes.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
addr: LazyVecFrom1::init(
|
|
"p2sh_addr",
|
|
version,
|
|
indexer.vecs.addrs.p2sh.bytes.read_only_boxed_clone(),
|
|
|_, bytes| Addr::try_from(&AddrBytes::from(bytes)).unwrap(),
|
|
),
|
|
},
|
|
p2tr: P2TRVecs {
|
|
identity: LazyVecFrom1::init(
|
|
"p2tr_addr_index",
|
|
version,
|
|
indexer.vecs.addrs.p2tr.bytes.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
addr: LazyVecFrom1::init(
|
|
"p2tr_addr",
|
|
version,
|
|
indexer.vecs.addrs.p2tr.bytes.read_only_boxed_clone(),
|
|
|_, bytes| Addr::try_from(&AddrBytes::from(bytes)).unwrap(),
|
|
),
|
|
},
|
|
p2wpkh: P2WPKHVecs {
|
|
identity: LazyVecFrom1::init(
|
|
"p2wpkh_addr_index",
|
|
version,
|
|
indexer.vecs.addrs.p2wpkh.bytes.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
addr: LazyVecFrom1::init(
|
|
"p2wpkh_addr",
|
|
version,
|
|
indexer.vecs.addrs.p2wpkh.bytes.read_only_boxed_clone(),
|
|
|_, bytes| Addr::try_from(&AddrBytes::from(bytes)).unwrap(),
|
|
),
|
|
},
|
|
p2wsh: P2WSHVecs {
|
|
identity: LazyVecFrom1::init(
|
|
"p2wsh_addr_index",
|
|
version,
|
|
indexer.vecs.addrs.p2wsh.bytes.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
addr: LazyVecFrom1::init(
|
|
"p2wsh_addr",
|
|
version,
|
|
indexer.vecs.addrs.p2wsh.bytes.read_only_boxed_clone(),
|
|
|_, bytes| Addr::try_from(&AddrBytes::from(bytes)).unwrap(),
|
|
),
|
|
},
|
|
p2a: P2AVecs {
|
|
identity: LazyVecFrom1::init(
|
|
"p2a_addr_index",
|
|
version,
|
|
indexer.vecs.addrs.p2a.bytes.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
addr: LazyVecFrom1::init(
|
|
"p2a_addr",
|
|
version,
|
|
indexer.vecs.addrs.p2a.bytes.read_only_boxed_clone(),
|
|
|_, bytes| Addr::try_from(&AddrBytes::from(bytes)).unwrap(),
|
|
),
|
|
},
|
|
p2ms: P2MSVecs {
|
|
identity: LazyVecFrom1::init(
|
|
"p2ms_output_index",
|
|
version,
|
|
indexer
|
|
.vecs
|
|
.scripts
|
|
.p2ms
|
|
.to_tx_index
|
|
.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
},
|
|
empty: EmptyVecs {
|
|
identity: LazyVecFrom1::init(
|
|
"empty_output_index",
|
|
version,
|
|
indexer
|
|
.vecs
|
|
.scripts
|
|
.empty
|
|
.to_tx_index
|
|
.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
},
|
|
unknown: UnknownVecs {
|
|
identity: LazyVecFrom1::init(
|
|
"unknown_output_index",
|
|
version,
|
|
indexer
|
|
.vecs
|
|
.scripts
|
|
.unknown
|
|
.to_tx_index
|
|
.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
},
|
|
op_return: OpReturnVecs {
|
|
identity: LazyVecFrom1::init(
|
|
"op_return_index",
|
|
version,
|
|
indexer
|
|
.vecs
|
|
.scripts
|
|
.op_return
|
|
.to_tx_index
|
|
.read_only_boxed_clone(),
|
|
|index, _| index,
|
|
),
|
|
},
|
|
}
|
|
}
|
|
}
|