มาสร้าง Blockchain ของเราเองกันเถอะ ( 2 ) , Mining
Mining ( ขุด ) คือกระบวนการสร้าง block. ใหม่ แล้วเพิ่มเข้าไปใน blockchain
มีขั้นตอนการทำงานดังต่อไปนี้
const nonce = bitcoin.proofOfWork(previousBlockHash, currentBlockData);
const blockHash = bitcoin.hashBlock(previousBlockHash, currentBlockData, nonce);
const newBlock = bitcoin.createNewBlock(nonce, previousBlockHash, blockHash);
เรามาดู code ของ function เหล่านี้กันดีกว่า
Blockchain.prototype.createNewBlock = function(nonce, previousBlockHash, hash) {
const newBlock = {
index: this.chain.length + 1,
timestamp: Date.now(),
transactions: this.pendingTransactions,
nonce: nonce,
hash: hash,
previousBlockHash: previousBlockHash
};
this.pendingTransactions = [];
this.chain.push(newBlock);
return newBlock;
};
Blockchain.prototype.hashBlock = function(previousBlockHash, currentBlockData, nonce) {
const dataAsString = previousBlockHash + nonce.toString() + JSON.stringify(currentBlockData);
const hash = sha256(dataAsString);
return hash;
};
Blockchain.prototype.proofOfWork = function(previousBlockHash, currentBlockData) {
let nonce = 0;
let hash = this.hashBlock(previousBlockHash, currentBlockData, nonce);
while (hash.substring(0, 4) !== '0000') {
nonce++;
hash = this.hashBlock(previousBlockHash, currentBlockData, nonce);
}
return nonce;
};
เราควรจะเริ่มดูที่ hashBlock function ซึ่งถูกเรียกใช้บ่อย function นี้ไม่มีอะไรซับซ้อนมาก แค่ทำการ hash ค่าของ previousBlockHash + nonce + currentBlockData ด้วย sha256
proofOfWork function คือการหา hash ที่ขึ้นต้นด้วย 0000 ให้เจอ เราจะเห็นว่า nonce คือตัวแปรที่เพิ่มค่าไปเรื่อยๆ ใน while loop เมื่อเราเจอ nonce ที่ถูกต้องแล้ว function ก็จะ return
const nonce = bitcoin.proofOfWork(previousBlockHash, currentBlockData);
const blockHash = bitcoin.hashBlock(previousBlockHash, currentBlockData, nonce);
const newBlock = bitcoin.createNewBlock(nonce, previousBlockHash, blockHash);
กลับมาดู code ที่พูดในตอนแรกจะเห็นได้ว่า createNewBlock เพียงแค่รับ parameter ที่ได้จาก output ของ proofOfWork และ hashBlock
Articles
- ทำไมธุรกิจรีไซเคิลถึงต้องการซอฟต์แวร์แบบครบวงจร
- Why Recycling Businesses Need a Comprehensive Software Solution
- เพิ่มพลังการตลาดของคุณด้วยระบบ CRM และคำแนะนำที่ขับเคลื่อนโดย Django
- Supercharge Your Marketing with Django-Powered CRM & Personalized Recommendations
- デジタルコンパニオンを作る:日々の励ましと感情的な幸福を支えるボットの開発
- สร้างเพื่อนดิจิทัล: การสร้างบอทเพื่อกำลังใจและความเป็นอยู่ทางอารมณ์ในทุกๆ วัน
- Building a Digital Companion: Creating a Bot for Daily Encouragement and Emotional Well-being
- การเปลี่ยนโฉมการเกษตร: การติดตามสุขภาพพืชด้วย AI สำหรับเกษตรอัจฉริยะ
- Transforming Agriculture: AI-Driven Crop Health Monitoring for Smart Farming
- การสร้างฟีเจอร์การทำงานแบบออฟไลน์สำหรับแอปชาร์จรถ EV: คู่มือการใช้งาน Python
- Building Offline Support for EV Charging Apps: A Python Guide
- การอ่านโค้ดโมดูลขายของ Odoo โดยใช้ Code2Flow
- Code Reading Odoo’s Sales Module Using Code2Flow
- การพัฒนา API ประสิทธิภาพสูงสำหรับการทำฟาร์มทุเรียนในจันทบุรี ประเทศไทย: การเลือก Framework Python และ MongoDB ที่เหมาะสม
- High-Performance API Development for Durian Farming in Chanthaburi, Thailand: Choosing the Right Python Framework with MongoDB
- การเปรียบเทียบคุณสมบัติและความซับซ้อนของ ERPNext และ Odoo
- Comparing Features and Complexity of ERPNext and Odoo
- 用AR增强电商体验:移动应用中的3D产品预览指南
- 「ARでeコマースを強化:モバイルアプリにおける3D商品プレビューのガイド」
- เพิ่มประสบการณ์อีคอมเมิร์ซด้วย AR: คู่มือการแสดงสินค้าด้วย 3D บนแอปมือถือ
Our Products
Articles
- ทำไมธุรกิจรีไซเคิลถึงต้องการซอฟต์แวร์แบบครบวงจร
- Why Recycling Businesses Need a Comprehensive Software Solution
- เพิ่มพลังการตลาดของคุณด้วยระบบ CRM และคำแนะนำที่ขับเคลื่อนโดย Django
- Supercharge Your Marketing with Django-Powered CRM & Personalized Recommendations
- デジタルコンパニオンを作る:日々の励ましと感情的な幸福を支えるボットの開発
- สร้างเพื่อนดิจิทัล: การสร้างบอทเพื่อกำลังใจและความเป็นอยู่ทางอารมณ์ในทุกๆ วัน
- Building a Digital Companion: Creating a Bot for Daily Encouragement and Emotional Well-being
- การเปลี่ยนโฉมการเกษตร: การติดตามสุขภาพพืชด้วย AI สำหรับเกษตรอัจฉริยะ
- Transforming Agriculture: AI-Driven Crop Health Monitoring for Smart Farming
- การสร้างฟีเจอร์การทำงานแบบออฟไลน์สำหรับแอปชาร์จรถ EV: คู่มือการใช้งาน Python
- Building Offline Support for EV Charging Apps: A Python Guide
- การอ่านโค้ดโมดูลขายของ Odoo โดยใช้ Code2Flow
- Code Reading Odoo’s Sales Module Using Code2Flow
- การพัฒนา API ประสิทธิภาพสูงสำหรับการทำฟาร์มทุเรียนในจันทบุรี ประเทศไทย: การเลือก Framework Python และ MongoDB ที่เหมาะสม
- High-Performance API Development for Durian Farming in Chanthaburi, Thailand: Choosing the Right Python Framework with MongoDB
- การเปรียบเทียบคุณสมบัติและความซับซ้อนของ ERPNext และ Odoo
- Comparing Features and Complexity of ERPNext and Odoo
- 用AR增强电商体验:移动应用中的3D产品预览指南
- 「ARでeコマースを強化:モバイルアプリにおける3D商品プレビューのガイド」
- เพิ่มประสบการณ์อีคอมเมิร์ซด้วย AR: คู่มือการแสดงสินค้าด้วย 3D บนแอปมือถือ