找回密码
 立即注册

扫一扫,登录网站

首页 区块链生态 查看内容
  • 26032
  • 0
  • 分享到

以太坊漫谈(一)

2018-8-12 19:04

来源: 兄弟连教育

以太坊的代码执行



以太坊合约的代码使用低级的基于堆栈的字节码的语言写成的,被称为“以太坊虚拟机代码”或者“EVM代码”。代码由一系列字节构成,每一个字节代表一种操作。一般而言,代码执行是无限循环,程序计数器每增加一(初始值为零)就执行一次操作,直到代码执行完毕或者遇到错误,STOP或者RETURN指令。操作可以访问三种存储数据的空间:


  • 堆栈,一种后进先出的数据存储,32字节的数值可以入栈,出栈。

  • 内存,可无限扩展的字节队列。

  • 合约的长期存储,一个密钥/数值的存储,其中密钥和数值都是32字节大小,与计算结束即重置的堆栈和内存不同,存储内容将长期保持。


代码可以像访问区块头数据一样访问数值,发送者和接受到的消息中的数据,代码还可以返回数据的字节队列作为输出。


EVM代码的正式执行模型令人惊讶地简单。当以太坊虚拟机运行时,它的完整的计算状态可以由元组(block_state, transaction, message, code,memory, stack, pc, gas)来定义,这里block_state是包含所有账户余额和存储的全局状态。每轮执行时,通过调出代码的第pc(程序计数器)个字节,当前指令被找到,每个指令都有定义自己如何影响元组。例如,ADD将两个元素出栈并将它们的和入栈,将gas(瓦斯)减一并将pc加一,SSTORE将顶部的两个元素出栈并将第二个元素插入到由第一个元素定义的合约存储位置,同样减少最多200的gas值并将pc加一,虽然有许多方法通过即时编译去优化以太坊,但以太坊的基础性的实施可以用几百行代码实现。


版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。
相关新闻
发表评论

请先 注册/登录 后参与评论

    回顶部