From 90b0f8bbbd90a8edc33a88d16bd2dd1dc7620625 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 30 May 2019 17:18:53 -0400 Subject: [PATCH] implement/fix eth_getTransactionByBlockNumber and eth_getBlockByHash --- remix-lib/src/execution/execution-context.js | 4 + remix-lib/src/web3Provider/web3VmProvider.js | 1 + remix-simulator/src/methods/blocks.js | 88 +++++++++++--------- 3 files changed, 55 insertions(+), 38 deletions(-) diff --git a/remix-lib/src/execution/execution-context.js b/remix-lib/src/execution/execution-context.js index 01be466c71..4fcbb77af9 100644 --- a/remix-lib/src/execution/execution-context.js +++ b/remix-lib/src/execution/execution-context.js @@ -281,7 +281,11 @@ function ExecutionContext () { } this.addBlock = function (block) { + let blockNumber = "0x" + block.header.number.toString('hex') + blockNumber = web3.toHex(web3.toBigNumber(blockNumber)) + self.blocks["0x" + block.hash().toString('hex')] = block + self.blocks[blockNumber] = block } this.trackTx = function(tx, block) { diff --git a/remix-lib/src/web3Provider/web3VmProvider.js b/remix-lib/src/web3Provider/web3VmProvider.js index b8d1e50080..250c6ab20d 100644 --- a/remix-lib/src/web3Provider/web3VmProvider.js +++ b/remix-lib/src/web3Provider/web3VmProvider.js @@ -40,6 +40,7 @@ function web3VmProvider () { this.toWei = function () { return self.web3.toWei.apply(self.web3, arguments) } this.toBigNumber = function () { return self.web3.toBigNumber.apply(self.web3, arguments) } this.isAddress = function () { return self.web3.isAddress.apply(self.web3, arguments) } + this.utils = Web3.utils || [] } web3VmProvider.prototype.setVM = function (vm) { diff --git a/remix-simulator/src/methods/blocks.js b/remix-simulator/src/methods/blocks.js index f4c48b8d25..0df94a0bbc 100644 --- a/remix-simulator/src/methods/blocks.js +++ b/remix-simulator/src/methods/blocks.js @@ -19,31 +19,40 @@ Blocks.prototype.methods = function () { } Blocks.prototype.eth_getBlockByNumber = function (payload, cb) { + var block = executionContext.blocks[payload.params[0]] + let b = { - 'difficulty': '0x0', - 'extraData': '0x', - 'gasLimit': '0x7a1200', - 'gasUsed': '0x0', - 'hash': '0xdb731f3622ef37b4da8db36903de029220dba74c41185f8429f916058b86559f', - 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + 'number': toHex(block.header.number), + "hash": toHex(block.hash()), + 'parentHash': toHex(block.header.parentHash), + 'nonce': toHex(block.header.nonce), + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": toHex(block.header.stateRoot), 'miner': this.coinbase, - 'mixHash': '0x0000000000000000000000000000000000000000000000000000000000000000', - 'nonce': '0x0000000000000042', - 'number': Web3.utils.toHex(this.blockNumber), - 'parentHash': '0x0000000000000000000000000000000000000000000000000000000000000000', - 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', - 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', - 'size': '0x1f8', - 'stateRoot': '0xb7917653f92e62394d2207d0f39a1320ff1cb93d1cee80d3c492627e00b219ff', - 'timestamp': '0x0', - 'totalDifficulty': '0x0', - 'transactions': [], - 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', - 'uncles': [] + 'difficulty': toHex(block.header.difficulty), + "totalDifficulty": toHex(block.header.totalDifficulty), + 'extraData': toHex(block.header.extraData), + "size": "0x027f07", // 163591 + 'gasLimit': toHex(block.header.gasLimit), + 'gasUsed': toHex(block.header.gasUsed), + "timestamp": toHex(block.header.timestamp), + // TODO: add transactions + // block.transactions + "transactions": [], + "uncles": [] } + cb(null, b) } +function toHex(value) { + if (!value) return "0x0" + let v = value.toString('hex') + return ((v === "0x" || v === "") ? "0x0" : ("0x" + v)) +} + Blocks.prototype.eth_getBlockByHash = function (payload, cb) { console.dir("eth_getBlockByHash") console.dir(payload) @@ -51,28 +60,31 @@ Blocks.prototype.eth_getBlockByHash = function (payload, cb) { console.dir("== toJSON") console.dir(executionContext.blocks[payload.params[0]].toJSON()) + var block = executionContext.blocks[payload.params[0]] + let b = { - 'difficulty': '0x0', - 'extraData': '0x', - 'gasLimit': '0x7a1200', - 'gasUsed': '0x0', - 'hash': '0xdb731f3622ef37b4da8db36903de029220dba74c41185f8429f916058b86559f', - 'logsBloom': '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + 'number': toHex(block.header.number), + "hash": toHex(block.hash()), + 'parentHash': toHex(block.header.parentHash), + 'nonce': toHex(block.header.nonce), + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": toHex(block.header.stateRoot), 'miner': this.coinbase, - 'mixHash': '0x0000000000000000000000000000000000000000000000000000000000000000', - 'nonce': '0x0000000000000042', - 'number': Web3.utils.toHex(this.blockNumber), - 'parentHash': '0x0000000000000000000000000000000000000000000000000000000000000000', - 'receiptsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', - 'sha3Uncles': '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', - 'size': '0x1f8', - 'stateRoot': '0xb7917653f92e62394d2207d0f39a1320ff1cb93d1cee80d3c492627e00b219ff', - 'timestamp': '0x0', - 'totalDifficulty': '0x0', - 'transactions': [], - 'transactionsRoot': '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', - 'uncles': [] + 'difficulty': toHex(block.header.difficulty), + "totalDifficulty": toHex(block.header.totalDifficulty), + 'extraData': toHex(block.header.extraData), + "size": "0x027f07", // 163591 + 'gasLimit': toHex(block.header.gasLimit), + 'gasUsed': toHex(block.header.gasUsed), + "timestamp": toHex(block.header.timestamp), + // TODO: add transactions + // block.transactions + "transactions": [], + "uncles": [] } + cb(null, b) }