ส่งต่อชื่อเรื่องต้นฉบับ '白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?'
หนึ่งในแนวคิดที่คุ้นเคยที่สุดที่เกี่ยวข้องกับบล็อกเชนสําหรับทุกคนน่าจะเป็นการขุด หลายคนอาจเคยได้ยินเกี่ยวกับการขุดหลายครั้ง แต่ไม่แน่ใจว่ามันเกี่ยวข้องกับอะไร ในส่วนนี้เราจะขัดจังหวะการเขียนโปรแกรมปกติของเราเพื่อแนะนํา "การขุด" ก่อน
สรุปเนื้อหาอย่างรวดเร็วจาก "Plain Blockchain 1: Introduction to Bitcoin (ผู้บุกเบิกการปฏิวัติบล็อกเชนและผู้ท้าชิงสกุลเงินอธิปไตย)" ซึ่ง Satoshi Nakamoto ออกแบบระบบการเงิน Bitcoin เพื่อเชื่อมโยงรางวัลสําหรับการทําบัญชีกับการออกสกุลเงิน วิธีการนี้ช่วยให้การออกสกุลเงินเป็นไปโดยอัตโนมัติผ่านกระบวนการทําบัญชีแก้ปัญหาการออกสกุลเงินในขณะเดียวกันก็สนับสนุนให้ผู้ทําบัญชีมีส่วนร่วมอย่างแข็งขัน
ในโลกจริง กระบวนการขุดเหมืองเป็นกระบวนการที่เหมืองแร่ใช้เครื่องมือต่าง ๆ เพื่อขุดแร่มีคุณค่าซึ่งซ่อนอยู่ในหินจากเหมือง คนขุดแร่สามารถแยกความคุ้มค่าจากแร่โดยใช้แรงงานกายภาพ
สำหรับโครงการบล็อกเชนที่มีรางวัลสำหรับงานบัญชี (โดยทั่วไปคือโครงการเงินดิจิทัล) โหนดเครือข่ายจะใช้ทรัพยากรคอมพิวเตอร์เพื่อแก้ปัญหา หากพบทางออก จะบรรจุบล็อกและได้รับรางวัลในรูปแบบเงินที่เพิ่มขึ้น กระบวนการนี้คล้ายกับการทำแร่เหมืองโลหะมีค่าเช่นทองคำจากตัวอย่างเหมืองแร่เดียว จึงมักเรียกว่า "การขุด" ที่นี่ผู้ทำบัญชีคือผู้ขุดเหมือง ที่แข่งขันในการบรรจุบล็อกโดยใช้ฮาร์ดแวร์และไฟฟ้า ซึ่งทำให้เกิดการสร้างเงินใหม่
การขุดเหมืองมีจุดประสงค์หลัก 2 ประการ: การตรวจสอบธุรกรรมที่เกิดขึ้นเร็วๆ นี้โดยการจัดหีบหน้าไว้ในบล็อกและเชื่อมโยงกับบล็อกเชน และการออกเสียงเงินใหม่โดยการให้รางวัลแก่ผู้บัญชีหนังสือรายวัน ด้านล่างเป็นฟังก์ชันละเอียดของการขุดเหมือง:
การขุดเหมืองเป็นกระบวนการที่ผู้ขุดเหมืองได้รับแรงบันดาลใจในการเข้าร่วมขุดเหมืองเนื่องจากพวกเขาได้รับรางวัลที่มีค่าสูงสำหรับการบรรจุบล็อกลงบนบล็อกเชน รางวัลเหล่านี้มาจากแหล่งที่มีความสำคัญสองแห่ง:
เมื่อเวลาผ่านไป รางวัลบล็อคจะลดลง (ตัวอย่างเช่นเนื่องจากกลไกของบิตคอยน์ที่จะลดลงในระยะเวลาประมาณสี่ปี) ในที่สุดเมื่อขุดบิตคอยน์ 21 ล้านเหรียญทั้งหมดแล้วที่คาดว่าจะเกิดขึ้นปี 2141 รางวัลบล็อคอัตโนมัติจะหยุดอย่างเป็นทางการ และค่าธรรมเนียมการทำธุรกรรมจะเป็นแหล่งรายได้หลักสำหรับผู้ขุด
บิตคอยน์สร้างบล็อกใหม่โดยราว ๆ ทุก 10 นาที โดยเริ่มต้นแต่ละบล็อกที่สร้างขึ้นจะได้รับ 50 บิตคอยน์ รางวัลนี้จะลดลงครึ่งหนึ่งทุก 4 ปี และจนถึงปัจจุบันได้มีการลดลงครึ่งทั้งหมด 4 ครั้ง ในปัจจุบันแต่ละบล็อกสร้างขึ้นจะได้รับ 3.125 บิตคอยน์ โดยการลดลงครึ่งล่าสุดเกิดขึ้นในเดือนเมษายน 2024 การลดลงครึ่งถัดไปคาดว่าจะเกิดขึ้นรอบปี 2028 โดยประมาณในปี 2141 บิตคอยน์จะถึงขีดจำกัดในการเผยแพร่
ค่าธรรมเนียมการทำธุรกรรมได้รับผลกระทบไม่เพียงแค่จากการข้อเสนอและความต้องการเท่านั้น แต่ยังขึ้นอยู่กับขนาดของธุรกรรมด้วย เนื่องจากค่าธรรมเนียมเป็นสัมพันธ์กับพื้นที่ที่ธุรกรรมครอบครองในบล็อก
สำหรับคนขุดแร่ เข้าร่วมกระบวนการขุดเหมืองง่ายดาย ดาวน์โหลดไคลเอ็นต์กระเป๋าสตางค์สกุลเงินดิจิทัล และภายในไคลเอ็นต์ คลิกปุ่มขุดเหมืองเพื่อเริ่มต้นการขุดเหมือง
สำหรับโครงการบล็อกเชนที่มีรางวัลบล็อก อัลกอริทึมการขุดเหมืองจะถูกเขียนลงในสคริปต์ที่ผสมเข้ากับกระเป๋าเงินอัตโนมัติ นักขุดเพียงแค่คลิกปุ่มเพื่อเริ่มการทำงานของสคริปต์
อัลกอริธึมการขุดเป็นตัวกําหนดซึ่งหมายความว่าตราบใดที่นักขุดเรียกใช้อัลกอริทึมอย่างต่อเนื่องในที่สุดพวกเขาจะได้รับผลลัพธ์ อย่างไรก็ตามเนื่องจากทรัพยากรการคํานวณที่แตกต่างกันเวลาที่ใช้ในการคํานวณผลลัพธ์นี้อาจแตกต่างกันในหมู่นักขุด เมื่อโหนดคํานวณค่าเป้าหมายความพยายามของนักขุดคนอื่น ๆ ในช่วงเวลานั้นจะไร้ประโยชน์ส่งผลให้ผลตอบแทนติดลบเนื่องจากทรัพยากรทางกายภาพที่ใช้ไป
เพื่อหลีกเลี่ยงความพยายามที่สูญเปล่านักขุดมักจะรวมทรัพยากรการคํานวณของพวกเขาโดยเข้าร่วมโหนดพูลการขุด โหนดนี้ทํางานเหมือนโหนดอื่น ๆ แต่มีพลังในการคํานวณมากกว่าอย่างมีนัยสําคัญ เมื่อพูลขุดบล็อกสําเร็จรางวัลจะถูกแจกจ่ายให้กับนักขุดที่เข้าร่วมตามทรัพยากรการคํานวณที่มีส่วนร่วม สิ่งสําคัญคือต้องทราบว่าบนบล็อกเชนนักขุดที่บันทึกเป็นบรรจุภัณฑ์บล็อกคือโหนดพูลการขุดในขณะที่นักขุดแต่ละคนจะได้รับส่วนแบ่งของรางวัลที่จัดสรรโดยพูลไม่ใช่โดยตรงจากระบบสกุลเงิน
บิทเมน บริษัทผู้ผลิตชิปขุดเหมืองที่มีประสิทธิภาพสูงที่พิสูจน์บทบาทของพูลขุดเหมือง ที่มีส่วนร่วมในการกระจายอำนาจในการทำบัญชี
โครงการบล็อกเชนที่แตกต่างกันอาจมีปริศนาในการขุดและระดับความยากต่าง ๆ ด้วย ตัวอย่างเช่น ที่นี่เราจะเลือกบิตคอยน์เป็นตัวอย่าง วิธีการขุดที่ใช้โดยบิตคอยน์คือ Proof of Work (PoW) สารที่สำคัญของอัลกอริทึมนี้คือ การที่จะได้ผลลัพธ์ต้องใช้งานไปมากกว่าที่จะพิสูจน์
ปริศนาการขุดไม่ใช่ปัญหาทางคณิตศาสตร์แบบดั้งเดิม แต่เกี่ยวข้องกับการหาตัวเลขสุ่มที่เรียกว่า nonce NONCE นี้เมื่อรวมกับข้อมูลในบล็อกและประมวลผลผ่านฟังก์ชันแฮชจะต้องสร้างค่าแฮชที่ตรงตามเงื่อนไขเฉพาะ โดยทั่วไปเงื่อนไขนี้ต้องการให้ค่าแฮชน้อยกว่าค่าเป้าหมาย (หรือเทียบเท่าว่าบิต n แรกของค่าแฮชเป็นศูนย์) สมการมีดังนี้: hash(nonce+block_data)≤target\text{hash}(\text{nonce} + \text{block_data}) \leq \text{target}hash(nonce+block_data)≤target
บิตคอยน์ใช้ฟังก์ชันแฮช sha-256 ซึ่งแปลงข้อมูลขนาดใดก็ตามเป็นผลลัพธ์ความยาวคงที่ของ 256 บิต (เทียบเท่ากับ 64 หลักสิบหกตัวหรือ 32 ไบต์) ผลลัพธ์เป็นสุ่มเกือบและมีการรับรองว่าจะเหมือนกันสำหรับข้อมูลนำเข้าที่เหมือนกัน การขุดเหมืองเกี่ยวข้องกับการเปลี่ยน nonce อย่างต่อเนื่องและการแฮชข้อมูลหัวบล็อกโดยใช้ sha-256 จนกว่าค่าแฮชที่ตรงตามเงื่อนไขเป้าหมายจะถูกค้นพบ
ตัวอย่างเช่น ค่าแฮช SHA-256 ที่มี 30 บิตแรกเป็นศูนย์: 000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110
การแปลงนี้เป็นเลขฐานสิบหกจะได้ค่าที่ขึ้นต้นด้วยเลขศูนย์เจ็ดตัว: 00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90
เพื่อความง่าย ๆ ความน่าจะเป็นในการค้นพบแฮชที่มีจำนวน n บิตแรกเป็นศูนย์คือ 12n\frac{1}{2^n}2n1 ยิ่ง n มาก จะมีบิตศูนย์มากขึ้น และความน่าจะเป็นจะต่ำลง:
ด้วย n สูงสุด 256 การค้นหาค่าแฮชด้วยพลังคำนวณมนุษย์ปัจจุบันโดยยกเว้นคอมพิวเตอร์ควอนตัมเป็นเรื่องเกือบจะไปไม่ทันก่อนโลกจะสิ้นสุดลง
เนื่องจากคุณสมบัติของ sha-256 วิธีเดียวที่มีคือการใช้กำลังพลังงานที่มากมาย ซึ่งเกี่ยวข้องกับการพยายามต่าง ๆ อย่างต่อเนื่องจนกว่าเงื่อนไขจะถูกตอบรับ ความจำเป็นนี้สำหรับอุปกรณ์คอมพิวเตอร์ที่มีประสิทธิภาพสูงเป็นเหตุให้กระบวนการขุดเหมืองต้องใช้อุปกรณ์เช่นนี้
เนื่องจากคุณไม่สามารถคาดการณ์ค่าแฮชที่สร้างขึ้นโดยการเพิ่ม nonce ลงในข้อมูลบล็อกและส่งผ่าน SHA-256 กระบวนการนี้จึงเป็นแบบสุ่มทั้งหมด ตัวอย่างเช่นหากค่าแฮชเป้าหมายคือ 10,000 คุณไม่มีทางรู้ว่า NONCE ใดที่รวมกับข้อมูลบล็อกจะให้ค่าแฮชน้อยกว่า 10,000 ลักษณะที่คาดเดาไม่ได้และสุ่มนี้หมายความว่านักขุดต้องรักษาความเป็นไปได้ในการแจงนับจนกว่าเงื่อนไขจะพอใจ หากค่าหลายค่าตรงตามเงื่อนไข ค่าแฮชที่น้อยที่สุดจะถูกเลือกเนื่องจากค่าแฮชที่เล็กกว่าบ่งบอกถึงความยากที่สูงขึ้นและความน่าจะเป็นในการเกิดขึ้นที่ต่ํากว่า
การตรวจสอบว่าค่าแฮชที่สร้างได้ตรงตามที่ต้องการนั้นง่ายดาย โดยต้องใช้เพียงการดำเนินการเปรียบเทียบเดียว แต่การค้นหาค่าแฮชที่น้อยกว่าหรือเท่ากับค่าเป้าหมายสามารถทำได้เฉพาะผ่านการพิสูจน์จากการสุ่มเลขแบบแรงกล้า ลักษณะนี้ที่การตรวจสอบผลลัพธ์ง่ายแต่การค้นหาผลลัพธ์ยากเป็นที่รู้จักกันในนามว่า อัตราส่วนคำนวณที่ไม่สมมาตร
โค้ดต่อไปนี้จำลองกระบวนการขุดเหมือง เริ่มจากสตริงข้อมูลส่วนหัวบล็อก 'geekbang' และค้นหาเพิ่มขึ้นจากค่าน้อน 10,000 ไปเรื่อย ๆ จนกว่าจะพบค่าน้อนที่ตรงตามเงื่อนไขที่ระบุ
นี่คือสคริปต์ภาษาไพธอนที่สาธิตกระบวนการขุดเหมือง:
import hashlibdef main(): base_string = "geekbang" nonce = 10000 count = 0 while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string.encode()).hexdigest() count += 1 if pow_hash.startswith("0000"): # first 4 hex digits are 0, equivalent to the first 16 bits being 0 print("hash:", pow_hash) print("nonce:", nonce, "scan times:", count) break nonce += 1if __name__ == '__main__': main()
เมื่อความต้องการคือว่าตัวอักษร 16 ตัวแรกของผลการแฮชต้องเป็นศูนย์ (เทียบเท่ากับ 16 บิตแรกเป็นศูนย์) จำนวนการคำนวณประมาณ 58,000 ครั้ง หากความต้องการเพิ่มเป็นตัวอักษร 5 ตัวแรกเป็นศูนย์ จำนวนการคำนวณเพิ่มขึ้นเป็น 1.23 ล้านครั้ง และเมื่อความต้องการคือตัวอักษร 7 ตัวแรกเป็นศูนย์ จำนวนการคำนวณเพิ่มขึ้นเป็น 160 ล้านครั้ง นี้แสดงให้เห็นว่าแต่ละศูนย์เพิ่มขึ้นในคำนวณแฮชจะทำให้การคำนวณเพิ่มขึ้นประมาณ 16 เท่า
นี่คือผลลัพธ์สำหรับเงื่อนไขเป้าหมายที่แตกต่างกัน:
4 หลักแรกของ hex เป็นศูนย์ (16 บิต):
import hashlib
def main():
base_string = "geekbang"nonce = 10000count = 0while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string).hexdigest() count = count + 1 if pow_hash.startswith("0000"): # หน้า 4 ตัวหลัก 16 ในรหัสฐาน 16 เป็น 0 คือหน้า 16 บิตแรกเป็น 0 print pow_hash print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png" scan times: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count) break nonce = nonce + 1
ifชื่อ == ‘หลัก‘:
main()
ดังที่เห็นการเพิ่มจํานวนศูนย์นําหน้าที่ต้องการในแฮชจะเพิ่มจํานวนความพยายามที่จําเป็นอย่างมากตามรูปแบบการเติบโตแบบเอ็กซ์โพเนนเชียล สิ่งนี้แสดงให้เห็นถึงความยากลําบากในการคํานวณและทรัพยากรที่จําเป็นสําหรับการขุดโดยเน้นย้ําถึงความต้องการอุปกรณ์คอมพิวเตอร์ประสิทธิภาพสูงในกระบวนการขุด
เพื่อให้แน่ใจว่าบล็อกถูกสร้างขึ้นประมาณทุก ๆ 10 นาทีระบบ Bitcoin จะปรับความยากในการขุดโดยการเปลี่ยนจํานวนศูนย์นําหน้าที่ต้องการในค่าแฮช กลไกการปรับความยากนี้เป็นส่วนสําคัญของระบบ Bitcoin มันประเมินเวลาที่ใช้ในการสร้างบล็อกล่าสุดในปี 2016 ซึ่งควรใช้เวลาประมาณสองสัปดาห์ หากบล็อกเหล่านี้ถูกขุดในเวลาน้อยกว่าสองสัปดาห์ความยากจะเพิ่มขึ้นโดยการเพิ่มศูนย์นําหน้ามากขึ้น (ลดค่าเป้าหมาย) ในทางกลับกันหากใช้เวลานานกว่าสองสัปดาห์ความยากจะลดลงโดยการลดจํานวนศูนย์นําหน้า (เพิ่มค่าเป้าหมาย) กลไกนี้ช่วยให้มั่นใจได้ว่าเวลาในการสร้างบล็อกยังคงอยู่ประมาณ 10 นาทีแม้ว่าอัตราแฮชทั้งหมดของเครือข่ายจะผันผวนก็ตาม
กลไกการปรับความยากลำบากนี้ ซึ่งถูกออกแบบโดยนักสร้างบิตคอยน์ ซาโตชิ นาคาโมโต ได้รับการวางแผนตั้งแต่ต้นเพื่อปรับตัวโดยอัตโนมัติต่อพลังการคำนวณรวมของเครือข่าย มันรักษาอัตราการขุดเหมืองที่มั่นคงและป้องกันเงินสกุลจากการเผาไหม้อย่างรวดเร็วเกินไป ซึ่งอาจทำให้เศรษฐกิจตลาดวิตกว่า
โครงการบล็อกเชนที่แตกต่างกันอาจมีขั้นตอนขุดเหมืองที่แตกต่างกัน ที่นี่เราจะอธิบายขั้นตอนที่มีชื่อเสียงที่สุด: ขั้นตอนขุดเหมืองของบิตคอยน์
กระบวนการขุดเหมืองของขั้นต่ำของบิตคอยน์
ขนาดของแต่ละฟิลด์ในส่วนหัวบล็อกมีดังนี้:
https://time.geekbang.org/column/article/5963
alt="">โครงสร้างต้นไม้เมอร์เคิลมีดังนี้:
大后端私房菜]. alt="">
ข้อถกเถียงหลักเกี่ยวกับการขุดเกี่ยวข้องกับอัลกอริธึม Proof of Work (POW) ที่ใช้โดย Bitcoin และอนุพันธ์ อัลกอริธึมเหล่านี้ต้องการให้นักขุดจัดสรรทรัพยากรการคํานวณจํานวนมากเพื่อแก้ปัญหาที่เครือข่ายเห็นด้วย หลายคนกําลังทํางานเกี่ยวกับการคํานวณเหล่านี้พร้อมกัน แต่มีเพียงคนแรกที่แก้ปัญหาเท่านั้นที่ได้รับรางวัล ทรัพยากรการคํานวณและไฟฟ้าของผู้เข้าร่วมคนอื่น ๆ จะสูญเปล่าอย่างมีประสิทธิภาพไม่ก่อให้เกิดมูลค่าเพิ่มเติม
มีทางสำคัญสองทางสำหรับการปรับปรุงการใช้ทรัพยากรที่สูญเสีย
มูลค่าของกระบวนการขุดเหมืองคืออะไร? ดูเหมือนว่าจะเป็นการสูญเสียทรัพยากรและไม่มีความหมายต่อสังคม
การทบทวนส่วน "ทําไมการขุดจึงจําเป็น" ของบทความนี้ความสําคัญโดยตรงของการขุดคือรองรับการออกสกุลเงินดิจิทัล รางวัลการขุดจูงใจให้ผู้คนมีส่วนร่วมในการรักษาสกุลเงินดิจิทัลมากขึ้นทําให้มีเสถียรภาพมากขึ้น นอกจากนี้อัลกอริธึมการขุดยังรักษาความสอดคล้องของธุรกรรมภายในระบบสกุลเงินดิจิทัลทําให้มีประสิทธิภาพมากขึ้นและอ่อนไหวต่อการโจมตีภายในและภายนอกน้อยลง
ความสําคัญทางอ้อมของการขุดมาจากสกุลเงินดิจิทัลเอง สกุลเงินดิจิทัลสร้างระบบการเงินทั่วโลกที่เชื่อถือได้ซึ่งการทําธุรกรรมที่ปลอดภัยสามารถเกิดขึ้นได้โดยไม่จําเป็นต้องมีสถาบันแบบรวมศูนย์หลีกเลี่ยงข้อเสียของการรวมศูนย์ ลักษณะทั่วโลกของพวกเขายังช่วยให้การทําธุรกรรมข้ามพรมแดนมีประสิทธิภาพและต้นทุนต่ํา
ผลตอบแทนจากการขุดจะลดลงจนถึงจุดที่ต่ํากว่าต้นทุนทําให้นักขุดหยุดการขุดและการทําธุรกรรมหยุดลงหรือไม่?
เป็นข้อกังวลทั่วไปที่ผลตอบแทนจากการขุดขึ้นอยู่กับผลตอบแทนของระบบเพียงอย่างเดียวซึ่งจะลดลงเมื่อเวลาผ่านไป อย่างไรก็ตามการขุดยังสร้างรายได้จํานวนมากจากค่าธรรมเนียมการทําธุรกรรม เมื่อสกุลเงินดิจิทัลได้รับการยอมรับในวงกว้างตลาดสําหรับการทําธุรกรรมสกุลเงินดิจิทัลจะขยายตัว ปริมาณธุรกรรมที่เพิ่มขึ้นนี้จะเพิ่มการแข่งขันสําหรับการรวมบล็อกซึ่งนําไปสู่ค่าธรรมเนียมที่สูงขึ้นซึ่งผู้ใช้ยินดีจ่ายเพื่อจัดลําดับความสําคัญของธุรกรรม ดังนั้นนักขุดจึงสามารถได้รับค่าธรรมเนียมการทําธุรกรรมจํานวนมากอย่างต่อเนื่องเพื่อให้มั่นใจว่าการประมวลผลธุรกรรมจะเป็นไปได้อย่างต่อเนื่อง
ค่าธรรมเนียมการทำธุรกรรมจะชดเชยค่าใช้จ่ายในกระบวนการขุดเหมืองหรือไม่?
ใช่ค่าธรรมเนียมการทำธุรกรรมสามารถช่วยเอาชนะค่าใช้จ่ายในกระบวนการขุดเหมือง โดยเมื่อรางวัลบล็อกลดลงตามเวลา ค่าธรรมเนียมการทำธุรกรรมกลายเป็นแหล่งรายได้ที่สำคัญสำหรับนักขุด เช่นนี้จึงทำให้มั่นใจได้ว่า แม้ค่าใช้จ่ายในการใช้ไฟฟ้าจะสูง นักขุดก็ยังสามารถรักษาการดำเนินงานของพวกเขาผ่านค่าธรรมเนียมที่ผู้ใช้จ่ายสำหรับการประมวลผลธุรกรรม
ผู้ขุดหลายคนแบ่งปันรางวัลการขุดหากพวกเขาส่งออกบล็อกใหม่ของพวกเขาพร้อมกันหรือไม่?
no, if multiple miners solve the puzzle and broadcast their new blocks at the same time, it creates a temporary fork in the blockchain. here’s how it works:
ตัวอย่าง:
การโจมตี 51% คืออะไร และทำไม super nodes ไม่โกง?
การโจมตี 51% เกิดขึ้นเมื่อภาคีหนึ่งหรือกลุ่มหนึ่งควบคุมกำลังคำนวณของเครือข่ายมากกว่า 50% นี่คือเหตุผลที่โหนดเซิร์ฟเวอร์ที่เทพสามารถใช้กับกัน:
บล็อกเชนมีวิธีการป้องกันการกีดขวางและธุรกิจทุจริตอย่างไร
ป้องกันการกระจายบล็อกที่ไม่สอดคล้องกันโดยนักขุด
คำจำกัดความและฟังก์ชัน: ในเครือข่ายบล็อกเชน ธุรกรรมทั้งหมดที่ถูกส่งออกที่ยังไม่ได้รวมอยู่ชั่วคราวในหน่วยความจำ (mempool) ของโหนดเครือข่าย นักขุดเหมืองตรวจสอบ mempool เพื่อเลือกธุรกรรมที่จะสร้างบล็อกใหม่
กลยุทธ์การเลือกธุรกรรม: นักขุดสามารถเลือกธุรกรรมจาก Mempool ตามกลยุทธ์ของพวกเขา โดยทั่วไปพวกเขาจัดลําดับความสําคัญของธุรกรรมที่มีค่าธรรมเนียมสูงกว่า แต่บางคนอาจพิจารณาปัจจัยอื่น ๆ เช่นอายุของธุรกรรม (เวลาที่ใช้ใน mempool)
ผู้เข้าร่วมและวิธีที่พวกเขาได้รับผลประโยชน์: นอกจากผู้ใช้ระบบบิตคอยน์นั้น ผู้เข้าร่วมสามคนหลักในระบบคือ คนขุดเหมือง นักพัฒนา และผู้ดำเนินการโหนด
การเพิ่มราคา GPU: ความต้องการสูงของ GPU โดยนักขุดเหมืองสำหรับการขุดเหมืองเป็นหนึ่งในสาเหตุที่ส่งผลให้มีความขาดแคลนในการส่งมอบสินค้า นำไปสู่การเพิ่มราคา
การขุดเหมือง gpus: การขุดเหมือง gpus คือ gpus ที่ใช้ก่อนหน้านี้สำหรับการขุดเหรียญดิจิตอล gpus เหล่านี้มีการคำนวณที่หนัก ทำให้เกิดการสึกกร่อนและสึกกรุ่นที่สำคัญ เนื่องจากประสิทธิภาพที่ลดลง ส่วนใหญ่คนส่วนมากจะไม่ต้องการซื้อ gpus ที่ใช้ไปแล้ว
ความต้องการพื้นที่จัดเก็บสำรองทั้งหมด: ใช่ นักขุดต้องเก็บรักษาสมุดรายการบล็อกเชื่อมโยงทั้งหมดเพื่อยืนยันว่าโทเค็นได้ถูกใช้ไปแล้วและรักษาความปลอดภัยและความสมบูรณ์ของสมุดรายการ อย่างไรก็ตามสำหรับบล็อกต้นแรกๆ นักขุดเพียงแค่ต้องเก็บรักษาส่วนหัวของบล็อกไม่ใช่เนื้อหาบล็อกเต็ม สิ่งนี้ช่วยรักษาประสิทธิภาพของบล็อกเชื่อมโยงในขณะที่รักษาความปลอดภัยของมัน
ไม่มีรางวัลอัตโนมัติเกิน 21 ล้านบิตคอยน์: เมื่อพลังงานทั้งหมดของบิตคอยน์ถึงขีดจำกัดของ 21 ล้านจะไม่มีระบบออกบิตคอยน์ใหม่เป็นรางวัลให้กับคนขุดเหมืองอีกต่อไป หากผู้ใช้ไม่ต้องการจ่ายค่าธรรมเนียมการทำธุรกรรมโดยทฤษฎีแล้วระบบการทำธุรกรรมอาจเผชิญกับความท้าทายในด้านการดำเนินงาน อย่างไรก็ตาม มีโอกาสที่ผู้ใช้จะเต็มใจจ่ายค่าธรรมเนียมการทำธุรกรรมเพื่อให้ทรานแซคชันของพวกเขาได้รับการประมวลผล ซึ่งสร้างความมั่นใจในการดำเนินการต่อไปของระบบ
ความสูงบล็อกจะยังคงเพิ่มขึ้น: แม้ว่าจะถึงจำนวนบิตคอยน์สูงสุด 21 ล้านบิตคอยน์แล้ว ความสูงของบล็อก (จำนวนบล็อกทั้งหมด) จะยังคงเพิ่มขึ้นตลอดเวลาถ้านักขุดยินดีขุดและพัฒนาการทำธุรกรรมเข้าเบียนใหม่ ความสูงของบล็อกไม่ได้จำกัดโดยการเพิ่มจำนวนบิตคอยน์
ศักยภาพในการเปลี่ยนแปลงฉันทามติ: ชุมชนสามารถเสนอการเปลี่ยนแปลงกฎฉันทามติเช่นการเพิ่มอุปทาน bitcoin ทั้งหมดเพื่อให้สามารถสร้างเหรียญใหม่ได้หากจําเป็น
ธุรกรรมคอยน์เบส: ในบล็อกเชนของบิตคอยน์ เหรียญรางวัลของนักขุดจะถูกกระจายผ่านธุรกรรมพิเศษที่รู้จักกันดีว่า "ธุรกรรมคอยน์เบส" หรือ "รางวัลบล็อก" ธุรกรรมนี้มีลักษณะเฉพาะ:
การคํานวณรายได้ต่อบล็อก: รายได้ของนักขุดจะถูกคํานวณทุกครั้งที่มีการขุดบล็อกสําเร็จและยืนยันโดยกลไกฉันทามติของเครือข่าย นักขุด (หรือพูลการขุด) ที่ขุดบล็อกจะได้รับรางวัลบล็อกและค่าธรรมเนียมการทําธุรกรรมสะสมจากธุรกรรมทั้งหมดที่รวมอยู่ในบล็อก
กระบวนการรับรางวัล: เมื่อนักขุดหรือพูลการขุดขุดบล็อกสําเร็จและได้รับการยืนยันจากเครือข่ายพวกเขาจะได้รับรางวัลบล็อกและค่าธรรมเนียมการทําธุรกรรม สิ่งนี้ดําเนินการผ่านธุรกรรม Coinbase ซึ่งแปลงค่าธรรมเนียมและรางวัลเป็นเอาต์พุตธุรกรรมที่ไม่ได้ใช้ (UTXOs) ที่เครดิตไปยังบัญชีของนักขุด
การสร้างต่อเนื่อง: บล็อกถูกสร้างต่อเนื่องในบล็อกเชน บล็อกใหม่สามารถสร้างได้เฉพาะหลังจากที่บล็อกก่อนหน้าได้ถูกขุดเหมืองเรียบร้อยและเพิ่มเข้าสู่โซ่
การทำธุรกรรมหลายรายการต่อบล็อก: บล็อกมีทั่วไปแล้วที่มีการทำธุรกรรมหลายรายการ นักขุดรวมทั้งหมดที่เป็นไปได้ของการทำธุรกรรมเพื่อเพิ่มรายได้จากค่าธุรกรรม แทนที่จะแพ็คเอกสารที่เป็นไปได้เป็นแต่ละรายการ
บล็อกที่เต็มบางส่วน: บล็อกส่วนมากไม่ได้ใช้งานอย่างเต็มที่ นักขุดเริ่มทำงานกับบล็อกถัดไปเมื่อพวกเขาพบแฮชที่ถูกต้องที่ตรงกับความยากลำบาก โดยไม่ว่าบล็อกจะเต็มเต็มหรือไม่
บล็อกที่ว่างเปล่า: บล็อกสามารถขุดได้แม้ว่าจะไม่มีธุรกรรมที่จะรวมอยู่ในบล็อกนั้น บล็อกเหล่านี้ที่เรียกว่าบล็อกที่ว่างเปล่า ยังคงให้รางวัลระบบให้กับนักขุด
กฎของโซ่ที่ยาวที่สุด: เมื่อเกิด fork ระบบเครือข่ายจะตามไปกับโซ่ที่มีหลักฐานขุดเหมืองสะสมมากที่สุด ซึ่งโดยทั่วไปแล้วคือโซ่ที่ยาวที่สุด โหนดจะสลับไปยังโซ่ที่ยาวกว่าเมื่อเป็นชัดเจนว่าโซ่ไหนมีการทำงานมากกว่า
การแก้ไขการใช้จ่ายครั้งที่สอง:
กระบวนการตรวจสอบความถูกต้อง:
การคำนวณค่าธรรมเนียมการทำธุรกรรม: ผู้ใช้สามารถควบคุมค่าธรรมเนียมการทำธุรกรรมเพื่อเร่งความเร็วในการยืนยันธุรกรรมของพวกเขา ค่าธรรมเนียมจะถูกกำหนดโดยสูตรต่อไปนี้:
ค่าธรรมเนียมการทําธุรกรรม = อินพุตทั้งหมด−เอาต์พุตทั้งหมด−เปลี่ยนแปลง
ผู้ใช้กําหนดค่าธรรมเนียมการทําธุรกรรมโดยการปรับจํานวนอินพุตจํานวนเอาต์พุตและจํานวนการเปลี่ยนแปลง
การกระจายรายได้: เมื่อขุดในพูล พูลโหนดจะได้รับรางวัลบล็อก จากนั้นพูลจะกระจายรายได้ให้กับสมาชิกตามพลังการคํานวณที่มีส่วนร่วม การกระจายนี้ดําเนินการผ่านการโอนไปยังกระเป๋าเงินของนักขุด
การขุดที่เห็นแก่ตัว: การขุดแบบเห็นแก่ตัวเป็นกลยุทธ์ที่นักขุด (หรือกลุ่มการขุด) พบบล็อกใหม่ แต่ไม่ได้ออกอากาศทันที พวกเขายังคงทําเหมืองแบบส่วนตัวบนโซ่ของพวกเขา (โซ่ที่ซ่อนอยู่) เมื่อพวกเขาพบบล็อกเพิ่มเติมพวกเขาจะออกอากาศทั้งหมดในครั้งเดียว สิ่งนี้สามารถทําให้งานของนักขุดคนอื่น ๆ เป็นโมฆะและเอียงพลังการคํานวณและรางวัลต่อนักขุดที่เห็นแก่ตัว Bitcoin สามารถ mitiGate.io ผลกระทบของการขุดที่เห็นแก่ตัวโดยการปรับปรุงโปรโตคอลการออกอากาศ
การตรวจสอบการทำธุรกรรม: เมื่อมีการส่งธุรกรรมไปยังโหนดหนึ่ง จะมีการตรวจสอบหลายรายการเพื่อกำหนดให้เพิ่มลงใน mempool หรือไม่:
ตรวจสอบบล็อก: เมื่อโหนดขุดเหรียญได้รับบล็อกใหม่ จะทำการตรวจสอบอย่างละเอียดในบล็อกและธุรกรรมของมัน:
[1] บรรยาย 12 | เทคโนโลยีบล็อกเชนลึกซึ้ง (4): การตกลง pow อย่างลึกลับของบล็อกเชน-geek time:คำประกาศ:
ส่งต่อชื่อเรื่องต้นฉบับ '白话区块链三:揭开挖矿神秘的面纱——挖矿是什么?为什么要挖矿?谁是我们买不起显卡的罪魁祸首?'
หนึ่งในแนวคิดที่คุ้นเคยที่สุดที่เกี่ยวข้องกับบล็อกเชนสําหรับทุกคนน่าจะเป็นการขุด หลายคนอาจเคยได้ยินเกี่ยวกับการขุดหลายครั้ง แต่ไม่แน่ใจว่ามันเกี่ยวข้องกับอะไร ในส่วนนี้เราจะขัดจังหวะการเขียนโปรแกรมปกติของเราเพื่อแนะนํา "การขุด" ก่อน
สรุปเนื้อหาอย่างรวดเร็วจาก "Plain Blockchain 1: Introduction to Bitcoin (ผู้บุกเบิกการปฏิวัติบล็อกเชนและผู้ท้าชิงสกุลเงินอธิปไตย)" ซึ่ง Satoshi Nakamoto ออกแบบระบบการเงิน Bitcoin เพื่อเชื่อมโยงรางวัลสําหรับการทําบัญชีกับการออกสกุลเงิน วิธีการนี้ช่วยให้การออกสกุลเงินเป็นไปโดยอัตโนมัติผ่านกระบวนการทําบัญชีแก้ปัญหาการออกสกุลเงินในขณะเดียวกันก็สนับสนุนให้ผู้ทําบัญชีมีส่วนร่วมอย่างแข็งขัน
ในโลกจริง กระบวนการขุดเหมืองเป็นกระบวนการที่เหมืองแร่ใช้เครื่องมือต่าง ๆ เพื่อขุดแร่มีคุณค่าซึ่งซ่อนอยู่ในหินจากเหมือง คนขุดแร่สามารถแยกความคุ้มค่าจากแร่โดยใช้แรงงานกายภาพ
สำหรับโครงการบล็อกเชนที่มีรางวัลสำหรับงานบัญชี (โดยทั่วไปคือโครงการเงินดิจิทัล) โหนดเครือข่ายจะใช้ทรัพยากรคอมพิวเตอร์เพื่อแก้ปัญหา หากพบทางออก จะบรรจุบล็อกและได้รับรางวัลในรูปแบบเงินที่เพิ่มขึ้น กระบวนการนี้คล้ายกับการทำแร่เหมืองโลหะมีค่าเช่นทองคำจากตัวอย่างเหมืองแร่เดียว จึงมักเรียกว่า "การขุด" ที่นี่ผู้ทำบัญชีคือผู้ขุดเหมือง ที่แข่งขันในการบรรจุบล็อกโดยใช้ฮาร์ดแวร์และไฟฟ้า ซึ่งทำให้เกิดการสร้างเงินใหม่
การขุดเหมืองมีจุดประสงค์หลัก 2 ประการ: การตรวจสอบธุรกรรมที่เกิดขึ้นเร็วๆ นี้โดยการจัดหีบหน้าไว้ในบล็อกและเชื่อมโยงกับบล็อกเชน และการออกเสียงเงินใหม่โดยการให้รางวัลแก่ผู้บัญชีหนังสือรายวัน ด้านล่างเป็นฟังก์ชันละเอียดของการขุดเหมือง:
การขุดเหมืองเป็นกระบวนการที่ผู้ขุดเหมืองได้รับแรงบันดาลใจในการเข้าร่วมขุดเหมืองเนื่องจากพวกเขาได้รับรางวัลที่มีค่าสูงสำหรับการบรรจุบล็อกลงบนบล็อกเชน รางวัลเหล่านี้มาจากแหล่งที่มีความสำคัญสองแห่ง:
เมื่อเวลาผ่านไป รางวัลบล็อคจะลดลง (ตัวอย่างเช่นเนื่องจากกลไกของบิตคอยน์ที่จะลดลงในระยะเวลาประมาณสี่ปี) ในที่สุดเมื่อขุดบิตคอยน์ 21 ล้านเหรียญทั้งหมดแล้วที่คาดว่าจะเกิดขึ้นปี 2141 รางวัลบล็อคอัตโนมัติจะหยุดอย่างเป็นทางการ และค่าธรรมเนียมการทำธุรกรรมจะเป็นแหล่งรายได้หลักสำหรับผู้ขุด
บิตคอยน์สร้างบล็อกใหม่โดยราว ๆ ทุก 10 นาที โดยเริ่มต้นแต่ละบล็อกที่สร้างขึ้นจะได้รับ 50 บิตคอยน์ รางวัลนี้จะลดลงครึ่งหนึ่งทุก 4 ปี และจนถึงปัจจุบันได้มีการลดลงครึ่งทั้งหมด 4 ครั้ง ในปัจจุบันแต่ละบล็อกสร้างขึ้นจะได้รับ 3.125 บิตคอยน์ โดยการลดลงครึ่งล่าสุดเกิดขึ้นในเดือนเมษายน 2024 การลดลงครึ่งถัดไปคาดว่าจะเกิดขึ้นรอบปี 2028 โดยประมาณในปี 2141 บิตคอยน์จะถึงขีดจำกัดในการเผยแพร่
ค่าธรรมเนียมการทำธุรกรรมได้รับผลกระทบไม่เพียงแค่จากการข้อเสนอและความต้องการเท่านั้น แต่ยังขึ้นอยู่กับขนาดของธุรกรรมด้วย เนื่องจากค่าธรรมเนียมเป็นสัมพันธ์กับพื้นที่ที่ธุรกรรมครอบครองในบล็อก
สำหรับคนขุดแร่ เข้าร่วมกระบวนการขุดเหมืองง่ายดาย ดาวน์โหลดไคลเอ็นต์กระเป๋าสตางค์สกุลเงินดิจิทัล และภายในไคลเอ็นต์ คลิกปุ่มขุดเหมืองเพื่อเริ่มต้นการขุดเหมือง
สำหรับโครงการบล็อกเชนที่มีรางวัลบล็อก อัลกอริทึมการขุดเหมืองจะถูกเขียนลงในสคริปต์ที่ผสมเข้ากับกระเป๋าเงินอัตโนมัติ นักขุดเพียงแค่คลิกปุ่มเพื่อเริ่มการทำงานของสคริปต์
อัลกอริธึมการขุดเป็นตัวกําหนดซึ่งหมายความว่าตราบใดที่นักขุดเรียกใช้อัลกอริทึมอย่างต่อเนื่องในที่สุดพวกเขาจะได้รับผลลัพธ์ อย่างไรก็ตามเนื่องจากทรัพยากรการคํานวณที่แตกต่างกันเวลาที่ใช้ในการคํานวณผลลัพธ์นี้อาจแตกต่างกันในหมู่นักขุด เมื่อโหนดคํานวณค่าเป้าหมายความพยายามของนักขุดคนอื่น ๆ ในช่วงเวลานั้นจะไร้ประโยชน์ส่งผลให้ผลตอบแทนติดลบเนื่องจากทรัพยากรทางกายภาพที่ใช้ไป
เพื่อหลีกเลี่ยงความพยายามที่สูญเปล่านักขุดมักจะรวมทรัพยากรการคํานวณของพวกเขาโดยเข้าร่วมโหนดพูลการขุด โหนดนี้ทํางานเหมือนโหนดอื่น ๆ แต่มีพลังในการคํานวณมากกว่าอย่างมีนัยสําคัญ เมื่อพูลขุดบล็อกสําเร็จรางวัลจะถูกแจกจ่ายให้กับนักขุดที่เข้าร่วมตามทรัพยากรการคํานวณที่มีส่วนร่วม สิ่งสําคัญคือต้องทราบว่าบนบล็อกเชนนักขุดที่บันทึกเป็นบรรจุภัณฑ์บล็อกคือโหนดพูลการขุดในขณะที่นักขุดแต่ละคนจะได้รับส่วนแบ่งของรางวัลที่จัดสรรโดยพูลไม่ใช่โดยตรงจากระบบสกุลเงิน
บิทเมน บริษัทผู้ผลิตชิปขุดเหมืองที่มีประสิทธิภาพสูงที่พิสูจน์บทบาทของพูลขุดเหมือง ที่มีส่วนร่วมในการกระจายอำนาจในการทำบัญชี
โครงการบล็อกเชนที่แตกต่างกันอาจมีปริศนาในการขุดและระดับความยากต่าง ๆ ด้วย ตัวอย่างเช่น ที่นี่เราจะเลือกบิตคอยน์เป็นตัวอย่าง วิธีการขุดที่ใช้โดยบิตคอยน์คือ Proof of Work (PoW) สารที่สำคัญของอัลกอริทึมนี้คือ การที่จะได้ผลลัพธ์ต้องใช้งานไปมากกว่าที่จะพิสูจน์
ปริศนาการขุดไม่ใช่ปัญหาทางคณิตศาสตร์แบบดั้งเดิม แต่เกี่ยวข้องกับการหาตัวเลขสุ่มที่เรียกว่า nonce NONCE นี้เมื่อรวมกับข้อมูลในบล็อกและประมวลผลผ่านฟังก์ชันแฮชจะต้องสร้างค่าแฮชที่ตรงตามเงื่อนไขเฉพาะ โดยทั่วไปเงื่อนไขนี้ต้องการให้ค่าแฮชน้อยกว่าค่าเป้าหมาย (หรือเทียบเท่าว่าบิต n แรกของค่าแฮชเป็นศูนย์) สมการมีดังนี้: hash(nonce+block_data)≤target\text{hash}(\text{nonce} + \text{block_data}) \leq \text{target}hash(nonce+block_data)≤target
บิตคอยน์ใช้ฟังก์ชันแฮช sha-256 ซึ่งแปลงข้อมูลขนาดใดก็ตามเป็นผลลัพธ์ความยาวคงที่ของ 256 บิต (เทียบเท่ากับ 64 หลักสิบหกตัวหรือ 32 ไบต์) ผลลัพธ์เป็นสุ่มเกือบและมีการรับรองว่าจะเหมือนกันสำหรับข้อมูลนำเข้าที่เหมือนกัน การขุดเหมืองเกี่ยวข้องกับการเปลี่ยน nonce อย่างต่อเนื่องและการแฮชข้อมูลหัวบล็อกโดยใช้ sha-256 จนกว่าค่าแฮชที่ตรงตามเงื่อนไขเป้าหมายจะถูกค้นพบ
ตัวอย่างเช่น ค่าแฮช SHA-256 ที่มี 30 บิตแรกเป็นศูนย์: 000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110
การแปลงนี้เป็นเลขฐานสิบหกจะได้ค่าที่ขึ้นต้นด้วยเลขศูนย์เจ็ดตัว: 00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90
เพื่อความง่าย ๆ ความน่าจะเป็นในการค้นพบแฮชที่มีจำนวน n บิตแรกเป็นศูนย์คือ 12n\frac{1}{2^n}2n1 ยิ่ง n มาก จะมีบิตศูนย์มากขึ้น และความน่าจะเป็นจะต่ำลง:
ด้วย n สูงสุด 256 การค้นหาค่าแฮชด้วยพลังคำนวณมนุษย์ปัจจุบันโดยยกเว้นคอมพิวเตอร์ควอนตัมเป็นเรื่องเกือบจะไปไม่ทันก่อนโลกจะสิ้นสุดลง
เนื่องจากคุณสมบัติของ sha-256 วิธีเดียวที่มีคือการใช้กำลังพลังงานที่มากมาย ซึ่งเกี่ยวข้องกับการพยายามต่าง ๆ อย่างต่อเนื่องจนกว่าเงื่อนไขจะถูกตอบรับ ความจำเป็นนี้สำหรับอุปกรณ์คอมพิวเตอร์ที่มีประสิทธิภาพสูงเป็นเหตุให้กระบวนการขุดเหมืองต้องใช้อุปกรณ์เช่นนี้
เนื่องจากคุณไม่สามารถคาดการณ์ค่าแฮชที่สร้างขึ้นโดยการเพิ่ม nonce ลงในข้อมูลบล็อกและส่งผ่าน SHA-256 กระบวนการนี้จึงเป็นแบบสุ่มทั้งหมด ตัวอย่างเช่นหากค่าแฮชเป้าหมายคือ 10,000 คุณไม่มีทางรู้ว่า NONCE ใดที่รวมกับข้อมูลบล็อกจะให้ค่าแฮชน้อยกว่า 10,000 ลักษณะที่คาดเดาไม่ได้และสุ่มนี้หมายความว่านักขุดต้องรักษาความเป็นไปได้ในการแจงนับจนกว่าเงื่อนไขจะพอใจ หากค่าหลายค่าตรงตามเงื่อนไข ค่าแฮชที่น้อยที่สุดจะถูกเลือกเนื่องจากค่าแฮชที่เล็กกว่าบ่งบอกถึงความยากที่สูงขึ้นและความน่าจะเป็นในการเกิดขึ้นที่ต่ํากว่า
การตรวจสอบว่าค่าแฮชที่สร้างได้ตรงตามที่ต้องการนั้นง่ายดาย โดยต้องใช้เพียงการดำเนินการเปรียบเทียบเดียว แต่การค้นหาค่าแฮชที่น้อยกว่าหรือเท่ากับค่าเป้าหมายสามารถทำได้เฉพาะผ่านการพิสูจน์จากการสุ่มเลขแบบแรงกล้า ลักษณะนี้ที่การตรวจสอบผลลัพธ์ง่ายแต่การค้นหาผลลัพธ์ยากเป็นที่รู้จักกันในนามว่า อัตราส่วนคำนวณที่ไม่สมมาตร
โค้ดต่อไปนี้จำลองกระบวนการขุดเหมือง เริ่มจากสตริงข้อมูลส่วนหัวบล็อก 'geekbang' และค้นหาเพิ่มขึ้นจากค่าน้อน 10,000 ไปเรื่อย ๆ จนกว่าจะพบค่าน้อนที่ตรงตามเงื่อนไขที่ระบุ
นี่คือสคริปต์ภาษาไพธอนที่สาธิตกระบวนการขุดเหมือง:
import hashlibdef main(): base_string = "geekbang" nonce = 10000 count = 0 while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string.encode()).hexdigest() count += 1 if pow_hash.startswith("0000"): # first 4 hex digits are 0, equivalent to the first 16 bits being 0 print("hash:", pow_hash) print("nonce:", nonce, "scan times:", count) break nonce += 1if __name__ == '__main__': main()
เมื่อความต้องการคือว่าตัวอักษร 16 ตัวแรกของผลการแฮชต้องเป็นศูนย์ (เทียบเท่ากับ 16 บิตแรกเป็นศูนย์) จำนวนการคำนวณประมาณ 58,000 ครั้ง หากความต้องการเพิ่มเป็นตัวอักษร 5 ตัวแรกเป็นศูนย์ จำนวนการคำนวณเพิ่มขึ้นเป็น 1.23 ล้านครั้ง และเมื่อความต้องการคือตัวอักษร 7 ตัวแรกเป็นศูนย์ จำนวนการคำนวณเพิ่มขึ้นเป็น 160 ล้านครั้ง นี้แสดงให้เห็นว่าแต่ละศูนย์เพิ่มขึ้นในคำนวณแฮชจะทำให้การคำนวณเพิ่มขึ้นประมาณ 16 เท่า
นี่คือผลลัพธ์สำหรับเงื่อนไขเป้าหมายที่แตกต่างกัน:
4 หลักแรกของ hex เป็นศูนย์ (16 บิต):
import hashlib
def main():
base_string = "geekbang"nonce = 10000count = 0while true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string).hexdigest() count = count + 1 if pow_hash.startswith("0000"): # หน้า 4 ตัวหลัก 16 ในรหัสฐาน 16 เป็น 0 คือหน้า 16 บิตแรกเป็น 0 print pow_hash print "nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png" scan times: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png"" % (nonce, count) break nonce = nonce + 1
ifชื่อ == ‘หลัก‘:
main()
ดังที่เห็นการเพิ่มจํานวนศูนย์นําหน้าที่ต้องการในแฮชจะเพิ่มจํานวนความพยายามที่จําเป็นอย่างมากตามรูปแบบการเติบโตแบบเอ็กซ์โพเนนเชียล สิ่งนี้แสดงให้เห็นถึงความยากลําบากในการคํานวณและทรัพยากรที่จําเป็นสําหรับการขุดโดยเน้นย้ําถึงความต้องการอุปกรณ์คอมพิวเตอร์ประสิทธิภาพสูงในกระบวนการขุด
เพื่อให้แน่ใจว่าบล็อกถูกสร้างขึ้นประมาณทุก ๆ 10 นาทีระบบ Bitcoin จะปรับความยากในการขุดโดยการเปลี่ยนจํานวนศูนย์นําหน้าที่ต้องการในค่าแฮช กลไกการปรับความยากนี้เป็นส่วนสําคัญของระบบ Bitcoin มันประเมินเวลาที่ใช้ในการสร้างบล็อกล่าสุดในปี 2016 ซึ่งควรใช้เวลาประมาณสองสัปดาห์ หากบล็อกเหล่านี้ถูกขุดในเวลาน้อยกว่าสองสัปดาห์ความยากจะเพิ่มขึ้นโดยการเพิ่มศูนย์นําหน้ามากขึ้น (ลดค่าเป้าหมาย) ในทางกลับกันหากใช้เวลานานกว่าสองสัปดาห์ความยากจะลดลงโดยการลดจํานวนศูนย์นําหน้า (เพิ่มค่าเป้าหมาย) กลไกนี้ช่วยให้มั่นใจได้ว่าเวลาในการสร้างบล็อกยังคงอยู่ประมาณ 10 นาทีแม้ว่าอัตราแฮชทั้งหมดของเครือข่ายจะผันผวนก็ตาม
กลไกการปรับความยากลำบากนี้ ซึ่งถูกออกแบบโดยนักสร้างบิตคอยน์ ซาโตชิ นาคาโมโต ได้รับการวางแผนตั้งแต่ต้นเพื่อปรับตัวโดยอัตโนมัติต่อพลังการคำนวณรวมของเครือข่าย มันรักษาอัตราการขุดเหมืองที่มั่นคงและป้องกันเงินสกุลจากการเผาไหม้อย่างรวดเร็วเกินไป ซึ่งอาจทำให้เศรษฐกิจตลาดวิตกว่า
โครงการบล็อกเชนที่แตกต่างกันอาจมีขั้นตอนขุดเหมืองที่แตกต่างกัน ที่นี่เราจะอธิบายขั้นตอนที่มีชื่อเสียงที่สุด: ขั้นตอนขุดเหมืองของบิตคอยน์
กระบวนการขุดเหมืองของขั้นต่ำของบิตคอยน์
ขนาดของแต่ละฟิลด์ในส่วนหัวบล็อกมีดังนี้:
https://time.geekbang.org/column/article/5963
alt="">โครงสร้างต้นไม้เมอร์เคิลมีดังนี้:
大后端私房菜]. alt="">
ข้อถกเถียงหลักเกี่ยวกับการขุดเกี่ยวข้องกับอัลกอริธึม Proof of Work (POW) ที่ใช้โดย Bitcoin และอนุพันธ์ อัลกอริธึมเหล่านี้ต้องการให้นักขุดจัดสรรทรัพยากรการคํานวณจํานวนมากเพื่อแก้ปัญหาที่เครือข่ายเห็นด้วย หลายคนกําลังทํางานเกี่ยวกับการคํานวณเหล่านี้พร้อมกัน แต่มีเพียงคนแรกที่แก้ปัญหาเท่านั้นที่ได้รับรางวัล ทรัพยากรการคํานวณและไฟฟ้าของผู้เข้าร่วมคนอื่น ๆ จะสูญเปล่าอย่างมีประสิทธิภาพไม่ก่อให้เกิดมูลค่าเพิ่มเติม
มีทางสำคัญสองทางสำหรับการปรับปรุงการใช้ทรัพยากรที่สูญเสีย
มูลค่าของกระบวนการขุดเหมืองคืออะไร? ดูเหมือนว่าจะเป็นการสูญเสียทรัพยากรและไม่มีความหมายต่อสังคม
การทบทวนส่วน "ทําไมการขุดจึงจําเป็น" ของบทความนี้ความสําคัญโดยตรงของการขุดคือรองรับการออกสกุลเงินดิจิทัล รางวัลการขุดจูงใจให้ผู้คนมีส่วนร่วมในการรักษาสกุลเงินดิจิทัลมากขึ้นทําให้มีเสถียรภาพมากขึ้น นอกจากนี้อัลกอริธึมการขุดยังรักษาความสอดคล้องของธุรกรรมภายในระบบสกุลเงินดิจิทัลทําให้มีประสิทธิภาพมากขึ้นและอ่อนไหวต่อการโจมตีภายในและภายนอกน้อยลง
ความสําคัญทางอ้อมของการขุดมาจากสกุลเงินดิจิทัลเอง สกุลเงินดิจิทัลสร้างระบบการเงินทั่วโลกที่เชื่อถือได้ซึ่งการทําธุรกรรมที่ปลอดภัยสามารถเกิดขึ้นได้โดยไม่จําเป็นต้องมีสถาบันแบบรวมศูนย์หลีกเลี่ยงข้อเสียของการรวมศูนย์ ลักษณะทั่วโลกของพวกเขายังช่วยให้การทําธุรกรรมข้ามพรมแดนมีประสิทธิภาพและต้นทุนต่ํา
ผลตอบแทนจากการขุดจะลดลงจนถึงจุดที่ต่ํากว่าต้นทุนทําให้นักขุดหยุดการขุดและการทําธุรกรรมหยุดลงหรือไม่?
เป็นข้อกังวลทั่วไปที่ผลตอบแทนจากการขุดขึ้นอยู่กับผลตอบแทนของระบบเพียงอย่างเดียวซึ่งจะลดลงเมื่อเวลาผ่านไป อย่างไรก็ตามการขุดยังสร้างรายได้จํานวนมากจากค่าธรรมเนียมการทําธุรกรรม เมื่อสกุลเงินดิจิทัลได้รับการยอมรับในวงกว้างตลาดสําหรับการทําธุรกรรมสกุลเงินดิจิทัลจะขยายตัว ปริมาณธุรกรรมที่เพิ่มขึ้นนี้จะเพิ่มการแข่งขันสําหรับการรวมบล็อกซึ่งนําไปสู่ค่าธรรมเนียมที่สูงขึ้นซึ่งผู้ใช้ยินดีจ่ายเพื่อจัดลําดับความสําคัญของธุรกรรม ดังนั้นนักขุดจึงสามารถได้รับค่าธรรมเนียมการทําธุรกรรมจํานวนมากอย่างต่อเนื่องเพื่อให้มั่นใจว่าการประมวลผลธุรกรรมจะเป็นไปได้อย่างต่อเนื่อง
ค่าธรรมเนียมการทำธุรกรรมจะชดเชยค่าใช้จ่ายในกระบวนการขุดเหมืองหรือไม่?
ใช่ค่าธรรมเนียมการทำธุรกรรมสามารถช่วยเอาชนะค่าใช้จ่ายในกระบวนการขุดเหมือง โดยเมื่อรางวัลบล็อกลดลงตามเวลา ค่าธรรมเนียมการทำธุรกรรมกลายเป็นแหล่งรายได้ที่สำคัญสำหรับนักขุด เช่นนี้จึงทำให้มั่นใจได้ว่า แม้ค่าใช้จ่ายในการใช้ไฟฟ้าจะสูง นักขุดก็ยังสามารถรักษาการดำเนินงานของพวกเขาผ่านค่าธรรมเนียมที่ผู้ใช้จ่ายสำหรับการประมวลผลธุรกรรม
ผู้ขุดหลายคนแบ่งปันรางวัลการขุดหากพวกเขาส่งออกบล็อกใหม่ของพวกเขาพร้อมกันหรือไม่?
no, if multiple miners solve the puzzle and broadcast their new blocks at the same time, it creates a temporary fork in the blockchain. here’s how it works:
ตัวอย่าง:
การโจมตี 51% คืออะไร และทำไม super nodes ไม่โกง?
การโจมตี 51% เกิดขึ้นเมื่อภาคีหนึ่งหรือกลุ่มหนึ่งควบคุมกำลังคำนวณของเครือข่ายมากกว่า 50% นี่คือเหตุผลที่โหนดเซิร์ฟเวอร์ที่เทพสามารถใช้กับกัน:
บล็อกเชนมีวิธีการป้องกันการกีดขวางและธุรกิจทุจริตอย่างไร
ป้องกันการกระจายบล็อกที่ไม่สอดคล้องกันโดยนักขุด
คำจำกัดความและฟังก์ชัน: ในเครือข่ายบล็อกเชน ธุรกรรมทั้งหมดที่ถูกส่งออกที่ยังไม่ได้รวมอยู่ชั่วคราวในหน่วยความจำ (mempool) ของโหนดเครือข่าย นักขุดเหมืองตรวจสอบ mempool เพื่อเลือกธุรกรรมที่จะสร้างบล็อกใหม่
กลยุทธ์การเลือกธุรกรรม: นักขุดสามารถเลือกธุรกรรมจาก Mempool ตามกลยุทธ์ของพวกเขา โดยทั่วไปพวกเขาจัดลําดับความสําคัญของธุรกรรมที่มีค่าธรรมเนียมสูงกว่า แต่บางคนอาจพิจารณาปัจจัยอื่น ๆ เช่นอายุของธุรกรรม (เวลาที่ใช้ใน mempool)
ผู้เข้าร่วมและวิธีที่พวกเขาได้รับผลประโยชน์: นอกจากผู้ใช้ระบบบิตคอยน์นั้น ผู้เข้าร่วมสามคนหลักในระบบคือ คนขุดเหมือง นักพัฒนา และผู้ดำเนินการโหนด
การเพิ่มราคา GPU: ความต้องการสูงของ GPU โดยนักขุดเหมืองสำหรับการขุดเหมืองเป็นหนึ่งในสาเหตุที่ส่งผลให้มีความขาดแคลนในการส่งมอบสินค้า นำไปสู่การเพิ่มราคา
การขุดเหมือง gpus: การขุดเหมือง gpus คือ gpus ที่ใช้ก่อนหน้านี้สำหรับการขุดเหรียญดิจิตอล gpus เหล่านี้มีการคำนวณที่หนัก ทำให้เกิดการสึกกร่อนและสึกกรุ่นที่สำคัญ เนื่องจากประสิทธิภาพที่ลดลง ส่วนใหญ่คนส่วนมากจะไม่ต้องการซื้อ gpus ที่ใช้ไปแล้ว
ความต้องการพื้นที่จัดเก็บสำรองทั้งหมด: ใช่ นักขุดต้องเก็บรักษาสมุดรายการบล็อกเชื่อมโยงทั้งหมดเพื่อยืนยันว่าโทเค็นได้ถูกใช้ไปแล้วและรักษาความปลอดภัยและความสมบูรณ์ของสมุดรายการ อย่างไรก็ตามสำหรับบล็อกต้นแรกๆ นักขุดเพียงแค่ต้องเก็บรักษาส่วนหัวของบล็อกไม่ใช่เนื้อหาบล็อกเต็ม สิ่งนี้ช่วยรักษาประสิทธิภาพของบล็อกเชื่อมโยงในขณะที่รักษาความปลอดภัยของมัน
ไม่มีรางวัลอัตโนมัติเกิน 21 ล้านบิตคอยน์: เมื่อพลังงานทั้งหมดของบิตคอยน์ถึงขีดจำกัดของ 21 ล้านจะไม่มีระบบออกบิตคอยน์ใหม่เป็นรางวัลให้กับคนขุดเหมืองอีกต่อไป หากผู้ใช้ไม่ต้องการจ่ายค่าธรรมเนียมการทำธุรกรรมโดยทฤษฎีแล้วระบบการทำธุรกรรมอาจเผชิญกับความท้าทายในด้านการดำเนินงาน อย่างไรก็ตาม มีโอกาสที่ผู้ใช้จะเต็มใจจ่ายค่าธรรมเนียมการทำธุรกรรมเพื่อให้ทรานแซคชันของพวกเขาได้รับการประมวลผล ซึ่งสร้างความมั่นใจในการดำเนินการต่อไปของระบบ
ความสูงบล็อกจะยังคงเพิ่มขึ้น: แม้ว่าจะถึงจำนวนบิตคอยน์สูงสุด 21 ล้านบิตคอยน์แล้ว ความสูงของบล็อก (จำนวนบล็อกทั้งหมด) จะยังคงเพิ่มขึ้นตลอดเวลาถ้านักขุดยินดีขุดและพัฒนาการทำธุรกรรมเข้าเบียนใหม่ ความสูงของบล็อกไม่ได้จำกัดโดยการเพิ่มจำนวนบิตคอยน์
ศักยภาพในการเปลี่ยนแปลงฉันทามติ: ชุมชนสามารถเสนอการเปลี่ยนแปลงกฎฉันทามติเช่นการเพิ่มอุปทาน bitcoin ทั้งหมดเพื่อให้สามารถสร้างเหรียญใหม่ได้หากจําเป็น
ธุรกรรมคอยน์เบส: ในบล็อกเชนของบิตคอยน์ เหรียญรางวัลของนักขุดจะถูกกระจายผ่านธุรกรรมพิเศษที่รู้จักกันดีว่า "ธุรกรรมคอยน์เบส" หรือ "รางวัลบล็อก" ธุรกรรมนี้มีลักษณะเฉพาะ:
การคํานวณรายได้ต่อบล็อก: รายได้ของนักขุดจะถูกคํานวณทุกครั้งที่มีการขุดบล็อกสําเร็จและยืนยันโดยกลไกฉันทามติของเครือข่าย นักขุด (หรือพูลการขุด) ที่ขุดบล็อกจะได้รับรางวัลบล็อกและค่าธรรมเนียมการทําธุรกรรมสะสมจากธุรกรรมทั้งหมดที่รวมอยู่ในบล็อก
กระบวนการรับรางวัล: เมื่อนักขุดหรือพูลการขุดขุดบล็อกสําเร็จและได้รับการยืนยันจากเครือข่ายพวกเขาจะได้รับรางวัลบล็อกและค่าธรรมเนียมการทําธุรกรรม สิ่งนี้ดําเนินการผ่านธุรกรรม Coinbase ซึ่งแปลงค่าธรรมเนียมและรางวัลเป็นเอาต์พุตธุรกรรมที่ไม่ได้ใช้ (UTXOs) ที่เครดิตไปยังบัญชีของนักขุด
การสร้างต่อเนื่อง: บล็อกถูกสร้างต่อเนื่องในบล็อกเชน บล็อกใหม่สามารถสร้างได้เฉพาะหลังจากที่บล็อกก่อนหน้าได้ถูกขุดเหมืองเรียบร้อยและเพิ่มเข้าสู่โซ่
การทำธุรกรรมหลายรายการต่อบล็อก: บล็อกมีทั่วไปแล้วที่มีการทำธุรกรรมหลายรายการ นักขุดรวมทั้งหมดที่เป็นไปได้ของการทำธุรกรรมเพื่อเพิ่มรายได้จากค่าธุรกรรม แทนที่จะแพ็คเอกสารที่เป็นไปได้เป็นแต่ละรายการ
บล็อกที่เต็มบางส่วน: บล็อกส่วนมากไม่ได้ใช้งานอย่างเต็มที่ นักขุดเริ่มทำงานกับบล็อกถัดไปเมื่อพวกเขาพบแฮชที่ถูกต้องที่ตรงกับความยากลำบาก โดยไม่ว่าบล็อกจะเต็มเต็มหรือไม่
บล็อกที่ว่างเปล่า: บล็อกสามารถขุดได้แม้ว่าจะไม่มีธุรกรรมที่จะรวมอยู่ในบล็อกนั้น บล็อกเหล่านี้ที่เรียกว่าบล็อกที่ว่างเปล่า ยังคงให้รางวัลระบบให้กับนักขุด
กฎของโซ่ที่ยาวที่สุด: เมื่อเกิด fork ระบบเครือข่ายจะตามไปกับโซ่ที่มีหลักฐานขุดเหมืองสะสมมากที่สุด ซึ่งโดยทั่วไปแล้วคือโซ่ที่ยาวที่สุด โหนดจะสลับไปยังโซ่ที่ยาวกว่าเมื่อเป็นชัดเจนว่าโซ่ไหนมีการทำงานมากกว่า
การแก้ไขการใช้จ่ายครั้งที่สอง:
กระบวนการตรวจสอบความถูกต้อง:
การคำนวณค่าธรรมเนียมการทำธุรกรรม: ผู้ใช้สามารถควบคุมค่าธรรมเนียมการทำธุรกรรมเพื่อเร่งความเร็วในการยืนยันธุรกรรมของพวกเขา ค่าธรรมเนียมจะถูกกำหนดโดยสูตรต่อไปนี้:
ค่าธรรมเนียมการทําธุรกรรม = อินพุตทั้งหมด−เอาต์พุตทั้งหมด−เปลี่ยนแปลง
ผู้ใช้กําหนดค่าธรรมเนียมการทําธุรกรรมโดยการปรับจํานวนอินพุตจํานวนเอาต์พุตและจํานวนการเปลี่ยนแปลง
การกระจายรายได้: เมื่อขุดในพูล พูลโหนดจะได้รับรางวัลบล็อก จากนั้นพูลจะกระจายรายได้ให้กับสมาชิกตามพลังการคํานวณที่มีส่วนร่วม การกระจายนี้ดําเนินการผ่านการโอนไปยังกระเป๋าเงินของนักขุด
การขุดที่เห็นแก่ตัว: การขุดแบบเห็นแก่ตัวเป็นกลยุทธ์ที่นักขุด (หรือกลุ่มการขุด) พบบล็อกใหม่ แต่ไม่ได้ออกอากาศทันที พวกเขายังคงทําเหมืองแบบส่วนตัวบนโซ่ของพวกเขา (โซ่ที่ซ่อนอยู่) เมื่อพวกเขาพบบล็อกเพิ่มเติมพวกเขาจะออกอากาศทั้งหมดในครั้งเดียว สิ่งนี้สามารถทําให้งานของนักขุดคนอื่น ๆ เป็นโมฆะและเอียงพลังการคํานวณและรางวัลต่อนักขุดที่เห็นแก่ตัว Bitcoin สามารถ mitiGate.io ผลกระทบของการขุดที่เห็นแก่ตัวโดยการปรับปรุงโปรโตคอลการออกอากาศ
การตรวจสอบการทำธุรกรรม: เมื่อมีการส่งธุรกรรมไปยังโหนดหนึ่ง จะมีการตรวจสอบหลายรายการเพื่อกำหนดให้เพิ่มลงใน mempool หรือไม่:
ตรวจสอบบล็อก: เมื่อโหนดขุดเหรียญได้รับบล็อกใหม่ จะทำการตรวจสอบอย่างละเอียดในบล็อกและธุรกรรมของมัน:
[1] บรรยาย 12 | เทคโนโลยีบล็อกเชนลึกซึ้ง (4): การตกลง pow อย่างลึกลับของบล็อกเชน-geek time:คำประกาศ: