首先,以太坊是一个平台,提供了创建和部署去中心化应用的 平台。它提供了一个完整的编译语言环境(又称以太脚本)。以太坊是一个混合体,包含了众多相互联系的开源项目,对轻客户端更加友好,支持将信任逻辑移植在小程序。 以太坊的系统架构如下:
- 以太坊的核心概念
1. 以太坊虚拟机EVM
EVM是以太坊中智能合约的运行环境,
2. 账户
以太坊中的账户分为两类:外部账号和合约账户。
外部账户是由 公钥-私钥对控制,其账户地址由公钥决定。
合约账户是由存储在代码中的合约控制,其地址是由创建合约的地址和这个地址发起过的交易数目共同计算得到。
两者的区别是:外部账户没有代码,每当外部账户发起一笔交易,签名后向合约账户发送消息。在合约账户每收到消息后,可以对内部数据进行操作。
以太坊的账户都包含以下内容:
1)随机数,用于确定每笔交易只能被执行一次的计数器。
2)账户目前的以太币余额
3)账户的合约代码
4)账户的存储
3. 交易
以太坊中的交易,是指存储从外部账户发起的包含签名过的数据包。数据包中都包含发送方的签名,发送方的余额,接受方的地址,发送的信息,以及STARTGAS和GASSPICE;
STARTGAS和GASSPICE是为了防止出现指数型爆炸和无线循环的计算步数而设计出来的,STARTGAS是通过需要支付燃料来限制计算步数,而GASSPICE是每一步计算,需要支付给矿工的燃料的代价。
4. GAS
在以太坊中,每笔交易都会吸收一定的燃料gas,设计GAS的目的,就是为了限制交易的步数,以及为每笔交易支付费用。消耗GAS的价格由交易的创建者制定,如果交易执行结束后,GAS还有剩余,就会返还给创建者,如果交易过程中GAS用尽,就会出现out of gas 的异常。同时所有的操作都会回滚。
5. 存储,主存,栈
每个账户都有一个永久的内存区域,被称为存储,其形式是key-value(key和value的长度都为256),存储中的数据不能遍历,因为开销巨大。
第二块内存区域被称为主存。合约每次执行消息调用时,都使用的是一块被擦除过的主存,主存读取的最小单位是32字节,随着主存的长度增加,读写开销增大。
EVM是基于栈的虚拟机,栈的最大长度是1024个元素,每个元素有256字节。对栈的访问,只限于顶端,允许移动栈顶中16个元素中的一个到栈顶。访问栈中的元素只允许访问栈顶,无法访问指定深度的元素,必须移除其顶部的元素。
6. 指令集
EVM的指令集,刻意保存在最小规模,避免出现共识问题。
7. 消息
以太坊的消息和比特币类似,但是具有以下区别:
1)以太坊的消息可以是外部账户或者内部合约创建,比特币只能由外部创建
2)以太坊的消息可以包含数据
3)以太坊中如果消息的接受者是合约账户,则可以选择回应
8.消息调用
以太坊的消息调用和交易比较类似,都包含一个源,一个目标,数据负载,gas,以太币和返回数据。
9.代码的调用库
以太坊中存在一种特殊的消息调用,称为callcode。可以让合约在运行时从另一个地址动态加载代码。
10. 智能合约
以太坊是内置有图灵完备的编程语言的区块链。通过建立抽象的基础层,使得任何人都可以建立合约和去中心化的应用,并在其中设立交易规则,交易方式和状态转换函数。
智能合约就像是加密的具有价值的箱子,只有满足了特定的条件才能被打开,它封装了一些列的逻辑,规则,处理步骤和双方协议。
11. 以太坊去中心化的应用DAPP
一个DApp是由智能合约和客户端代码组成。只不过DApp的智能逻辑运行在区块链中,客户端的代码运行在特殊浏览器的Mist里。