เนื้อหานี้แม้ว่ามาช้า แต่ผมไม่คิดว่าช้าเกินไปแน่นอน และเป็นสิ่งที่ใครก็ตามที่ครอบครอง Bitcoin อยู่ “ควรต้องเข้าใจ” ไม่ใช่แค่อ่านนะครับ ต้องเข้าใจ เพราะอำนาจความมั่งคั่งที่คุณเก็บไว้ใน Bitcoin ตอนนี้มันเริ่มสั่นสะเทือนซะแล้ว สะเทือนมากหรือน้อย ขึ้นอยู่กับความเข้าใจของคุณเองอีกที และการตัดสินใจของตัวคุณเองคือสิ่งที่สำคัญที่สุดครับ
ผมจะสะท้อนความจริงแบบมองเป็นกลาง เพราะผมไม่ได้ถือธง ว่าจะต้องเป็นแบบไหน หรือไม่เป็นแบบไหน ผมเป็นขอ Observer ในฐานะที่ถือ Bitcoin อยู่นิดหน่อยที่มีอยู่ก็ตกน้ำหายไปเรื่อยๆ ผมจะไม่เป็นผู้ทำนาย ในสิ่งที่เกินกว่า Fact หรือ ตีความเกินความข้อกำหนด หรือ ขยายเกินจริง หรือต่ำเกินไป เพื่อให้ทุกคนตัดสินใจด้วยตัวเอง (แต่จะมีการตีความในอนาคตตาม fact ปัจจุบัน เพื่อให้เห็น case ต่างๆ เท่านั้น)
สรุปเนื้อหา TL;DR (ยาวไปไม่อ่าน)
- Bitcoin Core Version 30 หรือที่เรียกกันว่า v30 ได้กำหนดเปิดตัววันนี้ 10 ตุลาคม 2025
- สิ่งสำคัญที่เปลี่ยนและเป็นที่ถกเถียงกันที่สุด คือ v30 ปรับขนาด default ของ OP_RETURN จากเดิม 80 Bytes เป็นไม่จำกัด (แต่ยังไง ต้องไม่เกิดขนาด 4 Weight Unit ต่อ 1 Block อยู่ดีนะ)
- เสียงแตก กลุ่มไม่เห็นด้วย : นี่คือการทำลายความเป็น Decentralized เพราะการขยายขนาด OP_RETURN ครั้งนี้ ใครจะใส่อะไรก็ได้ละ บันเทิงจัด, อนาคตคนที่มารัน full node จะไม่สามารถใช้อุปกรณ์ราคาถูกได้อีก ถึงใช้ มันก็ไม่มีพลังงานหรือ ทรัพยากรที่มากพอ ในการรันได้อย่างมีประสิทธิภาพ, ทรัพยากรพื้นฐานที่จำเป็น จะถูกใช้งานเพิ่มขึ้นเยอะมาก เพราะขนาดข้อมูลที่ใหญ่ขึ้นนี้, ระบบมันทำงานมาได้ดี 16 ปี ไม่เห็นว่าการอัพเกรดจุดนี้จะมีความจำเป็น เว้นแต่เป็นไปเพื่อเงินของกลุ่ม miner ที่จะทำให้มี transaction / use case ที่มากขึ้นบน Bitcoin ได้, หลังจากนี้ทุกอย่างจะช้าลงมากเพราะขนาดข้อมูลที่ใหญ่ขึ้นมากหลายเท่าตัวนับจากจุดนี้, Bitcoin ต้องการเป็นอะไรกันแน่ เป็นเงินที่น่าเชื่อ หรือว่าเลียนแบบ Ethereum แล้วการเลียนแบบนั้น จะทำให้เสียตัวตนไปหรือไม่, สิ่งหนึ่งที่ไม่มี Chain ไหนสู้ Bitcoin ได้เลย คือความ Decentralized และนี่คือจุดแข็งเดียวที่เหลืออยู่แล้ว เพราะที่เหลือ แพ้หมด ไม่ว่าจะเป็นเครื่องความเร็ว เรื่องลูกเล่น แต่ว่าการอัพเกรดครั้งนี้ กำลังทำลายจุดแข็งเพียงหนึ่งเดียวนั้นลงไป อนาคตไม่น่ารอดแล้ว และก็น่าจะแพ้ Ethereum ด้วยซ้ำ, มันควรทำหน้าที่ได้เฉพาะเรื่องของ “เงิน” สิ, เพิ่มโอกาส spam / DOS เข้ามาได้อีก เพราะเปิดโดย Policy เลย
- เสียงแตก กลุ่มที่เห็นด้วย : การอัพเกรดครั้งนี้ ไม่ใช่การเปลี่ยน Consensus (ฉันทามติ) เป็นการเปลี่ยนระดับ Policy เท่านั้น, Block size ยังคงเป็น 4MB เท่าเดิม ขนาด Block ยังไม่ถูกแก้ไข Bitcoin ยังเป็น Bitcoin เดิม, การอัพเกรด OP_RETURN ไม่มีความเกี่ยวข้องโดยตรงกับ UTXO, แม้ไม่เพิ่มขนาด OP_RETURN แต่ก่อนนี้ ก็มีการเอาไปใช้ Use case อื่น อย่าง Omni/Tether ที่เราเคยเห็นจริงกันมาแล้ว, ตอนนี้เราก็ยังไม่มีวิธีในการป้องกัน Spam เหล่านั้น เพราะเรายังเคารพในการเปิดกว้างทางนวัตกรรม, การอัพเกรดครั้งนี้คือการ reflect โลกจริงมากขึ้น เพราะปัจจุบัน hardware มีการพัฒนาขึ้นมามากกว่า 16 ปีก่อนมากแล้ว, การอัพเกรดนี้ ไม่ใช่ Hard fork แน่นอน เพราะไม่ได้แก้ที่ Consensus และน่าจะไม่เกิด soft fork ด้วย, การขยายครั้งนี้ เพื่อลดการไปหาวิธีแปลกๆ ในการทำอะไรบางอย่าง ก็เอามาแสดงกันบนพื้นที่ ที่จัดเตรียมเอาไว้ใน OP_RETURN นี้เลย เพิ่มความโปร่งใส, ลดความไม่สอดคล้องของ Mempool เพราะ OP_RETURN จะได้ทำงานโดยสอดคล้องกัน ทั้ง Node และ Miner (node บางเครื่องที่กำหนด OP_RETURN 80 bytes ใน v29 หรือต่ำกว่า ปัจจุบันจะมองไม่เห็น transaction ที่ใช้ OP_RETURN ขนาดใหญ่กว่า 80 bytes จะเป็นการลดความสามารถในการตรวจสอบลง), ส่งเสริม Use case ที่ใช้การฝังข้อมูล เช่น metadata, anchor, contracts, เอกสาร ได้ง่ายมากขึ้น, v30 นี้ ทุกคนยังสามารถตั้ง limit OP_RETURN ได้ด้วยตัวเองได้อยู่ (ทีแรกเอา feature นี้ออกไปแล้ว สุดท้ายเอากลับมาใหม่)
- ความเห็นส่วนตัวผมเองคนเดียวเท่านั้น : ผมมองเป็นกลาง และ ไม่ได้คิดว่าการอัพเกรด V30 เป็นเรื่องแย่อะไร, ใครไม่พอใจ ก็อยู่ Bitcoin Core V29 หรือต่ำกว่า หรือว่ารัน Knot node (แต่อันนี้เป็นอีกประเด็น เพราะ Knot node มีการ hard code เพื่อกัน spam แต่ว่านั่นสามารถมองว่าเป็นการ sensorchip อีกทั้งความโปร่งใส และเป็นกลางของเจ้าของโปรเจคด้วย ที่ยังเป็นที่ถกเถียงกันมานานจนถึงวันนี้เลย) ความสวยงามของเรื่องนี้ ก็คืออิสระในการตัดสินใจของคนรัน Node จะเป็นตัวตอบเองว่าเรากำลังไปทางไหนกันต่อ และผมมองว่า มันไม่ได้ร้ายแรงถึงกับทำให้พังลงใน 5 ปีนี้หรอก (แต่ไม่นับว่ามี update อะไรแปลกๆในอนาคตนะ) เพราะแม้ไม่มี v30 มันเป็นสิ่งที่ทำได้อยู่แล้ว Use case ที่ดังที่สุด คือ OMNI / Tether หรือ USDT ยุคแรก นั่นแหล่ะมีการใช้เกิน limit OP_RETURN 80 bytes มาแล้วจริง ต่อมา Segwit เกิด ก็มีท่าเลี่ยงใช้ท่าอื่นทำกัน คือเอาไปยัดเข้า Witness แทน ซึ่งมันเป็นท่าแปลกประหลาด เพราะมันถูกกว่าเก็บได้เยอะกว่า และหลบ policy relay ได้ด้วย ครั้งนี้ ก็แค่บอกว่า OP_RETURN ใช้ได้เด้อ ใช้ตรงนี้เถอะ ส่วนเรื่องผลกระทบกันการ run node บน low end resource ผมว่า ไม่เกี่ยวโดยตรงครับ เป็นเหมือนเดิมแหล่ะไม่กระทบ
ต่อจากนี้คือการอธิบายเรื่องนี้ ซึ่งต้องอาศัยความเข้าใจใน Bitcoin network และการทำงานเบื้องหลังมากประมาณนึงเลย ผมจะตัดและย่อให้โดยพยายามให้เข้าใจง่ายที่สุด เน้นเอามาที่สำคัญที่ต้องเข้าใจจริงๆ เพราะมันพันกันไปหมด แต่ยังถูกต้องตามหลักการ
ทบทวนการทำงานของ Transaction ใน Bitcoin
สิ่งนี้ต้องเข้าใจครับ เลี่ยงไม่ได้เลย เวลาที่มี Transaction ใหม่ เช่น “ผม จะโอน 0.01 Bitcoin ให้เพื่อน” Transaction จะไหล แบบนี้
[1] Wallet ผม → สร้างธุรกรรม → ส่งให้ Full node (Broadcast transaction)
[2] Full node → ตรวจสอบ → ใส่ mempool พร้อมทั้งบอก Node อื่นๆต่อๆไป (Mempool relay)
[3] Miner → เอา tx มารวมในบล็อก → ขุดหาค่า nonce
[4] เมื่อขุดสำเร็จ → broadcast block ใหม่
[5] Full node อื่น → ตรวจ block → ถ้าผ่านกฎ consensus → ต่อเชน
[6] ถ้ามี 2 บล็อกแข่งกัน → ทุกคนรอจนกว่าหนึ่งฝั่งยาวกว่า → เลือกฝั่งนั้น
เอาภาพรวม ประมาณนี้ก่อน อธิบายเพิ่มอีกนิด คือ
- ข้อ 1 ผมทำเอง
- ข้อ 2 คนที่รัน Full node ทำ
- ข้อ 3-4 คนที่เป็นคนขุด ทำ
- ข้อ 5-6 กลับมาคนที่รัน Full node ทำ
ขอให้จำข้อ 2 กับข้อ 5 เอาไว้ เพราะ OP_RETURN นี่เกี่ยวกับสองข้อนี้ตรงๆ
โดยเฉพาะข้อ 2 OP_RETURN ที่เราคุยกัน มีผลแค่จังหวะนี้เท่านั้นครับ แต่ข้อ 5 OP_RETURN ไม่มีการตรวจแล้ว
ทบทวนพื้นที่จัดเก็บของ Blockchain ในภาพใหญ่ [ระดับทั้ง Network]
ขออ้างอิงจาก สถาปัตยกรรมของ Bitcoin core เป็นหลัก เพื่อให้เข้าใจตรงกัน ดังนี้
[1] ข้อมูล Blockchain ทั้งหมด
จะเก็บทุก Block เก็บทุก Transaction ซึ่งนี่จะเป็นตัวที่กำหนดขนาดพื้นที่จัดเก็บรวมที่ต้องใช้ คือ คนที่รัน Full node จะต้องมี Harddisk / SSD ที่เก็บข้อมูลทั้งหมดนี้ให้ได้เป็นสิ่งที่สำคัญที่สุด เพราะมันจะเก็บทุกตัวอักษร ข้อมูล ที่เคยเกิดขึ้นในทุก Block นับจาก Block แรก จนถึงปัจจุบันเลย
โดย ณ วันที่เขียนนี้ ข้อมูลทั้งหมดของ Bitcoin มีขนาด 788 GB
[2] index (ดัชนี / สารบัญ)
เป็นตัวที่เก็บแค่ดัชนี หรือ สารบัญ เพื่อใช้อ้างอิงเข้าไปที่ไฟล์ [1] เท่านั้น ตัวเองมีแค่ block เลขอะไร และ ชี้เข้าไปที่ตำแหน่งไหนของไฟล์ [1] แต่ไม่มีเนื้อหาข้อมูลดิบ เปรียบเหมือน สารบัญในหนังสือที่เราอ่านแหล่ะ มีแค่หัวข้อ และ หน้า จบ
คนที่รัน Full node จะทำ index หรือ ไม่ก็ได้ แต่โดยปกติแล้ว มักจะต้องทำ เพื่อเอาไปใช้ประโยชน์ในการค้นหาข้อมูล Block ต่างๆ ได้อย่างรวดเร็ว เพราะถ้าไม่มี index จะต้องใช้การ scan ไปเรื่อยๆ มันจะช้ามาก (เหมือนเราไม่มีสารบัญในหนังสือ ก็ต้องเปิดอ่านทีละบรรทัดทีละหน้าจนกว่าจะเจอข้อความที่เราต้องการ) ซึ่งแต่ละ Node ก็จะสร้าง index เองจากข้อมูลที่โหลดเข้ามานั่นแหล่ะ ไม่ได้โหลด index มา
[3] chainstate (UTXO DB)
เป็นฐานข้อมูลที่เก็บ จำนวน Bitcoin ที่ยังไม่ถูกใช้ และข้อมูลที่เกี่ยวข้อง ถ้าพูดให้เข้าใจง่ายๆ ก็คือ มี address ไหน เก็บ bitcoin ขนาดเท่าไรอยู่บ้าง ซึ่งตรงนี้จะสำคัญมาก เพราะข้อมูลนี้จะต้องเอาขึ้นไปทำงานบน Ram / Processsing เพื่อ การตรวจสอบความถูกต้องในกระบวนการตรวจสอบ Input (คนจะโอนออก ต้องมี input มากกว่าหรือเท่ากับ จำนวนที่ตัวเองกำลังจะโอนออก ตรง input นี้แหล่ะมาจาก UTXO) ซึ่งจะต้องตรงกับกับ Node อื่น 100% ไม่งั้นจะถือว่าเราคือคนละ chain กัน
ขอให้จำขนาด Harddisk / SSD size ที่เราต้องใช้ ณ วันนี้ กันเอาไว้นะครับ 788 GB อันนี้ก็จะมีผลกระทบมาจากการขยาย OP_RETURN ด้วยเช่นกัน (ทางอ้อม) และจำไว้ว่าเรามีส่วน UTXO เป็นเรื่องที่สำคัญ ที่จะกระทบต่อการทำงานของทรัพยากรเครื่อง และ network มาก
ทบทวนเรื่องขนาด ของแต่ละ Block [ระดับ Block]
ในแต่ละ Bitcoin blockchain ที่เราต้องปิดกับทุก 10 นาทีโดยประมาณ
แต่ละ Block จะมีขนาดไม่เกิน 4 Mega Bytes “อันนี้คือ Consensus(ฉันทามติ)”
เมื่อ 2017 มีการเพิ่ม SegWit ตาม BIP 141 และมีการปรับวิธีการวัดขนาดจากเดิม 1,000,000 Bytes ให้เป็น block_weight = base_size * 3 + total_size โดย block_weight ต้องน้อยกว่าหรือ เท่ากับ 4,000,000 ดังนั้นเทียบกลับ ก็จะเกือบๆ 4 Mega Bytes ตามหน่วยที่เราเข้าใจกัน
โดยในแต่ละ Block จะมีข้อมูลดังนี้
┌────────────────────────────────────────────────┐
│ Block Header (80 bytes) │
├────────────────────────────────────────────────┤
│ Transactions (Tx count varint) │
│ ├─ tx1: inputs, outputs, scripts, witnesses │
│ ├─ tx2: ... │
│ └─ ... │
└────────────────────────────────────────────────┘
ก็คือ ประกอบด้วย Header ของ Block ขนาด 80 Bytes แล้วก็ประกอบด้วย Transaction แต่ละอัน เอามารวมแล้ว ต้องไม่เกิน 4,000,000 block_weight (ประมาณ 4 Mega Bytes)
ในแต่ละ Transaction เก็บอะไร [ระดับ Transaction]
ผมย่อยจากภาพใหญ่ Network > Block > Transaction แล้วนะครับ น่าจะยังตามทันกันอยู่นะ OP_RETURN อยู่ตรงนี้แล้วครับ
ในแต่ละ transaction จะมีองค์ประกอบประมาณนี้ครับ
Transaction (SegWit)
├─ version (4 bytes)
├─ marker (1 byte = 0x00)
├─ flag (1 byte = 0x01)
├─ input_count (varint)
├─ [inputs...]
│ ├─ prev_txid (32 bytes)
│ ├─ prev_vout (4 bytes)
│ ├─ scriptSig (var bytes)
│ └─ sequence (4 bytes)
├─ output_count (varint)
├─ [outputs...]
│ ├─ value (8 bytes)
│ └─ scriptPubKey (var bytes) ← OP_RETURN อยู่นี่
├─ [witnesses...]
│ ├─ witness_count (varint)
│ └─ witness_data (var bytes)
└─ locktime (4 bytes)
จะเห็นว่า OP_RETURN อยู่ในส่วน scriptPubKey ของ Output
ซึ่งเป็นส่วนหนึ่งของ Transaction อีกที ก่อนเอา Transaction ไปประกอบเป็น Block และส่งเข้า Mempool เพื่อให้ Miner บรรจุลง Block เก็บเข้า network
ตรงนี้ อยากให้ดู transaction ทั้งหมด ที่ไม่รวม witness นะครับ และ อยากให้มอง witness แยกออกมาด้วย เพราะที่ผ่านมา มีโครงการ Ordinals , Runes ที่เอาพื้นที่ Witness มาใช้เก็บข้อมูลต่างๆ ไม่ใช่ OP_RETURN นี่คือการใช้ท่าแปลกๆในการ implement บน Bitcoin network ที่เค้าเรียกว่า spam นั่นแหล่ะ เพราะมันไม่ใช่ธุรกรรมที่เกี่ยวกับเงินตรงๆ แต่มาเบียดบังเอาทรัพยากรของ Bitcoin network ไปใช้ ตอนนั้น Block เต็มเกือบทุก Block เกือบตลอดเวลา ทำให้ค่าโอนแพงขึ้นเยอะมาก
ปัญหาคือเพราะเค้าไม่ใช้ OP_RETURN ทำให้เป็นการเพิ่มภาระตรงๆกับ UTXO เข้าไปอีก อันนี้แหล่ะ คือ พฤติกรรมที่ไม่ควรทำ แต่ระบบมีช่องให้ทำได้ก็เลยทำกัน และยังมีพฤติกรรมแปลกๆตามมาอีกด้วย เช่น โอนผิด ไปติดส่วน UTXO ที่มี Ordinals อยู่ด้วย ก็เสียไปฟรีๆเลยจากการทำธุรกรรมปกติ อะไรแบบนี้ คือเอาวิธีอ้อมๆมาใช้บน Bitcoin network ก็เลยทำให้ต้องระวังในการใช้งานมากขึ้นเป็นพิเศษ วุ่นวายน่าดู
แต่ถ้าเลือกใช้ OP_RETURN ก็จะไม่วุ่นวายกับ UTXO ทันที เพราะ OP_RETURN node และคนขุดจะตีความได้เหมือนกันคือไม่ต้องเอาเข้าไปเป็น UTXO ต่อ (เอาไปใช้จ่ายในอนาคตต่อไม่ได้ เพราะมันมีแต่ data เท่านั้น) แต่ว่าที่ผ่านมา Limit 80 bytes อยู่ ก็เลยไม่ใช้กัน และอาจจะเพราะมันเอาไปโอนต่อไม่ได้ด้วย (ไม่เข้าในส่วน UTXO) ก็เลยยิ่งไม่สนใจกันอีก
ถ้าขยาย OP_RETURN ตาม v30 ล่ะ?
- ก็แค่ขนาดของ Transaction จะใหญ่ขึ้น ขึ้นอยู่กับคนที่สร้าง Transaction เค้าใส่อะไรเข้าไปใน OP_RETURN มั้ย ถ้าใส่ใส่เข้าไปแค่ไหน อย่างที่ปรับใหม่คือ ใส่ได้เต็ม Block 4 Weight Unit หรือ ประมาณ 4 Mega Bytes ของความจุ Block เลย
- data ที่ใส่ใน OP_RETURN ไม่เก็บเข้า UTXO ทำให้ไม่ต้องมาดูแลในอนาคต เพราะมันเอาไปใช้จ่ายต่อไม่ได้ มันไม่ใช่เงิน (ในมุมของ bitcoin)
- แม้ว่า transaction จะใหญ่เบิ้ม จาก OP_RETURN + Witness แต่ก็จะใหญ่เกินกว่า 4 Mega Bytes ของ Block ไม่ได้อันนี้กฎเดิม
- ทำให้ Node คุยด้วย Transaction ที่มีหน้าตาเหมือนๆกันมากขึ้น เพราะก่อนนี้ transaction OP_RETURN ใหญ่กว่า 80 bytes พวกนี้ Node จะไม่รับเข้า Mempool ตั้งแต่แรกเลย เหมือนโดน filter ไปหมดโดย default
- Blockchain data จะมีขนาดใหญ่ขึ้นในระยะยาว เพราะเปิดรับ use case ใหม่ๆ ได้มากขึ้นอย่างเป็นทางการ
OP_RETURN ปัจจุบัน 80 Bytes ก็ทำงานได้อยู่นี่นา
v29 หรือต่ำกว่า มีการกำหนด Default ให้เป็น 80 Bytes สิ่งนี้จะมีผลต่อ Full node ที่เลือกรับ Transaction เข้า Mempool และ การส่ง Transaction ต่อไปที่ Node อื่นๆ ถ้าใหญ่เกิน 80 Bytes คือไม่รับเลย จบ (จำได้มั้ยในขั้นตอนที่2 หลังจากที่ User สร้าง transaction และ broadcast ออกไป แต่อยู่ก่อนการบรรจุเข้า block โดย miner)
เพราะ ปัจจุบัน มีการใช้งาน OP_RETURN ขนาดใหญ่กว่า 80 Bytes ได้จริง แต่ว่า Node ที่รัน Default 80 Bytes จะ ignore transaction เหล่านั้น ไม่เอาเข้า Mempool ของตัวเอง และไม่ส่งต่อให้ Node อื่น แต่ปรากฏว่า Transaction เหล่านั้นเข้าไป Mining ที่ Miner ได้ (คือ Miner สนใจแค่ว่า transaction ใดที่ทำให้ได้เงินเยอะที่สุด เอาหมด) Full node จะมาเห็นอีกที ก็คือ ตอนที่บรรจุลง Block แล้ว ซึ่งจังหวะนั้น Node ก็จะให้ผ่านด้วย เพราะ OP_RETURN 80 Bytes จะเป็นข้อกำหนด ที่ทำงานในระดับ Mempool เท่านั้น แต่ตอนที่ Validate Block ไม่มีข้อกำหนดนี้แล้ว ดังนั้นผ่านได้เลย และนี่ก็คือคำตอบว่าทำไม ปัจจุบันมีการใช้งาน OP_RETURN ขนาดใหญ่เกินกว่า 80 bytes ได้จริงอยู่แม้ว่าไม่เคยถูกขยายมาก่อน และเป็นอีกคำตอบว่า ไม่น่าจะเกิด soft fork เกิดขึ้น (ถ้าไม่มีอะไรผิดพลาดนะ) เพราะตอนเขียนข้อมูลลง Blockchain data ไม่มีข้อกำหนดนี้อยู่ และไม่ใช่ Hard fork อย่างแน่นอน (เพราะไม่ได้แก้ที่ระดับ Consensus)
ซึ่งกรณีที่ Mempool บางส่วน ไม่รับ transaction ที่มี OP_RETURN ขนาดเกิน 80 Bytes แต่บางส่วนรับ และ Miner รับ มันทำให้การเกิด Fragment ใน Mempool เพราะถ้าจะให้ดี ทุก Mempool ควรเห็นข้อมูลเหมือนกันรวมทั้งตรงกับ miner ด้วย จะได้ตรวจสอบกันได้ กลายเป็นต่างคนก็ต่างตรวจในสิ่งที่ตัวเองอยากเห็น (ตราบใดที่ไม่ขัดต่อกฎที่สูงกว่า) มันก็ดูแปลกๆ
OP_RETURN ทำอะไร
เอาล่ะ ถึงเวลาที่เราต้องทำความเข้าใจอย่างจริงจังกับ OP_RETURN ที่เป็นตัวเจ้าปัญหาของ v30 นี้แล้ว
OP_RETURN ใช้เก็บข้อมูลอะไรก็ได้ แล้วแต่คนสร้าง transaction จะใส่ โดยข้อมูลส่วนนี้ จะเก็บใน Blockchain data แต่ไม่ถูกเก็บใน UTXO
หมายความว่า OP_RETURN เป็นข้อมูลแบบเก็บแบบแจ้งเพื่อทราบ มากกว่าจะเป็นข้อมูลเพื่อใช้เป็นการแจ้งเพื่อรอดำเนินการในอนาคตแบบ UTXO
พอเป็นแบบนั้นการขยาย OP_RETURN ก็ทำให้เปลืองพื้นที่ใน Blockchain จริงของแต่ละ block จริง แต่ว่าแต่ละ Block ยังคงต้องไม่เกิน 4 Mega Bytes ตามกฎเดิมอยู่ และข้อมูลนี้ไม่ปะปนกับ UTXO ด้วย เพราะเดิมระบบออกแบบมาให้แยกกัน (OP_RETURN ไม่ได้เก็บใน chainstate แค่เก็บใน blockchain data เท่านั้น) ดังนั้น ก็ไม่ได้ขัดอะไรกับกฎข้างบนที่ครอบอยู่
ผลกระทบจริง
ผมมองว่าเรื่องนี้ น่าสนใจ เพราะเรากลับมามองโลกจริงกันบ้าง จากที่พาไปเข้าใจโลกเบื้องหลังมาซะเยอะแล้ว
ปัจจุบัน Bitcoin data size ขนาด 788 GB ซึ่งต้องเข้าใจก่อน ว่า มาจาก ขนาด Block limit 1 Mega Bytes ตั้งแต่ day 1 ถึง 2017 ก่อนขยายมาเป็น 4 Mega Bytes ตั้งแต่ 2017 จนปัจจุบัน ตามที่อธิบายไปข้างบน ซึ่งตรงนี้ไม่มีอะไรเปลี่ยนใน v30 เลย และ การเปลี่ยนใน v30 ก็ไม่ได้กระทบตรงนี้โดยตรงด้วย
และ 788 GB นี้ (ข้อมูลอดีตจนถึงปัจจุบัน) ส่วนใหญ่ข้อมูลบรรจุไม่เต็ม Block หมายความว่า ช่วงเวลาส่วนใหญ่ของ Bitcoin network ที่รัยอยู่ มีข้อมูลในแต่ละ Block ไม่เต็ม 4 Mega Bytes อยู่เสมอ ทำให้ขนาดใช้รวมกัน มันก็ใช้มา 788 GB นั่นเอง
การเปิดให้ใช้ OP_RETURN ได้ใหญ่ขึ้นครั้งนี้ จะทำให้มีความคึกคักมากขึ้น จะทำให้ Data size ใหญ่ขึ้นเร็วขนาดไหน? จะเป็นการกีดกัน Consumer ที่มีเงินไม่เยอะในการรัน node เพื่อแสดงจุดยืนหรือไม่
ประเด็นนี้ มองได้สองมุม
- [เหมือนเดิม] ขนาด Block ยัง limit 4 Mega Bytes เท่าเดิม ดังนั้น ไม่มีการแหกกฎเดิม แม้ v30 ก็ตาม
- [มีคนเข้ามาใช้เยอะขึ้น] การใช้ Block ได้เต็ม(หรือเกือบเต็ม) 4 Mega Bytes อย่างต่อเนื่องจากการเปิดกว้างของ OP_RETURN จะทำให้ขนาด ขยายเร็วกว่า 788 GB ในช่วงเวลา 16 ปีที่ผ่านมา แต่ก็ต้องไม่เกิน 4 Mega Bytes ต่อ Block ย้ำอีกที
แล้วมันจะโตเร็วขนาดไหนล่ะ?
ผมลองคำนวณคร่าวๆ โดยอิงจากปัจจุบัน ที่น่าจะใช้งานประมาณ 20% โดยเฉลี่ย แต่ปรับการใช้งานเพิ่มขึ้นเป็น 80% โดยเฉลี่ยของ 4 Mega Bytes ทำให้พบว่า ปีนึงจะใช้พื้นที่เก็บประมาณ 170 GB นับจากนี้เป็นต้นไป
คร่าวๆ ก็คือ ปี 2030 (5 ปี ต่อจากนี้) พื้นที่เก็บ จะใช้ประมาณ 1.7 Tera Bytes นั่นเอง
หรือผมตีให้สุดโต่ง เลข กลมๆ คือเราจะต้อง Upgrade Harddisk size ขนาดใหญ่ขึ้น 2 Tera Bytes ทุกๆ 10 ปีนั่นเอง อย่าลืมว่าผมตีแบบปริมาณการใช้เฉลี่ยพุ่งขึ้น 4 เท่าจากปัจจุบัน คือ80% ของความจุ block เกือบตลอดเวลา
ซึ่ง 10 ปีในโลก Technology storage สำหรับ 2 Tera Bytes ผมว่าไม่เกินความเป็นจริง ขนาดที่ consumer เข้าถึงไม่ได้นะ
เพราะ 10 ปีที่ผ่านมานี้ เราพัฒนาได้เร็วกว่า 2 Tera Bytes อยู่มาก
แล้ว CPU / RAM ก็ต้อง Concern ด้วยสิ ไม่ใช่แค่ Storage
ในเรื่องนี้ ขอให้ย้อนกลับไปที่ OP_RETURN ไม่เข้าไปใน chainstate UTXO ดังนั้น ตรงนี้จะไม่เปลือง CPU / RAM เพิ่มขึ้นอย่างมีนัยยะสำคัญ เพราะมันตรวจข้อมูลเจอว่า OP_RETURN มันก็ไม่เอาไปคำนวณอะไรต่อเลย แต่ยังจัดเก็บอยู่นะ เก็บคนละส่วนกันตามที่อธิบายไปข้างบน
แล้ว Network จะเปลืองขึ้นแค่ไหน
ก็ Block size ยังไม่เกิน 4 Mega Bytes เท่าเดิมครับ
ถ้าเคยทำงานได้ ก็ทำงานได้เหมือนเดิมแหล่ะ
ผมคิดยังไง
ผมมองว่า By design เดิม ก่อน v30 ขนาด Block size เป็น 4 Mega Bytes มาตลอด (ตั้งแต่ segwit 2017) ตอนนี้ก็ยังไม่เปลี่ยน ดังนั้นเรื่องนี้ไม่ใช่เรื่องใหญ่เท่าตอน Blocksize war ครับ ดังนั้นไม่ใช่ hard fork และน่าเชื่อว่าจะ ไม่มี soft fork แต่อันนี้ ไม่การันตี เพราะความผิดพลาดใด ก็อาจจะเกิดขึ้นได้
และ fact อีกตัวที่ผมเห็นและตีความด้วยตัวผมเอง ก็คือ ขนาด blockchain data ที่โตต่ำมาตลอด 16 ปี คือ 788 Giga Bytes และมีขนาด transaction เล็ก ที่ไม่ค่อยเต็ม 4 Mega Bytes นั่นก็เป็นเพราะการใช้งานน้อยของตัว Bitcoin เอง ก็เท่านั้น
เมื่อพิจารณาเรื่อง resource usage สำหรับการรัน node ที่จะส่งผลต่อ Decentralized น้อยลงในอนาคตหรือเปล่า เพราะเราอาจจะไม่สามารถใช้ low end resource ในการ รัน node ได้ง่ายมาเหมือนอย่างเมื่อก่อน
ความจริงคือ การมาถึงของ v30 นี้ ถ้าไม่ได้ทำให้เกิด use case ใหม่ และไม่ได้ส่งเสริมให้เกิด transaction ขนาดใหญ่ขึ้น หรือ เยอะขึ้น > ทุกอย่างก็จะเป็นเหมือนเดิมเลย คือ โตต่ำ transaction มีขนาดเล็ก ก็ยังใช้ low end (หรือ very low end) resource เช่น Raspberry pi มารันได้ต่อไปนั่นแหล่ะ
มุมกลับกัน แม้ว่าไม่ขยาย OP_RETURN แต่มีการใช้งานมากขึ้น และ มี use case ใหม่ที่ไปใช้ท่ายาก อย่างตอนที่เกิดขึ้นของ Ordinals , Runes ก็จะทำให้เกิด transaction ขนาดใหญ่ขึ้น หรือ เยอะขึ้น > Low end resource ก็ทำงานหนักขึ้นอยู่ดี ตรงไปตรงมาเลยล่ะครับ
มุมมองสำหรับการรัน Node ของผม ผมตีว่า 10 ปี เราต้องมีขนาด Harddisk ใหญ่ขึ้น 2 TB เมื่อเทียบกับของเดิม ก็ไม่ใช่เรื่องที่น่าจะเป็นปัญหาใหญ่ครับ และการที่เราต้องใช้ resource มากขึ้น ก็ล้อไปกับการเติบโตของเทคโนโลยีบนโลกความจริงนี้อยู่แล้ว ลองคิดดูนะครับวันนี้ SSD 2 TB ราคา 4,000 บาท แต่เราต้องพยายามซื้อ Raspberry Pi 4 ในราคา 2,000 บาท เพราะถ้ามากกว่านี้จะบอกว่ามันแพง และต้องการประหยัดไฟ เพราะกินไฟเท่ากับหลอดไฟ 1 ดวง แต่เราลืมมองภาพใหญ่ไป ว่า เราสามารถซื้อ Mini PC Intel N100 ,Ram8GB ในราคา 4,000 บาท (เท่ากับราคา SSD 2 TB ที่ต้องซื้อนั่นแหล่ะ) ซึ่งกินไฟเท่ากับหลอดไฟ 2 หลอดในบ้านเรา คือแทบจะไม่ได้ต่างกันอย่างมีนัยยะสำคัญ สำหรับคนที่เก็บความมั่งคั่ง ใน Bitcoin ในระดับหลายหมื่นถึงแสนบาทเลย (หรือมากกว่านั้น?) แต่ประสิทธิภาพ ต่างกันอย่างมากมาย นับตั้งแต่การ sync block , index, validate, storage คือทุกอย่างต่างกันทั้งหมดอย่างมาก คือเรากลับหลงลืมมองเรื่อง Efficiency กันไป เน้นถูกเป็นตัวเงิน แต่ Efficiency ที่ได้กลับต่ำกว่า ซึ่งคิดระยะยาวนั่นคือแพงกว่านะครับ ผมมองแบบนี้ และราคารวม ของชุด รัน node พื้นฐาน ระหว่าง 6,000 บาท (raspberry pi 4) กับ mini pc 8,000 บาท คือเพิ่มขึ้น 33% แต่ประสิทธิภาพเพิ่มขึ้นน่าจะต้องเยอะกว่า 80% อย่างน้อย และการเติบโตในอนาคต ก็ไม่ได้จะเพิ่มขึ้นอย่างมีนัยยะสำคัญ อย่างที่เรารู้กันว่าอุตสาหกรรมเทคโนโลยี เป็นอุตสาหกรรมที่มีเงินเฟ้อต่ำที่สุดแล้ว (ขายราคาเท่าเดิม หรือ แพงขึ้นนิดหน่อยจากเมื่อก่อน แต่ประสิทธิภาพดีขึ้นอย่างเห็นได้ชัด)
ดังนั้น low end resource จะรันได้หรือไม่ ไม่ได้เกี่ยวกับเรื่อง OP_RETURN โดยตรง แต่เกี่ยวกับ จำนวน และ ความหนาแน่นของการใช้งาน Network เป็นเรื่องสำคัญ คนบางส่วนก็ตีความว่า เพราะผลักดัน OP_RETURN จริงจังไง เลยทำให้มันโตเร็ว (ตรงนี้ขอให้ย้อนไปอ่านว่า อะไรที่โตเร็ว และ มีหรือไม่มีผลอย่างไร เพื่อความเข้าใจ) และจะมี use case แปลกๆมารันได้มากขึ้น แต่คนอีกส่วนก็ตีความว่า ไม่ขยาย ก็ทำกันอยู่แล้วไง ก็ทำให้มันถูกต้องไปเลย เพื่อความ transparency ไปเลยสิ จะได้ไม่ต้องมาหลบซ่อนเล่นท่ายากกันอยู่ ทั้ง node , miner ก็จะได้เห็นข้อมูลทุกๆอย่างเหมือนๆกันด้วยเลยตั้งแต่ mempool ไปเลย
ถ้าถามว่า Bitcoin จะตายเพราะ v30 มั้ย ผมไม่รู้หรอกครับ และไม่มีใครรู้หรอกครับ ตลาดเสรี + เวลา จะเป็นคนตัดสินเรื่องนี้เอง แต่ส่วนตัวมองว่า v30 ไม่มีอะไรคอขาดบาดตายนะ คือมองได้หลายมุมเลยครับ ถ้าไม่พยายามเพิ่ม use case ใหม่ๆ Bitcoin ที่เหงาๆอยู่ตอนนี้ จะตายไปเองมั้ย เพราะที่ผ่านมา โอนได้ด้วยค่าธรรมเนียมต่ำกว่า 0 sat/vbytes กันได้แล้วนะ คนขุดนี่แห้งเลย แต่กลับกัน ถ้าเอาอะไรก็ไม่รู้ รก เลอะเทอะมาใส่เข้ามาเต็มไปหมด ขยะเพียบ มันจะเน่าตายในอนาคตมั้ยล่ะ ขยะทั้งนั้น แต่ระหว่างทางก็สร้างเม็ดเงินหมุนเวียนได้อยู่นะ แต่อย่างที่บอก มันไม่ตรงไปตรงมาขนาดที่ผมพูดประชดประชันแบบนี้หรอกครับ และมันเป็นเรื่องอนาคตทั้งนั้นเลย ย้ำอีกที ผมเป็น Observer ไม่ใช่ Predictor ดังนั้นไม่ทำนายดีกว่า
ผมคิดว่า เรื่องความเข้าใจ เป็นเรื่องสำคัญมากๆ ย้ำอีกที ว่าสำคัญมากๆ เพราะก่อนนี้ ผมได้ยิน และ อ่านจากคนที่มีธงแบบต่างๆมา ทำให้จิตตกไปอยู่เหมือนกัน แต่ว่าเมื่อมองจากมุมที่เป็นกลาง และ มองโลกตามความเป็นจริง รวมทั้งลงไปคุ้ยข้อมูลอย่างจริงจัง กับการเปิดกว้างทางอิสระในการเลือกและความคิด ผมก็ลบอคติ และ ธง ของคนอื่นออกไปได้ และ ได้มุมมอง รวมทั้งเข้าใจในภาพรวมมากขึ้นด้วย
และนี่แหล่ะครับ Bitcoin พูดเสมอ Don’t trust , verify รวมทั้งบทความที่ได้อ่านทั้งหมดนี้ อย่าเชื่อ แต่ขอให้ไปพิสูจน์ด้วยตัวคุณเองก่อน เพราะมีแต่คุณเท่านั้น ที่จะสามารตัดสินใจโดยปราศจากอคติใดๆได้ ด้วยข้อมูลที่มีมากพอ