https://github.com/ethereumjs/ethereumjs-vm

其实这就是怎么自己使用该模块来生成一个类似geth客户端的以太坊虚拟机,然后进行各类区块链操作

SYNOPSIS概要

Implements Ethereum's VM in Javascript.用Javascript实现以太坊虚拟机

Fork Support分支支持

Starting with the v2.5.0 release we now support both Byzantium and Constantinople fork rules - with Byzantium currently being the default (this will change in the future). See release notes for further details and have a look at the API docs on instructions how to instantiate the VM with the respective fork rules.

v2.5.0版本发布开始,我们现在支持ByzantiumConstantinople两种分支规则-目前Byzantium是默认值(未来会改变)。看 release notes 了解更多版本细节并在说明中查看 API docs文档,了解要如何根据相应的版本初始化虚拟机

If you are still looking for a Spurious Dragon compatible version of this library install the latest of the 2.2.x series (see Changelog).

如果你仍在寻找这个库的Spurious Dragon兼容版本,可以安装最新的2.2.x系列

INSTALL

npm install ethereumjs-vm

 

USAGE

var VM = require('ethereumjs-vm')

//create a new VM instance
var vm = new VM()
var code = '7f4e616d65526567000000000000000000000000000000000000000000000000003055307f4e616d6552656700000000000000000000000000000000000000000000000000557f436f6e666967000000000000000000000000000000000000000000000000000073661005d2720d855f1d9976f88bb10c1a3398c77f5573661005d2720d855f1d9976f88bb10c1a3398c77f7f436f6e6669670000000000000000000000000000000000000000000000000000553360455560df806100c56000396000f3007f726567697374657200000000000000000000000000000000000000000000000060003514156053576020355415603257005b335415603e5760003354555b6020353360006000a233602035556020353355005b60007f756e72656769737465720000000000000000000000000000000000000000000060003514156082575033545b1560995733335460006000a2600033545560003355005b60007f6b696c6c00000000000000000000000000000000000000000000000000000000600035141560cb575060455433145b1560d25733ff5b6000355460005260206000f3' vm.runCode({
code: Buffer.from(code, 'hex'), // code needs to be a Buffer
gasLimit: Buffer.from('ffffffff', 'hex')
}, function(err, results){
console.log('returned: ' + results.return.toString('hex'));
})

Also more examples can be found here更多的例子可以在下面找到

BROWSER

To build for standalone use in the browser, install browserify and check run-transactions-simple example. This will give you a global variable EthVM to use. The generated file will be at ./examples/run-transactions-simple/build.js.

为了创建能够在浏览器中单独使用的情况,需要安装browserify模块,然后查看 run-transactions-simple example例子(可看本博客ethereumjs-vm/examples/run-transactions-simple)。这将提供全局变量EthVM 给你使用。生成的文件将在./examples/run-transactions-simple/build.js

API

VM

For documentation on VM instantiation, exposed API and emitted events see generated API docs.

有关VM实例化、公开API和发出事件的文档,可见生成的API docs  (可看本博客ethereumjs/ethereumjs-vm-2-API文档)

StateManger状态管理

The API for the StateManager is currently in Beta, separate documentation can be found here.StateManager的API目前还是Beta版本,其单独的文档可见 here (可看本博客ethereumjs/ethereumjs-vm-3-StateManager

The StateManager API has been largely reworked recently and the StateManager will be removed from the VM and provided as a separate package in a future v3.0.0 release, see release notes for the v2.5.0 VM release for further details.StateManager的API最近已经重新复用,并且StateManager将从VM中移除,在未来的v3.0.0版本中将作为单独的包来提供,更过未来的细节可见v2.5.0版本的VM发行release notes

Internal Structure内部结构

The VM processes state changes at many levels.

VM在许多级别上流程状态会变化

  • runBlockchain

    • for every block, runBlock 就是对链上的没有区块都运行runBlock方法
  • runBlock
    • for every tx, runTx  就是对区块中的所有交易都运行runTx方法
    • pay miner and uncles  然后付款给矿工和叔块
  • runTx
    • check sender balance 先查看发送者的余额
    • check sender nonce 再检查发送者的nonce值
    • runCall  运行runCall方法
    • transfer gas charges  转移收取的gas费用
  • runCall
    • checkpoint state  保存检查点状态
    • transfer value  转移值
    • load code  下载代码
    • runCode  运行runCode方法
    • materialize created contracts  实现创建的合约
    • revert or commit checkpoint  恢复或提交检查点状态
  • runCode
    • iterate over code 遍历代码
    • run op codes 运行操作码
    • track gas usage 追踪gas的使用
  • OpFns
    • run individual op code 独自运行操作码
    • modify stack 修改堆栈
    • modify memory 修改内存
    • calculate fee 计算开销

The opFns for CREATECALL, and CALLCODE call back up to runCall.

用于CREATECALL和CALLCODE调用的opFns将会回调到 runCall

DEVELOPMENT开发

Developer documentation - currently mainly with information on testing and debugging - can be found here.

开发者文档-目前主要是测试和调试信息-可在here找到

Spurious Dragon

ethereumjs/ethereumjs-vm-1-简介的更多相关文章

  1. VM参数简介

    http://www.cnblogs.com/yuzhaoxin/p/4083612.html block_dump Linux 内核里提供了一个 block_dump 参数用来把 block 读写( ...

  2. java visual VM使用简介

    转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/44999175 作者:小马 VisualVM 是一款免费的性能分析工具.它通过 jv ...

  3. VMP虚拟机加壳的原理学习

    好久没有到博客写文章了,9月份开学有点忙,参加了一个上海的一个CHINA SIG信息比赛,前几天又无锡南京来回跑了几趟,签了阿里巴巴的安全工程师,准备11月以后过去实习,这之前就好好待在学校学习了. ...

  4. 由异常掉电问题---谈xfs文件系统

    由异常掉电问题---谈xfs文件系统 本文皆是作者自己的学习总结或感悟(linux环境),如有不对,欢迎提出一起探讨!! 目录结构 一.相关知识 二.问题提出 三.处理方法 四.最终结果 一.相关知识 ...

  5. 16. Vue2.4+新增属性$attrs

    vm.$attrs简介 首先我们来看下vue官方对vm.$attrs的介绍: 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外).当一个组件没有声明 ...

  6. ethereumjs/ethereumjs-util

    ethereumjs/ethereumjs-util Most of the string manipulation methods are provided by ethjs-util 更多的字符串 ...

  7. ethereumjs/ethereumjs-common-1-简介

    为了了解ethereumjs/ethereumjs-block-3-代码的使用需要了解的一个模块 https://github.com/ethereumjs/ethereumjs-common Com ...

  8. ethereumjs/ethereumjs-common-2-API文档

    https://github.com/ethereumjs/ethereumjs-common/blob/master/docs/index.md 该API的调用的详细例子可见ethereumjs/e ...

  9. ethereumjs/browser-builds

    https://github.com/ethereumjs/browser-builds ethereumjs - Browser Builds This repository contains br ...

  10. ethereumjs/ethereumjs-vm-2-API文档

    https://github.com/ethereumjs/ethereumjs-vm/blob/master/docs/index.md vm.runBlockchain Processes blo ...

随机推荐

  1. XML文档的解析—dom4j

    XML为可扩展标记语言,它主要是用来保存数据,做配置文件,数据传输载体等.其实就是一个后缀名为.xml的文件. XML命名规则 名称可以含字母.数字以及其他的字符 名称不能以数字或者标点符号开始 名称 ...

  2. golang 编码转化

    在网上搜索golang编码转化时,我们经常看到的文章是使用下面一些第三方库: https://github.com/djimenez/iconv-go https://github.com/qiniu ...

  3. SSH注解方式与XML配置方式对照表

    一.Hibernate 1.一对多注解 2.单表注解 二.Struts2 Struts2注解 三.Spring 1.IOC注解 2.AOP注解

  4. CentOS网卡显示为__tmpxxxxxxxx

    一台服务器做了2组端口绑定(bonding),其中一组bond总是不成功,发现少了eth0/eth5 两个网卡,后来通过ifconfig -a 发现多了两个__tmpxxx的网卡 ifconfig - ...

  5. C语言——二叉排序树

    二叉排序树是一种实现动态查找的树表,又称二叉查找树. 二叉排序树的性质: 1. 若它的左子树不为空,则左子树上所有节点的键值均小于它的根节点键值 2. 若它的右子树不为空,则右子树上所有节点的键值均大 ...

  6. 横向开关(switch)

    横向开关(switch) 一:属性 1.Activity //横向开关 public class SwitchActivity extends Activity { private Switch sw ...

  7. *.vue文件的template标签内使用form标签

    由于form表单有重复提交的问题,所以在vue文件内直接使用form标签时需要注意这个问题,否则会导致页面重复刷新跳转不成功的问题 解决方案: <form @submit.prevent> ...

  8. 路飞学城知识点3缓存知识点之一Djang自带的缓存

    缓存是暂时把数据放到哪儿的意思,用于提高查询的访问速度用的,mysql等关系型数据库通常用作备份,数据库进行增删改操作一段时间内存同步到缓存(非关系型数据库中) 缓存与内存的区别: 通常把数据放到内存 ...

  9. mac下 IDEA 的pom下 出现 Cannot access in offline mode 问题

    在mac下 配置完maven后发现总是不能引入最新的jar包,google了好久总算找到解决办法: 默认带有work offline ,不清楚这个是干嘛用的.勾选掉 了就行了.

  10. 构建微软智能云:介绍新的Azure业务转型创新技术

    在我和用户的交流中发现,在任何类型和规模的组织中,每当涉及到在云中实现商业价值的最大化并取得竞争优势的时候,就会明显呈现三个趋势.首先,应用程序促进着组织更快速实现价值.同时,诸如机器学习.数据预测分 ...