transfer100.pizza#71,281,033brc-20Inscription #59909735#59,909,735webp"with their values:" msgstr "" "3つの入力と2つの出力を持つ取引を想像してみましょう。入力は矢印の左側にあり、" "出力は右側にあり、値のラベルが付いています:" #: src/faq.md:55 msgid "" "```\n" "[2] [1] [3] → [4] [2]\n" "```" msgstr "" #: src/faq.md:57 msgid "" "Now let's label the same transaction with the ordinal numbers of the " "satoshis that each input contains, and question marks for each output slot. " "Ordinal numbers are large, so let's use letters to represent them:" msgstr "" "今は、各入力に含まれる小数点以下の番号で同じトランザクションをマークし、各出" "力スロットに疑問符をマークします。序数は大きいので、それらをアルファベットで" "表します:" #: src/faq.md:61 msgid "" "```\n" "[a b] [c] [d e f] → [? ? ? ?] [? ?]\n" "```" msgstr "" #: src/faq.md:63 msgid "" "To figure out which satoshi goes to which output, go through the input " "satoshis in order and assign each to a question mark:" msgstr "" "どの出力からどの出力への出力かを確認するには、入力の出力を順番にチェックし、" "各出力に疑問符を割り当てます:" #: src/faq.md:66 msgid "" "```\n" "[a b] [c] [d e f] → [a b c d] [e f]\n" "```" msgstr "" #: src/faq.md:68 msgid "" "What about fees, you might ask? Good question! Let's imagine the same " #44,987,705text"<INSCRIPTION_ID>`をリクエストすることで他の碑文のコンテンツにアクセスできるよ" "うになります。" #: src/inscriptions/recursion.md:9 msgid "This has a number of interesting use-cases:" msgstr "ここは面白い用例がとても多いです:" #: src/inscriptions/recursion.md:11 msgid "Remixing the content of existing inscriptions." msgstr "既存の銘文の内容を再混合します。" #: src/inscriptions/recursion.md:13 msgid "" "Publishing snippets of code, images, audio, or stylesheets as shared public " "resources." msgstr "" "コード、イメージ、オーディオ、またはスタイルシートフラグメントを共通の共有ア" "セットとしてパブリッシュします。" #: src/inscriptions/recursion.md:16 msgid "" "Generative art collections where an algorithm is inscribed as JavaScript, " "and instantiated from multiple inscriptions with unique seeds." msgstr "" "アルゴリズムがJava Scriptを使用して刻印され、ユニークなシードを持つ複数の銘文" "からインスタンス化されたアートコレクションを生成します。" #: src/inscriptions/recursion.md:19 msgid "" "Generative profile picture collections where accessories and attributes are " "inscribed as individual images, or in a shared texture atlas, and then " "combined, collage-style, in unique combinations in multiple inscriptions." #44,987,667text ) -> ServerResult<Response> { let inscription_id = match query { InscriptionQuery::Id(id) => id, InscriptionQuery::Number(inscription_number) => index .get_inscription_id_by_inscription_number(inscription_number)? .ok_or_not_found(|| format!("{inscription_number}"))?, }; let entry = index .get_inscription_entry(inscription_id)? .ok_or_not_found(|| format!("inscription {inscription_id}"))?; let inscription = index .get_inscription_by_id(inscription_id)? .ok_or_not_found(|| format!("inscription {inscription_id}"))?; let satpoint = index .get_inscription_satpoint_by_id(inscription_id)? .ok_or_not_found(|| format!("inscription {inscription_id}"))?; let output = if satpoint.outpoint == unbound_outpoint() || satpoint.outpoint == OutPoint::null() { None } else { Some( index .get_transaction(satpoint.outpoint.txid)? .ok_or_not_found(|| format!("inscription {inscription_id} current transaction"))? #44,985,967text ) .into_response(), ), Media::Model => Ok( ( [( header::CONTENT_SECURITY_POLICY, "script-src-elem 'self' https://ajax.googleapis.com", )], PreviewModelHtml { inscription_id }, ) .into_response(), ), Media::Pdf => Ok( ( [( header::CONTENT_SECURITY_POLICY, "script-src-elem 'self' https://cdn.jsdelivr.net", )], PreviewPdfHtml { inscription_id }, ) .into_response(), ), Media::Text => Ok(PreviewTextHtml { inscription_id }.into_response()), Media::Unknown => Ok(PreviewUnknownHtml.into_response()), Media::Video => Ok(PreviewVideoHtml { inscription_id }.into_response()), } } async fn inscription( Extension(page_config): Extension<Arc<PageConfig>>, Extension(index): Extension<Arc<Index>>, Path(DeserializeFromStr(query)): Path<DeserializeFromStr<InscriptionQuery>>, accept_json: AcceptJson, #44,985,963text .unwrap() .inscription_number, -2 ); assert_eq!( vec![ cursed, reinscription_on_cursed, second_reinscription_on_cursed ], context .index .get_inscriptions_on_output_with_satpoints(OutPoint { txid, vout: 0 }) .unwrap() .iter() .map(|(_satpoint, inscription_id)| *inscription_id) .collect::<Vec<InscriptionId>>() ) } } #[test] fn reinscriptions_on_output_correctly_ordered_and_transferred() { for context in Context::configurations() { context.mine_blocks(1); let txid = context.rpc_server.broadcast_tx(TransactionTemplate { inputs: &[( 1, 0, 0, inscription("text/plain;charset=utf-8", "hello").to_witness(), )], ..Default::default() }); let first = InscriptionId { txid, index: 0 }; context.mine_blocks(1); let txid = context.rpc_server.broadcast_tx(TransactionTemplate { #44,985,962text )? { output.push(OutputTsv { sat: sat.into(), output: outpoint, }); } Ok(Box::new(output)) } else { let mut output = Vec::new(); for (outpoint, sat, offset, rarity) in rare_sats(utxos) { output.push(OutputRare { sat, output: outpoint, offset, rarity, }); } Ok(Box::new(output)) } } } fn rare_sats(utxos: Vec<(OutPoint, Vec<(u64, u64)>)>) -> Vec<(OutPoint, Sat, u64, Rarity)> { utxos .into_iter() .flat_map(|(outpoint, sat_ranges)| { let mut offset = 0; sat_ranges.into_iter().filter_map(move |(start, end)| { let sat = Sat(start); let rarity = sat.rarity(); let start_offset = offset; offset += end - start; if rarity > Rarity::Common { Some((outpoint, sat, start_offset, rarity)) } else { None } }) }) .collect() } fn sats_from_tsv( utxos: Vec<(OutPoint, Vec<(u64, u64)>)>, #44,985,920textuse {super::*, crate::wallet::Wallet}; #[derive(Debug, Parser)] pub(crate) struct Sats { #[arg( long, help = "Find satoshis listed in first column of tab-separated value file <TSV>." )] tsv: Option<PathBuf>, } #[derive(Serialize, Deserialize)] pub struct OutputTsv { pub sat: String, pub output: OutPoint, } #[derive(Serialize, Deserialize)] pub struct OutputRare { pub sat: Sat, pub output: OutPoint, pub offset: u64, pub rarity: Rarity, } impl Sats { pub(crate) fn run(&self, options: Options) -> SubcommandResult { let index = Index::open(&options)?; if !index.has_sat_index() { bail!("sats requires index created with `--index-sats` flag"); } index.update()?; let utxos = index.get_unspent_output_ranges(Wallet::load(&options)?)?; if let Some(path) = &self.tsv { let mut output = Vec::new(); for (outpoint, sat) in sats_from_tsv( utxos, &fs::read_to_string(path) .with_context(|| format!("I/O error reading `{}`", path.display()))?,#44,985,919textdmt-mint.nat#44,767,264tapdmt-mint.nat#44,765,632tapdmt-mint.nat#44,765,631tapdmt-mint.nat#44,765,630tapdmt-mint.nat#44,765,629tapdmt-mint.nat#44,765,628tapdmt-mint.nat#44,765,627tapdmt-mint.nat#44,765,625tapdmt-mint.nat#44,765,624tapdmt-mint.nat#44,765,623tapdmt-mint.nat#44,765,622tapdmt-mint.nat#44,765,620tapdmt-mint.nat#44,765,619tapdmt-mint.nat#44,765,618tapdmt-mint.nat#44,765,617tapdmt-mint.nat#44,765,616tapdmt-mint.nat#44,765,615tapdmt-mint.nat#44,765,612tapdmt-mint.nat#44,765,608tapdmt-mint.nat#44,765,607tapdmt-mint.nat#44,765,606tapdmt-mint.nat#44,765,605tapdmt-mint.nat#44,765,604tapdmt-mint.nat#44,765,603tapdmt-mint.nat#44,482,875tapdmt-mint.nat#44,479,989tapdmt-mint.nat#44,479,988tapdmt-mint.nat#44,479,987tapdmt-mint.nat#44,479,986tapdmt-mint.nat#44,479,985tapdmt-mint.nat#44,479,984tapdmt-mint.nat#44,479,983tapdmt-mint.nat#44,479,982tapdmt-mint.nat#44,479,981tapdmt-mint.nat#44,479,980tapdmt-mint.nat#44,479,979tapdmt-mint.nat#44,479,978tapdmt-mint.nat#44,479,977tapdmt-mint.nat#44,479,976tapdmt-mint.nat#44,479,975tapdmt-mint.nat#44,479,974tapdmt-mint.nat#44,479,973tapdmt-mint.nat#44,479,972tapdmt-mint.nat#44,479,971tapdmt-mint.nat#44,479,970tapdmt-mint.nat#44,479,969tapdmt-mint.nat#44,479,968tapdmt-mint.nat#44,479,967tapdmt-mint.nat#44,479,909tapdmt-mint.nat#44,476,733tapdmt-mint.nat#44,476,732tap