วิธีใช้งาน
- วางไบต์เลขฐานสิบหกลงในช่องอินพุต ใส่ช่องว่าง ทวิภาค และตัวนำหน้า 0x ได้
- อ่านผลลัพธ์ Base58 ที่ช่องเอาต์พุต
- คัดลอกผลลัพธ์ หรือกด “สลับอินพุตและเอาต์พุต” เพื่อถอดรหัส Base58 กลับเป็นเลขฐานสิบหก
เลขฐานสิบหกกลายเป็น Base58 ได้อย่างไร
ขั้นแรก เลขฐานสิบหกจะถูกแปลงเป็นไบต์ โดยใช้สองหลักต่อหนึ่งไบต์ อินพุตจึงต้องมีจำนวนหลักเป็นเลขคู่ จากนั้นไบต์ทั้งหมดจะถูกอ่านเป็นตัวเลขแบบ big-endian ตัวเดียวและเขียนใหม่ในฐาน 58 ด้วยชุดตัวอักษร Bitcoin ไบต์ 00 ที่นำหน้าแต่ละไบต์จะเขียนเป็น 1 นี่คือเหตุผลที่ 0000ff กลายเป็น 115Q ขณะที่ ff เพียงอย่างเดียวกลายเป็น 5Q
Base58 ใช้ประมาณ 1.37 อักขระต่อไบต์ เลขฐานสิบหก 64 หลัก (32 ไบต์) จึงเหลือ 43 หรือ 44 อักขระ ชุดตัวอักษรนี้ไม่มี 0, O, I, l, + หรือ / ผลลัพธ์จึงอ่านออกเสียงได้ง่าย เลือกได้ด้วยการดับเบิลคลิก และใส่ใน URL ได้ ทุกอย่างคำนวณในเบราว์เซอร์ของคุณ
การสร้างตัวระบุของ Solana และ IPFS
- Solana: ที่อยู่คือคีย์สาธารณะ Ed25519 ขนาด 32 ไบต์ในรูป Base58 โดยไม่มีตัวนำหน้าและไม่มีเช็กซัม วางคีย์เลขฐานสิบหก 64 หลักเพื่อรับที่อยู่
- IPFS CIDv0: CIDv0 คือ multihash แบบ sha2-256 ในรูป Base58 ใส่
1220ไว้หน้าไดเจสต์ 64 หลัก แล้วคุณจะได้สตริงยาว 46 อักขระที่ขึ้นต้นด้วยQmไดเจสต์ต้องเป็นค่าที่ IPFS คำนวณจากบล็อกที่เข้ารหัสแล้ว ซึ่งไม่ใช่ค่าเดียวกับ SHA-256 ของไฟล์ต้นฉบับ
1220 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG
ที่อยู่ Bitcoin ต้องมีเช็กซัม
hash160 เพียงอย่างเดียวยังไม่ใช่ที่อยู่ ที่อยู่ Bitcoin แบบดั้งเดิม (legacy) คือ Base58Check ของไบต์เวอร์ชัน 00 ตามด้วย hash160 ขนาด 20 ไบต์ ซึ่งจะต่อเช็กซัม SHA-256 สองชั้นขนาด 4 ไบต์ไว้ท้ายก่อนเข้ารหัส หากเข้ารหัส 00 และ hash160 ด้วย Base58 ธรรมดา จะได้สตริงที่สั้นกว่าและไม่มีเช็กซัม ซึ่งวอลเล็ตจะไม่ยอมรับ
ให้ใช้หน้า Base58Check แทน โดยตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก” ป้อน 00 ตามด้วย hash160 แล้วระบบจะเพิ่มเช็กซัมให้ หากเลขฐานสิบหกของคุณลงท้ายด้วยเช็กซัมที่ถูกต้องอยู่แล้ว หน้านี้จะให้ที่อยู่เดียวกัน
0062e907b15cbf27d5425399ebf6f0fb50ebb88f18 (Base58Check)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
การแปลงเลขฐานสิบหกเป็น Base58 ในโค้ด
# Python (pip install base58)
import base58
base58.b58encode(bytes.fromhex('0000ff')) # b'115Q'
// JavaScript (npm install bs58)
import bs58 from 'bs58';
bs58.encode(Buffer.from('0000ff', 'hex')); // '115Q'
คำถามที่พบบ่อย
จะแปลง hash160 เป็นที่อยู่ Bitcoin ได้อย่างไร
ทำไมผลลัพธ์จึงขึ้นต้นด้วยเลข 1 หลายตัว
เพราะเลขฐานสิบหกของคุณขึ้นต้นด้วยไบต์ 00 จำนวนเท่ากัน Base58 เก็บไบต์เหล่านี้ไว้เป็นเลข 1 ที่นำหน้า เพื่อให้กู้คืนได้เมื่อถอดรหัสสตริง
ทำไมอินพุตเลขฐานสิบหกของฉันจึงไม่ผ่าน
เลขฐานสิบหกต้องมีจำนวนหลักเป็นเลขคู่ และมีเฉพาะอักขระ 0-9 และ a-f จะเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กก็ได้ ช่องว่าง ทวิภาค และตัวนำหน้า 0x จะถูกลบออกโดยอัตโนมัติ ส่วนอักขระอื่น เช่น ตัวอักษร g ที่หลุดเข้ามาหรือหลักที่ขาดหายไป จะถือเป็นข้อผิดพลาด