- 以太坊总体架构
- 以太坊详细架构
- 账户设计
- 外部账户:一般意义上的账户
- 合约账户:它是一种可编程的账户,合约存在以太坊的区块链上,它是代码和数据的集合。合约受代码控制并由外部所有账户激活
- 在以太坊中,区块链被作为一个通用的管理对象状态转换的去中心化平台,账户就是有状态的对象。外部所有账户的状态就是余额,而合约账户的状态可以是余额、代码执行情况,以及合约的存储。以太坊网络的状态就是所有账户的状态,该状态由每个区块的交易来更新,同时需要在全网形成共识。用户和以太坊的交互需要通过对账户的交易来实现。
- 以太坊外部账户由公、私钥对定义。地址是公钥的后20位
- 密钥文件存储在以太坊的数据目录中的keystore目录下面
- 合约账户可以执行图录完备的计算任务,也可以在合约账户之间传递消息,合约编译成以太坊虚拟机字节码,记录在区块链上面 。
- 区块链设计
- 以太坊区块链的每个区块不仅保存着交易清单,还保存着最新的状态。
- 以太坊的状态包含了一个键值表,键是地址(address),值是账户里声明的所有变量,包括余额,随机数,代码和账户的存储(存储也是以一颗树的形式来组织)
- 对于以太坊的Merkel-Patricia树,键被编码成向下访问树的
- 在以太坊区块链的区块报文头中,存放了3个根哈希:Merkel根哈希值,状态的根哈希值,收据的根哈希值
- POW机制
- 以太坊的POW算法叫做Ethash算法,该算法主要寻找一个随机数作为输入,使得运算结果小于一个特定的难度门槛。
- 以太坊通过动态调节难度来达到平均15秒在全网中找到一个新的区块。每15秒的“心跳”基本上是全网更新系统状态的节奏,并保证当攻击者的计算能力不超过全网计算能力的一半时,攻击者无法改写交易记录或进行分叉。
- 以太坊的POW中加入了内存难度,使得仅仅依靠算力来进行挖矿的方式行不通
- 叔区块:批符合难度条件,但是区块里的交易不被确认的区块。
- 每个区块最多能链接两个叔区块
- 计算和图录完备
- 以太坊的计算环境是图录完备的
- EVM高级语言
- Solidity
- Serpent
- LLL
- 以太坊P2P网络
- RLPx协议
- 以太坊网络节点间的通信采用P2P线上协议。节点间采用RLPx编码及认证的通信传输协议来传输消息包,即提供 发送和接收消息的协议功能。
- 节点可以自由的在任何TCP商品发布和接受连接,默认的商品是30303.
- 正式版RLPx功能如下:
- 单一协议的UDP节点发现
- ECDSA签名的UDP
- 加密握手、认证
- 节点持久性
- 加密/认证TCP
- TCP帧处理
- P2P节点采用RLPx的发现协议DHT来实现邻节点的发现。
- RLP(递归长度前缀):将二进制的数据进行任意嵌套的数组编码。在以太坊中,RLP是对对象编码的主要方法
- Whisper协议
- 它是DAPP之间通信的通信协议。
- Whisper结合了DHT和数据包消息系统(如UDP),因此同时具有两种协议的特性。
- Whisper是一个线标志的消息系统,提供了一个低层次但又简易使用的API,不需要记忆底层的硬件属性。
- Whisper提供多索引,非单一的记录,也就是说同一个记录可以有多个键,不同键之间的记录可能是一样的
- Whisper是为需要大规模的多对多数据发现,信号谈判,最少的传输通信,完全的隐私保护的下一代DAPP而设计的
- 使用场景
- DAPP需要把少量的信息发送出去,而这些发布的消息需要保留相当一段时间
- DAPP需要把信号发给其它的DAPP,希望他们参与对某个交易的协同
- DAPP之间需要提供非实时的提示或通信
- DAPP需要提供暗通信,也就是通信双方除了知道对方的哈希值之外,不知道对方更多的底细。
- RLPx协议
- 事件
- 以太坊中的事件是一个以太坊日志和事件监测协议的抽象 。
- 日志记录提供合约的地址
- 事件则利用现有的ABI功能来解析日志记录。
- 账户设计
3.4 以太坊架构详解
猜你喜欢
转载自blog.csdn.net/u014396366/article/details/82319460
今日推荐
周排行