Mining¶
Introduction¶
คำว่า การขุด เกิดจากการเปรียบเทียบระหว่างทองคำกับสกุลเงินดิจิตอล ทองคำและสกุลเงินดิจิตอลนั้นมีความหายากและมีมูลค่าเหมือนกัน สิ่งที่ทำให้มูลค่าของทองคำนั้นมีมูลค่าขึ้นมาก็คือความหายาก ต้องหาจากการขุดเท่านั้น ซึ่ง Ethereum ก็มีแนวคิดแบบนั้นเช่นกัน แต่ Ethereum มีแนวคิดเพิ่มขึ้นมาคือ เพื่อเพิ่มความปลอดภัยในเครือข่าย โดยการสร้าง Block ตรวจสอบ Block การกระจาย Block และการประกาศ Block ใน Blockchain
ดังนั้น Mining ใน Ethereum = ความปลอดภัยในเครือข่าย = ตรวจสอบการคำนวณ
Mining คืออะไร¶
Ethereum มีความปลอดภัยโดยใช้รูปแบบ incentive-driven model และมีระบบ Consensus ขึ้นอยู่กับบล็อคที่มี total difficulty สูงสุด ในบรรดาทุก Block จะมีความถูกต้องถ้าถูกเข้าสู่ Proof of Work (PoW) ซึ่งเกี่ยวข้องกับค่า difficulty
Proof of Work มีการใช้อัลกอริทึมที่เรียกว่า Ethash และการค้นหาค่า nonce ส่งไปให้อัลกอริทึมเพื่อหาผลลัพธ์ที่อยู่ภายใต้ difficulty ซึ่งประเด็นของอัลกอริทึม Proof of Work คือการหาค่า nonce ไม่สามารถคำนวณค่าออกมาได้ ต้องสุ่มหาค่าไปเรื่อยๆจนกว่าจะเจอค่าที่ถูกต้อง ทั้งนี้ทำให้ประสิทธิภาพของเครื่องมีผลต่อการทำงาน ของอัลกอริทึม Proof of Work
ด้วย Protocal ของ Proof of Work จะมีค่าเฉลี่ยการเกิด Block ใหม่ ทุกๆ 10-15 วินาที หรือพูดได้อีกอย่างคือในเครือข่าย Blockchain จะมีการเกิด Block ทุกๆ 10-15 วินาที ทั้งนี้เพื่อให้มี synchronisation กับ state ยืนยันว่าไม่มีการเกิด fork(หรือ double spend) และป้องกันการถูกแก้ไขข้อมูลจากผู้ประสงค์ร้าย เว้นแต่ว่าผู้ประสงค์ร้ายมีอำนาจการ mining มากกว่าครึ่งของเครือข่าย(หรือ 51% attack)
ทั้งนี้ ทุกๆ Node ที่เข้าร่วมในเครือข่ายด้วยกันสามารถเป็น Miner ได้และผลตอบแทนคือ Ether ซึ่งโอกาสก็จะขึ้นอยู่ประสิทธิภาพการขุด หรือ hashrate
Ethash PoW คือ memory-hard จะกีดกันการใช้อุปกรณ์พิเศษ เช่น ASIC เป็นต้น Memory hardness ยังต้องการปรับปรุง resource โดยจะขึ้นอยู่กับ nonce และ block header ซึ่ง resource เรียกว่า Directed Acyclic Graph(DAG)
Directed Acyclic Graph(DAG)¶
Directed Acyclic Graph(DAG) คือส่วนหนึ่งของการคำนวณ Proof of Work ของ Ethash ซึ่งในทางคณิตศาสตร์ DAG คือ direct graph ที่ไม่มี direct cycle โดยมันจะประกอบด้วยจุดและเส้นโดยแต่ละเส้นจะมีที่มาจากจุดก่อนหน้า ซึ่งมันจะไม่มีทางที่เส้นนั้นจะวนกลับไปสู่จุดเดิม สำหรับ Ethash นั้น DAG จะถูกเก็บในรูปของอาเรย์ uint32s ที่มีมิติ n × 16 โดย n เป็นตัวเลขโดยเริ่มจาก 16777186 และจะเพิ่มขึ้นเรื่อยๆในแต่ละ row โดย DAG จะถูกเก็บอยู่ในรูปของไฟล์ ที่เข้ารหัสโดย little-endian
เนื่องจากไฟล์ DAG นั้นจะเป็นไฟล์ที่ miner ทุกคนจะต้อง Process ซึ่งไฟล์นี้จะถูกประมวลผลโดย GPU Memory ซึ่งในตอนเริ่มต้นไฟล์ DAG มีขนาดเพียง 1 GB เท่านั้นแต่มันจะเพิ่มขึ้นเรื่อยๆโดยทุกๆ 30,000 Block หรือประมาณ 100 ชั่วโมง ไฟล์ DAG จะมีขนาดที่ใหญ่ขึ้นโดยมันจะเพิ่มขึ้นประมาณ 0.73 เท่าต่อปี