您当前的位置:首页 > 互联网百科 > 电子商务

如何用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:区块链   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
作为一个不断增长的行业,区块链对其专业人员有着巨大的需求。Upwork的报告显示,仅在过去连续三个季度,与区块链技术相关的工作岗位就增加了2000%。大公司和初创企业都希望雇佣...【详细内容】
2021-10-20  Tags: 区块链  点击:(33)  评论:(0)  加入收藏
区块链经济是基于区块链技术而产生的一种新经济现象。区块链是一个去中心化的分布式数据库,该数据库由一串使用密码学方法产生的数据区块有序连接而成,区块中包含有一定时间内...【详细内容】
2021-09-18  Tags: 区块链  点击:(28)  评论:(0)  加入收藏
我们来回顾一下,传统的合同签约步骤是这样的:执行传统合同需要人工验证,以检查条款和条件,并根据书面协议决定下一步。1、费时 - 检查合同条款,审核批准,再进行后续等步骤2、资源...【详细内容】
2021-07-14  Tags: 区块链  点击:(60)  评论:(0)  加入收藏
区块链技术带来了互联网的变革,将互联网从“信息互联网”带向“价值互联网”,我们也渐渐发现,最初被形象地称为“信息高速公路”的互联网处理的是“信息”,而区块链处理的是“价...【详细内容】
2021-07-13  Tags: 区块链  点击:(61)  评论:(0)  加入收藏
图片来源@视觉中国文丨夏玩醇社交平台和资讯网站上,众多未知来源的图片引来人们的猜测,好奇者会花费大量时间在评论区争吵。这也许是平台和内容创作者乐于看到的情况。更多的...【详细内容】
2021-06-04  Tags: 区块链  点击:(61)  评论:(0)  加入收藏
我们日常通用货币是人民币 (CNY),美国通用货币是美元 (USD),俄罗斯通用货币是卢布 (RUB)。那么,区块链中的通用货币是什么呢? 是泰达币 (USDT)。乍一看,USDT 与 USD 很像,那它们...【详细内容】
2021-06-04  Tags: 区块链  点击:(132)  评论:(0)  加入收藏
欧科链讯:本文为读者了解区块链这项前沿技术提供基础支持。作者对区块链特征、优势、应用等层面进行讲解,言简意赅,通俗易懂。我相信你们最近应该听到过“区块链”一词,也许是在...【详细内容】
2021-05-18  Tags: 区块链  点击:(104)  评论:(0)  加入收藏
前几期我们提到了,关于区块链的基本概念、安全性等。本期从八个点为大家解读区块链的优势。 一、链条的准确性区块链网络上的交易由数以千计的计算机网络批准。这消除了几乎...【详细内容】
2021-05-14  Tags: 区块链  点击:(87)  评论:(0)  加入收藏
今天动荡的市场,从研究性的思维模式向克服恐惧和不信任的思维模式转变,对“价值的数字化”至关重要。要想根除遗留系统中隐藏的价值,或因为低效流程而留下的资金,就意味着要转向...【详细内容】
2021-04-21  Tags: 区块链  点击:(147)  评论:(0)  加入收藏
区块链起源于技术创新,但更重要的是,技术创新带来的模式创新和思维创新。回顾一下互联网+的历程,初始只是将传统企业互联网化、移动化,发展到现在,许多传统企业已经运用“互联网...【详细内容】
2021-04-21  Tags: 区块链  点击:(210)  评论:(0)  加入收藏
▌简易百科推荐
众所周知,如今我国的互联网规模已经发展的相当大了,据中国互联网络信息中心发布的有关数据显示,目前我国的网民规模在多年的增长后,已涨至10.11亿人之多,这也让我国的互联网普及...【详细内容】
2021-12-24  财料    Tags:电商   点击:(8)  评论:(0)  加入收藏
都说美妆不好做,为什么她们只用了7天的时间,就赚到了176万呢?你可能会说,她们应该是烧了不少钱吧。刚开始我也是这样认为的,但我具体的了解以后啊,发现他们在推广方面不但没有花钱...【详细内容】
2021-12-17  江略    Tags:生意   点击:(8)  评论:(0)  加入收藏
在过去所有的连锁企业老板,之所以能够躺着赚钱,是因为有无数个加盟店、直营店在为他打工。同理在在数字化时代,普通人想躺着赚钱,就要学会开线上连锁店。何为线上连锁店呢?主要分...【详细内容】
2021-12-17  森林聊商业    Tags:线上连锁店   点击:(10)  评论:(0)  加入收藏
在现在的国内市场上,大部分做外贸的老板们都会选择在facebook上投广告,选择facebook不只是因为这个平台是全球最大的社交媒体网络,有很多活跃用户(根据调查facebook月活跃用户至...【详细内容】
2021-12-17  A丝路赞学院    Tags:Facebook   点击:(10)  评论:(0)  加入收藏
eBay作为全球电商巨头,在全球拥有大量消费者,主要目标市场包括美国和英国,2021年已经临近年末,近日该平台2021的热销品类出炉。截图自ebay export 官网eBay export公布了2021年...【详细内容】
2021-12-15  飞鸟国际    Tags:eBay   点击:(11)  评论:(0)  加入收藏
想知道京东服饰内衣都有哪些类目吗?想知道如何才能入驻服饰内衣类目吗?想知道服饰内衣类目是否需要特殊资质吗?小编为您详细解析!京东内衣类目旗舰店、专卖店采取自荐品牌入驻,目...【详细内容】
2021-12-08  猫店侠    Tags:京东入驻   点击:(17)  评论:(0)  加入收藏
亚马逊跨境电商有很多英文简称,刚入行的新手卖家或者正在学习的人总是记不清。今天为大家整理一下这些基本名词概念,帮助大家理解。一、Listing就是产品详情页,在亚马逊上架的...【详细内容】
2021-12-08  奋斗的邵先生    Tags:亚马逊   点击:(14)  评论:(0)  加入收藏
在今天上午召开的 AWS re:Invent 会议上,亚马逊宣布以预览版的形式推出“AWS Private 5G”。这项新服务皆在使部署和管理自己的私人网络变得容易,解决企业在利用 5G 方面面临...【详细内容】
2021-12-01  cnBeta    Tags:亚马逊   点击:(22)  评论:(0)  加入收藏
新手小白如何在头条上和抖音上开小店卖货,经验免费分享给你们,今天我终于要开始助农了,今天也终于把三农的小店开起来了,交了2000的保证金,打算先从水果开始,先考虑上架两款水果,...【详细内容】
2021-11-30  田开心Pro  今日头条  Tags:头条   点击:(14)  评论:(0)  加入收藏
当你下单了一件北京的羽绒服——商家打包 小哥上门揽件后——小哥揽件 先统一送到当地转运中心——转运中心 在自动集包线 把多个相同市县的...【详细内容】
2021-11-26  Hello阿里科技    Tags:快递   点击:(13)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条