[โค้ดรีวิว] QuarkChain – มองข้าม hype และ 1M TPS พวกเขาจะสามารถทำให้ได้ถึง 50k TPS ได้หรือไม่ ?

2
1265

บทความนี้ ได้ทำการแปลข้อมูลบางส่วนจากโค้ดรีวิวของคุณ 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 ได้สร้างขึ้นมา

Screen Shot 2018-04-22 at 11.32.53 PM.png

ถือว่าเป็นการเริ่มต้นที่ดี ในการทำ Software ที่มีความยุ่งยากในระดับนี้ ศึกษาข้อมูลจึงเป็นเรื่องสำคัญ

1_BVFGrh37eL6EmhX_W3u9-w.png
รูปจากทางคุณ Andre https://cryptobriefing.com/quarkchain-code-review-deep-dive/

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

1_yAeL7VR9QI2THkK82bWFwQ.png
รูปจากทางคุณ Andre https://cryptobriefing.com/quarkchain-code-review-deep-dive/

สิ่งที่เซอร์ไพส์คุณ 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 ทุกข้อในส่วนนี้

1_8VNdX51cSY3E5hbcpNwo4g
รูปจากทางคุณ Andre https://cryptobriefing.com/quarkchain-code-review-deep-dive/

Screen Shot 2018-04-22 at 11.24.51 PM.png

โดยจะเห็นได้ว่า ถ้าเทียบรูปของคุณ Andre และของ ทาง Bitcoin addict นั้น มีความแตกต่างกัน นั่นคือตัว Project หลังจากที่คุณ Andre ได้ review code ไป มีการเพิ่มเติมของ feature มาพอสมควร ตรงนี้ทาง Bitcoin Addict จึงมาเน้นย้ำว่า Project มีการทำงานเกิดขึ้นจริงๆ

Screen-Shot-2018-04-22-at-11.26.50-PM.png

นอกจากนี้ จากมี การเขียน 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 พอสมควร

1_NKXD8j373CAb34k6xda2ig.png
รูปจากทางคุณ Andre https://cryptobriefing.com/quarkchain-code-review-deep-dive/

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

1_ZenhCMHyveGRHkTfq0IwSA.png
รูปจากทางคุณ Andre https://cryptobriefing.com/quarkchain-code-review-deep-dive/

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

มาดูในส่วนของฟังก์ชั่นกันบ้าง

1_055UzSmSZzJW2ZhnyYVs_A.png
รูปจากทางคุณ Andre https://cryptobriefing.com/quarkchain-code-review-deep-dive/

จากการ 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

Screen Shot 2018-04-22 at 11.34.01 PM.png

ตอนแรก ทาง CEO ของ Quarkchain ใช้ node ที่รันอยู่บน Amazon ซึ่งทาง Bitcoin addict ไม่เชื่อ จึงขอให้เปิด node บนเครื่องของตัวเอง แน่นอนทาง CEO ไม่มีปัญหาใดๆ

Screen Shot 2018-04-22 at 11.40.42 PM.png

เราจึงได้ชม 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 นาทีเท่านี้เอง”

1_6wWLGeaEkQzQOtZwP0PMsQ.png
รูปจากทางคุณ Andre https://cryptobriefing.com/quarkchain-code-review-deep-dive/
1_1qxJhTn4Fxzig9KPj2SYwQ.png
รูปจากทางคุณ Andre https://cryptobriefing.com/quarkchain-code-review-deep-dive/

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 สาธิตให้ดูเพิ่มเติม

Screen Shot 2018-04-22 at 11.36.01 PM.png

ซึ่งได้ความเร็วต่ำกว่าที่ทางคุณ 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

2 ความคิดเห็น

ใส่ความเห็น

This site uses Akismet to reduce spam. Learn how your comment data is processed.