ไลบรารี JS ขั้นต่ำสำหรับลำดับและคำจารึกที่อยู่ด้านบนของ scure-btc-signer
ใช้เป็นไลบรารีในโค้ด JS ของคุณ หรือเรียกใช้เครื่องมือ CLI ที่มีมาให้ คำจารึกอนุญาตให้อัปโหลดไฟล์สุ่มบนบล็อคเชน BTC
การทดลอง: อาจทำให้สูญเสียเงินทุนจนกว่าจะได้รับการทดสอบอย่างละเอียด
npm ติดตั้งไมโครออร์ดินาล
การสร้างจารึก
TypeScript API
คลีไอ
// npm ติดตั้ง micro-ordinals @scure/btc-signer @scure/baseimport * เป็น btc จาก '@scure/btc-signer'; นำเข้า * เป็นลำดับจาก 'micro-ordinals'; นำเข้า { hex, utf8 } จาก '@ scure/base';const TESTNET = btc.utils.TEST_NETWORK;const privKey = hex.decode('0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a');const pubKey = btc.utils.pubSchnorr(privKey);const customScripts = [ordinals.OutOrdinalReveal]; // เปิดใช้งานสคริปต์ที่กำหนดเองภายนอก // สิ่งนี้จะจารึกไว้ที่ satoshi แรกของอินพุตแรก (ค่าเริ่มต้น) const inscription = { แท็ก: {contentType: 'application/json', // สามารถเป็นรูปแบบใดก็ได้ (ประเภท MIME) // ContentEncoding: 'br', // การบีบอัด: รองรับ brotli เท่านั้น - เนื้อความ: utf8.decode (JSON.stringify ({ บาง: 1, ทดสอบ: 2, จารึก: จริง, ใน: 'json' })) // สามารถใช้สคริปต์ js ที่ถูกจารึกไว้ก่อนหน้านี้ใน html // utf8.decode(`<html><head></head><body><script src="/content/script_inscription_id"></script>ทดสอบ</html>`)};constเปิดเผยการชำระเงิน = btc.p2tr ( ไม่ได้กำหนด // InternalPubKey ordinals.p2tr_ord_reveal (pubKey, [จารึก]), // TaprootScriptTree TESTNET, // mainnet หรือ testnet เท็จ // AllowUnknownOutputs คุณลักษณะด้านความปลอดภัย customScripts // วิธีจัดการสคริปต์ที่กำหนดเอง);// เราจำเป็นต้องส่ง bitcoins บางส่วนไปยังที่อยู่นี้ก่อนที่จะเปิดเผย// นอกจากนี้ควรมีเพียงพอที่จะครอบคลุมเปิดเผย tx fee.console.log('Address',เปิดเผยPayment.address) ; // 'tb1p5mykwcq5ly7y2ctph9r2wfgldq94eccm2t83dd58k785p0zqzwkspyjkp5'// โปรดใช้ความระมัดระวังเป็นพิเศษ: อาจเป็นไปได้ที่จะส่งคำจารึกโดยไม่ได้ตั้งใจโดยต้องเสียค่าธรรมเนียม// นอกจากนี้ ความหายากจะมีให้ใช้งานเฉพาะกับ ordinal wallet เท่านั้น// แต่คุณสามารถแยกวิเคราะห์คำจารึกอื่น ๆ และสร้างคำจารึกทั่วไปโดยใช้สิ่งนี้ได้ ค่าคงที่ changeAddr = เปิดเผยPayment.address; // อาจแตกต่างกันได้ constเปิดเผยจำนวน = 2000n;ค่าธรรมเนียม const = 500n;const tx = ใหม่ btc.ธุรกรรม({ customScripts });tx.addInput({ ...เปิดเผยการชำระเงิน, // นี่คือ txid ของ tx พร้อม bitcoin ที่เราส่งไป (แทนที่) txid: '75ddabb27b8845f5247975c8a5ba7c6f336c4570708ebe230caf6db5217ae858', ดัชนี: 0, พยานUtxo: { สคริปต์:เปิดเผยPayment.script จำนวน:เปิดเผยAmount },});tx.addOutputAddress(changeAddr, เผยAmount - ค่าธรรมเนียม, TESTNET);tx.sign(privKey, ไม่ได้กำหนด, Uint8Array ใหม่ (32));tx.finalize() ;const txHex = hex.encode(tx.extract());console.log(txHex); // Hex ของการเปิดเผย tx ถึง Broadcastconst tx2 = btc.Transaction.fromRaw(hex.decode(txHex)); // แยกวิเคราะห์ inscriptionsconsole.log('parsed', ordinals.parseWitness(tx2.inputs[0].finalScriptWitness));console.log('vsize', tx2.vsize); // เผย tx ควรจ่ายค่าธรรมเนียมขั้นต่ำเท่านี้
นำเข้า { Coder } จาก '@scure/base'; นำเข้า * เป็น P จาก 'micro-packed'; นำเข้า { ScriptType, OptScript, CustomScript } จาก '@scure/btc-signer'; type Bytes = Uint8Array; ส่งออกประกาศ const InscriptionId : P.Coder<string, Bytes>;type TagRaw = {tag: Bytes;data: Bytes;};ประกาศ const TagCoders: {ตัวชี้: P.CoderType<bigint>;contentType: P.CoderType<string>;parent: P.Coder<string, Uint8Array>;metadata: P.CoderType<any>;metaprotocol: P.CoderType<string>; contentEncoding: P.CoderType<string>;มอบหมาย: P.Coder<string, Uint8Array>;rune: P.CoderType<bigint>;หมายเหตุ: P.CoderType<string>;};ประเภทการส่งออก Tags = บางส่วน<{[K in keyof typeof TagCoders]: P.UnwrapCoder<(typeof TagCoders)[K]>;}> & { ไม่ทราบ?: [ไบต์, ไบต์] [];}; ประเภทการส่งออก Inscription = { แท็ก: แท็ก; เนื้อความ: ไบต์; สาปแช่ง?: บูลีน; };พิมพ์ OutOrdinalRevealType = { ประเภท: 'tr_ord_reveal'; pubkey: ไบต์; จารึก: จารึก[]; };ส่งออกประกาศ const OutOrdinalReveal: Coder<OptScript, OutOrdinalRevealType | }; ไม่ได้กำหนด> & CustomScript; ส่งออกประกาศฟังก์ชัน parseInscriptions (สคริปต์: ScriptType, เข้มงวด?: บูลีน): จารึก [] | ไม่ได้กำหนด;/** * แยกวิเคราะห์คำจารึกจากการเปิดเผยพยานอินพุต tx (tx.inputs [0].finalScriptWitness) */ ส่งออกประกาศฟังก์ชัน parseWitness (พยาน: ไบต์ []): จารึก [] | undefinition;/** * สร้างรายการเปิดเผย คำจารึกที่สร้างขึ้นเกี่ยวกับการใช้จ่ายจากที่อยู่นี้โดย * เปิดเผยสคริปต์ taproot */export ประกาศฟังก์ชัน p2tr_ord_reveal (pubkey: Bytes, คำจารึก: คำจารึก []): {type: string;script: Uint8Array;};
npm ติดตั้ง -g micro-ordinals ord file.jpg
การใช้งาน: ord [--net mainnet|testnet] [--คีย์ priv] [--คีย์การกู้คืน] [--compress=on|off] [--ค่าธรรมเนียม 10.1] [--ที่อยู่ addr]
สุทธิ: เครือข่าย bitcoin
priv: รหัสส่วนตัว taproot ในรูปแบบ WIF จะถูกใช้สำหรับการเปิดเผยธุรกรรม อย่าใช้กระเป๋าเงินของคุณ priv ควรเป็นอันใหม่ เราสร้างคีย์ชั่วคราว หากไม่มีการระบุไว้
การกู้คืน: คีย์ส่วนตัวของ taproot ในรูปแบบ WIF สามารถใช้เพื่อกู้คืน bitcoin ใด ๆ ที่ส่งไปยังที่อยู่จารึกโดยไม่ได้ตั้งใจโดยไม่ต้องจ่ายค่าธรรมเนียมการจารึกเต็มจำนวน
บีบอัด: จารึกที่บีบอัดด้วย brotli เข้ากันได้กับนักสำรวจ ค่าเริ่มต้น=เปิด
ค่าธรรมเนียม: ค่าธรรมเนียมเครือข่าย bitcoin เป็น satoshis
ที่อยู่: ที่อยู่ที่จะส่งจารึกหลังจากเปิดเผย สำคัญ: วันเสาร์แรกจะถูกจารึกไว้เสมอ ไม่รองรับการจารึกเป็นกลุ่ม
ไม่มีรหัสเครือข่าย มันทำให้แพ็คเกจปลอดภัยยิ่งขึ้น แต่ลดประสบการณ์ของนักพัฒนาลง
เราอาจดึงค่าธรรมเนียมได้โดยอัตโนมัติ แต่การเลือก utxo จะซับซ้อนมากขึ้น ตัวอย่างเช่น หากผู้ใช้ได้จารึกบางสิ่งบางอย่างไว้ก่อนหน้านี้หรือมีลำดับที่หายาก เราจำเป็นต้องเข้าถึงโหนดลำดับจึงจะทราบสิ่งนั้น นอกจากนี้ เรายังไม่รู้อะไรเลยเกี่ยวกับเอาท์พุตที่ถูกแช่แข็งในกระเป๋าเงิน: มันอยู่ภายในกระเป๋าเงินเท่านั้น
กรณี Edge ที่ควรคำนึงถึง:
ผู้ใช้เพิ่ม txid/index ผิดหรือออกจากแอปพลิเคชันหลังจากส่ง
เราพิมพ์คีย์ส่วนตัวชั่วคราว ผู้ใช้สามารถรีสตาร์ทได้โดยระบุ '--priv'
หากค่าธรรมเนียม/เครือข่าย/เส้นทางยาวเท่ากัน คุณสามารถเริ่มกระบวนการใหม่ได้
ผู้ใช้ส่งน้อยกว่าจำนวนหรือหลาย UTXO
นี่เป็นเรื่องยากกว่าจริงๆ เพราะการใช้จ่ายใดๆ จะต้องเสียค่าธรรมเนียมการจารึกเต็มจำนวน
สำหรับสิ่งนี้เราเพิ่ม recovery
ใช้ mempool และ ordinalsbot
มีก๊อกน้ำหลายแบบ: uo1, eu, ปั๊ม
วิธีใช้กระจอกบน mac:
open /Applications/Sparrow.app --args -n testnet
MIT (c) Paul Miller (https://paulmillr.com) ดูไฟล์ใบอนุญาต