parent
110de29bb0
commit
f3ef26ac48
@ -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…
Reference in new issue