diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts index 174e8825a6..4a2d40578f 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts @@ -1,4 +1,4 @@ -import { bufferToHex, bufferToInt, fromSigned } from "ethereumjs-util"; +import { BN, bufferToHex, bufferToInt, fromSigned } from "ethereumjs-util"; import util from "util"; import { @@ -130,6 +130,10 @@ export class ConsoleLogger { const position = i * 32; switch (types[i]) { case UintTy: + return new BN( + data.slice(position, position + REGISTER_SIZE) + ).toString(10); + case IntTy: return fromSigned( data.slice(position, position + REGISTER_SIZE) diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_5/console-logs/uint/most-significant-bit-set/c.sol b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_5/console-logs/uint/most-significant-bit-set/c.sol new file mode 100644 index 0000000000..d8ba520fe9 --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_5/console-logs/uint/most-significant-bit-set/c.sol @@ -0,0 +1,15 @@ +pragma solidity ^0.5.0; + +import "./../../../../../../../../console.sol"; + +contract C { + + function log( + uint256 p0, uint256 p1, int256 p2, int256 p3 + ) public { + console.log(p0); + console.log(p1); + console.logInt(p2); + console.logInt(p3); + } +} diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_5/console-logs/uint/most-significant-bit-set/test.json b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_5/console-logs/uint/most-significant-bit-set/test.json new file mode 100644 index 0000000000..7c01690ea0 --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_5/console-logs/uint/most-significant-bit-set/test.json @@ -0,0 +1,26 @@ +{ + "description": "Should correctly interpret sign of integer types", + "transactions": [ + { + "file": "c.sol", + "contract": "C", + "imports": ["/../../../../../../../../../console.sol"] + }, + { + "to": 0, + "function": "log", + "params": [ + "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "0x8000000000000000000000000000000000000000000000000000000000000000", + "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "0x8000000000000000000000000000000000000000000000000000000000000000" + ], + "consoleLogs": [ + ["115792089237316195423570985008687907853269984665640564039457584007913129639935"], + ["57896044618658097711785492504343953926634992332820282019728792003956564819968"], + ["-1"], + ["-57896044618658097711785492504343953926634992332820282019728792003956564819968"] + ] + } + ] +} diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_6/console-logs/uint/most-significant-bit-set/c.sol b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_6/console-logs/uint/most-significant-bit-set/c.sol new file mode 100644 index 0000000000..e7b4e67fc3 --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_6/console-logs/uint/most-significant-bit-set/c.sol @@ -0,0 +1,15 @@ +pragma solidity ^0.6.0; + +import "./../../../../../../../../console.sol"; + +contract C { + + function log( + uint256 p0, uint256 p1, int256 p2, int256 p3 + ) public { + console.log(p0); + console.log(p1); + console.logInt(p2); + console.logInt(p3); + } +} diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_6/console-logs/uint/most-significant-bit-set/test.json b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_6/console-logs/uint/most-significant-bit-set/test.json new file mode 100644 index 0000000000..7c01690ea0 --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_6/console-logs/uint/most-significant-bit-set/test.json @@ -0,0 +1,26 @@ +{ + "description": "Should correctly interpret sign of integer types", + "transactions": [ + { + "file": "c.sol", + "contract": "C", + "imports": ["/../../../../../../../../../console.sol"] + }, + { + "to": 0, + "function": "log", + "params": [ + "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "0x8000000000000000000000000000000000000000000000000000000000000000", + "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "0x8000000000000000000000000000000000000000000000000000000000000000" + ], + "consoleLogs": [ + ["115792089237316195423570985008687907853269984665640564039457584007913129639935"], + ["57896044618658097711785492504343953926634992332820282019728792003956564819968"], + ["-1"], + ["-57896044618658097711785492504343953926634992332820282019728792003956564819968"] + ] + } + ] +} diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_7/console-logs/uint/most-significant-bit-set/c.sol b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_7/console-logs/uint/most-significant-bit-set/c.sol new file mode 100644 index 0000000000..764ede643b --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_7/console-logs/uint/most-significant-bit-set/c.sol @@ -0,0 +1,15 @@ +pragma solidity ^0.7.0; + +import "./../../../../../../../../console.sol"; + +contract C { + + function log( + uint256 p0, uint256 p1, int256 p2, int256 p3 + ) public { + console.log(p0); + console.log(p1); + console.logInt(p2); + console.logInt(p3); + } +} diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_7/console-logs/uint/most-significant-bit-set/test.json b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_7/console-logs/uint/most-significant-bit-set/test.json new file mode 100644 index 0000000000..7c01690ea0 --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_7/console-logs/uint/most-significant-bit-set/test.json @@ -0,0 +1,26 @@ +{ + "description": "Should correctly interpret sign of integer types", + "transactions": [ + { + "file": "c.sol", + "contract": "C", + "imports": ["/../../../../../../../../../console.sol"] + }, + { + "to": 0, + "function": "log", + "params": [ + "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "0x8000000000000000000000000000000000000000000000000000000000000000", + "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "0x8000000000000000000000000000000000000000000000000000000000000000" + ], + "consoleLogs": [ + ["115792089237316195423570985008687907853269984665640564039457584007913129639935"], + ["57896044618658097711785492504343953926634992332820282019728792003956564819968"], + ["-1"], + ["-57896044618658097711785492504343953926634992332820282019728792003956564819968"] + ] + } + ] +} diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts index 62f3b5ed7d..555a980e03 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts @@ -392,13 +392,7 @@ async function runTest( const txIndexToContract: Map = new Map(); - for ( - let txIndex = 0; - txIndex < testDefinition.transactions.length; - txIndex++ - ) { - const tx = testDefinition.transactions[txIndex]; - + for (const [txIndex, tx] of testDefinition.transactions.entries()) { let trace: MessageTrace; if ("file" in tx) {