Fundamentals ·

รูปแบบ Crypto Address: Bech32, Base58 และ 0x


ถ้าคุณเคยคัดลอก crypto address และสังเกตว่า Bitcoin address เริ่มด้วย bc1, Ethereum address เริ่มด้วย 0x และ Solana address ดูเหมือนภาษาที่แตกต่างออกไปโดยสิ้นเชิง คุณไม่ได้อยู่คนเดียว ความแตกต่างเหล่านี้ไม่ใช่แค่เรื่องรูปลักษณ์ แต่ละรูปแบบ address encode ข้อมูลเฉพาะเกี่ยวกับ blockchain, ประเภท transaction ที่รองรับ และกลไก error-detection ที่ปกป้องเงินของคุณ

การเข้าใจรูปแบบ address เป็นความรู้ที่ใช้ได้จริง ตัวอักษรผิดเพียงตัวเดียวใน crypto address สามารถทำให้เงินหายไปอย่างถาวร คู่มือนี้อธิบาย encoding schemes หลัก อธิบายว่าทำไมแต่ละ blockchain เลือกรูปแบบของตัวเอง และแสดงให้เห็นว่า checksums ป้องกันความผิดพลาดที่มีราคาแพงอย่างไร

ทำไม Address ถึงดูต่างกัน

cryptocurrency address คือ representation ที่มนุษย์อ่านได้ของ public key หรือ hash ที่ derive มาจากมัน raw cryptographic output เป็น binary data ซึ่งไม่สะดวกสำหรับมนุษย์ในการอ่าน คัดลอก หรือตรวจสอบ blockchain ต่างๆ เลือก encoding schemes ที่แตกต่างกันในการแปลง binary data นั้นเป็น text strings

ทางเลือก encoding เหล่านี้สะท้อน trade-offs ระหว่าง:

  • ความปลอดภัยของ character set -- หลีกเลี่ยงตัวอักษรที่ดูคล้ายกัน (0/O, l/1/I)
  • การตรวจจับ error -- checksums ในตัวที่จับ typos ก่อนเงินจะหาย
  • ประสิทธิภาพพื้นที่ -- address สั้นกว่าจัดการง่ายกว่า
  • ความไวต่อตัวพิมพ์ -- รูปแบบ lowercase-only หลีกเลี่ยงความสับสนของ clipboard

สามตระกูล encoding ที่ครอบงำ cryptocurrency คือ Base58Check, Bech32 และ hexadecimal ที่มี prefix 0x แต่ละอันเกิดจากเป้าหมายการออกแบบเฉพาะในช่วงเวลาเฉพาะของประวัติศาสตร์ blockchain

Base58Check: Bitcoin Legacy

Base58Check เป็นหนึ่งใน encoding schemes แรกๆ ของ address เปิดตัวโดย Satoshi Nakamoto กับ Bitcoin ใช้ 58 ตัวอักษร alphanumeric โดยจงใจตัดตัวอักษรที่ทำให้เกิดความสับสนทางสายตา:

  • ไม่มี zero (0) -- คล้าย letter O เกินไป
  • ไม่มี uppercase O (O) -- คล้าย zero เกินไป
  • ไม่มี lowercase L (l) -- คล้าย uppercase I และเลข 1 เกินไป
  • ไม่มี uppercase I (I) -- คล้าย lowercase l และเลข 1 เกินไป

Base58Check Bitcoin address ดูแบบนี้: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

รูปแบบนี้มี version byte ที่จุดเริ่มต้นและ 4-byte checksum ที่ท้าย version byte บอกประเภท address: 1 สำหรับ Pay-to-Public-Key-Hash (P2PKH) address มาตรฐาน, 3 สำหรับ Pay-to-Script-Hash (P2SH) address checksum คำนวณโดยรัน SHA-256 สองครั้งบน payload และเพิ่ม 4 bytes แรกของผลลัพธ์

checksum นี้หมายความว่าถ้าคุณพิมพ์ตัวอักษรผิดโดยบังเอิญ address จะเกือบแน่นอนว่า fail validation แทนที่จะส่งเงินไปยัง address ที่ผิดแต่ valid โอกาสที่ typo สุ่มจะสร้าง valid checksum คือประมาณ 1 ใน 4.3 พันล้าน

blockchain อื่นหลายตัวใช้ Base58Check เพราะเป็นที่พิสูจน์แล้วและคุ้นเคย:

  • Litecoin legacy address เริ่มด้วย L หรือ M
  • Dogecoin address เริ่มด้วย D

คุณสามารถใช้ Bitcoin Address Validator ของ SafeSeed เพื่อตรวจสอบว่า Base58Check address มี valid checksum ก่อนส่ง transaction ใดๆ

Bech32: SegWit bc1 Address

ในปี 2017 Bitcoin เปิดตัว Segregated Witness (SegWit) ซึ่งต้องการรูปแบบ address ใหม่ แทนที่จะขยาย Base58Check นักพัฒนาสร้าง Bech32 ที่กำหนดใน BIP173 Bech32 address จำได้ทันทีเพราะเริ่มด้วย bc1 สำหรับ Bitcoin mainnet

Bech32 address ดูแบบนี้: bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4

Bech32 ทำการปรับปรุงหลายอย่างเหนือ Base58Check:

Lowercase เท่านั้น

Bech32 ใช้เฉพาะตัวอักษรพิมพ์เล็กและตัวเลข สิ่งนี้กำจัดปัญหา case-sensitivity เมื่อ address ถูกสื่อสารด้วยปากเปล่า พิมพ์ในฟอนต์ mixed-case หรือ encode ใน QR codes

การตรวจจับ Error ที่เหนือกว่า

Base58Check ตรวจจับ errors แต่บอกไม่ได้ว่า error อยู่ที่ไหน Bech32 ใช้ BCH code (Bose-Chaudhuri-Hocquenghem error-correcting code) ที่สามารถตรวจจับ error ตัวอักษรเดียวทุกตัวและ multi-character substitution errors ส่วนใหญ่ สามารถระบุตำแหน่งของ errors ได้ถึง 2 ตัว

QR Codes ที่เล็กกว่า

เพราะ Bech32 ใช้ character set จำกัด (32 characters) QR codes ที่แสดง address เหล่านี้มีขนาดเล็กกว่าและสแกนง่ายกว่าอย่างวัดได้

Bech32m

เวอร์ชันอัปเดตที่เรียกว่า Bech32m (BIP350) แก้ไขจุดอ่อนเล็กน้อยในรูปแบบ Bech32 ดั้งเดิมที่เกี่ยวข้องกับตัวอักษรสุดท้าย SegWit v1 address สมัยใหม่ (Taproot เริ่มด้วย bc1p) ใช้ Bech32m ถ้าคุณสร้าง Bitcoin address ด้วย Bitcoin Address Generator ของ SafeSeed output เริ่มต้นใช้รูปแบบ Bech32/Bech32m สมัยใหม่

Litecoin ก็ใช้ Bech32 สำหรับ SegWit address โดยใช้ prefix ltc1

0x: EVM Chain Address

Ethereum ใช้แนวทางที่แตกต่างอย่างสิ้นเชิง Ethereum address คือค่า 20-byte ที่แสดงเป็น 40 ตัวอักษร hexadecimal พร้อม prefix 0x:

0x742d35Cc6634C0532925a3b844Bc9e7595f2bD08

รูปแบบ hex ตรงไปตรงมา: แต่ละ byte map เป็นสอง hex characters (0-9, a-f) ทำให้ address เป็น representation โดยตรงของ underlying data โดยไม่มี encoding พิเศษ

EIP-55 Mixed-Case Checksum

รูปแบบ Ethereum address ดั้งเดิมไม่มี built-in checksum ถ้าคุณพิมพ์ตัวอักษรผิด address ก็ยัง technically valid และเงินของคุณจะหายไป EIP-55 แก้ปัญหานี้โดยใช้การ capitalize ของตัวอักษร hex เป็น checksum address ถูก hash ด้วย Keccak-256 และแต่ละตัวอักษรจะถูก capitalize ถ้า nibble ที่สอดคล้องใน hash เกิน 8

นี่คือเหตุผลที่คุณเห็น Ethereum address ที่มี capitalization ที่ดูสุ่ม การผสมตัวพิมพ์ใหญ่และเล็กไม่ได้สุ่ม มันคือ checksum

ใช้ร่วมกันบน EVM Chains

ด้านที่สำคัญที่สุดของรูปแบบ 0x คือมันเหมือนกันบน EVM-compatible chains ทั้งหมด:

private key เดียวกันสร้าง address เดียวกันบน chains เหล่านี้ทั้งหมด นี่คือทั้งความสะดวกและแหล่งของความสับสน: การส่ง tokens ไปยัง address ที่ถูกต้องบน chain ที่ผิดเป็นข้อผิดพลาดที่พบบ่อย สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ EVM address security ดูคู่มือ EVM Address Security ของเรา

คุณสามารถ validate EVM address ใดๆ รวมถึง EIP-55 checksum ด้วย Ethereum Address Validator ของ SafeSeed

Base58 ใน Solana, XRP และ TRON

blockchain สมัยใหม่หลายตัวใช้ Base58 encoding แต่ไม่มี Check suffix หมายความว่าพวกเขา implement กลไก checksum หรือ validation ของตัวเอง

Solana

Solana address คือ Ed25519 public keys ที่ encoded ด้วย Base58 ยาวประมาณ 32 ถึง 44 ตัวอักษร:

7EcDhSYGxXyscszYEp35KHN8vvw3svAuLKTzXwCFLtV

Solana ใช้ Base58 alphabet เดียวกับ Bitcoin แต่ไม่เพิ่ม version byte หรือ SHA-256 checksum address เป็นแค่ raw public key ใน Base58 encoding Validation ขึ้นอยู่กับ key ที่เป็น valid point บน Ed25519 curve Solana Address Validator ของ SafeSeed จัดการ verification นี้

XRP

XRP ใช้ Base58Check encoding พร้อม version prefix ของตัวเอง สร้าง address ที่เริ่มด้วย r:

rN7n3473SaZBCG4dFL83w7p1W9cgZw6p1N

TRON

TRON address ใช้ Base58Check พร้อม 0x41 version byte สร้าง address ที่เริ่มด้วย T:

TJCnKsPa7y5okkXvQAidZBzqx3QyQ6sxMW

ที่น่าสนใจคือ TRON ใช้ secp256k1 elliptic curve เดียวกับ Ethereum และ Bitcoin TRON address ถูก derive จาก key material เดียวกับ Ethereum address แต่ encoded ต่างกัน

Checksums: ตาข่ายนิรภัยของคุณ

checksum คือข้อมูลชิ้นเล็กๆ ที่ derive จาก address payload ที่ช่วยให้ software ตรวจจับ errors คิดว่ามันเป็น mathematical fingerprint: ถ้าแม้แต่ตัวอักษรเดียวเปลี่ยน fingerprint จะไม่ match

นี่คือการเปรียบเทียบ checksum mechanisms ในรูปแบบหลัก:

Format Checksum Method Detection Capability
Base58Check Double SHA-256 (4 bytes) ตรวจจับ errors ได้แทบทั้งหมด
Bech32 BCH code (6 characters) ตรวจจับ single-character error ทุกตัว; ระบุตำแหน่ง errors ได้ถึง 2 ตัว
EIP-55 (0x) Keccak-256 capitalization ตรวจจับ error ~99.98% สำหรับ single-character changes
Solana Base58 Ed25519 curve validation ปฏิเสธ invalid curve points

checksum ไม่ได้ป้องกันทุกประเภทของความผิดพลาด ถ้า malware แทนที่ clipboard ทั้งหมดด้วย valid address อื่น (clipboard hijacking attack) checksum จะยัง pass เพราะ address ของผู้โจมตีเป็น valid ในตัวเอง checksums ป้องกัน accidental typos และ transmission errors ไม่ใช่การฉ้อโกงโดยเจตนา

สำหรับภาพรวมของภัยคุกคามนอกเหนือจาก typos ดู Common Crypto Scams Involving Seed Phrases

การ Validate Address ก่อนส่ง

ทุก cryptocurrency transaction ควรเริ่มด้วย address validation ซึ่งหมายถึงมากกว่าการมองตัวอักษรแรกๆ การ validation ที่เหมาะสมรวมถึง:

1. Format verification

ยืนยันว่า address ตรงกับรูปแบบที่คาดหวังสำหรับ blockchain ที่คุณใช้ bc1 address ควรใช้บน Bitcoin เท่านั้น 0x address อาจ valid บน EVM chains หลายตัว ดังนั้นตรวจสอบซ้ำว่าคุณต้องการใช้ network ไหน

2. Checksum verification

รัน address ผ่าน validator ที่ตรวจ built-in checksum SafeSeed ให้ validators ฟรีสำหรับ chains ที่พบบ่อยที่สุด:

validation ทั้งหมดทำงานในเบราว์เซอร์ของคุณด้วย client-side code ไม่มีข้อมูล address ถูกส่งไปยัง server ใดๆ

3. Visual confirmation

แม้หลัง automated validation ยืนยันด้วยตาว่าตัวอักษรแรกและสุดท้ายหลายตัวของ address ถูกต้อง Clipboard hijacking malware บางครั้งแทนที่ address ด้วย address ที่ผู้โจมตีควบคุมที่แชร์ตัวอักษรแรกเหมือนกัน

4. Test transaction เล็กๆ

สำหรับการโอนจำนวนมาก ส่งจำนวนเล็กน้อยก่อนและยืนยันว่าได้รับก่อนส่งยอดเต็ม ค่า transaction fee เล็กน้อยคือราคาที่คุ้มค่าเพื่อความมั่นใจ

5. ใช้ฟีเจอร์ Address Book

กระเป๋าส่วนใหญ่ให้คุณ save address ที่ validated แล้ว เมื่อ confirm address แล้ว save ไว้เพื่อหลีกเลี่ยงการ enter ซ้ำ (และสร้างโอกาสใหม่สำหรับ error)

สำหรับ walkthrough โดยละเอียดของกระบวนการ validation ดู How to Validate a Crypto Address

การเลือก Format ที่ถูกต้อง

ถ้าคุณกำลังสร้าง address ใหม่ format สมัยใหม่เป็นที่นิยมเกือบเสมอ:

  • Bitcoin: ใช้ Bech32 (bc1) address สำหรับค่าธรรมเนียมที่ต่ำกว่าและ error detection ที่ดีกว่า Legacy Base58Check address ยังใช้งานได้แต่มีค่า transaction fees สูงกว่าเนื่องจาก transaction sizes ที่ใหญ่กว่า
  • Ethereum และ EVM chains: ใช้ EIP-55 checksummed address เสมอ เครื่องมือสมัยใหม่ส่วนใหญ่สร้างเหล่านี้โดย default
  • Solana: Base58 เป็นตัวเลือกเดียว และทำงานได้ดี

เมื่อสร้าง address ด้วย SafeSeed เครื่องมือจะใช้ format ที่ทันสมัยและปลอดภัยที่สุดสำหรับแต่ละ blockchain เป็น default ไม่ว่าคุณจะใช้ Bitcoin Seed Phrase Generator หรือ Ethereum Address Generator address ที่ derive จะใช้ encoding ที่แนะนำสำหรับ chain นั้น

การเข้าใจ formats เหล่านี้ขจัดความลึกลับจาก cryptocurrency address พวกมันไม่ใช่ random strings -- พวกมันคือ representations ที่ engineer อย่างระมัดระวังของ cryptographic keys พร้อม built-in safety mechanisms ที่ออกแบบมาเพื่อปกป้องเงินของคุณจากข้อผิดพลาดของมนุษย์