From baec74b850ab2cca4476140df8ef68742f3cadd1 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 30 May 2019 18:04:22 -0400 Subject: [PATCH] add/fix eth_getTransactionByBlockHashAndIndex and eth_getTransactionByBlockNumberAndIndex --- remix-simulator/README.md | 12 +-- remix-simulator/src/methods/transactions.js | 98 ++++++++++++++++++++- 2 files changed, 102 insertions(+), 8 deletions(-) diff --git a/remix-simulator/README.md b/remix-simulator/README.md index db6661c3d4..fe095c78da 100644 --- a/remix-simulator/README.md +++ b/remix-simulator/README.md @@ -28,12 +28,12 @@ Implemented: * [_] eth_sendRawTransaction * [X] eth_call * [~] eth_estimateGas -* [~] eth_getBlockByHash -* [~] eth_getBlockByNumber -* [~] eth_getTransactionByHash -* [_] eth_getTransactionByBlockHashAndIndex -* [_] eth_getTransactionByBlockNumberAndIndex -* [~] eth_getTransactionReceipt +* [V] eth_getBlockByHash +* [V] eth_getBlockByNumber +* [V] eth_getTransactionByHash +* [V] eth_getTransactionByBlockHashAndIndex +* [V] eth_getTransactionByBlockNumberAndIndex +* [V] eth_getTransactionReceipt * [_] eth_getUncleByBlockHashAndIndex * [_] eth_getUncleByBlockNumberAndIndex * [X] eth_getCompilers (DEPRECATED) diff --git a/remix-simulator/src/methods/transactions.js b/remix-simulator/src/methods/transactions.js index db873cf5cb..23faa32bfa 100644 --- a/remix-simulator/src/methods/transactions.js +++ b/remix-simulator/src/methods/transactions.js @@ -29,7 +29,9 @@ Transactions.prototype.methods = function () { eth_call: this.eth_call.bind(this), eth_estimateGas: this.eth_estimateGas.bind(this), eth_getTransactionCount: this.eth_getTransactionCount.bind(this), - eth_getTransactionByHash: this.eth_getTransactionByHash.bind(this) + eth_getTransactionByHash: this.eth_getTransactionByHash.bind(this), + eth_getTransactionByBlockHashAndIndex: this.eth_getTransactionByBlockHashAndIndex.bind(this), + eth_getTransactionByBlockNumberAndIndex: this.eth_getTransactionByBlockNumberAndIndex.bind(this) } } @@ -153,4 +155,96 @@ Transactions.prototype.eth_getTransactionByHash = function (payload, cb) { }) } -module.exports = Transactions +Transactions.prototype.eth_getTransactionByBlockHashAndIndex = function (payload, cb) { + console.dir("== eth_getTransactionByHash") + console.dir(payload.params) + // const address = payload.params[0] + const txIndex = payload.params[1] + + var txBlock = executionContext.blocks[payload.params[0]] + const txHash = "0x" + txBlock.transactions[web3.utils.toDecimal(txIndex)].hash().toString('hex') + + executionContext.web3().eth.getTransactionReceipt(txHash, (error, receipt) => { + if (error) { + return cb(error) + } + + // executionContext.web3().eth.getBlock(receipt.hash).then((block) => { + let r = { + 'blockHash': "0x" + txBlock.hash().toString('hex'), + 'blockNumber': "0x" + txBlock.header.number.toString('hex'), + 'from': receipt.from, + 'gas': web3.utils.toHex(receipt.gas), + // 'gasPrice': '2000000000000', // 0x123 + "gasPrice": "0x4a817c800", // 20000000000 + 'hash': receipt.transactionHash, + 'input': receipt.input, + // "nonce": 2, // 0x15 + // "transactionIndex": 0, + "value": receipt.value + // "value":"0xf3dbb76162000" // 4290000000000000 + // "v": "0x25", // 37 + // "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + // "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c" + } + + if (receipt.to) { + r.to = receipt.to + } + + if (r.value === "0x") { + r.value = "0x0" + } + + cb(null, r) + // }) + }) +} + +Transactions.prototype.eth_getTransactionByBlockNumberAndIndex = function (payload, cb) { + console.dir("== eth_getTransactionByHash") + console.dir(payload.params) + // const address = payload.params[0] + const txIndex = payload.params[1] + + var txBlock = executionContext.blocks[payload.params[0]] + const txHash = "0x" + txBlock.transactions[web3.utils.toDecimal(txIndex)].hash().toString('hex') + + executionContext.web3().eth.getTransactionReceipt(txHash, (error, receipt) => { + if (error) { + return cb(error) + } + + // executionContext.web3().eth.getBlock(receipt.hash).then((block) => { + let r = { + 'blockHash': "0x" + txBlock.hash().toString('hex'), + 'blockNumber': "0x" + txBlock.header.number.toString('hex'), + 'from': receipt.from, + 'gas': web3.utils.toHex(receipt.gas), + // 'gasPrice': '2000000000000', // 0x123 + "gasPrice": "0x4a817c800", // 20000000000 + 'hash': receipt.transactionHash, + 'input': receipt.input, + // "nonce": 2, // 0x15 + // "transactionIndex": 0, + "value": receipt.value + // "value":"0xf3dbb76162000" // 4290000000000000 + // "v": "0x25", // 37 + // "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + // "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c" + } + + if (receipt.to) { + r.to = receipt.to + } + + if (r.value === "0x") { + r.value = "0x0" + } + + cb(null, r) + // }) + }) +} + +module.exports = Transactions \ No newline at end of file