git ssb

0+

wanderer🌟 / js-primea-hypervisor



Tree: 3679fc587de81f2895a4acc725caff62e8e644f0

Files: 3679fc587de81f2895a4acc725caff62e8e644f0 / tests / interfaceRunner.js

2340 bytesRaw
1const tape = require('tape')
2const fs = require('fs')
3const Vertex = require('merkle-trie')
4const Block = require('../deps/block')
5const U128 = require('fixed-bn.js').U128
6const Address = require('fixed-bn.js').Address
7// TODO remove fakeblockchain
8const fakeBlockChain = require('../fakeBlockChain.js')
9const Hypervisor = require('../hypervisor.js')
10const Message = require('../message.js')
11const common = require('../common')
12const EVMinterface = require('../EVMinterface.js')
13
14const dir = `${__dirname}/interface`
15// get the test names
16let tests = fs.readdirSync(dir).filter((file) => file.endsWith('.wast'))
17runTests(tests)
18
19function runTests (tests) {
20 for (let testName of tests) {
21 testName = testName.split('.')[0]
22 tape(testName, async (t) => {
23 const hypervisor = new Hypervisor(new Vertex(), [EVMinterface])
24 const rootVertex = hypervisor.state
25 const code = fs.readFileSync(`${dir}/${testName}.wasm`)
26 const envData = JSON.parse(fs.readFileSync(`${dir}/${testName}.json`).toString())
27
28 for (let address in envData.state) {
29 const account = envData.state[address]
30 const accountVertex = new Vertex()
31
32 accountVertex.set('code', new Vertex({
33 value: code
34 }))
35
36 accountVertex.set('balance', new Vertex({
37 value: new Buffer(account.balance.slice(2), 'hex')
38 }))
39
40 for (let key in account.storage) {
41 accountVertex.set(['storage', ...new Buffer(key.slice(2), 'hex')], new Vertex({
42 value: new Buffer(account.storage[key].slice(2), 'hex')
43 }))
44 }
45
46 const path = ['accounts', address]
47 rootVertex.set(path, accountVertex)
48 }
49
50 rootVertex.set('blockchain', new Vertex({
51 value: fakeBlockChain
52 }))
53
54 const block = new Block()
55 block.header.coinbase = new Address(envData.coinbase)
56
57 const message = new Message()
58 message.to = ['accounts', envData.caller, common.PARENT, envData.address, 'code']
59 message.data = new Buffer(envData.callData.slice(2), 'hex')
60 message.value = new U128(envData.callValue)
61 message.gas = envData.gasLeft
62 message.block = block
63 message.blockchain = fakeBlockChain
64
65 const results = await hypervisor.send(message)
66 t.equals(results.exception, undefined)
67 t.end()
68 })
69 }
70}
71

Built with git-ssb-web