มาสร้าง 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

Our Products


Get in Touch with us

Speak to Us or Whatsapp(+66) 83001 0222

Chat with Us on LINEiiitum1984

Our HeadquartersChanthaburi, Thailand

Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Fatal error: Uncaught ErrorException: md5_file(/var/www/html/wp-content/litespeed/css/9001ed569422e770de18c2448176477d.css.tmp): failed to open stream: No such file or directory in /var/www/html/wp-content/plugins/litespeed-cache/src/optimizer.cls.php:121 Stack trace: #0 [internal function]: litespeed_exception_handler(2, 'md5_file(/var/w...', '/var/www/html/w...', 121, Array) #1 /var/www/html/wp-content/plugins/litespeed-cache/src/optimizer.cls.php(121): md5_file('/var/www/html/w...') #2 /var/www/html/wp-content/plugins/litespeed-cache/src/optimize.cls.php(776): LiteSpeed\Optimizer->serve('https://simplic...', 'css', true, Array) #3 /var/www/html/wp-content/plugins/litespeed-cache/src/optimize.cls.php(305): LiteSpeed\Optimize->_build_hash_url(Array) #4 /var/www/html/wp-content/plugins/litespeed-cache/src/optimize.cls.php(238): LiteSpeed\Optimize->_optimize() #5 /var/www/html/wp-includes/class-wp-hook.php(287): LiteSpeed\Optimize->finalize('...') #6 /var/www/html/wp-includes/plugin.php(206): WP_Hook->apply_ in /var/www/html/wp-content/plugins/litespeed-cache/src/optimizer.cls.php on line 121