Skip to content

Instantly share code, notes, and snippets.

@ilkou
Created November 5, 2021 23:54
Show Gist options
  • Save ilkou/65c23d5a7e841af59bd9905cd2419f90 to your computer and use it in GitHub Desktop.
Save ilkou/65c23d5a7e841af59bd9905cd2419f90 to your computer and use it in GitHub Desktop.
concept of Blockchain in Javascript
// 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