บทความนี้ ได้ทำการแปลข้อมูลบางส่วนจากโค้ดรีวิวของคุณ Andre ซึ่งคุณ Andre ได้ทำการวิเคราะห์ไว้ค่อนข้างละเอียด ที่นี่
พร้อมกับ bitcoin addict เองได้ไปสัมภาษณ์ CEO ของ Quarkchain มาด้าน technical เพื่อเติมเต็มคำถามที่คุณ Andre ได้ฝากไว้ในบทความ
เรามาดูกันว่า รีวิวจากฝั่งโค้ดจะเป็นยังไงกันบ้าง
QuarkChain คือ the high capacity, peer-to-peer, transactional system ฟังดูดีสำหรับ blockchain แต่พวกเราอย่าถือสาสิ่งที่พวกเขาสัญญาว่าจะทำ 1 ล้าน TPS (Transaction ต่อวินาที) …. ดังนั้น ถ้าเคยอ่านงานรีวิวของคุณ Andre ก่อนนี้มาแล้ว คุณ Andre จะค่อนข้าง anti กับ project ใดๆที่โม้ว่าสามารถทำ tps ได้เป็นล้าน
คุณ Andre ได้ให้มุมมองของความเร็วไว้ว่า “ผมอยากให้คุณถอยหลังมาก้าวหนึ่งแล้วมอง ecosystem ที่พวกเรามีอยู่ตอนนี้ Blockchain ที่มีความสามารถสูงสุดในตอนนี้ มีความสามารถในการทำธุรกรรมอยู่ที่ประมาณ 2,000 TPS ดังนั้นด้วยความกรุณา พวกเราน่าจะตั้งเป้าหมายกันที่ 10,000 TPS ก่อน แล้วเราค่อยมองที่ 50,000 TPS (อารมณ์ software architect นี้แอดเข้าใจเลย ค่อนเป็นค่อนไปดีสุด)”
“พวกเรายังมีเป้าหมายมากมายก่อนที่จะถึงเป้าหนึ่งล้าน TPS คุณรู้มั้ย อะไรคือสิ่งที่ผมอยากจะเห็น ผมอยากจะเห็นความเร็วของ Blockchain ในการทำธุรกรรมอยู่ที่ 13,431 TPS ผมอยากจะเข้าไปที่เว็บนั้นแล้วเห็นว่า “we can achieve 13,431 TPS” ผมจะเชื่อคุณ ถ้าคุณบอกผมว่า คุณจะทำ 1 ล้าน TPS ผมจะคิดว่าคุณคือ scam โดยทันที”
ออกนอกทะเลไปไกลแล้ว เรามาดูทางเทคนิคกันบ้างดีกว่า
QuarkChain ใช้วิธี Sharding ในการแก้ปัญหาเรื่อง scaling ซึ่งสามารถเข้าไปอ่านข้อมูลภาคภาษาไทยตรงนี้ได้ที่ บทความนี้ ซึ่งทาง Bitcoin addict ได้อธิบายส่วนนี้ไว้แล้ว
แล้วเรามาเริ่มดูที่โค้ดกัน
เปิดมาด้วย Research คือส่วนแรกสุดที่ทาง Quarkchain ได้สร้างขึ้นมา
ถือว่าเป็นการเริ่มต้นที่ดี ในการทำ Software ที่มีความยุ่งยากในระดับนี้ ศึกษาข้อมูลจึงเป็นเรื่องสำคัญ

เรามาเริ่มที่โปรเจ็ค pyquarkchain กัน คุณ Andre ได้ให้ความเห็นไว้ว่า ทางทีมงานน่าจะได้ไป Copy code ของ ฝั่ง Pyethereum มาหรือเปล่า โดยปกติแล้วก็ไม่ควรมองโลกในแง่ร้ายอย่างนั้น แต่จำนวนโปรเจ็คที่คุณ Andre ได้ทำการีวิว การ Copy ดูเหมือนจะเป็นบรรทัดฐาน แต่หลังจากดูแล้ว นี่มันเขียนใหม่เกือบทั้งหมดเลยทีเดียว

สิ่งที่เซอร์ไพส์คุณ Andre นั้นคือ เค้าพยายามจะขุดหาไฟล์จำนวนหนึ่ง ซึ่งมั่นใจว่า ไฟล์เหล่านั้นก็อปปี้มาจาก โปรเจ็ค pyethereum แต่ไฟล์เหล่านั้นถูกเขียนขึ้นมาเองทั้งหมด มีไฟล์บางส่วนที่ import มาจาก Ethereum สำหรับ EVM และ P2P แต่ไฟล์เหล่านี้แค่ import มาตรงๆ
ทาง Bitcoin addict ก็ได้มีความสงสัยเช่นเดียวกัน จึงเข้าไปแกะ code ลึกเข้าไปอีกขั้น และเห็นว่า ทาง Quarkchain เขียนขึ้นมาใหม่จริงๆ จะมีเพียงฝั่ง EVM ที่ใช้ของ Pyethereum ดังนั้นตรงนี้ถือว่าเป็นข้อดีมากๆ เพราะอย่างที่คุณ Andre ได้กล่าวไป Project ส่วนมากเดี๋ยวนี้ มันก็แค่ Copy Ethereum มาทั้งนั้น ดังนั้นสิ่งที่คุณ Andre review มาทั้งหมด ถูกต้องอย่างไม่ต้องสงสัย
ตัวเลขสติถิบน repo คือ 268 commits, 4 branches, 4 contributors (ถ้าใครงง แนะนำให้ไปศึกษาระบบ version control ที่ชื่อว่า Git) คุณ Andre ชอบอัตราส่วนของ contributor, การบริหารการจัดการ branches, commit เล็กๆที่ประกอบด้วยสาระมากมาย ดูดีทีเดียวสำหรับการเริ่มต้น
ทาง Bitcoin addict ก็เข้าไปดูมาและเห็นด้วยกับคุณ Andre ทุกข้อในส่วนนี้

โดยจะเห็นได้ว่า ถ้าเทียบรูปของคุณ Andre และของ ทาง Bitcoin addict นั้น มีความแตกต่างกัน นั่นคือตัว Project หลังจากที่คุณ Andre ได้ review code ไป มีการเพิ่มเติมของ feature มาพอสมควร ตรงนี้ทาง Bitcoin Addict จึงมาเน้นย้ำว่า Project มีการทำงานเกิดขึ้นจริงๆ
นอกจากนี้ จากมี การเขียน readme หรือเรียกง่ายๆว่า คู่มือการเริ่มต้น ของตัว project ซึ่งสำคัญมากทีเดียวต่อ community ซึ่งนี้ก็ถือเป็นอีกข้อดีที่ทาง Bitcoin Addict เห็น
โดย Readme อันนี้ได้กล่าวโดยสรุปได้ว่า ถ้า setup อย่างถูกต้อง การรัน Node ด้วย i7-7700k สามารถทำ transaction speed ได้มากกว่า 3,000 tps เลยทีเดียว
Pull request และ issue management ถูกนำมาใช้ ตรงนี้ถือเป็น best practice ของการใช้ git version control software และนี่ถือเป็นข้อสำคัญว่า programmer ที่ทำงานกันใน quarkchain มีประสบการณ์ของด้าน Software development พอสมควร

เปรียญเทียบโค้ดจากทั้งสองโปรเจ็ค (pyquarkchain & pyethereum) เห็นได้ว่า Quarchain เขียน code ไปจำนวนประมาณครึ่งนึงของ pyethereum แล้ว ราวๆ 11,000 บรรทัด เทียบกับของฝั่ง Ethereum 25,000 บรรทัด

คุณ Andre ได้กล่าวว่า file ของ Quarkchain นั้นมีคอมเม้นในโค้ดที่ดี ทาง Bitcoin addict เห็นด้วย หลังจากที่ไปดูเพิ่มเติมมา
มาดูในส่วนของฟังก์ชั่นกันบ้าง

จากการ review code ของคุณ Andre ขณะนี้ Testnet กำลังทำงานบน 8 shards (ถูกตั้งค่าไว้) Chains กำลังขุดในรูปแบบ Proof-of-Work ทุกๆ shard ทำงานด้วยความเร็ว 100-200 TPS โดยร่วม TPS ของทั้งระบบอยู่ที่ประมาณ 1,100 TPS
bitcoin addict ก็ได้ไปทดลอง testnet ของ Quarkchain มาเช่นกัน ซึ่ง run บน node 4 node เพื่อดูความเป็นไปได้ของ transaction speed
ตอนแรก ทาง CEO ของ Quarkchain ใช้ node ที่รันอยู่บน Amazon ซึ่งทาง Bitcoin addict ไม่เชื่อ จึงขอให้เปิด node บนเครื่องของตัวเอง แน่นอนทาง CEO ไม่มีปัญหาใดๆ
เราจึงได้ชม node ที่รันอยู่บนเครื่องของ CEO และไม่น่าจะมีใครเคยเห็นส่วนนี้มาก่อน จะเห็นได้ว่า transaction speed จะได้อยู่ราวๆ 77,851 ต่อ 60 วินาที หรือราวๆ 1,200 tps ซึ่งดูน้อยกว่าความเป็นจริง เพราะ แบต notebook ของ CEO กำลังจะหมด ทำให้ความเร็วของ node นั้นตกลง
ทาง Bitcoin addict ไม่ได้ดูเรื่องส่วนของหน้าตา ดังนั้น ไปชมของคุณ Andre กันก่อนในส่วนถัดไป
ส่วนหน้าบ้านทาง Quarkchain ได้เลือกใช้ Bootstrap ซึ่งเป็น library ที่ใช้กันเกือบทั้งโลก และทำให้หน้าตาเหมือนๆกันหมด คุณ Andre เลยกล่าวไว้ว่า “เราต้องหา designer ให้ทีมนี้ ในส่วน Wallet ค่อนข้างตรงไปตรงมา ผมไม่ค่อยชอบตรงที่ไม่ได้นำ HTTPS มาใช้, certificate ใช้เวลาแค่ 10 นาทีเท่านี้เอง”


Wallet ใช้ ethereumjs-util
นอกจากนี้คุณ Andre ยังพูดถึง concept ของ sharding และ sidechains ดังต่อไปนี้
คอนเซ็ปของ sidechains ของ QuarkChain คือการสร้าง parallel sharding มันไม่เหมือนตัวอย่าง sidechain แต่มันเหมือน parallel Ethereums ที่ทำงานข้างๆกัน ถ้า Ethereum A เริ่มช้า คุณสามารถย้ายเงินของคุณไปที่ Ethereum B สำหรับเหตุผลนี้ ผมเลยไม่อยากเรียกว่า sharding ตั้งแต่ต้น แต่ละ shard ไม่ใช่ชิ้นส่วนของ shard ใหญ่ แต่ ก๊อปปี้ shard ทั้งหมดมาทำงานบนควบคู่กันไปแต่ไม่เกี่ยวข้องกัน
ปัญหาคือ ถ้า eth ของคุณทั้งหมดอยู่ที่ Ethereum A และคุณต้องการจะลง ico บน Ethereum C แต่ Ethereum A ช้ามากและคุณต้องจ่าย fee ค่อนข้างสูงเพื่อโอน eth จาก A ไป C และนอกเหนือจากนั้นคุณต้องรอ root chain อนุญาตธุรกรรมของคุณก่อน
ผมไม่แน่ใจว่าทางทีมงานจะแก้ปัญหานี้ยังไง และ micromanagement ที่ผู้ใช้ต้องทำระหว่าง shards จะสร้างความลำบากให้ผู้ใช้งาน ผมคิดว่าปัญหาสองข้อนี้ต้องได้รับการแก้ไข
เรามาดูด้านตัวเลขกันบ้าง ตัวเลข TPS จริงๆตอนนี้คือต่ำ พิจารณาจากคอขวดที่สามารถเกิดขึ้นได้บนหนึ่ง parallel chain และพวกเราต้องพิจารณาเรื่อง overhead ของ root chain ด้วย
มาดูทางด้านเทคนิคของ TPS กันก่อน
ขณะนี้ shard ทำงานด้วยความเร็ว 150 TPS ดังนั้น 1m TPS ต้องการประมาณ 6667 shards (1m/150) sharding ซัพพอร์ตได้ถึง 2ล้าน shards ตามเทคนิค คุณจะย้ายเงินของคุณไปมาระหว่าง 6667 shards นี้มั้ย มาลองคำนวณดูใหม่ที่ 10 shards ซึ่งมี TPS ประมาณ 1500
ตรงนี้คุณ Andre ได้คำนวนเรื่องความเร็วคร่าวๆของ shards ทาง Bitcoin addict จึงขอให้ทาง Quarkchain สาธิตให้ดูเพิ่มเติม
ซึ่งได้ความเร็วต่ำกว่าที่ทางคุณ Andre กล่าวไว้พอสมควร แต่ทั้งนี้ทั้งนั้น ความเร็วมีปัจจัยหลายอย่างที่ต้องคำนึงถึง แต่ยังถือว่าตัวเลขที่ยกตัวอย่างมานั้นไม่เว่อร์จนเกินไป
มาต่อที่ CPU ผมสามารถทำความเร็วประมาณ 5,000 TPS ด้วย CPU ที่มี core เดียว ดังนั้นเรามาคำนวณตามความจริงโดยหัก factors อื่น ความเร็วจะเหลือประมาณ 1,000 TPS ถ้าเราเลือก CPU แรงๆใน AWS อย่าง m5.24xlarge ที่มี 72 core ดังนั้นความเร็วในการทำธุรกรรมจะอยู่ที่ 72,000 TPS
มาดูตามความเป็นจริง เรามี shards อยู่ที่ 10 shards ดังนั้นความเร็วก็จะอยู่ที่ 10,000 TPS ซึ่งมีโอกาสเป็นไปได้สูงมาก
แม้กระทั่ง 20 shards ซึ่งยังเป็นตัวเลขที่สมเหตุสมผล เราสามารถมองที่ความเร็ว 20,000 TPS แต่ผมยังแย้งกับความเร็ว 1ล้าน TPS แต่โปรเจ็คนี้สามารถทำ TPS ได้(ประมาณ)ที่ 10,000 – 50,000 TPSมาถึงตรงนี้ เรายังไม่พูดถึง clustering กันเลย แต่ผมจะไม่กล่าวถึงในบทความนี้
นอกจากนี้ทาง Bitcoin Addict ได้สอบถามเพิ่มเติมเกี่ยวกับ ภาษาที่ใช้ว่าทำไมถึงเลือกใช้ภาษาคอมพิวเตอร์ที่เรียกว่า Python ซึ่งมีความช้า และได้รับคำตอบกลับมาว่า
“ทางเราเลือกใช้ Python เพราะความเร็วในการสร้าง Prototype และหลังจากที่หลายๆอย่างเข้าที่เข้าทางแล้ว เราจะเขียนใหม่ทั้งหมดด้วย C++ ซึ่งความเร็วนั้นจะเพิ่มขึ้นอีกมากเลยทีเดียว และยังเป็นภาษาที่เราถนัด เพราะถือว่าเป็นภาษา first class ของ google”
สรุป
หลังจากทาง Bitcoin addict ได้ทำการ review code ของ Quarkchain แล้ว ถือว่าเป็น Project ที่น่าจับตามองจริงๆ ถึงแม้ว่า 1 ล้าน tps นั้นยังไม่ใกล้เคียง แต่มีความเป็นไปได้ และนี่ไม่ใช่แค่ whitepaper project ดังนั้นรอดูกันต่อไปว่า Quarkchain testnet ที่ออกมาสู่ public จะทำได้ดีขนาดไหน
ข้อมูลเสริม : cryptobriefing.com
[…] bitcoin addict ได้นำเสนอไป ที่นี่ และ code review ที่นี่ กลับมาอีกครั้งกับ public testnet […]
อ่านจบ.. มึนน..