以太坊区块链

时间:2024-03-13 13:41:56

1.整体架构

以太坊区块链

2.账户设计

1)外部账户

由私钥控制.与代码无关联

可以创建发起交易给另外一个账户.外部账号之间的交易是转账;外部账户转账到合约账户可以**合约账户

2)合约账户

被合约代码控制,有关联的代码.

可以响应外部账户发起的交易

以太坊区块链


3.区块链设计

1)区块头结构

以太坊区块链

以太坊区块链

以太坊区块链

以太坊区块链

这里需要注意的是这里的Merkle树并不是比特币的Merkle树,以太坊使用的是MPT树.Merkle树的变种,功能更强大.可以类似key-value的存储.更符合以太坊的状态的存储.本文不在深入探讨MPT树的实现,详情见  https://blog.csdn.net/qq_33935254/article/details/55505472   此文写的非常详细.

3.poW机制

1)GAS(燃料)

    在以太坊上转账交易、运行智能合约,都会产生费用,这个费用采用“gas”(瓦斯)来支付。

    每个交易,发送者设置gas limit和gas price。gas limit和gas price就代表着发送者愿意支付的最大费用

    Total_Gas = gas limit * gas price

    以太坊客户端的默认gasprice为0.05e12wei.大约1亿分之五个以太币

    矿工自行决定是否将某一个交易打包到区块中,一般矿工优先选择手续费较高的交易来打包

    Wei 是Ether的最小单位,1Ether=10^18Wei,1gwei=10^9 Wei。

    作用,防止用户使网络超负荷,保护网络不受蓄意攻击

2)GHOST 协议

    中文"贪婪最重观察子树".严格来说,以太坊的区块链不是一个链条,而像一颗树.

    选择完成计算最多的路径

    比较最近的一个区块的区块号, 区块号越大代表当前路径上的区块数越多

以太坊区块链

3)叔区块

一个区块的父区块与当前区块父区块的父区块是相同的

区块产生时间15s, 容易产生分叉

4.交易

以太坊区块链

以太坊区块链

以太坊区块链

以太坊区块链

5.EVM高级语言

以太坊提供高级语言让用户编写智能合约

1)Solidity类似js  常用

2)Serpent类似python

3)LLL类似Lisp

6.客户端收到消息执行步骤

1). 哈希该数据,并且检查该数据与其哈希是否已经接收过,如果是,退出,否则将数据发送给数据分析器。

2). 确认数据类型。如果该数据项是一个交易,如果交易合法则将其加入本地交易列表,加入当前区块并发布至网络。如果该数据项是一个消息,作出回应。如果该数据项是一个区块,转入步骤 3。

3). 检查区块中的“父区块“参数是否已存储于数据库中。如果没有,退出。

4). 检查该区块头以及其“叔区块列表”中所有区块头中的工作量证明是否合法,如有任意一个非法,退出。

5). 检查“叔区块列表” 中每一个区块的区块头以确定其是否以该区块的“祖父区块”为父区块。如有任何否,退出。注意叔区块头并不必须在数据库中;他们只需有共同的父区块并有合法的工作量证明。

6). 检查区块中的时间戳,是否比引用的上一个区块(父区块)大,而且小于15分钟。检查该区块的难度与区块号码匹配。如任何检查失败,退出。

7). 检查状态树。由该区块的父区块的状态开始,加上该区块中的每一笔合法交易。最后,加上矿工奖励。如果结果状态树的根哈希与区块头中的状态根不匹配,退出。如匹配,将该区块加入数据库并前进至下一步。

8). 为新区块确定 TD(block) ("总难度")。 TD 由 TD(genesis_block) = 0 及TD(B) = TD(B.parent) + sum(u.difficulty for u in B.uncles) + B.difficulty 递归定义。 如新区块拥有比现区块更高的总难度,则新区块将成为“ 现区块“ 并进入下一步,否则,退出。

9). 如果新区块被改动,向其中加入交易列表中的所有交易,废除交易列表中的所有变为不合法的交易,将该区块及这些交易向全网重新广播。

“现区块” 是由矿工存储的一个指针; 它指向矿工认为表达了最新的正式的网络状态的区块。 所有索要平衡账目、 合约状态等的消息都通过查询现区块并计算后回应。

7.交易优先级

矿工可以设置最小的费用值
交易发送者设置支付价格
矿工自愿选择是否验证交易
以太坊区块链