From 9bddf47bdf8dc61d8dcde2b9fdcf0fba25e9f83a Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 22 Feb 2018 15:11:26 +0100 Subject: [PATCH 1/2] double quoted number and hex string --- remix-lib/src/execution/txFormat.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/remix-lib/src/execution/txFormat.js b/remix-lib/src/execution/txFormat.js index ef0c87487a..8959de4215 100644 --- a/remix-lib/src/execution/txFormat.js +++ b/remix-lib/src/execution/txFormat.js @@ -51,6 +51,8 @@ module.exports = { data = Buffer.from(dataHex, 'hex') } else { try { + params = params.replace(/(^|,\s+|,)(\d+)(\s+,|,|$)/g, '$1"$2"$3') // replace non quoted number by quoted number + params = params.replace(/(^|,\s+|,)(0[xX][0-9a-fA-F]+)(\s+,|,|$)/g, '$1"$2"$3') // replace non quoted hex string by quoted hex string funArgs = JSON.parse('[' + params + ']') } catch (e) { callback('Error encoding arguments: ' + e) From 580b295871d06cf59f97eaabd3c1f49ee2cf1b08 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 22 Feb 2018 15:11:41 +0100 Subject: [PATCH 2/2] txFormat.js new tests --- remix-lib/test/tests.js | 1 + remix-lib/test/txFormat.js | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 remix-lib/test/txFormat.js diff --git a/remix-lib/test/tests.js b/remix-lib/test/tests.js index df5c04b8ab..b0d0b69044 100644 --- a/remix-lib/test/tests.js +++ b/remix-lib/test/tests.js @@ -2,3 +2,4 @@ require('./astwalker.js') require('./eventManager.js') require('./sourceMappingDecoder.js') require('./util.js') +require('./txFormat.js') diff --git a/remix-lib/test/txFormat.js b/remix-lib/test/txFormat.js new file mode 100644 index 0000000000..9644d6ab9e --- /dev/null +++ b/remix-lib/test/txFormat.js @@ -0,0 +1,40 @@ +'use strict' +var tape = require('tape') +var txFormat = require('../src/execution/txFormat') +var compiler = require('solc') +var compilerInput = require('../src/helpers/compilerHelper').compilerInput + +var context +tape('ContractParameters - (TxFormat.buildData)', function (t) { + var output = compiler.compileStandardWrapper(compilerInput(uintContract)) + output = JSON.parse(output) + var contract = output.contracts['test.sol']['uintContractTest'] + var udapp = { runTx: () => {} } // fake + context = { output, contract, udapp } + var bytecode = '6060604052341561000f57600080fd5b6101058061001e6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634b521953146044575b600080fd5b3415604e57600080fd5b608a600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050608c565b005b8260008190555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505600a165627a7a72305820e2f31aca91b90c01fe46fd2de5b3788ba02f577f9858e6aae48800e29db122670029' + t.test('(TxFormat.buildData)', function (st) { + st.plan(3) + testWithInput(st, '123123, "0xf7a10e525d4b168f45f74db1b61f63d3e7619ea8", "34"', bytecode + '000000000000000000000000000000000000000000000000000000000001e0f3000000000000000000000000f7a10e525d4b168f45f74db1b61f63d3e7619ea80000000000000000000000000000000000000000000000000000000000000022') + testWithInput(st, '"123123" , 0xf7a10e525d4b168f45f74db1b61f63d3e7619ea8, 654 ', bytecode + '000000000000000000000000000000000000000000000000000000000001e0f3000000000000000000000000f7a10e525d4b168f45f74db1b61f63d3e7619ea8000000000000000000000000000000000000000000000000000000000000028e') + // parsing this as javascript number should overflow + testWithInput(st, '90071992547409910000, 0xf7a10e525d4b168f45f74db1b61f63d3e7619ea8, 0', bytecode + '000000000000000000000000000000000000000000000004e1ffffffffffd8f0000000000000000000000000f7a10e525d4b168f45f74db1b61f63d3e7619ea80000000000000000000000000000000000000000000000000000000000000000') + }) +}) + +function testWithInput (st, params, expected) { + txFormat.buildData('uintContractTest', context.contract, context.output.contracts, true, context.contract.abi[0], params, context.udapp + , (error, data) => { + if (error) { return st.fails(error) } + console.log(data) + st.equal(data.dataHex, expected) + }, () => {}) +} + +var uintContract = `contract uintContractTest { + uint _tp; + address _ap; + function test(uint _t, address _a, uint _i) { + _tp = _t; + _ap = _a; + } +}`