Utreexo: โครงสร้างและการย่อขนาด UTXO ใน Bitcoin

ภาพประกอบด้านบนแสดงการเติบโตของชุดข้อมูล UTXO ของ Bitcoin (ขนาดหน่วย GB) ตั้งแต่ปี 2019 จนถึง 2024 โดยเห็นว่าชุดข้อมูล UTXO เพิ่มขึ้นอย่างรวดเร็ว [1] การเติบโตนี้ทำให้โหนด (node) แบบเดิมต้องใช้หน่วยความจำและพื้นที่จัดเก็บมากขึ้นเรื่อยๆ (ปัจจุบันมี UTXO ถึงประมาณ 60 ล้านรายการ หรือ ~12 GB) [2] ซึ่งอาจจะเป็นอุปสรรคต่อการรัน Bitcoin Full node ได้ในอนาคต Utreexo เป็นแนวคิดใหม่ที่แก้ปัญหานี้โดยใช้ cryptographic accumulator แทนฐานข้อมูล UTXO แบบเดิม โดย Utreexo สามารถแทนข้อมูล UTXO หลายล้านรายการไว้ด้วยข้อมูลขนาดเล็กเพียงไม่กี่ร้อยไบต์ (ตัว accumulator มีขนาด <1 KB) [3] แนวคิดนี้คือการแทนที่โหนดทุกเครื่องจะต้องเก็บ UTXO ทั้งหมดเอาไว้จะเปลี่ยนเป็นโหนดจะเก็บเพียงสถานะตัวสะสม (accumulator) เท่านั้น ส่วนผู้ถือเหรียญจะรักษาหลักฐาน (proof) ของ UTXO ที่ตนเป็นเจ้าของ เมื่อสร้างธุรกรรมจะส่งหลักฐานดังกล่าวแนบมากับธุรกรรมด้วย เพื่อตรวจสอบได้ว่าเหรียญที่ใช้จ่ายมีอยู่จริงในตัวสะสม ซึ่งวิธีนี้จะลดขนาดข้อมูลสถานะลงอย่างมากแลกกับการส่งข้อมูลเพิ่มเพียงเล็กน้อย (overhead ประมาณ +25% ในการดาวน์โหลดข้อมูลเทียบกับเดิม) [4]

โครงสร้างข้อมูลพื้นฐาน: Merkle Forest และ Accumulator

Utreexo ใช้หลักการ hash-based dynamic accumulator ซึ่งอธิบายได้ว่าเป็น “ป่า Merkle (Merkle forest)” – คือต้นของ Merkle หลาย ๆ ต้นมาทำงานร่วมกัน [5] โดยแต่ละต้นมีใบเป็นข้อมูล UTXO และเมื่อมีการเพิ่ม UTXO ใหม่เข้าไปจะเพิ่มเป็นใบใหม่ในต้นที่เหมาะสม และเมื่อมีการใช้จ่ายใบใบนั้นจะถูกลบออกจาก accumulator โดยในทางปฏิบัติ accumulator นี้ถูกเก็บเป็นอาร์เรย์ของค่า root hashes ของแต่ละต้น (เช่น acc[n] คือรากของต้นที่ระดับ n หรือ ∅ หากไม่มีต้นระดับนั้น) และเนื่องจากเก็บเพียงค่า root ของแต่ละต้น ทำให้ในโค้ด accumulator มีเพียงอาร์เรย์ของค่าแฮชและจำนวนใบ (กิ่งก้านสาขา) เท่านั้น ขนาดของตัว accumulator จะโตขึ้นช้ามากเป็นแบบลอการิทึมตามจำนวน UTXO ซึ่งหมายความว่าแม้จำนวน UTXO จะเป็นล้านๆ ต้นก็ใช้พื้นที่จัดเก็บเพียงเล็กน้อย.

นอกจากนี้ Utreexo ไม่ต้องการ trusted setup ใด ๆ และรักษาระดับความปลอดภัยแบบเต็มรูปแบบเทียบเท่า full node แบบเดิม

คุณสมบัติสำคัญของตัว accumulator ใน Utreexo ได้แก่:

  • การรับรองการเพิ่มและลบ UTXO แบบไดนามิก: สามารถเพิ่ม UTXO ใหม่เข้าไปได้ง่าย และใช้กระบวนการเฉพาะในการลบ UTXO ที่ถูกใช้ไปจาก Merkle forest โดยไม่ต้อง hash ใหม่ทั้งหมด

  • ขนาดเล็ก – accumulator มีขนาดเติบโตช้าเป็นสเกลลอการิทึมกับจำนวน UTXO (เช่น ค่า root มีคงที่เพียงไม่กี่ร้อยไบต์ แม้ UTXO เป็นล้านรายการ)

  • ไม่ต้องมีการตั้งค่ากลาง (trusted setup) – ใช้ hash อย่าง SHA-256 เพียงอย่างเดียว จึงไม่มีการเสียความปลอดภัยเพิ่มเติม

ด้วยโครงสร้างนี้ โหนด Utreexo เพียงเก็บ root ของทุกต้นไม้และจำนวนใบไม้ทั้งหมดไว้เท่านั้น ในขณะที่หลักฐานการมีอยู่ของ UTXO แต่ละรายการจะถูกส่งให้โหนดเมื่อเกิดการใช้จ่าย

การย่อขนาด UTXO ด้วย Accumulator

วิธีการย่อขนาด UTXO set ของ Utreexo คือการแทนที่รายการ UTXO ทั้งหมดด้วย ตัวสะสม ที่เป็นค่าแฮชขนาดเล็ก และเมื่อมีการใช้จ่าย UTXO โหนดจะรับหลักฐานยืนยันการมีอยู่ของ UTXO นั้นจากผู้ใช้ กล่าวคือ ในบิตคอยน์แบบเดิม เมื่อโหนดยืนยันธุรกรรมใด โหนดจะต้องค้นหา UTXO ทั้งหมดในฐานข้อมูลเพื่อยืนยันว่าผู้ใช้มีเหรียญเหล่านั้นจริง แต่กับ Utreexo ผู้ใช้จะถือหลักฐาน (Merkle proof) ที่พิสูจน์ว่า UTXO ยังอยู่ในตัวสะสม ทุกครั้งที่สร้างธุรกรรม ผู้ใช้จึงแนบหลักฐานนี้ไปพร้อมกับธุรกรรม โหนดอื่น ๆ ที่เก็บแค่ accumulator state สามารถตรวจสอบหลักฐานนี้ได้ว่ารากของต้นใดเป็นสมาชิกกับ root ของตัวสะสมของเครือข่าย จึงไม่ต้องเก็บรายชื่อ UTXO ทั้งหมดไว้ หลังจากตรวจสอบความถูกต้องของหลักฐานแล้ว หลักฐานนั้นอาจถูกทิ้งได้ และโหนดจะ อัปเดตตัวสะสม โดยเพิ่ม UTXO ใหม่และลบใบเก่า (UTXO ที่ถูกใช้จ่าย) ออกจาก Merkle forest

กระบวนการนี้ทำให้ข้อมูลของโหนดเล็กลงมาก แต่แลกกับเพิ่ม overhead เล็กน้อยในการส่งข้อมูล หลักฐานการมีอยู่ของ UTXO (inclusion proof) แต่ละรายการมีขนาดเล็ก (โดย Dryja ระบุว่าอยู่ไม่เกิน ~1 KB ต่อ UTXO) [3] แม้จะเพิ่มปริมาณข้อมูลที่ส่งระหว่างโหนดและกระบวนการบันทึกข้อมูลเล็กน้อย (ประมาณ +25% ของข้อมูลที่ต้องดาวน์โหลดทั้งหมดในการซิงค์บล็อกเชน) แต่โดยรวมถือว่ายังเป็นระดับที่จัดการได้สำหรับการลดข้อจำกัดด้านพื้นที่จัดเก็บของโหนดรวมทั้ง Utreexo ยังมีวิธีรวมหลักฐานเพื่อลดขนาดซ้ำซ้อน และใช้การเก็บ sparse forest ที่แบ่งเบาข้อมูลการพิสูจน์ด้วย

ประเภทของโหนดและการซิงค์ข้อมูล

Utreexo แนะนำวิธีจัดโหนดออกเป็นสองประเภทหลัก เพื่อรองรับการทำงานร่วมกันระหว่างโหนดเก่าและโหนดใหม่:

  • โหนดเต็ม (Full Node) – คือโหนดตามปกติที่เก็บข้อมูลบล็อกเชนทั้งหมด และอาจเก็บ UTXO set หรือ accumulator ได้ สำหรับการสนับสนุน Utreexo อาจแบ่งเป็นโหนดเต็มทั่วไป (regular full node ที่ไม่รู้จัก Utreexo) และ โหนดสะพาน (Bridge Node) ที่เป็นโหนดเต็มอีกแบบหนึ่ง โหนดเต็มทั่วไปทำงานเหมือนเดิม ให้รับส่งบล็อกและธุรกรรมโดยไม่มีการเปลี่ยนแปลง ส่วน โหนดสะพาน เป็นโหนดเต็มที่เก็บ Merkle forest ของ UTXO ทั้งหมดเอาไว้ด้วย เพื่อสร้างหลักฐานให้กับโหนดกะทัดรัดตามที่ต้องการ โหนดสะพานจะเชื่อมเครือข่ายระหว่างโหนดกะทัดรัดและโหนดเต็มโดยไม่เปลี่ยนโปรโตคอล: โดยเมื่อโหนดเต็มส่งธุรกรรมไปยังโหนดกะทัดรัด จะต้องผ่านโหนดสะพานก่อน โหนดสะพานจะค้นหาว่า UTXO ที่ใช้จ่ายนั้นอยู่ตรงไหนจาก Merkle forest แล้วสร้าง inclusion proof ให้ พร้อมส่งธุรกรรมพร้อมหลักฐานนั้นต่อไปยังโหนดกะทัดรัด (ในทางกลับกัน โหนดกะทัดรัดสามารถส่งธุรกรรมไปโหนดเต็มได้โดยไม่ต้องมีหลักฐาน เพราะโหนดเต็มไม่ต้องตรวจสอบกับ accumulator)

  • โหนดกะทัดรัด (Compact State Node) – เป็นโหนดที่เก็บเพียงตัวสะสม (accumulator state) และไม่เก็บ UTXO รายการใด ๆ ทำให้ใช้พื้นที่น้อยมาก เนื่องจากไม่เก็บข้อมูล UTXO โหนดกะทัดรัดจึงจำเป็นต้องรับหลักฐานรวม (inclusion proofs) ทุกครั้งที่ตรวจสอบธุรกรรม เมื่อโหนดกะทัดรัดสร้างธุรกรรมใหม่ มันจะแนบหลักฐาน UTXO ที่ถูกใช้จ่ายไปกับธุรกรรมนั้นด้วย จากนั้นจะกระจายธุรกรรมและหลักฐานไปยังโหนดกะทัดรัดอื่น ๆ ต่อไป (ทุกโหนดกะทัดรัดมีข้อมูล accumulator เดียวกันจึงสามารถตรวจสอบหลักฐานได้) เมื่อธุรกรรมถูกยืนยันในบล็อกแล้ว ก็สามารถทิ้งหลักฐานที่ใช้ไปได้ เนื่องจากการอัปเดตตัวสะสมได้ทำขึ้นแล้วและไม่ต้องเก็บไว้ในระยะยาว

ข้อได้เปรียบของ Utreexo

  • ลดการใช้หน่วยความจำและดิสก์ – ใน Utreexo ตัวสะสมมีขนาดเล็ก เทียบกับฐานข้อมูล UTXO ดั้งเดิม ตามตัวอย่างการทดสอบ อุปกรณ์ Utreexo สามารถบันทึกสถานะ UTXO ได้เป็นคอมมิทเมนต์ขนาดแค่ 32 ไบต์ เทียบกับขนาด UTXO ปัจจุบัน ~12 GB โดยขนาด chainstate ย่อเหลือเพียง ~1/1,000,000 ของโหนดเต็มแบบเดิม หากรันโหนดแบบ prune ร่วมด้วย พื้นที่ดิสก์จะคงที่เล็กน้อยเท่านั้น ซึ่งประหยัดกว่านักโหนดแบบเต็มที่ prune ปกติซึ่ง chainstate อาจขยายจนเกินขนาดฮาร์ดแวร์

  • ซิงค์เร็วและใช้ทรัพยากรต่ำ – ด้วยข้อมูลสถานะที่เล็กมาก โหนด Utreexo สามารถเปิดตัวและซิงค์กับเครือข่ายได้รวดเร็ว เช่น Luke Champine ระบุว่า “โหนดที่ใช้ Utreexo จะใช้พื้นที่เพียงไม่กี่กิโลไบต์ และสามารถยืนยันบล็อกใหม่จากศูนย์ได้ในไม่ถึงหนึ่งวินาที” [5] ตัวสะสมนี้ยังไม่ต้องใช้ I/O ดิสก์มาก ทำให้เหมาะกับอุปกรณ์ประสิทธิภาพต่ำ เช่น เครื่องที่ใช้ microSD (ซึ่งไม่ทำให้ SD card สึกกร่อน)

  • ความปลอดภัยเต็มรูปแบบ (ไม่มี loss-of-security) – Utreexo เป็นเพียงการเปลี่ยนโครงสร้างจัดเก็บข้อมูล ไม่ได้ลดทอนหลักการความปลอดภัยของ Bitcoin แต่อย่างใด ตัวสะสมเป็นเพียงค่ารวมของ UTXO โดยการเข้ารหัสแฮช ดังนั้นยังต้องผ่านการตรวจสอบแบบ cryptographic เหมือนเดิมและ Utreexo ไม่ต้องการแก้ไขโปรโตคอลของบิตคอยน์ จึงสามารถนำมาใช้กับเครือข่ายปัจจุบันได้ทันทีโดยโหนดแบบเดิมไม่ถูกรบกวน

  • กระจายภาระให้ถูกจุด – ระบบตระหนักว่าแต่ละผู้ใช้ต้องดูแลหลักฐาน UTXO ของตนเองไว้ (UTXO owners ถือ proof ของตัวเอง ทำให้ภาระไปอยู่ที่เจ้าของเหรียญโดยตรง แทนที่จะกระจายให้ทุกโหนดเต็มต้องเก็บทั้งหมด โหนดขนาดเล็กที่มี UTXO ไม่มากก็ต้องเก็บหลักฐานเพียงเล็กน้อยเท่านั้น, ขณะที่ผู้ให้บริการหรือธุรกรรมจำนวนมากอาจต้องเก็บหลักฐานมากขึ้นตาม

ข้อจำกัดของ Utreexo

  • เพิ่มภาระแบนด์วิดท์ – การใช้ inclusion proofs เพิ่มปริมาณข้อมูลที่ส่งผ่านเครือข่ายพอสมควร งานวิจัยของ Dryja ระบุว่ามี overhead ประมาณ 25% ในปริมาณข้อมูลที่โหนดต้องดาวน์โหลดเมื่อซิงค์บล็อกเชน [4] ในการใช้งานจริง (จากโครงการ Utreexod) พบว่าการดาวน์โหลดบล็อกใช้ข้อมูลประมาณ 1.7 เท่าของปกติและธุรกรรมบางรายการอาจส่งข้อมูลได้สูงสุดถึง 4 เท่า กล่าวคือ เพื่อแลกกับการประหยัดพื้นที่อย่างมาก โหนดต้องรับภาระแบนด์วิดท์เพิ่มขึ้นราวสองเท่าในกรณีแย่ที่สุด

  • ความซับซ้อนเพิ่มเติม – Utreexo ต้องการให้ผู้ใช้และโหนดเตรียมจัดการกับหลักฐาน (proof) เพิ่มเติม Wallet จะต้องสามารถจัดเก็บและหา proof ของ UTXO ได้, และโหนดต้องแนบ proof เมื่อส่งธุรกรรม แม้โครงสร้างจะคล้ายกับ Merkle tree ธรรมดา แต่ก็เป็นกระบวนการใหม่ที่ต้องพัฒนาและทดสอบ ขณะนี้โค้ด Utreexo ยังอยู่ในสถานะเบต้าและยังไม่ได้รับการตรวจสอบอย่างกว้างขวาง จึงมีความเสี่ยงจากบั๊กหรือการเปลี่ยนแปลงด้านเทคนิค

  • ไม่เข้ากันกับกระเป๋าเงินหรือโครงสร้างปัจจุบันทันที – แม้ Utreexo จะไม่เปลี่ยน consensus แต่โหนดกะทัดรัดไม่สามารถทำงานกับ node ทั่วไปได้โดยตรง (ต้องผ่านโหนดสะพาน), จึงต้องมีการพัฒนาเพิ่มเติมให้ wallet และซอฟต์แวร์กระจายธุรกรรมรองรับ ปัจจุบันไม่มีแผนรวม Utreexo เข้ากับ Bitcoin Core โดยตรง, แม้ว่านักพัฒนาสามารถทดลองใช้ได้เองก็ตาม

  • ความเสี่ยงการรวมศูนย์ของโหนดสะพาน – เพื่อให้เครือข่ายทำงานร่วมกันได้จำเป็นต้องมี โหนดสะพาน จำนวนหนึ่งมาคอยให้บริการสร้างหลักฐาน เนื่องจากโหนดสะพานต้องเก็บ UTXO set เต็มและ Merkle forest ทั้งหมดพร้อมสร้าง proof จึงใช้พื้นที่มากกว่าปกติ หากโหนดสะพานมีน้อย อาจเกิดภาวะรวมศูนย์ (centralization) หรือความล้าช้าจากการรอหน่วยงานใดหน่วยงานหนึ่งสร้าง proof ให้

การทดลองใช้งานจริงและสถานะปัจจุบัน

แม้ Utreexo จะยังไม่ถูกนำเข้าใน Bitcoin Core อย่างเป็นทางการ แต่มีโครงการวิจัยและพัฒนาหลายอย่างที่นำ Utreexo ไปใช้จริงแล้ว หนึ่งในนั้นคือ Utreexod โดยพัฒนาเป็นซอฟต์แวร์ Bitcoin full node ที่เขียนขึ้นด้วยภาษา Go ที่รองรับ accumulator Utreexod มีคุณสมบัติดังนี้: สามารถ บูตสตาร์ทโหนดได้ทันที ด้วยการฝัง state เริ่มต้นของ UTXO ไว้ในโค้ด จึงสามารถข้ามการดาวน์โหลดบล็อกตั้งต้นได้ โหนดนี้ใช้หน่วยความจำน้อยมาก (เพียงหลักสิบหรือร้อย MB เทียบกับหลาย GB ของโหนดปกติ) และมี I/O ดิสก์ต่ำมาก ไม่ทำให้ microSD เสื่อมสภาพง่าย อย่างไรก็ตาม การใช้ Utreexod ต้องแลกกับแบนด์วิดท์ที่สูงขึ้น: การดาวน์โหลดบล็อกใช้ข้อมูลประมาณ 1.7× ของปกติ และบางธุรกรรมอาจต้องใช้ข้อมูลได้ถึง 4× ปัจจุบัน Utreexod ยังอยู่ในสถานะเบต้า (ออกเวอร์ชัน v0.4.1 ในปี 2024) และผู้พัฒนายังแนะนำให้ใช้เฉพาะในเครือข่ายทดสอบหรือกับจำนวน Bitcoin น้อยๆ เท่านั้น

นอกจากนี้ ยังมีความพยายามอื่นๆ ของชุมชนในการใช้งาน Utreexo เช่น โครงการ ZeroSync ของ Lightning Labs ซึ่งใช้แนวคิดใกล้เคียงกับ Utreexo เพื่อเร่งการซิงค์บล็อกฯ (แต่เฉพาะในเครือข่าย LN) และไลบรารีต่าง ๆ (เช่น LibFlorestra) สำหรับผสาน Utreexo เข้ากับแอปพลิเคชัน อย่างไรก็ตาม เทคโนโลยี Utreexo ยังอยู่ในช่วงเริ่มต้น สถานะการทดลอง และยังต้องมีการพัฒนาต่อเนื่องก่อนจะมีการนำมาใช้อย่างแพร่หลายใน Bitcoin เครือข่ายหลัก

อ้างอิง

[1] https://bitcoinmagazine.com/technical/bitcoins-growing-utxo-problem-and-how-utreexo-can-help-solve-it

[2] https://bitcoinops.org/en/newsletters/2024/05/15/#release-of-utreexod-beta

[3] https://www.dci.mit.edu/projects/utreexo#:~:text=Utreexo%20is%20a%20novel%20hash,the%20owner%20of%20those%20funds

[4] https://eprint.iacr.org/2019/611.pdf#:~:text=accumulator%20to%20locally%20represent%20the,to%20the%20amount%20otherwise%20downloaded

[5] https://lukechampine.com/utreexo-talk.html#:~:text=The%20Utreexo%20accumulator%20is%20a,I%27m%20pretty%20enamored%20with

Last updated