Cryptology Academy · บทเรียน

สคริปต์ Bitcoin และการตรวจสอบลายมือชื่อ UTXO

ติดตามสคริปต์ pay-to-public-key-hash (P2PKH) และการลงนามด้วย ECDSA

บทเรียน 4 จาก 413 ขั้นตอน

สคริปต์ Bitcoin และการตรวจสอบลายมือชื่อ UTXO เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

แบบจำลอง UTXO

บิตคอยน์ใช้เอาต์พุตธุรกรรมที่ยังไม่ได้ใช้จ่าย (UTXO) แต่ละ UTXO คือเหรียญที่มีสคริปต์ล็อก (scriptPubKey) หากต้องการใช้จ่ายเหรียญนั้น ผู้ใช้จ่ายต้องระบุสคริปต์ปลดล็อก (scriptSig) ที่ตรงตามเงื่อนไขของสคริปต์ล็อก UTXO เป็นหน่วยอะตอม — ใช้จ่ายแล้วหรือยังไม่ได้ใช้จ่ายเท่านั้น ไม่สามารถใช้จ่ายเพียงบางส่วนได้

สคริปต์บิตคอยน์

สคริปต์บิตคอยน์เป็นภาษาที่ทำงานบนสแตกและไม่สมบูรณ์แบบทัวริง สคริปต์ทำงานโดยนำข้อมูลเข้าสู่สแตกแล้วเรียกใช้รหัสปฏิบัติการ ไม่มีลูป ไม่มีการเรียกซ้ำ — สคริปต์จบการทำงานเสมอ ข้อจำกัดนี้มีไว้โดยตั้งใจเพื่อป้องกันการโจมตีแบบปฏิเสธการให้บริการ และทำให้การตรวจสอบสคริปต์มีความซับซ้อน O(n) ตามความยาวของสคริปต์

P2PKH: จ่ายไปยังแฮชกุญแจสาธารณะ

ประเภทเอาต์พุตที่พบบ่อยที่สุด scriptPubKey: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG scriptSig: การทำงาน: นำลายเซ็นและกุญแจสาธารณะเข้าสู่สแตก ทำสำเนากุญแจสาธารณะ คำนวณแฮชแบบ hash160 เปรียบเทียบกับแฮชที่ฝังอยู่ แล้วตรวจสอบลายเซ็น ECDSA หากทุกขั้นตอนผ่าน เหรียญนั้นก็สามารถใช้จ่ายได้

ลำดับการทำงานของ P2PKH

ลำดับการทำงานบนสแตกของ P2PKH: นำ เข้าไป; นำ เข้าไป; OP_DUP → นำสำเนาเข้าไป; OP_HASH160 → คำนวณ hash160 ของค่าด้านบนสุด; นำ เข้าไป; OP_EQUALVERIFY → นำสองค่าออก และล้มเหลวหากค่าไม่เท่ากัน; OP_CHECKSIG → นำลายเซ็นและ pubKey ออก ตรวจสอบ ECDSA แล้วนำ TRUE/FALSE เข้าไป สคริปต์สำเร็จเมื่อได้ TRUE

ECDSA ในบิตคอยน์

บิตคอยน์ใช้ ECDSA บนเส้นโค้ง secp256k1 (เส้นโค้ง Koblitz, y^2 = x^3 + 7 mod p) คีย์ส่วนตัว d ∈ [1, n-1] คีย์สาธารณะ Q = d*G Sign(m): k แบบสุ่ม; r = (k*G).x mod n; s = k^{-1}(H(m)+r*d) mod n ลายเซ็น = (r, s) และเข้ารหัสแบบ DER ใน scriptSig

ประเภท SIGHASH

ลายเซ็นของบิตคอยน์จะผูกกับส่วนที่ระบุของธุรกรรม: SIGHASH_ALL (ค่าเริ่มต้น): ลงนามอินพุตและเอาต์พุตทั้งหมด SIGHASH_SINGLE: ลงนามเฉพาะเอาต์พุตที่สอดคล้องกัน SIGHASH_NONE: ไม่ลงนามเอาต์พุตใดเลย (อันตราย) SIGHASH_ANYONECANPAY: ลงนามเฉพาะอินพุตของตนเอง — ทำให้สร้างธุรกรรมร่วมกันได้

P2SH: จ่ายไปยังแฮชสคริปต์

P2SH ทำให้สามารถซ่อนเงื่อนไขการใช้จ่ายที่ซับซ้อนไว้เบื้องหลังแฮชได้ scriptPubKey: OP_HASH160 OP_EQUAL scriptSig: การทำงาน: ตรวจสอบว่า hash(redeemScript) == scriptHash จากนั้นจึงทำงานตาม redeemScript วิธีนี้ทำให้ใช้ลายเซ็นหลายฝ่ายได้โดยไม่ต้องเปิดเผยเงื่อนไขจนกว่าจะถึงเวลาที่ใช้จ่าย

ลายเซ็นหลายฝ่าย (2 จาก 3)

redeemScript: OP_2 OP_3 OP_CHECKMULTISIG scriptSig: OP_0 OP_0 ใช้แก้ปัญหาจากข้อบกพร่องใน OP_CHECKMULTISIG ซึ่งนำรายการออกจากสแตกเกินมาอีกหนึ่งรายการ ลายเซ็นหลายฝ่ายแบบ 2 จาก 3 ต้องใช้ลายเซ็นใดก็ได้ 2 รายการจากทั้งหมด 3 รายการ

SegWit และ P2WPKH

พยานแบบแยกส่วน (SegWit, BIP-141) ย้ายลายเซ็นออกจาก scriptSig ไปไว้ในช่องพยานแยกต่างหาก วิธีนี้แก้ปัญหาการดัดแปลงธุรกรรม (ID จะเปลี่ยนหาก scriptSig เปลี่ยน) scriptPubKey ของ P2WPKH: OP_0 <20-byte pubKeyHash> พยาน: [ ]

Taproot (P2TR)

Taproot (BIP-340/341/342) ใช้ลายเซ็นชนอร์และต้นไม้นิพจน์เชิงนามธรรมที่สร้างเป็นเมอร์เคิล (MAST) การใช้จ่ายแบบเริ่มต้น: ลายเซ็นชนอร์เพียงรายการเดียว (แยกไม่ออกจากการใช้จ่ายผ่านเส้นทางคีย์) เงื่อนไขที่ซับซ้อนจะถูกซ่อนไว้ในต้นไม้เมอร์เคิล และเปิดเผยเมื่อมีการใช้งานเท่านั้น ช่วยเพิ่มทั้งความเป็นส่วนตัวและประสิทธิภาพ

การตรวจสอบสคริปต์ในโค้ด

Bitcoin Core ตรวจสอบสคริปต์ด้วยตัวแปลคำสั่งที่ใช้สแตก CheckSig เรียก VerifyScript ซึ่งทำงานกับ scriptSig+scriptPubKey ที่รวมกัน สำหรับรหัสปฏิบัติการ CHECKSIG แต่ละรายการ ระบบจะเรียก CheckECDSASignature เพื่อตรวจสอบ (r,s) ที่เข้ารหัสแบบ DER กับแฮชของธุรกรรมโดยใช้ secp256k1

ตรวจสอบอย่างรวดเร็ว

OP_CHECKSIG ตรวจสอบอะไรในสคริปต์ P2PKH

สรุปทบทวน

UTXO ใช้สคริปต์บิตคอยน์ที่ทำงานบนสแตก P2PKH เป็นรูปแบบการใช้จ่ายที่พบบ่อยที่สุด — ตรวจสอบแฮชของกุญแจสาธารณะ แล้วตรวจสอบลายเซ็น ECDSA SegWit แก้ปัญหาการดัดแปลงธุรกรรม ส่วน Taproot เพิ่มชนิดลายเซ็นชนอร์และ MAST บทถัดไป: การวิเคราะห์รหัสลับเชิงผลต่าง

เริ่มต้นได้ฟรี

เรียนรู้ Cryptology Academy ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
67
บทเรียน
261

คำถามที่พบบ่อย

บทเรียน “สคริปต์ Bitcoin และการตรวจสอบลายมือชื่อ UTXO” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “สคริปต์ Bitcoin และการตรวจสอบลายมือชื่อ UTXO” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “สคริปต์ Bitcoin และการตรวจสอบลายมือชื่อ UTXO”

ติดตามสคริปต์ pay-to-public-key-hash (P2PKH) และการลงนามด้วย ECDSA คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “สคริปต์ Bitcoin และการตรวจสอบลายมือชื่อ UTXO” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม

ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. สายโซ่แฮชและการเชื่อมโยงบล็อก
  2. ต้นไม้ Merkle: ความถูกต้องของธุรกรรมในระดับใหญ่
  3. Proof of Work: การขุดและการปรับความยาก
  4. สคริปต์ Bitcoin และการตรวจสอบลายมือชื่อ UTXO
← กลับไปที่ Cryptology Academy