Question
In javascript and HTML, seperate code please, and show that it works! Assignment You are going to create your own Blockchain (just like in the
In javascript and HTML, seperate code please, and show that it works!
Assignment
You are going to create your own Blockchain (just like in the video) with only one little difference. He uses an Array to store his Blockchain, you are simply going to do this making the Blockchain a List.
Differences will be;
Block object will need a pointer to next (and previous if implemented doubly which I recommend)
Your Block will NOT need an index
Your Block will NOT need a timestamp.
Blockchain Object will need a pointer to head and tail.
Blockchain will need to implement push (you should have this).
The key will be writing the isChainValid() function
You must use a 64 bit or greater Hash Function
For the output you will create a Blockchain that allows the user to input data and push that onto the end of the node. When the user does that the output should be the results of the isChainValid() function.
You will then create a Button that will invalidate the Blockchain by directly changing the content of the head. It should then output isChainValid() to show that isChainValid() works correctly.
Note: You do not need to implement the Proof of Work capability.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
This code is not working but it should help you get started
//html
Input a Number:
----------------------------------------------
//Javascript
// linked list var Node = function(a) { this.next = null; this.prev = null; this.key = SHA256(a); return this; }
var List = function(a) { this.head = null; this.tail = null; this.length = 0; return this; }
// converts list to string List.prototype.listToString = function() { var str = ''; //insert string here var anode = this.head; while (anode != null) { str += anode.key + ' '; anode = anode.next; } return str; }
List.prototype.push = function(a) { var node = new Node(a); node.c = a; if (this.head == null) { this.head = node; this.tail = node; this.length++; return node; }
node.prev = this.tail; this.tail.next = node; this.tail = node; this.length++; return node; }
List.prototype.pop = function() { var poppedNode = this.tail; if (this.head == null) { alert(''); //alerts. return null; } if (this.head == this.tail) { this.head = null; this.tail = null; this.length--; return poppedNode; } this.tail = this.tail.prev; this.tail.next = null; this.length--; return poppedNode; }
var L = new List(); var allblocks = new List();
//push and pop output to HTML document function pushNode(value) { value = document.getElementById('value').value; L.push(value); document.getElementById('output0').innerHTML = L.listToString(); }
function popNode() { L.pop(); document.getElementById('output0').innerHTML = L.listToString(); }
// function to check if block chain is valid in list function BlockchainIsValid(value) { value = document.getElementById('value').value; var key = SHA256(value); var anode = L.head; var result = 'SHA256'; while (anode != null) {
if (anode.key == key) { result = 'Block Chian is valid'; document.getElementById('output1').innerHTML = result; return result; }
else (anode.key != key) { result = "Block Chain isn't valid"; document.getElementById(result).innerHTML = result; return result; } anode = anode.next; } }
// class Block { new constructor(data, previousHash = ''){ this.data = data; this.previousHash = previousHash; this.hash = ''; } calculateHash(){ return SHA256 (this.previousHash + JSON.stringify(this.data)).toString(); } }
class Blockchain{
new constructor(){ this.chain = [this.createGenesisBlock()]; }
createGenesisBlock(){ return new Block(0,"01/01/2018", "Genesis Block", "0"); }
getLatestBlock(){ return this.chain(this.chain.length -1); }
addBLock(newBlock){ newBlock.previousHash = this.getLatestBlock().hash; newBlock.hash = newBlock.calculateHash(); this.chain.push(newBlock); } }
let Rarecoin = Blockchain(); Rarecoin.addBlock(new Block({amount: 4})); Rarecoin.addBlock(new Block({amount: 10}));
// Secure Hash Algorithm SHA256SUM function SHA256(s){
var chrsz = 8; var hexcase = 0;
function safe_add (x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF); var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF); }
function S (X, n) { return ( X >>> n ) | (X << (32 - n)); } function R (X, n) { return ( X >>> n ); } function Ch(x, y, z) { return ((x & y) ^ ((~x) & z)); } function Maj(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); } function Sigma0256(x) { return (S(x, 2) ^ S(x, 13) ^ S(x, 22)); } function Sigma1256(x) { return (S(x, 6) ^ S(x, 11) ^ S(x, 25)); } function Gamma0256(x) { return (S(x, 7) ^ S(x, 18) ^ R(x, 3)); } function Gamma1256(x) { return (S(x, 17) ^ S(x, 19) ^ R(x, 10)); }
function core_sha256 (m, l) {
var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2); var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19); var W = new Array(64); var a, b, c, d, e, f, g, h, i, j; var T1, T2;
m[l >> 5] |= 0x80 << (24 - l % 32); m[((l + 64 >> 9) << 4) + 15] = l;
for ( var i = 0; i a = HASH[0]; b = HASH[1]; c = HASH[2]; d = HASH[3]; e = HASH[4]; f = HASH[5]; g = HASH[6]; h = HASH[7]; for ( var j = 0; j<64; j++) { if (j < 16) W[j] = m[j + i]; else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]); T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]); T2 = safe_add(Sigma0256(a), Maj(a, b, c)); h = g; g = f; f = e; e = safe_add(d, T1); d = c; c = b; b = a; a = safe_add(T1, T2); } HASH[0] = safe_add(a, HASH[0]); HASH[1] = safe_add(b, HASH[1]); HASH[2] = safe_add(c, HASH[2]); HASH[3] = safe_add(d, HASH[3]); HASH[4] = safe_add(e, HASH[4]); HASH[5] = safe_add(f, HASH[5]); HASH[6] = safe_add(g, HASH[6]); HASH[7] = safe_add(h, HASH[7]); } return HASH; } function str2binb (str) { var bin = Array(); var mask = (1 << chrsz) - 1; for(var i = 0; i < str.length * chrsz; i += chrsz) { bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32); } return bin; } function Utf8Encode(string) { string = string.replace(/ /g," "); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; } function binb2hex (binarray) { var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var str = ""; for(var i = 0; i < binarray.length * 4; i++) { str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) + hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF); } return str; } s = Utf8Encode(s); return binb2hex(core_sha256(str2binb(s), s.length * chrsz)); }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started