หากเราดูแนวโน้มในช่วงสองสามปีที่ผ่านมา เราเคยได้ยินเกี่ยวกับบล็อคเชนมาโดยตลอด แต่ไม่มากเกี่ยวกับข้อมูลเฉพาะเจาะจงมากนัก
เราทุกคนต่างทราบดีว่าสกุลเงินดิจิตอล เช่น Bitcoin, Ethereum, Dogecoin, Matic และอื่นๆ นั้นพึ่งพาเทคโนโลยีบล็อคเชน Blockchain เป็นผู้นำเหตุการณ์สำคัญที่ปฏิวัติอุตสาหกรรมมากมายในปี 2021 และปูทางสู่ความสำเร็จครั้งใหม่
Blockchain เป็นวิธีการจัดเก็บข้อมูลในลักษณะที่ยากหรือเป็นไปไม่ได้ที่จะแก้ไข แฮ็ก หรือหลอกลวง เป็นบัญชีแยกประเภทดิจิทัลของธุรกรรมที่ทำซ้ำและกระจายไปทั่วเครือข่ายระบบคอมพิวเตอร์ของบล็อคเชน
เป็นเทคโนโลยีฐานข้อมูลที่ก้าวล้ำซึ่งขับเคลื่อนสกุลเงินดิจิตอลทั้งหมด Blockchain ทำให้แฮ็คหรือโกงระบบทำได้ยากอย่างเหลือเชื่อด้วยการแพร่กระจายสำเนาฐานข้อมูลที่เหมือนกันทั่วทั้งเครือข่าย
แม้ว่า Bitcoin จะเป็นการใช้งานที่โดดเด่นที่สุดสำหรับบล็อคเชน แต่เทคโนโลยีนี้สามารถให้บริการแอพพลิเคชั่นได้หลากหลาย
Cryptocurrencies และ blockchains ได้รับความนิยมเพิ่มขึ้นในช่วงไม่กี่ปีที่ผ่านมา และแนวโน้มนี้คาดว่าจะดำเนินต่อไป
เราจะสร้างบล็อกเชนอย่างง่ายด้วย JavaScript ในบทช่วยสอนนี้ มันจะช่วยให้คุณมีความเข้าใจพื้นฐานเกี่ยวกับวิธีการทำงานของบล็อคเชน
มาเรียกมันว่า MelodyCoin แล้วลงมือทำเลย!
การสร้างบล็อก
ในการเริ่มต้น เราจะสร้างไฟล์ JavaScript ใหม่ ซึ่งเราจะวางโค้ดทั้งหมดของเรา
เรามาเรียกมันว่า main.js และเริ่มต้นด้วยคำอธิบายว่าบล็อคเชนและบล็อคควรมีลักษณะอย่างไร
สร้างคลาส Block และกำหนดฟังก์ชัน Object() { [native code] } เพื่อเริ่มต้น
คุณต้องระบุวันที่และแฮชของบล็อกก่อนหน้าเมื่อสร้างบล็อกใหม่:
นี่คือคำจำกัดความสำหรับแต่ละคุณสมบัติ:
- การประทับเวลาระบุเวลาที่บล็อกถูกสร้างขึ้น คุณสามารถใช้รูปแบบใดก็ได้ที่คุณเลือก (ในกรณีนี้คือเวลาประทับของ UNIX)
- ข้อมูลรูปแบบใด ๆ ที่คุณต้องการเชื่อมต่อกับบล็อกนี้สามารถรวมไว้ในพารามิเตอร์ข้อมูลได้ หากคุณต้องการสร้างสกุลเงินดิจิทัล คุณสามารถเก็บข้อมูลธุรกรรม เช่น ผู้ส่ง/ผู้รับ และจำนวนเงินที่ย้ายมาที่นี่
- PreviousHash เป็นสตริงที่เก็บแฮชของบล็อกก่อนหน้า นี่คือสิ่งที่จะสร้างห่วงโซ่ของบล็อก ซึ่งจะมีความสำคัญอย่างยิ่งในการให้ความสมบูรณ์ของบล็อกเชนของเราในภายหลัง
การสร้างแฮช
แต่ละบล็อกเชื่อมโยงกับบล็อกก่อนหน้า (ด้วยเหตุนี้คุณสมบัติ Hash ก่อนหน้า) นั่นคือแต่ละบล็อกต้องใช้แฮช แฮชคล้ายกับลายนิ้วมือ มันแตกต่างกันในแต่ละบล็อก
แฮชของบล็อกสามารถคำนวณได้โดยส่งเนื้อหาทั้งหมดผ่านฟังก์ชันแฮช
เริ่มต้นด้วยการใช้ฟังก์ชันที่คำนวณแฮชของบล็อกปัจจุบัน
ดังนั้น ภายใต้คลาส Block เราจึงกำหนดฟังก์ชัน calcHash:
อย่างไรก็ตาม JavaScript ไม่รองรับแฮช SHA256 และต้องได้รับจากไลบรารีภายนอก
Crypto-js เป็นแพ็คเกจที่ยอดเยี่ยมที่มีการใช้งานอัลกอริธึมแฮชหลายตัวอย่างปลอดภัย
จากนั้นเราสามารถนำเข้ารหัส main.js ของเราได้
ตอนนี้เรามีฟังก์ชัน คำนวณแฮช() แล้ว มานำไปใช้ในฟังก์ชันบล็อกของเรากัน:
หลังจากอธิบายว่า Block เป็นอย่างไร เราสามารถกำหนดได้ว่า Blockchain ควรเป็นอย่างไร มาสร้างคลาสใหม่กันเถอะ
ในสถานการณ์สมมตินี้ blockchain เป็นวัตถุธรรมดาที่มีห่วงโซ่ทรัพย์สิน นี่คืออาร์เรย์ที่ถือบล็อคทั้งหมดบนห่วงโซ่
ก่อนที่เราจะสามารถเพิ่มบล็อคได้ เราต้องสร้างสิ่งที่เรียกว่า “genesis block” ก่อน นี่เป็นบล็อคแรกในเชน และมีความพิเศษตรงที่ไม่สามารถชี้ไปที่บล็อคก่อนหน้าได้ (อันแรก!)
ดังนั้น ในการสร้างบล็อคกำเนิด ฉันจะเพิ่มฟังก์ชันให้กับคลาสของเราที่ชื่อ createGenesisBlock () กลับไปที่ฟังก์ชัน Object() { [native code] } ของคลาส Blockchain ของเรา
ขณะนี้ เราสามารถรวมบล็อกการกำเนิดได้ทุกเวลาที่เราสร้างอินสแตนซ์ Blockchain ใหม่:
วิธีการบล็อคเชน
ตอนนี้ มาเพิ่มวิธีการในคลาสบล็อคเชนของเรา ซึ่งจะทำให้เราทำสิ่งต่าง ๆ เช่น เพิ่มบล็อคใหม่และดึงบล็อคล่าสุด
ฟังก์ชัน getLatestBlock เป็นฟังก์ชันพื้นฐานที่สุด มันเพียงส่งคืนสมาชิกสุดท้ายของอาร์เรย์ลูกโซ่:
เทคนิค addBlock มีส่วนเกี่ยวข้องมากขึ้นเล็กน้อย
ก่อนที่เราจะสามารถเพิ่มบล็อกใหม่ให้กับเชนของเรา เราต้องตั้งค่าฟิลด์แฮชก่อนหน้าของบล็อกนั้นให้เหมาะสมก่อน
ต้องตั้งค่าเป็นแฮชของบล็อกที่เพิ่มล่าสุดในห่วงโซ่ของเรา เราต้องคำนวณแฮชของบล็อกใหม่ด้วย:
การทดสอบ
มาดูกันว่า MelodyCoin ของเราออกมาเป็นอย่างไร
สร้างอินสแตนซ์บล็อคเชนเพื่อทำสิ่งนี้ให้สำเร็จ มาเพิ่มอีกสองสามช่วงตึก:
เราได้สร้างสองช่วงตึกใหม่ที่นั่น มาดูกันว่าบล็อคเชนของเรามีหน้าตาเป็นอย่างไรในตอนนี้
MelodyCoin จะถูกทำให้เป็นสตริงและจัดรูปแบบด้วยช่องว่างสี่ช่อง:
ตรวจสอบความสมบูรณ์ของบล็อคเชน
บล็อกเชนนั้นยอดเยี่ยมเพราะเมื่อเพิ่มบล็อกแล้ว บล็อกนั้นจะไม่สามารถแก้ไขได้โดยไม่ทำให้ส่วนที่เหลือของห่วงโซ่เป็นโมฆะ
อย่างไรก็ตาม ไม่มีวิธีใดให้ฉันตรวจสอบความสมบูรณ์ของบล็อคเชนของเราด้วยการใช้งานนี้
มาแนะนำฟังก์ชัน isChainValid ให้กับบล็อคเชนของเรา หากห่วงโซ่ถูกต้อง มันจะคืนค่าเป็นจริง มิฉะนั้นจะคืนค่าเป็นเท็จ:
การทดสอบความซื่อสัตย์
ตอนนี้เราสามารถทดสอบความสมบูรณ์ของบล็อคเชนได้แล้ว ถ้าเราดำเนินการตอนนี้ มันจะเป็นการยืนยันว่าโซ่ของเราเป็นของแท้
ให้เราลองเข้าไปยุ่งเกี่ยวกับบล็อคเชนของเรา มาเปลี่ยนบล็อก 2 และเขียนทับเนื้อหากัน (สมมติว่าเราโอน 100 เหรียญแทนที่จะเป็นสี่เหรียญ)
เมื่อเราดำเนินการนี้ เราจะเห็นว่าซอฟต์แวร์รับรู้ถึงความพยายามของเราในการแก้ไขห่วงโซ่
อย่างไรก็ตาม คุณสามารถเชื่อได้ว่ามีวิธีอื่นที่ฉันจะเข้าไปยุ่งเกี่ยวกับเรื่องนี้ ฉันแก้ไขเนื้อหาในบล็อก แต่ไม่ได้คำนวณแฮชใหม่ ดังนั้นคุณสามารถพยายามฉลาดและคำนวณแฮชของบล็อกเดียวกันนั้นใหม่
นั่นคือทั้งหมดที่มีในการตั้งค่าบล็อคเชนขนาดเล็กของเรา! ช่วยให้เราเพิ่มบล็อกใหม่และตรวจจับการปลอมแปลงข้อมูลภายในห่วงโซ่ได้
มีปัญหาสองประการกับบล็อคเชนขนาดเล็กของเราที่เราต้องแก้ไข:
- คอมพิวเตอร์สมัยใหม่นั้นเร็วมากและสามารถเพิ่มบล็อกได้หลายพันบล็อกไปยังเครือข่ายของเราในไม่กี่วินาที เห็นได้ชัดว่าเราไม่ต้องการให้ใครก็ตามส่งสแปมบล็อคเชนของเรา
- บล็อกเชนของเรายังคงเสี่ยงต่อการปลอมแปลง คุณสามารถอัปเดตเนื้อหาของบล็อกแล้วคำนวณแฮช (และแฮชก่อนหน้า) ใหม่สำหรับบล็อกต่อไปนี้ทั้งหมด แม้ว่าคุณจะยุ่งกับมัน คุณก็จะจบลงด้วยโซ่ที่ถูกกฎหมาย
เพื่อจัดการกับข้อกังวลเหล่านี้ บล็อคเชนใช้เทคนิคที่เรียกว่า “การพิสูจน์การทำงาน” คุณต้องแสดงให้เห็นว่าคุณใช้ทรัพยากรการคำนวณจำนวนมากเพื่อสร้างบล็อกโดยใช้วิธีนี้ นี้เรียกอีกอย่างว่า การทำเหมืองแร่.
หลักฐานการทำงานกำหนดให้แฮชของบล็อกเริ่มต้นด้วยศูนย์จำนวนหนึ่ง แต่คุณจะทราบได้อย่างไรว่าแฮชของคุณเหมาะกับกฎนี้หรือไม่
เนื้อหาของบล็อกเป็นตัวกำหนดแฮช ดังนั้นเราจึงได้รับแฮชเดียวกันเสมอ โดยที่เราจะไม่แก้ไขเนื้อหา
แต่ละบล็อกควรมีค่า nonce เพิ่มเป็นโซลูชัน นี่เป็นข้อมูลสุ่มบางส่วนที่เราสามารถอัปเดตได้จนกว่าแฮชของบล็อกของเราจะเริ่มด้วยศูนย์ที่เพียงพอ เนื่องจากคุณไม่สามารถแก้ไขผลลัพธ์ของฟังก์ชันแฮช คุณต้องทดสอบชุดค่าผสมต่างๆ มากมายและหวังว่าจะได้ผลดีที่สุด
แนะนำการขุดสู่ Blockchain
เริ่มต้นด้วยการรวม nonce ในคลาส Block ของเรา nonce เป็นค่าเดียวในบล็อกของเราที่เราสามารถแก้ไขได้เพื่อให้ส่งผลต่อแฮชของบล็อก
เราไม่สามารถแก้ไขการประทับเวลาหรือข้อมูลได้
ต่อไป มาเขียนฟังก์ชั่น mineBlock() ที่จะทำการขุดบล็อกจริง ๆ ฟังก์ชันนี้จะส่งความยากที่จำเป็นเป็นพารามิเตอร์และจะดำเนินการต่อไปจนกว่าแฮชของบล็อกของเราจะเริ่มด้วยศูนย์ที่เพียงพอ
ฉันเพิ่งสร้าง while loop แบบพื้นฐานที่จะทำงานจนกว่า hash ของเราจะเริ่มด้วยเลขศูนย์ที่เพียงพอ เราใช้ความยากเพื่อกำหนดจำนวนศูนย์ที่ต้องการ ด้วยความยาก 5 แฮชของเราต้องเริ่มต้นด้วย 5 ศูนย์
เมื่อแฮชของเรามีเลขศูนย์ไม่เพียงพอ เราจะเพิ่ม nonce ขึ้นหนึ่งค่าและคำนวณค่าแฮชใหม่ และหากเราพบแฮชที่ตรงกับความยาก เราจะบันทึกมันไว้ที่คอนโซล
มีอีกสิ่งหนึ่งที่เราต้องทำ เราไม่ได้นำตัวแปร nonce มาพิจารณาในวิธีการคำนวณแฮชของเรา ดังนั้นนี่คือ:
คลาสบล็อคเชน
มาลองใช้แนวทางใหม่นี้ในการทดสอบในคลาสบล็อคเชนของเรากัน แล้วมาดูกันว่ามันจะเป็นอย่างไร
ในการเริ่มต้น ฉันจะกำหนดความยากของบล็อคเชนของเราในฟังก์ชัน Object() เรากำหนดไว้ที่นี่เนื่องจากเราสามารถนำไปใช้ที่ไหนสักแห่งในภายหลัง
จากนั้นจะต้องแก้ไขฟังก์ชัน addBlock เพื่อให้สามารถขุดบล็อกได้ก่อนที่จะเพิ่มลงในห่วงโซ่ของเรา
ใช้บล็อคเชน
ตอนนี้ มาลองใช้บล็อคเชนใหม่ของเรากับอัลกอริธึมการพิสูจน์การทำงานกัน ที่นี่ เพิ่มคำสั่ง console.log
เมื่อเรารันโค้ดนี้ เราจะสังเกตได้ว่ากระบวนการทำเหมืองไม่ได้รวดเร็วเป็นพิเศษอีกต่อไป
อัลกอริทึมต้องใช้เวลาในการสร้างบล็อกที่มีแฮชที่ขึ้นต้นด้วยศูนย์สามตัว (ตามที่กำหนดค่าตามความยาก)
นั่นคือจุดสิ้นสุดของการตั้งค่าบล็อคเชนพื้นฐานของเรา
เราสามารถควบคุมความเร็วของการเพิ่มบล็อคใหม่ ๆ ในบล็อคเชนของเราได้ด้วยกลไกการพิสูจน์การทำงาน
เป็นคุณลักษณะด้านความปลอดภัยที่สำคัญที่สุดในบล็อกเชน และเมื่อคุณเข้าใจวิธีการทำงานแล้ว ให้สร้างมันขึ้นมาเอง!
เขียนความเห็น