以太坊开发

  • 时间:
  • 浏览:75
  • 来源:uedbet体育官网-uedbet赫塔菲

  以太坊底层通过EVM模块支持合约的执行与调用,调用时根据合约地址获取到代码,生成环境后bet365载入到EVM中运行。通常智能合约的开发流程是用solidlity编写逻辑代码,再通过编译器编译元数据,最后再发布到以太坊上。

  指令

  OpCode

  文件opcodes.go中定义了所有的OpCode,该值是一个byte,合约编译出来的bytecode中,一个OpCode就是上面的一位。opcodes按功能分为9组(运算相关,块操作,加密相关等)。

  Instruction

  文件jump.table.go定义了四种指令集合,每个集合实质上是个256长度的数组,名字翻译过来是(荒地,农庄,拜占庭,君士坦丁堡)估计是对应了EVM的四个发展阶段。指令集向前兼容。

  具体每条指令结构如下,字段意思见注释。

  按下面的ADD指令为例

  操作

  不同的操作有所不同,操作对象根据指令不同可能影响栈,内存,statedb。

  gas花费

  不同的运算有不同的初始值和对应的运算方法,具体的方法都定义在gas_table里面。 按加法的为例,一次加操作固定耗费为3。

  除此之外还有两个定义会影响gas的计算,通常作为量化的一个单位。

  memorySize

  因为加操作不需要申请内存因而memorySize为默认值0。

  栈验证

  先验证栈上的操作数够不够,再验证栈是否超出最大限制,加法在这里仅需验证其参数够不够,运算之后栈是要减一的。

  智能合约

  合约是EVM智能合约的存储单位也是解释器执行的基本单位,包含了代bet365码,调用人,所有人,gas相关的信息.

  EVM原生预编译了一批合约,定义在contracts.go里面。主要用于加密操作。

  执行机

  栈

  EVM中栈用于保存操作数,每个操作数的类型是big.int,这就是网上很多人说EVM是256位虚拟机的原因。执行opcode的时候,从上往下弹出操作数,作为操作的参数。

  内存

  内存用于一些内存操作(MLOAD,MSTORE,MSTORE8)及合约调用的参数拷贝(CALL,CALLCODE)。

  内存数据结构,维护了一个byte数组,MLOAD,MSTORE读取存入的时候都要指定位置及长度才能准确的读写。

  内存操作

  stateDb

  合约本身不保存数据,那么合约的数据是保存在哪里呢?合约及其调用类似于数据库的日志,保存了合约定义以及对他的一系列操作,只要将这些操作执行一遍就能获取当前的结果,但是如果每次都要去执行就太慢了,因而这部分数据是会持久化到stateDb里面的。code中定义了两条指令SSTORE SLOAD用于从db中读写合约当前的状态。

  执行过程

  执行入口定义在evm.go中,功能就是组装执行环境(代码,执行人关系,参数等)。

  类似的函数有四个。详细区别见最后的参考。

  Call A->B A,B的环境独立

  CallCode、 和Call类似 区别在于storage位置不一样

  DelegateCall、 和CallCode类似,区别在于msg.send不一样

  StaticCall 和call相似 只是不能修改状态

  Contract和参数构造完成后调用执行函数,bet365官方执行函数会检查调用的是否会之前编译好的原生合约,如果是原生合约则调用原生合约,否则调用解释器执行函数运算合约。

  解释器

  Solidity案例

  和其他语言类似,有了字节码运行机,就可以在字节码上面再组织其他高级语言,而solidlity语言就是实现了这样的语言编译器,方便了合约编写,有利于推广以太坊dapp开发。

  生成的Opcodes码

  JUMPDEST 函数入口

  PUSH + JUMPI/JUMP 类似于调用函数

  CALLDATASIZE + CALLDATALOAD 大约是获取函数参数

  参考

  Call、CallCode、DelegateCall:https://ethereum.stackexchange.com/questions/3667/difference-between-call-callcode-and-delegatecall

  solidity结构:https://solidity.readthedocs.io/en/develop/structure-of-a-contract.html#

  runtime bytecode和bytecode :https://ethereum.stackexchange.com/questions/13086/solc-bin-vs-bin-runtime/13087#13087

  remix: https://remix.ethereum.org/

  转自:(魂祭心)https://my.oschina.net/hunjixin/blog/1805306。

  安利两个教程:1.以太坊入门实战 2.以太坊电商DApp实战


bet365 bet365

猜你喜欢

《LOL英雄联盟》青蛙有哪些新套路 潘森和岩雀走下的组合骚操作介绍

在英雄这款游戏中,除了中流行的打法之外,其他很多时候还是有黑科技的存在!像现在9.5版本中,下路AD妮蔻也是在增强后迅速大火,但立马又被紧急削弱了。近日苦于上分的虎牙主播,就开

2019-07-12