Created
November 5, 2021 23:54
-
-
Save ilkou/65c23d5a7e841af59bd9905cd2419f90 to your computer and use it in GitHub Desktop.
concept of Blockchain in Javascript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// A block is stored as a tuple of [parent_hash, transactions, hash_itself] | |
const { | |
createHash, | |
} = require('crypto'); | |
// get hash of some data | |
function hash(data) { | |
return createHash('sha256').update(data).digest('hex'); | |
} | |
// global chain | |
let chain = []; | |
// function to create a block | |
function create_block(transactions, parent_hash) { | |
let hash_itself; | |
if (Array.isArray(transactions)) | |
hash_itself = hash(transactions.join('').concat(parent_hash)); | |
else | |
hash_itself = hash(transactions.concat(parent_hash)); | |
let block = [parent_hash, transactions, hash_itself]; | |
chain.push(block); | |
return block; | |
} | |
// function to create the genesis block (first block) | |
function create_genesis_block(transactions) { | |
let genesis_block = create_block(transactions, 0); | |
chain = [genesis_block]; | |
return genesis_block; | |
} | |
let genesis_block = create_genesis_block("X paid $100 to Y") | |
genesis_block_hash = genesis_block[0]; | |
// console.log("the hash of the genesis_block: ", genesis_block_hash); | |
let block1 = create_block(["Y paid $20 to Z", "X paid $10 to P"], genesis_block_hash); | |
console.log("Blockchain: ", chain); | |
/** Example output | |
Blockchain: [ | |
[ | |
0, | |
'X paid $100 to Y', | |
'0ccc89g789bdf89gbmlf6knj5k6n75gkj6nk5j6gn5k6jng56jngyk98dgb8df89' | |
], | |
[ | |
'0ccc89g789bdf89gbmlf6knj5k6n75gkj6nk5j6gn5k6jng56jngyk98dgb8df89', | |
[ 'Y paid $20 to Z', 'X paid $10 to P' ], | |
'iuuukjn45j6ng4j56nk5j6n45jg6n4kg5j6ng4j4ntgk4jn5gtjk4ntkj4ngtj45' | |
] | |
] | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment