var Web3 = require('web3') var RemixLib = require('remix-lib') const log = require('fancy-log') const Transactions = require('./methods/transactions.js') const merge = require('merge') 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') this.Transactions = new Transactions(this.accounts); this.methods = {} this.methods = merge(this.methods, this.Transactions.methods()) log.dir(this.methods) } Provider.prototype.sendAsync = function (payload, callback) { const self = this log.dir('payload method is ') log.dir(payload.method) if (payload.method === 'eth_accounts') { log.dir('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 === 'web3_clientVersion') { callback(null, jsonRPCResponse(payload.id, 'Remix Simulator/0.0.1')) } if (payload.method === 'shh_version') { callback(null, jsonRPCResponse(payload.id, 5)) } if (payload.method === 'eth_getBlockByNumber') { let b = { 'difficulty': '0x0', 'extraData': '0x', 'gasLimit': '0x7a1200', 'gasUsed': '0x0', 'hash': '0xdb731f3622ef37b4da8db36903de029220dba74c41185f8429f916058b86559f', 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'miner': '0x3333333333333333333333333333333333333333', 'mixHash': '0x0000000000000000000000000000000000000000000000000000000000000000', 'nonce': '0x0000000000000042', 'number': '0x0', 'parentHash': '0x0000000000000000000000000000000000000000000000000000000000000000', 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', 'size': '0x1f8', 'stateRoot': '0xb7917653f92e62394d2207d0f39a1320ff1cb93d1cee80d3c492627e00b219ff', 'timestamp': '0x0', 'totalDifficulty': '0x0', 'transactions': [], 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', 'uncles': [] } callback(null, jsonRPCResponse(payload.id, b)) } let method = this.methods[payload.method] if (method) { return method.call(method, payload, (err, result) => { if (err) { return callback({error: err}) } callback(null, jsonRPCResponse(payload.id, result)) }); } callback("unknown method " + payload.method); } Provider.prototype.isConnected = function () { return true } module.exports = Provider