Skip to content

Bubbling up the out of gas error and allow reasonable gas limit #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 19, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 100 additions & 0 deletions dvm/tests/LoopsTesting.abi.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
[
{
"constant": true,
"inputs": [],
"name": "IncInfiniteTimes",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "IncBilTimesForFor",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "IncBilTimesForForFor",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "IncBilTimes",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "IncThousandTimes",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "IncHundredTimes",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "IncMilTimes",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
}
]
6 changes: 6 additions & 0 deletions dvm/tests/LoopsTesting.bytecode.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"linkReferences": {},
"object": "608060405234801561001057600080fd5b5061039f806100206000396000f300608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806311b9742a146100885780631a434eaf146100b3578063496cfdb9146100de5780637bf05435146101095780638ab3bdff14610134578063b594e64b1461015f578063cc9da9ca1461018a575b600080fd5b34801561009457600080fd5b5061009d6101b5565b6040518082815260200191505060405180910390f35b3480156100bf57600080fd5b506100c86101d3565b6040518082815260200191505060405180910390f35b3480156100ea57600080fd5b506100f361022a565b6040518082815260200191505060405180910390f35b34801561011557600080fd5b5061011e6102a1565b6040518082815260200191505060405180910390f35b34801561014057600080fd5b506101496102d7565b6040518082815260200191505060405180910390f35b34801561016b57600080fd5b5061017461030b565b6040518082815260200191505060405180910390f35b34801561019657600080fd5b5061019f61033e565b6040518082815260200191505060405180910390f35b600080600090505b80806001019150508080600190039150506101bd565b60008060008060009250600091505b633b9aca0082101561022157600090505b633b9aca0081101561021457828060010193505080806001019150506101f3565b81806001019250506101e2565b82935050505090565b6000806000806000809350600092505b633b9aca0083101561029757600091505b633b9aca0082101561028a57600090505b633b9aca0081101561027d578380600101945050808060010191505061025c565b818060010192505061024b565b828060010193505061023a565b8394505050505090565b6000806000809150600090505b633b9aca008110156102cf57818060010192505080806001019150506102ae565b819250505090565b6000806000809150600090505b6103e881101561030357818060010192505080806001019150506102e4565b819250505090565b6000806000809150600090505b60648110156103365781806001019250508080600101915050610318565b819250505090565b6000806000809150600090505b620f424081101561036b578180600101925050808060010191505061034b565b8192505050905600a165627a7a72305820ea4b26a846f4f7f2b12313c781ef609e7d10474daa32af5f117030317f0a8ddc0029",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x39F DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x83 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x11B9742A EQ PUSH2 0x88 JUMPI DUP1 PUSH4 0x1A434EAF EQ PUSH2 0xB3 JUMPI DUP1 PUSH4 0x496CFDB9 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x7BF05435 EQ PUSH2 0x109 JUMPI DUP1 PUSH4 0x8AB3BDFF EQ PUSH2 0x134 JUMPI DUP1 PUSH4 0xB594E64B EQ PUSH2 0x15F JUMPI DUP1 PUSH4 0xCC9DA9CA EQ PUSH2 0x18A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9D PUSH2 0x1B5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0x1D3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF3 PUSH2 0x22A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x115 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11E PUSH2 0x2A1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x149 PUSH2 0x2D7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x174 PUSH2 0x30B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19F PUSH2 0x33E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 POP JUMPDEST DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP DUP1 DUP1 PUSH1 0x1 SWAP1 SUB SWAP2 POP POP PUSH2 0x1BD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 SWAP3 POP PUSH1 0x0 SWAP2 POP JUMPDEST PUSH4 0x3B9ACA00 DUP3 LT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 SWAP1 POP JUMPDEST PUSH4 0x3B9ACA00 DUP2 LT ISZERO PUSH2 0x214 JUMPI DUP3 DUP1 PUSH1 0x1 ADD SWAP4 POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x1F3 JUMP JUMPDEST DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP PUSH2 0x1E2 JUMP JUMPDEST DUP3 SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST PUSH4 0x3B9ACA00 DUP4 LT ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 SWAP2 POP JUMPDEST PUSH4 0x3B9ACA00 DUP3 LT ISZERO PUSH2 0x28A JUMPI PUSH1 0x0 SWAP1 POP JUMPDEST PUSH4 0x3B9ACA00 DUP2 LT ISZERO PUSH2 0x27D JUMPI DUP4 DUP1 PUSH1 0x1 ADD SWAP5 POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x25C JUMP JUMPDEST DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP PUSH2 0x24B JUMP JUMPDEST DUP3 DUP1 PUSH1 0x1 ADD SWAP4 POP POP PUSH2 0x23A JUMP JUMPDEST DUP4 SWAP5 POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH4 0x3B9ACA00 DUP2 LT ISZERO PUSH2 0x2CF JUMPI DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x2AE JUMP JUMPDEST DUP2 SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH2 0x3E8 DUP2 LT ISZERO PUSH2 0x303 JUMPI DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x2E4 JUMP JUMPDEST DUP2 SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x64 DUP2 LT ISZERO PUSH2 0x336 JUMPI DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x318 JUMP JUMPDEST DUP2 SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH3 0xF4240 DUP2 LT ISZERO PUSH2 0x36B JUMPI DUP2 DUP1 PUSH1 0x1 ADD SWAP3 POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x34B JUMP JUMPDEST DUP2 SWAP3 POP POP POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xea 0x4b 0x26 0xa8 0x46 DELEGATECALL 0xf7 CALLCODE 0xb1 0x23 SGT 0xc7 DUP2 0xef PUSH1 0x9E PUSH30 0x10474DAA32AF5F117030317F0A8DDC002900000000000000000000000000 ",
"sourceMap": "25:1686:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25:1686:0;;;;;;;"
}
85 changes: 85 additions & 0 deletions dvm/tests/LoopsTesting.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
pragma solidity ^0.4.0;

contract LoopsTesting {
uint constant OneH = 100;
uint constant OneT = 1000;
uint constant OneM = 1000000;
uint constant OneB = 1000000000;

function IncHundredTimes() public pure returns (uint256) {
uint256 val = 0;

for (uint i = 0; i < OneH; i++) {
val++;
}

return val;
}

function IncThousandTimes() public pure returns (uint256) {
uint256 val = 0;

for (uint i = 0; i < OneT; i++) {
val++;
}

return val;
}

function IncMilTimes() public pure returns (uint256) {
uint256 val = 0;

for (uint i = 0; i < OneM; i++) {
val++;
}

return val;
}

function IncBilTimes() public pure returns (uint256) {
uint256 val = 0;

for (uint i = 0; i < OneB; i++) {
val++;
}

return val;
}

function IncBilTimesForFor() public pure returns (uint256) {
uint256 val = 0;

for (uint i = 0; i < OneB; i++) {
for (uint j = 0; j < OneB; j++) {
val++;
}
}

return val;
}

function IncBilTimesForForFor() public pure returns (uint256) {
uint256 val = 0;

for (uint i = 0; i < OneB; i++) {
for (uint j = 0; j < OneB; j++) {
for (uint k = 0; k < OneB; k++) {
val++;
}
}
}

return val;
}

function IncInfiniteTimes() public pure returns (uint256) {
uint256 val = 0;

for (;;) {
val++;
val--;
}

return val;
}
}
Loading