以太坊的状态转换是指以太坊从一个正确状态(S)到下一个正确状态(S')当事务(TX)发生时。
对于事务来说,为了防止代码的指数级爆炸和无限循环,每个事务都需要限制执行代码导致的计算步骤。STARTGAS是极限,GASPRICE是矿工每计算一步需要支付的价格。。以太坊状态转移函数应用于(S,TX)-
S';可定义如下:1。检查交易格式是否正确,签名是否有效,随机数与发送方随机数是否匹配';的账户。否则,将返回一个错误。。2.计算交易手续费费=STARTGAS*GASPRICE,确定发送方';签名上的地址。从发送方减去交易成本';的账户并增加发送人';s随机数。如果帐户余额不足,将返回一个错误。。3.设置初始值Gas=STARTGAS,根据事务中的字节数减去一定量的燃料值。4.从发送方转移价值';收款人的账户';的账户。如果接收帐户尚不存在,请创建它。如果接收帐户是合同,运行合同代码。直到代码用完或者燃料用完。5.如果价格转移失败是因为发送者';的账户没有';没有足够的费用或代码耗尽燃料,原始状态将被恢复,但交易费将被添加到矿工';的账户。6.基本代码已成功执行将剩余的燃料全部返还给发送方,消耗的燃料将作为交易费发送给矿工。例如,假设合同的代码如下:
需要注意的是,在现实中,契约代码是用底层以太坊虚拟机的EVM代码写的,上面的契约是用我们的高级语言Serpent写的,可以编译成EVM代码。假设收缩记忆从时空开始在发送了一个值为10乙醚,燃料为2000,燃料价格为0.001乙醚的交易后,状态转移函数的处理过程如下:1.检查交易是否有效。,格式正确;2.检查交易的发送方是否至少有2000*0.001=2以太币。如果是,从发送者身上减去2个飘渺的硬币';的账户;3.初始设置Gas=2000,假设事务长度为170字节,每个字节的开销为5减850。,所以还剩1150;4.从发送者身上减去10以太币';s账户,并在合约账户中加入10以太币;5.运行代码。在这个契约中,运行的代码很简单:它检查契约内存索引是否为2,并注意到它没有被使用。,然后将其值设置为CHARLIE。假设这样消耗187单位燃料,那么剩余燃料是1150-187=963.6,963*0.001=0.963飘渺币加到发送者';的帐户,返回到最终状态。。如果没有合同接收交易,那么所有的交易费用都算作GASPRICE*transaction的字节长度,交易数据与交易费用无关。还应注意,如果子计算耗尽燃料,合同发起的消息可以将燃料限制分配给它们生成的计算。它只恢复到发送消息时的状态。因此,就像事务一样,契约可以通过对其产生的子计算设置严格的限制来保护其计算资源。为了测试各种语言对以太坊的支持,让更多人参与到以太坊的开发和使用中来,以太坊客户端。目前以太坊的客户端有四种语言编写。他们是用Go语言实现的客户端;用c实现的客户端Eth用Python语言实现的客户端Pyethapp用Java实现的客户端以太网Go语言版是以太坊官方一直维护和推荐的客户端。以太坊包括一个专用的客户端浏览器,使用户能够运行各种分散的应用程序(DApp)和发布智能合同。这个浏览器叫Mist,很好用。,降低了用户的使用门槛,让DApp和智能合约可以被大量用户使用。它的作用相当于互联网的浏览器或下载数字内容的iTunes。。Mist由特殊安全层、密钥管理、分散账户管理和与区块链相关的组件组成。这一切使得Mist成为普通用户运行或管理区块链去中心化应用不可或缺的工具,普通用户不需要懂技术的东西。。从用户体验的角度来说,可以使用Mist中的DApp(比如预测市场占卜)在以太坊Mist浏览器中运行。当然,这些服务也可以通过常规浏览器以更传统的Web2.0方式实现。