วิธีสร้าง Bitcoin Transaction ด้วยมือเปล่า

Bitcoin Transaction คืออะไร? วิธีสร้างด้วยมือเปล่าใน 8 ขั้นตอน

เคยสงสัยไหมว่า ตอนที่เรากด Send Bitcoin ใน Wallet จริง ๆ แล้วเบื้องหลังมันกำลังทำอะไรอยู่?

ถ้าวันหนึ่งไม่มี Wallet ให้ใช้
ไม่มีปุ่ม Send ให้กด
ไม่มีหน้าจอสวย ๆ มาคอยจัดการทุกอย่างให้เรา…

เรายังสามารถสร้าง Bitcoin Transaction ขึ้นมาเองได้ไหม?

คำตอบคือ ได้

บทความนี้เราจะลองถอด Wallet ออกทีละชั้น แล้วสร้าง Bitcoin Transaction “ด้วยมือเปล่า” ตั้งแต่การเลือก Tools ที่เราจะใช้, กำหนดว่าจะส่งมันไปที่ไหน, สร้าง Transaction ขึ้นมา ไปจนถึงการเซ็น Transaction ก่อนส่งออกไปยัง Bitcoin Network

เป้าหมายไม่ใช่การทรมานตัวเองด้วยการทำสิ่งที่ Wallet ทำให้เราได้ภายในไม่กี่วินาที 😆

แต่คือการเปิดฝากระโปรงดูว่า Bitcoin ทำงานอย่างไรจริง ๆ

เพราะเมื่อคุณสร้าง Transaction เองได้สักครั้ง คำว่า UTXO, Input, Output, Fee, Signature, Private Key และ Broadcast จะไม่ใช่ศัพท์ลึกลับอีกต่อไป

และที่สำคัญ คุณจะเริ่มเข้าใจประโยคหนึ่งที่คน Bitcoin ชอบพูดกันว่า

“Don’t trust. Verify.”

เอาล่ะ…

เก็บ Wallet ของคุณไว้ก่อน

วันนี้เราจะลองสร้าง Bitcoin Transaction ด้วยมือของเราเอง


สิ่งที่ต้องไปเป็น Input ก็คือ

1.TxID อันที่จะใช้งาน (ใส่เป็น Little Endian นะ)
2.Script Pubkey ของ TxID นั้นๆ (ไป Copy ใน Mempool.space มาได้เลย)

สิ่งที่จำเป็นสำหรับ Output ก็คือ

1.จำนวนที่ต้องการโอน (ใส่เป็น Hex แล้วเติมศูนย์ข้างหน้าให้เต็ม 64 bits หรือ 8 Bytes แล้วก็ทำการ Little Endian ก่อนที่จะนำไปใส่)
2.ใส่ Address ที่ไม่ติด Encode Base 58 (ให้ลบ Prefix 1 byte แรกทิ้งไป แล้วก็ลบ Checksum 4 byte หลังทิ้งไปด้วย)

หลังจากนั้นก็เอามาใส่ที่ Template นี้ได้เลย


ด้านบนนั้นเป็นภาพ Bitcoin Transaction Template แต่ถ้าหากคุณอยาก Copy แล้ว Paste คุณสามารถทำได้โดยการ Copy ตัวอักษรที่อยู่ด้านล่างนี้ (มันอาจจะดูแตกๆหน่อยนะ หากคุณเปิดด้วยมือถือ) หากคุณต้องการที่จะศึกษาอย่าง Deep Deep จาก Bitcoin Developer Wiki ก็สามารถมาตำได้ ที่นี่ เลยนะครับ

01000000 ......................................... Version

01 ............................................... Number of inputs
|
| 7b1eabe0209b1fe794124575ef807057
| c77ada2138ae4fa8d6c4de0398a14f3f ............... Outpoint TXID
| 00000000 ....................................... Outpoint index number
|
| xx ............................................. Bytes in sig script: xx
| | xxxxxxxxxx ................................... Script Pubkey

ffffffff ......................................... Sequence number

01 ............................................... Number of outputs
| f0ca052a01000000 ............................... Satoshi
|
| 17 ............................................. Bytes in pubkey script
| | a9 ........................................... OP_HASH160
| | 14 ........................................... Push 20 bytes as data
| | | cbc20a7664f2f69e5355aa427045bc15e7c6c772 ... PubKey hash
| | 87 ........................................... OP_EQUAL

00000000 ......................................... locktime: 0

จากนั้นก็ให้ลบขยะทิ้งทั้งหมดแล้วก็ทำเป็น Serialize ให้ติดกันเป็นสายยาว จากนั้นก็เอาไป Sign ด้วย Private Key ที่นี่ได้เลย

https://nubits.com/cointoolkit

เมื่อเราตรวจสอบ Raw Transaction ของเราแล้วและหลังจากนี้ก็เอาไปประกาศใน Server ของ Bitcoin ได้เลย

https://mempool.space/tx/push

นี่คือเครื่องมือที่ใช้ในการช่วยสร้าง Transaction

1.Web สำหรับ Encode ต่างๆ
https://privatekeys.pw/calc

2.Web สำหรับการสร้าง Sign Transaction
https://nubits.com/cointoolkit/
https://coinb.in/

3.Web สำหรับสร้าง Private Key
https://www.walletgenerator.net

4.Web สำหรับจัดเรียง Big Endian ไปสู่ Little Endian
https://blockchain-academy.hs-mittweida.de/litte-big-endian-converter/

5.Web สำหรับนับ Byte (ต้องนำยอดมาหาร 2 ด้วยนะ)
https://mothereff.in/byte-counter

6.Web สำหรับ Bitcoin Developer ไว้ดูตัวอย่าง Transaction
https://developer.bitcoin.org/reference/transactions.html

7.Web สำหรับดู Script
https://en.bitcoin.it/wiki/Script


ถ้าอยากอ่านแบบละเอียดๆ มาตรงนี้ได้เลย

Bitcoin Wallet กำลังซ่อนอะไรจากเรา?

Hardware Wallet นั้นทำให้การรับส่ง Bitcoin ดูง่ายดายมากๆ

ใส่ Address → ใส่จำนวน → กด Send

แต่เบื้องหลังปุ่ม Send นั้น มีหลายๆอย่างเกิดขึ้น อาทิเช่น

อันดับแรกเลยก็คือ เราต้องมี Bitcoin ที่สามารถนำมาใช้ได้

อันดับที่ 2 ก็คือเราต้องบอกว่า Bitcoin เหล่านั้นมาจาก Transaction ไหน ? เนื่องจากระบบของ Bitcoin นั้นมัน Refer Transaction ต่อๆกันไป

อันดับที่ 3 คือเราต้องระบุเจ้าของคนใหม่ว่าใครจะเป็นเจ้าของ Bitcoin อันนี้ต่อไป

อันดับที่ 4 คือเราต้องคำนวณเงินทอน

อันดับที่ 5 คือเราต้องกำหนด Transaction Fee ให้กับคนที่ทำเหมืองขุด Bitcoin หรือสิ่งที่เราเรียกว่า Miner

และสุดท้าย…

เราต้องพิสูจน์ว่า เรามีสิทธิใช้ Bitcoin ก้อนนี้จริงๆใช่หรือไม่ ?

ด้วย Private Key ของเรา

Bitcoin ไม่ได้เก็บ “ยอดเงินในบัญชี” แบบที่ธนาคารพาณิชย์ทำ สิ่งที่ Bitcoin Wallet ทำนั้นเป็นเพียงการแสดง balance ของคุณที่เกิดจากการนั่งนับ UTXO ที่สามารถใช้เป็น input ของ transaction ใหม่ได้


วันนี้เราจะขว้าง Bitcoin Wallet ทิ้งไป

เป้าหมายของบทความนี้ไม่ใช่การหาวิธีส่ง Bitcoin ที่ง่ายที่สุด

เพราะถ้าเป้าหมายคือความง่าย…

เปิด Bitcoin Wallet แล้วกด Send ง่ายกว่าเยอะ 😂

เป้าหมายของเราคือการเปิดฝากระโปรงของระบบ Bitcoin

แล้วดูว่าเครื่องยนต์ข้างในทำงานอย่างไร ?

เราจะสร้าง Transaction ตั้งแต่ :

UTXO → Input → Output → Fee → Raw Transaction → Signature → Broadcast

ทันทีที่คุณอ่านบทความนี้จบลง คำเหล่านี้จะไม่ใช่ศัพท์ลึกลับอีกต่อไป เริ่ม!!!


1. ก่อนสร้าง Transaction เราต้องเข้าใจ UTXO

ระบบ Bitcoin ไม่มีสมุดบัญชีที่เขียนว่า

Martin : 0.005 BTC

มันไม่เหมือนกับระบบบัญชีธนาคารที่คุณคุ้นเคย

มันแตกต่าง

Bitcoin มองสิ่งที่ยังใช้ได้ในรูปของ Unspent Transaction Outputs — UTXOs

Transaction ใหม่จะอ้างอิง output จาก transaction ก่อนหน้า และจะนำมันมาเป็น input ให้กับ transaction ถัดไป

ส่วน output ใหม่ที่ยังไม่ถูกใช้ก็จะกลายเป็น UTXO ที่สามารถถูกใช้ต่อไปในอนาคต

นี่คือจุดแรกที่ Mental Model ของ Bitcoin เริ่มแตกต่างจากธนาคาร

[→ อ่านต่อ: UTXO คืออะไร?]


2. ภาค Input — Bitcoin ของเรามาจากไหน?

ถ้าเราจะใช้ Bitcoin เราต้องระบุว่า

“ผมกำลังจะใช้ Bitcoin ก้อนไหน ?”

ซึ่งระบบของ Bitcoin นั้นมันจะแบ่งออกเป็นก้อนๆ 

ไม่ได้รวมยอดเหมือน Book Bank ของธนาคารพานิชย์

Input จึงอ้างอิงไปยัง Output เก่าด้วย Transaction ID

พูดง่าย ๆ คือ :

Input = สิ่งที่เรากำลังนำมาใช้


3. ภาค Output — Bitcoin จะไปอยู่กับใคร?

ต่อมาเราต้องกำหนดว่า Bitcoin ที่กำลังใช้นั้นมันจะเดินทางไปที่ไหน ?

นี่คือ Output

สมมุติเรามี UTXO ก้อนแรกซึ่งเป็นจำนวน:

100,000 sats

แล้วต้องการจ่ายให้ Bob เป็นจำนวน:

70,000 sats

เราอาจสร้าง :

Output #1 → Bob: 70,000 sats

แต่เดี๋ยวก่อน…

แล้วอีก 30,000 sats หายไปไหน?


4. ภาคเงินทอน — Bitcoin ไม่มีการ “ตัดบางส่วน” จาก UTXO

UTXO ที่ถูกใช้จะถูกใช้ทั้งก้อน เหมือนกับเวลาที่เราเอาแคชเชียร์เช็ค (Cashier’s Cheque) ไปขึ้นเงินกับธนาคาร คือมันต้องไปทั้งดุ้น ไม่มีการดึงยอดไปแบบครึ่งๆกลางๆ

ดังนั้นถ้ามูลค่าของ Input จะต้องมากกว่าจำนวนที่เราต้องการส่งจริง เรามักสร้าง Output อีกตัวเพื่อส่งส่วนที่เหลือ วกวนกลับมาให้ตัวเอง

นี่เรียกว่า

Change Output

ตัวอย่างเช่น :

Input : 100,000 sats

Bob : 70,000 sats
Change : 29,500 sats
ค่า Mining Fee ของเหมืองขุด : 500 sats

เพราะค่าธรรมเนียมของ transaction คือส่วนต่างระหว่างมูลค่ารวมของ inputs และ outputs

ตอนนี้ Transaction ของเราเริ่มเป็นรูปเป็นร่างแล้ว


5. แต่ใครก็สร้าง Transaction แบบนี้ได้ไม่ใช่เหรอ?

นี่คือคำถามสำคัญ

ใครก็สามารถเขียนข้อมูลว่า

เอา Bitcoin ก้อนนี้ไปส่งให้ Bob

ได้

แล้ว Bitcoin Network รู้ได้อย่างไรว่า คนที่สร้าง Transaction มีสิทธิใช้ UTXO นั้นจริง ?

ตรงนี้เองที่เราจะเจอกับ…

Private Key และ Digital Signature

เราจะใช้ Private Key เพื่อสร้างหลักฐานทาง cryptography สำหรับการ authorize การใช้ Bitcoin โดยที่เครื่อง node server สามารถตรวจสอบเงื่อนไขของ input กับ output เดิมได้โดยไม่จำเป็นต้องรู้ Private Key ของเรา

นี่คือจุดที่ Bitcoin เริ่มน่าสนใจมาก

เพราะเราไม่ได้ส่ง Password สำหรับการโอน Bitcoin ให้ Network Node Server

เราไม่ได้โทรหาธนาคารพานิชย์

เราไม่ได้ขออนุญาตบริษัท Bitcoin Inc.

เราแค่ต้องแสดง หลักฐานทางคณิตศาสตร์ ก็เท่านั้น!!!

หากต้องการศึกษารายละเอียดในระดับ Protocol เพิ่มเติม หรืออยากทราบวิธีการทำงานของ Node Server สามารถอ่านได้จาก Bitcoin Core Documentation


6. จากข้อมูลทั้งหมดจึงนำไปสู่ → Raw Bitcoin Transaction

ตอนนี้เรามีส่วนประกอบต่าง ๆ แล้ว

เราจะนำมันมาประกอบกันเป็น Bitcoin Transaction จริง

คุณจะเริ่มเห็นข้อมูลที่หน้าตาประมาณ:

0200000001...

ตัวอักษรเลขฐาน 16 หรือ Hex ยาว ๆ ที่ดูเหมือนไม่มีความหมาย

แต่หลังจากบทความนี้…

คุณจะสามารถมองข้อมูลก้อนนั้นแล้วเริ่มแยกออกว่า

ตรงไหนคือ Version Number ?

ตรงไหนคือ Input ?

ตรงไหนคือ Output ?

ตรงไหนคือ Amount หรือจำนวนที่ต้องการจะโอน ?

ตรงไหนคือ Script ?

และ Transaction กำลังพยายามทำอะไร ?


7. ขั้นตอนการ Sign Transaction

จากนั้นเราจะทำสิ่งสำคัญที่สุดอย่างหนึ่ง

ขั้นตอนการ Sign

การทำ Signer คือการใช้ key ที่เกี่ยวข้องเพื่อสร้าง signature สำหรับ input ที่เจ้าของคนนั้นมีสิทธิใช้ยอดเงินนั้นๆ และ Bitcoin สามารถตรวจสอบ authorization นั้นตามกฎของ transaction/script ได้

นี่คือเหตุผลที่ Private Key สำคัญมาก

เพราะ Bitcoin ไม่ได้ถามว่า

“คุณชื่ออะไร?”

Bitcoin ถามว่า

“คุณสามารถสร้างหลักฐานที่ตรงกับเงื่อนไขในการใช้ Bitcoin ก้อนนี้ได้หรือไม่ ?” มันก็แค่นั้นเอง


8. ขั้นตอนการ Broadcast

เมื่อ Transaction พร้อมแล้ว…

เราจะส่งข้อมูล Transaction ออกไปยัง Bitcoin Network Node Server

Node Server ที่ได้รับ transaction แล้วก็จะสามารถตรวจสอบข้อมูลตามกฎของ Bitcoin ก่อนที่จะส่งต่อ และ transaction ที่ valid ก็สามารถเข้าสู่กระบวนการนั่งรอ เพื่อให้ Transaction นั้นๆถูกนำไปใส่ใน block chain โดยมี Miner หรือเหมืองขุด Bitcoin เป็นคนทำสิ่งนี้

และตรงนี้เองที่สิ่งที่เราเขียนขึ้นมาด้วยมือ…

ก็จะกลายเป็น Bitcoin Transaction จริงๆ !!!


แล้วเราทำทั้งหมดนี้ไปทำไม?

คุณอาจถามว่า

ในเมื่อเรามี Bitcoin Wallet ทำทั้งหมดนี้ให้เราได้ภายในไม่กี่วินาที แล้วเราจะมานั่งสร้าง Transaction เองทำไม ?

เพราะหลังจากทำมันเองสักครั้งนึงเท่านั้นแหละ

แล้วคำว่า

“Bitcoin is permissionless”

จะมีความหมายไม่เหมือนเดิมอีกต่อไป !!!

คุณไม่ได้เชื่อเพราะ Influencer บอก

คุณไม่ได้เชื่อเพราะ Exchange โฆษณา

และคุณไม่ได้เชื่อเพราะ DJ Tar บอก

คุณเห็นด้วยตาตัวเองว่า Protocol ทำงานอย่างไร !!!

นี่อาจเป็นหนึ่งในบทเรียนที่สำคัญที่สุดของ Bitcoin:

Don’t trust. Verify.

Bitcoin ไม่ได้ขอให้คุณเชื่อมัน

มันเปิดเผยกฎเกณฑ์ทั้งหมดไว้ให้คุณตรวจสอบแล้ว

และวันนี้…

เราจะเริ่มตรวจสอบมันด้วยมือของเราเอง ^_^


คำถามที่พบบ่อยเกี่ยวกับ Bitcoin Transaction

Bitcoin Transaction คืออะไร ?

Bitcoin Transaction คือข้อมูลที่ระบุการใช้ UTXO เดิมเป็น Input และสร้าง Output ใหม่ โดยทุกอย่างต้องเป็นไปตามเงื่อนไขของ Bitcoin Protocol

UTXO คืออะไร?

UTXO ย่อมาจาก Unspent Transaction Output คือ Output ที่มาจาก Transaction ก่อนหน้าที่ยังไม่ถูกใช้งาน และสามารถนำมาเป็น Input ของ Transaction ใหม่ได้อย่างง่ายดาย

สามารถสร้าง Bitcoin Transaction โดยไม่ใช้ Wallet ได้หรือไม่ ?

แน่นอนว่า ได้!!! เพราะ Bitcoin Wallet นั้นเป็นแค่เครื่องมือที่ช่วยสร้างและจัดการ Transaction ให้สะดวกขึ้นก็เท่านั้น แต่ตัว Bitcoin Protocol ไม่ได้กำหนดว่าคุณต้องใช้ Wallet GUI เพื่อสร้าง Transaction

ค่าธรรมเนียมหรือ Bitcoin Transaction Fee นั้นไปไหน?

Transaction Fee เป็นส่วนต่างระหว่างมูลค่ารวมของ Input และ Output และเป็นค่าธรรมเนียมที่ทุกๆ transaction จะต้องจ่ายให้ miner หรือคนทำเหมืองขุด Bitcoin ซึ่งเป็นผู้รวบรวม transaction ทั้งหลายเข้าไปบรรจุอยู่ใน block chain

Similar Posts

  • Digital Signature คืออะไร? Bitcoin พิสูจน์ว่าเป็นเจ้าของได้อย่างไร โดยไม่เปิดเผย Private Key

    Digital Signature คืออะไร? ถ้าผมบอกคุณว่า… ผมสามารถพิสูจน์กับคนทั้งโลกได้ว่า “ผมมี Private Key ของแท้” โดยที่… ผมไม่ต้องเอา Private Key ให้ใครดูเลยแม้แต่นิดเดียว คุณจะเชื่อมั้ย? หรือคุณอาจถามว่า : “แล้วกูจะรู้ได้ยังไงว่ามึงมีของจริง?” 😂 นี่แหละครับคือหนึ่งในความมหัศจรรย์ของ Cryptography ที่ Bitcoin ใช้ ในบทความก่อนหน้าเรื่อง Private Key คืออะไร? ทำไมคนที่ถือ Key ถึงควบคุม Bitcoin ได้? เรารู้แล้วว่า Private Key ไม่ใช่ Password และ Bitcoin ก็ไม่ได้ถูกเก็บอยู่ใน Private Key Private Key คือ Secret ที่สามารถนำมาใช้สร้างหลักฐานทาง Cryptography เพื่ออนุญาตให้เราทำการ Spend Bitcoin ตามเงื่อนไขที่กำหนดไว้ได้อย่างสบายใจ ซึ่งอีหลักฐานที่ว่านี้คือสิ่งที่เรียกว่า :…

  • Private Key คืออะไร? ทำไมคนที่ถือ Key ถึงควบคุม Bitcoin ได้?

    “แล้วใครมีสิทธิ Spend UTXO ก้อนนั้น?” นี่คือคำถามที่เรียกได้ว่าเด็ดดวงที่สุดในปฐพี Private Key คืออะไร? ถ้าผมตอบแบบสั้นที่สุด… มันคือ ความลับ ที่ทำให้คุณสามารถสร้างหลักฐานทางคณิตศาสตร์ เพื่ออนุญาตให้ Bitcoin ของคุณเอาไป Spend ได้ แต่เดี๋ยวก่อน… ประโยคนี้มีอะไรแปลก ๆ อยู่หนึ่งอย่าง ผมไม่ได้พูดว่า : Private Key คือรหัสผ่านของ Bitcoin และผมก็ไม่ได้พูดว่า : Private Key คือที่เก็บ Bitcoin เพราะจริง ๆ แล้ว… Bitcoin ไม่ได้สิงอยู่ใน Private Key ของคุณ มันไม่ได้อยู่ใน Hardware Wallet ด้วยนะ ไม่ได้อยู่ในมือถือด้วยนะ ไม่ได้อยู่ใน Trezor ด้วยนะ และไม่ได้อยู่ในกระดาษที่คุณเขียน Seed Phrase เก็บเอาไว้นะ Bitcoin อยู่บน…

  • UTXO คืออะไร? ทำไม Bitcoin ถึงไม่มี Balance อยู่จริง

    UTXO คืออะไร? ถ้าคุณเพิ่งเริ่มศึกษา Bitcoin คำนี้อาจฟังดูเหมือนศัพท์เทคนิคที่เข้าใจยาก แต่จริง ๆ แล้ว UTXO คือหนึ่งในแนวคิดพื้นฐานที่สุดของ Bitcoin และถ้าคุณเข้าใจมัน คุณจะเริ่มเห็นทันทีว่า Bitcoin ทำงานแตกต่างจากบัญชีธนาคารที่เราใช้กันทุกวันอย่างไร ถ้าผมถามคุณว่า… “ตอนนี้คุณมีเงินอยู่ในบัญชีธนาคารเท่าไหร่?” คุณอาจเปิด Mobile Banking ขึ้นมา แล้วตอบว่า ฉันมีเงินอยู่ 50,000 บาท ก็โอเค๊ นั่นมันง่ายมาก เพราะระบบธนาคารทำให้เราคุ้นเคยกับสิ่งที่เรียกว่า Account Base Balance แน่นอนว่าธนาคารมีบัญชีของคุณที่เป็นระบบฐานข้อมูล Databaseและในบัญชีนั้นมีตัวเลขเขียนเอาไว้ว่า นาย A มีเงิน = 50,000 บาท ถ้าคุณโอนให้ Bob 10,000 บาท ระบบก็ทำหน้าที่หักลบตัวเลขออกประมาณว่า: นาย A เหลือยอดเงินในบัญชีคือ : 50,000 → 40,000 บาท และนาย Bob ก็จะมียอดเงินเพิ่มขึ้นเป็น…