区块链基础

区块链是什么:

  1. 区块链是一个分布式网络;
  2. 区块链可以帮助多个节点达成共识去记录和 Token 相关的事情;
  3. 区块链可以帮助所有人无门槛地构建属于自己的小经济系统。

什么是区块链共识机制?共识机制是区块链是核心的组成要素之一,它决定了区块链的业务吞吐量、交易速度、不可篡改性、准入门槛等等,是最为关键的技术要素之一。核心问题是最终一致性问题(CAP, 区域链可以说只满足了AP, 对C采用了最终一致性处理). 要理解区块链共识机制,首先就需要理解区块链共识机制到底解决了什么问题。共识机制主要解决了两个问题:谁有权利;作弊问题。

经典共识机制:

  • POW(proof of work)工作量证明: 透过算力来获取奖励的机制
  • POS(proof of stake)权益证明: 透过持币的数量来做为奖励的依据
  • DPOS(delegated proof of stake)代理权益证明: 保留了POS的优点, 并引入了代议民主的概念

区块链技术定义:

简单来说,区块链是一个提供了拜占庭容错、并保证了最终一致性的分布式数据库;从数据结构上看,它是基于时间序列的链式数据块结构;从节点拓扑上看,它所有的节点互为冗余备份;从操作上看,它提供了基于密码学的公私钥管理体系来管理账户.

区块链的核心技术组成:

至少需要四个模块组成:P2P 网络协议、分布式一致性算法(共识机制)、加密签名算法、账户与存储模型。

一、PSP网络协议

又称对等网络, 没有主从, 地位对等.

1、网络连接

        少数支持UDP, 大多数使用的是TCP. 比特币的 P2P 网络基于 TCP 构建,主网默认通信端口为 8333. 以太坊的 P2P 网络则与比特币不太相同,以太坊 P2P 网络是一个完全加密的网络,提供 UDP 和 TCP 两种连接方式,主网默认 TCP 通信端口是 30303,推荐的 UDP 发现端口为 30301.

2、拓扑结构

        P2P 网络拓扑结构有很多种,有些是中心化拓扑,有些是半中心化拓扑,有些是全分布式拓扑结构. 比特币全节点组成的网络是一种全分布式的拓扑结构,节点与节点之间的传输过程更接近“泛洪算法”,即:交易从某个节点产生,接着广播到临近节点,临近节点一传十十传百,直至传播到全网. 全节点(包含钱包、挖矿、完整的区块链数据库、网络路由)与 SPV (简化支付验证)客户端之间的交互模式,更接近半中心化的拓扑结构,也就是 SPV 节点可以随机选择一个全节点进行连接,这个全节点会成为 SPV 节点的代理,帮助 SPV 节点广播交易.

3、节点发现

        节点发现分为初始节点发现和启动后节点发现. 初始节点发现就是全节点是刚下载的,第一次运行,什么节点数据都没有。启动后发现表示正在运行的钱包已经能跟随网络动态维护可用节点.

        1) 初始节点发现一共有两种方式。第一种叫做 DNS-seed,又称 DNS 种子节点,DNS 就是中心化域名查询服务,比特币的社区维护者会维护一些域名.

        第二种方式就是,代码中硬编码( hard-code )了一些地址,这些地址我们称之为种子节点(seed-node),当所有的种子节点全部失效时,全节点会尝试连接这些种子节点.

        2)启动后节点发现: 在 Bitcoin 的网络中,一个节点可以将自己维护的对等节点列表 (peer list) 发送给临近节点,所以在初始节点发现之后,首先要做的就是向对方要列表. 在每次需要发送协议消息的时候,它会花费固定的时间尝试和已存的节点列表中的节点建立链接,如果有任何一个节点在超时之前可以连接上,就不用去 DNS seed 获取地址

4、局域网穿透

        解决了局域网运行一个节点, 公网怎么来发现?比特币和以太坊均使用了 UPnP 协议作为局域网穿透工具,只要局域网中的路由设备支持 NAT 网关功能、支持 UPnP 协议,即可将你的区块链节点自动映射到公网上

5、节点交互协议

        一旦节点建立连接以后,节点之间的交互是遵循一些特定的命令,这些命令写在消息的头部,消息体写的则是消息内容。命令分为两种,一种是请求命令,一种是数据交互命令。节点连接完成要做的第一件事情叫握手. 握手完毕之后,无论交互什么信息,都是需要保持长连接的,在比特币上有 PING/PONG 这两种类型的消息,这很明显就是用于保持节点之间长连接的心跳而设计的;而在以太坊的设计中,将 PING/PONG 协议移到了节点发现的过程中. 

        区块链最重要的功能就是同步区块链,而同步区块恰是最考验 P2P 网络能力的。区块同步方式分为两种,第一种叫做 HeaderFirst,它提供了区块头先同步,同步完成以后再从其他节点获得区块体。第二种叫做 BlockFirst,就是从其他节点获取区块必须是完整的。第一种方案提供了较好的交互过程,减轻了网络负担。这两种同步方式会直接体现在节点交互协议上,他们使用的命令逻辑完全不同。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值