EVM: 01 智能合约设计层面 缺乏标准库支持:EVM缺少完善的标准库支持,甚至最基本的string类型支持,在EVM中都很鸡肋,例如字符串拼接.切割.查找等等都需要开发者自己实现.带来的后果就是开发者需要关注更多非本身业务的零碎细节,不能专注本身业务开发.同时自行实现的类库可能会因为时间.空间复杂度太高,消耗大量无谓的gas,又或者开发者从开源项目中借鉴相关类库代码,但也会引入更多安全性方面的问题,加重合约代码审计的复杂度,亦是得不偿失. 难以调试和测试:EVM难以调试和测试,EVM除了能…
以太坊被称为区块链2.0,就是因为以太坊在应用层提供了虚拟机,使得开发者可以基于它自定义逻辑,通常被称为智能合约,合约中的公共接口可以作为区块链中的普通交易执行.本文就智能合约发代币流程作一完整介绍(当然智能合约不局限于发代币).内容如下: Solidity ERC20 合约编写与发布 合约源码上传 其它 Solidity Solidity是用于在以太坊编写智能合约的语言,目前最新版本0.5.11.这里对几个关键概念作一介绍. library library常用于提供可复用方法,可以随合约[作为…
以太坊 EVM原理与实现 以太坊底层通过EVM模块支持合约的执行与调用,调用时根据合约地址获取到代码,生成环境后载入到EVM中运行.通常智能合约的开发流程是用solidlity编写逻辑代码,再通过编译器编译元数据,最后再发布到以太坊上. 代码结构 . ├── analysis.go //跳转目标判定 ├── common.go ├── contract.go //合约数据结构 ├── contracts.go //预编译好的合约 ├── errors.go ├── evm.go //执行器 对外…
转载链接:https://ethfans.org/posts/solidity-chapter1-introduciton-to-smart-contracts 概括总览: 以太坊虚拟机(EVM)是以太坊中智能合约的运行环境.它不仅被沙箱封装起来,事实上它被完全隔离,也就是说运行在EVM内部的代码不能接触到网络.文件系统或者其它进程.甚至智能合约与其它智能合约只有有限的接触. 账户: 以太坊中有两类账户,它们共用同一个地址空间.外部账户,该类账户被公钥-私钥对控制(人类).合约账户,该类账户被存…
首先,EVM的设计初衷是什么?它为什么被设计成目前我们看的样子呢?根据以太坊官方提供的设计原理说明,EVM的设计目标主要针对以下方面: 简单性(Simplicity) 确定性(Determinism) 节省空间的bytecode 专为区块链设计 更加简单的安全性保证 容易优化 如果读者浏览一下这个文档,会发现EVM的设计看上去都非常的合理.那么问题在哪里呢?问题就出在它和目前主流的技术以及设计范例都格格不入.EVM如果作为一个毫无限制的非现实世界中的设计确实很不错.接下来笔者会围绕EVM各个方面…
以太坊虚拟机(EVM) 以太坊虚拟机(Ethereum Virtual Machine,简称EVM)是一个基于栈的虚拟机,基于特定的环境数据,执行一系列的字节代码形式的指令,以修改系统状态.EVM目前提供了11类,140个指令. EVM是一个准图灵机,这个"准"的限定来源于其中的运算是通过参数gas来限制的,也就是限定了可以执行的运算总量.EVM的具体逻辑定义为代码执行函数(Ξ): \((\boldsymbol{\sigma}', g', A, \mathbf{o}) \equiv \…
最近在看以太坊(Ethereum)的源代码, 初初看出点眉目. 区块链是近年热点之一,面向大众读者介绍概念的文章无数,有兴趣的朋友可自行搜索.我会从源代码实现入手,较系统的介绍一下以太坊的系统设计和协议实现等,希望能提供有一定深度的内容,欢迎有兴趣的朋友多多讨论. 注:1.源代码在github上, 分C++和Golang两个版本,这里我选择的是Go语言版(github.com/ethereum/go-ethereum),以下文中提到的Ethereum 代码部分,如无特别说明,均指go-ether…
以太坊(Ethereum)网络中,定义了一组通用协议用于支持智能合约的运行,其核心便是以太坊(Ethereum)虚拟机. 下图解释了该架构: 开发人员使用Solidity等开发语言开发智能合约 源程序被编译成以太坊虚拟机支持的字节码可执行程序 可执行程序被部署到网络中,即写入区块,并被分配一个账号(地址) 外部账号或其他合约账号,可以通过该智能合约的账号访问它 需要注意的是,以太坊(Ethereum)虚拟机不仅是完全沙箱化的,而且是完全隔离的.这意味着当前在EVM上运行的代码不能访问网络或文件系…
作用:执行智能合约代码的引擎 以太坊(Ethereum)虚拟机是执行智能合约代码的引擎. 可以用某种语言,例如Solidity语言,开发智能合约程序,编译成以太坊(Ethereum)虚拟机支持的字节码/bytecode,然后该程序就可以在虚拟机中执行了. 以太坊(Ethereum)虚拟机可以被看做是一个大型的分布式计算机. 以太坊(Ethereum)以虚拟机为核心,支持开发各种应用程序,来充分挖掘区块链技术的应用场景和潜力. 以太坊(Ethereum)网络中运行的应用,被称为分布式应用 – DA…
在本系列的上一篇文章中我们看到了Solidity是如何在EVM存储器中表示复杂数据结构的.但是如果无法交互,数据就是没有意义的.智能合约就是数据和外界的中间体. 在这篇文章中我们将会看到Solidity和EVM可以让外部程序来调用合约的方法并改变它的状态. “外部程序”不限于DApp/JavaScript.任何可以使用HTTP RPC与以太坊节点通信的程序,都可以通过创建一个交易与部署在区块链上的任何合约进行交互. 创建一个交易就像发送一个HTTP请求.Web的服务器会接收你的HTTP请求,然后…