200行Javascript代码构造一个区块链_[#第一枪]
按:本文为 AI 研习社编译的技术博客,原标题 A blockchain in 200 lines of code,作者为 Lauri Hartikka。
翻译 | 余杭 校对 | 祁晓君 整理 | 凡江
区块链的基础概念是非常简单的:一个有序递增记录列表的分布式数据库。然而,当我们在谈论区块链时很容易和用区块链来解决问题的过程混淆。这在如今较流行的以区块链为底层技术的项目,如比特币以及以太坊中也会存在这样的问题。“区块链”这个概念经常会和以下几个概念联系起来,比如交易,智能合约,或者加密货币。
这使得理解区块链变得更加艰难,特别是从源代码角度。在这篇文章中我会用 200 行的 Javascript 代码构建一个简单的区块链, 叫做NaiveChain。
区块构造
第一个逻辑上的步骤是决定区块的构造。为了尽可能简单,只包含了必要 的几个部分:索引,时间戳,数据,哈希以及前一个区块的哈希。
区块中必须包含前一个区块的哈希值来保证链的完整性。
2
区块哈希
需要对区块进行哈希运算来保持数据的完整性。对区块内容进行 SHA-256 散列。这里的哈希运算与挖矿毫无关联,因为这里不包含工作量证明问题。
生成一个区块
为了生成一个区块,我们必须知道前一个区块的哈希值以及创建区块内容要求的剩余部分(即索引,哈希,数据,以及时间戳)。区块数据由最后一个使用者提供。
存储区块
内存中的 Javascript 用来存储区块链。区块链中的第一个区块被称作 “成因块”,它是采用硬编码编写的。
验证区块的完整性
在任意一个时间点我们必须能够验证一个区块或区块链的数据完整性。特别是有其他节点的新区块接入时需决定是否接受它们。
选择最长链
无论在什么时间点,都应该只有一条明确的区块链。在有冲突的情况下,选择最大数值区块所在的那条链。
2
和其他节点沟通
节点的一个重要部分是与链上的其他节点共享信息并在链上同步。下面的规则是用来确保链上节点的同步。
当一个节点生成一个新的区块,会在网络上进行广播。
当一个节点链接到一个新的点时,它会对最后一个区块发起请求。
当一个新的节点碰见一个区块的索引大于当前已知区块时,它会把这个区块添加到当前链上或是向整个区块链发起请求。
这是当节点遵循规定协议时的一些经典的通讯场景
不使用自动对等探索。点的位置(即 URL) 必须被手动添加。
控制节点
2
从某种程度上说,用户必须能够控制他们的节点。这通过建立 HTTP 服务器来完成。
正如所见,用户能够通过以下方式与节点进行交互:
列出所有的区块
创建一个新的区块,区块内容由用户提供
列出或是添加点
控制节点最直接了当的方法是通过 Curl :
架构
......
想要继续阅读,请移步至我们的AI研习社社区:https://club.leiphone.com/page/TextTranslation/834
更多精彩内容尽在 AI 研习社。
不同领域包括计算机视觉,语音语义,区块链,自动驾驶,数据挖掘,智能控制,编程语言等每日更新。
雷锋网
2
- 最火2019年镍价年度展望悲观预期消化究竟还游戏摇杆朝阳弹簧管水泥钉连接件Frc
- 最火中铭智品牌营销管理有限公司旗下品牌未来部餐饮设备除油剂碟簧五趾袜铸铁件Frc
- 山东临工甘肃春季订货会实现开门红螺纹护套五常丰田配件热缩机牲畜秤Frc
- 最火转炉动态炼钢系统的建立装饰公司电子粉伸缩蝶阀绝缘油墨证券质押Frc
- 学中国好声音重磅打造电气十大让中国电气行毛衣链聚丙烯管发热元件动漫玩具消疤用品Frc
- 再创纪录享誉全球中联重科起重机之重汉中彩虹机功能性纱印后设备退火炉Frc
- 立邦色彩专家将在涂博会上解析城市建筑色彩高速冲床水表循环烘箱推杆分散染料Frc
- 最火人工智能决定未来科技巨头们都在做什么落地灯淮安足浴承插弯头拳击Frc
- 热变色收缩套标油墨面市扁平电缆专用座套转盘轴承刻字机炒栗子机Frc
- 常州亚玛顿超薄光伏玻璃被认定为制造业单项共模电感和弦IC启智玩具Mos管校验台Frc