了解以太坊之前,先以比特币为例,了解区块链的通用知识:
分分钟了解区块链和挖矿
以太坊创立
在以太坊之前,存在着比特币,但比特币有一些缺陷,比如它只有很少的指令,并不符合图灵计算的标准(没有循环)。于是一位大神便想再创造一个加密货币系统,以支持未来可以想象到的所有应用,即图灵完备。
V神布特林大事纪
1994年出生于俄罗斯
17岁开始研究比特币,《比特币杂志》,并且担任首席撰稿人
18岁获得奥林匹亚资讯奖铜牌
19岁自加拿大滑铁卢大学休学;该年11月,公布《以太坊白皮书》初版,开始募集开发者
20岁获得提尔奖学金、成立非营利组织以太坊基金会,在迈阿密的比特币会议公开发表以太坊计画,该年7月,启动以太坊计画众售募资,募得3.1万枚比特币(当时约合1840万美元)
21岁以太坊最初版本Frontier问世、以太币开始在世界各地交易所公开交易
22岁被《财星》杂志评选为2016年40岁以下的40大杰出人物
接下来我们从几个直观的方面了解下大神的杰作吧。
从三个直观的方面了解以太坊
一、账户体系
二、交易与消息
三、Gas
一、账户体系:
比特币:UTXO模型
比特币不存在账户,而是比特币地址指向的UTXO,这类似于生活中的纸币,纸币不可拆分,比如你是卖馒头的小贩,小A买了两个馒头,一共3元,给你10元的纸币,你给小A 7元零钱。
此时10元是交易输入,那3元和7元是未花费交易输出,分别给了你自己和小A。而你可以拿着这3元钱,作为交易输入,去隔壁超市买一袋盐。
以太坊账户:有余额
账户分类
1、外部拥有的账户:被私钥控制且没有任何代码与之关联,
2、合约账户:被它们的合约代码控制且有代码与之关联,智能合约的账户地址,它像是居住在EVM中的机器人,当收到外部条件(消息或交易)时就自动执行特定的代码并修改相关地址的余额或其它信息。
合约账户是一种特殊的可编程账户,合约存在以太坊区块链上,它是代码(它的功能)和数据(它的状态)的集合。合约受代码控制并由外部所有账户激活。合约账户可以执行图灵完备的计算任务,也可在合约账户之间传递消息,合约编译成以太坊虚拟机字节码(EthereumVirtual Machine Bytecode),并记录在区块链上。
以太坊账户状态
nonce:若是外部拥有账户,nonce表示从这个账户地址发送的交易序号。如果账户是一个合约账户,nonce表示此账户创建的合约序号
balance: 此地址拥有Wei的数量。1Ether=10^18Wei
storageRoot: Merkle Patricia树的根节点Hash值(我们后面在解释Merkle树)。Merkle树会将此账户存储内容的Hash值进行编码,默认是空值
codeHash:此账户EVM(以太坊虚拟机,后面细说)代码的hash值。对于合约账户,就是被Hash的代码并作为codeHash保存。对于外部拥有账户,codeHash域是一个空字符串的Hash值哈希编码。
账户之间的关系
理解外部拥有账户和合约账户的基本区别是很重要的。一个外部拥有账户可以通过创建和用自己的私钥来对交易进行签名,来发送消息给另一个外部拥有账户或合约账户。不像外部拥有账户,合约账户不可以自己发起一个交易。相反,合约账户只有在接收到一个交易之后(从一个外部拥有账户或另一个合约账户接),为了响应此交易而触发一个交易。
1、外部账户之间
2、外部账户与合约账户
在两个外部拥有账户之间传送的消息只是一个简单的价值转移。
从外部拥有账户到合约账户的消息会激活合约账户的代码,允许它执行各种动作。(比如转移代币,写入内部存储,挖出一个新代币,执行一些运算,创建一个新的合约等等)。
二、交易与消息
交易是外部账户向其他账户发送签名数据包。每一笔交易都会改变以太坊的状态,都将被序列化,经矿工验证广播后记入区块链。
合约创建也属于交易,它被发送出去后被矿工打包记录在区块中,当需要调用这个智能合约的方法只需要向合约地址发送一笔交易即可。区块链网络中每个节点都装有以太坊客户端,客户端自带EVM,类似于JVM,交易触发智能合约后代码会在EVM执行。因此,智能合约代码是运行在所有节点上的,难以替换修改。
交易是外部世界和以太坊内部状态的桥梁。
以太坊内部怎么通信呢?
消息——在以太坊状态全局范围内的合约可以与在相同范围内的合约进行通信。他们是通过“消息”或者“内部交易”进行通信的。我们可以认为消息或内部交易类似于交易,不过与交易有着最大的不同点—它们不是由外部拥有账户产生的。相反,他们是被合约产生的。它们是虚拟对象,与交易不同,没有被序列化而且只存在与以太坊执行环境。
内部交易或者消息不包含gas limit,因为gas limit是由外部拥有账户决定。
三、GAS
开车之前,先交油钱!
由以太坊网络上的交易而产生的每一次计算,都会产生费用。这个费用是以称之为”gas”的方式来支付。这些费用最后都给了矿工作为计算和交易验证的奖励。gas price是你愿意在每个gas上花费Ether的数量,“Wei”是Ether的最小单位,1Ether等于10^18Wei。gas limit表示用户愿意花费在gas上的钱的最大值。
假设发送者设置gas limit为100,000,gas price为20gwei。
100,000*20gwei = 2,000,000,000,000,000 Wei = 0.002 Ether
费用的作用:
1、防止用户使网络超负荷
2、保护网络不受蓄意攻击。
java达人
ID:drjava
(微信扫码识别)