首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

虾说区块链-72-以太坊八

一直在说区块链是一系列技术结合后的新的技术架构,那么这里分别介绍下这些相关技术,也涉及到一些扩展开去的相关内容。

区块链-以太坊八:

以太坊:

以太坊中的交易执行:

交易部分在刚接触以太坊中时是最为复杂的一部分,这里大致介绍下以太坊的交易过程。

RLP:recursive length prefix,一种适应任何二进制数据数组的编码,是以太坊中对对象进行序列化的主要编码方式,目标是为了解决结构体的编码问题。将常用的数据结构:uint,string,[]byte,struct,slice,array,big.int等序列化以及反序列化。

交易必须是正确格式化的RLP,结合之前上文中对区块头和账户的解释,那么交易需要一个有效的交易序号,账户中的nonce就是账户中发出去的交易的计数,确定交易有效要求交易的序号等于发送账户的nonce。

交易过程中支付cost,那么upfront cost=gaslimit*gasPrice+value。Gaslimit必须要不小于交易使用的intrinsic gas。

Intrinsic gas通过估计,假设predefined gas fee为x,那么交易过程中发送的数据费用为y(字节数据或者代码0的费用和非零字节的数据或者代码费用不一样),在交易过程中创建了合约,那么额外支付合约的费用z。合计intrinsic gas=x+y+z。

只有满足的这些要求,交易才能执行下去。

1.发送者发起交易,格式验证通过,扣除前期费用,在账户中nonce+1,计算剩余的gas。交易的总gas-intrinsic gas。公式:gas remaining=gas limit-(predefined gas fee+storagefee+contract creation)括号内其实就是上述的x+y+z。

2.交易执行,整个交易过程中,以太坊根据子状态,子状态是一种记录在交易中生成信息的一种方式包含:自毁集(在交易完成后丢弃的账户集),日志系列(evm的代码执行的归档和可检索的检查点),退还余额(交易完成之后需要退还账户的金额)

3.交易计算处理,但交易步骤全部处理完成后,前提交易正常没有无效状态,那么确定退还gas,最终状态也被确定。收到退款后,交易过程中使用的gas就添加到区块的gas计数中,计数一直记录当前区块所有交易使用的gas总量。所有在自毁集中的账户删除。更新状态以及交易创建的日志。

合约创建:

以太坊和bitcoin不同有外部账户和合约账户,合约的创建即交易的目的是创建一个新的合约账户,创建一个新的合约账户,使用公式来声明新账户的地址,初始化。

设置nonce为0,发送者通过交易发送一定的eth作为value,那么把账户的余额即设置为value。将存储设置为0,设置合约的codehash为一个空字符串的hash值。在完成账户的初始化后,使用交易发送来的init code创建一个账户,这个执行过程不确定,取决合约的构造器,可以是更新账户的存储,可以是创建另外一个合约账户,可以是发起一个消息通信等。初始的合约代码执行后,同时使用gas,交易中不允许使用的gas超过剩余的gas,gas不足就会异常退出,那么状态就修改到交易之前的状态,花费的gas就花费了。但是交易中的eth则会退回。如果合约中的初始化代码执行完成,那么合约创建的gas就支付,合约代码的大小和gas消费正比。当然最后剩余的gas会退还。

消息通信:

message calls,消息通信的执行和合约创建类似,由于没有新的账户创建,那么不包含init code,但是他包含输入数据,交易发送者提供了该数据,执行后,消息通信同样会有额外的组件来包含这些输出数据,后续执行使用到组件就被使用。和上述和合约创建一样,gas不足交易无效。

注:在以太坊中停止和恢复交易的执行无法不让系统消耗发起者提供的所有gas,在合约被调用时候,发现调用者没有授权来执行,那么就被报出一个异常,之前德邦按本剩余的gas也就消耗了,在拜占庭更新后,出现一个恢复代码,允许合约停止执行并且恢复状态改变不消耗剩余的gas,代码拥有返回交易失败原因的能力,那么交易是因为恢复而退出的,未使用的gas就会被退还。

本文由币乎(bihu.com)优质内容计划支持。

之前写了点东西,随着对区块链的理解,发现有些理解的并不透彻,重新整理。如有理解不正确的地方,请及时指正,同时有兴趣一块交流的可以加笔者微信:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180124G03Z0P00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券