mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Do not create VCs for underoverflow by default for Sol >=0.8
This commit is contained in:
parent
6ec711b2f0
commit
ee6285d6d7
@ -11,6 +11,7 @@ Compiler Features:
|
|||||||
* Commandline Interface: option ``--pretty-json`` works also with ``--standard--json``.
|
* Commandline Interface: option ``--pretty-json`` works also with ``--standard--json``.
|
||||||
* SMTChecker: Unproved targets are hidden by default, and the SMTChecker only states how many unproved targets there are. They can be listed using the command line option ``--model-checker-show-unproved`` or the JSON option ``settings.modelChecker.showUnproved``.
|
* SMTChecker: Unproved targets are hidden by default, and the SMTChecker only states how many unproved targets there are. They can be listed using the command line option ``--model-checker-show-unproved`` or the JSON option ``settings.modelChecker.showUnproved``.
|
||||||
* SMTChecker: new setting to enable/disable encoding of division and modulo with slack variables. The command line option is ``--model-checker-div-mod-slacks`` and the JSON option is ``settings.modelChecker.divModWithSlacks``.
|
* SMTChecker: new setting to enable/disable encoding of division and modulo with slack variables. The command line option is ``--model-checker-div-mod-slacks`` and the JSON option is ``settings.modelChecker.divModWithSlacks``.
|
||||||
|
* SMTChecker: Do not check underflow and overflow by default.
|
||||||
|
|
||||||
|
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
|
@ -34,6 +34,9 @@ The other verification targets that the SMTChecker checks at compile time are:
|
|||||||
- Out of bounds index access.
|
- Out of bounds index access.
|
||||||
- Insufficient funds for a transfer.
|
- Insufficient funds for a transfer.
|
||||||
|
|
||||||
|
All the targets above are automatically checked by default if all engines are
|
||||||
|
enabled, except underflow and overflow for Solidity >=0.8.7.
|
||||||
|
|
||||||
The potential warnings that the SMTChecker reports are:
|
The potential warnings that the SMTChecker reports are:
|
||||||
|
|
||||||
- ``<failing property> happens here.``. This means that the SMTChecker proved that a certain property fails. A counterexample may be given, however in complex situations it may also not show a counterexample. This result may also be a false positive in certain cases, when the SMT encoding adds abstractions for Solidity code that is either hard or impossible to express.
|
- ``<failing property> happens here.``. This means that the SMTChecker proved that a certain property fails. A counterexample may be given, however in complex situations it may also not show a counterexample. This result may also be a false positive in certain cases, when the SMT encoding adds abstractions for Solidity code that is either hard or impossible to express.
|
||||||
@ -93,8 +96,10 @@ Overflow
|
|||||||
}
|
}
|
||||||
|
|
||||||
The contract above shows an overflow check example.
|
The contract above shows an overflow check example.
|
||||||
The SMTChecker will, by default, check every reachable arithmetic operation
|
The SMTChecker does not check underflow and overflow by default for Solidity >=0.8.7,
|
||||||
in the contract for potential underflow and overflow.
|
so we need to use the command line option ``--model-checker-targets "underflow,overflow"``
|
||||||
|
or the JSON option ``settings.modelChecker.targets = ["underflow", "overflow"]``.
|
||||||
|
See :ref:`this section for targets configuration<smtchecker_targets>`.
|
||||||
Here, it reports the following:
|
Here, it reports the following:
|
||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
@ -447,6 +452,8 @@ If the SMTChecker does not manage to solve the contract properties with the defa
|
|||||||
a timeout can be given in milliseconds via the CLI option ``--model-checker-timeout <time>`` or
|
a timeout can be given in milliseconds via the CLI option ``--model-checker-timeout <time>`` or
|
||||||
the JSON option ``settings.modelChecker.timeout=<time>``, where 0 means no timeout.
|
the JSON option ``settings.modelChecker.timeout=<time>``, where 0 means no timeout.
|
||||||
|
|
||||||
|
.. _smtchecker_targets:
|
||||||
|
|
||||||
Verification Targets
|
Verification Targets
|
||||||
====================
|
====================
|
||||||
|
|
||||||
@ -471,6 +478,8 @@ The keywords that represent the targets are:
|
|||||||
A common subset of targets might be, for example:
|
A common subset of targets might be, for example:
|
||||||
``--model-checker-targets assert,overflow``.
|
``--model-checker-targets assert,overflow``.
|
||||||
|
|
||||||
|
All targets are checked by default, except underflow and overflow for Solidity >=0.8.7.
|
||||||
|
|
||||||
There is no precise heuristic on how and when to split verification targets,
|
There is no precise heuristic on how and when to split verification targets,
|
||||||
but it can be useful especially when dealing with large contracts.
|
but it can be useful especially when dealing with large contracts.
|
||||||
|
|
||||||
|
@ -415,7 +415,8 @@ Input Description
|
|||||||
"solvers": ["cvc4", "smtlib2", "z3"],
|
"solvers": ["cvc4", "smtlib2", "z3"],
|
||||||
// Choose which targets should be checked: constantCondition,
|
// Choose which targets should be checked: constantCondition,
|
||||||
// underflow, overflow, divByZero, balance, assert, popEmptyArray, outOfBounds.
|
// underflow, overflow, divByZero, balance, assert, popEmptyArray, outOfBounds.
|
||||||
// If the option is not given all targets are checked by default.
|
// If the option is not given all targets are checked by default,
|
||||||
|
// except underflow/overflow for Solidity >=0.8.7.
|
||||||
// See the Formal Verification section for the targets description.
|
// See the Formal Verification section for the targets description.
|
||||||
"targets": ["underflow", "overflow", "assert"],
|
"targets": ["underflow", "overflow", "assert"],
|
||||||
// Timeout for each SMT query in milliseconds.
|
// Timeout for each SMT query in milliseconds.
|
||||||
|
@ -40,9 +40,16 @@ map<string, TargetType> const ModelCheckerTargets::targetStrings{
|
|||||||
std::optional<ModelCheckerTargets> ModelCheckerTargets::fromString(string const& _targets)
|
std::optional<ModelCheckerTargets> ModelCheckerTargets::fromString(string const& _targets)
|
||||||
{
|
{
|
||||||
set<TargetType> chosenTargets;
|
set<TargetType> chosenTargets;
|
||||||
if (_targets == "default")
|
if (_targets == "default" || _targets == "all")
|
||||||
|
{
|
||||||
|
bool all = _targets == "all";
|
||||||
for (auto&& v: targetStrings | ranges::views::values)
|
for (auto&& v: targetStrings | ranges::views::values)
|
||||||
|
{
|
||||||
|
if (!all && (v == TargetType::Underflow || v == TargetType::Overflow))
|
||||||
|
continue;
|
||||||
chosenTargets.insert(v);
|
chosenTargets.insert(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
for (auto&& t: _targets | ranges::views::split(',') | ranges::to<vector<string>>())
|
for (auto&& t: _targets | ranges::views::split(',') | ranges::to<vector<string>>())
|
||||||
{
|
{
|
||||||
|
@ -91,7 +91,10 @@ enum class VerificationTargetType { ConstantCondition, Underflow, Overflow, Unde
|
|||||||
|
|
||||||
struct ModelCheckerTargets
|
struct ModelCheckerTargets
|
||||||
{
|
{
|
||||||
|
/// Adds the default targets, that is, all except underflow and overflow.
|
||||||
static ModelCheckerTargets Default() { return *fromString("default"); }
|
static ModelCheckerTargets Default() { return *fromString("default"); }
|
||||||
|
/// Adds all targets, including underflow and overflow.
|
||||||
|
static ModelCheckerTargets All() { return *fromString("all"); }
|
||||||
|
|
||||||
static std::optional<ModelCheckerTargets> fromString(std::string const& _targets);
|
static std::optional<ModelCheckerTargets> fromString(std::string const& _targets);
|
||||||
|
|
||||||
|
@ -743,10 +743,10 @@ General Information)").c_str(),
|
|||||||
)
|
)
|
||||||
(
|
(
|
||||||
g_strModelCheckerTargets.c_str(),
|
g_strModelCheckerTargets.c_str(),
|
||||||
po::value<string>()->value_name("default,constantCondition,underflow,overflow,divByZero,balance,assert,popEmptyArray,outOfBounds")->default_value("default"),
|
po::value<string>()->value_name("default,all,constantCondition,underflow,overflow,divByZero,balance,assert,popEmptyArray,outOfBounds")->default_value("default"),
|
||||||
"Select model checker verification targets. "
|
"Select model checker verification targets. "
|
||||||
"Multiple targets can be selected at the same time, separated by a comma "
|
"Multiple targets can be selected at the same time, separated by a comma and no spaces."
|
||||||
"and no spaces."
|
" By default all targets except underflow and overflow are selected."
|
||||||
)
|
)
|
||||||
(
|
(
|
||||||
g_strModelCheckerTimeout.c_str(),
|
g_strModelCheckerTimeout.c_str(),
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
--model-checker-engine all --model-checker-targets all
|
@ -8,7 +8,7 @@ Transaction trace:
|
|||||||
test.constructor()
|
test.constructor()
|
||||||
State: arr = []
|
State: arr = []
|
||||||
test.f(0, 0)
|
test.f(0, 0)
|
||||||
--> model_checker_targets_all/input.sol:7:3:
|
--> model_checker_targets_all_all_engines/input.sol:7:3:
|
||||||
|
|
|
|
||||||
7 | --x;
|
7 | --x;
|
||||||
| ^^^
|
| ^^^
|
||||||
@ -23,7 +23,7 @@ Transaction trace:
|
|||||||
test.constructor()
|
test.constructor()
|
||||||
State: arr = []
|
State: arr = []
|
||||||
test.f(0, 2)
|
test.f(0, 2)
|
||||||
--> model_checker_targets_all/input.sol:8:3:
|
--> model_checker_targets_all_all_engines/input.sol:8:3:
|
||||||
|
|
|
|
||||||
8 | x + type(uint).max;
|
8 | x + type(uint).max;
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^
|
||||||
@ -38,7 +38,7 @@ Transaction trace:
|
|||||||
test.constructor()
|
test.constructor()
|
||||||
State: arr = []
|
State: arr = []
|
||||||
test.f(0, 1)
|
test.f(0, 1)
|
||||||
--> model_checker_targets_all/input.sol:9:3:
|
--> model_checker_targets_all_all_engines/input.sol:9:3:
|
||||||
|
|
|
|
||||||
9 | 2 / x;
|
9 | 2 / x;
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
@ -53,7 +53,7 @@ Transaction trace:
|
|||||||
test.constructor()
|
test.constructor()
|
||||||
State: arr = []
|
State: arr = []
|
||||||
test.f(0, 1)
|
test.f(0, 1)
|
||||||
--> model_checker_targets_all/input.sol:11:3:
|
--> model_checker_targets_all_all_engines/input.sol:11:3:
|
||||||
|
|
|
|
||||||
11 | assert(x > 0);
|
11 | assert(x > 0);
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
@ -68,7 +68,7 @@ Transaction trace:
|
|||||||
test.constructor()
|
test.constructor()
|
||||||
State: arr = []
|
State: arr = []
|
||||||
test.f(0, 1)
|
test.f(0, 1)
|
||||||
--> model_checker_targets_all/input.sol:12:3:
|
--> model_checker_targets_all_all_engines/input.sol:12:3:
|
||||||
|
|
|
|
||||||
12 | arr.pop();
|
12 | arr.pop();
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
@ -83,20 +83,20 @@ Transaction trace:
|
|||||||
test.constructor()
|
test.constructor()
|
||||||
State: arr = []
|
State: arr = []
|
||||||
test.f(0, 1)
|
test.f(0, 1)
|
||||||
--> model_checker_targets_all/input.sol:13:3:
|
--> model_checker_targets_all_all_engines/input.sol:13:3:
|
||||||
|
|
|
|
||||||
13 | arr[x];
|
13 | arr[x];
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
Warning: BMC: Condition is always true.
|
Warning: BMC: Condition is always true.
|
||||||
--> model_checker_targets_all/input.sol:6:11:
|
--> model_checker_targets_all_all_engines/input.sol:6:11:
|
||||||
|
|
|
|
||||||
6 | require(x >= 0);
|
6 | require(x >= 0);
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
Note: Callstack:
|
Note: Callstack:
|
||||||
|
|
||||||
Warning: BMC: Insufficient funds happens here.
|
Warning: BMC: Insufficient funds happens here.
|
||||||
--> model_checker_targets_all/input.sol:10:3:
|
--> model_checker_targets_all_all_engines/input.sol:10:3:
|
||||||
|
|
|
|
||||||
10 | a.transfer(x);
|
10 | a.transfer(x);
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
@ -1 +1 @@
|
|||||||
--model-checker-engine bmc --model-checker-targets default
|
--model-checker-engine bmc --model-checker-targets all
|
||||||
|
@ -1 +1 @@
|
|||||||
--model-checker-engine chc --model-checker-targets default
|
--model-checker-engine chc --model-checker-targets all
|
||||||
|
@ -0,0 +1,78 @@
|
|||||||
|
Warning: CHC: Division by zero happens here.
|
||||||
|
Counterexample:
|
||||||
|
arr = []
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Transaction trace:
|
||||||
|
test.constructor()
|
||||||
|
State: arr = []
|
||||||
|
test.f(0, 1)
|
||||||
|
--> model_checker_targets_default_all_engines/input.sol:9:3:
|
||||||
|
|
|
||||||
|
9 | 2 / x;
|
||||||
|
| ^^^^^
|
||||||
|
|
||||||
|
Warning: CHC: Assertion violation happens here.
|
||||||
|
Counterexample:
|
||||||
|
arr = []
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Transaction trace:
|
||||||
|
test.constructor()
|
||||||
|
State: arr = []
|
||||||
|
test.f(0, 1)
|
||||||
|
--> model_checker_targets_default_all_engines/input.sol:11:3:
|
||||||
|
|
|
||||||
|
11 | assert(x > 0);
|
||||||
|
| ^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Warning: CHC: Empty array "pop" happens here.
|
||||||
|
Counterexample:
|
||||||
|
arr = []
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Transaction trace:
|
||||||
|
test.constructor()
|
||||||
|
State: arr = []
|
||||||
|
test.f(0, 1)
|
||||||
|
--> model_checker_targets_default_all_engines/input.sol:12:3:
|
||||||
|
|
|
||||||
|
12 | arr.pop();
|
||||||
|
| ^^^^^^^^^
|
||||||
|
|
||||||
|
Warning: CHC: Out of bounds access happens here.
|
||||||
|
Counterexample:
|
||||||
|
arr = []
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Transaction trace:
|
||||||
|
test.constructor()
|
||||||
|
State: arr = []
|
||||||
|
test.f(0, 1)
|
||||||
|
--> model_checker_targets_default_all_engines/input.sol:13:3:
|
||||||
|
|
|
||||||
|
13 | arr[x];
|
||||||
|
| ^^^^^^
|
||||||
|
|
||||||
|
Warning: BMC: Condition is always true.
|
||||||
|
--> model_checker_targets_default_all_engines/input.sol:6:11:
|
||||||
|
|
|
||||||
|
6 | require(x >= 0);
|
||||||
|
| ^^^^^^
|
||||||
|
Note: Callstack:
|
||||||
|
|
||||||
|
Warning: BMC: Insufficient funds happens here.
|
||||||
|
--> model_checker_targets_default_all_engines/input.sol:10:3:
|
||||||
|
|
|
||||||
|
10 | a.transfer(x);
|
||||||
|
| ^^^^^^^^^^^^^
|
||||||
|
Note: Counterexample:
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Note: Callstack:
|
||||||
|
Note:
|
@ -0,0 +1,15 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0
|
||||||
|
pragma solidity >=0.0;
|
||||||
|
contract test {
|
||||||
|
uint[] arr;
|
||||||
|
function f(address payable a, uint x) public {
|
||||||
|
require(x >= 0);
|
||||||
|
--x;
|
||||||
|
x + type(uint).max;
|
||||||
|
2 / x;
|
||||||
|
a.transfer(x);
|
||||||
|
assert(x > 0);
|
||||||
|
arr.pop();
|
||||||
|
arr[x];
|
||||||
|
}
|
||||||
|
}
|
1
test/cmdlineTests/model_checker_targets_default_bmc/args
Normal file
1
test/cmdlineTests/model_checker_targets_default_bmc/args
Normal file
@ -0,0 +1 @@
|
|||||||
|
--model-checker-engine bmc --model-checker-targets default
|
43
test/cmdlineTests/model_checker_targets_default_bmc/err
Normal file
43
test/cmdlineTests/model_checker_targets_default_bmc/err
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
Warning: BMC: Condition is always true.
|
||||||
|
--> model_checker_targets_default_bmc/input.sol:6:11:
|
||||||
|
|
|
||||||
|
6 | require(x >= 0);
|
||||||
|
| ^^^^^^
|
||||||
|
Note: Callstack:
|
||||||
|
|
||||||
|
Warning: BMC: Division by zero happens here.
|
||||||
|
--> model_checker_targets_default_bmc/input.sol:9:3:
|
||||||
|
|
|
||||||
|
9 | 2 / x;
|
||||||
|
| ^^^^^
|
||||||
|
Note: Counterexample:
|
||||||
|
<result> = 0
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Note: Callstack:
|
||||||
|
Note:
|
||||||
|
|
||||||
|
Warning: BMC: Insufficient funds happens here.
|
||||||
|
--> model_checker_targets_default_bmc/input.sol:10:3:
|
||||||
|
|
|
||||||
|
10 | a.transfer(x);
|
||||||
|
| ^^^^^^^^^^^^^
|
||||||
|
Note: Counterexample:
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Note: Callstack:
|
||||||
|
Note:
|
||||||
|
|
||||||
|
Warning: BMC: Assertion violation happens here.
|
||||||
|
--> model_checker_targets_default_bmc/input.sol:11:3:
|
||||||
|
|
|
||||||
|
11 | assert(x > 0);
|
||||||
|
| ^^^^^^^^^^^^^
|
||||||
|
Note: Counterexample:
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Note: Callstack:
|
||||||
|
Note:
|
@ -0,0 +1,15 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0
|
||||||
|
pragma solidity >=0.0;
|
||||||
|
contract test {
|
||||||
|
uint[] arr;
|
||||||
|
function f(address payable a, uint x) public {
|
||||||
|
require(x >= 0);
|
||||||
|
--x;
|
||||||
|
x + type(uint).max;
|
||||||
|
2 / x;
|
||||||
|
a.transfer(x);
|
||||||
|
assert(x > 0);
|
||||||
|
arr.pop();
|
||||||
|
arr[x];
|
||||||
|
}
|
||||||
|
}
|
1
test/cmdlineTests/model_checker_targets_default_chc/args
Normal file
1
test/cmdlineTests/model_checker_targets_default_chc/args
Normal file
@ -0,0 +1 @@
|
|||||||
|
--model-checker-engine chc --model-checker-targets default
|
59
test/cmdlineTests/model_checker_targets_default_chc/err
Normal file
59
test/cmdlineTests/model_checker_targets_default_chc/err
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
Warning: CHC: Division by zero happens here.
|
||||||
|
Counterexample:
|
||||||
|
arr = []
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Transaction trace:
|
||||||
|
test.constructor()
|
||||||
|
State: arr = []
|
||||||
|
test.f(0, 1)
|
||||||
|
--> model_checker_targets_default_chc/input.sol:9:3:
|
||||||
|
|
|
||||||
|
9 | 2 / x;
|
||||||
|
| ^^^^^
|
||||||
|
|
||||||
|
Warning: CHC: Assertion violation happens here.
|
||||||
|
Counterexample:
|
||||||
|
arr = []
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Transaction trace:
|
||||||
|
test.constructor()
|
||||||
|
State: arr = []
|
||||||
|
test.f(0, 1)
|
||||||
|
--> model_checker_targets_default_chc/input.sol:11:3:
|
||||||
|
|
|
||||||
|
11 | assert(x > 0);
|
||||||
|
| ^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Warning: CHC: Empty array "pop" happens here.
|
||||||
|
Counterexample:
|
||||||
|
arr = []
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Transaction trace:
|
||||||
|
test.constructor()
|
||||||
|
State: arr = []
|
||||||
|
test.f(0, 1)
|
||||||
|
--> model_checker_targets_default_chc/input.sol:12:3:
|
||||||
|
|
|
||||||
|
12 | arr.pop();
|
||||||
|
| ^^^^^^^^^
|
||||||
|
|
||||||
|
Warning: CHC: Out of bounds access happens here.
|
||||||
|
Counterexample:
|
||||||
|
arr = []
|
||||||
|
a = 0
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
Transaction trace:
|
||||||
|
test.constructor()
|
||||||
|
State: arr = []
|
||||||
|
test.f(0, 1)
|
||||||
|
--> model_checker_targets_default_chc/input.sol:13:3:
|
||||||
|
|
|
||||||
|
13 | arr[x];
|
||||||
|
| ^^^^^^
|
@ -0,0 +1,15 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0
|
||||||
|
pragma solidity >=0.0;
|
||||||
|
contract test {
|
||||||
|
uint[] arr;
|
||||||
|
function f(address payable a, uint x) public {
|
||||||
|
require(x >= 0);
|
||||||
|
--x;
|
||||||
|
x + type(uint).max;
|
||||||
|
2 / x;
|
||||||
|
a.transfer(x);
|
||||||
|
assert(x > 0);
|
||||||
|
arr.pop();
|
||||||
|
arr[x];
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,59 @@
|
|||||||
{"auxiliaryInputRequested":{"smtlib2queries":{"0x8a1785699211e91e2593e2568d4240af6ec3b4ba113087fcb6f42bc764040d83":"(set-option :produce-models true)
|
{"auxiliaryInputRequested":{"smtlib2queries":{"0x196770bc73875d44bb894706d45e41767470fb493b21a0b476d2d94ba750f250":"(set-option :produce-models true)
|
||||||
|
(set-logic ALL)
|
||||||
|
(declare-fun |error_0| () Int)
|
||||||
|
(declare-fun |this_0| () Int)
|
||||||
|
(declare-datatypes ((|state_type| 0)) (((|state_type| (|balances| (Array Int Int))))))
|
||||||
|
(declare-fun |state_0| () |state_type|)
|
||||||
|
(declare-datatypes ((|bytes_tuple| 0)) (((|bytes_tuple| (|bytes_tuple_accessor_array| (Array Int Int)) (|bytes_tuple_accessor_length| Int)))))
|
||||||
|
(declare-datatypes ((|tx_type| 0)) (((|tx_type| (|block.chainid| Int) (|block.coinbase| Int) (|block.difficulty| Int) (|block.gaslimit| Int) (|block.number| Int) (|block.timestamp| Int) (|blockhash| (Array Int Int)) (|msg.data| |bytes_tuple|) (|msg.sender| Int) (|msg.sig| Int) (|msg.value| Int) (|tx.gasprice| Int) (|tx.origin| Int)))))
|
||||||
|
(declare-fun |tx_0| () |tx_type|)
|
||||||
|
(declare-datatypes ((|ecrecover_input_type| 0)) (((|ecrecover_input_type| (|hash| Int) (|v| Int) (|r| Int) (|s| Int)))))
|
||||||
|
(declare-datatypes ((|crypto_type| 0)) (((|crypto_type| (|ecrecover| (Array |ecrecover_input_type| Int)) (|keccak256| (Array |bytes_tuple| Int)) (|ripemd160| (Array |bytes_tuple| Int)) (|sha256| (Array |bytes_tuple| Int))))))
|
||||||
|
(declare-fun |crypto_0| () |crypto_type|)
|
||||||
|
(declare-datatypes ((|abi_type| 0)) (((|abi_type|))))
|
||||||
|
(declare-fun |abi_0| () |abi_type|)
|
||||||
|
(declare-datatypes ((|uint_array_tuple| 0)) (((|uint_array_tuple| (|uint_array_tuple_accessor_array| (Array Int Int)) (|uint_array_tuple_accessor_length| Int)))))
|
||||||
|
(declare-fun |arr_4_length_pair_0| () |uint_array_tuple|)
|
||||||
|
(declare-fun |a_6_0| () Int)
|
||||||
|
(declare-fun |x_8_0| () Int)
|
||||||
|
(declare-fun |arr_4_length_pair_1| () |uint_array_tuple|)
|
||||||
|
(declare-fun |expr_12_0| () Int)
|
||||||
|
(declare-fun |expr_13_0| () Int)
|
||||||
|
(declare-fun |expr_14_1| () Bool)
|
||||||
|
(declare-fun |expr_17_0| () Int)
|
||||||
|
(declare-fun |expr_18_1| () Int)
|
||||||
|
(declare-fun |x_8_1| () Int)
|
||||||
|
(declare-fun |expr_20_0| () Int)
|
||||||
|
(declare-fun |expr_25_1| () Int)
|
||||||
|
(declare-fun |expr_26_1| () Int)
|
||||||
|
(declare-fun |expr_28_0| () Int)
|
||||||
|
(declare-fun |expr_29_0| () Int)
|
||||||
|
(declare-fun |d_div_mod_10_0| () Int)
|
||||||
|
(declare-fun |r_div_mod_10_0| () Int)
|
||||||
|
(declare-fun |expr_30_1| () Int)
|
||||||
|
(declare-fun |expr_32_0| () Int)
|
||||||
|
(declare-fun |expr_35_0| () Int)
|
||||||
|
(declare-fun |state_1| () |state_type|)
|
||||||
|
(declare-fun |state_2| () |state_type|)
|
||||||
|
(declare-fun |state_3| () |state_type|)
|
||||||
|
(declare-fun |expr_39_0| () Int)
|
||||||
|
(declare-fun |expr_40_0| () Int)
|
||||||
|
(declare-fun |expr_41_1| () Bool)
|
||||||
|
(declare-fun |expr_44_length_pair_0| () |uint_array_tuple|)
|
||||||
|
(declare-fun |expr_44_length_pair_1| () |uint_array_tuple|)
|
||||||
|
(declare-fun |arr_4_length_pair_2| () |uint_array_tuple|)
|
||||||
|
(declare-fun |expr_49_length_pair_0| () |uint_array_tuple|)
|
||||||
|
(declare-fun |expr_50_0| () Int)
|
||||||
|
(declare-fun |expr_51_1| () Int)
|
||||||
|
|
||||||
|
(assert (and (and (and true true) (and (=> (and true true) (and (>= expr_35_0 0) (<= expr_35_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_35_0 x_8_1) (and (=> (and true true) (and (>= expr_32_0 0) (<= expr_32_0 1461501637330902918203684832716283019655932542975))) (and (= expr_32_0 a_6_0) (and (=> (and true true) (and (>= expr_30_1 0) (<= expr_30_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_30_1 (ite (= expr_29_0 0) 0 d_div_mod_10_0)) (and (and (<= 0 r_div_mod_10_0) (or (= expr_29_0 0) (< r_div_mod_10_0 expr_29_0))) (and (= (+ (* d_div_mod_10_0 expr_29_0) r_div_mod_10_0) expr_28_0) (and (=> (and true true) (and (>= expr_29_0 0) (<= expr_29_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_29_0 x_8_1) (and (=> (and true true) true) (and (= expr_28_0 2) (and (=> (and true true) (and (>= expr_26_1 0) (<= expr_26_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_26_1 (+ expr_20_0 expr_25_1)) (and (=> (and true true) (and (>= expr_25_1 0) (<= expr_25_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_25_1 115792089237316195423570985008687907853269984665640564039457584007913129639935) (and (=> (and true true) (and (>= expr_20_0 0) (<= expr_20_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_20_0 x_8_1) (and (ite (and true true) (= x_8_1 (- expr_17_0 1)) (= x_8_1 x_8_0)) (and (=> (and true true) (and (>= expr_18_1 0) (<= expr_18_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_18_1 (- expr_17_0 1)) (and (=> (and true true) (and (>= expr_17_0 0) (<= expr_17_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_17_0 x_8_0) (and (=> (and true true) expr_14_1) (and (= expr_14_1 (>= expr_12_0 expr_13_0)) (and (=> (and true true) true) (and (= expr_13_0 0) (and (=> (and true true) (and (>= expr_12_0 0) (<= expr_12_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_12_0 x_8_0) (and (and (>= x_8_0 0) (<= x_8_0 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (and (>= a_6_0 0) (<= a_6_0 1461501637330902918203684832716283019655932542975)) (and (>= (|uint_array_tuple_accessor_length| arr_4_length_pair_1) 0) (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 1917212865)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 114)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 70)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 88)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 193)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) true)))))))))))))))))))))))))))))))))) (< (select (|balances| state_0) this_0) expr_35_0)))
|
||||||
|
(declare-const |EVALEXPR_0| Int)
|
||||||
|
(assert (= |EVALEXPR_0| a_6_0))
|
||||||
|
(declare-const |EVALEXPR_1| Int)
|
||||||
|
(assert (= |EVALEXPR_1| x_8_1))
|
||||||
|
(check-sat)
|
||||||
|
(get-value (|EVALEXPR_0| |EVALEXPR_1| ))
|
||||||
|
","0x8a1785699211e91e2593e2568d4240af6ec3b4ba113087fcb6f42bc764040d83":"(set-option :produce-models true)
|
||||||
(set-logic ALL)
|
(set-logic ALL)
|
||||||
(declare-fun |error_0| () Int)
|
(declare-fun |error_0| () Int)
|
||||||
(declare-fun |this_0| () Int)
|
(declare-fun |this_0| () Int)
|
||||||
@ -48,110 +103,7 @@
|
|||||||
|
|
||||||
(assert (and (and (and true true) (and (= expr_14_1 (>= expr_12_0 expr_13_0)) (and (=> (and true true) true) (and (= expr_13_0 0) (and (=> (and true true) (and (>= expr_12_0 0) (<= expr_12_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_12_0 x_8_0) (and (and (>= x_8_0 0) (<= x_8_0 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (and (>= a_6_0 0) (<= a_6_0 1461501637330902918203684832716283019655932542975)) (and (>= (|uint_array_tuple_accessor_length| arr_4_length_pair_1) 0) (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 1917212865)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 114)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 70)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 88)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 193)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) true)))))))))) (not expr_14_1)))
|
(assert (and (and (and true true) (and (= expr_14_1 (>= expr_12_0 expr_13_0)) (and (=> (and true true) true) (and (= expr_13_0 0) (and (=> (and true true) (and (>= expr_12_0 0) (<= expr_12_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_12_0 x_8_0) (and (and (>= x_8_0 0) (<= x_8_0 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (and (>= a_6_0 0) (<= a_6_0 1461501637330902918203684832716283019655932542975)) (and (>= (|uint_array_tuple_accessor_length| arr_4_length_pair_1) 0) (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 1917212865)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 114)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 70)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 88)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 193)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) true)))))))))) (not expr_14_1)))
|
||||||
(check-sat)
|
(check-sat)
|
||||||
","0xf74fc530d5dd4498f4ad9eeb32a713af6cc6966efcd3e58083b97f864fdc7cbb":"(set-option :produce-models true)
|
"}},"errors":[{"component":"general","errorCode":"4281","formattedMessage":"Warning: CHC: Division by zero happens here.
|
||||||
(set-logic ALL)
|
|
||||||
(declare-fun |error_0| () Int)
|
|
||||||
(declare-fun |this_0| () Int)
|
|
||||||
(declare-datatypes ((|state_type| 0)) (((|state_type| (|balances| (Array Int Int))))))
|
|
||||||
(declare-fun |state_0| () |state_type|)
|
|
||||||
(declare-datatypes ((|bytes_tuple| 0)) (((|bytes_tuple| (|bytes_tuple_accessor_array| (Array Int Int)) (|bytes_tuple_accessor_length| Int)))))
|
|
||||||
(declare-datatypes ((|tx_type| 0)) (((|tx_type| (|block.chainid| Int) (|block.coinbase| Int) (|block.difficulty| Int) (|block.gaslimit| Int) (|block.number| Int) (|block.timestamp| Int) (|blockhash| (Array Int Int)) (|msg.data| |bytes_tuple|) (|msg.sender| Int) (|msg.sig| Int) (|msg.value| Int) (|tx.gasprice| Int) (|tx.origin| Int)))))
|
|
||||||
(declare-fun |tx_0| () |tx_type|)
|
|
||||||
(declare-datatypes ((|ecrecover_input_type| 0)) (((|ecrecover_input_type| (|hash| Int) (|v| Int) (|r| Int) (|s| Int)))))
|
|
||||||
(declare-datatypes ((|crypto_type| 0)) (((|crypto_type| (|ecrecover| (Array |ecrecover_input_type| Int)) (|keccak256| (Array |bytes_tuple| Int)) (|ripemd160| (Array |bytes_tuple| Int)) (|sha256| (Array |bytes_tuple| Int))))))
|
|
||||||
(declare-fun |crypto_0| () |crypto_type|)
|
|
||||||
(declare-datatypes ((|abi_type| 0)) (((|abi_type|))))
|
|
||||||
(declare-fun |abi_0| () |abi_type|)
|
|
||||||
(declare-datatypes ((|uint_array_tuple| 0)) (((|uint_array_tuple| (|uint_array_tuple_accessor_array| (Array Int Int)) (|uint_array_tuple_accessor_length| Int)))))
|
|
||||||
(declare-fun |arr_4_length_pair_0| () |uint_array_tuple|)
|
|
||||||
(declare-fun |a_6_0| () Int)
|
|
||||||
(declare-fun |x_8_0| () Int)
|
|
||||||
(declare-fun |arr_4_length_pair_1| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_12_0| () Int)
|
|
||||||
(declare-fun |expr_13_0| () Int)
|
|
||||||
(declare-fun |expr_14_1| () Bool)
|
|
||||||
(declare-fun |expr_17_0| () Int)
|
|
||||||
(declare-fun |expr_18_1| () Int)
|
|
||||||
(declare-fun |x_8_1| () Int)
|
|
||||||
(declare-fun |expr_20_0| () Int)
|
|
||||||
(declare-fun |expr_25_1| () Int)
|
|
||||||
(declare-fun |expr_26_1| () Int)
|
|
||||||
(declare-fun |expr_28_0| () Int)
|
|
||||||
(declare-fun |expr_29_0| () Int)
|
|
||||||
(declare-fun |d_div_mod_14_0| () Int)
|
|
||||||
(declare-fun |r_div_mod_14_0| () Int)
|
|
||||||
(declare-fun |expr_30_1| () Int)
|
|
||||||
(declare-fun |expr_32_0| () Int)
|
|
||||||
(declare-fun |expr_35_0| () Int)
|
|
||||||
(declare-fun |state_1| () |state_type|)
|
|
||||||
(declare-fun |state_2| () |state_type|)
|
|
||||||
(declare-fun |state_3| () |state_type|)
|
|
||||||
(declare-fun |expr_39_0| () Int)
|
|
||||||
(declare-fun |expr_40_0| () Int)
|
|
||||||
(declare-fun |expr_41_1| () Bool)
|
|
||||||
(declare-fun |expr_44_length_pair_0| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_44_length_pair_1| () |uint_array_tuple|)
|
|
||||||
(declare-fun |arr_4_length_pair_2| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_49_length_pair_0| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_50_0| () Int)
|
|
||||||
(declare-fun |expr_51_1| () Int)
|
|
||||||
|
|
||||||
(assert (and (and (and true true) (and (=> (and true true) (and (>= expr_35_0 0) (<= expr_35_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_35_0 x_8_1) (and (=> (and true true) (and (>= expr_32_0 0) (<= expr_32_0 1461501637330902918203684832716283019655932542975))) (and (= expr_32_0 a_6_0) (and (=> (and true true) (and (>= expr_30_1 0) (<= expr_30_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_30_1 (ite (= expr_29_0 0) 0 d_div_mod_14_0)) (and (and (<= 0 r_div_mod_14_0) (or (= expr_29_0 0) (< r_div_mod_14_0 expr_29_0))) (and (= (+ (* d_div_mod_14_0 expr_29_0) r_div_mod_14_0) expr_28_0) (and (=> (and true true) (and (>= expr_29_0 0) (<= expr_29_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_29_0 x_8_1) (and (=> (and true true) true) (and (= expr_28_0 2) (and (=> (and true true) (and (>= expr_26_1 0) (<= expr_26_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_26_1 (+ expr_20_0 expr_25_1)) (and (=> (and true true) (and (>= expr_25_1 0) (<= expr_25_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_25_1 115792089237316195423570985008687907853269984665640564039457584007913129639935) (and (=> (and true true) (and (>= expr_20_0 0) (<= expr_20_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_20_0 x_8_1) (and (ite (and true true) (= x_8_1 (- expr_17_0 1)) (= x_8_1 x_8_0)) (and (=> (and true true) (and (>= expr_18_1 0) (<= expr_18_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_18_1 (- expr_17_0 1)) (and (=> (and true true) (and (>= expr_17_0 0) (<= expr_17_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_17_0 x_8_0) (and (=> (and true true) expr_14_1) (and (= expr_14_1 (>= expr_12_0 expr_13_0)) (and (=> (and true true) true) (and (= expr_13_0 0) (and (=> (and true true) (and (>= expr_12_0 0) (<= expr_12_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_12_0 x_8_0) (and (and (>= x_8_0 0) (<= x_8_0 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (and (>= a_6_0 0) (<= a_6_0 1461501637330902918203684832716283019655932542975)) (and (>= (|uint_array_tuple_accessor_length| arr_4_length_pair_1) 0) (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 1917212865)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 114)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 70)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 88)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 193)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) true)))))))))))))))))))))))))))))))))) (< (select (|balances| state_0) this_0) expr_35_0)))
|
|
||||||
(declare-const |EVALEXPR_0| Int)
|
|
||||||
(assert (= |EVALEXPR_0| a_6_0))
|
|
||||||
(declare-const |EVALEXPR_1| Int)
|
|
||||||
(assert (= |EVALEXPR_1| x_8_1))
|
|
||||||
(check-sat)
|
|
||||||
(get-value (|EVALEXPR_0| |EVALEXPR_1| ))
|
|
||||||
"}},"errors":[{"component":"general","errorCode":"3944","formattedMessage":"Warning: CHC: Underflow (resulting value less than 0) happens here.
|
|
||||||
Counterexample:
|
|
||||||
arr = []
|
|
||||||
a = 0
|
|
||||||
x = 0
|
|
||||||
|
|
||||||
Transaction trace:
|
|
||||||
test.constructor()
|
|
||||||
State: arr = []
|
|
||||||
test.f(0, 0)
|
|
||||||
--> A:8:7:
|
|
||||||
|
|
|
||||||
8 | \t\t\t\t\t\t--x;
|
|
||||||
| \t\t\t\t\t\t^^^
|
|
||||||
|
|
||||||
","message":"CHC: Underflow (resulting value less than 0) happens here.
|
|
||||||
Counterexample:
|
|
||||||
arr = []
|
|
||||||
a = 0
|
|
||||||
x = 0
|
|
||||||
|
|
||||||
Transaction trace:
|
|
||||||
test.constructor()
|
|
||||||
State: arr = []
|
|
||||||
test.f(0, 0)","severity":"warning","sourceLocation":{"end":177,"file":"A","start":174},"type":"Warning"},{"component":"general","errorCode":"4984","formattedMessage":"Warning: CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
|
||||||
Counterexample:
|
|
||||||
arr = []
|
|
||||||
a = 0
|
|
||||||
x = 1
|
|
||||||
|
|
||||||
Transaction trace:
|
|
||||||
test.constructor()
|
|
||||||
State: arr = []
|
|
||||||
test.f(0, 2)
|
|
||||||
--> A:9:7:
|
|
||||||
|
|
|
||||||
9 | \t\t\t\t\t\tx + type(uint).max;
|
|
||||||
| \t\t\t\t\t\t^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
","message":"CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
|
||||||
Counterexample:
|
|
||||||
arr = []
|
|
||||||
a = 0
|
|
||||||
x = 1
|
|
||||||
|
|
||||||
Transaction trace:
|
|
||||||
test.constructor()
|
|
||||||
State: arr = []
|
|
||||||
test.f(0, 2)","severity":"warning","sourceLocation":{"end":203,"file":"A","start":185},"type":"Warning"},{"component":"general","errorCode":"4281","formattedMessage":"Warning: CHC: Division by zero happens here.
|
|
||||||
Counterexample:
|
Counterexample:
|
||||||
arr = []
|
arr = []
|
||||||
a = 0
|
a = 0
|
@ -190,63 +190,6 @@
|
|||||||
|
|
||||||
(assert (and (and (and true true) (and (= expr_14_1 (>= expr_12_0 expr_13_0)) (and (=> (and true true) true) (and (= expr_13_0 0) (and (=> (and true true) (and (>= expr_12_0 0) (<= expr_12_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_12_0 x_8_0) (and (and (>= x_8_0 0) (<= x_8_0 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (and (>= a_6_0 0) (<= a_6_0 1461501637330902918203684832716283019655932542975)) (and (>= (|uint_array_tuple_accessor_length| arr_4_length_pair_1) 0) (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 1917212865)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 114)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 70)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 88)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 193)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) true)))))))))) expr_14_1))
|
(assert (and (and (and true true) (and (= expr_14_1 (>= expr_12_0 expr_13_0)) (and (=> (and true true) true) (and (= expr_13_0 0) (and (=> (and true true) (and (>= expr_12_0 0) (<= expr_12_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_12_0 x_8_0) (and (and (>= x_8_0 0) (<= x_8_0 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (and (>= a_6_0 0) (<= a_6_0 1461501637330902918203684832716283019655932542975)) (and (>= (|uint_array_tuple_accessor_length| arr_4_length_pair_1) 0) (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 1917212865)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 114)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 70)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 88)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 193)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) true)))))))))) expr_14_1))
|
||||||
(check-sat)
|
(check-sat)
|
||||||
","0xc4955111313d5bc83a8e7aece746156804afbd102ec8a78c06b2a284470deebc":"(set-option :produce-models true)
|
|
||||||
(set-logic ALL)
|
|
||||||
(declare-fun |error_0| () Int)
|
|
||||||
(declare-fun |this_0| () Int)
|
|
||||||
(declare-datatypes ((|state_type| 0)) (((|state_type| (|balances| (Array Int Int))))))
|
|
||||||
(declare-fun |state_0| () |state_type|)
|
|
||||||
(declare-datatypes ((|bytes_tuple| 0)) (((|bytes_tuple| (|bytes_tuple_accessor_array| (Array Int Int)) (|bytes_tuple_accessor_length| Int)))))
|
|
||||||
(declare-datatypes ((|tx_type| 0)) (((|tx_type| (|block.chainid| Int) (|block.coinbase| Int) (|block.difficulty| Int) (|block.gaslimit| Int) (|block.number| Int) (|block.timestamp| Int) (|blockhash| (Array Int Int)) (|msg.data| |bytes_tuple|) (|msg.sender| Int) (|msg.sig| Int) (|msg.value| Int) (|tx.gasprice| Int) (|tx.origin| Int)))))
|
|
||||||
(declare-fun |tx_0| () |tx_type|)
|
|
||||||
(declare-datatypes ((|ecrecover_input_type| 0)) (((|ecrecover_input_type| (|hash| Int) (|v| Int) (|r| Int) (|s| Int)))))
|
|
||||||
(declare-datatypes ((|crypto_type| 0)) (((|crypto_type| (|ecrecover| (Array |ecrecover_input_type| Int)) (|keccak256| (Array |bytes_tuple| Int)) (|ripemd160| (Array |bytes_tuple| Int)) (|sha256| (Array |bytes_tuple| Int))))))
|
|
||||||
(declare-fun |crypto_0| () |crypto_type|)
|
|
||||||
(declare-datatypes ((|abi_type| 0)) (((|abi_type|))))
|
|
||||||
(declare-fun |abi_0| () |abi_type|)
|
|
||||||
(declare-datatypes ((|uint_array_tuple| 0)) (((|uint_array_tuple| (|uint_array_tuple_accessor_array| (Array Int Int)) (|uint_array_tuple_accessor_length| Int)))))
|
|
||||||
(declare-fun |arr_4_length_pair_0| () |uint_array_tuple|)
|
|
||||||
(declare-fun |a_6_0| () Int)
|
|
||||||
(declare-fun |x_8_0| () Int)
|
|
||||||
(declare-fun |arr_4_length_pair_1| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_12_0| () Int)
|
|
||||||
(declare-fun |expr_13_0| () Int)
|
|
||||||
(declare-fun |expr_14_1| () Bool)
|
|
||||||
(declare-fun |expr_17_0| () Int)
|
|
||||||
(declare-fun |expr_18_1| () Int)
|
|
||||||
(declare-fun |x_8_1| () Int)
|
|
||||||
(declare-fun |expr_20_0| () Int)
|
|
||||||
(declare-fun |expr_25_1| () Int)
|
|
||||||
(declare-fun |expr_26_1| () Int)
|
|
||||||
(declare-fun |expr_28_0| () Int)
|
|
||||||
(declare-fun |expr_29_0| () Int)
|
|
||||||
(declare-fun |d_div_mod_0_0| () Int)
|
|
||||||
(declare-fun |r_div_mod_0_0| () Int)
|
|
||||||
(declare-fun |expr_30_1| () Int)
|
|
||||||
(declare-fun |expr_32_0| () Int)
|
|
||||||
(declare-fun |expr_35_0| () Int)
|
|
||||||
(declare-fun |state_1| () |state_type|)
|
|
||||||
(declare-fun |state_2| () |state_type|)
|
|
||||||
(declare-fun |state_3| () |state_type|)
|
|
||||||
(declare-fun |expr_39_0| () Int)
|
|
||||||
(declare-fun |expr_40_0| () Int)
|
|
||||||
(declare-fun |expr_41_1| () Bool)
|
|
||||||
(declare-fun |expr_44_length_pair_0| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_44_length_pair_1| () |uint_array_tuple|)
|
|
||||||
(declare-fun |arr_4_length_pair_2| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_49_length_pair_0| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_50_0| () Int)
|
|
||||||
(declare-fun |expr_51_1| () Int)
|
|
||||||
|
|
||||||
(assert (and (and (and true true) (and (=> (and true true) (and (>= expr_25_1 0) (<= expr_25_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_25_1 115792089237316195423570985008687907853269984665640564039457584007913129639935) (and (=> (and true true) (and (>= expr_20_0 0) (<= expr_20_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_20_0 x_8_1) (and (ite (and true true) (= x_8_1 (- expr_17_0 1)) (= x_8_1 x_8_0)) (and (=> (and true true) (and (>= expr_18_1 0) (<= expr_18_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_18_1 (- expr_17_0 1)) (and (=> (and true true) (and (>= expr_17_0 0) (<= expr_17_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_17_0 x_8_0) (and (=> (and true true) expr_14_1) (and (= expr_14_1 (>= expr_12_0 expr_13_0)) (and (=> (and true true) true) (and (= expr_13_0 0) (and (=> (and true true) (and (>= expr_12_0 0) (<= expr_12_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_12_0 x_8_0) (and (and (>= x_8_0 0) (<= x_8_0 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (and (>= a_6_0 0) (<= a_6_0 1461501637330902918203684832716283019655932542975)) (and (>= (|uint_array_tuple_accessor_length| arr_4_length_pair_1) 0) (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 1917212865)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 114)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 70)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 88)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 193)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) true)))))))))))))))))))) (> (+ expr_20_0 expr_25_1) 115792089237316195423570985008687907853269984665640564039457584007913129639935)))
|
|
||||||
(declare-const |EVALEXPR_0| Int)
|
|
||||||
(assert (= |EVALEXPR_0| a_6_0))
|
|
||||||
(declare-const |EVALEXPR_1| Int)
|
|
||||||
(assert (= |EVALEXPR_1| x_8_1))
|
|
||||||
(declare-const |EVALEXPR_2| Int)
|
|
||||||
(assert (= |EVALEXPR_2| (+ expr_20_0 expr_25_1)))
|
|
||||||
(check-sat)
|
|
||||||
(get-value (|EVALEXPR_0| |EVALEXPR_1| |EVALEXPR_2| ))
|
|
||||||
","0xd5b9836c53d2b59d5215cfe646b8a2d6702aed014aae55a9512896c876117d01":"(set-option :produce-models true)
|
","0xd5b9836c53d2b59d5215cfe646b8a2d6702aed014aae55a9512896c876117d01":"(set-option :produce-models true)
|
||||||
(set-logic ALL)
|
(set-logic ALL)
|
||||||
(declare-fun |error_0| () Int)
|
(declare-fun |error_0| () Int)
|
||||||
@ -272,63 +215,6 @@
|
|||||||
|
|
||||||
(assert (and (and (and true true) (and (= expr_14_1 (>= expr_12_0 expr_13_0)) (and (=> (and true true) true) (and (= expr_13_0 0) (and (=> (and true true) (and (>= expr_12_0 0) (<= expr_12_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_12_0 x_8_0) (and (and (>= x_8_0 0) (<= x_8_0 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (and (>= a_6_0 0) (<= a_6_0 1461501637330902918203684832716283019655932542975)) (and (>= (|uint_array_tuple_accessor_length| arr_4_length_pair_1) 0) (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 1917212865)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 114)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 70)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 88)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 193)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) true)))))))))) (not expr_14_1)))
|
(assert (and (and (and true true) (and (= expr_14_1 (>= expr_12_0 expr_13_0)) (and (=> (and true true) true) (and (= expr_13_0 0) (and (=> (and true true) (and (>= expr_12_0 0) (<= expr_12_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_12_0 x_8_0) (and (and (>= x_8_0 0) (<= x_8_0 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (and (>= a_6_0 0) (<= a_6_0 1461501637330902918203684832716283019655932542975)) (and (>= (|uint_array_tuple_accessor_length| arr_4_length_pair_1) 0) (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 1917212865)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 114)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 70)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 88)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 193)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) true)))))))))) (not expr_14_1)))
|
||||||
(check-sat)
|
(check-sat)
|
||||||
","0xf8a9e6ce3d09ef3b2a597297e00abd8e9cdfee9d2491deb6cb8349f0ee53fc61":"(set-option :produce-models true)
|
|
||||||
(set-logic ALL)
|
|
||||||
(declare-fun |error_0| () Int)
|
|
||||||
(declare-fun |this_0| () Int)
|
|
||||||
(declare-datatypes ((|state_type| 0)) (((|state_type| (|balances| (Array Int Int))))))
|
|
||||||
(declare-fun |state_0| () |state_type|)
|
|
||||||
(declare-datatypes ((|bytes_tuple| 0)) (((|bytes_tuple| (|bytes_tuple_accessor_array| (Array Int Int)) (|bytes_tuple_accessor_length| Int)))))
|
|
||||||
(declare-datatypes ((|tx_type| 0)) (((|tx_type| (|block.chainid| Int) (|block.coinbase| Int) (|block.difficulty| Int) (|block.gaslimit| Int) (|block.number| Int) (|block.timestamp| Int) (|blockhash| (Array Int Int)) (|msg.data| |bytes_tuple|) (|msg.sender| Int) (|msg.sig| Int) (|msg.value| Int) (|tx.gasprice| Int) (|tx.origin| Int)))))
|
|
||||||
(declare-fun |tx_0| () |tx_type|)
|
|
||||||
(declare-datatypes ((|ecrecover_input_type| 0)) (((|ecrecover_input_type| (|hash| Int) (|v| Int) (|r| Int) (|s| Int)))))
|
|
||||||
(declare-datatypes ((|crypto_type| 0)) (((|crypto_type| (|ecrecover| (Array |ecrecover_input_type| Int)) (|keccak256| (Array |bytes_tuple| Int)) (|ripemd160| (Array |bytes_tuple| Int)) (|sha256| (Array |bytes_tuple| Int))))))
|
|
||||||
(declare-fun |crypto_0| () |crypto_type|)
|
|
||||||
(declare-datatypes ((|abi_type| 0)) (((|abi_type|))))
|
|
||||||
(declare-fun |abi_0| () |abi_type|)
|
|
||||||
(declare-datatypes ((|uint_array_tuple| 0)) (((|uint_array_tuple| (|uint_array_tuple_accessor_array| (Array Int Int)) (|uint_array_tuple_accessor_length| Int)))))
|
|
||||||
(declare-fun |arr_4_length_pair_0| () |uint_array_tuple|)
|
|
||||||
(declare-fun |a_6_0| () Int)
|
|
||||||
(declare-fun |x_8_0| () Int)
|
|
||||||
(declare-fun |arr_4_length_pair_1| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_12_0| () Int)
|
|
||||||
(declare-fun |expr_13_0| () Int)
|
|
||||||
(declare-fun |expr_14_1| () Bool)
|
|
||||||
(declare-fun |expr_17_0| () Int)
|
|
||||||
(declare-fun |expr_18_1| () Int)
|
|
||||||
(declare-fun |x_8_1| () Int)
|
|
||||||
(declare-fun |expr_20_0| () Int)
|
|
||||||
(declare-fun |expr_25_1| () Int)
|
|
||||||
(declare-fun |expr_26_1| () Int)
|
|
||||||
(declare-fun |expr_28_0| () Int)
|
|
||||||
(declare-fun |expr_29_0| () Int)
|
|
||||||
(declare-fun |d_div_mod_0_0| () Int)
|
|
||||||
(declare-fun |r_div_mod_0_0| () Int)
|
|
||||||
(declare-fun |expr_30_1| () Int)
|
|
||||||
(declare-fun |expr_32_0| () Int)
|
|
||||||
(declare-fun |expr_35_0| () Int)
|
|
||||||
(declare-fun |state_1| () |state_type|)
|
|
||||||
(declare-fun |state_2| () |state_type|)
|
|
||||||
(declare-fun |state_3| () |state_type|)
|
|
||||||
(declare-fun |expr_39_0| () Int)
|
|
||||||
(declare-fun |expr_40_0| () Int)
|
|
||||||
(declare-fun |expr_41_1| () Bool)
|
|
||||||
(declare-fun |expr_44_length_pair_0| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_44_length_pair_1| () |uint_array_tuple|)
|
|
||||||
(declare-fun |arr_4_length_pair_2| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_49_length_pair_0| () |uint_array_tuple|)
|
|
||||||
(declare-fun |expr_50_0| () Int)
|
|
||||||
(declare-fun |expr_51_1| () Int)
|
|
||||||
|
|
||||||
(assert (and (and (and true true) (and (=> (and true true) (and (>= expr_17_0 0) (<= expr_17_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_17_0 x_8_0) (and (=> (and true true) expr_14_1) (and (= expr_14_1 (>= expr_12_0 expr_13_0)) (and (=> (and true true) true) (and (= expr_13_0 0) (and (=> (and true true) (and (>= expr_12_0 0) (<= expr_12_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_12_0 x_8_0) (and (and (>= x_8_0 0) (<= x_8_0 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (and (>= a_6_0 0) (<= a_6_0 1461501637330902918203684832716283019655932542975)) (and (>= (|uint_array_tuple_accessor_length| arr_4_length_pair_1) 0) (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 1917212865)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 114)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 70)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 88)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 193)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) true))))))))))))) (< (- expr_17_0 1) 0)))
|
|
||||||
(declare-const |EVALEXPR_0| Int)
|
|
||||||
(assert (= |EVALEXPR_0| a_6_0))
|
|
||||||
(declare-const |EVALEXPR_1| Int)
|
|
||||||
(assert (= |EVALEXPR_1| x_8_0))
|
|
||||||
(declare-const |EVALEXPR_2| Int)
|
|
||||||
(assert (= |EVALEXPR_2| (- expr_17_0 1)))
|
|
||||||
(check-sat)
|
|
||||||
(get-value (|EVALEXPR_0| |EVALEXPR_1| |EVALEXPR_2| ))
|
|
||||||
"}},"errors":[{"component":"general","errorCode":"6838","formattedMessage":"Warning: BMC: Condition is always true.
|
"}},"errors":[{"component":"general","errorCode":"6838","formattedMessage":"Warning: BMC: Condition is always true.
|
||||||
--> A:7:15:
|
--> A:7:15:
|
||||||
|
|
|
|
||||||
@ -336,41 +222,7 @@
|
|||||||
| \t\t\t\t\t\t ^^^^^^
|
| \t\t\t\t\t\t ^^^^^^
|
||||||
Note: Callstack:
|
Note: Callstack:
|
||||||
|
|
||||||
","message":"BMC: Condition is always true.","secondarySourceLocations":[{"message":"Callstack:"}],"severity":"warning","sourceLocation":{"end":165,"file":"A","start":159},"type":"Warning"},{"component":"general","errorCode":"4144","formattedMessage":"Warning: BMC: Underflow (resulting value less than 0) happens here.
|
","message":"BMC: Condition is always true.","secondarySourceLocations":[{"message":"Callstack:"}],"severity":"warning","sourceLocation":{"end":165,"file":"A","start":159},"type":"Warning"},{"component":"general","errorCode":"3046","formattedMessage":"Warning: BMC: Division by zero happens here.
|
||||||
--> A:8:7:
|
|
||||||
|
|
|
||||||
8 | \t\t\t\t\t\t--x;
|
|
||||||
| \t\t\t\t\t\t^^^
|
|
||||||
Note: Counterexample:
|
|
||||||
<result> = (- 1)
|
|
||||||
a = 0
|
|
||||||
x = 0
|
|
||||||
|
|
||||||
Note: Callstack:
|
|
||||||
Note:
|
|
||||||
|
|
||||||
","message":"BMC: Underflow (resulting value less than 0) happens here.","secondarySourceLocations":[{"message":"Counterexample:
|
|
||||||
<result> = (- 1)
|
|
||||||
a = 0
|
|
||||||
x = 0
|
|
||||||
"},{"message":"Callstack:"},{"message":""}],"severity":"warning","sourceLocation":{"end":177,"file":"A","start":174},"type":"Warning"},{"component":"general","errorCode":"2661","formattedMessage":"Warning: BMC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
|
||||||
--> A:9:7:
|
|
||||||
|
|
|
||||||
9 | \t\t\t\t\t\tx + type(uint).max;
|
|
||||||
| \t\t\t\t\t\t^^^^^^^^^^^^^^^^^^
|
|
||||||
Note: Counterexample:
|
|
||||||
<result> = 2**256
|
|
||||||
a = 0
|
|
||||||
x = 1
|
|
||||||
|
|
||||||
Note: Callstack:
|
|
||||||
Note:
|
|
||||||
|
|
||||||
","message":"BMC: Overflow (resulting value larger than 2**256 - 1) happens here.","secondarySourceLocations":[{"message":"Counterexample:
|
|
||||||
<result> = 2**256
|
|
||||||
a = 0
|
|
||||||
x = 1
|
|
||||||
"},{"message":"Callstack:"},{"message":""}],"severity":"warning","sourceLocation":{"end":203,"file":"A","start":185},"type":"Warning"},{"component":"general","errorCode":"3046","formattedMessage":"Warning: BMC: Division by zero happens here.
|
|
||||||
--> A:10:7:
|
--> A:10:7:
|
||||||
|
|
|
|
||||||
10 | \t\t\t\t\t\t2 / x;
|
10 | \t\t\t\t\t\t2 / x;
|
@ -1,52 +1,4 @@
|
|||||||
{"errors":[{"component":"general","errorCode":"3944","formattedMessage":"Warning: CHC: Underflow (resulting value less than 0) happens here.
|
{"errors":[{"component":"general","errorCode":"4281","formattedMessage":"Warning: CHC: Division by zero happens here.
|
||||||
Counterexample:
|
|
||||||
arr = []
|
|
||||||
a = 0
|
|
||||||
x = 0
|
|
||||||
|
|
||||||
Transaction trace:
|
|
||||||
test.constructor()
|
|
||||||
State: arr = []
|
|
||||||
test.f(0, 0)
|
|
||||||
--> A:8:7:
|
|
||||||
|
|
|
||||||
8 | \t\t\t\t\t\t--x;
|
|
||||||
| \t\t\t\t\t\t^^^
|
|
||||||
|
|
||||||
","message":"CHC: Underflow (resulting value less than 0) happens here.
|
|
||||||
Counterexample:
|
|
||||||
arr = []
|
|
||||||
a = 0
|
|
||||||
x = 0
|
|
||||||
|
|
||||||
Transaction trace:
|
|
||||||
test.constructor()
|
|
||||||
State: arr = []
|
|
||||||
test.f(0, 0)","severity":"warning","sourceLocation":{"end":177,"file":"A","start":174},"type":"Warning"},{"component":"general","errorCode":"4984","formattedMessage":"Warning: CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
|
||||||
Counterexample:
|
|
||||||
arr = []
|
|
||||||
a = 0
|
|
||||||
x = 1
|
|
||||||
|
|
||||||
Transaction trace:
|
|
||||||
test.constructor()
|
|
||||||
State: arr = []
|
|
||||||
test.f(0, 2)
|
|
||||||
--> A:9:7:
|
|
||||||
|
|
|
||||||
9 | \t\t\t\t\t\tx + type(uint).max;
|
|
||||||
| \t\t\t\t\t\t^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
","message":"CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
|
||||||
Counterexample:
|
|
||||||
arr = []
|
|
||||||
a = 0
|
|
||||||
x = 1
|
|
||||||
|
|
||||||
Transaction trace:
|
|
||||||
test.constructor()
|
|
||||||
State: arr = []
|
|
||||||
test.f(0, 2)","severity":"warning","sourceLocation":{"end":203,"file":"A","start":185},"type":"Warning"},{"component":"general","errorCode":"4281","formattedMessage":"Warning: CHC: Division by zero happens here.
|
|
||||||
Counterexample:
|
Counterexample:
|
||||||
arr = []
|
arr = []
|
||||||
a = 0
|
a = 0
|
@ -45,6 +45,10 @@ SMTCheckerTest::SMTCheckerTest(string const& _filename): SyntaxTest(_filename, E
|
|||||||
|
|
||||||
m_modelCheckerSettings.solvers &= ModelChecker::availableSolvers();
|
m_modelCheckerSettings.solvers &= ModelChecker::availableSolvers();
|
||||||
|
|
||||||
|
/// Underflow and Overflow are not enabled by default for Solidity >=0.8.7,
|
||||||
|
/// so we explicitly enable all targets for the tests.
|
||||||
|
m_modelCheckerSettings.targets = ModelCheckerTargets::All();
|
||||||
|
|
||||||
auto engine = ModelCheckerEngine::fromString(m_reader.stringSetting("SMTEngine", "all"));
|
auto engine = ModelCheckerEngine::fromString(m_reader.stringSetting("SMTEngine", "all"));
|
||||||
if (engine)
|
if (engine)
|
||||||
m_modelCheckerSettings.engine = *engine;
|
m_modelCheckerSettings.engine = *engine;
|
||||||
|
@ -43,16 +43,19 @@ public:
|
|||||||
void filterObtainedErrors() override;
|
void filterObtainedErrors() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// This contains engine and timeout.
|
/*
|
||||||
/// The engine can be set via option SMTEngine in the test.
|
Options that can be set in the test:
|
||||||
/// The possible options are `all`, `chc`, `bmc`, `none`,
|
SMTEngine: `all`, `chc`, `bmc`, `none`, where the default is `all`.
|
||||||
/// where the default is `all`.
|
Set in m_modelCheckerSettings.
|
||||||
ModelCheckerSettings m_modelCheckerSettings;
|
SMTIgnoreCex: `yes`, `no`, where the default is `no`.
|
||||||
|
Set in m_ignoreCex.
|
||||||
|
SMTShowUnproved: `yes`, `no`, where the default is `yes`.
|
||||||
|
Set in m_modelCheckerSettings.
|
||||||
|
SMTSolvers: `all`, `cvc4`, `z3`, `none`, where the default is `all`.
|
||||||
|
Set in m_modelCheckerSettings.
|
||||||
|
*/
|
||||||
|
|
||||||
/// This is set via option SMTSolvers in the test.
|
ModelCheckerSettings m_modelCheckerSettings;
|
||||||
/// The possible options are `all`, `z3`, `cvc4`, `none`,
|
|
||||||
/// where if none is given the default used option is `all`.
|
|
||||||
smtutil::SMTSolverChoice m_enabledSolvers;
|
|
||||||
|
|
||||||
bool m_ignoreCex = false;
|
bool m_ignoreCex = false;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user