以太坊虚拟机(EVM) 以太坊虚拟机(Ethereum Virtual Machine,简称EVM)是一个基于栈的虚拟机,基于特定的环境数据,执行一系列的字节代码形式的指令,以修改系统状态.EVM目前提供了11类,140个指令. EVM是一个准图灵机,这个"准"的限定来源于其中的运算是通过参数gas来限制的,也就是限定了可以执行的运算总量.EVM的具体逻辑定义为代码执行函数(Ξ): \((\boldsymbol{\sigma}', g', A, \mathbf{o}) \equiv \…
死磕以太坊源码分析之EVM指令集 配合以下代码进行阅读:https://github.com/blockchainGuide/ 写文不易,给个小关注,有什么问题可以指出,便于大家交流学习. 以下指令集持续更新,最新文章请参考上面 EVM 指令集概念 EVM执行的是字节码.由于操作码被限制在一个字节以内,所以EVM指令集最多只能容纳256条指令.目前EVM已经定义了100多条指令,还有100多条指令可供以后扩展.这100多条指令包括算术运算指令,比较操作指令,按位运算指令,密码学计算指令,栈.me…
死磕以太坊源码分析之EVM固定长度数据类型表示 配合以下代码进行阅读:https://github.com/blockchainGuide/ 写文不易,给个小关注,有什么问题可以指出,便于大家交流学习. 翻译自 https://medium.com/@hayeah/diving-into-the-ethereum-vm-part-2-storage-layout-bc5349cb11b7 我们先看一个简单的Solidity合约的汇编代码: contract C { uint256 a; func…
死磕以太坊源码分析之EVM动态数据类型 配合以下代码进行阅读:https://github.com/blockchainGuide/ 写文不易,给个小关注,有什么问题可以指出,便于大家交流学习. Solidity提供了在其他编程语言常见的数据类型.除了简单的值类型比如数字和结构体,还有一些其他数据类型,随着数据的增加可以进行动态扩展的动态类型.动态类型的3大类: 映射(Mappings):mapping(bytes32 => uint256), mapping(address => strin…
死磕以太坊源码分析之EVM如何调用ABI编码的外部方法 配合以下代码进行阅读:https://github.com/blockchainGuide/ 写文不易,给个小关注,有什么问题可以指出,便于大家交流学习. 前言 abi是什么? 前面我们认识到的是智能合约直接在EVM上的表示方式,但是,比如我想用java端程序去访问智能合约的某个方法,难道让java开发人员琢磨透汇编和二进制的表示,再去对接? 这明显是不可能的,为此abi产生了.这是一个通用可读的json格式的数据,任何别的客户端开发人员或…
以太币的主要单位是以太/Ether,即一个以太币,以太币的最小单位是wei. 以太币最小单位 wei 是以虚拟币先驱人物:戴伟 Wei Dai 命名,戴伟 W Dai 是一位兴趣广泛的密码学专家,他在 1998 年发明了 B-money 匿名的.分布式的电子加密货币系统,强调点对点的交易和不可更改的交易记录.中本聪发明比特币的时候,借鉴了很多戴伟的设计,并和戴伟有很多邮件交流. 以太币的单位如下: 单位 Wei 值 Wei wei 1 wei 1 Kwei 1e3 wei 1,000 Mwei…
以太币的作用:防范以太坊网络被滥用和激励矿工. 与比特币网络有比特币类似,以太坊(Ethereum)也有自己的虚拟币 — 以太币. 以太币的主要作用有2个: 应用程序执行任何操作都需要支付以太币,防范以太坊网络被滥用. 与比特币类似,用于激励矿工. 每次执行智能合约时,都需要消耗“汽油/gas”,即支付以太币. 以太坊(Ethereum)中的汽油/gas 以太坊(Ethereum)区块链网络上,每一次操作的执行都需要消耗“汽油/gas”,用户需要支付“油费”,“油费”用以太币计算,价格由矿工决定…
以太坊 EVM原理与实现 以太坊底层通过EVM模块支持合约的执行与调用,调用时根据合约地址获取到代码,生成环境后载入到EVM中运行.通常智能合约的开发流程是用solidlity编写逻辑代码,再通过编译器编译元数据,最后再发布到以太坊上. 代码结构 . ├── analysis.go //跳转目标判定 ├── common.go ├── contract.go //合约数据结构 ├── contracts.go //预编译好的合约 ├── errors.go ├── evm.go //执行器 对外…
首先,EVM的设计初衷是什么?它为什么被设计成目前我们看的样子呢?根据以太坊官方提供的设计原理说明,EVM的设计目标主要针对以下方面: 简单性(Simplicity) 确定性(Determinism) 节省空间的bytecode 专为区块链设计 更加简单的安全性保证 容易优化 如果读者浏览一下这个文档,会发现EVM的设计看上去都非常的合理.那么问题在哪里呢?问题就出在它和目前主流的技术以及设计范例都格格不入.EVM如果作为一个毫无限制的非现实世界中的设计确实很不错.接下来笔者会围绕EVM各个方面…
 EVM: 01 智能合约设计层面 缺乏标准库支持:EVM缺少完善的标准库支持,甚至最基本的string类型支持,在EVM中都很鸡肋,例如字符串拼接.切割.查找等等都需要开发者自己实现.带来的后果就是开发者需要关注更多非本身业务的零碎细节,不能专注本身业务开发.同时自行实现的类库可能会因为时间.空间复杂度太高,消耗大量无谓的gas,又或者开发者从开源项目中借鉴相关类库代码,但也会引入更多安全性方面的问题,加重合约代码审计的复杂度,亦是得不偿失. 难以调试和测试:EVM难以调试和测试,EVM除了能…