SHOWING: First 60
"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