专栏首页AI研习社200 行 Javascript 代码构造一个区块链

200 行 Javascript 代码构造一个区块链

本文为 AI 研习社编译的技术博客,原标题 A blockchain in 200 lines of code,作者为 Lauri Hartikka。 翻译 | 余杭 校对 | 祁晓君 整理 | 凡江

区块链的基础概念是非常简单的:一个有序递增记录列表的分布式数据库。然而,当我们在谈论区块链时很容易和用区块链来解决问题的过程混淆。这在如今较流行的以区块链为底层技术的项目,如比特币以及以太坊中也会存在这样的问题。“区块链”这个概念经常会和以下几个概念联系起来,比如交易,智能合约,或者加密货币。

这使得理解区块链变得更加艰难,特别是从源代码角度。在这篇文章中我会用 200 行的 Javascript 代码构建一个简单的区块链, 叫做 NaiveChain(https://github.com/lhartikk/naivechain)。

区块构造

第一个逻辑上的步骤是决定区块的构造。为了尽可能简单,只包含了必要 的几个部分:索引,时间戳,数据,哈希以及前一个区块的哈希。

区块中必须包含前一个区块的哈希值来保证链的完整性。

区块哈希

需要对区块进行哈希运算来保持数据的完整性。对区块内容进行 SHA-256 散列。这里的哈希运算与挖矿毫无关联,因为这里不包含工作量证明问题。

生成一个区块

为了生成一个区块,我们必须知道前一个区块的哈希值以及创建区块内容要求的剩余部分(即索引,哈希,数据,以及时间戳)。区块数据由最后一个使用者提供。

存储区块

内存中的 Javascript 用来存储区块链。区块链中的第一个区块被称作 “成因块”,它是采用硬编码编写的。

验证区块的完整性

在任意一个时间点我们必须能够验证一个区块或区块链的数据完整性。特别是有其他节点的新区块接入时需决定是否接受它们。

选择最长链

无论在什么时间点,都应该只有一条明确的区块链。在有冲突的情况下,选择最大数值区块所在的那条链。

和其他节点沟通

节点的一个重要部分是与链上的其他节点共享信息并在链上同步。下面的规则是用来确保链上节点的同步。

  • 当一个节点生成一个新的区块,会在网络上进行广播。
  • 当一个节点链接到一个新的点时,它会对最后一个区块发起请求。
  • 当一个新的节点碰见一个区块的索引大于当前已知区块时,它会把这个区块添加到当前链上或是向整个区块链发起请求。

这是当节点遵循规定协议时的一些经典的通讯场景

不使用自动对等探索。点的位置(即 URL) 必须被手动添加。

控制节点

从某种程度上说,用户必须能够控制他们的节点。这通过建立 HTTP 服务器来完成。

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

  • 列出所有的区块
  • 创建一个新的区块,区块内容由用户提供
  • 列出或是添加点

控制节点最直接了当的方法是通过 Curl :

架构

应该指出的一点是事实上一个节点需要两个网络服务器:其中一个服务器是让用户能够控制节点(即 HTTP 服务器),另一个服务器是供节点间进行点对点通信用的。(Websocket HTTP 服务器)

NaiveChain 的主要组成部分

结论

NaiveChain 主要是用来演示和学习的。因为它并不包含挖矿算法(工作量证明或是权益证明),所以它不能在公网中使用。尽管如此,它还是包含了功能区块链的基本特征

你可以通过Github repository 来获取更多的技术细节(https://github.com/lhartikk/naivechain)。

如果你想要了解更多区块链的内容 ,我建议你查看 Naivecoin: a tutorial for building a cryptocurrency 。在这个教程中,我们会谈论更多的挖矿算法(工作量证明),交易以及钱包(https://lhartikk.github.io/)。

原文链接:https://medium.com/@lhartikk/a-blockchain-in-200-lines-of-code-963cc1cc0e54

本文分享自微信公众号 - AI研习社(okweiwu),作者:雷锋字幕组

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

原始发表时间:2018-08-26

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 和比特币关系最紧密的技术:区块链原来是这么玩的

    雷锋网消息。5 月 13 日,由 ThoughtWorks 主办的 2017 技术雷达峰会在北京召开。ThoughtWorks 中国区区块链能力负责人刘尚奇,在...

    AI研习社
  • Web 3.0 大串讲:原来你是这样的区块链!

    我们可以这样说,在如今的时代,想实现你的创业梦,web3.0 是你与巨头对抗的最佳武器,也是你实现创业梦的唯一方式。

    AI研习社
  • 想挖矿?不如先学习一下以太坊

    许多使用点对点协议且基于区块链的项目在性能和吞吐量上夸大其辞。在研发阶段,这些项目已经出现了一些创新,但是一旦这些协议运行时,它们大多对经常遇到的挑战难以作出解...

    AI研习社
  • 告别数字货币的漩涡,区块链正开启回归自我之旅

    区块链的热度已经随着数字货币的落幕而退潮。这已经成为一个不争的事实。但是,如果你因此去否定区块链的作用和意义,甚至将它归结为区块链时代的落幕显然有些太过唐突了。...

    孟永辉
  • 产业互联网:区块链与数字货币的分水岭

    成为技术,逐渐并且正在成为区块链行业发展的主题。无论是头部巨头,还是新型玩家无不这么认为。

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

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

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

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

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

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

    腾讯安全
  • 区块链的狂热,源自于对区块链的无知

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

    孟永辉
  • 敬畏技术:欧科云链OKLink如何重塑区块链?

    最近,区块链行业有两个蛮有意思的事情,可以对照着看。一个是沉寂了三年的薛蛮子重新出山投资了阿波罗APOLLO公链,一个是OKLink推出“起源计划”布局生态战略...

    晓枫说

扫码关注云+社区

领取腾讯云代金券