TXID คืออะไร?

txid

TXID (Transaction ID ของรายการธุรกรรม) คือตัวเลขระบุรายการธุรกรรม Bitcoin 

ตัวอย่าง 

  • f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16การทำธุรกรรมครั้งแรกของ Bitcoin ที่ส่งให้ Half Finney ในปี 2010 
  • a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d – รายการธุรกรรมพิซซ่ามูลค่า 10,000 เหรียญ Bitcoin ในปี 2010 

TXID มักจะมีขนาด 32 ไบต์ (64 ตัวอักษร) และเป็นตัวเลขฐานสิบหก(hexadecimal) 

การสร้าง TXID

คุณจะได้รับ TXID โดยการ Hash ข้อมูลรายการธุรกรรมผ่าน SHA256 สองครั้ง

0100000001c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd370400000000484730440220
4e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd
12909d831cc56cbbac4622082221a8768d1d0901ffffffff0200ca9a3b00000000434104ae1a62fe09c5f51b13905f
07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a
704f7e6cd84cac00286bee0000000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6
909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000

169e1e83e930853391bc6f35f605c6754cfead57cf8387639d3b4096c54f18f4

(Note: ย้อนกลับคำสั่งไบต์ (reverse the byte order) ก่อนหากคุณต้องการจะหารายการธุรกรรมนี้บน Blockchain)

sha256
sha256

การค้นหา TXID บน Blockchain

หากคุณเพิ่งจะทำการ Hash ข้อมูลรายการธุรกรรมบางรายการและต้องการที่จะหา TXID บน Blockchain คุณต้องค้นหามันในการย้อนกลับคำสั่งไบต์ (reverse the byte order)

txid (original):  169e1e83e930853391bc6f35f605c6754cfead57cf8387639d3b4096c54f18f4
txid (searching): f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16

ทำไมล่ะ?

เพราะว่า ยินดีต้อนรับเข้าสู่ Bitcoin

ตามอุบัติเหตุที่ไม่คาดฝันในอดีต tx และตัวเลข Hash ของบล็อก (Block Hash) ที่โปรแกรม Bitcoin ใช้คือการย้อนกลับไบต์ (byte-reversed) ฉันไม่แน่ใจเท่าไหร่นักว่าทำไม บางทีอาจจะเป็นอะไรสักอย่างที่เหมือนกับการใช้ openssl bignum ในการเก็บเลข Hash หรืออะไรประมาณนั้น จากนั้นก็ปริ้นต์มันออกมาเป็นตัวเลข – Wladimir van der Laan (นักพัฒนา Bitcoin)

กล่าวคือ นี้เป็นเรื่องที่เหนือการคาดการณ์ของนักพัฒนาในระยะเริ่มต้นของ Bitcoin ซึ่งตอนนี้ได้กลายมาเป็นมาตรฐานไปแล้ว

TXID จะถูกใช้ที่ไหน

1. ใช้ในการหา Blockchain

หากคุณเพิ่งทำรายการธุรกรรม คุณสามารถใช้ TXID เพื่อที่จะหามันใน Blockchain ยกตัวอย่างเช่น 

bitcoin-cli getrawtransaction 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098
get-raw-transaction

หน้าต่างควบคุมใน Bitcoin Core Wallet

2. ใช้ข้อมูล Output

คุณใช้ TXID เมื่อคุณต้องการที่จะใช้ข้อมูล Output ที่มีอยู่ให้เป็นข้อมูล Input ในรายการธุรกรรมใหม่

ในการอ้างถึงข้อมูล Output ที่มีอยู่แล้ว คุณจะใช้ txid ที่มันสร้างขึ้นมา คู่ไปกับเลข vout สำหรับรายการธุรกรรมนั้นๆ

เพราะว่าในท้ายที่สุดแล้ว TXID คือข้อมูลเฉพาะที่ unique เพื่อใช้ระบุตัวตนสำหรับรายการธุรกรรม 

Note

ทำไมต้องทำการ Hash สองครั้งด้วย? ทำไมไม่ทำครั้งเดียว?

การที่ทำการ Hash สองครั้งใน Bitcoin จะทำให้เกิดความปลอดภัยในระดับสูงสุดเป็นพิเศษทีเดียว 

SHA-256 (SHA-256(X))” ถูกเสนอโดย Furguson และ Schneier ในหนังสือที่ยอดเยี่ยมของพวกเขา   “Practical Cryptography” (อัพเดทล่าสุดโดย Ferguson, Schneier และ Kohno และเปลี่ยนชื่อเป็น “Cryptography Engineering”) โดยวิธีการทำ SHA-256 จะช่วยลดความเสี่ยงในการ “เพิ่มความยาว” การโจมตี พวกเขาเรียกมันว่า “SHA-256d”

https://crypto.stackexchange.com/questions/779/hashing-or-encrypting-twice-to-increase-security/884#884

รายการธุรกรรมแรกของบล็อก (Coinbase transaction) มี TXID เดียวกัน

มีสถานการณ์ที่รายการธุรกรรมแรกของบล็อก (Coinbase transaction) สองรายการที่ไม่เหมือนกันแต่กลับมี TXID เหมือนกัน 

รายการธุรกรรมแรกของบล็อก (Coinbase transaction) นี้ใช้ที่อยู่ (address) เมื่อรับรางวัลจากการขุดบล็อกจากบล็อกสองบล็อกด้วยกัน นี้หมายความว่าข้อมูลรายการธุรกรรมดังกล่าวเหมือนกันและ TXID ก็จะเหมือนกันเช่นเดียวกัน นี้คือรายการธุรกรรมและบล็อกที่ถูกรวมเข้าด้วยกัน

  1. e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468
    • block 91,722: 00000000000271a2dc26e7667f8419f2e15416dc6955e5a6c6cdf3f2574dd08e
    • block 91,880: 00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721
  1. d5d27987d2a3dfc724e359870c6644b40e497bdc0589a033220fe15429d88599
    • block 91,812: 00000000000af0aed4792b1acee3d966af36cf5def14935db8de83d6f9306f2f
    • block 91,842: 00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec

การแก้ไข

ในตอนแรก BIP 30 ได้แนะนำกฎที่จะป้องกันบล็อกไม่ให้เก็บ TXID ที่มีอยู่แล้ว หลังจากนั้น BIP 34 ก็กำหนดให้รายการธุรกรรมแรกของบล็อก (Coinbase transaction) รวมเอาความสูงของบล็อกที่พวกมันขุดเข้าไปในข้อมูลรายการธุรกรรมด้วย เพราะฉะนั้น รายการธุรกรรมแรกของบล็อก (Coinbase transaction) อาจจะแตกต่างออกไป