Crypto wallet แบบเจาะลึก

Crypto wallet คืออะไร ทำหน้าที่อะไร

หลายคน น่าจะรู้จัก Crypto wallet กันมาบ้างแล้ว หรืออย่างที่อธิบายเอาไว้แล้วใน ทำความเข้าใจ และติดตั้ง Metamask Wallet หรือ อีกเนื้อหา เรียนรู้ Seed word และ wallet อย่างถูกต้องเข้าใจจริง

ซึ่งอันนั้นคือภาพกว้างๆ ในมุมแบบเข้าใจได้ง่าย แต่คราวนี้ เราจะมาเล่ากันในมุม Technical เชิงลึกกันบ้าง ลึกไปในระดับที่ว่า ถ้าพอที่จะเขียนโค้ดได้บ้าง ก็จะเข้าใจและสามารถสร้าง Wallet เป็นของตัวเองได้เลย ผ่านทางโค้ดต่างๆ รวมทั้งสามารถทำ feature ต่างๆ พื้นฐานได้ เหมือนกับการใช้ Metamask เลยทีเดียว 

ถ้าให้อธิบายเชิงลึกๆของ Crypto wallet นั้น มันคือการบวนการเข้ารหัสแบบต่างๆ เพื่อสร้าง unique key ขึ้นมา และใช้ Unique key นั้น เป็นตัวแทนของ address ต่างๆ ที่ทำงานบน blockchain อีกที ซึ่ง address ต่างๆนั้น จะสามารถยืนยัน ความเป็นเจ้าของได้ ด้วยวิธีการตรวจสอบโดยใช้ function แบบง่ายๆ แต่ว่าไม่สามารถถอดกลับให้เป็นรหัสที่ตั้งต้นได้เลย (one way hash)

ถ้าให้อธิบายภาพ แบบเข้าใจง่าย มันจะเรียงแบบนี้ครับ seed phrase > private key > public key > wallet address คือถ้าเรามีสิ่งซ้าย เราจะใช้เพื่อไปสร้างสิ่งขวาได้ เช่นถ้าเรามี private key เราจะสร้าง public key ขึ้นมาได้ โดยไม่ต้องมี seed phrase เลย เชื่อได้ว่าหลายคนไม่รู้จุดนี้ และอาจจะพลาดทำ private key หลุดมาแล้วก็เป็นได้ แต่การมี private key จะไม่สามารถถอดย้อนออกมาเป็น seed phrase ได้ และเราคงพักเอาไว้ตรงนี้ก่อน เดี่ยวค่อยลงรายละเอียดกันตามลำดับต่อไป

คำแนะนำ ก่อนอ่านบทความในหมวดนี้

บทความในหมวดนี้ เหมาะสำหรับ คนที่มีพื้นฐานทางด้าน Programming รวมทั้งคนที่เข้าใจการทำงาน ของกระบวนการเข้ารหัส และ การทำงานของ Crypto wallet มาแล้วเบื้องต้น เพราะว่าเราจะไม่อธิบาย use case ในเชิง economic เลย แต่จะมุ่งเน้นที่เรื่องทาง Technical ล้วนๆเลย และแน่นอน ภาษาก็จะค่อนข้างลึกลงไปในทาง Technical แต่จะพยายามไม่ดึงลงไปลึกมากโดยไม่จำเป็น เน้นที่ให้เข้าใจในภาพรวมๆของเชิง Techcnical ลึกๆ เพื่อให้เข้าใจการทำงาน และ เขียนโค้ดตามได้ (ถ้าต้องการ)

แต่เนื้อหาทั้งหมดนี้ เน้นที่เรื่องความเข้าใจในเรื่องพื้นฐานเท่านั้น ไม่ได้เน้นที่เรื่องการ Implement เพื่อไปสร้าง Wallet Application จริงๆ (แต่ถ้าต้องการ implement wallet application ก็ใช้ความเข้าใจพื้นฐานตรงนี้ด้วยเช่นกัน)

Private key + Public Key

ใดๆก็ตาม สิ่งหนึ่งที่เราต้องเข้าใจเสมอ ก็คือ การจะทำธุรกรรมใดๆ (ซึ่งมันก็ถือได้ว่า เราได้เป็นเจ้าของ Wallet นั้นๆ) จะต้องเกิดการ Sign Transaction โดยใช้ Private key กับ Public Key และ Message มาเข้ารหัสร่วมกัน และจะได้ผลลัพท์ออกมาเป็น Signature ซึ่ง เวลาเราจะส่ง payslip หรือ ยืนยันการทำธุรกรรม เราก็จะส่ง signature พร้อมกับ public key ไป + message แล้วที่เหลือ blockchain network ก็จะทำหน้าที่ตรวจสอบอีกที ว่าเป็นธุรกรรมที่เราได้สร้างขึ้นมาจริงๆ ดังนั้น ในเนื้อหาก็จะเน้นที่เรื่อง private key , public key เป็นหลักเลย อย่า งง ล่ะ

Crypto wallet ตาม Standard BIP

ย้อนกลับไปในยุคแรกสุด ที่มี Bitcoin เป็น Use case แรกของการประยุกต์ใช้งาน Blockchain โดยการเอามา implement ให้เป็นสื่อกลางการแลกเปลี่ยนมูลค่าอันใหม่ ที่ทดแทนเงิน (เมื่อยุค 10 ปีที่แล้วนะ เค้าตั้งใจแบบนั้น) ดังนั้น ก็ต้องมีเรื่องที่เกี่ยวข้อง ก็คือ Wallet หรือ Crypto wallet นี่แหล่ะ โดยสิ่งที่เรียกว่า Wallet แต่จริงๆแล้ว มันกลับไม่ใช่ Wallet จริงๆเหมือนอย่างที่เราเข้าใจกันหรอก เพราะถ้าบอกว่า Wallet มันคือกระเป๋าเก็บเงิน ที่เปิดมาเจอเงินข้างใน แต่ Crypto wallet นั้น ดันเก็บแค่ String ที่เป็นพวก seed phrase / private key และค่าอื่นๆอีกนิดหน่อยต่างหาก ไม่ได้เก็บ token เองแต่อย่างใด (token ใดๆ มันบันทึกไว้ ว่าเราเป็นเจ้าของเท่าไร ใน blockchain ไม่ได้ส่งมาเก็บใน wallet เราจริงๆ)

แต่นั่นก็ได้สร้างมาตรฐานต่างๆขึ้นมาด้วยพร้อมกัน โดยหนึ่งในเรื่องที่เราจะ Focus เป็นเรื่องแรก ก็คือเรื่องของ Wallet นี่แหล่ะ โดยเฉพาะมาตรฐานที่อธิบายเรื่องของการทำงานของ Wallet นั้น มีหลายตัวมาก และอยู่ใน BIP ต่างๆ 

BIP คือ Bitcoin Improvement Proposals (BIPs)

คือ standard ที่ร่างขึ้นมาเพื่อให้ใช้งานร่วมกัน เป็นมาตรฐานในการทำงานกับ Bitcoin protocol อีกที อารมณ์แบบ standard ISO อะไรแบบนั้นถ้าจะพูดให้เข้าใจง่ายๆอะนะครับ ดังนั้น ถ้าระบบใดที่ปฏิบัติตามมาตรฐานนี้ได้ตรงกัน ก็จะทำงานได้เหมือนกันนั่นเอง แต่หลังจากที่ Bitcoin ถือกำเนิดขึ้นแล้ว ยุคต่อมาคือยุค fork bitcoin ก็คือ ลอก source code bitcoin มาเพื่อ implement เป็น blockchain network ต่างๆ (ETH ก็ด้วยส่วนหนึ่ง) ดังนั้น blockchain network ต่างๆ ก็ได้ standard การ implement wallet ติดมาด้วยเช่นกัน (ใช้เหมือนกัน มันก็ง่ายดี) แต่ก็ไม่เสมอไป แต่ส่วนใหญ่จะใช้มาตรฐาน BIP นี่แหล่ะครับ

BIPs Standard ที่เกี่ยวข้อง

ถ้าว่าด้วยเรื่อง Wallet ตาม standard BIP ก็มี BIPs ที่เกี่ยวข้องมากมายดังนี้เลย

BIP32 – Hierarchical deterministic wallets

BIP39 – Mnemonic code for generating deterministic keys

BIP43 – Purpose field for deterministic wallets

BIP44 – Multi-account hierarchy for deterministic wallets

BIP49 – Derivation scheme for P2WPKH-nested-in-P2SH based accounts

BIP84 – Derivation scheme for P2WPKH based accounts

เท่านั้นยังไม่พอ ยังมี องค์ประกอบส่วนเสริม ที่ประกอบตอนใช้งานในส่วนต่างๆเพิ่มขื้นอีกด้วย หรือ เรียกว่า SLIP ซึ่งมีอีกหลายตัวดังนี้

SLIP132 – Registered HD version bytes for BIP-0032

SLIP32 – Extended serialization format for BIP-32 wallets

SLIP44 – Registered coin types for BIP44

SLIP48 – Deterministic key hierarchy for Graphene-based networks

SLIP14 – Stress test deterministic wallet

ถ้าอธิบายแยก BIP , SLIP ให้เข้าใจได้ง่ายที่สุด BIP จะใช้อธิบายโครงสร้าง การทำงานของ Wallet เช่น มี Wallet กี่ชั้น แต่ละชั้นทำงานอย่างไร แต่ SLIP จะอธิบายเสริมในบางส่วนเช่น การจะทำงานกับ Bitcoin ต้องใช้ค่าไหน ETH ต้องใช้ค่าไหน เป็นต้น

ถ้าเรา implement ตาม BIP ทั้งหมด เราจะได้กระเป๋าที่ทำงานทดแทนกับกระเป๋าอื่นที่ทำงานตาม Standard BIP ด้วยเหมือนกัน แต่ถ้าเราไม่ implement SLIP ให้ตรงกัน ค่าที่อยู่ข้างใน มันจะประหลาดๆ ค่าทำงานได้นะ แค่ค่าดูประหลาด แล้วก็เพี้ยนๆ อะไรแบบนั้นครับ

ฟังดูน่ากลัวแล้วใช่มั้ยฮ่าๆๆ อย่ากลัวไป เดี๋ยวผมจะหยิบเรื่องที่ต่างๆมาร้อยเรียงไปเรื่อยๆ เพื่อให้เข้าใจเรื่องราวตามลำดับ จากจุดเริ่มต้น จนไปถึงจุด peak ได้เลย

อ้อ ถ้าบอกว่าทั้งหมดนี้เยอะแล้ว ต้องบอกว่า standard เหล่านี้ แค่อธิบาย “โครงสร้าง” Wallet เท่านั้นเองนะ ยังไม่ได้ไปถึงเรื่อง “Transaction” เลย พักไว้ก่อนละกัน ไม่งั้นยาวแน่นอน เดี๋ยวอธิบายโครงสร้างให้จบ แล้วจะต่อด้วยเรื่อง Transaction กันอีกที

แล้วติดตามกันต่อไปครับ