Bitcoin Address คืออะไร และถูกสร้างมาจาก Private Key ได้อย่างไร

Bitcoin Address คืออะไร? มันถูกสร้างมาจาก Private Key ได้อย่างไร?

ครั้นนึกถึงตอนผมเป็นมือใหม่แล้วเพิ่งเริ่มได้สัมผัสกับ Bitcoin ซึ่งในช่วงเวลานั้นผมเข้าใจเรื่อง Address ง่ายมากครับ

1.เปิด Wallet

2.กด Receive

Application ของ Exchange มันก็โยนตัวหนังสือยาว ๆ มาให้ชุดหนึ่ง

ซึ่งจะมีหน้าตาประมาณนี้

bc1q...

พร้อม QR Code ยึก ๆ ยือ ๆ อันนึง

จากนั้นผมก็ทำการ Copy แล้วส่งให้คนที่จะโอน Bitcoin มาให้

จบข่าวในพระราชสำนัก…

Bitcoin Address ก็คงเหมือนเลขบัญชีธนาคารนั่นแหละ

ง่ายชิบหาย 😂

จนวันหนึ่งผมเริ่มสังเกตว่า…

ทำไม Address ของบางคนขึ้นต้นด้วย 1

บางอันขึ้นต้นด้วย 3

แต่ของผมแม่งเสือกเป็น bc1q

แล้วหลัง ๆ ดันมี bc1p โผล่มาอีก

อ้าว…อี่ยังวะ ? แบบใด๋ ?

ตกลงแล้ว Bitcoin Address มันคืออะไรกันแน่?

ถ้ามันเป็นแค่เลขบัญชี ทำไม Bitcoin ถึงมีเลขบัญชีมากหน้าหลายตา?

แล้ว Address พวกนี้ใครเป็นคนออกให้?

Satoshi แจกมาให้ตั้งแต่ปี 2009 เลยรึเปล่า?

หรือว่า Bitcoin Node เป็นคนสร้างให้?

เอ๊ะ…หรือว่า Miner เป็นคนสร้างให้?

หรือ Wallet มันเสือกมั่วตัวเลขขึ้นมาเอง?

ยิ่งผมไปดูข้างในระบบลึกๆก็ยิ่งเจออะไรแปลก ๆ

Private Key

Public Key

SHA-256

RIPEMD-160

Script

Base58Check

Bech32

Witness Program

แม่งเริ่มไม่เหมือนเลขบัญชีธนาคารละ 😅


Bitcoin Address คืออะไร?

ถ้าจะอธิบายแบบไม่ลงหลุมก่อน เอาแบบไม่ Deep ไม่ Nerd นะ

Bitcoin Address คือ รูปแบบของ Wallet ที่ใช้แสดงเงื่อนไขในการรับ Bitcoin ให้อยู่ในรูปที่มนุษย์และ Software เอาไปใช้งานได้สะดวก

เวลามีคนโอน Bitcoin ยิงมาใส่ใน Address ของเรา สิ่งที่เกิดขึ้นจริง ๆ ไม่ใช่ Bitcoin วิ่งเข้าไปอยู่ “ใน Address” นั้นนะ

แต่มันเป็นสิ่งที่ Bitcoin Transaction กำลังสร้าง Output ขึ้นมาใหม่

และ Output นั้นก็จะมีเงื่อนไขว่า

ถ้าจะเอา Bitcoin ก้อนนี้ไป Spend ต่อ มึงต้องทำตามเงื่อนไขนี้

นี่เป็นจุดที่ผมเคยเข้าใจผิดอยู่พักใหญ่

ผมเคยคิดว่า Blockchain น่าจะมีอะไรประมาณนี้อยู่ข้างใน

Address A = 0.1 BTC

Address B = 2.5 BTC

Address C = 0.003 BTC

เหมือน Database ของพวกธนาคารพาณิชย์

แต่ถ้าคุณอ่านบทความที่มีชื่อว่า UTXO คืออะไร ของเรามาแล้ว จะรู้ว่า Bitcoin ไม่ได้เก็บ Balance ในรูปแบบของ Account Model อย่างนั้น

แต่สิ่งที่ระบบของ Bitcoin มีก็คือ Transaction Outputs ที่ยังไม่ได้ถูก Spend

หรือเรียกอีกชื่อนึงว่า UTXO

เพราะงั้น Bitcoin Address จึงไม่ได้เป็น “กล่อง” ที่มี Bitcoin นอนแน่นิ่งอยู่ข้างใน

มันเกี่ยวข้องกับวิธีที่ Wallet แสดงข้อมูลที่เป็น Condition ในการเคลื่อนย้าย Output นั้นๆมากกว่า

เพียงเท่านี้ ภาพของเลขบัญชีธนาคารในหัวผมก็เริ่มพังแล้ว 😂


Bitcoin Address คืออะไร และถูกสร้างมาจากไหน?

ถ้าเป็น Address Bitcoin แบบดั้งเดิม ที่คนส่วนใหญ่มักเอามาสอนกัน เราก็จะสามารถวาดภาพง่าย ๆ ได้ว่า

Private Key

↓

Public Key

↓

Hash

↓

Bitcoin Address

นี่เป็น Model ที่ดีมากสำหรับผู้เริ่มต้นศึกษา

และผมเองก็เคยเข้าใจ Bitcoin แบบนี้

แต่มีคำเตือนไว้ก่อนนะครับว่า…

ไอ่กระบวนการด้านบนเนี่ย มันไม่ได้อธิบาย Bitcoin Address ทุกประเภท นะครับ

เดี๋ยวเราจะกลับมาทำลาย Model นี้กันทีหลัง 😂

ตอนนี้เอาแบบพื้นฐานนี้ไปก่อน

จุดเริ่มต้นคือ Private Key

Private Key ก็คือตัวเลขขนาดใหญ่มากตัวหนึ่งภายในช่วงที่กำหนดโดยระบบ Cryptography ที่ Bitcoin ใช้

จาก Private Key เราสามารถคำนวณ Public Key ได้ด้วย Elliptic Curve Cryptography บน curve ที่ชื่อว่า secp256k1

มันก็จะตีความประมาณว่า

Private Key → Public Key

แต่ในทางปฏิบัติ ด้วยเทคโนโลยีด้านการคำนวณปัจจุบัน เราไม่สามารถเอา Public Key มาแล้วคำนวณย้อนกลับหา Private Key ได้ง่าย ๆ นะจ๊ะ เนื่องจากมันเป็น One Way Function ซึ่งในทางปฏิบัติ ด้วยเทคโนโลยีการคำนวณปัจจุบัน เราไม่สามารถเอา Public Key มาคำนวณย้อนกลับหา Private Key ได้ง่าย ๆ เนื่องจากความยากของ Elliptic Curve Discrete Logarithm Problem

เรื่องนี้เราเคยลงหลุมกันไปแล้วในบท Private Key คืออะไร

วันนี้เราจะเอา Public Key ตัวนั้นไปทำอะไรต่อ


Bitcoin Address คืออะไรในมุมของ Public Key และ P2PKH?

ตรงนี้เราจะเริ่มจาก Address รุ่นดึกดำบรรพ์ก่อน เราไปดูกันที่

P2PKH — นั่นก็คือ Address ที่ขึ้นต้นด้วย 1

P2PKH ย่อมาจาก

Pay-to-Public-Key-Hash

ชื่อมันบอกใบ้เราอยู่แล้ว

เราไม่ได้เอา Public Key ดิบ ๆ ไปใช้เป็น Address ตรง ๆ

ในภาพแบบง่าย เราจะเอา Public Key ไปผ่าน Hash Function แล้วมันถึงจะกลายเป็น Address ทีหลัง

มันก็จะมีขั้นตอนประมาณนี้

Public Key

↓

SHA-256

↓

RIPEMD-160

↓

Public Key Hash

ซึ่งผลลัพธ์ที่ได้นั้นเรามักเรียกว่า HASH160

จากนั้นยังมีขั้นตอนการ Encoding อีก เพื่อทำการตัดตัวอักษรที่ดูคล้ายๆกันออกไป สาเหตุที่ต้องทำแบบนั้นก็เป็นเพราะว่าพวกตัวอักษรคล้ายๆกันมันจะทำให้เกิด Human Error ตอนอ่าน ยกตัวอย่างเช่น li เนี่ย หรือ 0oO เนี่ยเห็นมะ ?

แต่การ Encode สามารถแปลงไปแปลงกลับได้นะเพราะมันเป็นเพียงแค่การแปลอักษรภาษาอังกฤษเฉยๆ แน่นอนว่าข้อมูล Address นั้นสามารถ Encode ไปข้างหน้าได้ มันก็จะสามารถ Decode กลับมาข้างหลังได้คือกัน (มีแต่ Hash Function เท่านั้นแหละที่เป็น One Way Function)

สำหรับ Bitcoin Mainnet นั้น ในส่วนของของ Address ประเภท P2PKH จะมี Version Byte เพิ่มเข้ามา แล้วก็มี Checksum ตามดากมาด้วย ก่อนที่จะถูก Encode ด้วย Base58

สุดท้ายเราจึงได้อะไรหน้าตาประมาณ

1BoatSLRHtKNngkdXEeobR76b53LETtpyT

Address ที่ขึ้นต้นด้วย 1

อันนี้แหละที่หลายคนเรียกว่า Legacy Address

ตรงนี้ถ้าผมวาดแผนผังแบบชาว Engineer ผมคงจะต้องเขียนว่า

Public Key → HASH160 → Version + Checksum → Base58Check → Address

เริ่มดูเหมือน Protocol มากกว่าเลขบัญชีธนาคารซะล้าวววววววววววว 😂


แล้วทำไมต้อง Hash Public Key อีกที?

คำถามนี้ดีมากๆเลยนะสาว

และคำตอบก็คือ ใน Address ประเภท P2PKH นั้นจะมีสิ่งที่เป็น Output Commit ไว้นั่นก็คือ Hash ของ Public Key

ในสมัยดึกดำบรรพ์นั้น เขาจะใช้ Public Key เป็นชุดตัวเลขแทน Address เพื่อเอาไว้ส่ง Bitcoin ให้กันและกัน

ซึ่งกระเป๋าของ Satoshi Nakamoto ทั้งหมดก็ใช้รูปแบบการโอนแบบนี้ นั่นก็คือ Pay To Public Key

หากเราสังเกตุดีๆมันจะเป็นคนละอย่างกันนะ ระหว่าง Pay To Public Key และ Pay To Public Key Hash ซึ่งมันแค่เป็นขั้นกว่าของกันและกัน

เมื่อเจ้าของเงินนั้นต้องการจะ Spend เขาจึงนำ Public Key และ Signature ที่เกี่ยวข้องออกมาเพื่อให้ Script ตรวจสอบตามเงื่อนไข

Bitcoin Node ก็จะสามารถตรวจสอบได้ว่า Public Key ที่ถูกนำมาเปิดเผยนั้น Hash แล้วตรงกับค่าที่ Output เดิมกำหนดไว้หรือไม่ และ Signature ผ่านการตรวจสอบหรือไม่ ?

ถ้า Bitcoin Node ตรวจสอบแล้วผ่านเงื่อนไขทั้งหมด

Transaction ก็สามารถผ่านฉลุย

ตรงนี้เราจะเห็นความสัมพันธ์ของ Blog ก่อน ๆ เริ่มต่อกันแล้ว

Private Key

→ มีไว้เพื่อสร้าง Public Key

Public Key Hash / Script

→ เกี่ยวข้องกับเงื่อนไขของ Output Lock ที่ไว้

Digital Signature

→ ใช้เป็นส่วนหนึ่งของหลักฐานตอน Spend เงินออก

Bitcoin Node

→ ตรวจว่าการ Spend ทำตาม Consensus Rules หรือไม่ ?

ของที่เราเขียนมาหลาย Blog เริ่มมาต่อกันเป็นเครื่องจักรตัวเดียวแล้ว


Address ที่ขึ้นต้นด้วย 3 คืออะไร?

ทีนี้ Model ง่าย ๆ ของเราเริ่มมีปัญหาแล้วล่ะ

เพราะ Address ที่ขึ้นต้นด้วย 3 ไม่จำเป็นต้องเป็น Public Key Hash

Address ลักษณะนี้บน Mainnet โดยทั่วไปมันคือ P2SH

หรือ

Pay-to-Script-Hash

สังเกตคำว่า

Script Hash

ไม่ใช่ Public Key Hash

แนวคิดก็คือ Output Commit ไปยัง Hash ของ Script

ตอนจะ Spend จึงต้องเปิดเผยข้อมูลที่เกี่ยวข้องและทำให้เงื่อนไขของ Script นั้นสำเร็จตามกฎ

และยิ่งไปกว่านั้นก็คือไอ่เจ้า P2SH เนี่ยมันสามารถสร้างเงื่อนไขให้ซับซ้อนขึ้นได้ และสามารถเอาไปสร้างเป็น Address เพื่อให้คนอื่นโอนเงินมาให้เราได้

เช่น Multisig หรือ Script ที่เป็น Non Standard บางรูปแบบ

และในช่วงหนึ่ง Address ที่ขึ้นต้นด้วย 3 ก็ถูกใช้แพร่หลายกับ P2SH-wrapped SegWit

แต่ตรงนี้ต้องระวังมาก

เมื่อคุณเห็นมันขึ้นต้นด้วย 3... ไม่ได้แปลว่ามันเป็น wrapped SegWit เสมอไป

เพราะ 3... บอกเราว่าเป็น P2SH Address

ซึ่ง Script ที่อยู่เบื้องหลังจะเป็นอะไรก็อีกเรื่องหนึ่ง

นี่เป็นเหตุผลว่าทำไมการจำว่า

1 = Address แบบเก่า

3 = Address แบบ wrapped SegWit (ซึ่ง Address แบบนี้ เราจะเรียกว่าเป็น Segwit ห่อไข่ ก็ได้)

bc1 = Address ที่เป็น Segwit แบบใหม่ (ซึ่ง Address แบบนี้ เราจะเรียกว่าเป็น Segwit แท้ ก็ได้)

มันพอใช้ดูคร่าว ๆ ได้ แต่ถ้าจะเข้าใจ Protocol เอาเข้าจริง ๆ แล้วข้อมูลมันไม่พอ

มาถึงตรงนี้ ถ้าถามว่า Bitcoin Address คืออะไร เราอาจจะเริ่มตอบได้แล้วว่ามันไม่ใช่แค่ Public Key ที่เอาไป Hash แล้วจบ เพราะพอ Script เริ่มซับซ้อนขึ้น Address ก็เริ่มเปลี่ยนรูปแบบตามไปด้วย


Bitcoin Address คืออะไรในยุค SegWit?

ปี 2017 Bitcoin มีการใช้งาน Segregated Witness หรือ SegWit ซึ่งใน SegWit v0 เราจะเจอ Output หลัก ๆ อย่าง P2WPKH (Pay-to-Witness-Public-Key-Hash) และ P2WSH (Pay-to-Witness-Script-Hash) จะให้พูดง่ายๆก็คือมันคล้ายๆกับ P2PKH กับ P2SH แหละ เพียงแต่อันนี้มันเอา Signature โยกไปวางไว้ที่ Witness Block แค่นั้นเอง

แล้วเราก็เริ่มเห็น Address แบบ

bc1q...

นี่คือสิ่งที่คนมักเรียกว่า Native SegWit Address

Encoding ที่ใช้คือ Bech32 สำหรับ SegWit v0

ข้อสังเกตง่าย ๆ คือมันอ่านหน้าตาต่างจาก Base58 Address ชัดเจน

bc1q...

สำหรับ Mainnet คำว่า bc เป็น Human-Readable Part ที่บอก Network

หลังจากนั้นข้อมูลจะ Encode Witness Version และ Witness Program ตามรูปแบบของ SegWit Address

ตรงนี้แหละที่ Model ที่เราท่องมาในตอนต้นนั้น :

Public Key → Hash → Base58Check → Address

จะไม่ได้เป็นสูตรสากลอีกต่อไปแล้ว

เพราะ Address มันเป็นรูปแบบใหม่และใช้ Encoding แถมมีโครงสร้างคนละแบบอีกด้วย

เดี๋ยวค่อยมาลงรายละเอียดละกันเพราะแม่งยาวแน่นอน


แล้ว bc1p... คืออะไรอีกวะ?

😂

นี่คือ Taproot Address

อีเจ้า Taproot เนี่ยมันถูกใช้งานบน Bitcoin ตั้งแต่ปี 2021 และใช้ SegWit Version 1

ซึ่งมันก็เป็น Address บน Mainnet มักขึ้นต้นด้วย

bc1p...

และตรงนี้มีรายละเอียดสำคัญอีกอย่าง

Taproot ใช้ Bech32m ในการ Encode ซึ่งไม่ใช่ Bech32 แบบที่ใช้กับ SegWit v0

ดังนั้น หากผมเล่าแบบย่อ ๆ ก็คือ :

bc1q...

→ SegWit v0
→ Bech32

bc1p...

→ SegWit v1 / Taproot
→ Bech32m

และอี Taproot เองก็ทำให้เรื่องราวของ

“Bitcoin Address = Hash ของ Public Key”

ยิ่งใช้เป็นคำอธิบายแบบเหมารวมไม่ได้เลย

เพราะ P2TR Output เกี่ยวข้องกับ Taproot output key และสามารถรองรับทั้ง Key Path และ Script Path spending

เดี๋ยวถ้าลงตรงนี้ต่อ Blog นี้จะกลายเป็นหลุม Taproot แล้วเราจะไม่ได้กลับบ้านกัน 😂

เอาไว้ลงอีก Blog ดีกว่า (อีกแล้วหรอ ???)


สรุป Address 4 แบบที่เราเห็นบ่อย

เอาไว้เปิดดูเวลาเจอ Address แปลก ๆ :

ขึ้นต้นรูปแบบทั่วไปEncoding / แนวคิด
1...P2PKH / LegacyBase58
3...P2SHBase58
bc1q...SegWit v0 เช่น P2WPKH/P2WSHBech32
bc1p...Taproot / SegWit v1Bech32m

แต่ผมอยากให้จำไว้ว่า

Prefix ช่วยให้เรารู้ Format บางอย่าง แต่มันไม่ได้เล่า Spending Condition ทั้งหมดให้เราฟังเสมอไป

โดยเฉพาะ 3...

เห็น 3 อย่าเพิ่งตะโกน

Legacy SEGWIT!!!

เดี๋ยวหน้าจะแตกเอา 😂

เพราะบางทีอ่ะ ไอ่ที่ขึ้นต้นด้วย 3 มันสามารถเป็น Multisig ได้ด้วยเช่นกัน นี่คือความสวยงามของ Address ประเภทนี้ที่มันซุกซ่อน Privacy ให้เราได้ เพราะมันดูไม่ออกเลยว่าเป็น Single Sig หรือว่า Multisig และหากเป็น Multisig มันจะใช้ Key กี่อัน มันดูไม่ออก (จนกว่าคุณจะโอนออกครั้งนึงแล้วมันจะถูกเฉลยทันทีว่าเป็น Script แบบใด)


Bitcoin Address คืออะไร แล้วทำไมมันต้องมี Checksum?

หากพูดถึงตรงจุดนี้ พวก Engineer น่าจะเริ่มคุ้นเคยละ

เวลาเราส่งข้อมูลผ่าน Communication Protocol เรามักมีวิธีตรวจจับว่าข้อมูลเกิดความผิดพลาดระหว่างทางหรือเปล่า ?

Address Encoding ของ Bitcoin ก็มีระบบตรวจจับข้อผิดพลาดเช่นกัน

Base58Check มี Checksum ของมัน

Bech32 / Bech32m ก็มี checksum scheme ของมันเอง

ดังนั้นเวลาคุณ Copy Address แล้วข้อมูลผิด Format หรือ Copy ตกหล่นไปตัวนึง หรือ Copy มาไม่ครบ หรือ Checksum ไม่ถูกต้อง ซึ่ง Wallet ที่ดีต้องสามารถตรวจพบและปฏิเสธการโอนเงินสำหรับ Address นั้นได้

แต่นี่ไม่ได้แปลว่า Checksum จะช่วยคุณทุกกรณีนะ

ถ้าคุณตั้งใจ Copy Address ที่ถูกต้องแล้ว แต่เสือกเป็นของโจร

ถึงจะมี Checksum ก็แหกได้เหมือนกันนะครับ 😂

เพราะงั้นก่อนส่ง Bitcoin จำนวนเยอะๆ…

ขอความกรุณาช่วย ดู Address บนอุปกรณ์ที่เชื่อถือได้หน่อยเถอะ และ Verify ให้ดี

โดยเฉพาะถ้าใช้อุปกรณ์อย่างพวก Hardware Wallet อ่ะ

อย่าเชื่อสิ่งที่ Computer Screen แสดงเพียงอย่างเดียว ถ้า Device ของคุณสามารถแสดง Destination Address ให้ตรวจสอบได้ ก็ดูที่จอของ Device นิดนึงเนอะ

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

ตรงนี้ทำให้คำถามว่า Bitcoin Address คืออะไร ชัดขึ้นอีกนิด เพราะ Address ไม่ใช่ Wallet และ Address ก็ไม่ใช่ Balance มันเป็นเพียงส่วนหนึ่งของโครงสร้างที่ Wallet ใช้ในการรับและจัดการ Bitcoin ของเรา


Address เดิมใช้ซ้ำได้ไหม?

ในทาง Protocol อาจมีสถานการณ์ที่ Address เดิมรับ Bitcoin ได้มากกว่าหนึ่งครั้ง ซึ่งก็สามารถทำได้

แต่ในแง่ Privacy โดยทั่วไป Wallet สมัยใหม่จะสร้าง Receive Address ใหม่ให้เราสำหรับการรับแต่ละครั้ง

แม้กระทั่ง Address เงินทอนก็จะไม่ซ้ำเลย มันจะวนไปเรื่อยๆ แต่ยังคงเป็น Address ที่อยู่ในชุด Seed ของคุณ

มันทำอย่างนั้นไปทำไม?

เพราะ Blockchain เป็น Public Ledger ที่ใครๆก็เข้ามาส่องได้ ทั้งคนดี ทั้ง Hacker ระดับโลก

ถ้าคุณเอา Address เดิมไปแปะไว้ทุกที่

ลูกค้าโอนมาก็เข้า Address นี้

เพื่อนโอนมาก็เข้า Address นี้

เงินเดือนก็เข้า Address นี้

ขายของก็เอามาเข้า Address นี้

คนที่ดู Blockchain ก็เริ่มเห็นความสัมพันธ์ของ Transaction ที่เกี่ยวข้องกับ Address นั้นได้ง่ายขึ้น ยิ่งถ้าคุณเคยโอน Bitcoin ออกจาก Address ซ้ำๆนั่นแล้วล่ะก็ มันแปลว่า Public Key ของ Address นี้มันได้ถูกเปิดเผยต่อสาธารณะชนไปเป็นที่เรียบร้อยแล้ว

ยังจำที่ผมเคยบอกได้มั้ย ? ว่าการที่คุณจะโอน Bitcoin ออกได้ คุณจะต้องเปิดเผย Public Key ทุกครั้ง เพราะมันเป็นตัวแทนของ Private Key ที่ฝั่ง Verify จะต้องใช้ Public Key นี่แหละ เอาไปตรวจเทียบกับ Locking Script แต่ถ้ามึงจะโอนออกแล้วมึงเสือกไม่เปิดเผย Public Key แล้ว Node มันจะตรวจสอบความเป็นเจ้าของ UTXO จากอะไร ????

นี่คือเหตุผลที่ HD Wallet สามารถสร้าง Address จำนวนมากจากโครงสร้าง Key Derivation ของ Wallet ที่ขึ้นกับ Seed นั้นๆ

คุณไม่จำเป็นต้องมี “เลขบัญชี Bitcoin เลขเดียวตลอดชีวิต”

ตรงกันข้ามเลย

Wallet สร้าง Address ใหม่ให้คุณได้เรื่อย ๆ


แล้วถ้า Address เปลี่ยนทุกครั้ง Bitcoin ยังเป็นของผมได้อย่างไร?

อันนี้ตอนแรกก็งงครับ 😂

ธนาคารสอนเรามาทั้งชีวิตว่า

หนึ่งบัญชี = หนึ่งหมายเลขบัญชี

แต่ Bitcoin Wallet จะแสดง Address ใหม่ทุกครั้งที่กด Receive

แล้วกูจะจำได้ยังไงว่าอันไหนของกู?

คำตอบคือ Wallet ไม่ได้ทำงานโดยการจดจำ Address แบบที่มนุษย์ทำ

ซึ่งอีเจ้า Wallet แบบ HD เนี่ยมันสามารถ Derive ชุด Keys และ Addresses จำนวนมากจากโครงสร้าง Wallet ของมัน ซึ่งมันเอาต้นตอมาจาก Seed เพียงชุดเดียวนั่นแหละ

มันจึงสามารถติดตาม UTXO ที่เกี่ยวข้องกับ Keys/Scripts ที่อยู่ภายใต้ Wallet นั้นๆได้

นี่ก็เป็นเหตุผลที่ว่า

Wallet Balance ของคุณนั้น ไม่ใช่ Bitcoin ที่นอนแน่นิ่งอยู่ใน Address เดียว

มันอาจจะเป็น UTXO หลายก้อนหลายๆอันมานับรวมกัน

ซึ่งมันอยู่ภายใต้ Addresses หรือ Scripts หลายชุด

เพียงแต่ Wallet มันได้ทำการรวบรวมข้อมูลเหล่านั้นแล้วแสดงเป็น Balance ให้คุณเห็น ก็เท่านั้นเอง

เรื่องนี้นะ ถ้าหากว่าคุณยัง งง…

ให้กลับไปอ่านบทความที่มีชื่อว่า UTXO คืออะไร

แล้วคุณจะเริ่มเห็นภาพว่าทำไม Bitcoin Wallet กับบัญชีธนาคารนั้นมันคนละรูปแบบกันเลย


Bitcoin Address มี Private Key หนึ่งตัวต่อหนึ่ง Address ไหม?

ถ้าตอบสั้น ๆ ว่า ใช่ครับ

หนึ่ง Address = หนึ่ง Private Key

มันก็ง่ายๆอย่างนี้ล่ะครับ

แต่ผมไม่อยากให้จำแบบนั้น

เพราะ Bitcoin มีหลาย Script Types และ Spending Conditions

P2PKH แบบพื้นฐานทำให้ความสัมพันธ์ระหว่าง Key Pair กับ Address ดูตรงไปตรงมา

แต่พอเราไปเจอ :

P2SH

P2WSH

Multisig

Taproot

Script Path

คำอธิบายแบบหนึ่ง Address ต่อหนึ่ง Private Key ก็เริ่มพังลงละ

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

“Private Key ของ Address นี้คืออะไร?”

แต่สิ่งที่มันสนใจจริง ๆ คือ

Transaction ที่กำลังพยายาม Spend Output นี้ คุณสามารถทำให้ Spending Condition ของ Output นั้นสำเร็จตามกฎได้หรือเปล่าน้าาาาาา ?

ตรงนี้แหละครับที่ผมรู้สึกว่า Bitcoin เริ่มสวยงามขึ้น

เพราะ Address เป็นสิ่งที่มนุษย์เห็น

แต่ข้างใต้ Address… นั้น

มันคือเงื่อนไข


ส่ง Bitcoin ผิด Address เอาคืนได้ไหม?

นี่คือส่วนที่ไม่สนุกเอาเสียเลย

Bitcoin Transaction ไม่มีปุ่ม Undo นะครับ มันเหมือนเครื่องบินอ่ะที่เดินหน้าได้อย่างเดียว ไม่มีการใส่เกียร์ถอยหลัง (ถ้าเครื่องบินมีเกียร์ถอยนี่ชิบหายหมดแน่นอน เพราะมันไม่มีตาหลัง 555)

ถ้าคุณโอน Bitcoin ไปยัง Address ที่ถูกต้องตาม Format แต่เป็น Address ของคนอื่น และ Transaction Confirm ไปแล้ว… หึ หึ หึ

ผมบอกได้เลยว่า Bitcoin Network ไม่มีทางรู้ว่าคุณ “พิมพ์ผิด”

สำหรับ Node มันเห็นเพียงแค่ Transaction นั้นถูกต้องตามกฎ

มันไม่มีช่อง :

User made a stupid mistake = TRUE

😂

และไม่มี Call Center กลางที่สามารถ Reverse Transaction ให้คุณได้

เพราะงั้นถ้าจะโอน Bitcoin จำนวนมากๆ วิธีที่ผมชอบคือ

ลองโอนก้อนเล็กๆเพื่อทดสอบก่อนดิ๊

Confirm ว่าถึง Wallet ปลายทางจริงๆรึเปล่า

แล้วค่อยส่งก้อนใหญ่ตามไปทีหลังก็ยังได้

ยอมเสีย Fee เพิ่มนิดหน่อยบางครั้งอาจถูกกว่านั่งมอง Bitcoin ก้อนขนาดมหึมาที่คุณอุตส่าห์เก็บมาทั้งชีวิตหายไปต่อหน้าต่อตา


Bitcoin Address คืออะไร ถ้ามันไม่ใช่เลขบัญชี?

หลังจากลงมาถึงตรงนี้ ผมว่าเราตอบได้ดีกว่าตอนเริ่มละนะ

นั่นก็คือ Bitcoin Address ทำหน้าที่คล้ายเลขบัญชีในแง่ User Experience

คือเอาไว้บอกอีกฝ่ายว่า

“ส่ง Bitcoin มาทางนี้สิโว้ย”

แต่ในระดับ Protocol มันไม่ใช่ Account Number ที่ชี้ไปยังแถวหนึ่งใน Database แล้วเขียนว่า

พิริยะ = 1 BTC

เพียงแต่ Address เป็น Representation ที่เกี่ยวข้องกับข้อมูลบางอย่าง ซึ่งตัว Wallet Application ใช้สร้าง Transaction Output และ Spending Condition ตาม Address/Script Type นั้น ๆ

และ Bitcoin ที่ได้รับก็ไม่ได้ถูกเก็บไว้ “อยู่ใน Address”

สิ่งที่เกิดขึ้นคือมันจะมี UTXO ที่ถูกสร้างขึ้นพร้อมเงื่อนไขในการ Spend

ตอนจะใช้มันต่อ…

คุณก็ต้องมีข้อมูลและหลักฐานที่ทำให้เงื่อนไขนั้นมันผ่าน

ตรงนั้นแหละ จะเป็นส่วนที่ Private Key, Public Key, Digital Signature และ Script ถึงกลับเข้ามาในเรื่องอีกครั้ง

ตอนนี้เครื่องจักรทั้งตัวเริ่มทำงานต่อกันแล้ว


FAQ — Bitcoin Address คืออะไร? คำถามที่คนใช้ Bitcoin มักสงสัย

Bitcoin Address คืออะไร?

Bitcoin Address คือรูปแบบที่ Wallet ใช้เป็นข้อมูลในการรับ Bitcoin ในรูปที่ Software และ User สามารถนำไปใช้งานได้สะดวก โดย Address Type ที่แตกต่างกันนั้นมาจาก Script หรือ Witness Program ที่แตกต่างกัน

มันจึงไม่ควรถูกมองว่าเป็น “บัญชี” ที่มี Bitcoin ถูกเก็บอยู่ข้างในนั้น

Bitcoin Address ถูกสร้างจาก Private Key หรือไม่?

ในกรณีพื้นฐานอย่าง P2PKH เราสามารถอธิบายได้ง่ายๆแบบนี้ Private Key → Public Key → Public Key Hash → Address

แต่เราไม่ควรใช้สูตรนี้ในการอธิบาย Address ชนิดอื่นๆ เนื่องจากว่า P2SH, SegWit และ Taproot มีโครงสร้างและ Encoding ที่แตกต่างกัน

Bitcoin Address ที่ขึ้นต้นด้วย 1, 3, bc1q และ bc1p ต่างกันอย่างไร?

โดยทั่วไปบน Bitcoin Mainnet:

1... คือ P2PKH หรือ Legacy

3... คือ P2SH

bc1q... ใช้กับ SegWit v0

bc1p... ใช้กับ SegWit v1 ซึ่งปัจจุบันสัมพันธ์กับ Taproot

แต่ Prefix เพียงอย่างเดียวไม่ได้บอก Spending Condition ทุกอย่างที่อยู่เบื้องหลัง Address นั้นๆเสมอไป

Bitcoin Address ใช้ซ้ำได้ไหม?

เราสามารถโอน Bitcoin มายัง Address ซ้ำๆเดิมได้ แต่โดยทั่วไปไม่แนะนำให้ทำแบบนั้น เพราะว่าการใช้ Address Reuse มันจะเป็นผลทำให้ข้อมูลบน Public Blockchain เชื่อมโยงกับตัวเราได้ง่ายขึ้นและสุดท้ายมันกระทบ Privacy ของตัวเราเอง

ซึ่ง Wallet สมัยใหม่นั้นมักจะสร้าง Receive Address ใหม่เรื่อยๆวนๆไป ไม่มีซ้ำเลย

Bitcoin Address หมดอายุไหม?

โดยทั่วไป Bitcoin Address ไม่ได้มีวันหมดอายุแบบรหัส OTP

แต่แนวทางที่ดีคือใช้ Address ใหม่สำหรับการรับ Bitcoin ครั้งถัดไป ซึ่ง Wallet ทั้งหลายนั้นรองรับวิธีการนี้ เพื่อช่วยเรื่องของ Privacy

ถ้าส่ง Bitcoin ไปผิด Address จะเอาคืนได้ไหม?

Bitcoin ไม่มีระบบกลางสำหรับการ Reverse Transaction

หาก Transaction นั้น Sign ถูกต้องและ Confirm แล้ว การที่จะนำเงินกลับมานั้นต้องไปกราบอ้อนวอนผู้ที่สามารถ Spend Output ปลายทาง ให้ส่งคืนมาให้

ดังนั้นคุณควรตรวจสอบ Address และจำนวนเงินให้ดีก่อนที่จะ Sign/Broadcast ทุกครั้ง

คนรู้ Bitcoin Address ของผม ขโมย Bitcoin ได้ไหม?

การรู้ Address เพียงอย่างเดียวไม่ได้ทำให้คนอื่นสามารถ Spend Bitcoin ที่ถูก Lock ด้วยเงื่อนไขของคุณได้

แต่ Address เป็นข้อมูล Public และสามารถนำไปดู Transaction Activity ที่เกี่ยวข้องบน Blockchain ได้

ดังนั้น Security กับ Privacy เป็นคนละเรื่องกัน

โจรไม่อาจขโมย Bitcoin ของคุณได้ จากการรู้ Address เพียงอย่างเดียว…


แล้วทำไมเราถึงเรียกมันว่า Address?

หลังจากเขียนมาถึงตรงนี้ ผมกลับไปมองคำว่า

Bitcoin Address

แล้วรู้สึกว่าชื่อมันก็ตั้งมาดีเหมือนกันนะ

จริงๆแล้วคำว่า Address

มันแปลว่า ที่อยู่

ซึ่งลองนึกภาพว่าเวลาผมส่งพัสดุ ผมเขียน Address ปลายทางบนกล่อง

แต่ถ้าบ้านของผมไม่ได้สร้างอยู่บน Address ที่ถูกจ่าหน้าซองนั้น

พัสดุที่ส่งมา มันก็จะไปลงผิดที่ผิดทาง ถูกมะ ?

ซึ่ง Address เป็นแค่ข้อมูลที่ช่วยบอกว่า

ของควรไปที่ไหน

Bitcoin Address ก็มีความรู้สึกคล้ายกัน แต่มันจะแตกต่างกันตรงที่ ปกติแล้วเวลาที่เราส่งพัสดุ เราจะ Pack ของไว้ข้างในกล่อง จากนั้นทำการปิดกล่องแล้วแปะใบปะหน้า

ถ้าเรา Reverse Engineer กล่องพัสดุนั้น เราจะต้องเริ่มจากแกะใบปะหน้าออก จากนั้นทำการกรีดกล่องออกมา แล้วเราจะเห็นสิ่งของอยู่ข้างใน ซึ่งตรงนี้แหละมันจะแตกต่างจาก Bitcoin นิดหน่อย

เพราะถ้าหากเราลงลึกเข้าไปข้างในของ Bitcoin Address…

มันไม่มีพัสดุสิ่งของ

มันไม่มีบ้านเลขที่

ไม่มีชื่อเจ้าของบัญชี

ไม่มีชื่อผม

ไม่มีชื่อคุณ

ไม่มีธนาคาร

มีแต่ Key

ละก็ Hash

ละก็ Script

ละก็ Signature

แล้วก็ Node ที่นั่งตรวจตามกฎของมันไปเรื่อย ๆ

ผมเคยคิดว่า Bitcoin Address คือเลขบัญชีแบบหนึ่ง

ตอนนี้ผมเริ่มรู้สึกว่า…

มันอาจไม่ใช่ “ที่อยู่ของ Bitcoin” ด้วยซ้ำ

มันเป็นเหมือนภาษาที่เราใช้บอก Network ว่า

Bitcoin ก้อนต่อไปนี้…
ใครจะเอาไปใช้ต่อ ต้องพิสูจน์อะไรบ้างวะ?

แล้วพอคิดแบบนี้

Address ที่ขึ้นต้นด้วย 1, 3, bc1q หรือ bc1p

ก็ไม่ได้ดูเหมือนเลขมั่ว ๆ อีกต่อไปแล้ว

มันเริ่มดูเหมือน…

ร่องรอยของวิวัฒนาการ Bitcoin ที่เขียนอยู่ตรงหน้าเรานี่เอง

Similar Posts

  • Bitcoin Mining คืออะไร? Miner กำลังคำนวณหาอะไรกันแน่?

    จากบทความที่แล้วเราคุยกันเรื่อง Bitcoin Full Node ซึ่งมีประโยคนึงที่ผมเขียนเอาไว้ว่า Miner มีหน้าที่เสนอ Block เข้ามา ส่วน Node มีหน้าที่ตรวจการบ้าน ฟังดูง่ายดี… แต่คำถามก็คือ แล้วพวก Miner มันไปเอา Block มาจากไหนกันวะ? เวลาเราเห็นภาพของ Bitcoin Mining ที่เจอกันบ่อย ๆ ก็คงจะเป็นโกดังใหญ่ ๆ ที่มีเครื่อง ASIC วางเรียงกันเป็นร้อยเป็นพันเครื่อง พัดลมหมุนติ้วๆๆเสียงดังชิบหายยังกับเครื่องบิน Jet มิหนำซ้ำยังแดกไฟยังกับเป็นโรงงานอุตสาหกรรม แล้วไอ้เครื่องพวกนี้มันกำลังทำอะไรกันอยู่กันแน่? มันกำลังแก้สมการคณิตศาสตร์รึเปล่านะ? มันกำลังถอดรหัส Bitcoin รึเปล่านะ? มันกำลังตรวจ Transaction รึเปล่านะ? หรือมันกำลัง “ขุด” Bitcoin เหรียญใหม่ๆให้มันกระเด้งออกมาจาก Blockchain เหมือนคนขุดทอง? ตอนผมเริ่มศึกษา Bitcoin ใหม่ ๆ ผมก็เคยเข้าใจประมาณนั้นเหมือนกัน ผมคิดว่าคงมีโจทย์คณิตศาสตร์ยาก ๆ สักข้อ แล้ว…

  • 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 ตามเงื่อนไขที่กำหนดไว้ได้อย่างสบายใจ ซึ่งอีหลักฐานที่ว่านี้คือสิ่งที่เรียกว่า :…

  • Bitcoin Self Custody คืออะไร? Not Your Keys, Not Your Coins หมายความว่าอะไร?

    นึกย้อนกลับไปในตอนผมเริ่มซื้อ Bitcoin ใหม่ ๆ ผมก็ซื้อจาก Exchange เหมือนคนทั่วไปนี่แหละ จุดเริ่มต้นมันก็มาจาก สมัคร Account ก่อนเลย ละก็ KYC (ถ่ายรูปบัตรประชาชน ละก็ หันซ้าย หันขวา อ้าปาก พยักหน้า กระพริบตา) จากนั้นก็โอนเงินบาทเข้าไป ละก็เลือก BTC จากนั้นก็กด Buy แล้วมันก็ขึ้นที่หน้าจอก็ว่า 0.01 BTC โอเค๊… กูมี Bitcoin แล้ว ง่ายดี 😂 แต่พอศึกษาไปเรื่อย ๆ ผมก็เริ่มได้ยินประโยคหนึ่งซ้ำแล้วซ้ำอีก นั่นก็คือ Not Your Keys, Not Your Coins ตอนแรกผมก็คิดว่า Bitcoin ก็อยู่ใน Account กูนี่หว่า ชื่อก็ชื่อกู Password กูก็รู้ 2FA ก็อยู่ในมือถือกู แล้วทำไมมันถึงไม่ใช่…

  • Bitcoin Node คืออะไร? ทำไม Bitcoin ถึงไม่ต้องมีใครเป็นคนกลาง

    ในบทความที่แล้วเราเพิ่งคุยกันเรื่อง Digital Signature ว่า Bitcoin สามารถตรวจสอบได้ว่า Transaction นึงนั้นมี Signature ที่ถูกต้องหรือไม่? โดยที่เจ้าของ Private Key ไม่ต้องเอา Secret Key ของตัวเองออกมาเปิดเผยให้ใครเห็นเลยแม้แต่คนเดียว มันก็…ฟังดูดีนะครับ แต่พอผมคิดต่อไปอีกนิดนึงแล้ว มันเสือกมีคำถามหนึ่งโผล่ขึ้นมาในหัว แล้วใครเป็นคนตรวจสอบวะ? ใครที่เป็นคนบอกเราว่า Signature อันนี้ถูกต้อง? ใครเป็นคนบอกว่า UTXO ที่กำลังจะถูก Spend นี้มีอยู่จริง และมันยังเป็น UTXO ที่ไม่เคยถูกใช้ไปแล้ว? ใครเป็นคนบอกว่า Transaction นี้ไม่ได้ถูกเสกเพิ่มขึ้นมาจากอากาศ? แล้วถ้าวันหนึ่ง Miner เสือกบอกว่า “กูขุด Block นี้ได้แล้วนะ” ใครเป็นคนบอกว่า Block ที่มันขุดมานั้นถูกต้องตามกฎของ Bitcoin? ถ้าคำตอบของเราคือ “ก็ Server กลางของ Bitcoin ไง” งั้นเราก็มีปัญหาแล้วล่ะ เพราะถ้ามี Server กลางสักเครื่องเป็นคนบอกทุกคนว่าอะไรของจริง…

  • Bitcoin Lightning Network ทำงานอย่างไร? จากการเปิด Channel ไปจนถึงการจ่ายค่ากาแฟภายในไม่กี่วินาที

    มีความจริงอยู่หนึ่งประการที่ใครๆก็รู้กันนั่นก็คือ Bitcoin มี Block ใหม่เกิดขึ้นโดยเฉลี่ยประมาณทุก ๆ 10 นาที และบางช่วงเราก็อาจต้องรอนานกว่านั้นเพราะ Block Time ของ Bitcoin มันเกิดจากการประมาณการซึ่งมันไม่แน่ไม่นอน ยิ่งถ้าหากว่าเราจะรอให้มันเกิดหลาย Confirmation ก็จะยิ่งนานเข้าไปใหญ่ คุณลองคิดดูนะ ถ้าวันหนึ่งผมเดินเข้าไปในร้านกาแฟเพื่อซื้อกาแฟ จากนั้นผมก็หยิบโทรศัพท์ขึ้นมา แล้วผมก็เปิด Lightning Wallet จากนั้นผมก็ Scan QR Code ละก็กดปุ่ม PAY … ติ๊ง! ⚡ แล้วพนักงานของร้านก็บอกว่าได้รับ Bitcoin แล้ว ทั้งหมดนี่ใช้เวลาเพียงไม่กี่วินาที เอ๊ะ… แต่เดี๋ยวนะ… Block ใหม่แม่งยังไม่เกิดเลยนี่หว่า 😂 แล้ว Transaction ของผมอยู่ใน Block ไหน? แล้ว Miner คนไหนขุดมัน? แล้ว Transaction ของผมที่จ่ายค่ากาแฟนี่ได้กี่ Confirmation แล้ว? เมื่อผมเปิด…

  • 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 ก็จะมียอดเงินเพิ่มขึ้นเป็น…