transfer300.pizza#71,409,976brc-20transfer630,000.ansm#68,606,997brc-20mint42,000.ansm#68,582,155brc-20mint42,000.ansm#68,582,154brc-20mint42,000.ansm#68,582,153brc-20mint42,000.ansm#68,582,152brc-20mint42,000.ansm#68,582,151brc-20mint42,000.ansm#68,582,150brc-20mint42,000.ansm#68,582,149brc-20mint42,000.ansm#68,582,147brc-20mint42,000.ansm#68,582,138brc-20mint42,000.ansm#68,582,124brc-20mint42,000.ansm#68,582,097brc-20mint42,000.ansm#68,582,096brc-20mint42,000.ansm#68,582,095brc-20mint42,000.ansm#68,582,088brc-20mint42,000.ansm#68,582,087brc-20#56,871,566gltf#56,871,565gltf#56,871,564gltf#56,871,563gltf#56,871,562gltf#56,871,561gltf#56,871,560gltf#56,871,559gltf#56,871,558gltf#56,871,557gltf#56,265,125gltf#56,265,124gltf#56,265,123gltf#56,265,122gltf#56,265,121gltf#56,265,120gltf#56,265,119gltf#56,265,118gltf#56,265,117gltf#56,265,116gltftransfer46,000.turt#49,686,507brc-20Inscription #49503484#49,503,484pngInscription #49503443#49,503,443pngInscription #49503435#49,503,435pngInscription #49503434#49,503,434pngInscription #49503430#49,503,430pngInscription #49503419#49,503,419pngtransfer5,000.rcsv#49,089,112brc-20transfer10,000.rcsv#48,641,377brc-20 }), 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 "![](images/wallet_setup_02.png)" #: 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 "![](images/wallet_setup_03.png)" msgstr "![](images/wallet_setup_03.png)" #: 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