专栏首页区块链大本营用200行Javascript代码,告诉你什么才是真正的“区块链”!

用200行Javascript代码,告诉你什么才是真正的“区块链”!

来源 | blockchain

编译 | 火火酱

责编 | Maozz

出品 | 区块链大本营(blockchain_camp)

话说,咱们过去也发够不少干货文章,不知道各位有没有尝试过跟着操作一遍?

与往期不同的是,今天我们带来的干货有一点特别。这是一个仅由200行Javascript代码实现的区块链。

其实区块链的基本概念非常简单:一个储存着不断加长的有序记录列表的分布式数据库。然而在一般情况下,我们在谈论区块链时其实是在谈论那些“试图用区块链解决的问题”,这两者很容易被混淆。

在比特币和以太坊等受欢迎的区块链项目中也如此,“区块链”这个术语往往与交易、智能合约或者加密货币等概念紧密联系在一起。

这样一来,要想真正理解区块链就更难了(尤其是当你想了解源代码的时候)。接下来,我将会介绍一个名为NaiveChain的超级简单的区块链,只用200行Javascript代码就能将其实现。

确定区块结构

第一个步骤是确定区块结构。为了使事情尽可能简单一些,我们只包含最为必须的元素: index下标、timestamp时间戳、data数据、hash哈希值以及previous hash前置哈希值。

为了保证链的完整性,必须在区块中找到前一个区块的hash散列值

区块hash散列值

为了保持数据的完整性,需要对区块进行hash散列处理。SHA-256会将区块的内容进行加密。需要注意的是,这个hash散列值与“mining挖矿”没有任何关系,因为这里不需要处理Proof of Work工作证明量的问题。

mining挖矿:https://en.bitcoin.it/wiki/Mining

工作量证明:https://en.wikipedia.org/wiki/Proof-of-work_system

生成区块

要想生成一个区块,我们需要知道前一个区块的hash散列值,并且创建所需的其余内容(index、hash散列值、数据和时间戳)。区块数据是由终端用户来提供的。

存储区块

用内存中的Javascript数组来存储区块链。区块链的第一个区块就是所谓的“genesis-block起源块”,是硬编码的。

验证区块的完整性

在任何时间,我们都必须能够确认一个区块或者一条链的区块是否是完整的。当我们从其他节点接收新的区块,并且需要决定是否接受它们时,这一点尤为重要。

选择最长的链

无论在什么时候,链中都应该始终只有一组明确的区块。一旦发生冲突时(例如,两个节点都生成了72号区块),我们就选择区块数目最多的那条链。

与其他节点的通信

节点的核心本质是和其他的节点共享和同步区块链。下面三条规则可以用来保证网络同步:

  1. 当一个节点生成一个新的区块时,它会在网络上散布这个区块。
  2. 当一个节点连接到一个新的对等点时,它会查询最新的区块。
  3. 当一个节点遇到一个index大于当前已知区块的区块时,它要么将该区块添加到当前链中,要么到整个区块链中查询这个区块。

当节点遵循前文所述规则时会发生的一些典型的通讯场景

这里没有使用自动发现对等节点的工具,对等节点的位置(URLs)必须手动进行添加。

控制节点

用户需要能够通过某种方式来控制节点,这一点可以通过设置一个HTTP服务器来实现。

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

  • 列出所有的区块。
  • 利用用户提供的内容创建一个新的区块。
  • 列出或者添加对等点。

下面这个Curl例子就是控制节点的最直接的方法:从节点获取所有块。

#get all blocks from the nodecurl http://localhost:3001/blocks

旋度 http://localhost:3001/blocks

构建结构

这里需要注意的是,节点实际上展现了两个网络服务器:一个是给用户用来控制节点的服务器(HTTP server),另一个是为了实现节点间进行点对点通信的服务器(Websocket HTTP server)。

NaiveChain的主要组成部分

总结

我创造NaiveChain的目的是为了演示和学习。由于它没有“挖矿”算法(PoS of PoW),所以不能在公共网络中使用。但尽管如此,它还是实现了一个能够正常运行的区块链的基本功能。

PoS of PoW:https://en.wikipedia.org/wiki/Proof-of-work_system PoS of PoW

本文分享自微信公众号 - 区块链大本营(blockchain_camp),作者:CSDN App

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 1分钟链圈 | 潘石屹吐槽!区块链、比特币这些东西怎么越看越不明白

    这里是 8 月 21 日的每日1句话新闻晚报,只需1分钟,看看全球最热、最新的区块链新闻。

    区块链大本营
  • 1分钟链圈 | 拒绝滴滴收购的ofo搞起了区块链,誓要奋斗到底;全球首个区块链管理博士DBA开始招生

    区块链大本营
  • 1分钟链圈 | EOS逆势上扬,领涨市值前十加密货币!比特大陆投资人工智能领域

    区块链大本营
  • 腾讯可信区块链方案白皮书 Q&A

    4月24日,腾讯区块链方案白皮书正式发布,具有自主知识产权的腾讯区块链行业解决方案也于官网正式上线(详见http://trustsql.qq.com”)。基于“...

    腾讯TrustSQL
  • 区块链行业缺乏统一标准,成为金融新基建尚存距离

    全国金融标准化技术委员会官网披露的信息显示,2020年6月22日至7月3日,国际电信联盟电信标准化部门(ITU-T)第十六研究组(SG16)全会在线上召开。在该...

    用户7358413
  • 零伽壹深度解析:区块链技术在电力行业的应用展望

    世界各地电力系统发展日新月异。一个多世纪以来,电力系统主要依靠化石燃料发电,并通过杂乱的电网输送给终端用户。公用事业只有一个简单的目标:以低成本提供可靠性高的电...

    用户7573724
  • “本性难改”区块链

    江山易改,本性难移,这句话并不是没有道理的。这是人们在万千次的失败与教训当中所获得的“绝对真理”。如果我们用这句话来形容区块链市场,似乎同样贴切,尽管人们一直都...

    孟永辉
  • 腾讯安全领御区块链亮相2020全球区块链创新发展大会

    今年以来,疫情加速了全球产业的转移和整合,区块链等数字技术受到重点关注。国内外企业纷纷布局区块链,国内多省市也相继出台区块链支持政策。在此背景下,赣州市委、市政...

    腾讯安全
  • 1分钟链圈 | 以太坊被曝“致命报文”漏洞!Fcoin模仿者可能永远跟不上,区块链项目核心竞争力在于无法复制

    这里是 6 月 28 日的每日1句话新闻晚报,只需1分钟,看看全球最热、最新的区块链新闻。

    区块链大本营
  • 区块链的狂热,源自于对区块链的无知

    时至今日,依然有很多人沉醉在数字货币的迷梦里,因为在那里,他们为自己勾画了一个美妙的财富王国。在这样一个财富王国里,区块链则是建筑这一切美好的基石。尽管这座美妙...

    孟永辉

扫码关注云+社区

领取腾讯云代金券