ethereumjs/ethereumjs-vm-5-vm对象

1.运行文件

var Buffer = require('safe-buffer').Buffer // use for Node.js <4.5.0
var VM = require('./index.js')

// create a new VM instance
var vm = new VM({chain : 'rinkeby'})//设置连接的为Rinkeby链
console.log(vm);

 

2.分析返回的vm对象:

VM {
  opts: { chain: 'rinkeby' },
  _common:
   Common {
     _chainParams:
      { name: 'rinkeby',
        chainId: 4,
        networkId: 4,
        comment: 'PoA test network',
        url: 'https://www.rinkeby.io',
        genesis:
         { hash:
            '0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177',
           timestamp: '0x58ee40ba',
           gasLimit: 4700000,
           difficulty: 1,
           nonce: '0x0000000000000000',
           extraData:
            '0x52657370656374206d7920617574686f7269746168207e452e436172746d616e42eb768f2244c8811c63729a21a3569731535f067ffc57839b00206d1ad20c69a1981b489f772031b279182d99e65703f0076e4812653aab85fca0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
           stateRoot:
            '0x53580584816f617295ea26c0e17641e0120cab2f0a8ffb53a866fd53aa8e8c2d' },
        hardforks:
         [ { name: 'chainstart', block: 0, consensus: 'poa', finality: null },
           { name: 'homestead', block: 1, consensus: 'poa', finality: null },
           { name: 'dao', block: null, consensus: 'poa', finality: null },
           { name: 'tangerineWhistle',
             block: 2,
             consensus: 'poa',
             finality: null },
           { name: 'spuriousDragon',
             block: 3,
             consensus: 'poa',
             finality: null },
           { name: 'byzantium',
             block: 1035301,
             consensus: 'poa',
             finality: null },
           { name: 'constantinople',
             block: null,
             consensus: 'poa',
             finality: null },
           { name: 'hybridCasper',
             block: null,
             consensus: 'poa',
             finality: 'pos' } ],
        bootstrapNodes:
         [ { ip: '52.169.42.101',
             port: 30303,
             id:
              'a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51296ff084b770b94fb9028c4d25ccf',
             location: 'IE',
             comment: '' },
           { ip: '52.3.158.184',
             port: 30303,
             id:
              '343149e4feefa15d882d9fe4ac7d88f885bd05ebb735e547f12e12080a9fa07c8014ca6fd7f373123488102fe5e34111f8509cf0b7de3f5b44339c9f25e87cb8',
             location: '',
             comment: 'INFURA' } ] },
     _hardfork: 'byzantium',
     _supportedHardforks: [ 'byzantium', 'constantinople' ] },
  stateManager:
   StateManager {
     _common:
      Common {
        _chainParams:
         { name: 'rinkeby',
           chainId: 4,
           networkId: 4,
           comment: 'PoA test network',
           url: 'https://www.rinkeby.io',
           genesis:
            { hash:
               '0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177',
              timestamp: '0x58ee40ba',
              gasLimit: 4700000,
              difficulty: 1,
              nonce: '0x0000000000000000',
              extraData:
               '0x52657370656374206d7920617574686f7269746168207e452e436172746d616e42eb768f2244c8811c63729a21a3569731535f067ffc57839b00206d1ad20c69a1981b489f772031b279182d99e65703f0076e4812653aab85fca0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
              stateRoot:
               '0x53580584816f617295ea26c0e17641e0120cab2f0a8ffb53a866fd53aa8e8c2d' },
           hardforks://从这里可以看出到哪个区块使用的是哪个硬分叉的类型
            [ { name: 'chainstart', block: 0, consensus: 'poa', finality: null },//第0个,即初始区块使用的是chainstart 
              { name: 'homestead', block: 1, consensus: 'poa', finality: null },//第一个区块使用的是homestead
              { name: 'dao', block: null, consensus: 'poa', finality: null },//没有使用这种硬分叉类型
              { name: 'tangerineWhistle',//第二个区块使用的是tangerineWhistle
                block: 2,
                consensus: 'poa',
                finality: null },
              { name: 'spuriousDragon',//从三个区块到第1035300使用的是spuriousDragon
                block: 3,
                consensus: 'poa',
                finality: null },
              { name: 'byzantium',//从第1035301个区块到后面使用的都是该硬分叉,现在同步到的区块应该都是第1035301个区块之后的区块了,所以应该满足的都是byzantium硬分叉
                block: 1035301,
                consensus: 'poa',
                finality: null },
              { name: 'constantinople',//没有使用这种硬分叉类型
                block: null,
                consensus: 'poa',
                finality: null },
              { name: 'hybridCasper',//没有使用这种硬分叉类型
                block: null,
                consensus: 'poa',
                finality: 'pos' } ],
           bootstrapNodes://该区块链是通过连接该bootstrapNodes节点对应的区块链得到的,它会同步该节点上至今的所有区块,然后就能够在该Rinkeby区块链上进行操作了
            [ { ip: '52.169.42.101',
                port: 30303,
                id:
                 'a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51296ff084b770b94fb9028c4d25ccf',
                location: 'IE',
                comment: '' },
              { ip: '52.3.158.184',
                port: 30303,
                id:
                 '343149e4feefa15d882d9fe4ac7d88f885bd05ebb735e547f12e12080a9fa07c8014ca6fd7f373123488102fe5e34111f8509cf0b7de3f5b44339c9f25e87cb8',
                location: '',
                comment: 'INFURA' } ] },
        _hardfork: 'byzantium',
        _supportedHardforks: [ 'byzantium', 'constantinople' ] },//设置的只支持的硬分叉
     _trie:
      SecureTrie {
        EMPTY_TRIE_ROOT:
         <Buffer 56 e8 1f 17 1b cc 55 a6 ff 83 45 e6 92 c0 f8 6e 5b 48 e0 1b 99 6c ad c0 01 62 2f b5 e3 63 b4 21>,
        sem:
         { capacity: 1,
           current: 0,
              .............................


                         buffer: true,
                         type: 'ucs-2' },
                      utf16le:
                       { encode: [Function: encode],
                         decode: [Function: decode],
                         buffer: true,
                         type: 'utf16le' },
                      'utf-16le':
                       { encode: [Function: encode],
                         decode: [Function: decode],
                         buffer: true,
                         type: 'utf-16le' } } },
                _status: 'opening',
                location: '',
                db:
                 DeferredLevelDOWN {
                   location: '',
                   status: 'new',
                   _db: undefined,
                   _operations: [],
                   _iterators: [] } } ],
           _root:
            <Buffer 56 e8 1f 17 1b cc 55 a6 ff 83 45 e6 92 c0 f8 6e 5b 48 e0 1b 99 6c ad c0 01 62 2f b5 e3 63 b4 21>,
           _scratch: null,
           _checkpoints: [],
           checkpoint: [Function: checkpoint],
           commit: [Function: commit],
           revert: [Function: revert],
           _enterCpMode: [Function: _enterCpMode],
           _exitCpMode: [Function: _exitCpMode],
           createScratchReadStream: [Function: createScratchReadStream],
           copy: [Function: bound copy],
           get: [Function: bound get],
           put: [Function: bound put],
           del: [Function: bound del] } },
     _touched: Set {},
     _touchedStack: [],
     _checkpointCount: 0 },
  blockchain:
   { fake: true,
     getBlock: [Function: getBlock],
     delBlock: [Function: delBlock],
     iterator: [Function: iterator] },
  allowUnlimitedContractSize: false,
  emitFreeLogs: false,
  _precompiled:
   { '0000000000000000000000000000000000000001': [Function],
     '0000000000000000000000000000000000000002': [Function],
     '0000000000000000000000000000000000000003': [Function],
     '0000000000000000000000000000000000000004': [Function],
     '0000000000000000000000000000000000000005': [Function],
     '0000000000000000000000000000000000000006': [Function],
     '0000000000000000000000000000000000000007': [Function],
     '0000000000000000000000000000000000000008': [Function] },
  _events: [Object: null prototype] {},
  _eventsCount: 0,
  _maxListeners: undefined }

从上面得知url: 'https://www.rinkeby.io',到该网站一查看:

 

1)其提供的连接该Rinkeby链的方法为:

https://www.rinkeby.io/#geth

geth --datadir=$HOME/.rinkeby init rinkeby.json

geth --networkid=4 --datadir=$HOME/.rinkeby --cache=1024 --syncmode=full --ethstats='yournode:Respect my authoritah!@stats.rinkeby.io' --bootnodes=enode://a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51296ff084b770b94fb9028c4d25ccf@52.169.42.101:30303

和vm返回对象中的bootstrapNodes值是相同的

 

2)从其提供的rinkeby.json-构造初始区块的文件得到:

{"config":{"chainId":4,"homesteadBlock":1,"eip150Block":2,"eip150Hash":"0x0000000000000000000000000000000000000000000000000000000000000000","eip155Block":3,"eip158Block":3,"byzantiumBlock":1035301,"clique":{"period":15,"epoch":30000}},"nonce":"0x0","timestamp":"0x58ee40ba","extraData":"0x52657370656374206d7920617574686f7269746168207e452e436172746d616e42eb768f2244c8811c63729a21a3569731535f067ffc57839b00206d1ad20c69a1981b489f772031b279182d99e65703f0076e4812653aab85fca0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","gasLimit":"0x47b760","difficulty":"0x1","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","coinbase":"0x0000000000000000000000000000000000000000",.....

其的各个部署信息extraData、timestamp、gasLimit、difficulty等值都是相同的,说明vm上的区块链的初始区块和这个Rinkeby链的初始区块相同

从其byzantiumBlockhomesteadBlock值中设置的硬分叉位置也与vm上的区块链的硬分叉配置相同

 

综上所述,说明设置的区块链连接的就是这个Rinkeby链,所以在该vm上交易或构建合约实际上就是运行在这个Rinkeby测试网络上

转载于:https://www.cnblogs.com/wanghui-garcia/p/10109900.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值