ethereumjs/ethereumjs-vm-1-简介
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
版本发布开始,我们现在支持Byzantium
和Constantinople
两种分支规则-目前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 CREATE
, CALL
, and CALLCODE
call back up to runCall
.
用于CREATE
, CALL和
CALLCODE调用的
opFns将会回调到 runCall
。
DEVELOPMENT开发
Developer documentation - currently mainly with information on testing and debugging - can be found here.
开发者文档-目前主要是测试和调试信息-可在here找到
ethereumjs/ethereumjs-vm-1-简介的更多相关文章
- VM参数简介
http://www.cnblogs.com/yuzhaoxin/p/4083612.html block_dump Linux 内核里提供了一个 block_dump 参数用来把 block 读写( ...
- java visual VM使用简介
转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/44999175 作者:小马 VisualVM 是一款免费的性能分析工具.它通过 jv ...
- VMP虚拟机加壳的原理学习
好久没有到博客写文章了,9月份开学有点忙,参加了一个上海的一个CHINA SIG信息比赛,前几天又无锡南京来回跑了几趟,签了阿里巴巴的安全工程师,准备11月以后过去实习,这之前就好好待在学校学习了. ...
- 由异常掉电问题---谈xfs文件系统
由异常掉电问题---谈xfs文件系统 本文皆是作者自己的学习总结或感悟(linux环境),如有不对,欢迎提出一起探讨!! 目录结构 一.相关知识 二.问题提出 三.处理方法 四.最终结果 一.相关知识 ...
- 16. Vue2.4+新增属性$attrs
vm.$attrs简介 首先我们来看下vue官方对vm.$attrs的介绍: 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外).当一个组件没有声明 ...
- ethereumjs/ethereumjs-util
ethereumjs/ethereumjs-util Most of the string manipulation methods are provided by ethjs-util 更多的字符串 ...
- ethereumjs/ethereumjs-common-1-简介
为了了解ethereumjs/ethereumjs-block-3-代码的使用需要了解的一个模块 https://github.com/ethereumjs/ethereumjs-common Com ...
- ethereumjs/ethereumjs-common-2-API文档
https://github.com/ethereumjs/ethereumjs-common/blob/master/docs/index.md 该API的调用的详细例子可见ethereumjs/e ...
- ethereumjs/browser-builds
https://github.com/ethereumjs/browser-builds ethereumjs - Browser Builds This repository contains br ...
- ethereumjs/ethereumjs-vm-2-API文档
https://github.com/ethereumjs/ethereumjs-vm/blob/master/docs/index.md vm.runBlockchain Processes blo ...
随机推荐
- 面向对象(基础oop)之进入继承
大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...
- 安装vmware player
一.简介 什么是虚拟机? 虚拟机是通过软件来模拟一个完整的计算机系统.简单来说,你可以在当前系统中通过虚拟机软件运行另外一个系统,并且与当前系统隔离. 什么是vmware? vmware(virtua ...
- fzou 1759 Super A^B mod C
Problem 1759 Super A^B mod CAccept: 456 Submit: 1488Time Limit: 1000 mSec Memory Limit : 32768 ...
- aabb问题
输出所有aabb型的完全平方数 这个问题主要是提供一个判断完全平方的思路,就是用floor函数 #include <iostream> #include <string> #i ...
- IDEA 如何加上 tomcat
前言: idea 上已经有一个 tomcat 了,因为这个 tomcat 为 32 的,需要加一个 64 为的 tomcat . 第一步: 第二步: 第三步: 点击 OK 就好. 结果:
- luogu P2801 教主的魔法
题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是 ...
- BZOJ P2157 旅游
题目大意: 维护一棵树,每条边有边权,支持下列操作:1.修改某条边的边权2.将某条路经上的边权取反3.询问某条路经上的和4.询问某条路经上的最大值5.询问某条路经上的最小值 --by BZOJ; ht ...
- Android实现图片下载并保存SD卡
一.首先获取图片 //第一种获取图片的方法 String filePath = downloadUrl; //以下是取得图片的方法 取得的是InputStream,直接从InputStream生成bi ...
- mysql错误:Statement violates GTID consistency
在MYSQL中,执行建表语句时CREATE TABLE aaaa AS SELECT * FROM menu; 报: 错误代码: 1786Statement violates GTID cons ...
- leetcode Ch7-Graph Search
1. Clone Graph BFS: class Solution { public: typedef UndirectedGraphNode UGNode; UndirectedGraphNode ...