use remix-simulator package

pull/7/head
Iuri Matias 7 years ago
parent 110de29bb0
commit f3ef26ac48
  1. 3
      package.json
  2. 2
      run.js
  3. 75
      src/provider.js
  4. 98
      src/txProcess.js

@ -6,7 +6,7 @@
"contributors": [
{
"name": "Iuri Matias",
"email": "iuri.matias@gmail.com"
"email": "iuri@ethereum.org"
},
{
"name": "Yann Levreau",
@ -45,6 +45,7 @@
"ethereumjs-vm": "^2.3.2",
"remix-lib": "latest",
"remix-solidity": "latest",
"remix-simulator": "latest",
"standard": "^10.0.3",
"web3": "1.0.0-beta.27"
},

@ -3,7 +3,7 @@ const Web3 = require('web3')
const RemixTests = require('./index.js')
const fs = require('fs')
const Provider = require('./src/provider.js')
const Provider = require('remix-simulator').Provider;
commander.action(function (filename) {
let web3 = new Web3()

@ -1,75 +0,0 @@
var Web3 = require('web3')
var RemixLib = require('remix-lib')
var executionContext = RemixLib.execution.executionContext
var processTx = require('./txProcess.js')
function jsonRPCResponse (id, result) {
return {'id': id, 'jsonrpc': '2.0', 'result': result}
}
var Provider = function () {
this.web3 = new Web3()
// TODO: make it random
this.accounts = [this.web3.eth.accounts.create(['abcd'])]
this.accounts[this.accounts[0].address.toLowerCase()] = this.accounts[0]
this.accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer.from(this.accounts[this.accounts[0].address.toLowerCase()].privateKey.slice(2), 'hex')
// TODO: fix me; this is a temporary and very hackish thing just to get the getCode working for now
this.deployedContracts = {}
}
Provider.prototype.sendAsync = function (payload, callback) {
const self = this
if (payload.method === 'eth_accounts') {
return callback(null, jsonRPCResponse(payload.id, this.accounts.map((x) => x.address)))
}
if (payload.method === 'eth_estimateGas') {
callback(null, jsonRPCResponse(payload.id, 3000000))
}
if (payload.method === 'eth_gasPrice') {
callback(null, jsonRPCResponse(payload.id, 1))
}
if (payload.method === 'eth_sendTransaction') {
processTx(this.accounts, payload, false, callback)
}
if (payload.method === 'eth_getTransactionReceipt') {
executionContext.web3().eth.getTransactionReceipt(payload.params[0], (error, receipt) => {
if (error) {
return callback(error)
}
self.deployedContracts[receipt.contractAddress] = receipt.data
var r = {
'transactionHash': receipt.hash,
'transactionIndex': '0x00',
'blockHash': '0x766d18646a06cf74faeabf38597314f84a82c3851859d9da9d94fc8d037269e5',
'blockNumber': '0x06',
'gasUsed': '0x06345f',
'cumulativeGasUsed': '0x06345f',
'contractAddress': receipt.contractAddress,
'logs': [],
'status': 1
}
callback(null, jsonRPCResponse(payload.id, r))
})
}
if (payload.method === 'eth_getCode') {
let address = payload.params[0]
// let block = payload.params[1]
callback(null, jsonRPCResponse(payload.id, self.deployedContracts[address]))
}
if (payload.method === 'eth_call') {
processTx(this.accounts, payload, true, callback)
}
}
Provider.prototype.isConnected = function () {
return true
}
module.exports = Provider

@ -1,98 +0,0 @@
var RemixLib = require('remix-lib')
var TxExecution = RemixLib.execution.txExecution
var TxRunner = RemixLib.execution.txRunner
var executionContext = RemixLib.execution.executionContext
function jsonRPCResponse (id, result) {
return {'id': id, 'jsonrpc': '2.0', 'result': result}
}
function runTx (payload, from, to, data, value, gasLimit, txRunner, callbacks, isCall, callback) {
let finalCallback = function (err, result) {
if (err) {
return callback(err)
}
let toReturn
if (isCall) {
toReturn = '0x' + result.result.vm.return.toString('hex')
if (toReturn === '0x') {
toReturn = '0x0'
}
} else {
toReturn = result.transactionHash
}
callback(null, jsonRPCResponse(payload.id, toReturn))
}
TxExecution.callFunction(from, to, data, value, gasLimit, null, txRunner, callbacks, finalCallback, isCall)
}
function createContract (payload, from, data, value, gasLimit, txRunner, callbacks, callback) {
let finalCallback = function (err, result) {
if (err) {
return callback(err)
}
// let contractAddress = ('0x' + result.result.createdAddress.toString('hex'))
callback(null, jsonRPCResponse(payload.id, result.transactionHash))
}
TxExecution.createContract(from, data, value, gasLimit, txRunner, callbacks, finalCallback)
}
function processTx (accounts, payload, isCall, callback) {
let api = {
logMessage: (msg) => {
},
logHtmlMessage: (msg) => {
},
// config: self._api.config,
config: {
getUnpersistedProperty: (key) => {
// if (key === 'settings/always-use-vm') {
// return true
// }
return true
},
get: () => {
return true
}
},
detectNetwork: (cb) => {
cb()
},
personalMode: () => {
// return self._api.config.get('settings/personal-mode')
return false
}
}
executionContext.init(api.config)
let txRunner = new TxRunner(accounts, api)
let { from, to, data, value, gas } = payload.params[0]
gas = gas || 3000000
let callbacks = {
confirmationCb: (network, tx, gasEstimation, continueTxExecution, cancelCb) => {
continueTxExecution(null)
},
gasEstimationForceSend: (error, continueTxExecution, cancelCb) => {
if (error) {
continueTxExecution(error)
}
continueTxExecution()
},
promptCb: (okCb, cancelCb) => {
okCb()
}
}
if (to) {
runTx(payload, from, to, data, value, gas, txRunner, callbacks, isCall, callback)
} else {
createContract(payload, from, data, value, gas, txRunner, callbacks, callback)
}
}
module.exports = processTx
Loading…
Cancel
Save