首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

30分钟自己写一条区块链(二)

阅读时间: 10 分钟

本系列的上一篇我们实现了一个使用POW的区块链的基本功能,今天我们来试着将这个区块链系统API化并部署到多个节点上去。

将区块链API化

在这个区块链中,我们想要实现三个API,分别是

:节点使用这个方法来挖掘新的区块

: 账户使用这个方法来建立新的交易

: 返回当前的区块链

为了复用我们在上篇写好的代码,我们首先安装express.js,并创建一个新文件 。express是一个基于node的http框架,它可以允许我们接受通过http协议传输的节点信息。我们还需要body-parser帮助我们解码节点发送过来的信息。

创建API的样板

在刚创建的 里面,我们需要接受三个不同的api端点。

调用写好的Blockchain

我们首先来完成接受挖矿的端点,

写好之后我们用 启动我们的服务器,然后我们可以使用HTTP测试工具如Postman或者curl来进行测试。本文在这里用了Postman。

首先我们直接调用 ,可以看到我们的区块链有了第一个区块。

再调用 ,创建了一个transaction。

我们再试试 , 从返回值看来也是能work的。

这时可以用 检查新的区块是否append到了区块链上。

 显示我们的区块链成功的被延长了。

实现分布式共识

以上我们已经实现了一个单机版的区块链了,但区块链之所以有用,是因为它能被部署到多个节点上去,并且所有节点都能够相互更新,实现分布式的共识。这样的机制保证了我们能够抵御double spending attack以及确保只有一条区块链在运行。

节点搜索

为了实现我们的分布式共识,我们首先需要知道网络上其他的节点在哪里。仿照Ethereum的 Node Discovery Protocol,我们可以做一个类似的搜索节点的功能。

我们首先在代码里设置了一个初始节点 ,再从这个节点进行网络的搜索,直到有了至少4个相邻节点位置。在这个节点搜索的函数中我们又调用了两个新的端点,分别是

: 向这个节点注册新节点

: 得到这个节点的邻居

这两个API实现起来也不难

这时我们开3个terminal,测试一下我们的代码。

(母节点,一开始没有邻居,直到有新节点向它注册)

(子节点1, 一开始只找到了母节点)

(子节点3, 找到了已经存在的两个节点)

共识实现: 解决冲突链

知道了附近的节点在哪,我们就可以开始实现我们的共识算法。共识算法的第一部分需要我们能够辨别出最长且有效的链,我们可以通过在之前写的区块链模型里加入新的函数实现。

在 中,我们可以在每次挖矿之后都向附近的节点广播,以解决冲突链。首先我们需要建立一个新的端点 。

建立好端点之后我们需要在挖矿之后对所有的邻居进行广播。

这样setup之后,我们的节点在每一次挖矿的时候都会对附近的邻居进行广播并寻求consensus。当然,我们还可以设定定时任务来更高频的进行广播。另外,我们也没有对收到的chain进行电子验证,没有动态化的寻找相邻节点,没有将每一个transaction广播,以及一系列可以完善的地方,不过在这篇教程当中我们就不继续下去了。

总结

以上我们实现了一个简单的区块链,虽然这个区块链简陋且不安全,但是我们能够成功将它部署到多个节点上,实现了最基本的区块链的功能。完整代码粘贴在下方。下一次,我们将研究什么是以太坊,EOS,DAPP,智能合约,以及如何在以太坊的平台上开发一个全功能的区块链产品-。下次见啦。

以下是app.js

以下是Blockchain.js。

识别下方二维码,关注【原味区块】

持续关注区块链本身

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180123G0CK2A00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券