SHOWING: First 60
}),
Ok(None)
);
}
#[test]
fn deciphering_valid_runestone_with_invalid_script_returns_script_error() {
let result = Runestone::decipher(&Transaction {
input: Vec::new(),
output: vec![TxOut {
script_pubkey: ScriptBuf::from_bytes(vec![opcodes::all::OP_PUSHBYTES_4.to_u8()]),
value: 0,
}],
lock_time: locktime::absolute::LockTime::ZERO,
version: 0,
});
match result {
Ok(_) => panic!("expected error"),
Err(Error::Script(_)) => {}
Err(err) => panic!("unexpected error: {err}"),
}
}
#[test]
fn deciphering_valid_runestone_with_invalid_script_postfix_returns_script_error() {
let mut script_pubkey = script::Builder::new()
.push_opcode(opcodes::all::OP_RETURN)
.push_slice(b"RUNE_TEST")
.into_script()
.into_bytes();
script_pubkey.push(opcodes::all::OP_PUSHBYTES_4.to_u8());
let result = Runestone::decipher(&Transaction {
input: Vec::new(),
output: vec![TxOut {
script_pubkey: ScriptBuf::from_bytes(script_pubkey),
#44,985,310text case(3, "D");
case(4, "E");
case(5, "F");
case(6, "G");
case(7, "H");
case(8, "I");
case(9, "J");
case(10, "K");
case(11, "L");
case(12, "M");
case(13, "N");
case(14, "O");
case(15, "P");
case(16, "Q");
case(17, "R");
case(18, "S");
case(19, "T");
case(20, "U");
case(21, "V");
case(22, "W");
case(23, "X");
case(24, "Y");
case(25, "Z");
case(26, "AA");
case(27, "AB");
case(51, "AZ");
case(52, "BA");
case(u128::max_value() - 2, "BCGDENLQRQWDSLRUGSNLBTMFIJAT");
case(u128::max_value() - 1, "BCGDENLQRQWDSLRUGSNLBTMFIJAU");
case(u128::max_value(), "BCGDENLQRQWDSLRUGSNLBTMFIJAV");
}
#[test]
fn from_str_out_of_range() {
"BCGDENLQRQWDSLRUGSNLBTMFIJAW".parse::<Rune>().unwrap_err();
}
#[test]
#[allow(clippy::identity_op)]
#[allow(clippy::erasing_op)]
#[allow(clippy::zero_prefixed_literal)]
fn minimum_at_height() {
#[track_caller]
fn case(height: u32, minimum: &str) {
assert_eq!(Rune::minimum_at_height(Height(height)).to_string(), minimum);
#44,985,309text .push_slice(b"RUNE_TEST");
for chunk in payload.chunks(bitcoin::blockdata::constants::MAX_SCRIPT_ELEMENT_SIZE) {
let push: &bitcoin::script::PushBytes = chunk.try_into().unwrap();
builder = builder.push_slice(push);
}
builder.into_script()
}
fn payload(transaction: &Transaction) -> Result<Option<Vec<u8>>> {
for output in &transaction.output {
let mut instructions = output.script_pubkey.instructions();
if instructions.next().transpose()? != Some(Instruction::Op(opcodes::all::OP_RETURN)) {
continue;
}
if instructions.next().transpose()? != Some(Instruction::PushBytes(b"RUNE_TEST".into())) {
continue;
}
let mut payload = Vec::new();
for result in instructions {
if let Instruction::PushBytes(push) = result? {
payload.extend_from_slice(push.as_bytes());
}
}
return Ok(Some(payload));
}
Ok(None)
}
}
#[cfg(test)]
mod tests {
use {
super::*,
bitcoin::{locktime, script::PushBytes, ScriptBuf, TxOut},
#44,985,308textuse super::*;
struct KillOnDrop(std::process::Child);
impl Drop for KillOnDrop {
fn drop(&mut self) {
assert!(Command::new("kill")
.arg(self.0.id().to_string())
.status()
.unwrap()
.success());
}
}
#[test]
#[ignore]
fn preview() {
let port = TcpListener::bind("127.0.0.1:0")
.unwrap()
.local_addr()
.unwrap()
.port();
let examples = fs::read_dir("examples")
.unwrap()
.map(|entry| {
entry
.unwrap()
.path()
.canonicalize()
.unwrap()
.to_str()
.unwrap()
.into()
})
.filter(|example| example != "examples/av1.mp4")
.collect::<Vec<String>>();
let mut args = vec![
"preview".to_string(),
"--http-port".to_string(),
port.to_string(),
];
args.extend(examples.clone());
let builder = CommandBuilder::new(args);
let _child = KillOnDrop(builder.command().spawn().unwrap());
for attempt in 0.. {
if let Ok(response) = reqwest::blocking::get(format!("http://127.0.0.1:{port}/status")) {
#44,985,306text inputs: &[(
1,
0,
0,
inscription("text/plain;charset=utf-8", "hello").to_witness(),
)],
..Default::default()
});
let first_id = InscriptionId { txid, index: 0 };
let first_location = SatPoint {
outpoint: OutPoint { txid, vout: 0 },
offset: 0,
};
context.mine_blocks(10);
let txid = context.rpc_server.broadcast_tx(TransactionTemplate {
inputs: &[(
2,
0,
0,
inscription("text/plain;charset=utf-8", "hello").to_witness(),
)],
..Default::default()
});
let second_id = InscriptionId { txid, index: 0 };
let second_location = SatPoint {
outpoint: OutPoint { txid, vout: 0 },
offset: 0,
};
context.mine_blocks(1);
context
.index
.assert_inscription_location(second_id, second_location, Some(100 * COIN_VALUE));
context.rpc_server.invalidate_tip();
context.rpc_server.invalidate_tip();
#44,981,271text inputs: &[(
2,
0,
0,
inscription("text/plain;charset=utf-8", "hello").to_witness(),
)],
..Default::default()
});
let second_id = InscriptionId { txid, index: 0 };
let second_location = SatPoint {
outpoint: OutPoint { txid, vout: 0 },
offset: 0,
};
context.mine_blocks(1);
context
.index
.assert_inscription_location(second_id, second_location, Some(100 * COIN_VALUE));
context.rpc_server.invalidate_tip();
context.mine_blocks(2);
context
.index
.assert_inscription_location(first_id, first_location, Some(50 * COIN_VALUE));
assert!(!context.index.inscription_exists(second_id).unwrap());
}
}
#[test]
fn recover_from_3_block_deep_and_consecutive_reorg() {
for mut context in Context::configurations() {
context.index.set_durability(redb::Durability::Immediate);
context.mine_blocks(1);
let txid = context.rpc_server.broadcast_tx(TransactionTemplate {
#44,981,270textmsgstr ""
#: src/guides/collecting/sparrow-wallet.md:25
msgid ""
"Select `Use 12 Words` and then click `Generate New`. Leave the passphrase "
"blank."
msgstr "Selecciona `Use 12 Words` (Utilizar 12 palabras) y luego haz clic en `Generate New` (Generar nueva). Deja passphrase (Frase de contraseña) en blanco."
#: src/guides/collecting/sparrow-wallet.md:27
msgid ""
msgstr ""
#: src/guides/collecting/sparrow-wallet.md:29
msgid ""
"A new 12 word BIP39 seed phrase will be generated for you. Write this down "
"somewhere safe as this is your backup to get access to your wallet. NEVER "
"share or show this seed phrase to anyone else."
msgstr ""
"Se generará tu nueva frase semilla BIP39 de 12 palabras. Anota esto en un lugar seguro, ya que será tu respaldo para acceder a tu monedero. NUNCA compartas ni muestres esta frase semilla a nadie."
#: src/guides/collecting/sparrow-wallet.md:31
msgid "Once you have written down the seed phrase click `Confirm Backup`."
#44,981,102text"until the end of time."
msgstr ""
"_Bloques_: Se mina un bloque nuevo aproximadamente cada 10 minutos, desde "
"ahora hasta el fin de los tiempos."
#: src/overview.md:65
msgid ""
"_Difficulty adjustments_: Every 2016 blocks, or approximately every two "
"weeks, the Bitcoin network responds to changes in hashrate by adjusting the "
"difficulty target which blocks must meet in order to be accepted."
msgstr ""
"_Ajustes de dificultad_: Cada 2016 bloques, o aproximadamente cada dos "
"semanas, la red de Bitcoin responde a cambios en la tasa de hash ajustando "
"la dificultad que los bloques deben cumplir para ser aceptados."
#: src/overview.md:69
msgid ""
"_Halvings_: Every 210,000 blocks, or roughly every four years, the amount of "
"new sats created in every block is cut in half."
msgstr ""
"_Halvings_: Cada 210,000 bloques, o aproximadamente cada cuatro años, la cantidad "
"de nuevos Satoshis creados en cada bloque se reduce a la mitad."
#: src/overview.md:72
msgid ""
"_Cycles_: Every six halvings, something magical happens: the halving and the "
#44,981,086text #[arg(long, help = "Compress inscription content with brotli.")]
pub(crate) compress: bool,
#[arg(long, help = "Send inscription to <DESTINATION>.")]
pub(crate) destination: Option<Address<NetworkUnchecked>>,
#[arg(long, help = "Don't sign or broadcast transactions.")]
pub(crate) dry_run: bool,
#[arg(long, help = "Use fee rate of <FEE_RATE> sats/vB.")]
pub(crate) fee_rate: FeeRate,
#[arg(long, help = "Inscribe sat with contents of <FILE>.")]
pub(crate) file: Option<PathBuf>,
#[arg(
long,
help = "Include JSON in file at <METADATA> convered to CBOR as inscription metadata",
conflicts_with = "cbor_metadata"
)]
pub(crate) json_metadata: Option<PathBuf>,
#[clap(long, help = "Set inscription metaprotocol to <METAPROTOCOL>.")]
pub(crate) metaprotocol: Option<String>,
#[arg(long, help = "Do not back up recovery key.")]
pub(crate) no_backup: bool,
#[arg(
long,
help = "Do not check that transactions are equal to or below the MAX_STANDARD_TX_WEIGHT of 400,000 weight units. Transactions over this limit are currently nonstandard and will not be relayed by bitcoind in its default configuration. Do not use this flag unless you understand the implications."
#44,979,370textmsgid ""
msgstr ""
"Project-Id-Version: 序数理论手册\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2023-08-30 10:03+0800\n"
"Last-Translator: Dr.JingLee <[email protected]>\n"
"Language-Team: Chinese\n"
"Language: zh\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/SUMMARY.md:4 src/introduction.md:1
msgid "Introduction"
msgstr "介绍"
#: src/SUMMARY.md:5
msgid "Overview"
msgstr "概述"
#: src/SUMMARY.md:6 src/digital-artifacts.md:1
msgid "Digital Artifacts"
msgstr "数字文物"
#: src/SUMMARY.md:7 src/SUMMARY.md:17 src/overview.md:221 src/inscriptions.md:1
msgid "Inscriptions"
msgstr "铭文"
#: src/SUMMARY.md:8 src/inscriptions/metadata.md:1
msgid "Metadata"
msgstr "元数据"
#: src/SUMMARY.md:9 src/inscriptions/provenance.md:1
msgid "Provenance"
msgstr "溯源"
#: src/SUMMARY.md:10 src/inscriptions/recursion.md:1
msgid "Recursion"
msgstr "递归"
#: src/SUMMARY.md:11 src/inscriptions/pointer.md:1
msgid "Pointer"
msgstr "指针"
#: src/SUMMARY.md:12
#44,978,576text"an inscription, to modify it after it has been created."
msgstr ""
"인스크립이 생성된 후에는 작성자나 소유자가 이를 수정할 수 있는 방법이 없다."
#: /workspaces/ord_ko/docs/src/faq.md:118
msgid ""
"Ethereum NFTs _can_ be immutable, but many are not, and can be changed or "
"deleted by the NFT contract owner."
msgstr ""
"이더리움 NFT는 불변하는 것이 _가능_ 하지만, 많은 경우 불변하지 않으며, 스마"
"트 컨트랙트 소유자가 변경하거나 삭제할 수 있다."
#: /workspaces/ord_ko/docs/src/faq.md:121
msgid ""
"In order to make sure that a particular Ethereum NFT is immutable, the "
"contract code must be audited, which requires detailed knowledge of the EVM "
"and Solidity semantics."
msgstr ""
"특정 이더리움 NFT가 변경 불가능한지 확인하려면 컨트랙트 코드를 감사해야 하"
"며, 이를 위해서는 EVM과 솔리디티 시맨틱에 대한 자세한 지식이 필요하다."
#: /workspaces/ord_ko/docs/src/faq.md:125
msgid ""
"It is very hard for a non-technical user to determine whether or not a given "
"Ethereum NFT is mutable or immutable, and Ethereum NFT platforms make no "
"effort to distinguish whether an NFT is mutable or immutable, and whether "
"the contract source code is available and has been audited."
#44,978,108textdesecrating 51777
corporately 51846
hyattsville 51869
crecimiento 51900
legitimists 51994
cochinchina 52010
baculovirus 52068
calculative 52068
geosciences 52117
brownmiller 52135
kettledrums 52194
fingerlings 52212
mesenteries 52303
expatiating 52324
footballers 52342
nitrophenyl 52412
factfinding 52415
cuthbertson 52454
anorthosite 52467
fecundation 52540
hoffmeister 52548
homogenizer 52588
enkephalins 52614
legionnaire 52643
bridegrooms 52653
impossibile 52658
ausstellung 52784
burgdorferi 52794
consonances 52859
bodhidharma 52890
meloidogyne 52892
carpentaria 52898
fundraisers 52973
cunninghame 53085
monomorphic 53138
chakravorty 53167
nephrostomy 53171
ellenberger 53255
alessandria 53272
klassischen 53294
conjugating 53298
archeologia 53301
disordering 53317
icosahedron 53350
bismarckian 53360
homeworkers 53381
juridically 53478
haptoglobin 53533
combinatory 53567
counterflow 53574
eicosanoids 53608
enfranchise 53616
narrativity 53652
babysitters 53661
nonliterate 53678
ironworkers 53694
battlefront 53708
#44,975,853textfingerboard 57170
brutalizing 57214
materialien 57222
electroanal 57259
caressingly 57415
doordarshan 57434
cholesteryl 57475
choroiditis 57477
diaphoretic 57531
filmography 57543
monatshefte 57720
chakrabarty 57738
granovetter 57765
microspores 57788
economische 57811
charioteers 57827
histiocytic 57887
blasphemers 57890
nationstate 57912
hideousness 57929
duplicative 58032
nociceptors 58038
blepharitis 58048
chakraborty 58097
entranceway 58133
feudalistic 58141
intraductal 58182
dovetailing 58199
ecofeminism 58222
canaliculus 58247
bundelkhand 58281
denotations 58287
greengrocer 58380
glossolalia 58431
exculpation 58482
electroweak 58519
metasomatic 58547
malposition 58575
cogitations 58579
carabinieri 58605
externalize 58687
experiencia 58736
ethologists 58779
bioreactors 58850
deceitfully 58881
cappadocian 58884
concussions 58915
hilariously 58960
escutcheons 58965
architraves 59050
enteropathy 59087
disarmingly 59116
lunacharsky 59135
inspissated 59211
amphiphilic 59245
goldsworthy 59276
allpowerful 59318
#44,975,850textdispatchers 65803
keratinized 65806
isochronous 65878
haematology 65896
krasnoyarsk 65900
kaliningrad 65966
canandaigua 66003
enrichments 66228
hearthstone 66318
anthocyanin 66382
fetishistic 66412
chakravarty 66433
distractors 66434
embarrasses 66435
firecracker 66448
ephemerides 66492
judgemental 66502
litigations 66511
demoiselles 66521
gottfredson 66522
agrarianism 66675
copperheads 66697
diffidently 66706
changements 66898
ineluctably 66956
atheistical 66975
carthusians 66976
microporous 66987
catholiques 67021
creationist 67056
kinesiology 67103
marshallian 67165
intermixing 67170
mycorrhizae 67262
blackmailer 67300
halberstadt 67315
britannique 67318
albatrosses 67329
countermand 67331
fibrocystic 67348
boilerplate 67352
degradative 67368
koninklijke 67414
aftershocks 67448
idiographic 67482
capitalizes 67487
interruptus 67574
candelabrum 67578
literalness 67593
multiphoton 67599
anticyclone 67643
extrication 67650
mahalanobis 67671
fenestrated 67694
feloniously 67707
consecrates 67751
cytokinesis 67805
#44,975,849text