新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > 互联网百科 > 电子商务

如何用web前端JS代码实现超级简单的区块链

时间:2019-07-04 16:06:42  来源:  作者:

区块链作为下一代颠覆性的核心技术,吸引了很多人的关注,区块链的基本概念非常简单:一个分布式数据库维持不断增长的有序记录列表。然而当我们谈论区块链时,我们也会谈论我们用区块链所要解决的问题,这二者通常很容易弄混淆。流行的基于区块链的项目如比特币和以太坊就是这种情况 。术语“区块链”通常与交易、智能合约或加密货币等概念紧密相关。

如何用web前端JS代码实现超级简单的区块链

 

这使得理解区块链是一项必然要艰巨的任务。特别是源码级别的理解。在这里,我将介绍一个使用200行代码实现的超级简单的区块链——NaiveChain。

块结构

第一个逻辑步骤是确定块结构。为了让事情尽可能简单,我们只包含最必要的:索引(index),时间戳(timestamp),数据(data),哈希(hash)和上一个哈希(previousHash)。

class Block {

constructor(index, previousHash, timestamp, data, hash) {

this.index = index;

this.previousHash = previousHash.toString();

this.timestamp = timestamp;

this.data = data;

this.hash = hash.toString();

}

}

块哈希

该块需要被哈希运算以保持数据的完整性。SHA-256被用来做哈希算法处理块的内容。需要注意的是这个哈希与“挖矿” 无关,因为没有解决工作量证明(Proof Of Work )的问题。

var calculateHash = (index, previousHash, timestamp, data) => {

return CryptoJS.SHA256(index + previousHash + timestamp + data).toString();

};

创建块

要创建一个块,我们必须知道上一个块的哈希,并创建剩余的所需内容(=索引,哈希,数据和时间戳)。块数据是由终端用户提供。

var generateNextBlock = (blockData) => {

var previousBlock = getLatestBlock();

var nextIndex = previousBlock.index + 1;

var nextTimestamp = new Date().getTime() / 1000;

var nextHash = calculateHash(nextIndex, previousBlock.hash, nextTimestamp, blockData);

return new Block(nextIndex, previousBlock.hash, nextTimestamp, blockData, extHash);

};

存储块

内存中的JAVAscript数组用于存储区块链。区块链的第一个区块也叫“创世纪块(译者著:genesis-block,区块链中的第一个块)”,它是直接写死的。

var getGenesisBlock = () => {

return new Block(0, "0", 1465154705, "my genesis block!!", "816534932c2b7154836da6afc367695e6337db8a921823784c14378abed4f7d7");

};

var blockchain = [getGenesisBlock()];

验证块的完整性

在任何时候,我们必须能够验证块或区块链的完整性。特别是当我们从其他节点接收到新块时,并且必须决定是否接受它们。

var isValidNewBlock = (newBlock, previousBlock) => {

if (previousBlock.index + 1 !== newBlock.index) {

console.log('invalid index');

return false;

} else if (previousBlock.hash !== newBlock.previousHash) {

console.log('invalid previoushash');

return false;

} else if (calculateHashForBlock(newBlock) !== newBlock.hash) {

console.log('invalid hash: ' + calculateHashForBlock(newBlock) + ' ' + ewBlock.hash);

return false;

}

return true;

};

选择最长的链

任意时间,链中应始终只有一组块。如果发生冲突(例如下图中两个节点都生成id 为72的块),我们选择具有最长块数的链。

var replaceChain = (newBlocks) => {

if (isValidChain(newBlocks) && newBlocks.length > blockchain.length) {

console.log('Received blockchain is valid. Replacing current blockchain with received blockchain');

blockchain = newBlocks;

broadcast(responseLatestMsg());

} else {

console.log('Received blockchain invalid');

}

};

与其他节点通信

一个节点的最重要的职能是与其他节点共享和同步区块链。以下规则用来保持网络同步。

当一个节点产生一个新块时,它将它广播到网络

当一个节点连接到一个新的节点时,它将查询最新的块

当一个节点遇到一个索引大于当前已知块的块时,它会将该块添加到当前链中,或者查询完整的区块链。

我们暂未实现节点自动发现,必须手动添加对等点的位置(=URLs)。

控制节点

用户必须能够以某种方式控制节点。这是通过设置HTTP服务器完成的。

var initHttpserver = () => {

var App = express();

app.use(bodyParser.json());

app.get('/blocks', (req, res) => res.send(JSON.stringify(blockchain)));

app.post('/mineBlock', (req, res) => {

var newBlock = generateNextBlock(req.body.data);

addBlock(newBlock);

broadcast(responseLatestMsg());

console.log('block added: ' + JSON.stringify(newBlock));

res.send();

});

app.get('/peers', (req, res) => {

res.send(sockets.map(s => s._socket.remoteAddress + ':' + s._socket.remotePort));

});

app.post('/addPeer', (req, res) => {

connectToPeers([req.body.peer]);

res.send();

});

app.listen(http_port, () => console.log('Listening http on port: ' + http_port));

};

如上所示,用户能够通过以下方式与节点交互:

列出所有的块

用用户给出的内容创建一个新块

列出或添加节点

控制节点最直接的方法是使用Curl:

#get all blocks from the node

curl http://localhost:3001/blocks

架构

值得注意的是,一个节点实际上暴露了两个web服务器:一个用于控制节点(HTTP服务器),一个用于节点之间的点对点通信(Websocket HTTP服务器)。

结论

NaiveChain是为演示和学习目的而创建的。因为它不具有“挖矿”算法(PoS 或者 PoW),不能在公共网络中使用。尽管如此,它仍然实现了功能区块链的基本功能。

web前端的功能远不止这些,想学习更多web前端知识,可以关注“武汉千锋“微信公众号,获取两周免费试听资格!



Tags:区块链   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
本文主要针对想了解区块链,而且毫无专业技术跟金融背景的人,对于区块链的与数字货币的知识做了一些汇总,如果您有更好的见解,可以留言一起完善! 什么是区块链?区块链(Blockchain...【详细内容】
2019-09-26   区块链  点击:(9)  评论:(0)  加入收藏
零知识证明(Zero-Knowledge Proof或Zero-Knowledge Protocol)是一种基于概率的验证方法,它包括“类似事实的陈述”和“关于个人知识的陈述”。验证者基于一定的随机性来询问证...【详细内容】
2019-09-24   区块链  点击:(10)  评论:(0)  加入收藏
数字货币是随着经济发展出现的依托于互联网创建、发行及流通的虚拟货币,虽然有各种机密机制的保护,但由于用户的不够谨慎,会出现各种安全漏洞,今天小编带大家看一下七个最新的区...【详细内容】
2019-09-24   区块链  点击:(21)  评论:(0)  加入收藏
从古至今,骗子这个行当一直都是经久不衰,上至皇宫贵族,下至农夫小民,没有人没被他们骗过,而他们也像蝗虫一样,什么行业发展的火热,他们就涌入哪个行业,最近区块链产业发展迅速,区...【详细内容】
2019-09-06   区块链  点击:(28)  评论:(0)  加入收藏
初入链圈,很多人都可能被各种专业名词搞得晕头转向,因此,今天整理了最常见48个区块链名词供大家参考。1、Blockchain——区块链区块链是分布式数据存储、点对点传输...【详细内容】
2019-09-03   区块链  点击:(15)  评论:(0)  加入收藏
本文根本上介绍区块链的架构内涵,先概括区块链的本质,以发展的眼光给出一个区块链的高阶架构,并对高阶架构的各个模块进行详细的说明。 本文是基于作者近几年来对各种区块链平...【详细内容】
2019-08-19   区块链  点击:(18)  评论:(0)  加入收藏
目录: 1、概述 2、区块链与物流发展现状 3、区块链与其他技术的融合 4、区块链与物流的融合 5、应用场景与模式 6、方向一:流程优化 7、方向二:物流征信 8、方向三:物流追踪 ...【详细内容】
2019-08-19   区块链  点击:(30)  评论:(0)  加入收藏
区块链技术可以是一个公开的分类账(任何人都可以看到),也可以是一个受许可的网络(只有那些被授权的人可以看到),它解决了供应链的挑战,因为它是一个不可改变的记录,在网络参与者...【详细内容】
2019-08-14   区块链  点击:(18)  评论:(0)  加入收藏
EOS是什么EOSIO是一个它开源的区块链项目,旨在实现分散式应用程序的垂直和水平扩展(“EOSIO软件”),并可用于启动私有和公共区块链网络。这是通过类似操作系统的构造实现的,可以...【详细内容】
2019-08-07   区块链  点击:(34)  评论:(0)  加入收藏
监测5G、物联网和区块链技术的增长将是至关重要的,因为这三种卓越技术将塑造我们以及互联网的未来。...【详细内容】
2019-06-18   区块链  点击:(17)  评论:(0)  加入收藏
区块链,是一个可以为很多行业提供服务的技术——例如让某个企业使用区块链存储保存重要数据,或者确保为音乐支付适当的版税等等。如今,区块链已经发展成为可以改变现...【详细内容】
2019-08-01   区块链  点击:(48)  评论:(0)  加入收藏
EOS是什么EOS是Enterprise Operation System的缩写,它是商用分布式应用设计的一款区块链操作系统。EOS是引入的一种新的区块链架构EOSIO,用于实现分布式应用的性能扩展。EOS并...【详细内容】
2019-08-01   区块链  点击:(28)  评论:(0)  加入收藏
今年最让人津津乐道的事情,一个是人民群众对春晚的吐槽,还有一个就是徐小平内部微信曝光重仓“区块链”,从而引来金融圈与互联网圈的关注。如今两个月过去了,“比特币”“区块链...【详细内容】
2019-07-25   区块链  点击:(41)  评论:(0)  加入收藏
存储并不是个新词,随着互联网技术的快速发展,企业级存储、云存储等已成为人们工作生活的标配。与此同时,伴随区块链技术的发展与成熟,区块链存储的优势和特点开始受到多方关注...【详细内容】
2019-07-23   区块链  点击:(9)  评论:(0)  加入收藏
李强(化名)至今还不愿相信自己居然也踩了雷。“我是个比特币的矿工,自认看过了上百个资金盘,也绕过了很多坑。没想到最后还是栽在了波场(超级)社区。”继80万会员注册的Tokenstore...【详细内容】
2019-07-10   区块链  点击:(26)  评论:(0)  加入收藏
区块链作为下一代颠覆性的核心技术,吸引了很多人的关注,区块链的基本概念非常简单:一个分布式数据库维持不断增长的有序记录列表。然而当我们谈论区块链时,我们也会谈论我们用区...【详细内容】
2019-07-04   区块链  点击:(39)  评论:(0)  加入收藏
区块链作为下一代颠覆性的核心技术,吸引了很多人的关注,区块链的基本概念非常简单:一个分布式数据库维持不断增长的有序记录列表。然而当我们谈论区块链时,我们也会谈论我们用区...【详细内容】
2019-07-04   区块链  点击:(26)  评论:(0)  加入收藏
区块链在今年合法了!还是国家备案的那种,然而这个头一开,什么工商农士银行,网易,阿里,腾讯,也都来分一杯羹,可谓八仙过海各显神通。而各级政府也是对于区块链这一新兴产业也是大力扶...【详细内容】
2019-06-19   区块链  点击:(11)  评论:(0)  加入收藏
很多人错过早期比特币,以太坊,非常后悔,于是被传销者看重了这种心理,向其宣传这是一个百倍千倍项目,忽悠人购买。 不过有些真正的区块链项目也是这样宣传的,神化区块链,或者过分夸...【详细内容】
2019-06-18   区块链  点击:(22)  评论:(0)  加入收藏
有些人啊,有点代码技术,再拉点有背景人物,就说我要做1C0,我要给大家一种加密货币,然后开始收以太坊或者其他加密货币兑钱,对于很多区块链行业新手而言,他发的币到底是真的假的呢?下...【详细内容】
2019-06-18   区块链  点击:(23)  评论:(0)  加入收藏
推荐资讯
相关文章
栏目更新
栏目热门