1、账户
比特币是采用基于交易的账本模式,优点有:隐私保护比较好;缺点有:没有显示地记录账户余额,交易不方便(要一次性花出去)
以太坊是基于账户的账本模式。 优点:显示地记录账户余额 交易更加方便 对双花攻击(支付方不诚实)有着天然的防御 缺点:易遭受重放攻击(收款方不诚实)。
1.1账户分类
以太坊为了实现智能合约,将账户分为:外部账户EOA和合约账户 外部账户:由密钥控制,无代码与之关联 合约账户:由智能合约代码控制,有代码与之关联
1.1.1外部账户
是由人们通过私钥创建的账户,是真实世界的金融账户的映射,拥有该账户私钥的任何人都可以控制该账户,这也是人类与以太坊账本沟通的唯一媒介。 外部账户包括balance(以太币余额)和nonce随机数(用于确定每笔交易只能被处理一次的计数器)
特点
- 拥有以太币余额
- 能发送交易,包括转账和执行合约代码
- 被私钥控制
- 没有相关的可执行代码
1.1.2合约账户
被外部账户或者合约创建,合约在创建时被自动分配到一个账户地址,用于存储合约代码啊以及合约部署或者执行过程中产生的存储数据。 合约账户地址是通过SHA3哈希算法产生。只能通过外部账户来驱动合约执行合约代码。 合约账户包括code合约代码和storage账户的存储
特点
- 有相关的可执行代码
- 不能发起交易
- 合约代码能够被交易或者其他合约消息使用
- 合约代码被执行时可再调用其他合约代码
- 合约代码被执行时可执行复杂运算,可永久地改变合约内部的数据存储
为了智能合约,签合约需要稳定的账户模式,所以设计了这样的账户模式。
2、MPT树
2.1Trie树
前缀树或字典树,是一种有序树状的数据结构,其中的键通常时字符串。 与二叉树不同,键时由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,节点对应的key是根节点到该节点路径上的所有节点key值前后拼接而成。根节点对应空字符串key。
2.2Patricia Trie
空间使用率经过优化的Trie。但是在Patricia Trie里如果存在一个父节点只有一个子节点,那么这个父节点将与子节点合并,大大加快搜索节点速度。
2.3MPT树
结合了字典树和默克尔树的优点 MPT树中的节点类型:
- 叶子节点:没有子节点,表示为[key,value]的一个键值对(偶数2奇数3)
- 扩展节点:也是这样一个键值对,但是value是其他节点的hash值,通过hash连接到其他节点,只有一个子节点(偶数0奇数1)
- 分支节点:是一个长度为17的list,分支节点的父节点必然是扩展节点,可以有多个子节点
- 空节点:空字符串
构建例题见习题
3、消息和交易
以太坊可以看作是基于交易的状态机。一个交易表示从一个状态转换至另一个状态的合法过度。 从全局状态变化的角度看,以太坊可看作是一个状态连,通过交易来驱动账户的状态发生变化。 从具体实现的角度看,以太坊可看作是一个区块链。 从账本的角度看,以太坊可看作是一个交易的堆栈。 以太坊中有两种类型的交易:创建合约和发送消息 区块的顺序是由某个共识算法来决定。
4、状态转换函数
APPLY(S,TX)->S’ S是初始状态,TX是一笔新的交易。 交易是外部世界和以太坊内部状态的桥梁
5、以太坊区块
包括区块头和区块体。 区块头较为轻量级,包含了一系列的数值、引用的数值和哈希值 区块体:较为重量级,包含了该区块收纳的交易列表和叔块列表
5.1区块头
- parentHash父区块哈希
通过此纪录才能完整的将区块有序组织,形成一条区块链,并且可以防止父区块内容被修改 - sha3Uncles叔父区块集的哈希
表示区块引用的多个叔背区块。在以太坊中,不能成为主链一部分的孤儿区块如果有幸被猴笼的区块收留近区块链就变成了叔块。通过叔块奖励机制,来降低以太坊软分叉和平衡网速慢的矿工利益。 - miner挖出该区块的全节点地址
- stateRoot状态树根哈希
表示执行完此区块中的所有交易后以太坊状态快照ID。 - transactionsRoot交易树根哈希
可以验证某交易是否包含在此区块中,类似默克尔根哈希 - receiptRoot收据树根哈希
由区块交易在执行完成后生成的交易回执信息集合生成。类似购物后的小票,上面由交易真实花费的汽油、日志等等 - logsBloom日志布隆过滤器
是一个256长度byte数组,提取自receipt,用于快速定位查找和验证交易回执中的智能合约事件信息。 - difficulty挖矿难度系数
- nubmer区块高度
- gasLimit汽油量上限(动态调整的)
- gasUsed实际消耗汽油量
- misHash混合哈希
用于校验区块是否正确挖出,实际上是区块头数据不包含nonce时的一个哈希值 - nonce以太坊挖矿随机数,长度8byte.mixhash只有用一个正确的nonce才能进行POW。
5.2区块体
包括:交易集合和叔辈区块头集合。
|