美文网首页Node.js
实现一个区块链系统

实现一个区块链系统

作者: 死鱼 | 来源:发表于2018-06-29 01:41 被阅读75次

    关键字:nodejs,区块链,比特币,udp

    本文主要记录一个最近#在跳坑的边缘试探#的区块链系统开发过程,架构上并不复杂,参考了现存区块链系统的原理与算法,欢迎到github上提问:https://github.com/SteveWooo/swc

目录

1、网络层

    网络层的目的是让所有节点结成一个非全连接的网络,让节点能主动把数据包发送到网络,然后网络把数据包传播给所有节点,实现节点之间能相互通信。

网络靠心跳维持

    实现这个网络层主要使用了无状态的udp协议,要求网络中至少有一个部署在公网的节点。先定义几个概念

    节点:普通入网设备(手机、计算机、嵌入式硬件)配置启动该软件,即为节点。

    节点桶:指能和本地节点维持交换包状态的健康的其他节点栈。例如A节点刚登陆,节点桶为空,这时候如果收到B节点的包,就代表B节点为健康的节点,把B的IP端口压入节点桶。

    心跳包:定期把节点桶中的内容,打包发送给桶中的所有节点。

    数据协议:节点之间通信的协议(心跳包是其中一种


    维持网络的主要流程如下:

    1:启动公网节点,开放端口

    2:普通节点发心跳包给公网节点

    3:公网节点把普通节点压入节点桶

    4:公网节点发送心跳包

    5:普通节点收到心跳包中的新节点,压入节点桶

    6:loop

    消息传播方式:

    1:普通节点创建消息,按照数据协议打包好

    2:普通节点把数据发送给节点桶中所有节点,并写入缓存

    3:节点收到数据包,根据数据协议校验正确后,转发给数据桶中所有节点(如果和缓存冲突,则不转发


2、数据协议层

    数据层目的是规范节点之间通信的协议,在不安全的网络环境中签名与校验通信包的内容。这里涉及的概念主要有:

    椭圆曲线验证算法:一种非对称校验的算法,用于签名校验。


    目前设计的协议比较少,具体协议内容都在代码中可看到(block/create.js,trade/create.js)。主要有以下几个

    心跳协议:

        包含节点唯一id和节点桶,严格按照一定的时间间隔发出。

    交易协议:

        区块链数据的直接承载体。交易必须由交易创造者签名,每笔交易都需要被网络验证。

    块协议:

        交易的直接承载体。网络规定在一定的时间范围内产生区块(参考pow共识算法)。块需要生成者签名,每个块都需要被网络验证


3、持久层

    持久层目的是存放,查询区块、交易的内容。

    目前使用了简单的文件操作实现。


以太坊py地址:0xC87147c08d62f47da032D107D66bA848f9E646cf

相关文章

网友评论

    本文标题:实现一个区块链系统

    本文链接:https://www.haomeiwen.com/subject/lwloeftx.html