minting-claim#66,078,415orc-20Inscription #50395182#50,395,182html"digital money." msgstr "" "Se as inscrições provarem, como os autores esperam, serem artefatos digitais " "muito procurados com uma história rica, elas servirão como um gancho poderoso " "para a adoção do Bitcoin: venha pela diversão e arte rica, fique pelo dinheiro " "digital descentralizado." #: src/faq.md:327 msgid "" "Inscriptions are an extremely benign source of demand for block space. " "Unlike, for example, stablecoins, which potentially give large stablecoin " "issuers influence over the future of Bitcoin development, or DeFi, which " "might centralize mining by introducing opportunities for MEV, digital art " "and collectables on Bitcoin, are unlikely to produce individual entities " "with enough power to corrupt Bitcoin. Art is decentralized." msgstr "" "As inscrições são uma fonte extremamente benigna de demanda por espaço de bloco. " "Ao contrário, por exemplo, das stablecoins, que potencialmente dão aos grandes " "emissores de stablecoin influência sobre o futuro do desenvolvimento do Bitcoin, "#45,003,561text let acme_cache = if let Some(acme_cache) = acme_cache { acme_cache.clone() } else { options.data_dir()?.join("acme-cache") }; Ok(acme_cache) } fn acme_domains(&self) -> Result<Vec<String>> { if !self.acme_domain.is_empty() { Ok(self.acme_domain.clone()) } else { Ok(vec![System::new() .host_name() .ok_or(anyhow!("no hostname found"))?]) } } fn http_port(&self) -> Option<u16> { if self.http || self.http_port.is_some() || (self.https_port.is_none() && !self.https) { Some(self.http_port.unwrap_or(80)) } else { None } } fn https_port(&self) -> Option<u16> { if self.https || self.https_port.is_some() { Some(self.https_port.unwrap_or(443)) } else { None } } fn acceptor(&self, options: &Options) -> Result<AxumAcceptor> { let config = AcmeConfig::new(self.acme_domains()?) .contact(&self.acme_contact) .cache_option(Some(DirCache::new(Self::acme_cache( self.acme_cache.as_ref(),#45,003,556textuse super::*; fn target_as_block_hash(target: bitcoin::Target) -> BlockHash { BlockHash::from_raw_hash(Hash::from_byte_array(target.to_le_bytes())) } #[derive(Boilerplate)] pub(crate) struct BlockHtml { hash: BlockHash, target: BlockHash, best_height: Height, block: Block, height: Height, inscription_count: usize, featured_inscriptions: Vec<InscriptionId>, } impl BlockHtml { pub(crate) fn new( block: Block, height: Height, best_height: Height, inscription_count: usize, featured_inscriptions: Vec<InscriptionId>, ) -> Self { Self { hash: block.header.block_hash(), target: target_as_block_hash(block.header.target()), block, height, best_height, inscription_count, featured_inscriptions, } } } #[derive(Debug, PartialEq, Serialize, Deserialize)] pub struct BlockJson { pub hash: BlockHash, pub target: BlockHash, pub best_height: u32, pub height: u32, pub inscriptions: Vec<InscriptionId>, } impl BlockJson { pub(crate) fn new(#45,003,553textpub(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}");#45,003,543text output_1 ), ); ord_server.assert_response_regex( format!("/inscription/{}", output.inscriptions[1].id), format!( r".*<dt>parent</dt>\s*<dd>.*{parent_id}.*</dd>.*<dt>output value</dt>.*<dd>10000</dd>.*.*<dt>location</dt>.*<dd class=monospace>{}:0</dd>.*", output_2 ), ); ord_server.assert_response_regex( format!("/inscription/{}", output.inscriptions[2].id), format!( r".*<dt>parent</dt>\s*<dd>.*{parent_id}.*</dd>.*<dt>output value</dt>.*<dd>10000</dd>.*.*<dt>location</dt>.*<dd class=monospace>{}:0</dd>.*", output_3 ), ); } #[test] fn batch_in_separate_outputs_with_parent_and_non_default_postage() { let rpc_server = test_bitcoincore_rpc::spawn(); rpc_server.mine_blocks(1); assert_eq!(rpc_server.descriptors().len(), 0); create_wallet(&rpc_server); let parent_output = CommandBuilder::new("wallet inscribe --fee-rate 5.0 --file parent.png") .write("parent.png", [1; 520]) .rpc_server(&rpc_server) .run_and_deserialize_output::<Inscribe>();#45,003,530text "index_path": ".*\.redb", "leaf_pages": \d+, "metadata_bytes": \d+, "outputs_traversed": 0, "page_size": \d+, "sat_ranges": 0, "stored_bytes": \d+, "tables": .*, "transactions": \[ \{ "starting_block_count": 0, "starting_timestamp": \d+ \} \], "tree_height": \d+, "utxos_indexed": 0 \} "#, ) .run_and_extract_stdout(); } #[test] fn transactions() { let rpc_server = test_bitcoincore_rpc::spawn(); let tempdir = TempDir::new().unwrap(); let index_path = tempdir.path().join("index.redb"); assert!(CommandBuilder::new(format!( "--index {} index info --transactions", index_path.display() )) .rpc_server(&rpc_server) .run_and_deserialize_output::<Vec<TransactionsOutput>>() .is_empty()); rpc_server.mine_blocks(10); let output = CommandBuilder::new(format!( "--index {} index info --transactions", index_path.display() )) .rpc_server(&rpc_server) .run_and_deserialize_output::<Vec<TransactionsOutput>>(); assert_eq!(output[0].start, 0); #45,003,529textmint1.tuna#44,954,828brc-20mint1.tuna#44,954,827brc-20mint1.tuna#44,954,826brc-20mint1.tuna#44,954,825brc-20mint1.tuna#44,954,824brc-20mint1.tuna#44,953,242brc-20mint1.tuna#44,953,241brc-20mint1.tuna#44,953,240brc-20mint1.tuna#44,953,239brc-20mint1.tuna#44,953,238brc-20mint1.tuna#44,953,237brc-20mint1.tuna#44,953,236brc-20mint1.tuna#44,953,235brc-20mint1.tuna#44,953,234brc-20mint1.tuna#44,953,233brc-20mint10,000.teng#44,943,380brc-20mint10,000.teng#44,943,379brc-20mint10,000.teng#44,943,378brc-20mint10,000.teng#44,943,377brc-20mint10,000.teng#44,943,376brc-20mint10,000.teng#44,943,375brc-20mint10,000.teng#44,943,374brc-20mint10,000.teng#44,943,373brc-20mint10,000.teng#44,943,372brc-20mint10,000.teng#44,943,371brc-20mint10,000.teng#44,922,954brc-20mint10,000.teng#44,922,953brc-20mint10,000.teng#44,922,952brc-20mint10,000.teng#44,922,951brc-20mint10,000.teng#44,922,950brc-20mint10,000.teng#44,922,949brc-20mint10,000.teng#44,922,948brc-20mint10,000.teng#44,922,947brc-20mint10,000.teng#44,922,946brc-20mint10,000.teng#44,922,945brc-20dmt-mint.nat#44,611,845tapdmt-mint.nat#44,611,844tapdmt-mint.nat#44,611,843tapdmt-mint.nat#44,611,842tapdmt-mint.nat#44,611,841tapdmt-mint.nat#44,611,840tapdmt-mint.nat#44,611,839tapdmt-mint.nat#44,611,838tapdmt-mint.nat#44,611,837tapdmt-mint.nat#44,611,836tapdmt-mint.nat#44,611,835tapdmt-mint.nat#44,611,834tapdmt-mint.nat#44,569,867tapdmt-mint.nat#44,569,851tapdmt-mint.nat#44,569,850tapdmt-mint.nat#44,569,849tapdmt-mint.nat#44,569,848tap