#74,116,696textmint1.doge#73,513,299brc-20transfer100.pizza#71,268,479brc-20Inscription #53534443#53,534,443pngInscription #46588969#46,588,969pngInscription #46586833#46,586,833pngInscription #46584308#46,584,308pngInscription #45331166#45,331,166svg Timestamp, WalletTxInfo, }, jsonrpc_core::{IoHandler, Value}, jsonrpc_http_server::{CloseHandle, ServerBuilder}, serde::{Deserialize, Serialize}, server::Server, state::State, std::{ collections::{BTreeMap, BTreeSet, HashMap}, sync::{Arc, Mutex, MutexGuard}, thread, time::Duration, }, }; mod api; mod server; mod state; pub fn builder() -> Builder { Builder { fail_lock_unspent: false, network: Network::Bitcoin, version: 240000, } } pub struct Builder { fail_lock_unspent: bool, network: Network, version: usize, } impl Builder { pub fn fail_lock_unspent(self, fail_lock_unspent: bool) -> Self { Self { fail_lock_unspent, ..self } } pub fn network(self, network: Network) -> Self { Self { network, ..self } } pub fn version(self, version: usize) -> Self { Self { version, ..self } } pub fn build(self) -> Handle { let state = Arc::new(Mutex::new(State::new( self.network, self.version, self.fail_lock_unspent,#44,993,335textpub(crate) use { super::*, bitcoin::{ blockdata::{opcodes, script, script::PushBytesBuf}, ScriptBuf, Witness, }, pretty_assertions::assert_eq as pretty_assert_eq, std::iter, test_bitcoincore_rpc::TransactionTemplate, unindent::Unindent, }; macro_rules! assert_regex_match { ($value:expr, $pattern:expr $(,)?) => { let regex = Regex::new(&format!("^(?s){}$", $pattern)).unwrap(); let string = $value.to_string(); if !regex.is_match(string.as_ref()) { panic!( "Regex:\n\n{}\n\n…did not match string:\n\n{}", regex, string ); } }; } macro_rules! assert_matches { ($expression:expr, $( $pattern:pat_param )|+ $( if $guard:expr )? $(,)?) => { match $expression { $( $pattern )|+ $( if $guard )? => {} left => panic!( "assertion failed: (left ~= right)\n left: `{:?}`\n right: `{}`", left, stringify!($($pattern)|+ $(if $guard)?) ), } } } pub(crate) fn blockhash(n: u64) -> BlockHash { let hex = format!("{n:x}");#44,993,334textInscription #44681285#44,681,285htmlInscription #43701104#43,701,104htmldmt-mint.nat#42,747,107tapdmt-mint.nat#42,747,104tapdmt-mint.nat#42,747,103tapdmt-mint.nat#42,747,101tapdmt-mint.nat#42,747,100tapdmt-mint.nat#42,747,097tapdmt-mint.nat#42,747,092tapdmt-mint.nat#42,747,084tapdmt-mint.nat#42,747,081tapdmt-mint.nat#42,747,079tapdmt-mint.nat#42,747,077tapdmt-mint.nat#42,747,073tapdmt-mint.nat#42,747,065tapdmt-mint.nat#42,747,064tapdmt-mint.nat#42,629,710tapInscription #42469829#42,469,829pngInscription #42469290#42,469,290pngInscription #42468007#42,468,007pngInscription #42468006#42,468,006pngmint1,000.bl0c#41,200,069brc-20mint1,000.bl0c#41,192,441brc-20mint1,000.bl0c#41,192,435brc-20mint1,000.bl0c#41,192,418brc-20mint1,000.bl0c#41,192,416brc-20mint1,000.bl0c#41,192,373brc-20mint1,000.bl0c#41,192,372brc-20mint1,000.bl0c#41,156,486brc-20mint1,000.bl0c#41,156,480brc-20mint1,000.bl0c#41,156,479brc-20mint1,000.bl0c#41,156,477brc-20mint1,000.bl0c#41,156,476brc-20mint1,000.bl0c#41,156,472brc-20mint1,000.bl0c#41,156,470brc-20mint1,000.bl0c#41,156,465brc-20mint1,000.bl0c#41,156,453brc-20mint1,000.bl0c#41,156,446brc-20mint1,000.bl0c#41,156,445brc-20mint1,000.bl0c#41,156,443brc-20mint1,000.bl0c#41,156,442brc-20mint1,000.bl0c#41,156,437brc-20mint1,000.bl0c#41,156,434brc-20mint1,000.bl0c#41,156,432brc-20mint1,000.bl0c#41,156,426brc-20mint1,000.bl0c#41,156,425brc-20mint1,000.bl0c#41,156,423brc-20mint1,000.bl0c#41,156,419brc-20mint1,000.bl0c#41,156,415brc-20mint1,000.bl0c#41,156,414brc-20