以太坊是比特币网络升级版,被称为区块链2.0。以太坊是一系列协议,其核心就是一个以太坊虚拟机,能执行遵守协议的任何复杂的代码。以太坊虚拟机是图灵完备的,开发者可以在虚拟机上使用像 javascript,python 这样的友好的编程语言来创建应用。
和任何的区块链一样,以太坊包含了一个点对点的网络协议。这以太坊区块链是被链接着这个网络的各个节点维护和更新的。网络中的各个节点的虚拟机都执行相同的指令来共同维护区块数据库, 因为这个原因,以太坊有时候被人称为“世界计算机”。
以太坊系统组成部分:
1.账户(accounts)
2.状态(state)
3.损耗和费用(gas and fees)
4.交易(transactions)
5.区块(blocks)
6.交易执行(transaction execution)
7.挖矿(mining)
8.工作量证明(proof of work)
账户:
以太坊的全局"共享状态"是由很多小对象来组成的,这些账户可以通过消息传递架构来与对方进行交互,每个账户都有一个与之关联的状态和一个20字节的地址,以太坊中一个地址是160位标识符,用来识别账户的。
有两种类型的账户:
外部拥有的账户,被私钥控制且没有任何代码与之关联,一个外部账户可以对另一个外部账户或合约账户发起交易;
合约账户,被它们的合约代码控制且有代码与之关联,不可自己发起交易,必须有外部账户触发一个交易,收到交易消息后会执行合约代码;
账户状态有四个组成部分,不论账户类型是什么,都存在这四个组成部分:
nonce:如果账户是一个外部拥有账户,nonce代表从此账户地址发送的交易序号。如果账户是一个合约账户,nonce代表此账户创建的合约序号
balance: 此地址拥有Wei的数量。1Ether=10^18Wei
storageRoot: Merkle Patricia树的根节点Hash值。Merkle树会将此账户存储内容的Hash值进行编码,默认是空值
codeHash:此账户EVM(以太坊虚拟机)代码的hash值。对于合约账户,就是被Hash的代码并作为codeHash保存。对于外部拥有账户,codeHash域是一个空字符串的Hash值
世界状态
以太坊的全局状态就是由账户地址和账户状态的一个映射组成,这个映射被保存在默克尔树的数据结构中。
Gas和费用
gas(汽油)在以太坊中是一个重要的概念,是以太坊中交易所需的计算费用,在系统中产生的每一次计算都需要支付一定的费用。
gas是一个费用单位,每笔交易发送者都需要设置gas limit和gas price。gas limit和gas price就代表着发送者愿意为执行交易支付的Wei的最大值。Wei是Ether的最小单位,1Ether表示10^18Wei,1gwei是1,000,000,000 Wei。
例如,假设发送者设置gas limit为50,000,gas price为20gwei。这就表示发送者愿意最多支付50,000*20gwei = 1,000,000,000,000,000 Wei = 0.001 Ether来执行此交易。
存储费用
gas也用在支付存储的费用,存储的总费用与所使用的32位字节的最小倍数成比例。
区块
区块是整个区块链世界的基石,区块链是无数个区块链接而成,每一个区块中包含了一个时间段内的一些列交易。
以太坊区块包含:
区块头:关于包含在此区块中交易集的信息
Ommers解释:ommer就是一个区块的父区块与当前区块父区块的父区块是相同的。让我们快速了解一下ommers是用来干嘛的,并且为什么一个区块需要为ommers包含区块头。
由于以太坊的构造,它的区块生产时间(大概15秒左右)比其他的区块链例如Bitcoin(大概10分钟左右)要快很多。这使得交易的处理更快。但是,更短的区块生产时间的一个缺点就是:更多的竞争区块会被矿工发现。这些竞争区块同样也被称为“孤区块”(也就是被挖出来但是不会被添加到主链上的区块)。
Ommers的目的就是为了帮助奖励矿工纳入这些孤区块。矿工包含的ommers必须是有效的,也就是ommers必须在父区块的第6个子区块之内或更小范围内。在第6个子区块之后,陈旧的孤区块将不会再被引用(因为包含老旧的交易会使事情变得复杂一点)。
Ommer区块会收到比全区块少一点的奖励。不管怎样,依然存在激励来让矿工们纳入孤区块并能从中获得一些报酬。
多重签名
多重签名是以太坊中保护账户安全的一种机制,多重签名的作用在于你要从账户中提取较大额度的金额时,需要多个账户的共同认证才可提取,但前提是必须有两个以上的账户,在以太坊中创建账户很容易,只需在钱包客户端中选中新增账户选项即可,无需网络无需同步节点。
网友评论