pull/747/head
yann300 4 years ago
parent 44eac57b93
commit 6ad6a25916
  1. 2
      libs/remix-lib/src/execution/execution-context.ts
  2. 7
      libs/remix-lib/src/execution/txRunnerVM.ts
  3. 10
      libs/remix-lib/src/execution/txRunnerWeb3.ts
  4. 2
      libs/remix-lib/src/web3Provider/web3VmProvider.ts
  5. 7
      libs/remix-simulator/src/methods/transactions.ts
  6. 3
      libs/remix-simulator/src/methods/txProcess.ts
  7. 9
      libs/remix-simulator/src/provider.ts
  8. 29
      libs/remix-simulator/src/vm-context.ts

@ -343,5 +343,5 @@ export class ExecutionContext {
if (transactionDetailsLinks[network]) { if (transactionDetailsLinks[network]) {
return transactionDetailsLinks[network] + hash return transactionDetailsLinks[network] + hash
} }
} }
} }

@ -27,7 +27,7 @@ export class TxRunnerVM {
this.blockNumber = 0 this.blockNumber = 0
this.runAsync = true this.runAsync = true
this.blockNumber = 0 // The VM is running in Homestead mode, which started at this block. this.blockNumber = 0 // The VM is running in Homestead mode, which started at this block.
this.runAsync = false // We have to run like this cause the VM Event Manager does not support running multiple txs at the same time. this.runAsync = false // We have to run like this cause the VM Event Manager does not support running multiple txs at the same time.
this.pendingTxs = {} this.pendingTxs = {}
this.vmaccounts = vmaccounts this.vmaccounts = vmaccounts
this.queusTxs = [] this.queusTxs = []
@ -110,11 +110,10 @@ export class TxRunnerVM {
result: result, result: result,
transactionHash: bufferToHex(Buffer.from(tx.hash())), transactionHash: bufferToHex(Buffer.from(tx.hash())),
block, block,
tx, tx
}) })
}).catch(function (err) { }).catch(function (err) {
callback(err) callback(err)
}) })
} }
} }

@ -65,8 +65,8 @@ export class TxRunnerWeb3 {
data = '0x' + data data = '0x' + data
} }
return this.runInNode(args.from, args.to, data, args.value, args.gasLimit, args.useCall, args.timestamp, confirmationCb, gasEstimationForceSend, promptCb, callback) return this.runInNode(args.from, args.to, data, args.value, args.gasLimit, args.useCall, args.timestamp, confirmationCb, gasEstimationForceSend, promptCb, callback)
} }
runInNode (from, to, data, value, gasLimit, useCall, timestamp, confirmCb, gasEstimationForceSend, promptCb, callback) { runInNode (from, to, data, value, gasLimit, useCall, timestamp, confirmCb, gasEstimationForceSend, promptCb, callback) {
const tx = { from: from, to: to, data: data, value: value } const tx = { from: from, to: to, data: data, value: value }
@ -76,16 +76,16 @@ export class TxRunnerWeb3 {
tx['gas'] = gasLimit tx['gas'] = gasLimit
tx['timestamp'] = timestamp tx['timestamp'] = timestamp
return this.getWeb3().eth.call(tx, function (error, result: any) { return this.getWeb3().eth.call(tx, function (error, result: any) {
if (error) return callback(error) if (error) return callback(error)
callback(null, { callback(null, {
result: result result: result
}) })
}) })
} }
this.getWeb3().eth.estimateGas(tx, (err, gasEstimation) => { this.getWeb3().eth.estimateGas(tx, (err, gasEstimation) => {
if (err && err.message.indexOf('Invalid JSON RPC response') !== -1) { if (err && err.message.indexOf('Invalid JSON RPC response') !== -1) {
// // @todo(#378) this should be removed when https://github.com/WalletConnect/walletconnect-monorepo/issues/334 is fixed // // @todo(#378) this should be removed when https://github.com/WalletConnect/walletconnect-monorepo/issues/334 is fixed
new Error('Gas estimation failed because of an unknown internal error. This may indicated that the transaction will fail.') callback(new Error('Gas estimation failed because of an unknown internal error. This may indicated that the transaction will fail.'))
} }
gasEstimationForceSend(err, () => { gasEstimationForceSend(err, () => {
// callback is called whenever no error // callback is called whenever no error

@ -74,7 +74,7 @@ export class Web3VmProvider {
this.utils = Web3.utils || [] this.utils = Web3.utils || []
this.txsMapBlock = {} this.txsMapBlock = {}
this.blocks = {} this.blocks = {}
this.latestBlockNumber this.latestBlockNumber = 0
} }
setVM (vm) { setVM (vm) {

@ -7,7 +7,6 @@ export class Transactions {
accounts accounts
tags tags
constructor (vmContext) { constructor (vmContext) {
this.vmContext = vmContext this.vmContext = vmContext
this.tags = {} this.tags = {}
@ -44,7 +43,7 @@ export class Transactions {
const hash = '0x' + result.tx.hash().toString('hex') const hash = '0x' + result.tx.hash().toString('hex')
this.vmContext.trackTx(hash, result.block) this.vmContext.trackTx(hash, result.block)
this.vmContext.trackExecResult(hash, result.result.execResult) this.vmContext.trackExecResult(hash, result.result.execResult)
return cb (null, result.transactionHash) return cb(null, result.transactionHash)
} }
cb(error) cb(error)
}) })
@ -110,7 +109,7 @@ export class Transactions {
} }
payload.params[0].value = undefined payload.params[0].value = undefined
const tag = payload.params[0].timestamp // e2e reference const tag = payload.params[0].timestamp // e2e reference
processTx(this.vmContext, this.accounts, payload, true, (error, result) => { processTx(this.vmContext, this.accounts, payload, true, (error, result) => {
@ -122,7 +121,7 @@ export class Transactions {
this.tags[tag] = result.transactionHash this.tags[tag] = result.transactionHash
// calls are not supposed to return a transaction hash. we do this for keeping track of it and allowing debugging calls. // calls are not supposed to return a transaction hash. we do this for keeping track of it and allowing debugging calls.
const returnValue = `0x${result.result.execResult.returnValue.toString('hex') || '0'}` const returnValue = `0x${result.result.execResult.returnValue.toString('hex') || '0'}`
return cb (null, returnValue) return cb(null, returnValue)
} }
cb(error) cb(error)
}) })

@ -3,12 +3,11 @@ const TxExecution = execution.txExecution
const TxRunnerVM = execution.TxRunnerVM const TxRunnerVM = execution.TxRunnerVM
const TxRunner = execution.TxRunner const TxRunner = execution.TxRunner
function runCall (payload, from, to, data, value, gasLimit, txRunner, callbacks, callback) { function runCall (payload, from, to, data, value, gasLimit, txRunner, callbacks, callback) {
const finalCallback = function (err, result) { const finalCallback = function (err, result) {
if (err) { if (err) {
return callback(err) return callback(err)
} }
return callback(null, result) return callback(null, result)
} }

@ -26,7 +26,7 @@ export class Provider {
this.host = host this.host = host
this.connected = true this.connected = true
this.vmContext = new VMContext() this.vmContext = new VMContext()
this.Accounts = new Accounts(this.vmContext) this.Accounts = new Accounts(this.vmContext)
this.Transactions = new Transactions(this.vmContext) this.Transactions = new Transactions(this.vmContext)
@ -102,7 +102,7 @@ export function extend (web3) {
call: 'eth_getExecutionResultFromSimulator', call: 'eth_getExecutionResultFromSimulator',
inputFormatter: [null], inputFormatter: [null],
params: 1 params: 1
})) }))
} }
if (!(web3.eth && web3.eth.getHashFromTagBySimulator)) { if (!(web3.eth && web3.eth.getHashFromTagBySimulator)) {
@ -111,9 +111,9 @@ export function extend (web3) {
call: 'eth_getHashFromTagBySimulator', call: 'eth_getHashFromTagBySimulator',
inputFormatter: [null], inputFormatter: [null],
params: 1 params: 1
})) }))
} }
if (methods.length > 0) { if (methods.length > 0) {
web3.extend({ web3.extend({
property: 'eth', property: 'eth',
@ -122,4 +122,3 @@ export function extend (web3) {
}) })
} }
} }

@ -75,8 +75,8 @@ export class VMContext {
web3vm web3vm
logsManager logsManager
exeResults exeResults
constructor () { constructor () {
this.blockGasLimitDefault = 4300000 this.blockGasLimitDefault = 4300000
this.blockGasLimit = this.blockGasLimitDefault this.blockGasLimit = this.blockGasLimitDefault
this.currentFork = 'muirGlacier' this.currentFork = 'muirGlacier'
@ -94,7 +94,6 @@ export class VMContext {
this.txs = {} this.txs = {}
this.exeResults = {} this.exeResults = {}
this.logsManager = new execution.LogsManager() this.logsManager = new execution.LogsManager()
} }
createVm (hardfork) { createVm (hardfork) {
@ -124,20 +123,20 @@ export class VMContext {
return this.vms[this.currentFork].vm return this.vms[this.currentFork].vm
} }
addBlock (block) { addBlock (block) {
let blockNumber = '0x' + block.header.number.toString('hex') let blockNumber = '0x' + block.header.number.toString('hex')
if (blockNumber === '0x') { if (blockNumber === '0x') {
blockNumber = '0x0' blockNumber = '0x0'
} }
this.blocks['0x' + block.hash().toString('hex')] = block this.blocks['0x' + block.hash().toString('hex')] = block
this.blocks[blockNumber] = block this.blocks[blockNumber] = block
this.latestBlockNumber = blockNumber this.latestBlockNumber = blockNumber
this.logsManager.checkBlock(blockNumber, block, this.web3vm) this.logsManager.checkBlock(blockNumber, block, this.web3vm)
} }
trackTx (tx, block) { trackTx (tx, block) {
this.txs[tx] = block this.txs[tx] = block
} }

Loading…
Cancel
Save