区块链的几大模块

共识的分类

POW

在这里插入图片描述

POW的一般理解

  • 根据难度做SHA256哈希运算, 不停寻找Nonce

  • 特定的HASH 前导0的个数越多,代表难度越大

  • 优点是难于计算,一旦收到网络上的区块,能快速验证

  • 难度算法按高度动态调整,维持出块时间不变

POW规范链

  • POW易分叉,本地存储所有分叉区块
  • CanonicalChain维护HASH和Number对应关系,标记最长链
  • 当收到区块难度比本地高时,会发生区块回退reorg,执行块的交易,状态更新

POS

POS权益证明

  • POW耗费电力,提高出块时间易分叉,TPS低
  • 持有Token参与质押来获取一定的收益

  • 经济激励模型,对作恶节点有相应的惩罚以维护全网稳定

POS常用概念

  • 委员会,持币用户质押竞选
  • Leader出块,其他委员会成员校验块并提交签名
  • EPOCH 一定区块高度为一届
  • 选举 新的委员会成员 随机选举和按难度、质押量选举
  • 换届 本届出块完成即开启下届出块 提高全网安全,减少委员会攻击和作恶

交易

交易的不可篡改

  • 交易里面的字段做SHA3得到txhash
  • 私钥签名txhash,签名获取RSV,V含有ChainId
  • 交易在传输中篡改, txHash会发生改变,校验签名不会通过

交易记录nonce

重放攻击是指用户交易信息在一条链上再次发送,比如Alice转钱给Bob的交易发出后,Bob可以将这条交易信息重复发送到网络中,如果没有nonce,这笔交易会被当作合法交易,所以每笔交易必须有一个nonce值。nonce从0开始递增,每发送一笔交易,nonce便加1。

  • nonce小于当前的nonce,交易被拒绝
  • nonce大于当前使用的nonce+1,交易在Tx_Pool等待,直到nonce匹配
  • 处于pending的交易,新交易有相同的nonce,新交易的gas费太低会丢弃,新交易gas费高于原交易的110%,原交易被覆盖

测试网间的重放攻击

众所周知,以太坊因为DAO事件分叉出了ETC,如果你在以太坊账户有余额,那在ETC账户也有余额,你想给某个用户在ETC上转账,恰巧此时ETH和ETC上此账户的Nonce是一样的,那这笔交易在ETH上面执行也会通过,但转账者并不想发送此类行为,引入ChainId 可以规避到这种情况

P2P

在这里插入图片描述

节点发现

  • 节点查询前发送pingpong验证对方在线和版本验证
  • 发送findnode消息向对方查询邻居节点,以公钥hash为条件
  • 对方去K桶 按目标值获取16个最近的邻居节点
  • 本地节点连接已满,停止查询,本地没连满,继续节点发现

秘钥交换

节点在建立连接过程中生成临时会话秘钥,保证信息传输的安全性,会话发起方是知道对方的IP和公钥,涉及到公钥加密和私钥解密。
发起方

  • 发起方本地私钥和对方公钥生成一个静态共享私密(token),生成随机数和token做异或生成待签名信息,随机生成的私钥对信息进行签名
  • 对方公钥对随机数,本地公钥,签名进行加密

接收方

  • 对方拿到数据本地私钥进行解密 ,不是自己公钥加密的将无法解密数据
  • 接收方用本地私钥和数据包解密出对方公钥生成同样的token,token和随机数异或生成签名摘要信息,推算出对方的随机公钥,接收方随机私钥和随机公钥生成的token为AES的输入。
  • 接收方生成随机数,并用发起方的公钥对随机数和随机公钥进行加密

接收方

  • 发起方收到对方数据,用私钥解密出随机公钥跟本地随机私钥生成共享私密token

区块同步

同步的准备条件

  • 维护对方peer的节点信息如高度,难度
  • 最优链选择
  • 定时同步
  • 高度差达到一定范围 (初始化参数耗时)

同步数据和消息

  • 下载完整区块还是头体分离 头体分离方便轻节点扩展
  • 批量区块请求 起始高度,请求数量 hash是否匹配
  • 寻找闲置peer,计算rtt往返时延
  • 全同步和快速同步 下载完全区块本地执行和下载receipt状态信息
  • 并行请求 串行上链

猜你喜欢

转载自blog.csdn.net/JIYILANZHOU/article/details/107282428