From a67a8e5d8fa755332c0fecdfd098d3d20d8ca772 Mon Sep 17 00:00:00 2001 From: Mojtaba Eshghie Date: Sat, 16 Aug 2025 09:26:55 +0200 Subject: [PATCH 1/7] Feature #67: Copied the experiment files from KIWI repo to here. --- .../RQ1.py | 85 + .../analysis.ipynb | 523 +++ .../erc20.json | 154 + .../erc20_random_sample_kept_after_eval.json | 456 +++ ...rc20_random_sample_removed_after_eval.json | 535 +++ .../full_experiment.bash | 19 + .../full_experiment2.bash | 29 + .../group.py | 16 + ...4ee4d34b48594dade48651-TurexToken.inv.json | 328 ++ ...0f2a4ee4d34b48594dade48651-TurexToken.json | 347 ++ ...0b6ad5399152d8c643fae7b-PhunToken.inv.json | 293 ++ ...19c70b6ad5399152d8c643fae7b-PhunToken.json | 3503 +++++++++++++++++ ...a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json | 271 ++ ...1475a3ce49a25c48c40b85e7f7e1-TetherUS.json | 398 ++ ...f03d4c881a76340907e8-PIXIUFINANCE.inv.json | 254 ++ ...268df03d4c881a76340907e8-PIXIUFINANCE.json | 3281 +++++++++++++++ ...e20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json | 312 ++ ...4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.json | 619 +++ ...acaaa328660c2ee2499055e3b07-Token.inv.json | 194 + ...407cacaaa328660c2ee2499055e3b07-Token.json | 1161 ++++++ ...dcb93d86269629e3f2a-CloudProtocol.inv.json | 309 ++ ...9530dcb93d86269629e3f2a-CloudProtocol.json | 2469 ++++++++++++ ...713bd6ebe75d6c285236c54-DOGEVIPER.inv.json | 468 +++ ...85a9713bd6ebe75d6c285236c54-DOGEVIPER.json | 753 ++++ ...5327eb52327b06be4e472f8-KPopKorea.inv.json | 453 +++ ...c3fc5327eb52327b06be4e472f8-KPopKorea.json | 1557 ++++++++ ...7247d57e9281e2073d2b88a67a42-FXCO.inv.json | 292 ++ ...8b6f7247d57e9281e2073d2b88a67a42-FXCO.json | 992 +++++ ...05121f15a4503b6617dae7-WrappedHeC.inv.json | 219 ++ ...e01505121f15a4503b6617dae7-WrappedHeC.json | 621 +++ ...ec53533f4bbd641c1910aca-YakuzaInu.inv.json | 784 ++++ ...b923ec53533f4bbd641c1910aca-YakuzaInu.json | 580 +++ ...9725bb40647e2b32dc136806-Cogecoin.inv.json | 311 ++ ...35439725bb40647e2b32dc136806-Cogecoin.json | 614 +++ ...4374ec35bda83570c461c6d6f6079-DFV.inv.json | 369 ++ ...7a5d4374ec35bda83570c461c6d6f6079-DFV.json | 585 +++ ...da59e-TokenMintERC20MintableToken.inv.json | 393 ++ ...2564da59e-TokenMintERC20MintableToken.json | 715 ++++ ...9a3d98c807eeef0c4508bee8-YCCToken.inv.json | 249 ++ ...39c29a3d98c807eeef0c4508bee8-YCCToken.json | 3107 +++++++++++++++ ...125a6c972c-EnergyEfficientBitcoin.inv.json | 262 ++ ...754b125a6c972c-EnergyEfficientBitcoin.json | 416 ++ ...1e9f1a35021848d996afc-EmaxClassic.inv.json | 331 ++ ...4fc11e9f1a35021848d996afc-EmaxClassic.json | 395 ++ ...0542ee19e900f2db15-Keep3rV2Oracle.inv.json | 96 + ...84009ce6e1ecf419c9cb1e8af0-bVault.inv.json | 1867 +++++++++ ...b80fc07fccfba655c0a64f-SushiMaker.inv.json | 72 + ...37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json | 1124 ++++++ ...3c54409810af48ba5210-ControllerV4.inv.json | 736 ++++ ...9ca9485cbe7e71522-AnyswapV4Router.inv.json | 557 +++ ...5e3ec868087b755-KyberNetworkProxy.inv.json | 444 +++ ...e1a452bf5d7076ff804d61-UFragments.inv.json | 516 +++ ...5f1861cec6d3a6688b31a6f952-yVault.inv.json | 747 ++++ ...9836129d1ee7c3bc95df50-SushiMaker.inv.json | 163 + .../manual_evalution.py | 40 + .../output_data.json | 42 + .../parse_cluster.py | 98 + .../parser.py | 85 + .../random_sample.py | 47 + .../reader copy.py | 331 ++ .../reader.py | 351 ++ .../reduce.py | 53 + .../similarty.py | 92 + .../sok.json | 82 + .../sok.txt | 50 + .../sok_random_sample_kept_after_eval.json | 452 +++ .../sok_random_sample_removed_after_eval.json | 535 +++ 67 files changed, 38602 insertions(+) create mode 100644 use-cases/dynamically-mined-invariant-denoising/RQ1.py create mode 100644 use-cases/dynamically-mined-invariant-denoising/analysis.ipynb create mode 100644 use-cases/dynamically-mined-invariant-denoising/erc20.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/erc20_random_sample_kept_after_eval.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/erc20_random_sample_removed_after_eval.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/full_experiment.bash create mode 100644 use-cases/dynamically-mined-invariant-denoising/full_experiment2.bash create mode 100644 use-cases/dynamically-mined-invariant-denoising/group.py create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/manual_evalution.py create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_data.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/parse_cluster.py create mode 100644 use-cases/dynamically-mined-invariant-denoising/parser.py create mode 100644 use-cases/dynamically-mined-invariant-denoising/random_sample.py create mode 100644 use-cases/dynamically-mined-invariant-denoising/reader copy.py create mode 100644 use-cases/dynamically-mined-invariant-denoising/reader.py create mode 100644 use-cases/dynamically-mined-invariant-denoising/reduce.py create mode 100644 use-cases/dynamically-mined-invariant-denoising/similarty.py create mode 100644 use-cases/dynamically-mined-invariant-denoising/sok.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/sok.txt create mode 100644 use-cases/dynamically-mined-invariant-denoising/sok_random_sample_kept_after_eval.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/sok_random_sample_removed_after_eval.json diff --git a/use-cases/dynamically-mined-invariant-denoising/RQ1.py b/use-cases/dynamically-mined-invariant-denoising/RQ1.py new file mode 100644 index 0000000..9c31922 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/RQ1.py @@ -0,0 +1,85 @@ +import json +import pandas as pd +import matplotlib.pyplot as plt +import numpy as np + + +def label_selector(file_path:str): + if file_path == 'erc20': + return "ERC20" + else: + return "SoK" + + +def RQ1(file_path): + + # Load data from JSON file + with open(file_path, 'r') as f: + data = json.load(f) + + file_path = file_path.removeprefix("./") + file_path = file_path.removesuffix(".json") + # Flatten nested JSON structure + flat_data = [] + for item in data: + if isinstance(item, list): # Handle list of lists + flat_data.extend(item) + else: + flat_data.append(item) + + # Convert to DataFrame + df = pd.DataFrame(flat_data) + + # Calculate total and average times + total_parsing_time = df['total_parsing_time'].sum() + total_reduction_time = df['total_reduction_time'].sum() + average_parsing_time = df['total_parsing_time'].mean() + average_reduction_time = df['total_reduction_time'].mean() + average_reduction_ratio = round(df['reduction_ratio'].mean(),2) + predicates_removed = df["predicates_before_reduction"].sum() - df["predicates_after_reduction"].sum() + average_predicates_removed = predicates_removed / len(df) + + # Print calculated values + print(f"Total Parsing Time: {total_parsing_time}") + print(f"Total Reduction Time: {total_reduction_time}") + print(f"Average Parsing Time: {average_parsing_time}") + print(f"Average Reduction Time: {average_reduction_time}") + print(f"Average Reduction Ratio: {average_reduction_ratio}") + print(f"Average predicates removed: {average_predicates_removed}") + print(f"Total predicates removed: {predicates_removed}") + + # Generate histogram for reduction ratio with custom ticks and no grid + num_bins = 4 + counts, bins, patches = plt.hist(df['reduction_ratio'], bins=num_bins, edgecolor='black', alpha=0.8, align='mid') + + # Set the x-ticks to be at the center of each bin + bin_centers = 0.5 * (bins[1:] + bins[:-1]) + plt.xticks(bin_centers, [f"{center:.2f}" for center in bin_centers]) + + + + # Set the x-ticks to be at the center of each bin, with 0.65 instead of 0.66 + bin_centers = 0.5 * (bins[1:] + bins[:-1]) + custom_ticks = [f"{center:.2f}" for center in bin_centers] + if file_path == 'sok': + custom_ticks[0] = '0.65' # Change the first tick to 0.65 + + plt.xticks(bin_centers, custom_ticks) + + # Set labels and title + plt.xlabel('Reduction Ratio', fontsize=14) + plt.ylabel('Frequency' ,fontsize=14) + # plt.title(f'Histogram of Reduction Ratios {label_selector(file_path)} for Smart Contract', fontsize=16) + + # Turn off the grid + plt.grid(False) + + # Save and show the plot + plt.savefig(f'reduction_ratio_histogram_{file_path}.pdf', format='pdf', dpi=300) + plt.clf() + + +if __name__ == "__main__": + RQ1("./erc20.json") + # print("_______________________________________________________________") + RQ1("./sok.json") \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/analysis.ipynb b/use-cases/dynamically-mined-invariant-denoising/analysis.ipynb new file mode 100644 index 0000000..64fa454 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/analysis.ipynb @@ -0,0 +1,523 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/mojtabaeshghie/opt/anaconda3/lib/python3.8/site-packages/pandas/core/computation/expressions.py:20: UserWarning: Pandas requires version '2.7.3' or newer of 'numexpr' (version '2.7.1' currently installed).\n", + " from pandas.core.computation.check import NUMEXPR_INSTALLED\n" + ] + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "def label_selector(file_path:str):\n", + " if file_path == 'erc20':\n", + " return \"ERC20\"\n", + " else:\n", + " return \"SoK\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "ename": "JSONDecodeError", + "evalue": "Expecting value: line 1 column 1 (char 0)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[5], line 68\u001b[0m\n\u001b[1;32m 64\u001b[0m plt\u001b[38;5;241m.\u001b[39mclf()\n\u001b[1;32m 67\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;18m__name__\u001b[39m \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m__main__\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m---> 68\u001b[0m \u001b[43mRQ1\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43merc20\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;66;03m# print(\"_______________________________________________________________\")\u001b[39;00m\n\u001b[1;32m 70\u001b[0m RQ1(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msok\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "Cell \u001b[0;32mIn[5], line 5\u001b[0m, in \u001b[0;36mRQ1\u001b[0;34m(file_path)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mRQ1\u001b[39m(file_path):\n\u001b[1;32m 2\u001b[0m \n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# Load data from JSON file\u001b[39;00m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(file_path, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[0;32m----> 5\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;66;03m# Flatten nested JSON structure\u001b[39;00m\n\u001b[1;32m 8\u001b[0m flat_data \u001b[38;5;241m=\u001b[39m []\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/__init__.py:293\u001b[0m, in \u001b[0;36mload\u001b[0;34m(fp, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload\u001b[39m(fp, \u001b[38;5;241m*\u001b[39m, \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, object_hook\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, parse_float\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 275\u001b[0m parse_int\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, parse_constant\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, object_pairs_hook\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw):\n\u001b[1;32m 276\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Deserialize ``fp`` (a ``.read()``-supporting file-like object containing\u001b[39;00m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;124;03m a JSON document) to a Python object.\u001b[39;00m\n\u001b[1;32m 278\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;124;03m kwarg; otherwise ``JSONDecoder`` is used.\u001b[39;00m\n\u001b[1;32m 292\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 293\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 294\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobject_hook\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobject_hook\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 295\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_float\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_float\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparse_int\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_int\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 296\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_constant\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_constant\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobject_pairs_hook\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobject_pairs_hook\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/__init__.py:357\u001b[0m, in \u001b[0;36mloads\u001b[0;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 352\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m kw[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mencoding\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 355\u001b[0m parse_int \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m parse_float \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 356\u001b[0m parse_constant \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_pairs_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kw):\n\u001b[0;32m--> 357\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_default_decoder\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 359\u001b[0m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;241m=\u001b[39m JSONDecoder\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/decoder.py:337\u001b[0m, in \u001b[0;36mJSONDecoder.decode\u001b[0;34m(self, s, _w)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecode\u001b[39m(\u001b[38;5;28mself\u001b[39m, s, _w\u001b[38;5;241m=\u001b[39mWHITESPACE\u001b[38;5;241m.\u001b[39mmatch):\n\u001b[1;32m 333\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Return the Python representation of ``s`` (a ``str`` instance\u001b[39;00m\n\u001b[1;32m 334\u001b[0m \u001b[38;5;124;03m containing a JSON document).\u001b[39;00m\n\u001b[1;32m 335\u001b[0m \n\u001b[1;32m 336\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 337\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraw_decode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43midx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_w\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mend\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 338\u001b[0m end \u001b[38;5;241m=\u001b[39m _w(s, end)\u001b[38;5;241m.\u001b[39mend()\n\u001b[1;32m 339\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m end \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(s):\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/decoder.py:355\u001b[0m, in \u001b[0;36mJSONDecoder.raw_decode\u001b[0;34m(self, s, idx)\u001b[0m\n\u001b[1;32m 353\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscan_once(s, idx)\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m--> 355\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m JSONDecodeError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpecting value\u001b[39m\u001b[38;5;124m\"\u001b[39m, s, err\u001b[38;5;241m.\u001b[39mvalue) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28mNone\u001b[39m\n\u001b[1;32m 356\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj, end\n", + "\u001b[0;31mJSONDecodeError\u001b[0m: Expecting value: line 1 column 1 (char 0)" + ] + } + ], + "source": [ + "def RQ1(file_path):\n", + "\n", + " # Load data from JSON file\n", + " with open(file_path, 'r') as f:\n", + " data = json.load(f)\n", + "\n", + " # Flatten nested JSON structure\n", + " flat_data = []\n", + " for item in data:\n", + " if isinstance(item, list): # Handle list of lists\n", + " flat_data.extend(item)\n", + " else:\n", + " flat_data.append(item)\n", + "\n", + " # Convert to DataFrame\n", + " df = pd.DataFrame(flat_data)\n", + "\n", + " # Calculate total and average times\n", + " total_parsing_time = df['total_parsing_time'].sum()\n", + " total_reduction_time = df['total_reduction_time'].sum()\n", + " average_parsing_time = df['total_parsing_time'].mean()\n", + " average_reduction_time = df['total_reduction_time'].mean()\n", + " average_reduction_ratio = round(df['reduction_ratio'].mean(),2)\n", + " predicates_removed = df[\"predicates_before_reduction\"].sum() - df[\"predicates_after_reduction\"].sum()\n", + " average_predicates_removed = predicates_removed / len(df)\n", + "\n", + " # Print calculated values\n", + " print(f\"Total Parsing Time: {total_parsing_time}\")\n", + " print(f\"Total Reduction Time: {total_reduction_time}\")\n", + " print(f\"Average Parsing Time: {average_parsing_time}\")\n", + " print(f\"Average Reduction Time: {average_reduction_time}\")\n", + " print(f\"Average Reduction Ratio: {average_reduction_ratio}\")\n", + " print(f\"Average predicates removed: {average_predicates_removed}\")\n", + " print(f\"Total predicates removed: {predicates_removed}\")\n", + "\n", + " # Generate histogram for reduction ratio with custom ticks and no grid\n", + " num_bins = 4\n", + " counts, bins, patches = plt.hist(df['reduction_ratio'], bins=num_bins, edgecolor='black', alpha=0.8, align='mid')\n", + "\n", + " # Set the x-ticks to be at the center of each bin\n", + " bin_centers = 0.5 * (bins[1:] + bins[:-1])\n", + " plt.xticks(bin_centers, [f\"{center:.2f}\" for center in bin_centers])\n", + "\n", + "\n", + "\n", + " # Set the x-ticks to be at the center of each bin, with 0.65 instead of 0.66\n", + " bin_centers = 0.5 * (bins[1:] + bins[:-1])\n", + " custom_ticks = [f\"{center:.2f}\" for center in bin_centers]\n", + " if file_path == 'sok':\n", + " custom_ticks[0] = '0.65' # Change the first tick to 0.65\n", + "\n", + " plt.xticks(bin_centers, custom_ticks)\n", + "\n", + " # Set labels and title\n", + " plt.xlabel('Reduction Ratio', fontsize=14)\n", + " plt.ylabel('Frequency' ,fontsize=14)\n", + " # plt.title(f'Histogram of Reduction Ratios {label_selector(file_path)} for Smart Contract', fontsize=16)\n", + "\n", + " # Turn off the grid\n", + " plt.grid(False)\n", + "\n", + " # Save and show the plot\n", + " plt.savefig(f'reduction_ratio_histogram_{file_path}.pdf', format='pdf', dpi=300)\n", + " plt.clf()\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " RQ1(\"erc20\")\n", + " # print(\"_______________________________________________________________\")\n", + " RQ1(\"sok\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAJICAYAAADxUwLTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABv20lEQVR4nO3dd3yNd//H8ffJPCGI2DVqlVCbRG1CtcqtpNrSooPapUpp7rtW7VUrtWpVS5E21SFK7VbtutGKFaPUiBUrOzm/P/xybmmC65DknCSv5+Ph0eS6vuc6n3Mker3Pd5ksFotFAAAAAGCAk70LAAAAAJB1ECAAAAAAGEaAAAAAAGAYAQIAAACAYQQIAAAAAIYRIAAAAAAYRoAAAAAAYBgBAgAAAIBhBAgAQLaUU/ZJzW6vM7u9HiA7IkAAsMmhQ4f0wQcfqGnTpqpWrZpatGihYcOG6ezZs/YuLd3MmjVLFStWtHcZNtm5c6eee+45ValSRd27d0+zjSO+Ln9/f3344Yfpft3jx4+rU6dOD2yza9cuVaxYMdWfKlWqqHHjxhoyZIguX76cLvV06dJFXbp0SZdrJbt586aGDBmivXv3Zujz3E+XLl1SvXc+Pj6qVauWAgIC9N1339l8zX379qlHjx7W78+dO6eKFSsqJCQkPUsH8Jhc7F0AgKxj2bJlGjdunOrWratBgwapcOHCOnPmjBYuXKj169fr888/l4+Pj73LfGwvv/yyGjVqZO8ybDJp0iQlJSVp/vz5KlCggL3LMSwoKEienp7pft2ffvpJ+/fvN9R2+PDhevrpp63f37lzR/v27dP8+fN16tQpBQcHp3t96SEsLEzfffedXnrpJeuxESNGZGoNlStXTvGciYmJunjxopYsWaIhQ4bIy8tLTZo0MXy94OBghYeHW78vXLiwVq5cqVKlSqVr3QAeDwECgCH79u3T2LFj9frrr+s///mP9XjdunXVokULtWvXTv/+97+zxSeFRYsWVdGiRe1dhk0iIyPl6+ur+vXr27sUm1SuXNneJah8+fKqUaNGimMNGjRQXFycPvvsM504cULly5e3T3E2yuw6PT09U713ktS4cWPVq1dPISEhNgWIf3Jzc0vz+gDsiyFMAAxZuHCh8uTJo/fffz/VOW9vb3344Ydq3ry5oqKiJN39JHLZsmX617/+pWrVqqlp06aaMmWKYmNjrY/78MMP1a1bN61cuVItWrRQtWrV1LFjR506dUqbN2/Wv/71L1WvXl0vv/yywsLCUjyuS5cu+vrrr9WsWTPVrFlTb7zxho4cOZKirj179qhbt27y9fVVlSpV5O/vr1mzZikpKUnS/4ZHLF68WM8//7yqV6+ub775JtVQn7/++ku9evVS3bp1Vb16db366qvaunVriuc6dOiQunXrprp166pWrVrq1auXjh8/bj2fPFxmx44devvtt1W9enU1aNBAkydPVmJi4gPf+9OnT6t///5q0KCBatSooS5dumjfvn0pXsPff/+t1atXq2LFitq1a9cDr5csJCRElStX1oEDB/Tqq6+qatWqatasmRYuXGht89xzz6l///6pHvviiy+qd+/eku7+Xc+fP19t2rRRtWrVVKNGDXXs2FE7d+60tp81a5aeffZZBQUFyc/PTw0bNtSNGzdSDWE6d+6chgwZooYNG+rpp59WvXr1NGTIEF2/ft3axt/fXzNnztTEiRNVv359VatWTd26ddPp06etzxUUFCRJqlixombNmmXo/finvHnzSpJMJpP12LFjx9SzZ0/VqlVLtWrVUt++fVMN3zt//rz69eun2rVrq0GDBlq8eHGqa6dVV1pDzLZu3aqOHTuqRo0aatiwoYYPH66bN29q165d6tq1qySpa9eu1mFL/xzCFBsbq08//VTPP/+8qlatqpYtW2r+/PnW34Hkx/znP//R/Pnz1bRpU1WtWlUdO3bUwYMHH+VtkyS5u7vLzc0txXt37do1jRo1Ss2aNVOVKlXk5+envn376ty5c5Lu/l5/++23+vvvv63DltIawvSg34dkP/74o9q2batq1arpmWee0eDBg3Xp0qVHfj0AUiJAAHgoi8WiX3/9VfXq1ZOHh0eabV544QX17dtXuXLlknR3WMj48ePVokULzZkzR6+//rq+/PJL9enTJ8Ukyf379+vLL7/Uhx9+qPHjxys8PFw9evTQ+PHj1bNnT33yySe6cOGCBg8enOL5wsLCNG3aNPXr10+TJ0/W9evX1blzZ0VEREiSjhw5ojfffFNeXl6aNm2a5syZozp16igoKEhr165Nca1Zs2bpnXfe0aRJk9SgQYMU55KSktSzZ09FR0dr0qRJmj17try8vNS7d2+dOXNG0t35B8nj7ceNG6cxY8bowoUL6tixY4rhGJI0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dUtbtmx57Nfq6+urzZs3p5jEnJiYqDVr1qhq1arWYUQZKXk41saNG7Vu3Tq1bdvWOqzm5MmTioyMVNeuXVW+fHnrJ9fbtm2TZFuPwL59+5Q3b151797d+sl18p4MtvYsJNfxKFxcXDRy5EglJCRozJgx1uN+fn46ceKEKlWqpKpVq6pq1aqqUqWKlixZop9//lnS3Tkb586d06FDh6yPu3btmv773/+meA5PT89UqwL9/vvv1q9z586tSpUqWYeCJdu2bZt69OihiIiIVD0L/+Tn56eEhAT99NNPKY5///33kpQuv4dpef7559WoUSP9+OOP1uGM+/fvV1JSkt59911r72FiYqJ16Ffy3+/D/t6M/D5MnDhRL730kiwWizw8PNSsWTPrBPsH9aICMI4hTAAMqVGjhgYMGKDp06crPDxc7dq1U/78+XX8+HEtXLhQsbGx1nBRvnx5tW/fXjNnzlR0dLR8fX0VFhamoKAg1a1bN102aUteYWbgwIFydnZWUFCQ8uXLZx2iUK1aNa1du1ZfffWVypUrpyNHjmjOnDkymUwPHdd9r8qVK8tsNmvIkCF69913VbBgQf32228KCwuzLqM5aNAgdevWTT169NBrr72m+Ph4zZ8/X3FxcdYJ04+qX79+2rZtm7p27aoePXrI1dVVX375pc6ePasFCxY81rVt0bZtW/Xv31+JiYnWlXWku8N/PD09NXfuXLm4uMjFxUXr1q3T119/LenhY+jvVa1aNX311VeaMGGCmjVrpoiICC1cuFBXrlxJtWLTwyTPlfnxxx9VvXp166Rso2rWrKm2bdvqu+++09q1a9WqVSv16dNHHTt2VM+ePdWpUye5u7tr5cqV2rBhg2bOnCnp7nCvpUuXql+/fho4cKA8PT01Z86cVAGoadOmWrNmjapXr64nn3xSISEh1lW9kvXv31+9e/fW+++/r3bt2unKlSv65JNP1KJFC1WoUEFHjx6VJG3ZskX58uVLtYlj48aNVbduXX300Ue6dOmSfHx8tHv3bn322Wdq3759hu4Z8e9//1tt27bVmDFj9O2336patWqSpI8//lgvvfSSbty4oWXLllmXXo6KipKnp6fy5s2rK1euaOvWrWnOlzHy+/DMM89o8eLF+vDDD9W2bVvFx8drwYIF8vLy0jPPPJNhrxnISeiBAGBY7969NX/+fEl3lyvt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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load data from JSON files\n", + "with open('erc20.json', 'r') as f:\n", + " erc20_data = json.load(f)\n", + "with open('sok.json', 'r') as f:\n", + " sok_data = json.load(f)\n", + "\n", + "# Convert JSON data into DataFrames and add a column to indicate the dataset source\n", + "erc20_df = pd.DataFrame(erc20_data)\n", + "erc20_df['Dataset'] = 'ERC20'\n", + "sok_df = pd.DataFrame(sok_data)\n", + "sok_df['Dataset'] = 'SoK'\n", + "\n", + "# Combine the two DataFrames into one\n", + "df = pd.concat([erc20_df, sok_df], ignore_index=True)\n", + "\n", + "# Set up the plot aesthetics\n", + "sns.set(style=\"whitegrid\")\n", + "plt.figure(figsize=(8, 6))\n", + "\n", + "# Create a boxplot to show distribution and a swarmplot for individual points\n", + "ax = sns.boxplot(x='Dataset', y='reduction_ratio', data=df, width=0.5, palette=\"Set2\")\n", + "sns.swarmplot(x='Dataset', y='reduction_ratio', data=df, color='0.25', size=8)\n", + "\n", + "# Set y-axis limits and labels\n", + "plt.ylim(0.5, 1.05)\n", + "plt.ylabel(\"Reduction Ratio (After / Before)\")\n", + "plt.title(\"Comparison of Invariant Reduction Ratios\")\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig(\"combined_reduction_ratios.png\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAJICAYAAADxUwLTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACQmklEQVR4nOzdd3wT9R8G8OfSpnsPuqDQAqWMtswCsspG9hAFlSVIZQgyZAqCgAMQkaGAgICAyFAUUdnjJxssu2VTKC3deyVN7vdHSSC0haRNm5Q+79erL+3d5fJJSNt77rsEURRFEBERERERaUFi6AKIiIiIiKj8YIAgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFEVAFUlDVDK8rrNCS+x0TEAEFUAleuXMHHH3+MkJAQBAYGokOHDpg1axYePnxo6NL0Zvny5ahVq5ahy9DJ6dOn0blzZ9SrVw8jRowo9BhjfF3t2rXDtGnT9H7eW7duYeDAgS885syZM6hVq1aBr3r16qF169aYMmUK4uPj9VLPoEGDMGjQIL2cSyUtLQ1TpkzB+fPnS/V5Xmb9+vWYPHkygMLfU39/fzRs2BADBgzA4cOHy7Q2fdDms1TWVD/Lz3/Vr18fnTt3xjfffIO8vDxDl1kmoqKiUKtWLfz6668AgLt376Jdu3ZIS0szcGX0qjE1dAFE5dWWLVvw+eefo2nTppg0aRIqVaqEyMhIrFu3Dvv378fGjRvh7+9v6DJLrH///mjVqpWhy9DJwoULoVQqsWbNGjg7Oxu6HK2tWLECNjY2ej/vP//8g7CwMK2OnT17NurWrav+PjMzExcuXMCaNWtw79497NixQ+/16UN4eDh+//139OvXT73t008/LdMa7ty5g9WrV+OPP/7Q2P7seyqKIlJTU7F+/XqMHj0aq1evRps2bcq0zpLQ5bNU1n755ReN75OTk/Hnn39i1apVyMvLw8cff2ygygzH19cX7du3x/z587Fw4UJDl0OvEAYIomK4cOECFixYgHfeeQczZ85Ub2/atCk6dOiA3r17Y8aMGeq7QOWZu7s73N3dDV2GTlJSUtCkSRO89tprhi5FJ3Xq1DF0CahRowbq16+vsa1FixaQyWT44YcfcPv2bdSoUcMwxemorOtctGgRunfvDjc3twJ1PP+eNm7cGCEhIdi0aVO5ChDG7Pn3GADatm2LqKgo/PrrrxUyQADAyJEjERISgiFDhmjcHCAqCXZhIiqGdevWwdbWFhMnTiywz8nJCdOmTUP79u2RlZUFAFAoFNiyZQt69OiBwMBAhISEYPHixcjNzVU/btq0aRg+fDh++eUXdOjQAYGBgRgwYADu3buHI0eOoEePHggKCkL//v0RHh6u8bhBgwZh586daNu2LRo0aIAhQ4YgIiJCo65z585h+PDhaNKkCerVq4d27dph+fLlUCqVAJ42ff/444/o0qULgoKCsGvXrgJdfR48eIAPPvgATZs2RVBQEN566y0cO3ZM47muXLmC4cOHo2nTpmjYsCE++OAD3Lp1S71f1bXj1KlTeO+99xAUFIQWLVpg0aJFUCgUL3zv79+/j3HjxqFFixaoX78+Bg0ahAsXLmi8hkePHmH37t2oVasWzpw588Lzqfz666+oU6cOLl26hLfeegsBAQFo27Yt1q1bpz6mc+fOGDduXIHH9urVC6NGjQKQ/2+9Zs0adO/eHYGBgahfvz4GDBiA06dPq49fvnw5OnbsiBUrViA4OBgtW7ZEampqgS5MUVFRmDJlClq2bIm6deuiefPmmDJlCpKTk9XHtGvXDsuWLcNXX32F1157DYGBgRg+fDju37+vfq4VK1YAAGrVqoXly5dr9X48z87ODgAgCIJ6282bNxEaGoqGDRuiYcOGGDNmTIHue9HR0Rg7diwaNWqEFi1a4Mcffyxw7sLqKqyL2bFjxzBgwADUr18fLVu2xOzZs5GWloYzZ85g8ODBAIDBgweruy0934UpNzcXK1euRJcuXRAQEIBOnTphzZo16p8B1WNmzpyJNWvWICQkBAEBARgwYAAuX778wvfn5s2bOHr0KLp37/7C41RsbGzg4+OD6Oho9baUlBTMnj0br732GgICAvDmm2/i1KlTBd6rFStWoG/fvggMDFT/2969exdjx45FcHAwmjRpgtDQUNy5c0fjtS9cuBBt2rRBvXr10KNHD/z1118a5y7uZykpKQlz585F27ZtUa9ePQQHB2PMmDGIiorSOP+6devQvn179e+2w4cPF/gZ1eYzpSsbGxuNzy0AHDx4EH379kVAQABatGiB+fPnq39fq15rly5dcODAAXTv3h0BAQHo1asXwsLCcPHiRfTv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IiIiIio5g3dhio2NxaeffoozZ84UWDBl+/btkEql+Oyzz2Bqaorq1asjMjISa9asQb9+/SCTybB+/XpMnjwZISEhAIBvvvkGrVq1wv79+9G9e/eyf0FERERERK8wg7dAXLt2DVKpFH/88UeB1UTPnz+P4OBgjRUomzVrhvv37yMhIQERERHIzMzUWE3Xzs4OderUwblz58rsNRARERERVRQGb4Fo164d2rVrV+i+x48fF5g3uVKlSgCAmJgY9cqKz04LpzpGtU9XYWFhEEXxhYv2EBERERG9SuRyOQRBQIMGDV56rMEDxIvk5OTAzMxMY5u5uTkAIDc3V72qa2HHpKamFus5RVGEKIocQ0FEREREVAijDhAWFhYFLuRzc3MB5K9cqVpRUSaTaayumJubC0tLy2I9p1QqhSiKqFGjRjGrJiIiIiIqX27fvg1BELQ61qgDhLu7O+Li4jS2qb53c3NDXl6eepu3t7fGMbVq1Sr28wqCACsrq2I/noiIiIioPNE2PABGMIj6RZo0aYILFy5AoVCot50+fRo+Pj5wdnaGv78/bGxscObMGfX+tLQ0XL9+HU2aNDFEyURERERErzSjDhD9+vVDRkYGZs6cidu3b+PXX3/Fhg0b1CtXmpmZ4d1338XixYtx6NAhREREYMKECXB3d0enTp0MXD0RERER0avHqLswOTs7Y+3atViwYAH69OkDV1dXTJkyBX369FEfM27cOOTl5eGTTz5BTk4OmjRpgnXr1nEWJSIiIiKiUiCIoigaughjcuXKFQBAQECAgSshIiIiIiobulwDG3UXJiIiIiIiMi4MEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtlYsAkZeXh2+//RZt27ZFgwYN8M477+DixYvq/eHh4Xj33XdRv359tGvXDps2bTJcsUREREREr7ByESC+//577NixA/PmzcPu3bvh4+ODESNGIC4uDsnJyRg2bBi8vb2xa9cujBkzBosXL8auXbsMXTYRERER0SvH1NAFaOPgwYPo3r07WrZsCQCYNm0aduzYgYsXL+LevXuQSqX47LPPYGpqiurVqyMyMhJr1qxBv379DFw5EREREdGrpVy0QDg7O+PIkSOIioqCQqHAL7/8AjMzM/j7++P8+fMIDg6GqenTLNSsWTPcv38fCQkJBqyaiIiIiOjVUy5aIGbOnInx48ejffv2MDExgUQiwfLly+Ht7Y3Hjx/Dz89P4/hKlSoBAGJiYuDi4mKIkomIiIiIXknlIkDcvn0btra2WLlyJdzc3LBjxw5MnjwZmzdvRk5ODszMzDSONzc3BwDk5uYW6/lEUURWVlaJ6yYiIiIiKg9EUYQgCFoda/QBIiYmBpMmTcKGDRvQuHFjAEBAQABu376N5cuXw8LCAjKZTOMxquBgZWVV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FSB+//13fP3114iPj4cgCNixYweWL18OqVSKr7/+GmZmZvquk4iIiIiIjIDOszD99ddfmDp1Kpo1a4YlS5ZAqVQCADp27Ihjx47hu+++03uRRERERERkHHRugVi1ahUGDBiAOXPmQKFQqLf369cPSUlJ2L59Oz766CN91khEREREREZC5xaIe/fuoWPHjoXuCwoKQmxsbImLIiIiIiIi46RzgHB2dsadO3cK3Xfnzh04OzuXuCgiIiIiIjJOOgeIrl27YtmyZfjnn38gk8kAAIIg4OrVq/juu+/QpUsXvRdJRERERETGQecxEB999BFu3ryJjz76CBJJfv4YNGgQsrKy0LhxY4wfP17vRRIRERERkXHQOUCYmZlh7dq1OHHiBE6fPo2UlBTY2toiODgYbdq0gSAIpVEnEREREREZAZ0DxMGDBxESEoIWLVqgRYsWpVETEREREREZKZ0DxNixY+Hg4ICuXbuiV69eCAoKKo26iIiIiIjICOk8iPq3335Dv379cPToUQwYMACdO3fGypUr8fDhw9Koj4iIiIiIjIggiqJY3AdfuHABe/fuxb59+5CUlIT69eujV69eGDBggD5rLFNXrlwBAAQEBBi4EiIiIiKisqHLNXCJAoRKRkYGli5dip9//hlKpRLh4eElPaXBMEAQERERUUWjyzWwzmMgVGQyGY4cOYK9e/fi2LFjUCqVaNu2LXr16lXcUxIRERERkZHTOUAcO3YMe/fuxaFDh5CZmYn69etj2rRp6Nq1K+zt7UujRiIiIiIiMhI6B4jQ0FB4e3tj2LBh6NmzJ7y9vUujLiIiIiIiMkI6B4iff/4ZDRo0KI1aiIiIiIjIyOkcIBo0aACZTIZdu3bh7NmzSEtLg6OjIxo3bozevXvDwsKiNOokIiIiIiIjoHOASEtLw+DBgxEREQFPT0+4urri3r17+PPPP7FlyxZs3boVtra2pVErEREREREZmM4LyX399dd4/PgxNm/ejMOHD+OXX37B4cOHsXnzZiQmJuLbb78tjTqJiIiIiMgI6BwgDh06hI8++giNGzfW2N64cWOMGzcO+/fv11txRERERERkXHQOEJmZmahSpUqh+6pUqYKUlJSS1kREREREREZK5wDh6+uLI0eOFLrvyJEjqFq1aomLIiIiIiIi46TzIOrhw4dj0qRJUCgU6NatG1xcXJCQkIA///wT27dvx6effloadRIRERERkRHQOUB07doV9+/fx6pVq7Bt2zYAgCiKMDMzw+jRo/HWW2/pvUgiIiIiIjIOgiiKYnEemJaWhrCwMKSlpcHe3h5BQUGwt7fXd31l7sqVKwCAgIAAA1dCRERERFQ2dLkG1rkFQsXOzg5t2rQp7sOJiIiIiKgc0jlAREdH47PPPsN///2H9PT0AvsFQcD169f1UhwRERERERkXnQPEzJkzcfHiRfTr1w8ODg6lUBIRERERERkrnQPExYsXMX/+fHTr1q006iEiIiIiIiOm8zoQrq6usLS0LI1aiIiIiIjIyOkcIEJDQ7F8+XI8evSoNOohIiIiIiIjpnMXppCQEKxduxYdOnSAo6NjgdYIQRBw8OBBvRVIRERERETGQ+cAMX36dDx8+BAtW7aEi4tLadRERERERERGSucAcfbsWXz66afo379/adRDRERERERGTOcxEHZ2dvDw8CiNWoiIiIiIyMjpHCAGDhyINWvWICMjozTqISIiIiIiI6ZzF6aYmBhcu3YNLVu2hK+vL2xsbDT2C4KAjRs36q1AIiIiIiIyHjoHiHv37qFOnTrq70VR1Nj//PdERERERPTq0DlA/PTTT6VRBxERERERlQM6BwiV1NRUnD9/HnFxcejcuTNSUlLg4+MDQRD0WR8RERERERmRYgWI77//HqtXr0ZOTg4EQUBgYCCWLl2K5ORkrF+/HnZ2dvquk4iIiIiIjIDOszBt3rwZy5cvx7Bhw7B9+3b1mId3330XDx8+xLfffqv3IomIiIiIyDjoHCB++uknjBw5EuPHj0fdunXV29u0aYOPPvoIhw8f1muBRERERERkPHQOENHR0QgODi50n6+vLxISEkpcFBERERERGSedA4SHhwfCwsIK3Xf16lWuUk1ERERE9ArTOUC88cYbWLVqFdatW4f79+8DALKysrBv3z6sXr0affr00XeNAIDdu3eja9euCAgIQLdu3fD333+r90VFRSE0NBQNGzZEy5YtsXTpUigUilKpg4iIiIioItN5Fqb3338fUVFRWLx4MRYvXgwAGDx4MACgR48eCA0N1W+FAH7//XfMnDkTM2bMQKtWrbB3715MnDgR7u7uqFevHoYPH45q1aph27ZtePDgAWbOnAmJRIJx48bpvRYiIiIioopMEIu5dPT9+/dx+vRppKSkwNbW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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load JSON data\n", + "with open('erc20.json', 'r') as f:\n", + " erc20_data = json.load(f)\n", + "with open('sok.json', 'r') as f:\n", + " sok_data = json.load(f)\n", + "\n", + "# Convert to DataFrame and label\n", + "erc20_df = pd.DataFrame(erc20_data)\n", + "erc20_df['Dataset'] = 'ERC20'\n", + "\n", + "sok_df = pd.DataFrame(sok_data)\n", + "sok_df['Dataset'] = 'SoK'\n", + "\n", + "# Combine into a single DataFrame\n", + "df = pd.concat([erc20_df, sok_df], ignore_index=True)\n", + "\n", + "# Compute percentage of invariants removed\n", + "# If reduction_ratio = (predicates_after / predicates_before),\n", + "# then the fraction removed is 1 - reduction_ratio,\n", + "# multiplied by 100 for percentage.\n", + "df['percentage_removed'] = (1 - df['reduction_ratio']) * 100\n", + "\n", + "# Plot setup\n", + "sns.set(style=\"whitegrid\")\n", + "plt.figure(figsize=(8, 6))\n", + "\n", + "# Create a violin plot for distribution + strip plot for individual data points\n", + "sns.violinplot(x='Dataset', y='percentage_removed', data=df, palette=\"Set2\", cut=0)\n", + "sns.stripplot(x='Dataset', y='percentage_removed', data=df, color='0.3', size=6)\n", + "\n", + "# Labeling and styling\n", + "plt.ylim(0, 100) # percentage from 0% to 100%\n", + "plt.ylabel(\"Percentage of Invariants Removed (%)\")\n", + "plt.title(\"Comparison of Invariant Reduction (Percentage Removed)\")\n", + "plt.tight_layout()\n", + "\n", + "# Save or show\n", + "plt.savefig(\"percentage_removed_comparison.png\", dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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9wMAd9FzA1xd06ZNXZ0Qnnb48GG3zy1WuNmzZ4/ef/99bd68WefOnVPLli01efJk3X777W69/ty5c9qxY4duvfVW17waPz8/NWrUSImJiXI6nUpMTMz1mpyvw8LCTNdts9mKFY4AlE9+fqamKQLlRnBwsIKCgkrk2u4OSUkmw83s2bO1efNmnT59WrVr19agQYPUr18/19o07kpKStLEiRO1bNky11NXmZmZOnjwoMLDw1WjRg29/fbbysrKkt1ulyTt3LlT9evXV/Xq1c2UDgAALM5UuFm3bp1uvfVW3XHHHerUqZPpmzdp0kTdunXTtGnTNG3aNFWuXFlLlixRSkqK7r//fgUGBmrZsmV66qmnNGLECO3fv18rVqxQVFSU6XsCAABrMxVuPv/8c7cn9RRm/vz5mjdvniZMmKBffvlFHTp00KpVq3TNNddIkpYtW6bp06drwIABqlmzph5//HENGDDAI/cGAADWYyrcBAQE6NixY3rppZf0xRdfKCUlRVWrVlWHDh00ZsyYIk3WrVSpkqZOnaqpU6fm296mTRutXbvWTJkAAKAcMhVuDh8+rCFDhshut7vmxpw5c0affPKJtm7dqnfeeafI828AAAA8wVS4mTt3rurWras333xTlSpVch3/5ZdfdN9992nBggWKjo72WJEAAADuMvVc45dffqmHH344V7CRrgwxjRw5Ul9++aVHigMAACgqU+HG39+/wEV6AgIC8iy8BwAAUFpMhZvWrVtr9erVMgwj13HDMLRq1Sq1atXKI8UBAAAUlak5N48++qiGDh2qfv36qXfv3qpZs6bOnDmjzZs369ixY3r99dc9XScAAIBbTIWb1q1ba9myZZo3b56io6NdO3W2atVKr776qjp27OjpOgEAANxiem+pLl266J133tGlS5eUkpKi0NBQBQcHe7I2AACAIjMdbjIyMnT06FH98ssv+bbTewMAALzBVLjZsWOH/va3v+n8+fOuIanf/zsuLs7TtQIAABTKVLiZMWOGqlWrpqlTp6pKlSoeLgkAAMA8U+HmxIkTWrRokW688UZP1wMAAFAspta5adq0qU6fPu3pWgAAAIrNVM/Nk08+qUmTJslut6tNmzb5PiV1zTXXFLs4AACAoirW01JPPvlkge1MKAYAeMKZ1Ax9evKCklIzVCMkQDfVrayaIQHeLgs+zFS4mTp1qvz9/TVx4kTVqFHD0zUBACBJ2n7ygt44cFrZv9nt54OjZzWsVW3dWLey9wqDTzMVbo4ePaqXXnpJN998s4fLAQCUF4X1yJxJzcgTbCQpy5BWHjitJtWC6cFBvkyFm3r16ik1NdXTtQAAygl3emQ+PXkhT7DJkWVcab+zSc1SqBZljamnpR599FEtWLBA27dv18WLFz1dEwDAwgrrkTmTmiFJSvrvvwuSlJpZUiWijDPVczNv3jwlJSVpxIgR+bbbbDYdPHiwWIUBAKzJ3R6ZGoUMOdUIcZRAdbACU+Hmz3/+s6frAACUE+72yNxUt7I+OHpWWfkEIbvtSjuQH1PhZty4cZ6uAwBQTrjbI1MzJEDDWtXWygOncwUcu026r3VtJhOjQKbXuZGkbdu26fPPP9eZM2c0YcIExcXFqWXLlqpTp46n6gMAWExRemRurFtZTaoF//epqkzVCHGwzg0KZSrcXLp0SWPHjtXnn3+uihUr6uLFi3rwwQe1Zs0aHTx4UG+99ZYaN27s6VoBABZQ1B6ZmiEBPBWFIjH1tNT8+fP17bffasWKFdq5c6cM48r/nbNmzVJYWJhefPFFjxYJALCWG+tW1rRuDXRbw+rqVDtUtzWsrmndGuiPdZhHg+Iz1XPz73//WxMnTlSXLl2UlZXlOl6rVi2NHj1azz77rMcKBABYEz0yKCmmem5SUlIKnFdTuXJlFvgDAABeYyrcNG7cWDExMfm2ffzxx8y3AQAAXmNqWGr06NEaN26ckpOTdcstt8hms+nLL7/U+vXr9fbbb2vevHmerhMAAMAtpsJNz549NWfOHM2bN0/btm2TJM2cOVPVq1fX1KlT1bt3b48WCQAA4C5T4ebIkSPq27ev+vbtq6NHjyo5OVmhoaFq0KCB/PxMjXQBAAB4hKkkcvfdd2vjxo2SpAYNGqh9+/Zq1KgRwQYAAHidqTTicDhUtWpVT9cCAABQbKaGpR599FHNnj1bv/zyi5o1a6aQkJA851xzzTXFLg4AAKCoTIWbqVOnKisrS4899liB58TFxZkuCgAAwCxT4WbatGmergMAAMAjTIWbAQMGuHWeYRh68sknNX78eIapAABAqSjRx5uys7O1ceNGnT9/viRvAwAA4FLiz27n7BgOAABQGliYBgAAWIqpOTcAUN5lZGV7uwTAJ/ji3wXCDQC46bfD7E/vivdiJYBv8pWpKAxLAQAAS6HnBgDcZLPZXH9+rrNTAXZ+PwQysrJdPZm//TviTSUebnzljQKAJwXY/RRIuAF8Eo+CAwAASylWz82RI0e0fft2JSYmKjIyUj/99JOaNWumihUrSpLsdrsOHTrkkUIBAADcYSrcZGdn65lnntF7770nwzBks9nUp08fLVq0SCdOnNBbb70lp9Pp6VoBAAAKZWpYatGiRYqJidG0adO0fft219DTY489puzsbC1YsMCjRQIAALjLVLh577339Mgjj2jgwIGqUqWK63jz5s31yCOPaPv27Z6qDwAAoEhMhZukpCQ1b94837awsDClpKQUqygAAACzTIWbevXqadu2bfm2ffHFF6pXr16xigIAADDL1ITi++67T88884wyMzN1yy23yGaz6fjx49q1a5eWL1+uv//9756uEwAAwC2mws3gwYN17tw5LV68WGvWrJFhGJo4caIcDodGjBihoUOHerpOAAAAt5he52bUqFG65557tHfvXl24cEGhoaFq27ZtrgnGAAAApa1Yi/hVrFhR3bp181QtAAAAxWYq3ISHhxe4Z5Sfn59CQkJUr149RUZGqmPHjsUqEAAAoChMPS3Vt29fnTlzRqmpqerUqZNuu+02de7cWenp6Tp16pSuu+46nT59Wvfdd5927Njh6ZoBAAAKZKrnJjk5WS1atNBrr72mChUquI6npaVp1KhRqlmzpl588UU9+eSTWrRokbp27eqxggEAAK7GVM/N5s2bNXLkyFzBRpKCgoJ0//33KyYmRpJ022236eDBg8WvEgAAwE2mJxRfvHgx3+O//PKLLl++fOXi/v4Fzs0BAJRvZ1Iz9OnJC0pKzVCNkADdVLeyaoYEeLssWICpcPPHP/5R8+fPV6NGjXJtw3Do0CG98MILuvHGGyVJsbGxatiwoWcqBQBYxvaTF/TGgdPKNv537IOjZzWsVW3dWLey9wqDJZgalnryyScVFBSkO++8U7169dKQIUMUERGhAQMGKDg4WE899ZQ+/PBDrV69Wg8++OBVr5WcnKxnnnlG3bp1U/v27TV06FDt3r3b1b5jxw7deeedatu2rXr37q1//etfZkoGAPiIM6kZeYKNJGUZ0soDp3UmNcM7hcEyTPXc1KxZU//4xz+0adMm7dq1S+fOnVPDhg01duxY9e3bV3a7XQ0aNNDatWvVpk2b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erWn6wQAWETNkADd2aSmt8uAhZkalmrSpIneffddde7cWbt27ZLdbtfnn3+ua6+9Vm+//baaN2/u6ToBAADcYqrnRpLq16+v2bNny263S5IuXbqky5cvq1KlSh4rDgAAoKhM9dxkZmZqypQp+stf/uI6tm/fPnXt2lWzZs1Sdna2xwoEAAAoClPhZuHChdq0aZP+/Oc/u461aNFCkyZN0rp167Rs2TKPFQgAAFAUpoalYmJiNHnyZA0ZMsR1rEqVKrr//vvl7++vlStXauTIkR4rEgAAwF2mem7Onz+vP/zhD/m2NWjQQPHx8cUqCgAAwCxT4aZBgwb64IMP8m37+OOPVa9evWIVBQAAYJapYalhw4bp73//u5KTk9WzZ09Vr15d586d0yeffKJ///vfev755z1dJwAAgFtMhZv+/fvr4sWLWrRokT788EPX8apVq+rpp59W//79PVUfAABAkZgKN0eOHNE999yju+++W8eOHVNycrJCQ0PVoEED+fmZ3q4KAACg2EwlkbvvvlsbN26UzWZTgwYN1L59ezVq1IhgAwAAvM5UGnE4HKpataqnawEAACg2U8NSjz76qGbPnq1ffvlFzZo1U0hISJ5zrrnmmmIXBwAAUFSmws3UqVOVlZWlxx57rMBz4uLiTBcFAABglqlwM23aNE/XAQAA4BGmws2AAQM8XQcAAIBHmAo3kpSRkaF3331Xn3/+uc6cOaMZM2boiy++UMuWLdWmTRtP1ggAAOA2U09LnTt3TgMHDtT06dN1/Phx7d+/X2lpadq6dasiIyO1b98+T9cJAADgFlPhZvbs2bp48aLef/99bdiwQYZhSJJeeukltW7dWi+99JJHiwQAAHCXqXDzySef6NFHH1W9evVks9lcxwMDA/XAAw/o22+/9ViBAAAARWEq3KSnp6tKlSr5ttntdmVmZhanJgAAANNMhZvWrVtr9erV+bbFxMSoVatWxSoKAADALNMrFN9///2644471L17d9lsNv3zn//UwoUL9dlnn2nZsmWerhMAAMAtpnpuOnTooNdff10hISFatmyZDMPQihUrdObMGS1ZskRdunTxdJ0AAABuMb3OTceOHTVmzBh99tlnunTpkkJCQtSjRw917NjRk/UBAAAUialwc+HCBY0aNUpff/217Ha7qlSpouTkZL3xxhvq1q2bFi5cqICAAE/X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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.boxplot(x='Dataset', y='percentage_removed', data=df, palette=\"Set2\")\n", + "sns.stripplot(x='Dataset', y='percentage_removed', data=df, color='0.3', size=6)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# 1. Load data\n", + "with open('erc20.json', 'r') as f:\n", + " erc20_data = json.load(f)\n", + "with open('sok.json', 'r') as f:\n", + " sok_data = json.load(f)\n", + "\n", + "# 2. Convert to DataFrame and label\n", + "erc20_df = pd.DataFrame(erc20_data)\n", + "erc20_df['Dataset'] = 'ERC20'\n", + "\n", + "sok_df = pd.DataFrame(sok_data)\n", + "sok_df['Dataset'] = 'SoK'\n", + "\n", + "# 3. Combine into a single DataFrame\n", + "df = pd.concat([erc20_df, sok_df], ignore_index=True)\n", + "\n", + "# 4. Calculate percentage of invariants removed\n", + "df['percentage_removed'] = (1 - df['reduction_ratio']) * 100\n", + "\n", + "# 5. Prepare for plotting\n", + "sns.set_style(\"white\") # no grid lines\n", + "plt.figure(figsize=(3.4, 2.4)) # adjust for double-column width (~3.4 inches)\n", + "\n", + "# 6. Plot a simple box plot\n", + "sns.boxplot(\n", + " x='Dataset',\n", + " y='percentage_removed',\n", + " data=df,\n", + " palette=\"Set2\",\n", + " width=0.5\n", + ")\n", + "\n", + "# 7. Remove top/right spines and finalize styling\n", + "sns.despine() \n", + "plt.ylim(0, 100)\n", + "plt.xlabel(\"\") # remove or keep as desired\n", + "plt.ylabel(\"Invariants Removed (%)\")\n", + "plt.tight_layout()\n", + "\n", + "# 8. Save or display\n", + "plt.savefig(\"boxplot_invariants_removed.png\", dpi=300)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# 1. Load JSON data\n", + "with open('erc20.json', 'r') as f:\n", + " erc20_data = json.load(f)\n", + "with open('sok.json', 'r') as f:\n", + " sok_data = json.load(f)\n", + "\n", + "# 2. Convert to DataFrame and label each row with its dataset\n", + "erc20_df = pd.DataFrame(erc20_data)\n", + "erc20_df['Dataset'] = 'ERC20'\n", + "sok_df = pd.DataFrame(sok_data)\n", + "sok_df['Dataset'] = 'SoK'\n", + "\n", + "# 3. Combine into a single DataFrame\n", + "df = pd.concat([erc20_df, sok_df], ignore_index=True)\n", + "\n", + "# 4. Calculate percentage of invariants removed\n", + "df['percentage_removed'] = (1 - df['reduction_ratio']) * 100\n", + "\n", + "# 5. Set styles for small figure and minimal clutter\n", + "sns.set_context(\"paper\", font_scale=1.1) # smaller font\n", + "sns.set_style(\"white\") # remove background grid lines\n", + "\n", + "# 6. Create the figure sized for a double-column format (~3.4 inches wide)\n", + "plt.figure(figsize=(3.4, 2.4))\n", + "\n", + "# 7. Plot a simple box plot with a professional blue color\n", + "sns.boxplot(\n", + " x='Dataset',\n", + " y='percentage_removed',\n", + " data=df,\n", + " width=0.5,\n", + " color='#639CD9', # professional blue fill\n", + " linewidth=1.2 # slightly thicker line for clarity\n", + ")\n", + "\n", + "# 8. Finalize layout and styling\n", + "sns.despine() # remove top/right spines\n", + "plt.ylim(0, 100)\n", + "plt.xlabel(\"\") # remove x-axis label if desired\n", + "plt.ylabel(\"Invariants Removed (%)\")\n", + "plt.tight_layout()\n", + "\n", + "# 9. Save or display\n", + "plt.savefig(\"boxplot_invariants_removed.pdf\", dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUsAAADnCAYAAACXHnS/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAfpUlEQVR4nO3de1hUBf4G8HcYROUqKDCOkhqJmqZFruU9DAgXQRJtYUkTJTMlJQPF2wpWhLi6eUOzJUwXYsXLA2hisCbhpUjdNDXTJWtBYUCRBgS5zJzfHz3OL1bLc3DGM8j7eZ4em3MGzjvV83bOnHO+RyEIggAiIvpdFnIHICJqC1iWREQisCyJiERgWRIRicCyJCISgWVJRCQCy5KISASWJRGRCCxLIiIRZC3L999/H0uXLjW8zsrKgr+/P1544QVERUWhtrbWsC4lJQV+fn7w8fFBfHw8mpqa5IhMRO2ULGVZWlqKuXPnIjU11bDs0qVLWLVqFT766CMcPHgQKpUKSUlJAICCggLs2rULmZmZyM3NRVVVVYufJSIyNVnK8p///CdGjBiB8PBww7L8/HyMHTsWrq6uAICwsDDk5ORAr9cjLy8P/v7+sLOzg1KpRGhoKPbu3StHdCJqp2Qpy7feegthYWFQKpWGZWVlZejevbvhtUqlQl1dHaqrq++6rqys7IFmJqL2zVLuAL+mUCh+c9n/rrvbe8UYOHAg3N3dW/WzRPTwKS4uxrlz5+75PrMpS7VajdLSUsNrjUYDGxsbODg4QK1WQ6PRtFinVqtbtR13d3dkZ2ffd14iejgEBgaKep/ZXDr0/PPPo6CgwFCKaWlp8Pb2hoWFBXx8fLB//35otVro9XpkZGTA19dX5sRE1J6YzZ5l3759sXDhQkRERKCpqQl9+vRBYmIiAGDMmDEoLi5GaGgompub4enpiddff13mxETUnija26T0wMBAHoYTkYHYTjCbw3AiInPGsiQiEoFlSUQkAsuSiEgEliURkQgsSyIiEViWREQisCyJiERgWRIRicCyJCISgWVJRCQCy5KISASWJRGRCCxLIiIRWJZERCKwLImIRGBZEhGJIPmxErW1tTh58iTKysqgVCqhUqkwdOhQdO7c2RT5iIjMguiyLC4uRnJyMg4ePAgXFxc4OztDp9OhoqICWq0WPj4+mDNnDvr06WPKvEREshBVllu2bMHBgwfx4osvIjY2Fs7Ozi3Wl5eXIzc3F5GRkZgwYQIfJkZEDx1RZdmlSxfs2bMHCoXirutVKhWmT5+OqVOnIiMjw6gBiYjMgaiyDAkJEfXLlEolwsLC7isQEZE5atVzwxsbG5GZmYni4mK4ubnhT3/6E6ytrY2djYjIbLTq0qEVK1bg0qVL6N+/P4qLixEVFWXkWERE5kXUnmVubi78/PwMr7/77jvs2bMHFhYWmDhxIkaNGmWygERE5kBUWX755ZfIyMhAbGws+vfvD29vbwQHB+Oxxx7DhQsXEBgYaOqcRESyElWWcXFxuHDhAhISEtCrVy+8+eab8Pb2xg8//ICpU6di8ODBps5JRCQr0d9Z9u/fH9u3b8czzzyDadOm4ejRo/D19WVRElG7IKos6+vrkZGRgczMTPj6+mLXrl2oqanBiy++iEOHDhk1UH5+PgICAjBx4kSEhYWhuLgYAJCSkgI/Pz/4+PggPj4eTU1NRt0uEdHvEVWWUVFR+PLLL1FYWIjY2Fh06tQJUVFRSE5Oxu7duxEeHm6UMLdu3cKCBQvwt7/9DVlZWfDz88OKFStQUFCAXbt2ITMzE7m5uaiqqkJqaqpRtklEJIao7yy//vprHD9+HHq9Hl5eXoblbm5u2LRpE44dO2aUMDqdDgqFAj///DMAoK6uDp06dUJeXh78/f1hZ2cHAAgNDUV8fDxmzZpllO0SEd2LqLLs27cv3n//fQCAh4fHHetHjBhhlDA2NjaIj4/HK6+8AicnJzQ0NGD79u1ISkrCU089ZXifSqVCWVmZUbZJRCSGqMPw9evXQ6FQwMrKCmvXrjVZmO+//x7r169HdnY2vvjiCyxbtgyvvvoq9Hr9Hfel/9Z96kREpiBqz7Jbt25YuHChqF+o0+mgVCpbFebIkSN44okn8OijjwIAAgICkJiYCJ1OB41GY3ifRqOBWq1u1TaIiFpD1J7ltGnTcPjw4Xu+Ly8vDy+//HKrwwwcOBAnT55EeXk5gF++K21ubsb06dOxf/9+aLVa6PV6ZGRkwNfXt9XbISKSStSe5bp16xAfH4+VK1di/PjxGDJkSIvhv9988w3y8/MxaNAgrFu3rtVhnn32WcydOxfh4eHo0KEDrK2tsXnzZnh6euKnn35CaGgompub4enpyZmZRPRAKQRBEMS++dy5c9i5cyeKiopQXl4OhUIBtVqN4cOH48UXX8Tjjz9uyqxGERgYiOzsbLljEJGZENsJkka0DRw4EPHx8a0ORUTUVvHpjkREIrAsiYhEYFkSEYnAsiQiEkHUCZ6NGzfe8z2RkZH3HYaIyFyJKsuzZ88CAGpra3HixAl4enqiZ8+e0Gg0KCoqwtixY00akohIbqLKcsuWLQCAefPmYc2aNfD39zesy8/PR3p6umnSERGZCUnfWRYWFmL8+PEtlnl5eeHf//63UUMREZkbSWXp5uaGvXv3tliWnp5uGHxBRPSwknQHz+LFixEZGYmPPvoIKpUKV65cQXV1NbZu3WqqfEREZkFSWQ4fPhx5eXk4fPgwKisr4erqCi8vLzg4OJgqHxGRWZBUlgDg5OQEDw8P2NjYwMvLy/AICCKih5mk7yw1Gg0mTZqEadOmITY2FiUlJfDx8UFRUZGp8hERmQVJZbly5UqMGDECRUVFsLS0hLu7O2JiYrB69WpT5SMiMguSyvLkyZOYN28eLC0tDc/ACQ0NxeXLl00SjojIXEgqSzs7uxbPwgGA8vJydOnSxZiZiIjMjqSynDJlCmbPno2cnBzodDoUFBRg/vz5CA4ONlU+IiKzIOlseEREBDp06IDNmzdDp9MhISEBwcHBmDlzpqnyERGZBUllee3aNYSHhyM8PNxUeYiIzJKkw/Bx48bh1VdfxYEDB9DY2GiqTEREZkdSWebn52PYsGFITk7G6NGjERcXhzNnzpgqGxGR2ZBUliqVCq+++ipycnKwbds2WFtb44033sCECRNMlY+IyCy06rESWq0WZ86cwbfffou6ujo88cQTxs5FRGRWJJ3gOXjwILKyslBYWIgnn3wSQUFBGD9+PKytrU2Vj4jILEgqy8TERAQFBWHx4sVwc3MzVSYiIrMjqSwPHToEhUKByspKnDlzBt26dYNarTZVNiIisyGpLGtqahAdHY0vvvgClpaW0Ol0+MMf/oB169bB0dHRVBmJiGQn6QTPe++9B0tLSxw+fBhnz55Ffn4+bG1tkZiYaLRAly5dwtSpUxEUFIRJkybhm2++AQBkZWXB398fL7zwAqKiolBbW2u0bRIR3ZMgwciRIwWtVttiWXV1tTBs2DApv+Y31dfXC6NGjRIOHjwoCIIgfP7558Jzzz0nXLx4URg+fLhQXl4uCIIgvPfee8Ly5ctbtY2AgACjZCWih4PYTpC0Z6nX6w2j2W5TKBSwtJQ8cP2ujhw5AmdnZ/j6+gIAxo4di82bNyM/Px9jx46Fq6srACAsLAw5OTnQ6/VG2S4R0b1IKssxY8Zg8eLFqKioAPDL5PSlS5di9OjRRglz+fJluLi4YNmyZZg0aRJeeeUVNDY2oqysDN27dze8T6VSoa6uDtXV1UbZLhHRvUgqy0WLFqGqqgpjxozBoEGD8Nxzz6Gurg6LFi0ySpjm5mYcPXoUQUFB2LNnD2bOnIlZs2ahubn5jj1aAHddRkRkCpKOnx0dHZGWloaSkhJcv34d3bt3NxwaG4Orqyt69+6NoUOHAvjlMNzS0hJqtRrl5eWG92k0GtjY2PCpkkT0wEi+3fH8+fP4/vvvUVFRgdOnT+Ozzz7DZ599ZpQwY8aMQVlZmeEM+MmTJ9HY2Ahvb28UFBQYprSnpaXB29sbFhatuluTiEgySXuW77zzDjIyMuDs7NziEFihUBhOytyPbt264YMPPkBCQgLq6uqgVCqxYcMG9O/fHwsXLkRERASamprQp08fo16uRER0L5LKMisrC5mZmRgwYICp8uDpp5/Gzp0771geEBCAgIAAk22XiOj3SDqOtbe3R+/evU0UhYjIfEnas1ywYAFiYmLw8ssvw87OrsW6gQMHGjUYEZE5kVSWP/74I/Lz85Gfn99iuUKhwHfffWfUYERE5kRSWW7btg0pKSkYPnw4z0QTUbsiqfE6deqEYcOGsSiJqN2R1Hpz587FypUrcfnyZdy4cQPV1dWGv4iIHmaSDsNXrVqF+vp6ZGZmGq6zFASB31kS0UNPUlnu27fPVDmIiMyapMPwHj16oEePHrhx4wbOnj0LZ2dnWFlZoUePHqbKR0RkFiSVpUajwaRJkzBt2jTExsaipKQEPj4+KCoqMlU+IiKzIKksV65ciREjRqCoqAiWlpZwd3dHTEwMVq9ebap8RERmQVJZnjx5EvPmzYOlpaXhBE9oaCguX75sknBEROZCUlna2dkZxqTdVl5eji5duhgzExGR2ZFUllOmTMHs2bORk5MDnU6HgoICzJ8/H8HBwabKR0RkFiRdOhQREYEOHTpg8+bN0Ol0SEhIQHBwMGbOnGmqfEREZkFSWVpYWCA8PBzh4eEtltfW1sLW1taowYiIzInow/Djx48jNTX1jjt1jhw5wqG8RPTQE1WWH330EV577TXs27cPISEhOH78OPR6PeLj4xEREYFnn33W1DmJiGQl6jD8k08+QXJyMkaNGoW8vDykpqbiH//4B06fPo3NmzfDy8vL1DmJiGQlas/y2rVrGDVqFABg3LhxOHr0KCorK5GVlcWiJKJ2QVRZ/vpJjkqlEpaWlnj//ffRtWtXkwUjIjInks6G39axY0eo1WpjZyGRrl27htra2lb/fENDAzp27HhfGWxtbdGtW7f7+h1EbYnosvz5558hCAKAX2ZY/vo1AN7F84DcunULvXr1Ql1dnaw5rK2tcf36dXTq1EnWHEQPiqiyrKura3HGWxAEw2sO/32wOnXqhJ9++qnVe5alpaUYPXo0CgsL0bNnz1bnsLW1ZVFSuyKqLP/1r3+ZOke7UlVVBa1WK3eM+1JbW3tfXwXY29vDycnJiImITEtUWXK4r/FUVVXhUffH8HP1DVlzjB49WtbtO3RxxA/F/2FhUpvRqhM81HparRY/V9+A/6I02DiqZMmga2qEsoOVLNsGgJs3yrF/VRi0Wi3LktoMlqVMbBxVsOvW+u8MiejBMtuyPH36NMLCwpCfnw+VSoWsrCxs3boVzc3NGDBgAN555502PbzjZlW53BFk054/O7Vdksvy4sWL8PDwwM2bN5GamgpHR0eEhobCwkLSaMzfdf36daxYsQJNTU0AgEuXLmHVqlXYu3cvXF1dkZiYiKSkJKxcudJo23xQGhoaAAD7k8JkTiK/2/8siNoCSWX54Ycf4oMPPsCJEyfw9ttv49tvv4WFhQVKSkoQGxtrlEDNzc1YsGABYmJiMGPGDABAfn4+xo4dC1dXVwBAWFgYAgMDERcXZ9SSfhBuXwzuvzANNk7yfGcpt5tV5difFHbfF8YTPUiSmmbv3r1IT09HQ0MDDhw4gLVr1+Ljjz9GTk6O0QIlJSXhmWeewciRIw3LysrK0L17d8NrlUqFuro6VFdXG227D5zi3m8xFV1To3wbB2T97EStJWnPsrKyEh4eHigsLISDgwP69esHQRBw69Yto4TZt28f/vvf/2Lx4sV3rPv1/em/t8zc2dvbw6GLI/avat+H4Q5dHGFvby93DCLRJJVljx49kJ2djdzcXMOeX1paGvr06WOUMLt374ZGo0FQUJBh2cyZMzF+/HiUl///SQGNRgMbGxs4ODgYZbsPkpOTE34o/o9sF6Ub6w6e+8WL0o1D7jkB7WlGgKSyjI2NRWxsLDp27Iht27bh2LFj2LhxIzZt2mSUMKmpqS1e9+vXDykpKaipqcGMGTOg0Wjg6uqKtLQ0eHt7t7nvK29zcnKSvSh69uyJ3r17y5qB7o85zAloTzMCJJVlz549cfjwYcPrrl27orCwEBcvXjR2rhb69u2LhQsXIiIiAk1NTejTpw8SExNNuk0ic2cOcwLa04wASWUZGBiIU6dOGV5bWVmhsbERU6dObbHcWL7//nvD3wcEBPBZP0T/o1u3bvd9GMyjDHHuWZYlJSWYPHkympqaUFdXB09Pzxbrm5qaMGjQIJMFJCIyB/csSzc3N2zbtg1arRazZs3Cli1bWqy3srJCv379TBaQiMgciDoMHzBgAAAgLy8PLi4uJg1E93Y/Z0BLS0tb/Nla7eksKBEg8TtLQRAQFxeHH3/8EXq9vsW67du3GzUY3Z2xzoDe74i29nQWlAiQWJYxMTG4desWvL29YWlptjM4Hmr3ewb0iy++wLvvvotly5bdV2G2p7OgpiL3EGhjHWXcr7Zyza2kxjt37hwOHz4MOzs7U+UhEVp7BrShoQFxcXG4fPky4uLicP78ed6fLRNzGQINcBC0WJLKUqVS4datWyzLNuqvf/0rfvrpJ3h6euKbb77BmjVrsGTJErljtUvmMAQa4CBoKSSV5cSJEzFr1iy89NJLdzwz3NfX16jByLh0Oh3Wrl0LZ2dnqNVqXLlyBWvXrsWiRYugVCrljtducQh02yGpLDMyMgD8Mqrt1xQKBcvSzCmVSixYsAB/+ctfcPXqVVRWVuLtt99mURKJJKksDx06ZKoc9ABER0cjJSUFp06dwqOPPoq33npL7khEbYbkU9olJSXQaDQQBAHAL3fwXLx4EdOnTzd2NjKyjh07YsuWLYiOjsaaNWt4codIAklluWnTJmzYsAEdOnSAQqFAc3MzBEHAE088wbJsI3x9fXHmzBm5YxC1OZK/s0xNTYVer8f+/fsRFxeHd999F1ZW8p1NIyJ6ECQNhLx58yaGDx+Ovn374uzZs7CyskJMTAw+++wzU+UjIjILksqye/fuqKiogIuLCzQaDRobG9GxY0fU1NSYKh8RkVmQdBju5+eHsLAwpKenY+TIkZg/fz6srKzg4eFhqnxERGZB0p5lZGQkoqKiYGNjg7i4OLi4uECpVGLVqlWmykdEZBYk7VkqFAr4+/sbXsfHxxs9EBGRORJVli+99BJ27tz5u491MOazw4mIzI2ospw6dSoAYMaMGSYNQ0RkrkSV5e09ys8//xwJCQmwtbU1aSgiInMj6QTPiRMn0KFDB1NlISIyW5JO8Pj4+CAiIgK+vr5wcXGBQqEwrOPUISJ6mEkqy8LCQgBAampqi+Uc0UZEDzuOaCMiEoEj2ohkdLOqXO4IsmpLn58j2ohk0NDQAADYnxQmcxLzcPufhznjiDYiGdwevOy/MA02TvI9sExuN6vKsT8prE0MopZUlrdHtFVUVLQY0ebv74+lS5eaKiPRQ8vGiQ8sayskleWDGNH2ySefID09HQqFAp07d8bSpUsxePBgpKSkIDMzEzqdDqNGjcKSJUt4zScRPTCSLkq/PaKtsrLSMKItOjraaCPaTp06ha1bt+Ljjz9GdnY2Zs+ejTlz5qCgoAC7du1CZmYmcnNzUVVVdcflS0REpnRfI9pcXV2NOqLNwcEBb7/9tuFh64MHD8b169eRl5cHf39/2NnZQalUIjQ0FHv37jXKNomIxJB0GH7gwAH4+PgYTujExcUZNYy7uzvc3d0BAHq9HgkJCXjuuedQVlaGp556yvA+lUqFsrIyo26biOj3SNqzXL9+PUaPHo24uDiTPiGwtrYWkZGRuHLlimGv9de3Vt7tNRGRKUkqy9zcXGzduhVKpRKvvfYa/P398eGHH6KiosJogS5fvozJkyfD1tYWH3/8Mezt7aFWq6HRaAzv0Wg0UKvVRtsmEdG9SCpLABgyZAiWL1+OwsJCvPHGG0hPT4eXl5dRwly9ehVhYWGYMmUKkpKSDNde+fj4YP/+/dBqtdDr9cjIyOC96ET0QEm+3VGn06GwsBA5OTk4dOgQBg0ahHnz5hklTEpKCrRaLbKzs5GdnW1YvnXrVgQHByM0NBTNzc3w9PTE66+/bpRtEhGJIaksV65cidzcXHTq1AlBQUHIzs6Gm5ub0cIsX74cy5cvv+u68PBwhIeHG21bRERSSCrLmpoarFmzBsOHDzdVHiIisySpLFevXo3GxkaUl5dDr9e3WMcTLkT0MJNUlp9++ini4uJQU1MDQRCgUCgMf3733XemykhEJDtJZblu3TrMmjULEydOhKWl5HNDRERtlqTGq6ysxIwZM2BhIfmKIyKiNk1S640aNcrwHB4iovZE0p6lpaUl5syZg4EDBxqGXdy2ZcsWowYjIjInksry0Ucf5cXgRNQuSSrLyMhIU+UgIjJrospSzKBd3l1DRA8zUWV5r+eFKxQKliURPdREleWOHTtMnYOIyKzxynIiGd28US7r9nVNjVB2kO9R1nJ/filYlkQysLe3h0MXR+xfFSZ3FNk5dHGEvb293DHuiWVJJAMnJyf8UPwfaLVa2TKUlpZi9OjRKCwsRM+e8j273N7e/o7rts0Ry5JIJk5OTmZREj179kTv3r3ljmH2eJM3EZEILEsiIhFYlkREIrAsiYhEYFkSEYnAsiQiEoFlSUQkAsuSiEgEliURkQgsSyIiEViWREQisCyJiERoU2VZWFiIiRMnws/PD+Hh4aioqJA7EhG1E22mLKuqqhAdHY2kpCTk5ubCy8sLixcvljsWEbUTbWZE25EjR9CvXz/069cPABASEoKkpCRUVlbC2dlZ5nRE8rh27Rpqa2tb9bOlpaUt/mwNW1tbdOvWrdU/35a0mbIsLy9H9+7dDa+trKzg6OiIsrIySWVZXFyMwMBAU0QkanMCAgKQlJQkdwxZFRcXi3pfmylLQRCgUCjuWG5hIe2bhHPnzhkrEhG1I23mO0u1Wg2NRmN43djYiBs3bkCtVsuYiojaizZTliNHjsT58+dx8eJFAEBmZiaGDBliFmP5iejhpxAEQZA7hFjHjh3D6tWr0dDQgK5duyIxMRE9evSQOxYRtQNtqiyJiOTSZg7DiYjkxLIkIhKBZUlEJALLkohIBJYlEZEILEsiIhHazO2OBPTr1w+PPfYYLC1b/mtbsWIFPD09MW7cOFhaWqJz584AfrnLSafTYc6cOQgKCgLwy22jGRkZ2L17N5qamqDT6fD4448jJibGcI/9xo0bceDAAVhYWKBr165YsWIF+vTpA71ej9WrV+PQoUPQ6XQICgrC3Llz73obKsnrzJkzWLNmDaqqqgAAjo6OWLBgAZ588snf/JnS0lL4+vri/PnzhmXHjx9HVFQUlixZgokTJ5o6tnkTqM3w8PAQysrKfnO9l5eX8PXXX7dYduDAAWHgwIFCTU2NIAiC8O677wohISGCRqMRBEEQdDqdsH79esHX11doaGgQsrOzhUmTJgk3b94UBEEQduzYIUyePFkQBEFIS0sTXn75ZaGhoUGor68XQkJChH379pnio9J9aGhoEIYNGyacOHHCsOzIkSOCp6enUF1d/Zs/V1JSIgwYMMDw+tNPPxWeffZZ4dixYybN21Zwz/IhJggCSktLYWNjAysrK1y9ehU7duzAgQMH4OLiAuCXQSRz585Fr1690NjYiF69emHZsmWwtrYGAAwePBjJyckAgLy8PAQHB8PKygoAMHnyZOzduxf+/v7yfEC6q/r6emi1WtTX1xuWjRw5EmvXroVSqcShQ4ewceNGNDU1wcrKCvPnz8eYMWNa/I709HR8+OGH2LZtm2EsYnvHsmxjZs6c2eIwvHPnzsjIyDC8XrJkCTp37ozq6mrodDqMHDkSO3bsgJWVFc6ePYsuXbqgd+/eLX6nhYWFYWzd4MGDDcsbGhqwevVq/PGPfwQAlJWVQaVSGdarVCqUlZWZ4mPSfXBwcMCiRYsQGRkJR0dHPPXUUxg6dCgmTJiAiooKLF68GOnp6XB3d8eFCxfwyiuvYOfOnVAqlQCADRs2YOPGjYiMjGRR/grLso1JSUlpUVj/KyEhAUOHDsXVq1cRHh6ORx55BB4eHgAAhUIBvV4vajsVFRWYN28enJycsHDhQgB3H5MndUQePRjTp0/HSy+9hK+//hqnTp3CJ598guTkZISEhGDYsGFwd3cHAPTv3x+enp44evQoxowZA51Oh6KiImzfvh2zZ8/G008/jREjRsj8acwD/0t/SKnVaqxZswbJyckoKCgAAAwZMgRarRY//PBDi/cKgoA33njD8MX+6dOnERwcjKFDh2Ljxo2Gw+4ePXq0GJOn0WhaDGQm83DixAls3boV1tbWGDt2LN58801kZ2fjkUceuev7BUGATqcDACiVSqSkpOCZZ57BkiVL8Oabb6KkpORBxjdbLMuH2KBBgxAWFob4+HjU19fDxcUFf/7zn7FkyRJD6TU3N2P9+vW4ePEi3N3dce7cOcyYMQOxsbGIjo5usefo4+ODPXv2oLGxEbdu3cLu3bvh6+sr18ej3+Dk5ITNmzfj+PHjhmVVVVW4ceMGunbtiq+++sowHfzChQsoKipqsfd4+3+OU6ZMwfPPP485c+agrq7uwX4IM8SpQ23Ib106FBISgtDQUIwbNw5JSUkYOnSoYV1tbS38/PwQFBSE6Oho6HQ6/P3vf0dOTg6USiUaGxsxZMgQLFiwAC4uLpg9eza++uqrO/ZCsrKyoNPpsHbtWhw+fBhNTU3w9vZGTEwMLx0yQ0VFRdiwYQOuXLmCzp07o2PHjpgxYwYmTJiA/Px8bNq0Cc3NzYYTfL6+vne9dKihoQEhISFwc3PD+vXrZfxE8mNZEhGJwMNwIiIRWJZERCKwLImIRGBZEhGJwLIkIhKBZUlEJALLkohIBJYlEZEILEsiIhFYlkREIrAsiYhE+D+Wtw3r50Q0SwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# 1. Load JSON data\n", + "with open('erc20.json', 'r') as f:\n", + " erc20_data = json.load(f)\n", + "with open('sok.json', 'r') as f:\n", + " sok_data = json.load(f)\n", + "\n", + "# 2. Convert to DataFrame and label each row with its dataset\n", + "erc20_df = pd.DataFrame(erc20_data)\n", + "erc20_df['Dataset'] = 'ERC20'\n", + "sok_df = pd.DataFrame(sok_data)\n", + "sok_df['Dataset'] = 'SoK'\n", + "\n", + "# 3. Combine into a single DataFrame\n", + "df = pd.concat([erc20_df, sok_df], ignore_index=True)\n", + "\n", + "# 4. Calculate percentage of invariants removed\n", + "df['percentage_removed'] = (1 - df['reduction_ratio']) * 100\n", + "\n", + "# 5. Set styles for small figure and minimal clutter\n", + "sns.set_context(\"paper\", font_scale=1)\n", + "sns.set_style(\"white\") # clean white background\n", + "\n", + "# 6. Create the figure sized for a double-column format (~3.4 inches wide)\n", + "plt.figure(figsize=(3.4, 2.4))\n", + "\n", + "# 7. Plot a box plot with professional blue fill and black outlines\n", + "ax = sns.boxplot(\n", + " x='Dataset',\n", + " y='percentage_removed',\n", + " data=df,\n", + " width=0.5,\n", + " boxprops={'facecolor': '#639CD9', 'edgecolor': 'black', 'linewidth': 0.9},\n", + " whiskerprops={'color': 'black', 'linewidth': 0.9},\n", + " capprops={'color': 'black', 'linewidth': 0.9},\n", + " medianprops={'color': 'black', 'linewidth': 0.9},\n", + " flierprops={'markeredgecolor': 'black', 'markersize': 3}\n", + ")\n", + "\n", + "# 8. Ensure all four spines of the plot are visible with black borders\n", + "for spine in ax.spines.values():\n", + " spine.set_visible(True)\n", + " spine.set_linewidth(0.5)\n", + " spine.set_edgecolor('black')\n", + "\n", + "plt.ylim(0, 100)\n", + "plt.xlabel(\"\")\n", + "plt.ylabel(\"Invariants Removed (%)\")\n", + "plt.tight_layout()\n", + "\n", + "# 9. Save or display the figure\n", + "plt.savefig(\"boxplot_invariants_removed.pdf\", dpi=300)\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.17" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/use-cases/dynamically-mined-invariant-denoising/erc20.json b/use-cases/dynamically-mined-invariant-denoising/erc20.json new file mode 100644 index 0000000..d1e19a6 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/erc20.json @@ -0,0 +1,154 @@ +[ + { + "predicates_before_reduction": 95, + "predicates_after_reduction": 63, + "reduction_ratio": 0.6631578947368421, + "total_parsing_time": 0.0005500316619873047, + "total_reduction_time": 4.150881290435791, + "contract": "./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json" + }, + { + "predicates_before_reduction": 78, + "predicates_after_reduction": 46, + "reduction_ratio": 0.5897435897435898, + "total_parsing_time": 0.0004525184631347656, + "total_reduction_time": 3.722658634185791, + "contract": "./invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json" + }, + { + "predicates_before_reduction": 175, + "predicates_after_reduction": 96, + "reduction_ratio": 0.5485714285714286, + "total_parsing_time": 0.0008111000061035156, + "total_reduction_time": 8.162627458572388, + "contract": "./invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json" + }, + { + "predicates_before_reduction": 158, + "predicates_after_reduction": 96, + "reduction_ratio": 0.6075949367088608, + "total_parsing_time": 0.0007655620574951172, + "total_reduction_time": 7.1824915409088135, + "contract": "./invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json" + }, + { + "predicates_before_reduction": 108, + "predicates_after_reduction": 68, + "reduction_ratio": 0.6296296296296297, + "total_parsing_time": 0.0006222724914550781, + "total_reduction_time": 5.119410514831543, + "contract": "./invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json" + }, + { + "predicates_before_reduction": 94, + "predicates_after_reduction": 54, + "reduction_ratio": 0.574468085106383, + "total_parsing_time": 0.0005612373352050781, + "total_reduction_time": 4.4623119831085205, + "contract": "./invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.inv.json" + }, + { + "predicates_before_reduction": 163, + "predicates_after_reduction": 95, + "reduction_ratio": 0.5828220858895705, + "total_parsing_time": 0.0008013248443603516, + "total_reduction_time": 7.675647258758545, + "contract": "./invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.inv.json" + }, + { + "predicates_before_reduction": 282, + "predicates_after_reduction": 159, + "reduction_ratio": 0.5638297872340425, + "total_parsing_time": 0.0011723041534423828, + "total_reduction_time": 14.168088674545288, + "contract": "./invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.inv.json" + }, + { + "predicates_before_reduction": 145, + "predicates_after_reduction": 93, + "reduction_ratio": 0.6413793103448275, + "total_parsing_time": 0.0007197856903076172, + "total_reduction_time": 6.957494020462036, + "contract": "./invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.inv.json" + }, + { + "predicates_before_reduction": 79, + "predicates_after_reduction": 47, + "reduction_ratio": 0.5949367088607594, + "total_parsing_time": 0.0005147457122802734, + "total_reduction_time": 3.806112766265869, + "contract": "./invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.inv.json" + }, + { + "predicates_before_reduction": 111, + "predicates_after_reduction": 67, + "reduction_ratio": 0.6036036036036037, + "total_parsing_time": 0.0005886554718017578, + "total_reduction_time": 5.197048187255859, + "contract": "./invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.inv.json" + }, + { + "predicates_before_reduction": 535, + "predicates_after_reduction": 311, + "reduction_ratio": 0.5813084112149532, + "total_parsing_time": 0.0018889904022216797, + "total_reduction_time": 25.105873584747314, + "contract": "./invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.inv.json" + }, + { + "predicates_before_reduction": 181, + "predicates_after_reduction": 102, + "reduction_ratio": 0.56353591160221, + "total_parsing_time": 0.0008447170257568359, + "total_reduction_time": 8.532665967941284, + "contract": "./invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.inv.json" + }, + { + "predicates_before_reduction": 164, + "predicates_after_reduction": 96, + "reduction_ratio": 0.5853658536585366, + "total_parsing_time": 0.0007402896881103516, + "total_reduction_time": 8.461816787719727, + "contract": "./invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.inv.json" + }, + { + "predicates_before_reduction": 182, + "predicates_after_reduction": 99, + "reduction_ratio": 0.5439560439560439, + "total_parsing_time": 0.0009572505950927734, + "total_reduction_time": 8.861835479736328, + "contract": "./invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.inv.json" + }, + { + "predicates_before_reduction": 160, + "predicates_after_reduction": 93, + "reduction_ratio": 0.58125, + "total_parsing_time": 0.0008347034454345703, + "total_reduction_time": 7.377439498901367, + "contract": "./invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.inv.json" + }, + { + "predicates_before_reduction": 172, + "predicates_after_reduction": 97, + "reduction_ratio": 0.563953488372093, + "total_parsing_time": 0.000843048095703125, + "total_reduction_time": 8.214195966720581, + "contract": "./invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.inv.json" + }, + { + "predicates_before_reduction": 206, + "predicates_after_reduction": 115, + "reduction_ratio": 0.558252427184466, + "total_parsing_time": 0.0009043216705322266, + "total_reduction_time": 9.881560325622559, + "contract": "./invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json" + }, + { + "predicates_before_reduction": 95, + "predicates_after_reduction": 63, + "reduction_ratio": 0.6631578947368421, + "total_parsing_time": 0.0008337497711181641, + "total_reduction_time": 6.636699199676514, + "contract": "./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json" + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/erc20_random_sample_kept_after_eval.json b/use-cases/dynamically-mined-invariant-denoising/erc20_random_sample_kept_after_eval.json new file mode 100644 index 0000000..aa5ae39 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/erc20_random_sample_kept_after_eval.json @@ -0,0 +1,456 @@ +[ + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) one of [0]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(owner) == owner" + ], + "after_preds": [ + "ori(owner) == owner" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_decimals) one of [9]" + ], + "after_preds": [ + "ori(_decimals) one of [9]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ], + "valid_output": true + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_totalSupply one of [10000000]" + ], + "after_preds": [ + "_totalSupply one of [10000000]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ], + "valid_output": true + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ], + "valid_output": true + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_to != 0" + ], + "after_preds": [ + "_to != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= tokens" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= tokens" + ], + "valid_output": true + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(balances[msg.sender]) != balances[to]" + ], + "after_preds": [ + "ori(balances[msg.sender]) != balances[to]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_balances[to] >= ori(_balances[to])" + ], + "after_preds": [ + "_balances[to] >= ori(_balances[to])" + ], + "valid_output": true + }, + { + "before_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(balances[to]) != balances[msg.sender]" + ], + "after_preds": [ + "ori(balances[to]) != balances[msg.sender]" + ], + "valid_output": true + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "_paused == ori(_paused)" + ], + "after_preds": [ + "_paused == ori(_paused)" + ], + "valid_output": true + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_pendingowner) == _pendingowner" + ], + "after_preds": [ + "ori(_pendingowner) == _pendingowner" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ], + "valid_output": false + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_owner == ori(_owner)" + ], + "after_preds": [ + "_owner == ori(_owner)" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1000000000000000]" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ], + "valid_output": true + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_balances[account]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[account]) <= ori(Sum(_balances[...]))" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "valid_output": true + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(totalSupply) one of [100000000000000]" + ], + "after_preds": [ + "ori(totalSupply) one of [100000000000000]" + ], + "valid_output": true + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "decimals one of [0]" + ], + "after_preds": [ + "decimals one of [0]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "valid_output": true + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(decimals) one of [6]" + ], + "after_preds": [ + "ori(decimals) one of [6]" + ], + "valid_output": true + }, + { + "before_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "after_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ], + "valid_output": true + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/erc20_random_sample_removed_after_eval.json b/use-cases/dynamically-mined-invariant-denoising/erc20_random_sample_removed_after_eval.json new file mode 100644 index 0000000..b38931d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/erc20_random_sample_removed_after_eval.json @@ -0,0 +1,535 @@ +[ + { + "before_preds": [ + "totalSupply == ori(totalSupply)", + "totalSupply >= ori(totalSupply)", + "totalSupply <= ori(totalSupply)" + ], + "after_preds": [ + "totalSupply == ori(totalSupply)" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply" + ], + "valid_output": true + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[to]", + "Sum(_balances[...]) > _balances[to]", + "Sum(_balances[...]) != _balances[to]" + ], + "after_preds": [ + "Sum(_balances[...]) > _balances[to]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply > _balances[msg.sender]" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) >= ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) <= ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))" + ], + "valid_output": true + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[recipient]) < Sum(_balances[...])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ], + "after_preds": [ + "ori(decimals) == 8" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000" + ], + "after_preds": [ + "ori(totalSupply) == 100000000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > ori(_balances[recipient])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) == 7000000000000000000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ], + "after_preds": [ + "ori(_decimals) == 9" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ], + "after_preds": [ + "ori(totalSupply_) == totalSupply_" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == 1000000000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == totalSupply_", + "ori(Sum(balances[...])) >= totalSupply_", + "ori(Sum(balances[...])) <= totalSupply_" + ], + "after_preds": [ + "ori(Sum(balances[...])) == totalSupply_" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ], + "valid_output": true + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens" + ], + "after_preds": [ + "ori(Sum(balances[...])) > tokens" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals" + ], + "valid_output": true + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply == 100000000000000000000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) == 1000000000000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > _balances[msg.sender]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ], + "valid_output": true + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ], + "valid_output": true + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_totalSupply)", + "_balances[msg.sender] < ori(_totalSupply)", + "_balances[msg.sender] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[msg.sender] < ori(_totalSupply)" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_balances[to]) <= _balances[to]", + "ori(_balances[to]) < _balances[to]", + "ori(_balances[to]) != _balances[to]" + ], + "after_preds": [ + "ori(_balances[to]) < _balances[to]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ], + "after_preds": [ + "ori(totalSupply_) == totalSupply_" + ], + "valid_output": true + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent == 100" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ], + "after_preds": [ + "Sum(_balances[...]) == 100000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) == 100000000000000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals == 18" + ], + "valid_output": true + }, + { + "before_preds": [ + "_value <= Sum(balanceOf[...])", + "_value < Sum(balanceOf[...])", + "_value != Sum(balanceOf[...])" + ], + "after_preds": [ + "_value < Sum(balanceOf[...])" + ], + "valid_output": true + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] == value", + "_allowed[msg.sender][spender] >= value", + "_allowed[msg.sender][spender] <= value" + ], + "after_preds": [ + "_allowed[msg.sender][spender] == value" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) >= ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) <= ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) == 3000000000000000000000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_balances[msg.sender])" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ], + "after_preds": [ + "Sum(_balances[...]) == 100000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply == 1000000000000000000000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "after_preds": [ + "ori(Sum(balances[...])) > ori(balances[to])" + ], + "valid_output": true + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 9" + ], + "after_preds": [ + "_decimals == 9" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) == 18" + ], + "valid_output": true + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals == 18" + ], + "valid_output": true + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/full_experiment.bash b/use-cases/dynamically-mined-invariant-denoising/full_experiment.bash new file mode 100644 index 0000000..da94efe --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/full_experiment.bash @@ -0,0 +1,19 @@ +#!/bin/bash + +# Clear the contents of ./sok.json +> ./sok.json + +# Remove all files in ./output/sok and its subdirectories +find ./output/sok -type f -delete + +# Run the reader.py script with each invariant JSON file +python reader.py ./invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json ./output/sok +python reader.py ./invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json ./output/sok +python reader.py ./invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json ./output/sok +python reader.py ./invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json ./output/sok +python reader.py ./invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json ./output/sok +python reader.py ./invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json ./output/sok +python reader.py ./invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json ./output/sok +python reader.py ./invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json ./output/sok +python reader.py ./invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json ./output/sok +python reader.py ./invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json ./output/sok diff --git a/use-cases/dynamically-mined-invariant-denoising/full_experiment2.bash b/use-cases/dynamically-mined-invariant-denoising/full_experiment2.bash new file mode 100644 index 0000000..84fc4ab --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/full_experiment2.bash @@ -0,0 +1,29 @@ +#!/bin/bash + +# Clear the contents of ./sok.json +> ./erc20.json + +# Remove all files in ./output/sok and its subdirectories +find ./output/erc20 -type f -delete + +# Run the reader.py script with each invariant JSON file + + +python reader.py ./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.inv.json ./output/erc20 +python reader.py ./invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json ./output/erc20 diff --git a/use-cases/dynamically-mined-invariant-denoising/group.py b/use-cases/dynamically-mined-invariant-denoising/group.py new file mode 100644 index 0000000..2873f45 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/group.py @@ -0,0 +1,16 @@ + + +def group_predicates(parsed:list): + """Takes a parsed list of predicates and creates a two dicts one where the predicates are grouped according to + their involved variabels and one where parsed predicates are mapped to their orignal format """ + category_dict = {} + preds_dict = {} + for pred in parsed: + big_key ,k, v = pred + if big_key in category_dict: + category_dict[big_key] = category_dict[big_key] + [v] + else: + category_dict[big_key] = [v] + preds_dict[v] = k + + return category_dict, preds_dict diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json new file mode 100644 index 0000000..1cf41bb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json @@ -0,0 +1,328 @@ +[ + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "disableTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "disableTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseApproval(_spender,_subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseApproval(_spender,_subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unfreeze()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000", + "ori(Sum(balances[...])) one of [5000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000", + "ori(totalSupply_) one of [5000000000000000000000000]", + "ori(unfrozen) == false", + "ori(owner) != 0", + "msg.sender == ori(owner)" + ], + "postconditions": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000", + "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000", + "totalSupply_ one of [5000000000000000000000000]", + "unfrozen == true", + "elem of balances[...] is one of [5000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))", + "msg.sender == owner", + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_", + "unfrozen != ori(unfrozen)", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unfreeze()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(_from,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(_from,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "_value > 0", + "_to != 0", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000", + "ori(Sum(balances[...])) one of [5000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000", + "ori(totalSupply_) one of [5000000000000000000000000]", + "ori(unfrozen) == true", + "ori(owner) != 0" + ], + "postconditions": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000", + "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000", + "totalSupply_ one of [5000000000000000000000000]", + "unfrozen == true", + "elem of balances[...] is one of [5000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))", + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_", + "unfrozen == ori(unfrozen)", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "allowTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "allowTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseApproval(_spender,_addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseApproval(_spender,_addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(_newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(_newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000", + "ori(Sum(balances[...])) one of [5000000000000000000000000]", + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000", + "ori(totalSupply_) one of [5000000000000000000000000]", + "ori(owner) != 0", + "ori(Sum(balances[...])) == ori(totalSupply_)", + "ori(Sum(balances[...])) >= ori(totalSupply_)", + "ori(Sum(balances[...])) <= ori(totalSupply_)" + ], + "postconditions": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000", + "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000", + "totalSupply_ one of [5000000000000000000000000]", + "unfrozen == true", + "elem of balances[...] is one of [5000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))", + "Sum(balances[...]) == ori(totalSupply_)", + "Sum(balances[...]) >= ori(totalSupply_)", + "Sum(balances[...]) <= ori(totalSupply_)", + "Sum(balances[...]) == totalSupply_", + "Sum(balances[...]) >= totalSupply_", + "Sum(balances[...]) <= totalSupply_", + "ori(Sum(balances[...])) == totalSupply_", + "ori(Sum(balances[...])) >= totalSupply_", + "ori(Sum(balances[...])) <= totalSupply_", + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.json new file mode 100644 index 0000000..21e57c7 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.json @@ -0,0 +1,347 @@ +{ + "variables": [ + { + "contractName": "TurexToken", + "varName": "balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xa2feaca39f426b269d5bc538d666e2116505e790": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4944462085409080000000000, + "varSlot": 101888965177213639651366942574262343758633829419875743653924135623904650926667, + "varOffset": 0 + }, + "0x4184b6ea8c950c097f32021757c9a06ac13dfd7a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000000000000000, + "varSlot": 21567897451980913645039541422011599390820723167017953473738238591799534649907, + "varOffset": 0 + }, + "0x2e12f1dc67fce4c45bfb1d103d9a83e8834855b0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3994000000000000000000, + "varSlot": 27639080169244217034976483554896173468457854031013379128790913620132063225716, + "varOffset": 0 + }, + "0xa61e2bc53fe08723c4f6610f8063bee799717fd2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3758000000000000000000, + "varSlot": 7185174437482167652854297612459681365731552866889587498041255577160807201748, + "varOffset": 0 + }, + "0x3c6c3eb48cddd5adabc217d5de48713025225701": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 61211441929408628883048054454469958084278605971175338499848912260098937461100, + "varOffset": 0 + }, + "0x1ce066cf111762cb81df5d5d3b6a8716dd09ea0d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 111081198152176218537984226925816594873092122660347121076296880522662413457948, + "varOffset": 0 + }, + "0x54862b087f09aa9d86f8d4872edbed6973d314f4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1689000000000000000000, + "varSlot": 56590459097327395810971573470634438056034622530098117665108912943282990694208, + "varOffset": 0 + }, + "0x0ba445662704f424cc89f2bb3bc89ba36ba8f598": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 9688949980086232747037826670710132122112555482556685364281728773970986945230, + "varOffset": 0 + }, + "0x65a2927cb78c7cc9613f6ae3ead46ef5ecf94017": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 42235000000000000000000, + "varSlot": 2550776761751142782639625448051944844241461039171087013012662318664597546936, + "varOffset": 0 + }, + "0x73f3deb43b52006aacf1739062c62c5b79687ebe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 33498648435563589473195007146927382357444489719333704444967134137576787499318, + "varOffset": 0 + }, + "0xc98806b69d950c2be94f4554e7f164e9f92c7e9b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 54725429528012335061159721746505235555427736565677914289333391296924591092277, + "varOffset": 0 + }, + "0xa58800019e743b32291bd92f2c293b0edcebe131": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000, + "varSlot": 50857800865682976618510229845822246552616496562385041084181828364575047206234, + "varOffset": 0 + }, + "0x199f5cf0755ae2a9539dd7ffdbd286048c8f8cb7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 15436152033633444284737440867439204617186022173811315061174414832107802166711, + "varOffset": 0 + }, + "0xdfdd807ec7b43273a3cbf02b3bb57d8dad1cd00f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 300000000000000000000, + "varSlot": 94483408470407818217796058385953069688371962815647657671057242462496784344720, + "varOffset": 0 + }, + "0xcd16f91814446c04961a4018e5f86c49e7bdd473": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 8444723818265537920943981498365227381932945986473790772731062613843489022713, + "varOffset": 0 + }, + "0x305b59fbe64e635faccd6baa3ceaceadc197e372": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 84481226842564292969792588043258621224709805769890183892577900461557377684513, + "varOffset": 0 + }, + "0xe6a19148180b8154c973a6b65a929f46665634ba": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 87911432660436332627590196550798596889590331017822551344791916303112423127312, + "varOffset": 0 + }, + "0xfcb2420fce26723e7060ec8072de3b0058dbb505": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 70087140478320609620040713116673241889709780161791157235177814477846991532110, + "varOffset": 0 + }, + "0x29570e051a4c4b0aba406f19111f7985b7a82bd5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 83056161325336228158922494748386345532692324226445917900142245358017372198222, + "varOffset": 0 + }, + "0xf22afe381d169562bfab9c83d28e77c6359d4890": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 6121179406830162864525222973752760313875308261904248788853495596208430843998, + "varOffset": 0 + }, + "0xdfc38911f6e0bfdd0472f6f68d83e8a0115768b2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20914590920000000000, + "varSlot": 11884311442126566233188825707168451636344111596742335269664622638795403675311, + "varOffset": 0 + }, + "0xddae9ecc38c58b06699e27901cc1eb89d18d465a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000, + "varSlot": 115301154343494614226142243116123676011674629199024930449302336955857162389885, + "varOffset": 0 + }, + "0xf2147906c7b723f7bf69b6b4fc3d9df9a21db791": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 114875194802734070644326542564537660364764232746642188943846970094558767233487, + "varOffset": 0 + }, + "0x48e7c3f0d49ed63c975e54bad2a0df7003f25acc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2516000000000000000000, + "varSlot": 71946504621824687588758120656206770746807369438913281181300885288593379487473, + "varOffset": 0 + } + }, + "varSlot": 0, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "TurexToken", + "varName": "allowed", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": {}, + "varSlot": 1, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "TurexToken", + "varName": "totalSupply_", + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000000000000000000000, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "TurexToken", + "varName": "owner", + "varType": "address", + "varBytes": 20, + "varValue": "0xa2feaca39f426b269d5bc538d666e2116505e790", + "varSlot": 3, + "varOffset": 0 + }, + { + "contractName": "TurexToken", + "varName": "allowedAddresses", + "varType": "mapping(address => bool)", + "varBytes": 32, + "varValue": {}, + "varSlot": 4, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "TurexToken", + "varName": "unfrozen", + "varType": "bool", + "varBytes": 1, + "varValue": true, + "varSlot": 5, + "varOffset": 0 + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json new file mode 100644 index 0000000..23f7aa6 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json @@ -0,0 +1,293 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_paused) == false", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000", + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "to != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000", + "ori(_totalSupply) one of [10000000000000000000000000000]" + ], + "postconditions": [ + "_paused == false", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000", + "Sum(_balances[...]) one of [10000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "elem of _balances[...] is one of [10000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000", + "_totalSupply one of [10000000000000000000000000000]", + "_paused == ori(_paused)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "falsified_preconditions": [ + "value > 0" + ], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000", + "ori(_totalSupply) one of [10000000000000000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000", + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_paused) == false", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000", + "Sum(_balances[...]) one of [10000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_paused == false", + "elem of _balances[...] is one of [10000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000", + "_totalSupply one of [10000000000000000000000000000]", + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "_paused == ori(_paused)", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.json new file mode 100644 index 0000000..288f225 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.json @@ -0,0 +1,3503 @@ +{ + "variables": [ + { + "contractName": "PhunToken", + "varName": "_name", + "varType": "string", + "varBytes": 32, + "varValue": "PhunToken", + "varSlot": 0, + "varOffset": 0, + "byteSize": 9, + "toReadSlot": 0 + }, + { + "contractName": "PhunToken", + "varName": "_symbol", + "varType": "string", + "varBytes": 32, + "varValue": "PHTK", + "varSlot": 1, + "varOffset": 0, + "byteSize": 4, + "toReadSlot": 1 + }, + { + "contractName": "PhunToken", + "varName": "_decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 18, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "PhunToken", + "varName": "_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x2e4c840e83f0348f94a9c57615255e07eafdaa41": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9913808816000000000000000000, + "varSlot": 36001237406369790567128535829694017172202764046197844568665966510609055633127, + "varOffset": 0 + }, + "0x28108a453d9be1f9d9092cefaad4ac60de0b0caf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 84129258794711512830622783777201120347987124991103025591897885270438664629729, + "varOffset": 0 + }, + "0xc1d4a1d761e5a25acad4b4aafa7d589b4875396a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 101663436937103940202343949737170791485801842561395614046560786081191829945565, + "varOffset": 0 + }, + "0x494abde04f6a9056d6a33b177470c05bd11cfca2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 33106462291654351449308691846789060591749202678214297107815410721963298701056, + "varOffset": 0 + }, + "0xf38b37a83443f17b9def9929c268ff9c4bf1feff": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 5457587483966097770353002522124342129092161803766678019463056061362950949212, + "varOffset": 0 + }, + "0xd89137baf52d19deaa95a74b1adad853601df408": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10010000000000000000000, + "varSlot": 79144340634000435452502585547657999663833739309165441259201271258309029621917, + "varOffset": 0 + }, + "0xf3fbb2c0a711529ef9b81fe59a5ef5b8f1e0eb27": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 107974475582448853699857939252699053267909280001192489274399675715905285138193, + "varOffset": 0 + }, + "0xd0c253074a1e8a21bf5352c70a04abaaa9570f09": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 21075000000000000000000, + "varSlot": 47836431299547812755241941214413743398142538935395968820868414772297161299979, + "varOffset": 0 + }, + "0xb5d85cbf7cb3ee0d56b3bb207d5fc4b82f43f511": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 268846000000000000000000, + "varSlot": 43814662651584679397276750589769110649286150507174528189077695743413437950545, + "varOffset": 0 + }, + "0xbb7835124224aae64b0531bcf3bbba76a65fc4e3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10868000000000000000000, + "varSlot": 3405913983727253237401556300087511044574168162506991837046317049289581992720, + "varOffset": 0 + }, + "0xe2d9d2c9b333ece773e7c04f54c0024924ca16dc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 51249000000000000000000, + "varSlot": 32421870367477456966778188725101214700885465012600863561627084700579117115865, + "varOffset": 0 + }, + "0x2929fb16d083c43950fce87baac4936b8fa36a87": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 49999000000000000000000, + "varSlot": 103785803380536944811863455418737029758986838839392062778757779713023272680123, + "varOffset": 0 + }, + "0xbe758317d5ccaf0e5af942e37a22bc3fee5dd109": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 97609761130680366520558913328140489586953846343780718455633834998958287427497, + "varOffset": 0 + }, + "0x70e735015e2386bb71a245d03eb87af16c65f0e2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110222000000000000000000, + "varSlot": 39053560886897981478991822247450258936819765435297673191754122081196186719167, + "varOffset": 0 + }, + "0x7f1a91bdcd1b60d07639d36bd2e5ae4e1a222b84": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 330000000000000000000000, + "varSlot": 15676500783379760510762354713714062958886907884930957898753025151089072698689, + "varOffset": 0 + }, + "0xf1fbbe4e049354e5d6127a72e092ff41552918aa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 80592344252649093426624945664275892813686463052547597719814334562747701480202, + "varOffset": 0 + }, + "0x585d0c0097832cac4eedf0c3d793ca3387bbed9f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3901588000000000000000000, + "varSlot": 109581938865237459802660263793519944358996963306883148124366947922950844916268, + "varOffset": 0 + }, + "0xc6bcd9ad3610d6bc4e344a899303f7ed9ee60a60": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 54363372763988538723049039124347642495016559524023718910505869419998594380947, + "varOffset": 0 + }, + "0x59a4331d3a8626a2717a5e1166e82406fe6c6557": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 550000000000000000000000, + "varSlot": 75931706822276934339195872057967048293725865389210992771460650701036231579844, + "varOffset": 0 + }, + "0x0ed993dda5bce5146752ed4f6ad5f53f634b82bc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 432097000000000000000000, + "varSlot": 59336685837763716123482322626875844325400069626196700609657868796287031261750, + "varOffset": 0 + }, + "0xb88389b2d6c641c1e4bb73a0c28851ba3de222d3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 86253624731546142293522283031957093322157815941400088289568782993004824393206, + "varOffset": 0 + }, + "0x19a8fa48842fcb0d0227195b8b6c6845c90408b5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 50558889481024431535045520187068680433232582157012957923546519032873467450406, + "varOffset": 0 + }, + "0x3de8296ab6041116cd000c3b48be38dd7b465e96": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 777818775190270933504279957204497622738732400518892424303170636628698998420, + "varOffset": 0 + }, + "0xde8665a638509c5e0cef95e47d58d23999bf3db0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000, + "varSlot": 70770806391933734122250913163215596062529559451521124514071884154067997528991, + "varOffset": 0 + }, + "0xf6945fc63ca97a7e3508533ea09bdba4747e5f67": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10004000000000000000000, + "varSlot": 82168251332046934665150138071695443626870970761066305313277323815477822988076, + "varOffset": 0 + }, + "0x6c76600bf0a15748e4a1cf1ee0ab09b557ba82c2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 16953000000000000000000, + "varSlot": 13936888490386536245940822079728174297194952627144953992197549444495594262974, + "varOffset": 0 + }, + "0x432b144c339202a027bf54411014ebb67d62d7a4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 54405464747227322666272153672363379429700406063689891797661647862189804826485, + "varOffset": 0 + }, + "0x0b666bca011f6e76a21bed7c685abb9e0396641f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 502158000000000000000000, + "varSlot": 2864371774101425306462917904870360854790728425611820520695641592853187517883, + "varOffset": 0 + }, + "0x60343e70fc517aea29b4c03d8676820eb764f9b7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 20422236325494048930480761498182874576896615013993594026016219017934586813173, + "varOffset": 0 + }, + "0x448870b243d4d9f56fd53b64969360d05e324779": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1007765000000000000000000, + "varSlot": 60821811639461523477129925342829502115624027689281902411312306507509335029355, + "varOffset": 0 + }, + "0xe7132ccb02a05a5986b54fa6811a5a5350c25e0a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 71739000000000000000000, + "varSlot": 44767443545931529741708762872574583733049875763627504795201762352322913227495, + "varOffset": 0 + }, + "0xb33842bd0f762c8d47032ebbdc109fc116129163": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 79073179633105052215528091190306444213375119523272828917335921211659760006623, + "varOffset": 0 + }, + "0x97449aaecfceccd26b0db4301d7d6cc5c95e7de4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 13229000000000000000000, + "varSlot": 92281495698974031541048011088777404647812339580731500770487153295284782248761, + "varOffset": 0 + }, + "0x1e6863db6a1610cbfc2a278be5c2208bdf4ea978": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9275000000000000000000, + "varSlot": 97589725706129909002795701483256592637320650287703898420398659274532165295792, + "varOffset": 0 + }, + "0x609f40928e0684b9334afad22185b16498cc29df": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 113793721672064870927159291568644105844489923355160867502309961924693921020451, + "varOffset": 0 + }, + "0x87945f8f7bf54f50553663837af8856362705388": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6410000000000000000000000, + "varSlot": 7804771459922798257446859463744798598847431488790165709116314379608243294088, + "varOffset": 0 + }, + "0x251f27c4b52205cecdac2bc74ef805072660fa10": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 110623871277419265070342720785000692406072371035898338125875750962414856563529, + "varOffset": 0 + }, + "0x141fef8cd8397a390afe94846c8bd6f4ab981c48": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 53253469021406645702884132526011169343557584121601276194135237057159281231950, + "varOffset": 0 + }, + "0x7aa07db1e743bf61f09255c229cd873a17db709d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 66241948093997311227709453718568093494503841613848350071961335160142317429604, + "varOffset": 0 + }, + "0x453faa95711a2a2936647f316f777f07613e2a9e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 10449713537192262722134851809023422491282583792325513076559790888770628334908, + "varOffset": 0 + }, + "0xdfd30b7bf9bb8183600a64caabd80d7376bb8f79": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 388812000000000000000000, + "varSlot": 25054438948110650891795163386653608564757935642517550231301954567456473531122, + "varOffset": 0 + }, + "0xf310f92302d59f4d8a9e8eac1d4bfac85a5ef8b2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 57639542698141943900088957903919299164764993848460089803972694025041351955002, + "varOffset": 0 + }, + "0x1b0c5b0f6ebd1eaf70d0c014d68f96328eb23f33": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000, + "varSlot": 10626494227422128742307508054699723323131086198492978452420558112481045263411, + "varOffset": 0 + }, + "0x3b1df16e65c9ef5ed1c8b486ac7f306d7d91b5e7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20277000000000000000000, + "varSlot": 103157701603458397667512993086709730966433061330404675436127382737008930007610, + "varOffset": 0 + }, + "0xd9c2053797027d4d25bc6e1abae3d8c2dd7503e2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 99934000000000000000000, + "varSlot": 94355727793316814160673904437616428930521914078881325120313683457242644300223, + "varOffset": 0 + }, + "0xb28d9353320a0028c937115fc7e5f52816b206cd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 43341588340859207557165668435889376263286736876182105634512444497415191496748, + "varOffset": 0 + }, + "0xfa5e3dacd6509a1717a2bf71cafb8a117b7db64c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 94796294039081957073633964900257872978238866674988663265544734933425602673532, + "varOffset": 0 + }, + "0x1ea940b7597b1cc74e10b6578e0c625b486653dc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 18886672631244256721104481459049672472538321427532843847731170216242528380595, + "varOffset": 0 + }, + "0xcfffa5f5f62618d89ec88db06b1f9708936bc984": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 723000000000000000000, + "varSlot": 112917036359757079433251330054184123770036750374962313927232973265069501467582, + "varOffset": 0 + }, + "0xf9dfe1962c39102c3cebd0f92116c37cd5a62a03": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 21989000000000000000000, + "varSlot": 20815668329771822759884758207062554434749616827071656563721695563247194318716, + "varOffset": 0 + }, + "0x44d3146f647a974487f30632636f57145a8ab111": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 550000000000000000000000, + "varSlot": 12959034077102811639091938471343752034898310682105161240032530297125541633964, + "varOffset": 0 + }, + "0xd6d1cff5d5953c4491505559dc26996c7dafc442": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1114514000000000000000000, + "varSlot": 52905752164460937760460998427847988703546287479563191629305571864267634808782, + "varOffset": 0 + }, + "0x2a281f1fc10fe5253a184c48667b7a15268596c5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 113531729649323375619877037384713750943019270951382061873738474391912868167084, + "varOffset": 0 + }, + "0x438d9632ea9b4f6edeee236ef75f3bd1e786f08c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 131000000000000000000000, + "varSlot": 45164386762646475768901176694419186933927333322872349478477150796680292277953, + "varOffset": 0 + }, + "0xad9a39af99384123a958dba7e8ae18102a234b34": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 330000000000000000000000, + "varSlot": 100422318091723280137566544877642840851599664555415227992260895935954619829761, + "varOffset": 0 + }, + "0x972548ec32522fe448951d76b49ad8105bbbbcdc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 113034437640953587072752544722948079641059216232598408990492743311707793724303, + "varOffset": 0 + }, + "0xf2cd979059a288100e0638bbd808c6c52945c842": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 136235000000000000000000, + "varSlot": 113523675069324208279146020877579724853369269193211920401025393499666875964101, + "varOffset": 0 + }, + "0x7d0ebeb5a70cf389b77ff8ad1920d26e205bddec": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1010000000000000000000000, + "varSlot": 111780787726244460735013103680889911020620556258873659005307334426182415864845, + "varOffset": 0 + }, + "0x835b797f048ac84871355b8abead29316ced6120": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000000, + "varSlot": 1578818282710025914541044409575225162721157420429641980542121561960464701271, + "varOffset": 0 + }, + "0x75a1e44b4e103a2a05098e16c9fd122919fc1db0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000000, + "varSlot": 14637488017840106337518505446922425992183433202001172417164339492337204815776, + "varOffset": 0 + }, + "0x606f3b35ef6ec36c1445a879ca4b1cded3ec8046": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1020000000000000000000000, + "varSlot": 113240048773774989450151831758274409599696255345823401869753315309572762740067, + "varOffset": 0 + }, + "0x36e7ae876faab523e9fe40e2bea892103d55b6e9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 115029745738587604788626724298778538153958145873772088775503180023110280804698, + "varOffset": 0 + }, + "0x64e2f81e22f43c6dfa5d0eb21058439ade2a5585": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 16064566285376880566862197863056395108842626068923597941133218910272923299556, + "varOffset": 0 + }, + "0xc8afe1a90ca32b84f48b5831a551f3e39819715a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 38386599854195458838197990563584993883740609751060501856853456073473366040045, + "varOffset": 0 + }, + "0x39bb04d8036dac8e2e3cbf3537947649b60df73f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 85301785745635215167372161999008650929051484713514685355869906389180579783615, + "varOffset": 0 + }, + "0x90b81432262b3716b7287094317847cd24099412": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 88878686242652020270880443857147940739012640872684498145742558130881999293109, + "varOffset": 0 + }, + "0xf839291e4e35e2fecf74bb250bb6594920563e93": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 45769854846058156618118793054200165515134717590961068162884532012420515296620, + "varOffset": 0 + }, + "0xb60d6219e52e159e1386f564344be8796d92ea25": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 22262152589735210942844127393508581726939618093554929375463292504927627157098, + "varOffset": 0 + }, + "0x971fcdc4a3b22d5ce53091016305b51eb70323c7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000000, + "varSlot": 100803760543984137727686930806138312245303076218738906744222530525230829733873, + "varOffset": 0 + }, + "0xafa30aea5a3d586e49ae405b601133fb822eeeb0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 39860241042989966544661479592513073392201098300693716128148351330254586336208, + "varOffset": 0 + }, + "0x96edbb0e7b01417bf68dbdd3d5196c138a910832": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 9950681971947359622778305292703159895210723664068053723943940426439941720659, + "varOffset": 0 + }, + "0x219bf4e0362e0e552163edbe42f8f1a3e277590a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 39141207799172469114576952418710295975620837773132456200544724170665667111806, + "varOffset": 0 + }, + "0x8305c4c396a96c24b71e0b53e3855c3f10374f0c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 68109032240449695302789262522620845631496154714389032191625939466507111189113, + "varOffset": 0 + }, + "0x15a1a895d2980ca8091963158e1f25cfc7b7c836": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 62346626312503810045446845162153833592391086143955507525584326506685388619941, + "varOffset": 0 + }, + "0x3d6e381035ab5995e06a5b1661ee58e92be755a9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 131001000000000000000000, + "varSlot": 46204676149816047786416654573671630265700144678344490693132178856658344926093, + "varOffset": 0 + }, + "0xd184384feb7548a87bbbde4f334229e07c5c8c86": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 450000000000000000000000, + "varSlot": 69125580281088071729122273518390706176834484043157911875882221890460271890625, + "varOffset": 0 + }, + "0x58b59a28cc12b71c6dce8bb31a841cb5512d97d3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10118000000000000000000, + "varSlot": 93108225113758532089458889820045471203756459689978466298627622842050986562632, + "varOffset": 0 + }, + "0xe416aee68edce24488dc9aa43bdc6760c5690218": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 49680103222682760897035396564848526452957955151519789645560707026630726899272, + "varOffset": 0 + }, + "0xf4d97f76b5437b5efa36b125d73273c8078af2f4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 76690258961009822786508406473449991694458619165191944837524832448139840203917, + "varOffset": 0 + }, + "0xa3a15f78c6a399b500bcf3854d4ad8f7a8b47f69": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3900000000000000000000000, + "varSlot": 102999244345214290910173496399606135779750557164210260821609457339478456364797, + "varOffset": 0 + }, + "0xc9a586629320371c066e8ba3a38d9decf0c2a352": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 48399283342178178462952373231671562308292446673605328531127851951944986541083, + "varOffset": 0 + }, + "0x1e8ff4830c0350df418f31778978f8cc440d41f3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 55000000000000000000000, + "varSlot": 58566327888594816090190391368952221601795463851631928628085319407836647968643, + "varOffset": 0 + }, + "0x43066873ca0a1d365c0d083ef4cc580ffc0f4cea": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 18511000000000000000000, + "varSlot": 56900562983940998531446837519265322556952648747359783956957518840731810709619, + "varOffset": 0 + }, + "0x43ec5fcd4342328e257f7cdeb904c1bc9d597144": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000, + "varSlot": 61856656206556526717565505998188640448158772185042152551345603213961216624765, + "varOffset": 0 + }, + "0x22f9d140e5874cd19c6272efb4865974fbd0766a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 102061946764937235104631503996360200156549184010237255367904308754688607238469, + "varOffset": 0 + }, + "0x01a2a9ea4dd20fb09b6d2b0ffc151f568385acfb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 342000000000000000000000, + "varSlot": 34003723420662983904896526164431530090348756390327953296552384251752980508742, + "varOffset": 0 + }, + "0xfa8433ccb94af7b760e7d88ee0e8a63ad9bfbaf4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 93185228661768180896895203761276728462525887487049500065502542676714676453529, + "varOffset": 0 + }, + "0x08c3b2ff305b474870077c955407c192335ed415": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 13802968215425278473901260754965371760461777348819581294165756231813727471186, + "varOffset": 0 + }, + "0x2d28f3219ca686bd82baf95180683d31a0cbcea6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 25217208739785440493576986804508672797708215150938678965758822703620545880125, + "varOffset": 0 + }, + "0x619c5e3565e161198f2a4a75ae0c36b4a70f8610": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 21476000000000000000000, + "varSlot": 58062765348975536572574978630311809926211555900063308090021153912057928900001, + "varOffset": 0 + }, + "0xf34c590cb4c46394aac8d33a0ad780dc08714f08": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 220000000000000000000000, + "varSlot": 66768193234384943936261215993596321119741380101031617716855543754635715957240, + "varOffset": 0 + }, + "0x01b8b7bdc4a98b882bb3a11f165e4e215feeb94f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 114527470287826354105394040636640643337935973303707474095129634374520340691926, + "varOffset": 0 + }, + "0x580d9bec2b993f6479f7f7c5734c14c98f831423": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 70164856693132830200826790599591863351672464674594470172661478101946425889728, + "varOffset": 0 + }, + "0x25b66d18111158a9b04ada73777a29a1f3e53ad1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 155953000000000000000000, + "varSlot": 49780805769073531909874955641085213141082117800367668904235250656000803247944, + "varOffset": 0 + }, + "0x649341b5fcee978f3d39dd9be8bfeee1c8bd6541": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 51696000000000000000000, + "varSlot": 26622167259066594204804506970040827361143422894331985809539069308093989375971, + "varOffset": 0 + }, + "0x2cab493e57aa119561c524dcaec0ba10d6ba6dc3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 96042000000000000000000, + "varSlot": 98693811985159416118195801387732445416392148160436648616828901125483058867178, + "varOffset": 0 + }, + "0x99d745a4e4c237356b8fa930aba57a7f270fcff3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 15005000000000000000000, + "varSlot": 87432125692291308441120250882996962495155652069876499884195631103260351126859, + "varOffset": 0 + }, + "0x573d0b89bd7dc34802e95d9708a37dc8fd96e954": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 18433880455580259603768052972860746092593389716170483811724074379495237940562, + "varOffset": 0 + }, + "0x54ec96c9b7f942284cabf8363db5444e26705c5d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 94893860762230508944306580398402974916581577291328875100138945732568512368563, + "varOffset": 0 + }, + "0x0198afb3d387ec62a6639fed592e7b8aecccb2ca": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 57751174632230327865633046571196019700747027622423038967077635291724211444697, + "varOffset": 0 + }, + "0x72fff14645e3fee228d0827530fda33e5a2f58f4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 605000000000000000000000, + "varSlot": 30584878556694739922237973593566740538878415984902818583459318990979607329125, + "varOffset": 0 + }, + "0xe0604d4623742477a9b3179b362fb56931f6e747": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 160000000000000000000000, + "varSlot": 59124354923362259124250760298859274389991338277162795793218080503727956942931, + "varOffset": 0 + }, + "0xd3fab5a0495ae7bf50df054e9140aa5cb797f6d8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 28830556042970320705218872948381544047599761127216178520194050232547583742317, + "varOffset": 0 + }, + "0x5dc7d5902a04fc98903455703885ff2c6b9eaac5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110221000000000000000000, + "varSlot": 35103032220297630117451421475044127076507250156017638541744348551438742290856, + "varOffset": 0 + }, + "0xef4609390c8d7107f6b7b6c9a0a7a35183bfe5d6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 9781779734108162969071314863096082760376788559050809062688403681797489552524, + "varOffset": 0 + }, + "0x32226ceeb7d9bbe700910d621576d252af329847": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 13000000000000000000000, + "varSlot": 48758038070471823233868131937926248614415384731889445859134086852299165072405, + "varOffset": 0 + }, + "0x11d0f2fa08831dad7de8c4f59718a8d9f5c3c1b9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 75456361882647768291907024983862113873017188561620572824987224999404445197355, + "varOffset": 0 + }, + "0x66c09b84c8a2b4b3a70238760b54fcf0e969ebe3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 13892657615705035012572767829638112147037772049100938447327802722546483511539, + "varOffset": 0 + }, + "0x574070b04e23a5eecec4b2796f0b7c43ada48fd6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 59550000000000000000000, + "varSlot": 84915880084113110933779799829212682672487233410305514581942890197229185572125, + "varOffset": 0 + }, + "0xdba745c3a487c4bba993e5bd354c7db68bfa4886": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10286000000000000000000, + "varSlot": 6625731216228587099404312480350265881632297863689993710221506798311708675442, + "varOffset": 0 + }, + "0x5312be2045d56da887a4d3f08eaf82929eb33b84": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 220000000000000000000000, + "varSlot": 9118917898853869376216094868289823140295843640904423145910009270019854601038, + "varOffset": 0 + }, + "0x3da4ffedf696e3fd1fc6a2cdd8dfe67adc9c8e06": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6647000000000000000000, + "varSlot": 49054867829039250081662767511400326294109505149340015425357354981176507187766, + "varOffset": 0 + }, + "0x63ac4c87bdbbeebf4c256a1d8b59208677ebdaee": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10917000000000000000000, + "varSlot": 111257241044363086535136650790469627109724947909016450583726107327101909064723, + "varOffset": 0 + }, + "0x7424e9efbea125fc7a2432ec95a38c6a0aed4de2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 122835000000000000000000, + "varSlot": 84644389680692541735031153227185988030360657651303867649607564860697904090265, + "varOffset": 0 + }, + "0x715c5b6608aed468d71bc17cdb4c5860b5ff6504": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 51132000000000000000000, + "varSlot": 106762166772085764028225209061748340631778579461938686986856464253235510310719, + "varOffset": 0 + }, + "0x2ffcf946dd3b1ce3dbc3a96973c130672489f8f9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10252000000000000000000, + "varSlot": 20362613645826819000246495689764498402230886980397906505098460600846218356691, + "varOffset": 0 + }, + "0x37886d2b6d96cd56d783f536bb8e47b58744f11f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 97707000000000000000000, + "varSlot": 53426660874289675615047505402438184541946785611102598278982872750421601795377, + "varOffset": 0 + }, + "0xb66088b4a1834502e3f0c367ce8685dc7b760c48": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 39000000000000000000000, + "varSlot": 34652764952404207588857281383832584997408908460687930481246096282849599931983, + "varOffset": 0 + }, + "0x0f354d8d14b4007d001cfdaa6a06f7cd5922a28e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 410945000000000000000000, + "varSlot": 13030320422166066206495886272659352388723291806929017407666818373780337863527, + "varOffset": 0 + }, + "0x52931d14d35354122c75b7e9c09c58c16ae6e7a2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 2622440187082817786619725586404053126927780566859350421842668979548815257742, + "varOffset": 0 + }, + "0x4260268119348b8054e042a7d4b961b2209cbf64": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 220000000000000000000000, + "varSlot": 67208375185911212156522758872226827798560189341395737947775090718367962696511, + "varOffset": 0 + }, + "0x14fac705c2b367f8ccac723731116d4206f77925": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 23707165637131646023490796108444816873385252605821245138204530078178833450166, + "varOffset": 0 + }, + "0xb04ad4dc208bea0b30d0ddb03f9cfe3e0edb7786": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 79412834172913719079057138620880659997887550650625846412913073480693141039738, + "varOffset": 0 + }, + "0x7cb37b86a6c02fdab56165d51026320cc2b47af3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10081000000000000000000, + "varSlot": 80105624446871947323318398306759614824928234110739288971782962364695901419969, + "varOffset": 0 + }, + "0xf06a19f8d472aca7745c394eaa3493aad654125d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 550000000000000000000000, + "varSlot": 41268347939764475713478113154282512461156712160963885716742798172624432604579, + "varOffset": 0 + }, + "0xde1c96744da09f921071840e78c058f6a9e3d697": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 43417570799470893645525007295256411939196892740859538120629987299602940017624, + "varOffset": 0 + }, + "0x1a31216e83059c2bd0c18f0c3c27013655e886ad": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 226894000000000000000000, + "varSlot": 75307055392501517553824240003108848939916686716826317479868839441698783729510, + "varOffset": 0 + }, + "0xe7544ab3c8d03ec4edfdd16cdaf1e8e37020f759": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10365000000000000000000, + "varSlot": 60024879783501845804542427256662910192782239099716575202553039801666819894113, + "varOffset": 0 + }, + "0xb873708f389e1261895ce6f0b7e8f5375c18b309": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10003000000000000000000, + "varSlot": 100673404572710430118035491072931369444437234223826998235291316781280110186762, + "varOffset": 0 + }, + "0xb2add6ad23a2172f7695ae83ccd38c8582979240": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 82787006987208968981347025913274655975015001788828163445006226353702220008343, + "varOffset": 0 + }, + "0x02f7542724601047e6d65c35f699019e826a790e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 550000000000000000000000, + "varSlot": 36760903960929109866403888132465618111830228446214867898514896739392947179740, + "varOffset": 0 + }, + "0x22887015fc6522e75f99a5c3ab912ca952899b4e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 8912953799678732227850718797378785051445833249361486990801067059080855814200, + "varOffset": 0 + }, + "0x20bd0ec350a139668dbe8c495b61b9549fbb420f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10008000000000000000000, + "varSlot": 112431169397826387333705447586682307996567302421136904120205197816572718111754, + "varOffset": 0 + }, + "0xca8097ecc3de22fbdb3bade5b5dc40a2ea79aa53": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 120357000000000000000000, + "varSlot": 87474724569290706446755111249276580819765387250803084050336395962991384744516, + "varOffset": 0 + }, + "0xfbd0b7014f75ff3130655ed2b952ae2a62f24dd9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 15500000000000000000000, + "varSlot": 59436532406699676105100153111865267072248947897411025827501652598692911526948, + "varOffset": 0 + }, + "0xa7a4ce7be7683fd824a3ebedb61f87625cc92eac": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000000000000000000000000, + "varSlot": 47419683102699067351765770229011740874223722583721296116926386636394497916297, + "varOffset": 0 + }, + "0x85f2096f4496801f0ab54b0b53c999b7d48c4a85": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 5585667881831744392240473924274470540766335136390705871382907823945029952667, + "varOffset": 0 + }, + "0xb313b402c7312e6d40be91b7f1e8880a6fb39340": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10043000000000000000000, + "varSlot": 21600643391955954956420685542818793619131317681494019575676732033367361527382, + "varOffset": 0 + }, + "0xb296bcf8b2a8bc13cc8ecd3f757f91d469a994af": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 78506486199917759230601478534202408404069170134960361551607971817770550177885, + "varOffset": 0 + }, + "0x111ed9a61106cff0474368ac67a6af5aaed270de": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 68862171763431212923025338267248494553092463191934578527028914811434397715631, + "varOffset": 0 + }, + "0x680467e781e2e7cb357f689ae332b6eb695dee23": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 14259716204635045000746663316845360579438511160568559436310946541443965311296, + "varOffset": 0 + }, + "0x185640058d7a57f186c858da8cbd570755f6b96b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9000000000000000000000, + "varSlot": 25008248848970789895032417196460251691823973828509433896855221638965922393991, + "varOffset": 0 + }, + "0x53091c3f8e8fab153daf9353e0af9db087688ff3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 99141729097064625696222742470850155938680760331883896488248022871439902632692, + "varOffset": 0 + }, + "0x1318c79223933521b695007b8bb5f961a3d6b725": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1100000000000000000000000, + "varSlot": 82516324744393319788832037913212739302319236367687424537370284280553385114779, + "varOffset": 0 + }, + "0x2f3834183058eb83d27ec440f3e7e2b173d5d6ff": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 8697000000000000000000, + "varSlot": 111053361712756794854957179905921905731246776575548776984023594189823332927696, + "varOffset": 0 + }, + "0xed5e407da2fd17317fda375f6f60214199f06709": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 220000000000000000000000, + "varSlot": 41577390961541028523042928800903971395207975494792273418236787713438386580171, + "varOffset": 0 + }, + "0x28955f79cbdb4563700a0ace70669633f0a3d4ed": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110128000000000000000000, + "varSlot": 55195091783126429719791181897184065009994776321869566597072311255625741532783, + "varOffset": 0 + }, + "0xcd3b23ca83bb0c9721da63eae00aef5f2af35d11": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 121000000000000000000000, + "varSlot": 12768115703530000133676885597234215300383584868331878605790547983401421784231, + "varOffset": 0 + }, + "0xf5fe0f6cbce118ef27ac969151f4592a43676092": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 10063929453988910963841808155240204688559585346673535493470559521104155993112, + "varOffset": 0 + }, + "0x97c2e3729cf1ac021a8410dbcf84049d2a68f957": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110042000000000000000000, + "varSlot": 94884613037425594298157767635983971361560879133879144492967375978746740065633, + "varOffset": 0 + }, + "0xd271d90592c21070f93a0b72d903cfaeaf3dba78": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 76568200448110790293372848457912022309721745295737619196188098185281676027991, + "varOffset": 0 + }, + "0x5b6032f48112adcb933d01c58ff66a40c81d301c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50194000000000000000000, + "varSlot": 57264441627026875156966004771699492747727085004054391154753215011353322906939, + "varOffset": 0 + }, + "0xbe7f26e9526ddb29256611a4621b17ee32181166": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 248019000000000000000000, + "varSlot": 21313834594924758799064698529937276485123767033996858135048198739828513153296, + "varOffset": 0 + }, + "0x2b21d8b1c6b703babcc588dfd88fe8953746531c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 23000000000000000000000, + "varSlot": 39613968931940657929618624269668329604987544570769052215532401990090237380909, + "varOffset": 0 + }, + "0x8d82286b0420daae6998e6bb4c51af723fa662d7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 323528000000000000000000, + "varSlot": 87119226495034100145771753460362557595922488372355356234667959888803459516785, + "varOffset": 0 + }, + "0x084210d6cf4c90c80a2910ca25608c1ff8dccc9c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 103959579779164908471457191670903916226806708118943199986300431616694280009925, + "varOffset": 0 + }, + "0xe63fd3d3e9193542aa81a8543a6be6fad7a54689": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50862000000000000000000, + "varSlot": 23535303985768490649022542048777533462072026383132678253784190469192138221122, + "varOffset": 0 + }, + "0xe9d0b427064eb2159d3a627779d900871b0b134b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 82345723821204032157708715596373229926853019409752967304355090431738303191283, + "varOffset": 0 + }, + "0xf0344aa4597bd3029aaab8f40418cca486fc32d4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 23980044276914501300740957007611434036441890539203725428282081955367938694970, + "varOffset": 0 + }, + "0x53d7d356fa70ed50d06b0a76df4f1f21672d91b1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 220000000000000000000000, + "varSlot": 109651804003225091845520169712860955963715617810465138832286761929252270651157, + "varOffset": 0 + }, + "0x81120936cbc2c000d3ce5bec02d901e688dabedd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 62647158266707967238156829464537327266996130564610729623732758020580689644584, + "varOffset": 0 + }, + "0xb7ae195fa195e2241720a8c7cef74fe57289da15": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10054000000000000000000, + "varSlot": 112186889193418623385199546250836555751389509868014791687274915933012733589027, + "varOffset": 0 + }, + "0xa05c9a76931bcf66fd1a02abb2fa398f3621d0fc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 4730938131752248512534926392991411710517425962550835443491065595075013849277, + "varOffset": 0 + }, + "0x119816976e08bfdf6f54fa1141775316dfa189e8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 80010750389662438114545761238835722454994545128566926087178958898530302783631, + "varOffset": 0 + }, + "0x7a0ef25fceb8c538beaa9345f0ff696d08ce2a0b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110342000000000000000000, + "varSlot": 26864215426164327485807561303756248847121311554223428838822209175247842219469, + "varOffset": 0 + }, + "0x048f6a0ff83d6d6a9e53c33b2d41f6e180b9aa65": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 23921593536368471873872635533918606594447739092665454227791774599087945225536, + "varOffset": 0 + }, + "0x59f76c18a614085e16a0b9e8455b8999f76b0dca": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 332500000000000000000000, + "varSlot": 98137466678525131010327640233066729287678797812440165345072909737475085601121, + "varOffset": 0 + }, + "0x78405a236eb9833cb6b4d369e5b9e135bbd1129a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 118485000000000000000000, + "varSlot": 83541242108612324975930711465084838373788737865856394136559558588149562064617, + "varOffset": 0 + }, + "0xc45fcba58496dc3eead90a9dbb359a2a51ac8531": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 133036000000000000000000, + "varSlot": 68751276492569304387914891344876418656469203906444435630648765988142797163493, + "varOffset": 0 + }, + "0x93bf28d89390ebc670ff9e94b749534935997060": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 51000000000000000000000, + "varSlot": 26648583752451530171708878656951014882794494400851012816992766577865266544447, + "varOffset": 0 + }, + "0x1ed6d55c2926f28289d00a00c96de399bf871062": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 102344198914959026108952520624347256329746736039453500701997469383313060564597, + "varOffset": 0 + }, + "0x9ada201c9e9ff60a2c02fa103ae8d3d363bdc5e9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10830000000000000000000, + "varSlot": 26837324888988250960975032244442733926837786112512233941567180968776022646027, + "varOffset": 0 + }, + "0xcbec1825522fc658acd7150012f115b1be85dfa1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000, + "varSlot": 56521302755427542946226377199091446273993928140235359585409999572535648337223, + "varOffset": 0 + }, + "0x349ea5209a290a8424788ee6b121a7be6d7b6731": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7484000000000000000000, + "varSlot": 6334082689617495692880200134812210082277772195505570398286536205138827494716, + "varOffset": 0 + }, + "0x2126dc60855eeb7c2a7d7da1b715a72954f9cb09": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 20689513092404212573770956581689297045754959601217426465873684663738861495985, + "varOffset": 0 + }, + "0xd2e23452d35370cfee4fab8ae32c8a2520c50c59": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6928000000000000000000, + "varSlot": 63524663192566712373066050984282342415411713808191171837509932697580782563234, + "varOffset": 0 + }, + "0xe1c22f1d4f9d570688b6244e09e1801af519411d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 14789849495064650748854987138595257711209890723042163503947205592848336770952, + "varOffset": 0 + }, + "0xbd5b345a607eb3d9bc58f1497192f476b13ab3f0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 534283000000000000000000, + "varSlot": 63098875024811592615143765401734310276883593969314196831532488624722262985985, + "varOffset": 0 + }, + "0x76bc94923a8a3905dc0e6198eade3c1b541f0a17": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 74796949071123921868639362189882020106932245216743953925725611714400210245378, + "varOffset": 0 + }, + "0xdab65b185b37ca8c05cb36705989ab065cc5e3ab": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1503536000000000000000000, + "varSlot": 115285872069840033680644044010171764018206492649732592781037108895277362186816, + "varOffset": 0 + }, + "0x8b6915376c5564de44293a3f1c4e868718a4f3c5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10091000000000000000000, + "varSlot": 76796755149359820859871904861108142477880449225285975548384782411418776049733, + "varOffset": 0 + }, + "0x43d0c3fc69f0c32d11243c37e60c15363dbc425f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 35000000000000000000000, + "varSlot": 59165146916919048282740761823223784781055488873656312738099920549523173984719, + "varOffset": 0 + }, + "0xa7a1a715ccf7a7d573c614bd5870a7e052734d70": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 330000000000000000000000, + "varSlot": 12149257569224662609827216080886404667989544291393667654479298785146137485923, + "varOffset": 0 + }, + "0xb4e8476c7bd6c8847cc3aca5cfe085c652214ba4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5200000000000000000000000, + "varSlot": 102758584712506256889656655391263666979061348051407188679635683978415521087823, + "varOffset": 0 + }, + "0xa9c16fe3eea597378ab05d042a32d187ffe29662": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25011000000000000000000, + "varSlot": 3901989623176300324161948363014829906245495791964389123733451837768505646452, + "varOffset": 0 + }, + "0xf6e8b2fe143fa16b4af0b8c1af882df55cfa2de6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 11152887842734083211524332214418951749380487530718709675327195020866449081024, + "varOffset": 0 + }, + "0xbe1a038ab7bbdf90925281921277aa8b9d4de910": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 93706342114909479969867737916572924517687874325466101188227143865374279093261, + "varOffset": 0 + }, + "0xd62ed66621da7cf3f1d9f883f1b31a5fd978e312": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1195768000000000000000000, + "varSlot": 6812083378455425759388503580519208219761062694315039625108328621941373803351, + "varOffset": 0 + }, + "0x0dcbc44e394747d4084ef1ad8e1685c2022b3427": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20036000000000000000000, + "varSlot": 51470813230869773276646984080585255768692293198429524353393201017462428247061, + "varOffset": 0 + }, + "0x53daa16fca69000a325444aa69ed0a5f71024e7d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 129383000000000000000000, + "varSlot": 54744863269068114970316064645174763465138085229295118802649170206774132514538, + "varOffset": 0 + }, + "0xd668d8a7b155b886b6aafea732ff8781489d811f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 294909000000000000000000, + "varSlot": 84584783722186501514741932466546903655158841970222409879945539183560493763300, + "varOffset": 0 + }, + "0xfc9629dfd854a285846b0d73aabc1b0553f20bdf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 48426250362630195363999727392033486934744134273681763152351369616717918524463, + "varOffset": 0 + }, + "0xb2b04cde3ca3d3c4645abe4f41b9c6eef351dd5b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 47667000000000000000000, + "varSlot": 80450925714609188784345382978744998408679588915279228817141567442849686738616, + "varOffset": 0 + }, + "0xe534853cb055c81cbc26169996a9eef155f32943": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1102340000000000000000000, + "varSlot": 5776590232092403165040411831137395299906514061709434661259946163553571902608, + "varOffset": 0 + }, + "0xa3d015a5d434b0ba7c0962001a46e982ca74f63e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 102051207010483342185233106180551507216355053256711074057929570240577894318554, + "varOffset": 0 + }, + "0x86bf86779a4d5a6b43ecedcabad9ca9875bf38cf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 330000000000000000000000, + "varSlot": 75060602353414773247483525160726827901856188532281223006989901826518202187220, + "varOffset": 0 + }, + "0xa2ef8b3c9af811a0863063247b368ebae74c5492": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 71185641309345083589539115652530529795830877442215467852090910415203937451099, + "varOffset": 0 + }, + "0x0a055b79af8651923ab672862d38825be6df064d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 311924000000000000000000, + "varSlot": 107141906917111299731473987027869308115338882571509954335630641338922871806912, + "varOffset": 0 + }, + "0xe47fea311e9671f495bcbdf61430cecbe07adc4f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 74615000000000000000000, + "varSlot": 16592037978474214642380651674026696226364792471781524075218604639948216477575, + "varOffset": 0 + }, + "0x2990bf7481a446f83fd5d99adf752f1635fdbe5c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 59390898118110100883069192781943863162548794259310968432356709798467060439901, + "varOffset": 0 + }, + "0x2ac3ee11e42425199d74c77558178a635d4ef215": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 120000000000000000000000, + "varSlot": 94384737577188271858389663161520182288899646762927905088886167031719736402686, + "varOffset": 0 + }, + "0xf647e549d0ec241b7ef619d5eae31ce0a76a1d4f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 95084000000000000000000, + "varSlot": 76745056620351127507294666377264930164418952832540623567303580026911033602064, + "varOffset": 0 + }, + "0xdd5ec8280b3dfcc685fcad56d7213096194bd4d8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 54233355457530057396615659698935088525745161218092630894802659328898478387400, + "varOffset": 0 + }, + "0x6057e3191587a85bd056fd38fb9708ab9f1e7251": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 70168464776117469896272698275073807786222465771791917230302539154498307765002, + "varOffset": 0 + }, + "0x57d1431b6c69da50cd6fcfe27af4723466fbcb81": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 49990855335837752080702463320605320282434327895955752747222562725361682193379, + "varOffset": 0 + }, + "0x6a7cb30b7a664a964b440f88f0a26e99a52f5b7b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1104995000000000000000000, + "varSlot": 56913363950047712237050732340998332364305028421422882973448048389368166629453, + "varOffset": 0 + }, + "0xbd3f0a367f5425770bc173f4f1a716b6ec03be04": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 32638000000000000000000, + "varSlot": 88049401917739609050248314910137250170272974928253152095279389909472662944353, + "varOffset": 0 + }, + "0xe59a6d77254ab4af0068aef2ef4d34379fe4102c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 103227402552168597865656001472007174215150931621548925313192163500297129393190, + "varOffset": 0 + }, + "0x13cf1dbf44df39df26b96b3f3a9c5dc198da65c3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000, + "varSlot": 52165446839300333169675073766217508525359615117969064462002705500633407165779, + "varOffset": 0 + }, + "0x4631999475f3cb7ada622b830d4ce99b89aad505": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 232123000000000000000000, + "varSlot": 97997049302091912446210878381284826967320578031256006548908712008999799263687, + "varOffset": 0 + }, + "0xf6a6d27dbc38d23d6e51abf3f6503d0c1c88710a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 85077000000000000000000, + "varSlot": 31028550177730734032266971374269509883312334994927296559399780137034894891637, + "varOffset": 0 + }, + "0x12469034f8be9f280a7c165fd956129941a7a748": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 114687000000000000000000, + "varSlot": 109878099988058371522038496997982710028298500148991508221745589539015008767479, + "varOffset": 0 + }, + "0x06b24466fac64ec351da8bd5c3ee576c8cb0a367": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 220220000000000000000000, + "varSlot": 50616887113258028253967682397135942855764049338040346430951926929231871455161, + "varOffset": 0 + }, + "0x572f9a596cf5e599dd54adfe6cd7a4f9163d6f5e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 960326000000000000000000, + "varSlot": 48947849921628142925407308685914187074262410245186060589187354311869255263919, + "varOffset": 0 + }, + "0x43d1f326340dbdfd83dcd7cbeb54821a7f5e5a0c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 227488000000000000000000, + "varSlot": 16269223271483652064434751901578478120606815015290882882029910720472969810880, + "varOffset": 0 + }, + "0xd50bfb3130e364214e8b9d6b16b5c21c51f55638": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 470000000000000000000000, + "varSlot": 2332809053963159966705422907278458843681173295853400400035262003397633802495, + "varOffset": 0 + }, + "0x393bb6fc366b41e3fc87831ec0645cf76d4514a4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 510106000000000000000000, + "varSlot": 47148676702850069286090111997573829125144982862258012856409233519044741063877, + "varOffset": 0 + }, + "0x736e75634bdaccf5068930c655a5e996b2b7e3e3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 94000000000000000000000, + "varSlot": 83448962588458398032761044086353531812600364758264035108186648936209624717448, + "varOffset": 0 + }, + "0xc44d43ba19c7f09df3f37704b0fdddc1ac56bfb8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 35253178985528873773665235567198688588816291811051839427475108981658316940578, + "varOffset": 0 + }, + "0x500c00ad1ab0e39a70676f8254aa5e9d647fdaf0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 3511596070763713456366324110968796418834654514537675734364762358525574083243, + "varOffset": 0 + }, + "0xba3c6212d27a005685fdf04c1f3c5d413f7847e0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 76978341709749202472292306127936148077437729617988378525836542726719482569825, + "varOffset": 0 + }, + "0x12b5c81b46816c5072cec3a71d6f5fbe92fdc240": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 119312000000000000000000, + "varSlot": 59492213452396248614845360029100528092161123131325634059485070374088977933846, + "varOffset": 0 + }, + "0x091256fa63fdcbaa5fcdd2be63faff69a8340714": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 78000000000000000000000, + "varSlot": 76086183336997458283397180798923824706507218231146545606488827973373253009748, + "varOffset": 0 + }, + "0x277b4a575c17cdc9387738ec33636fcaabae5882": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 453989000000000000000000, + "varSlot": 5551591475221228190287780851068758828611742539617557093889856528157514531806, + "varOffset": 0 + }, + "0x40f2fbfb81255c366a3b24f97cd65fcdb2812588": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 346549000000000000000000, + "varSlot": 45049750517333783854105152312015205238012337556601540361064573352511679085748, + "varOffset": 0 + }, + "0xbba0a2aece1eaf83fbdaa8a4a977c82cfad81cd1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 243758000000000000000000, + "varSlot": 7049317726345807899074287056451709392598069891569276501525440914789306566823, + "varOffset": 0 + }, + "0x03ba990816e085735fa3a0de3d60e3bc9e5a4589": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 114999732125197129817371425197087877674209770446808987086856741261706838403141, + "varOffset": 0 + }, + "0x201aea0c82dcb416c3940646c009a6d0fde1f87a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20224000000000000000000, + "varSlot": 63367189519649982644155492198376991036896427758581166605893821231695676058486, + "varOffset": 0 + }, + "0x78294b0a8c34fa18cb74099a9df108f9acc93028": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 22906285773693251816179100001817772172616296253726105931933602080370495611508, + "varOffset": 0 + }, + "0xd9c7733c0009b3ff94b24fb39855619d09c93acf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 107029467951777058157961146520917318856804188234425602337337928917996976787123, + "varOffset": 0 + }, + "0x30fe406adb085e8b1568a97d1d830ce3e00c5149": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 330000000000000000000000, + "varSlot": 99162477895797724238679382549736960243463872543614936216985568083140182923431, + "varOffset": 0 + }, + "0x749333a9864c058488c9709ca183ee68654bddfd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 256370000000000000000000, + "varSlot": 100207830225311707708870917113952559459289814979857958224818902519617596286267, + "varOffset": 0 + }, + "0x1e30caba53fcc8b8f0cc82d9bcb64aed6c469ed2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 3050988668244909444411481543176260233855017016656667715157109131434736693053, + "varOffset": 0 + }, + "0xdaf40ccf7889206a363515ad486092034b12c811": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 53698196564124557040684099966794805372886945748988142787735347015104297779993, + "varOffset": 0 + }, + "0xaea8def071990f37e6004ae97e61af8547b47ab8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 114799000000000000000000, + "varSlot": 63098578822683854194938848891697382561390935406625520272075111221759898882087, + "varOffset": 0 + }, + "0x91bcf9a5a23459d4bc6ace8f065cb0fadd220819": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 93761772273465342889242367881104004829769736091353990428873334542640195437843, + "varOffset": 0 + }, + "0x955029684d18d111b19315a7eb2a217912371cf0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 8503998000000000000000000, + "varSlot": 8746550605710528774363153506973566118690720863126726101061170723716140317915, + "varOffset": 0 + }, + "0x51ab7715108ed960b60ca11320b75e735d48b9c2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 135524000000000000000000, + "varSlot": 89536232975922951502179944697946441829634725282856167525404591226874142996155, + "varOffset": 0 + }, + "0xdad23ee9d5cca11bb915642cf5d96ec15aed83e5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 860729000000000000000000, + "varSlot": 68814779630962272351649456274583819406635713154374871902875414143942641592542, + "varOffset": 0 + }, + "0x722da1d6495d93a0f19efd71f20200fb6961807f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 34000000000000000000000, + "varSlot": 1007099339710296458722011874558446297612992674776208653738953343851877111551, + "varOffset": 0 + }, + "0x92fe10cab42003deab2b87a3e0f00219ad7c5e47": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 43127000000000000000000, + "varSlot": 24391724327546719653052897700592148942968517048487491984850979588533316834641, + "varOffset": 0 + }, + "0xfd34ad970496e668bd289ef83cd866e0f84e6819": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 75696000000000000000000, + "varSlot": 87189041802578933628819426637789456013847495562975336044475814875489831456181, + "varOffset": 0 + }, + "0x18e3b22177bd740073aec3a7e515a22a2dac2958": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 54765201740793737170102806726908931631408883732967054711947504564600800611334, + "varOffset": 0 + }, + "0x28e707a4378ed5067597b4903ddc5a12a2244da7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 4891403404567039477353958975830358796077827173546266639989901843221595805834, + "varOffset": 0 + }, + "0x960a3db2820cf7e487d5a7a5c2ba5312ec613b27": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 550000000000000000000000, + "varSlot": 110415602426609727278022071470394003363778265691101081332191140102677751178350, + "varOffset": 0 + }, + "0x769076afc4d1eb4780c068466c1d5efe558d3e82": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3900000000000000000000000, + "varSlot": 99017460967600492296826129757602784008390368483916913024205219707785999142326, + "varOffset": 0 + }, + "0x8102f21674fbccf96199d459012de1b6962d63a0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 16700000000000000000000, + "varSlot": 11185201658536873938056427056710864808056238553282910956463204773243844299264, + "varOffset": 0 + }, + "0x69015a0da53461d414a085e53f6c65e642a2934d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 4093903651415232346022662442523739015749188212858912158513874780025006716607, + "varOffset": 0 + }, + "0x58dd55d4d7a211c95ead9cfcc5158074c706b3e1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 45500000000000000000000, + "varSlot": 2710600132564505372206684164660260003408573299217196318886723929019002665511, + "varOffset": 0 + }, + "0xe2443071c4b4dd50ca90eade70c889e65ea60406": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 112326000000000000000000, + "varSlot": 18287109044836832571933135850548249230108722879172351924160258346801750039446, + "varOffset": 0 + }, + "0x5742deff036233e7e8fedc31465042f502f5a997": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 920632000000000000000000, + "varSlot": 57356448872831570293881884682102584482822750536744164151319624392954283340778, + "varOffset": 0 + }, + "0x13cf26716125ad683f35b37f84caa3ea6d889f0b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 280877000000000000000000, + "varSlot": 9188089020890644087551831971702351634765642943808642467120964995070959881483, + "varOffset": 0 + }, + "0x98ca88e565fa6ba69eb93c062af1c55f30798e59": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 114582000000000000000000, + "varSlot": 58659914568231763466579034078393227918323707658122898266308216600164945237538, + "varOffset": 0 + }, + "0xb35a6a249ee83a82563a9778bf39b76b34314202": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 596099000000000000000000, + "varSlot": 32488164468521764647114647363962301795554609954010717211998389639507672553585, + "varOffset": 0 + }, + "0x05b4c4d41edee811e40a7e200b332af224d2b3b6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115237000000000000000000, + "varSlot": 46019380771191046663415470662664171537966948406303264561626238124505918291118, + "varOffset": 0 + }, + "0xfe3b014d7a6437f40ff761f67cbf7c5c8d796176": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 71934310151653283170714201306888082661563455645290834149770211205028026369799, + "varOffset": 0 + }, + "0x1fa046aa4c5a1fc94413bedbf8c6e6c1c0d1d03f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10072000000000000000000, + "varSlot": 10557308572593428191055647288422612085953953281894979917251413879600379574533, + "varOffset": 0 + }, + "0x0fc1926a2e291c40e9ac6861d803e262253423d2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 120427000000000000000000, + "varSlot": 12990258362494730418650879722856354533122448430020914230713683752875311858976, + "varOffset": 0 + }, + "0x4d2bc2d00e51e60e513a0b1e7d39e5744f975dfc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 92524204953458949195849020292924925149963407175644663981554858596408401336710, + "varOffset": 0 + }, + "0x19fddaf6be0c1394545d7715166e05618e7f20ff": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 58459609668282921407381733711271156740465599061171939593253183880312215518492, + "varOffset": 0 + }, + "0x6f6e1941dc92680d5192e5bf8dd9aaf6425650de": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 65010000000000000000000, + "varSlot": 103312095338656987282467263338789139336586840576473395585857842955946086469936, + "varOffset": 0 + }, + "0x7a324010a6331d8d63d069e97022a1902cd8cfe7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 26892677627640958115974210470240699214496512255910654802514873734781530733772, + "varOffset": 0 + }, + "0xe20e588004fce2d3b6c7ea96dea91fd2cc42c951": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 40000000000000000000000, + "varSlot": 89062549515536823952932497387962667099110315658493522074174615768460051550806, + "varOffset": 0 + }, + "0xfb177ba0be7e72ba5f240b74f729363a0adffe43": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10062000000000000000000, + "varSlot": 57344964366633289044886857166010525485986305702749133314152156823356850458983, + "varOffset": 0 + }, + "0x413df41bb11f9bcf890f1f9707de021895170b4f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 17617000000000000000000, + "varSlot": 84797393649871722540827937477998743695915983598944422556616966940577626766700, + "varOffset": 0 + }, + "0xafff164a26a9f4783c1bf75b36d57d779a43ceb5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 62540949423698698070458009984355075699516781469152033840320505572691426181762, + "varOffset": 0 + }, + "0xfc7de5ab1f7793c9f180e07512a69a61c234e4a0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11567000000000000000000, + "varSlot": 67209301075890728719451326303854958635364800142264793636254941212258818828094, + "varOffset": 0 + }, + "0xeda0a66f776884937e27d09960ad8d1c703cb4b7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110052000000000000000000, + "varSlot": 27259616315903651839644915843689427779535757143429270547159031620689873361898, + "varOffset": 0 + }, + "0xa4bae12b389c8dd081aed7311a8457f632bcab7c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2400000000000000000000000, + "varSlot": 55321365009552431157638624384076383256054640523206021759980117458849568120978, + "varOffset": 0 + }, + "0x45b5e0e45f677dc2039a2ea7818038b1280a25b4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 8866008991736584233497725573777179008508199014341780219334472105861146643205, + "varOffset": 0 + }, + "0x7fb029e8439bbfb426b84f26b74ebe3515119829": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 112742485331781174571126153046171890823876978115451579611877329805988821818175, + "varOffset": 0 + }, + "0xea7c274a7bc90c683dd9ed47328283963eee740d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 227794000000000000000000, + "varSlot": 114228432794874397035587965977922640714317871712558414668949158410714516031290, + "varOffset": 0 + }, + "0x404cd662239e3a7c27964492657c1dc180065b03": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 98342283512313672705857874062175722025705489568219219229805701370707936613393, + "varOffset": 0 + }, + "0xd1544f82c23e202bb610f317198aa4c5a15ccf56": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 20692181111279751812946995603575256841722459816216002268241483471161929463545, + "varOffset": 0 + }, + "0xbac6ffb84094eff21500c196293c7bcbeeb82314": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 130074000000000000000000, + "varSlot": 88967922987466701968799297892536783657681845472341439468471873457715791208245, + "varOffset": 0 + }, + "0x4c650454a9e2cbc18314c1f162445b0643171465": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 158972000000000000000000, + "varSlot": 1124928585802286139770007123613680683460793528411444189312077283395020383649, + "varOffset": 0 + }, + "0xf449c2e349a210afc9fabb32ac45e214a6cf28dc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20454000000000000000000, + "varSlot": 7396807369388652922396287578829345278727658753324464933409861511691246330393, + "varOffset": 0 + }, + "0x136d7c8a5ea2a0560204f74ca473972bcc908c74": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 51606000000000000000000, + "varSlot": 30636259983200080923393644849192443037738353913799252959884755502829511194973, + "varOffset": 0 + }, + "0x5f6dfff9e67bdd11b6cd9a998468d90687fc4ca0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 85417289097551623362692212489358941278216601166521886668700919259485118267430, + "varOffset": 0 + }, + "0xef5ddb89854a5558575dbca711629399fa6fe6cb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10075000000000000000000, + "varSlot": 78239888165174594998191298080608884043653921231507854387719557719396007040083, + "varOffset": 0 + }, + "0x1c9ece23b2a285babcd0cafaa1be016c294d5c35": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 111100985277887867845891307904884193979969883187575674580575906894155998804089, + "varOffset": 0 + }, + "0x6ade2d5d15223f63da3f0e35534cd7559767ebaa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20009000000000000000000, + "varSlot": 25762460774303538271192370559426579116099828261425640014208794939073293113280, + "varOffset": 0 + }, + "0x22322fd3599249ff718f4ec40ba539bf51e92738": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 75751016307246529578032109375860623911027225622378428466162073726717090218520, + "varOffset": 0 + }, + "0x9e7c365810a931ea110a4566087748dc9e54df30": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 68260508323364178870612718082844053912656234830449915503618862425228840902044, + "varOffset": 0 + }, + "0x4161fc7509d528fbbb7110caf01d73b77bb9dff5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 108208106762413917506512749785139119685583646440468002744856374969666923267251, + "varOffset": 0 + }, + "0xc4104c8acb98d0f0268c232df802031fc054ffa3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 277967000000000000000000, + "varSlot": 42413254113076681853967218711976796494452909374267041967946264043259765359299, + "varOffset": 0 + }, + "0xe01321bd0c172a5d93a1eb62e170b40e098f172f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20561000000000000000000, + "varSlot": 76614070618896781160688628255494246502630944457742669994976176234127142935742, + "varOffset": 0 + }, + "0x640af372cb58289f5e358e8ede1cfe02e7f39706": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 116125000000000000000000, + "varSlot": 34274404791836491323698031776401992339392129463170288738909955801405775847867, + "varOffset": 0 + }, + "0x9c0cc8259d206b73b4a3ea0a2296ca5ff69627a1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 21000000000000000000000, + "varSlot": 104639768089847846680055820637201166130141021723684164680310480357534999857195, + "varOffset": 0 + }, + "0x6abc0e5381f1a28655e7c04e2d264f85cde077f0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20013000000000000000000, + "varSlot": 61024094156905107446053635483786045659793945583414552374518598573423442990010, + "varOffset": 0 + }, + "0x1b2c2703771af6f2146f890a986d77a05e691ce1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 114856000000000000000000, + "varSlot": 2488025269534179371551757114683857511364318650781719336458437014973978089631, + "varOffset": 0 + }, + "0xcdd44fa55674a342efc3ef28087eb520877644fa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110526000000000000000000, + "varSlot": 112287203526525596101097771184869890584070453721690428870927530651485363918310, + "varOffset": 0 + }, + "0xd214e552d66dfa346b0c02aa0e97a5e376eaa2ef": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 16662000000000000000000, + "varSlot": 59984706240305102078382565698429515682909367161064004059318499198815456825035, + "varOffset": 0 + }, + "0x5c72b593d73c4240487cb107fdb86c5a82909c4e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 9288462886827016755266568925905630861991176247367267175531350095511747341611, + "varOffset": 0 + }, + "0xc03eb691dda6ac9ac66e592cabe467f33a323d3d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 19795907303705957635068953840161586333959589672072344363512455214564401124814, + "varOffset": 0 + }, + "0xad43f10b4af24dfea8fda0f5213ec7121ccb317d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 15257000000000000000000, + "varSlot": 34414785542475254846296828333578648103111619221782415772229300367876662449917, + "varOffset": 0 + }, + "0xde44451a1cd541b23414c8b93e7da718850f3158": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 118162000000000000000000, + "varSlot": 1156498572788669054521548812206102851750390609611321388623804376893827651395, + "varOffset": 0 + }, + "0x13b2e333bc535e425af536552262cc6417c58db2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 114765919108968747428472675062270644464632115507770218380623770432835195374355, + "varOffset": 0 + }, + "0x7e17e02af81c2d8fa1d5beedd1a4b79ed4afd73c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 17681000000000000000000, + "varSlot": 100887377664673113993567272069349272379213305837245074819916841792319554390437, + "varOffset": 0 + }, + "0xbfcb2ecc27a6837f45a6d157e2af87bb83a6c8ae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11241000000000000000000, + "varSlot": 39641590385709223394511984903260433927754024842917821812129127429549509230841, + "varOffset": 0 + }, + "0x9fc8b5db1d6bef415902e623a8cdd55ae5d1a31d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 19899217923505428201165794973813432410047250149480390184865408666109105508188, + "varOffset": 0 + }, + "0xf181273d920667f9da06468c049dbe6528cbb187": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 75000000000000000000000, + "varSlot": 2504554393371835901851955225876668002948080657935646216540327793425919208704, + "varOffset": 0 + }, + "0x103bd8fe3a96fdb16003e0eba9a22f10feed6212": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 84402311296188000230684188605923485255803708168116805877211332033369144499339, + "varOffset": 0 + }, + "0x7936a9b62809c01dfb0f0f572966b748d90c925d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 66928944921004419621744389382606753492481519381930096160206126020230194359397, + "varOffset": 0 + }, + "0x4db2d474f22e9dd7afdb9aa946819f3dd95cc02a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 32260610002743230848856568578805839373332409802302426506846074920819415817183, + "varOffset": 0 + }, + "0xfd91ba05d15f0be6de71c256afe42c8c6d10c484": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 96241872697879628770167037286771047941204661580877136398739045185774602429040, + "varOffset": 0 + }, + "0x899e923075e8f53da9005e39a76a8c739acadc62": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 96237504567543618634515678989281179357720698875246807597040227639488587211802, + "varOffset": 0 + }, + "0xb8b917c68d875bc8420e74f252ce52b5f8b1a201": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 22693751504580128392546052026698249603068549408075705317937430274478812428828, + "varOffset": 0 + }, + "0xfac8ee3e18a18d9ae90831b1f60d513a6839d7eb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 111368000000000000000000, + "varSlot": 111101110576378679829374127592890396681148409271664335665996215015477956608835, + "varOffset": 0 + }, + "0x14e316d5b9b516318eea4802834fe3dc3ffc891b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 88453666716960600154606996332455057210092473319396914874117631626586918372408, + "varOffset": 0 + }, + "0xc1c7e99e29097687ff3b67913cfd56d180fd3db3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 17244000000000000000000, + "varSlot": 4731448622384467116666929508198043176124282876079860025119196603655180662663, + "varOffset": 0 + }, + "0x4c2296c8a49614bb04dd95035919752ae40796df": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 91696799372814193820958359370580770979311371790830285694084027477482984326608, + "varOffset": 0 + }, + "0x7451eff38382697911f97522aaf6600aeee39714": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 87483428478106752407619752049729102483387438234077015392829661688476794019028, + "varOffset": 0 + }, + "0x9bf6fc4deee9df004f146024b9e8451e6db0df81": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7133000000000000000000, + "varSlot": 30232396299804195510601586840435753534678571651969893699709528079914621006741, + "varOffset": 0 + }, + "0xcc414cd15825b2a92100518d50bf7a332d4cd69a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 2480280989333606163417866948302783252496149886094297239946544825855725768628, + "varOffset": 0 + }, + "0x23dc8d79fb181854f635c7d0c9fb98c548c2f9eb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 99105727143843522668169505750869930734234244798246998195976301526047496389971, + "varOffset": 0 + }, + "0x9893be30f120001bcdece063665df68bbde32ebe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11328000000000000000000, + "varSlot": 46358916880184483989286262830915328274899858518243967533345654743834463760605, + "varOffset": 0 + }, + "0xe07362cd0a2c03451c874e2aab21eb41379d6981": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 84310283513451350523909453736615802502163758814506611743135491723682358938162, + "varOffset": 0 + }, + "0x6129a28da95ae8e1c4eca34ec94e50b45a184499": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000, + "varSlot": 38381329565103617607388166915998827150808365267406114200172253063685781684566, + "varOffset": 0 + }, + "0xf28ade6e82965ea8971ab410eb52c24c98ac551c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 222396000000000000000000, + "varSlot": 42003809653227377980013990895043318099791762297420739651291579173469964160372, + "varOffset": 0 + }, + "0x9a443be63b58fcb706950de6b07019fc04d5cf00": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10368000000000000000000, + "varSlot": 25766292597334394947233654868631171864445640838720861176000299637072910265769, + "varOffset": 0 + }, + "0x58c671858e001f5a0484c33b41c325ad540154c3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 50712880587938237633768305151260376086427290241820800779195705582527264883576, + "varOffset": 0 + }, + "0x9d2acb1756fd36246d3429ee55586e3c15b95ad0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10018000000000000000000, + "varSlot": 77104910828670720685752053273379744955518303727519898623865602649192073975422, + "varOffset": 0 + }, + "0x9ef6d49f4608f46aeb0e12c4cee9309610f3707c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10004000000000000000000, + "varSlot": 37601354371345841000886183996807285505379565768465723430356844376306727307615, + "varOffset": 0 + }, + "0x8b985847b67a64d9e589f316e97b19aa3ea7b293": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 103856380451760268787412171083516436221525208044906193846281812848411130725623, + "varOffset": 0 + }, + "0xb7f038bb5b70b9cb22d2c2d8059f79c20eea21f5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 47991414456002851262795648629616151779750946243599452137805735489073090143605, + "varOffset": 0 + }, + "0x34e7b2c99d6a3f53bd92afd2ee59bf681c9681b2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 34388014034840775886297931779354953430443739487419979143225834201241166916703, + "varOffset": 0 + }, + "0x6aa70f27624231eb8f6a8808c49982c5fb753e85": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 67353171175283899929909790108120368787363777832722093969377399731055635012561, + "varOffset": 0 + }, + "0xb5a690b706701aa5d99056e490e9d5bddde35796": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 27456000000000000000000, + "varSlot": 77689146756600762030001483717916474816867027941899697246082097664283640746993, + "varOffset": 0 + }, + "0xefbd241e1bb5ed01276019749e66709d39cd36fe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 18056633887456160725987930133969868825309689474639518101492363170274515058076, + "varOffset": 0 + }, + "0x59054bdf83100a221aa336bbff645ae96afbed7c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 9046134418485433694089207001003960451709939923103549750293521175306817792459, + "varOffset": 0 + }, + "0x27d0a122e4ee7837fafc704c2fcee0ef5eb1b611": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 25469974059826111956128647085595257910588621958938268448953433345308655867972, + "varOffset": 0 + }, + "0x988af2a5f5eca3a8507bf6260f88e384fb0e8a25": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 23337502425609810843736090985795695478230012046850265216364835380252772810704, + "varOffset": 0 + }, + "0x318914aac4ea746dabb6c5dafeb3dfaefca21675": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20064000000000000000000, + "varSlot": 102702629465834060712563766170507678724407182806259485755670351207336994208954, + "varOffset": 0 + }, + "0xb409cdbecdf3b02dd7260d91d9fd230348f62c63": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 52003884431485167469038567962404959521568953460631789601333610337902030664136, + "varOffset": 0 + }, + "0x8fac6e5ab1b954f6778d715d62d9f9b7ffa033e5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 40587891178002433440052756132204552306607037039632699558865349680957623403534, + "varOffset": 0 + }, + "0x84f79ef5b7e4ddbe03a88be48ed85ef4b4296e7c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 10971988199478427463435161197200314903703327959018765057409901825404581979084, + "varOffset": 0 + }, + "0xc4c6c33414deb227c40ac99437f601a5a97887ec": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1992500000000000000000000, + "varSlot": 95255720301976795955406996020630459875158488352444787626859560789115978860296, + "varOffset": 0 + }, + "0x9831742b173733cd2f5897b67893d9f6da81d279": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 104534622880291420611022317836157125121970021668878413991077775149755216167793, + "varOffset": 0 + }, + "0x75bbd3a00aa1d6568b6fb9ac4e709f2b60042a86": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 110415388185544439387246126780127735607592510604987739413185900389356449101501, + "varOffset": 0 + }, + "0xc17e95941004e7e3e4c915bbb28457680291067b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 17440000000000000000000, + "varSlot": 44204527429277798497946291843114123268752181354647136386544968959268681925802, + "varOffset": 0 + }, + "0xb869c1d0349df49678b389a9546b84432e837a57": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20315000000000000000000, + "varSlot": 16212980056963381978152942046741771213772168121659129030655001195580929667799, + "varOffset": 0 + }, + "0x3f21ddf4f291dccdc9d97fd7fb2ba3a482b6648d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 40000000000000000000000, + "varSlot": 35597590434360605183880907644738881119274772129866039291092528110451529211697, + "varOffset": 0 + }, + "0x8fff33862985f3ba0d2207af80ab59910878f341": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 220000000000000000000000, + "varSlot": 96685705330095484173453279565703999745149199362634143613714773551545226684661, + "varOffset": 0 + }, + "0x94f04e33a7b09fd0e91d5ef8032a9d200833c66b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000, + "varSlot": 17130265441387403607672186356063353297537331149284111236907044549193528292563, + "varOffset": 0 + }, + "0x814a8b3da66a57202f95406fa37ad2b58781dc71": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 46718000000000000000000, + "varSlot": 20747110014189325634119183576507189314810197710241271596429240609006928339145, + "varOffset": 0 + }, + "0xcc9d6a564e63c28fd56257fcfb99445276eb2167": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20531000000000000000000, + "varSlot": 36075090122879923945921814232829413621102630445440594000901981895424336150599, + "varOffset": 0 + }, + "0xf1d562ec203dbafdb92158c46c2a2fc7942bacf9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 45983000000000000000000, + "varSlot": 22448517840528266567846425679354061993520832984809011110088127054245620568076, + "varOffset": 0 + }, + "0x948dafcd1e462ad01ffad0bdc8a57bd40e124b87": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10004000000000000000000, + "varSlot": 70181490695014747580003188674446682775265744166488829057977341241124912626167, + "varOffset": 0 + }, + "0x7539ee06d5c41c83527c009077382034ac987662": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 112292000000000000000000, + "varSlot": 41175215979372493299828340031253290070404526236977660961632018928685352458121, + "varOffset": 0 + }, + "0x7173d6d14fe82af969a973dcefd1a8af5e089afe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 15000000000000000000000, + "varSlot": 22447095083805945743559088496212938432716473484267831337175649653894231070362, + "varOffset": 0 + }, + "0xefa45dcb84f754734dad278213bcc51cac3dcbda": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 330181000000000000000000, + "varSlot": 113612345835579597799562018264238290238199095397483300054055954171768188155410, + "varOffset": 0 + }, + "0x03b0981fad673361bcee8189662b3bb2f11c72e9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 72113934097380201542757349944566935944677410174602038095076486648153550412115, + "varOffset": 0 + }, + "0x08bc26d7f24712d6aaa861228be23bc016755db2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50120000000000000000000, + "varSlot": 98730082265950567031552926331753139534522051626169149629761841061160079371033, + "varOffset": 0 + }, + "0xee2db554519d9e28d9423c197393d04fd74b06b5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 69692646650633476753155472914510574947518973538216095318234323639416252515401, + "varOffset": 0 + }, + "0x880cab7af1cdf6635bf2a1582eedcacb2107ad33": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 112300173313445264311471800949656885218256503685012536610550299768290916806305, + "varOffset": 0 + }, + "0x59ecc0a8a47760f66b38d000d09a7b55857f86d3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 17136000000000000000000, + "varSlot": 62547625088521392794518403116551793806549667772923245162619518492332134170253, + "varOffset": 0 + }, + "0x04dc86bdc8df8c0a1cd19f514d237f8b436911c9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 113585163885922591285523793540031356847910616692330251992783336486017482078948, + "varOffset": 0 + }, + "0xc56555dcfd70f9b0e0d2028f416481b3749dc626": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11542000000000000000000, + "varSlot": 64806690409947423588124221377574266397721441098385079349666868132362364904952, + "varOffset": 0 + }, + "0x2d2aa5157a0f8910b03154b86e50a0ff56bc6475": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 17890000000000000000000, + "varSlot": 29490619518955587182731790668624249125075650707567178955565521237169174581974, + "varOffset": 0 + }, + "0x39b3440615f303c9f7aa8a58f918024fc2258a03": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 69362837515968106600876480577726153786827652095688748905579282072249614254807, + "varOffset": 0 + }, + "0xcfa6e15128b07b4b4d0334a8b2ba580a294c84e8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 23421000000000000000000, + "varSlot": 80516491436118446852231187231017103120215471702855394685104661591410572602643, + "varOffset": 0 + }, + "0x6b434999c699321c63a2f3168ce4df51fa7613d1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5500000000000000000000, + "varSlot": 100152979675947024111176065981567379229293436186856540709058009723400359881733, + "varOffset": 0 + }, + "0x90cea48973200f399facd1318d27b2f59a60adfb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 34423061284779735875680446714099189217850603757744107496107266851034335533331, + "varOffset": 0 + }, + "0x384dbd301adff675e0fb6b491ad08e2ddde2dbfe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 21595000000000000000000, + "varSlot": 38179634025519819700361094488903703864524658205954556123552492242806554335755, + "varOffset": 0 + }, + "0xe4e8bb5cc4048c4e705e438194a8fc7139e13ada": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 220000000000000000000000, + "varSlot": 11709324672791185260345267127345016200506108501087913225682307881380150698922, + "varOffset": 0 + }, + "0xf5e533661e7137ba01fb6a0d109ba9c3d83e72f7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10017000000000000000000, + "varSlot": 101460853495749067897186598534740258955123233355440986706186639156603788230593, + "varOffset": 0 + }, + "0xb4817a2ac3079cba1776121f284942ba6618349a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 220000000000000000000000, + "varSlot": 6460412385283157482642180085608576016519287721933224702083295110033691099645, + "varOffset": 0 + }, + "0xb1e851afa81801f8386bbe97fa2a7a36d7cfdf68": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1099198000000000000000000, + "varSlot": 105714680869826456643567522548631698634250007144524341325639245719417357249718, + "varOffset": 0 + }, + "0xf441576ed1d718182fa1d1b8cd6033b23cad809c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 67994855317692179334014927544250898273081094801356310971581749834237967209315, + "varOffset": 0 + } + }, + "varSlot": 3, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "PhunToken", + "varName": "_allowances", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": {}, + "varSlot": 4, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "PhunToken", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000000000, + "varSlot": 5, + "varOffset": 0 + }, + { + "contractName": "PhunToken", + "varName": "_pausers", + "varType": "Roles.Role", + "varBytes": 32, + "varValue": [ + { + "contractName": "PhunToken", + "varName": "bearer", + "varType": "mapping(address => bool)", + "varBytes": 32, + "varValue": { + "0x2e4c840e83f0348f94a9c57615255e07eafdaa41": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": true, + "varSlot": 2508857488552589815549734981092775641501442083165102807069783826794948354635, + "varOffset": 0 + } + }, + "varSlot": 6, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + ], + "varSlot": 6, + "varOffset": 0 + }, + { + "contractName": "PhunToken", + "varName": "_paused", + "varType": "bool", + "varBytes": 1, + "varValue": null, + "varSlot": 7, + "varOffset": 0 + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json new file mode 100644 index 0000000..df0dc30 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json @@ -0,0 +1,271 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000000000000]", + "msg.sender != 0", + "spender != 0", + "ori(Sum(allowed[msg.sender][...])) == 0", + "ori(Sum(allowed[msg.sender][...])) one of [0]", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "ori(Sum(allowed[msg.sender][...])) <= tokens", + "ori(Sum(allowed[msg.sender][...])) < tokens", + "ori(Sum(allowed[msg.sender][...])) != tokens", + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) >= ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) <= ori(allowed[msg.sender][spender])", + "tokens >= ori(allowed[msg.sender][spender])", + "tokens > ori(allowed[msg.sender][spender])", + "tokens != ori(allowed[msg.sender][spender])" + ], + "postconditions": [ + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of balances[...] is one of [1000000000000000000000000000]", + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000", + "Sum(balances[...]) one of [1000000000000000000000000000]", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(Sum(allowed[msg.sender][...])) <= allowed[msg.sender][spender]", + "ori(Sum(allowed[msg.sender][...])) < allowed[msg.sender][spender]", + "ori(Sum(allowed[msg.sender][...])) != allowed[msg.sender][spender]", + "ori(Sum(allowed[msg.sender][...])) <= Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] == tokens", + "allowed[msg.sender][spender] >= tokens", + "allowed[msg.sender][spender] <= tokens", + "allowed[msg.sender][spender] >= ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] > ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "Sum(allowed[msg.sender][...]) == tokens", + "Sum(allowed[msg.sender][...]) >= tokens", + "Sum(allowed[msg.sender][...]) <= tokens", + "Sum(allowed[msg.sender][...]) >= ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) > ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000000000000]", + "msg.sender != 0", + "to != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]", + "ori(balances[msg.sender]) > 0", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens", + "ori(balances[to]) != ori(balances[msg.sender])", + "ori(balances[msg.sender]) >= tokens" + ], + "postconditions": [ + "elem of balances[...] is one of [1000000000000000000000000000]", + "balances[to] > 0", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000", + "Sum(balances[...]) one of [1000000000000000000000000000]", + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) > balances[to]", + "ori(Sum(balances[...])) != balances[to]", + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "balances[to] >= ori(balances[to])", + "balances[to] > ori(balances[to])", + "balances[to] != ori(balances[to])", + "balances[to] >= tokens", + "balances[to] <= Sum(balances[...])", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "ori(balances[msg.sender]) >= balances[msg.sender]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "ori(balances[msg.sender]) <= Sum(balances[...])", + "tokens <= Sum(balances[...])", + "tokens < Sum(balances[...])", + "tokens != Sum(balances[...])", + "balances[msg.sender] <= Sum(balances[...])", + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[to]) <= ori(balances[msg.sender])", + "ori(balances[to]) < ori(balances[msg.sender])", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[to]) != tokens", + "ori(balances[msg.sender]) > tokens", + "ori(balances[msg.sender]) != tokens" + ], + "falsified_postconditions": [ + "balances[msg.sender] > 0", + "balances[to] <= ori(balances[msg.sender])", + "balances[to] < ori(balances[msg.sender])", + "balances[to] != ori(balances[msg.sender])", + "balances[to] == tokens", + "balances[to] <= tokens", + "balances[to] <= balances[msg.sender]", + "balances[to] < balances[msg.sender]", + "balances[to] != balances[msg.sender]", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[to]) < balances[msg.sender]", + "ori(balances[to]) != balances[msg.sender]", + "tokens <= balances[msg.sender]", + "tokens < balances[msg.sender]", + "tokens != balances[msg.sender]" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "elem of balances[...] is one of [1000000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000", + "Sum(balances[...]) one of [1000000000000000000000000000]", + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.json new file mode 100644 index 0000000..6df9569 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.json @@ -0,0 +1,398 @@ +{ + "variables": [ + { + "contractName": "TetherUS", + "varName": "name", + "varType": "string", + "varBytes": 32, + "varValue": "TetherUS", + "varSlot": 0, + "varOffset": 0, + "byteSize": 8, + "toReadSlot": 0 + }, + { + "contractName": "TetherUS", + "varName": "symbol", + "varType": "string", + "varBytes": 32, + "varValue": "USDT", + "varSlot": 1, + "varOffset": 0, + "byteSize": 4, + "toReadSlot": 1 + }, + { + "contractName": "TetherUS", + "varName": "decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 18, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "TetherUS", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000000000, + "varSlot": 3, + "varOffset": 0 + }, + { + "contractName": "TetherUS", + "varName": "balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xd642e29aa953ce5d4400e2340a9168c4531dc0ba": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 722386228000000000000000000, + "varSlot": 25417086064072908548428838409887664068694493044019029220432124173888055318036, + "varOffset": 0 + }, + "0x775149933e708d3018d9dd1a846bc4e9a20348f2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 300000000000000000000, + "varSlot": 83138907137727920369392297599013590057013368659191972916295054573267511973052, + "varOffset": 0 + }, + "0x17d091ade593c7404f558ffb21102fa96e357164": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 1277833726145078418616748641998593903238060513687223355782124959360840892637, + "varOffset": 0 + }, + "0x9c2f43858fbd946b5189803488f0d8e35a608d4f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000, + "varSlot": 50085422054637969822308367172174666104597496982538338153393264414677487178419, + "varOffset": 0 + }, + "0xa063c112bf45514600f96598ea525e3c47d2ce40": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 29349990000000000000000000, + "varSlot": 58520532756221858718185994072744070314838704796509176520196861686567427083656, + "varOffset": 0 + }, + "0x62651b84f48f4e9f0e90624c50c7551997abce05": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 37014695000000000000000000, + "varSlot": 44380613330561832701099347940604441587086411976973832713296107093276512934447, + "varOffset": 0 + }, + "0x03c5990978b622a6f89730514aa6f05bdc8230ef": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20800000000000000000000000, + "varSlot": 44150299601842591568458102214866860863650232804766388651580829929838483150798, + "varOffset": 0 + }, + "0x09b13880536e931706344cb172527a04b0427171": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 84500000000000000000000000, + "varSlot": 82208744349020675905472167722149341436963743955144187915481760577189617557058, + "varOffset": 0 + }, + "0xa9a9abff270ab1dbcf40ebfe3fa95a84059e344a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 28000000000000000000000000, + "varSlot": 96442370134831313306716506848401723093536314008324958766532372390106644535583, + "varOffset": 0 + }, + "0xe42d938dffeff48266eb22d3d5a365470c9312a8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 65000000000000000000000000, + "varSlot": 27836841320135716487340022656084618196832282767045441106782094351207080631017, + "varOffset": 0 + }, + "0x3389eac0f8733f255f50161cb56574026b66452f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 30653484765064557651888681785994432304989859349618271173046227776020357668744, + "varOffset": 0 + }, + "0x886d7c478228ff8df2a8afb10084aedcf514f6fa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 299500000000000000000000, + "varSlot": 65075790455149552993172716843389340347436600618090447698657710357028662853091, + "varOffset": 0 + }, + "0x1266b86d05a75e4bbb2a3adf44e1619505ed7ab6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1813272000000000000000000, + "varSlot": 103199620687771093639062458823214185450114267429994033446609590646167814738618, + "varOffset": 0 + }, + "0x8b10a92c36ea14810d0e6316d6b50c8e2e664732": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 8650000000000000000000000, + "varSlot": 23663038089949439401529028708662253677504772160521469403086981575486609055019, + "varOffset": 0 + }, + "0x4600914db9fde6c71c2289879375e61efdbb8bcb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 57047643556518422156622487685613273942948525193604810224338651108372438786589, + "varOffset": 0 + }, + "0x17a56827617328a3ea4210f4ccab3df90be06c53": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000, + "varSlot": 18846704247250266589880512388580009371710196304823097608679448964696538429652, + "varOffset": 0 + }, + "0xedde6690f66fd761ca07e769cc7cf2e573222dfb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200000000000000000000, + "varSlot": 51341838535855891570448660021930504718827241651965137582283671361692047522890, + "varOffset": 0 + }, + "0x9739986eeb85019f9ae75ac0adb20e177949548c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 76855233315353314458817369940015914021763736721256658020444880688422339102722, + "varOffset": 0 + }, + "0x9bd1182947a1f6bad284965981ae5a652cb4997a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000, + "varSlot": 9009387553076328692555064020128716724541263138716910147908471830910115855287, + "varOffset": 0 + }, + "0x78ed180aa1156c264ae24527ad94d294f3524610": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000, + "varSlot": 9144665739755733728595114001925992911186466248102608986705538984252200125493, + "varOffset": 0 + }, + "0x37541711b9b5281c95e5232f78dee8696917867c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000, + "varSlot": 35182380077451882741792394747990733871564913270133035291547317109698756561463, + "varOffset": 0 + }, + "0x6962f81a82f7d54cee1d20cf9a8ef38c38b1d27f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1596371000000000000000000, + "varSlot": 35917615507514445391045779056428700179460922848630598906348513232752108043782, + "varOffset": 0 + }, + "0x94158d6d0d55fe822fb15c27fa602a3c42ed3d7b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 300010000000000000000000, + "varSlot": 43404077256043202437386109144928119774177695000506480847713377838259148174031, + "varOffset": 0 + }, + "0xb0db2ee31ec21682a6c605281d43398a8cd61d0b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 103629000000000000000000, + "varSlot": 56405169101757366589488789746952952199493423952746561035362593576515258885761, + "varOffset": 0 + }, + "0xe7619886a514b99c1002f7c54b8ea9ddef2aa6ef": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 180295000000000000000000, + "varSlot": 31544589618126837230801355019933058317195297676158562044111280215664801746657, + "varOffset": 0 + }, + "0xecf9a2dcc502f1c52f8b02bdb35772a8ad778fe2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000000000000000000, + "varSlot": 47796388330299733503082540102956408720368750772909444397006587470767309935511, + "varOffset": 0 + }, + "0x3c7c55227f4c5cd4cf266ce3e98589a5c5416f1f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000, + "varSlot": 49508620595728503408274656558702429812615687937917600537037591939923466958337, + "varOffset": 0 + } + }, + "varSlot": 4, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "TetherUS", + "varName": "allowed", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": { + "0xd642e29aa953ce5d4400e2340a9168c4531dc0ba": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 46525531360332391214218291719378411438726022966784220092474255158844612737048, + "varOffset": 0 + } + }, + "varSlot": 76732495952179952404832967026613024802887626409700732715677996187256324960113, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + "varSlot": 5, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json new file mode 100644 index 0000000..39cbf85 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json @@ -0,0 +1,254 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "ori(decimals) == 0", + "ori(decimals) one of [0]", + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "ori(Sum(allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000", + "ori(_totalSupply) one of [10000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000", + "ori(Sum(balances[...])) one of [10000000]", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "msg.sender != 0", + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) <= tokens", + "ori(allowed[msg.sender][spender]) < tokens", + "ori(allowed[msg.sender][spender]) != tokens", + "ori(Sum(allowed[msg.sender][...])) <= tokens" + ], + "postconditions": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of balances[...] is one of [10000000]", + "elem of allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]", + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "decimals == 0", + "decimals one of [0]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000", + "Sum(balances[...]) one of [10000000]", + "_totalSupply > 0", + "_totalSupply == 10000000", + "_totalSupply one of [10000000]", + "allowed[msg.sender][spender] >= ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] > ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] == tokens", + "allowed[msg.sender][spender] >= tokens", + "allowed[msg.sender][spender] <= tokens", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(allowed[msg.sender][spender]) <= Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) <= Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "Sum(allowed[msg.sender][...]) >= tokens" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) == 0", + "ori(decimals) one of [0]", + "ori(balances[msg.sender]) > 0", + "to != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000", + "ori(_totalSupply) one of [10000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000", + "ori(Sum(balances[...])) one of [10000000]", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "msg.sender != 0", + "ori(balances[msg.sender]) <= ori(Sum(balances[...]))", + "ori(balances[msg.sender]) != ori(balances[to])", + "ori(balances[msg.sender]) >= tokens", + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens" + ], + "postconditions": [ + "elem of balances[...] is one of [10000000]", + "balances[to] > 0", + "decimals == 0", + "decimals one of [0]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000", + "Sum(balances[...]) one of [10000000]", + "_totalSupply > 0", + "_totalSupply == 10000000", + "_totalSupply one of [10000000]", + "balances[to] <= ori(Sum(balances[...]))", + "balances[to] < ori(Sum(balances[...]))", + "balances[to] != ori(Sum(balances[...]))", + "balances[to] >= ori(balances[to])", + "balances[to] > ori(balances[to])", + "balances[to] != ori(balances[to])", + "balances[to] <= Sum(balances[...])", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])", + "balances[to] >= tokens", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(balances[msg.sender]) <= Sum(balances[...])", + "ori(balances[msg.sender]) >= balances[msg.sender]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "Sum(balances[...]) >= tokens", + "Sum(balances[...]) > tokens", + "Sum(balances[...]) != tokens", + "Sum(balances[...]) >= balances[msg.sender]", + "Sum(balances[...]) > balances[msg.sender]", + "Sum(balances[...]) != balances[msg.sender]", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[msg.sender]) >= ori(balances[to])", + "ori(balances[msg.sender]) > ori(balances[to])", + "ori(balances[msg.sender]) > tokens", + "ori(balances[msg.sender]) != tokens", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[to]) != tokens" + ], + "falsified_postconditions": [ + "balances[msg.sender] > 0", + "balances[to] <= ori(balances[msg.sender])", + "balances[to] < ori(balances[msg.sender])", + "balances[to] != ori(balances[msg.sender])", + "balances[to] == tokens", + "balances[to] <= tokens", + "balances[to] <= balances[msg.sender]", + "balances[to] < balances[msg.sender]", + "balances[to] != balances[msg.sender]", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[to]) < balances[msg.sender]", + "ori(balances[to]) != balances[msg.sender]", + "tokens <= balances[msg.sender]", + "tokens < balances[msg.sender]", + "tokens != balances[msg.sender]" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) == 0", + "ori(decimals) one of [0]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000", + "ori(Sum(balances[...])) one of [10000000]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000", + "ori(_totalSupply) one of [10000000]" + ], + "postconditions": [ + "elem of balances[...] is one of [10000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000", + "Sum(balances[...]) one of [10000000]", + "decimals == 0", + "decimals one of [0]", + "_totalSupply > 0", + "_totalSupply == 10000000", + "_totalSupply one of [10000000]", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.json new file mode 100644 index 0000000..9a9d2d6 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.json @@ -0,0 +1,3281 @@ +{ + "variables": [ + { + "contractName": "PIXIUFINANCE", + "varName": "name", + "varType": "string", + "varBytes": 32, + "varValue": "PIXIU FINANCE", + "varSlot": 0, + "varOffset": 0, + "byteSize": 13, + "toReadSlot": 0 + }, + { + "contractName": "PIXIUFINANCE", + "varName": "symbol", + "varType": "string", + "varBytes": 32, + "varValue": "PIXIU", + "varSlot": 1, + "varOffset": 0, + "byteSize": 5, + "toReadSlot": 1 + }, + { + "contractName": "PIXIUFINANCE", + "varName": "decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": null, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "PIXIUFINANCE", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000, + "varSlot": 3, + "varOffset": 0 + }, + { + "contractName": "PIXIUFINANCE", + "varName": "balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xd597f9d44d2e73b0a786d5778cc929ed8f9cc43f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 95428034698034222313105852911866057722375349040565499808297450411852368513656, + "varOffset": 0 + }, + "0xf105639f4e66f3f02b92df0fd11623a282733061": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000, + "varSlot": 47242563810726181192266017404838756135007380751388808342019365738867593358338, + "varOffset": 0 + }, + "0x7cd9aef661d048656482e754f78c8f09c5d1feae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 21162, + "varSlot": 115121503888511500274295440659491867295781615990021611110754182330526467675924, + "varOffset": 0 + }, + "0x487ac298dae455e56e5fc312f15d77beef7311eb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 96250, + "varSlot": 5383244866234631196477338704645914807994536609047349175254067015309758183807, + "varOffset": 0 + }, + "0xf7782e3f373188f6d61a603e7de977c0fc9a307c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 47472340402878832901811802600727351519222295592069390214440843305408999613698, + "varOffset": 0 + }, + "0xd551234ae421e3bcba99a0da6d736074f22192ff": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2400, + "varSlot": 34320003700658762703967176687250080840854106077502738047266950919236693693019, + "varOffset": 0 + }, + "0x8151a296f98ca824b3acf6a7a8220448bcd8b32f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20, + "varSlot": 2382679214351590235419698222163642890120755158772824331889387026573781347944, + "varOffset": 0 + }, + "0x6035bb4dd706b3102558ac5ed33c38ca5fd068bd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 91072147407581725526669668877833592801695158218767947566064191378077118518789, + "varOffset": 0 + }, + "0x55e0d5189ebdc1195b6326d45df8106d79896103": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 21068, + "varSlot": 52929820816957116209102475562613706573570607071520648695027523792023385776545, + "varOffset": 0 + }, + "0x8af8ca999b4f7f4d4c9745fd5734765ca4ca8b1c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2400, + "varSlot": 28332847955335240658533258509988365966082749411789164978480895555825069722734, + "varOffset": 0 + }, + "0x766a6caab3ee2540e71bd687adadef502412bc90": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 98668562873381281994348559812750568224850270489037870983015842168778594154157, + "varOffset": 0 + }, + "0xb2532c501367ce9c24a6f0298496a61a5bdf7e2d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 10549057971856940444059283322021639563167845788402533948255061059069179507283, + "varOffset": 0 + }, + "0xc6d03ff35d172af4672f969e5872e1f475c63d7c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 73950, + "varSlot": 44000520370700557941458655418160851462984967572855182416849799662027406842997, + "varOffset": 0 + }, + "0xa4fb56695fb5b9aae8f4adbf8eae0b3d93fcddd0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 244, + "varSlot": 81053414412883046632518323424790175444695607743324530939463613204181047234144, + "varOffset": 0 + }, + "0x27ecf9196b03b054a75bc085ebea81fb7024f20a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1880, + "varSlot": 67568310940027575123524399718090386966731509951093959542677433392574605174479, + "varOffset": 0 + }, + "0x9634c5a3ae3abe0ce2adab817dd511ef1ce4e713": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 67228287163503777821742292766035421038221753236470688307267378947973110320733, + "varOffset": 0 + }, + "0x25c63e1e4f1b1fd24ae27cb84af4160701793e93": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 16350, + "varSlot": 107003632139029896010659327121714080605227945079893319571852851756216967510082, + "varOffset": 0 + }, + "0xd0a670000aff3adebd6e724d8442499448dcb5f4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10050, + "varSlot": 60653674737257560436030304324163269012716586482959767574337601079455592524527, + "varOffset": 0 + }, + "0x6aef609aea5968d4958cf88f9bf4ccdc009a45ae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6750, + "varSlot": 25731328960844652100133401274329297263091558472005672869809792239647666667470, + "varOffset": 0 + }, + "0x078ddd728aad7ae18e7e9aea65d8882d4bceac5f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 210096, + "varSlot": 75694325786237012409698948618374576337154567237210343303100202556262555649882, + "varOffset": 0 + }, + "0xb91c25970f5e80bb67988d5b9d2099ce10093fae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 17033621829827655443135682572512956105840216357503998848611590234013239869439, + "varOffset": 0 + }, + "0xec33da86cad71fdfbb326846bbf0166fd5f267a4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3800, + "varSlot": 65189376512430510080151882505977411021174062140928048385681497580328100337439, + "varOffset": 0 + }, + "0x5a96becfa7446d5bfee1d0af1ea18a4d3e3a0182": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3506, + "varSlot": 14950434286319000649902898017674569396756760308707166062744586389121040054129, + "varOffset": 0 + }, + "0xc87d7e2012eea895ea59ce65472d61d890d1be99": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 105663578124940478674078787515337774024406844759986678249955425219841558282283, + "varOffset": 0 + }, + "0xfb278a98a40cff7bfaa35f814208af9cc2075280": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3373, + "varSlot": 81983192757969670532173500098677795235913953827819463602240899755541153926920, + "varOffset": 0 + }, + "0x54d4d7c6edb1a9e242d11abfd7ffdeac6b796f87": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4000, + "varSlot": 82119093422422669870798611123101628174150747738567853128283314900633093416235, + "varOffset": 0 + }, + "0xcce6490c4023096241ddbfb556b8fe461e339f01": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 71962419781326692941907985330505334537110102438343349873771571254523925163659, + "varOffset": 0 + }, + "0xb3dd1a1863c88c8a7fca16543314740a0c5d39e2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2740, + "varSlot": 1355499071715952441247943358724803106828165538472604792391279722171267752312, + "varOffset": 0 + }, + "0xeac62501e21f12c74ca4ea297e9ccf040b490b3f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 115635828262592163893506045659812237525899963933146339937333102158297574252529, + "varOffset": 0 + }, + "0x76ad49777f17eb8c570cba9f4d4fad176b5d1c1f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 102016204538686140518366778962460412986350819331950046142760107174840652132894, + "varOffset": 0 + }, + "0xd1f277014ac58f1ae44e0396bab65a0f3756a51a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 3269983400382449672266613978092186537533601223403565421907964516180311259682, + "varOffset": 0 + }, + "0xdc3b14ab59156d3dfdbaf66053ad64152c9bb32b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500, + "varSlot": 112122344886808707099802904599914176329148964551349026798680039873297794155636, + "varOffset": 0 + }, + "0xcb91b29faaa258e9041fbc203c24bca4fee0729a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6260, + "varSlot": 40547684247260628718870151311909326868189568808075199452150224093020713963693, + "varOffset": 0 + }, + "0x721f5fdc07ac3d07b09137e543523e3577ebe5e8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000, + "varSlot": 47983149390317686998042532858637787293663022240591392914881047328157677343213, + "varOffset": 0 + }, + "0x35878a811fe7744e66ccf9155203abcc1aeb717b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 779, + "varSlot": 10777789899574608668117794593943973661754412290569502042653304871075921195940, + "varOffset": 0 + }, + "0xa2f75e548662b9890c581170696007dc309e2164": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 40, + "varSlot": 55708226823394184963758582980770933694587094145838629853328182127506862076778, + "varOffset": 0 + }, + "0x58f62283d5966f59903c4d43d13d7859f6d8f402": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 48453341227531159748353152005394006649716691178491821462540438807097190884793, + "varOffset": 0 + }, + "0x48408423fec97e6acb3ab45bf39546346098f391": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4400, + "varSlot": 9871984569108419121928770890882874376077800354149878638563028533429513171257, + "varOffset": 0 + }, + "0xb4346bb3b61700d73207376c8cd53424dde23673": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200, + "varSlot": 49040617930570322857020168098595911762901126983099485476776202635662450766335, + "varOffset": 0 + }, + "0x2f925b1fe979e2ac8336d3940ffb21176e0793ba": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200, + "varSlot": 110967921066715120474896366491871597727795778289864214310088516596845371417821, + "varOffset": 0 + }, + "0x629a030cf8cc6b08126d7cab4c59d0e69274ea19": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 160, + "varSlot": 92088102594509928735792694015858836404439820569946732873835538784876095235214, + "varOffset": 0 + }, + "0x5732830935e9aee132137e997c2f82450ec0969a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 480, + "varSlot": 9141761090881764875096750682433352950438051529564982371510241919793358519544, + "varOffset": 0 + }, + "0x4ad8a010762b3c209b57839e1e4e764d0c419bef": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 600, + "varSlot": 101809182479496070793110113847568055741369064049858764275336784660012047883857, + "varOffset": 0 + }, + "0x2a04a72c6d611cf51f3075649d8d7a1785b068fa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200, + "varSlot": 9286482428721080749826520847598561793160870968323537735676128371696974369889, + "varOffset": 0 + }, + "0x8fdee911bcf68f2cd5022099ebfb16a8369450a5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 6832894377711167085616823583625405309106928087975551521119035607680540688814, + "varOffset": 0 + }, + "0xfd044c0ca2878a9fb7e3998270d5eb9587ff8056": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5425, + "varSlot": 52035046148002015256700927720345422437622849578408540039422729734154800892508, + "varOffset": 0 + }, + "0xee1b99c9e2200988d32d8de862ac86be7341893a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 68864499941853225934964413098939714165219217302170068149015954217416335504832, + "varOffset": 0 + }, + "0x4fad5e956c0ff1d3325c2440b0f40ccc325d20e2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2400, + "varSlot": 110098897618681939042341848951166722508173656290827399872801152021147125372831, + "varOffset": 0 + }, + "0x6b85179641b3516ccc6fc493bd06e5a548ee4be2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 250, + "varSlot": 4575203716809981255335950570706700347878787008093578473323312006992844445577, + "varOffset": 0 + }, + "0x8e3edeedc682490b688276e693440915a49cba7e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5250, + "varSlot": 50897592056795835946108627384805527593578993485205120915921635698140682525140, + "varOffset": 0 + }, + "0xd991e680222477d057ee81a9d33a471d5e606889": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2600, + "varSlot": 90193485593551118899972848117047504283376835174302323371591047042072385317898, + "varOffset": 0 + }, + "0x2076f057a72d4c1cf2cb30a3f28c0e0172bbbfd1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 13211903070656059903446136267015262239390158189301132233017922383157718534480, + "varOffset": 0 + }, + "0xbbe3252f3d87b0421c7453f0dfc75a91ff173515": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000, + "varSlot": 722851543304315879372744693969175382083563839797477373402558338682199126881, + "varOffset": 0 + }, + "0xc35fa83033368ed8ca31c71734ef94027250ac7b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1500, + "varSlot": 29533985277665589178168001017855673955488027633732949283049836028131543057874, + "varOffset": 0 + }, + "0x67f0ddc283d57522ace07cdb1f6df07952392adf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 97190171235678072326001958405350989259813149857845143305003797776822692154013, + "varOffset": 0 + }, + "0xaed3819f412d0b7685b64c9be35b7c166bea9059": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 85888075614899598489142313328441564395150475604657010508141437516480297829465, + "varOffset": 0 + }, + "0x98a41c823f2da8fac7352d260b28627aa65c6b4d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200, + "varSlot": 72359403300052473304356527548831959381937468844166499468419488690249045327896, + "varOffset": 0 + }, + "0xbc5ee547b9dd6a5410ef046e2e98b8b57ae8c147": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 46146826160891785665861686025291471598871523898263163876290905869667638430983, + "varOffset": 0 + }, + "0x1396e25069d2bf16b2cfd2a6dedd40543889e82d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 29427472023971555277497802648792223032959712052759721446081703439133577122134, + "varOffset": 0 + }, + "0xc6e66729652bb8a8218d28d3b662befe94297e45": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 750, + "varSlot": 114139353488026771654365866450115801062937269732818217295918865375347088491107, + "varOffset": 0 + }, + "0xcc871bbd44977b4d5373919ce1ea9bb76065a6ff": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 75, + "varSlot": 65486770483135266262518697834136741320090844934392594820678343131471986127152, + "varOffset": 0 + }, + "0x87352b272b271ed66ad8ad3a21bb1eafee2a9868": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 211, + "varSlot": 28015588449853704658160049364579076912102855432041741072128979391602173289318, + "varOffset": 0 + }, + "0x76151abf6188c6aa900bee898d8ad545fd58bd5c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25, + "varSlot": 55056459169510695273895823224202149544510939840838722571580282677103718561452, + "varOffset": 0 + }, + "0x1d16bb67d850afd181adc3166072aed13fd558ab": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50, + "varSlot": 18604641940832449533134566469441016603895849164011435323626203165773977978704, + "varOffset": 0 + }, + "0xe90ff72b4599c837442c2c982379e731c271b26d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 74, + "varSlot": 96863404530309806692882930186646259834283173314961327392115738763510234826614, + "varOffset": 0 + }, + "0x9bd5287cd7aa94e62cd8a7a16ca81b08c6ecbf52": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 300, + "varSlot": 82354411166073259981967276802541731995440568682363189418167288003951051337459, + "varOffset": 0 + }, + "0xcee99d0d24b5306667fe420fcda8d2fdae4fcf30": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 155, + "varSlot": 95206683348041727459931815762956035227925289536581271850471249516594690006740, + "varOffset": 0 + }, + "0x600f3b299c4fbf65e30115f6de1c3b7667a455cc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000, + "varSlot": 21256460942654396491499796949834407568412588321449773035301314491977619261078, + "varOffset": 0 + }, + "0x801a30b8aca2b97c43ede3082afa282c478779c0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000, + "varSlot": 21077766515221064860334871423438006192648660956930790188011170218252106653415, + "varOffset": 0 + }, + "0xc7c2de522c91d8e59988ed3a26894bd3bc55cc5e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 83891956111565585953245799492212884251414283932126177209985835140852947929022, + "varOffset": 0 + }, + "0x3e0f848f452402528de614bcd743f8a8cec4bc2f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 91370592482612526756665612714813016531050913948496730605360587701808716855321, + "varOffset": 0 + }, + "0x500086522554420964c801430560fe2b9cd7591f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 86182118597767369298827932740432589097016621502122425665866113101409476931336, + "varOffset": 0 + }, + "0x4757d03fb8e160dc671ba1aa9677e4ee42d2543c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 21040135094032721649237668452422073031974166403498975088401023732074590340567, + "varOffset": 0 + }, + "0x5a35e7576a5542ccb8af1f64a190cb2c24abfb29": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 39274194594512104104928902745070916787141054914841554052549789797927110968657, + "varOffset": 0 + }, + "0xbd5bada3299b48a722ceb585dc6184b342df5fa4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 13000, + "varSlot": 67286907159342592220273722725697414098948066837978927208952695299016622729973, + "varOffset": 0 + }, + "0xd43b233f1d6fc714f7ec014c49e22ac409665bb5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 41044821372489540688126777890776792157970015535479838277192656376701230544845, + "varOffset": 0 + }, + "0x00b692b62c35ba5ed2cb1e90b0211c0cc7c2904d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 25580497482055328487878370279981533375969344276823338130881449976725180813874, + "varOffset": 0 + }, + "0x7d9c3442094e6988d3c51be87f12ab22c32e24d9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 540, + "varSlot": 78384732153571522352529760542579955035787406979143633808347092727042695001516, + "varOffset": 0 + }, + "0xd123d6def7a9c86a71cb4ab0e3d6eb1d47a3d4b4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 83489433412345582108365830095783468718441158561137504912242178844096047289951, + "varOffset": 0 + }, + "0xd320d00f49f4746d31303f578f8b4240ddaa3ac8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 639183532160574292593389808403535845881297942445041461686579286880806829545, + "varOffset": 0 + }, + "0x8a6e83fad1520202699586b5bf39de77a9d572eb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 42500, + "varSlot": 49432999661052598738573085312915069561383326552919730623418889049876341227496, + "varOffset": 0 + }, + "0xdabf1c47aab2aebe973b2a062376110b9c7da36a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 89213783267285920774768082060282695006999374166707331789961800133930539588130, + "varOffset": 0 + }, + "0xfb414306674fce2108272cba98ab2205d2429f3a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11600, + "varSlot": 67342287291807335993485450910891305620810772616331758086522838146857498278573, + "varOffset": 0 + }, + "0x33763262b9fc6b988a53316fa280795698850338": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50, + "varSlot": 94335076848942703395861599052143310909372673275483787967858571983039049861477, + "varOffset": 0 + }, + "0x0426c0cd28ce5f048b371415b715b9938a25155f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2300, + "varSlot": 40533215418853376687594915535299141359567915579343657214332588198502742405461, + "varOffset": 0 + }, + "0x27980fb802aa9d74122777865931d9dd7d1fa461": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 69132338167912400499435708954691689217348038214226596268960642349148273559512, + "varOffset": 0 + }, + "0x4abc354e530f3dc216c179829c28fc67f04ab3f3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 10638975636982123081637210050957698605569877293002147636139170458010280722959, + "varOffset": 0 + }, + "0x740ae2d472776323602a2af76b18bc0489220d04": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1400, + "varSlot": 57588400624815988527029968775542103905110140564091137605298086130112576982656, + "varOffset": 0 + }, + "0xe0783e01692f556874a850f4e6b7afacc11907e6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 600, + "varSlot": 33490489250629160013847237134430634668870407638627831255271362130603796126147, + "varOffset": 0 + }, + "0x62ec2197c713b8ddfc516307c4fb7851d86abe0f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1010, + "varSlot": 23434191089474274903957247432166042286910164203388073100026517106348768417997, + "varOffset": 0 + }, + "0xf9c01f592a39cdb547ba2aa432acf7535146605f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 996, + "varSlot": 93994857275195948725268638384138849217223354957070904220125205934233473389850, + "varOffset": 0 + }, + "0x9fc65e5c17c9ba8ad0349d107190139852c6228a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 97, + "varSlot": 57396184559817921675734995493815883256545527727070702292087736056829221101151, + "varOffset": 0 + }, + "0x4f9ce70e72f737050ca9106377a477d7964c51c7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4500, + "varSlot": 31555107584198082961764199820682631359031367784789009379235384115535165694331, + "varOffset": 0 + }, + "0x011d62c457c3f9f715c28941df46bc967096ae22": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 650, + "varSlot": 48413703999145058004581279754965599730825920369359342968820067264294356320600, + "varOffset": 0 + }, + "0x2dd59e6dc039f9389a3644e89823d80be61607af": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 30887053318162909745378206698409195633149409484261541433970312408042260014794, + "varOffset": 0 + }, + "0xb112bd938155c0879a39e5ef5e17a37a099bf09d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 101534918388238336934355571352584354746546063244650220324609617401166536640211, + "varOffset": 0 + }, + "0xb48e27449227851d02e96cabd8782dea8a22b2f3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 700, + "varSlot": 73989600652136602147588148300832367843429340404128851901449380891770819986595, + "varOffset": 0 + }, + "0x96ab5d76df3bd347a97b2d9f9552ff941b78fa55": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 81938040379865330770237078334690495824368754159703274612445658954047650807156, + "varOffset": 0 + }, + "0xd84de9c3a7f7887ebace731c47bb5894b01c6a27": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400, + "varSlot": 104930695836684501891907942144417694408661138256534001447679669244937651375674, + "varOffset": 0 + }, + "0xab3dbaecc65dd9fa0fe36ff5f492c72eca1e755f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 178, + "varSlot": 84597685862707676292946908618999146091550156087697338098356401535627976910140, + "varOffset": 0 + }, + "0x331c1e00bbab6b872708b0da7b3f5d1b1bfddb56": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 81960863181423150544302752397346169588083077270887103162839555617729807976697, + "varOffset": 0 + }, + "0x9246838f17e4eb4c58e656035d92fbfb2f931b72": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 77354689137930886869809474011481910184879493723643729729231880537041108687807, + "varOffset": 0 + }, + "0x017a1fdeca3d001ffad3aea4f9f5ca1abdbaafad": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 92, + "varSlot": 25795273287899820201785979176255967353093618857308757925720429879287395835563, + "varOffset": 0 + }, + "0xb151ebf9f7d44ac85660113771a54c1c7e0068e7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 250, + "varSlot": 36356604647597461557261031701423580614415668250327091962088262512725074093569, + "varOffset": 0 + }, + "0x3e6fd1f89e881c9dde47a865fd970fadb1bb5c76": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 36816947653814490676199613665068877972886978006943135904985971570318051489631, + "varOffset": 0 + }, + "0x37b1a2373bcb480a084b2d4da57d39cef2989cd2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100, + "varSlot": 15678379967845189916827006429184961681319313917194594899180257812268630788092, + "varOffset": 0 + }, + "0x3d3f1a252d601dd9cabf8bb80d3861cad7af8226": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2300, + "varSlot": 7720447966045876663535696267813986127221309147439567943571649094778554734504, + "varOffset": 0 + }, + "0x638ca636ccfffde8043ab3d18556be51531f9ed2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100, + "varSlot": 90695518942190231510307554328112156490413695495204588058229976796107046580761, + "varOffset": 0 + }, + "0x071a8d8aafd4004006aa6dfee6f7eae23ddfcc96": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50, + "varSlot": 56694925170051643130545173833788256326194431592684547775103040650606509390556, + "varOffset": 0 + }, + "0xa03138c7c524ce728c2f696cb754e31eeded07e0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 148, + "varSlot": 79980711043723720908054960122725717675615780258381751556985201187075076878487, + "varOffset": 0 + }, + "0xc7c5ea43a2703c5b5f47c699d7106e94fe65adde": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3888, + "varSlot": 100520354790643250092867541316099292561892846298363821910604029549288027698010, + "varOffset": 0 + }, + "0x2cd075bd6be8297f5cbe61278826ac17afa6823a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000, + "varSlot": 29579702092166659363418798591248999408914571832550764365999058271492607981203, + "varOffset": 0 + }, + "0xded1f1f8ad488d7194e01aa1e5c55676b4dffbfc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1500, + "varSlot": 54553892069449486521408864616840652505132432952909871679004928242316478060905, + "varOffset": 0 + }, + "0xdc972cad43a1e08d0ce4344656038d80eb9ac88d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 1111662877832761559972334539903138227589570911050729633320066667727766607519, + "varOffset": 0 + }, + "0x2819cc6fe3ef7c71c27a340ab3d89feee55a5461": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9870, + "varSlot": 32071273805245464892679211459845922626203746951013124870949406094175171370770, + "varOffset": 0 + }, + "0xa29370959ce285277aa3227b2a6bdf2e6bcc4e80": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 64268459464088891802773293445926116232299132971309279852644445229149833314227, + "varOffset": 0 + }, + "0x563c0dd91297b6dea961162cac72cc6da333d037": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1020, + "varSlot": 41076151957317398845962272705767544248513855397405820823147004657608906917124, + "varOffset": 0 + }, + "0xdd9e398f18ba125b5211730185250dabdff9f410": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3500, + "varSlot": 87710219056476646657587110405142829704781497115700137798466085455660374855905, + "varOffset": 0 + }, + "0xc4a2f7cb44505a4470f5df2774892bd1457b0695": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 40605773709876746706677278382570458431840045342707615691243154677130579285939, + "varOffset": 0 + }, + "0x4920b8d3b9c13671da7aef19ce52f04ff308e463": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 114717504458540821814554707551557003922699862309603164045229659528657235057010, + "varOffset": 0 + }, + "0x355361b06204c4042abdbbdd72fa501fabbce812": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150000, + "varSlot": 69753428134672685461168430450432572808655000331433368503766775871252634940632, + "varOffset": 0 + }, + "0x9e7e9d955e1a13f4c164231cb7a48e137b482f20": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 202, + "varSlot": 97661108830107912707552427297968955491727056270597016019798252503719616792565, + "varOffset": 0 + }, + "0x8577a4cda7d968aaf7a5060694206ab4d5fa21cc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 740, + "varSlot": 64155810783742631146204426053138516604207271176649640328534837699174916289463, + "varOffset": 0 + }, + "0x6699ceae61390975a85bf58d7dd692691d98364f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 266, + "varSlot": 20875210369682260003417040696921861212006567804860764277220375939315651071857, + "varOffset": 0 + }, + "0x4eb12660919af14bb1170228a501f7fffaacadc6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1220, + "varSlot": 83174280709914153136474872078830888014693767335543983960338257583771997739222, + "varOffset": 0 + }, + "0x6f66c20abc6b35cfb94157ad9239bb596062e483": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6208, + "varSlot": 84440115932089016842089065400188025526905578991708569279496300203893616316691, + "varOffset": 0 + }, + "0x7d3697f6977affa0e5dd77887e858525ab01ef8e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 64222875051964259103492908156518878010468273105765165402602937346461797342678, + "varOffset": 0 + }, + "0x29680765d19aa82bcdc54efd311e31736f39ac24": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 3851662715991818811016626215607503900970787200802007742813336117210718209436, + "varOffset": 0 + }, + "0x107184dc032622a433a9982b6ce6dbbeccce4418": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 865, + "varSlot": 37711911543943080269868007982218647687182552204837416536367511520973431641374, + "varOffset": 0 + }, + "0x034019131bb988df7ca843ecdf13d5ace65e68b3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 82659398450596493045200836972146824482107563965798340291685872972038263679674, + "varOffset": 0 + }, + "0x16dfe2daf1ec4af54c41cc0206088192d48d8a5e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 105225900768490844160896125730279268479244288763931719566661483260255592644070, + "varOffset": 0 + }, + "0x55892fd937861bbc82c416b6e5df1c97c089be79": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 93227558861999736932585741364851366095826761195466262931712483741175859201613, + "varOffset": 0 + }, + "0x8631c6d7970a65f5b2634eb072899a9a2044f5f5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 94164912224168178326801135361636394130611785391199311731520005803375769264946, + "varOffset": 0 + }, + "0x9088cf4473bf11c0c1596f7cae5f8768a88c1192": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2834, + "varSlot": 12596846352374583384746012564148347754325180206605104538990282844259380064568, + "varOffset": 0 + }, + "0x9e8fc8aff017a7df1f0b045b67a6023a13d57886": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 78, + "varSlot": 2497662437349020231276801511107674010426182810486527343711304265720641621198, + "varOffset": 0 + }, + "0xee3fbef66074d2e3737a36aaaaba2d478ae4fe9a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 155, + "varSlot": 30116084257058149360827314591712191318747778530628108594215281956541291098173, + "varOffset": 0 + }, + "0x149247b22eec4c4d882f75b667c5caba6cc929ec": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1500, + "varSlot": 28599565539011593593169318441366844833064253403514651949538742047337355102197, + "varOffset": 0 + }, + "0x1a535d55c1ca4afd8ea18eb82713d93104e6a4ad": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000, + "varSlot": 44739007716053747493128358539709150697409804203794648957591121098962383332012, + "varOffset": 0 + }, + "0x6a7dc1836027d21da4d001687b5d2cfa9d6bbb2f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 104594805906837498643988779219830580131615706904208943934785909729697782668114, + "varOffset": 0 + }, + "0x7b5d71c4c3dd9dcfe0277be6611016ce96d3f68e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4000, + "varSlot": 67023295992322968457396074612871199044846364026717930196141796586257101338055, + "varOffset": 0 + }, + "0xacb45f374abd47931f6d9efaedad9385f0b371c7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500, + "varSlot": 63212703488751643063564590700529335214099562900564934357568988023261632843455, + "varOffset": 0 + }, + "0xcced258349a7cd8b5ca6a6fcc64d4f49a1827785": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1477, + "varSlot": 100366962480614723539925813342340016259763258206897227321819643335082230549812, + "varOffset": 0 + }, + "0x4aec042b7ef87e07b42dd6aed311f743539c8b56": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000, + "varSlot": 72872691824847609955593933695481744743884938478398633525655053125313045650561, + "varOffset": 0 + }, + "0x4d375de3bd5a1ae892d324f2f52d4e3c9a41f04e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000, + "varSlot": 43328629475173486142229839910156846422879434816794384048069425818305619682042, + "varOffset": 0 + }, + "0xe69bc82c35e2c671b59b45781559389977494543": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 14935016245189371608926891324460363316271111415516983919815838059798287631470, + "varOffset": 0 + }, + "0xdd7108e3108d3ea8265b6ffeb852c7c91546c977": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 104512804453062223969753060507431515484393545727646201391374496891978711322010, + "varOffset": 0 + }, + "0x44f42cdb617b528662790587b16529a6bb15d9c1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000, + "varSlot": 93319019806676796882921617460843148969831548698489663827006790015449699705255, + "varOffset": 0 + }, + "0xc8a0dae76af752bb0a8f9ff5c27bc99011b46510": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10891, + "varSlot": 718916196407915196549447010623893205255698222830992175299641035880514107264, + "varOffset": 0 + }, + "0x5fd8aadf491e3c18616855d22d36619c740c91b0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 120, + "varSlot": 97130316204053973458223105819036020323337156769440732573503101995363136794457, + "varOffset": 0 + }, + "0xad8b9ba83367894697fe505d70ea5cfa7896cdab": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2500, + "varSlot": 94941946207246012556707662028486187464257976366606021604629690078042918731264, + "varOffset": 0 + }, + "0x41e3a19cb6547d34f37fbad7a5f8717b07f763d1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3360, + "varSlot": 78440329366784622738161788641864074839936078981523132502633962612358841375476, + "varOffset": 0 + }, + "0x728dfa8adcbcc36b7ac3f4714452a512bc97a3aa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000, + "varSlot": 49387202115910692244280244381981312454612207810316503268638589527018453272014, + "varOffset": 0 + }, + "0x94aa62201b59ca507ac21f03d34415377b6fb86c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 100557132743437152530033029617935928722693488214859238143564324701101483781938, + "varOffset": 0 + }, + "0xeff14cb8e3a6315f92400a58edbed23ded3187f2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100, + "varSlot": 39287361749061295820042707104421417913434511959358917688638899010721787037681, + "varOffset": 0 + }, + "0xf2070c1c065e67a976ce110234f17366f1b6365f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 17190, + "varSlot": 4675928386175998705987837455654589760791617010802323950758782906213403535726, + "varOffset": 0 + }, + "0x16dc3969b62a50fb15d05bdb2aeb604369f90b55": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6970, + "varSlot": 12164956821956212675262129265753896272878606062326148322103194515535400864545, + "varOffset": 0 + }, + "0xa4f1d46293d9d2511c01e5816689fb0523c26b7a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 370, + "varSlot": 100253007048000076456878583702868812210176074995441047663025349406622329607846, + "varOffset": 0 + }, + "0x348d0feddad41e1f262084b3b3158b05fbedd012": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3930, + "varSlot": 70404728442978232242744092021896502791815039640091191099322149605103357893752, + "varOffset": 0 + }, + "0x52a7d9d39df6861ee0f609431883bd53a1a389a6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000, + "varSlot": 45172967970930230438448349177030646332318627639224641857666835562327301079392, + "varOffset": 0 + }, + "0x88007af93a2217652ad3bbc3601f26fe54cfb417": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50, + "varSlot": 84210133269512726639130905792537601657904935859418220700196174006270080989080, + "varOffset": 0 + }, + "0xf4926d39536f4ebae33ea8423bcb932d335c6ca8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 520, + "varSlot": 71768962548635936266424645158167741429692985669171108353951948926553121111890, + "varOffset": 0 + }, + "0x31e061178f98c5b0b1d8aa9ac0a8d63be1d6ca6f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150, + "varSlot": 54612873996769031735445895499935099571326711710645980483616704337167851975484, + "varOffset": 0 + }, + "0x7458821d27e7b210b69fc253e0df95085eb84f60": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 250, + "varSlot": 107757007647248838011011227331477198514041939561476960641006512381058281980415, + "varOffset": 0 + }, + "0x0df1fd1db0a7519d2cb9c50e29dd525ebb024c5a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500, + "varSlot": 67021451452084288718974567081862018937773277473498235742190623043480575979937, + "varOffset": 0 + }, + "0xcd87ca2588726471c2fb0b8367e08619aff31ab0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1700, + "varSlot": 45842599443572177077019232697878550319102569318245618776941123190677438419141, + "varOffset": 0 + }, + "0x5749bb8b4de4f862e7a62ad695d3e2bdbd5501cd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 300, + "varSlot": 6142438526295129446980245275423159541926109793292744176098496215452812146466, + "varOffset": 0 + }, + "0x0722fae1ed65a739f7cc549061c155c58b88bb6a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000, + "varSlot": 85140599324190209827193645578868743600215588739073769918022935700614749311583, + "varOffset": 0 + }, + "0x2aa3b2129053fae964272180a26fcced545ceb22": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 240, + "varSlot": 47129030117900178533633496299794708334285434266679497888825906769826792801628, + "varOffset": 0 + }, + "0xcaa81a8db8a3d99e673562942d93d2ff0c69cee4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3290, + "varSlot": 17407103570643315092692301216523785222141127638201821129050613553325252620742, + "varOffset": 0 + }, + "0xb5b3605fad19c07ca5d441592233197bd79a4942": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1968, + "varSlot": 29763945633205572020140154697581817239092800794771232607459338192422058875558, + "varOffset": 0 + }, + "0xb599f847dbd09ea0a65d8df5a5d232617cecc9cf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 250, + "varSlot": 49638344953898382405713336066676612182425747849399896158402974093094332687509, + "varOffset": 0 + }, + "0x5aaff212916eef272eb26184c694c08ea842664d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 520, + "varSlot": 54500756858398288404754902751688046265034653447102815745360509903107304373262, + "varOffset": 0 + }, + "0xc21b9e2573fab4d9520b525a444b10f2a4d8cd80": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 300, + "varSlot": 41790096335215193623379432158353761822340152650419064728837294839924119911439, + "varOffset": 0 + }, + "0x6ef844b3021a5519637d3ffcd695f420dd564fa5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 16212340686304004839798758352834744980289596861865334602409530044820450511941, + "varOffset": 0 + }, + "0x5cb363787806b9b092ba7b8b4c4696bab393107e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 600, + "varSlot": 73285268966254002771650561040496580010872449970658942433823410258828242211303, + "varOffset": 0 + }, + "0x2ded541f53dc89a31d8fbec5b2e9b562336995a8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 300, + "varSlot": 92635845495289059770416056037094048227701177715540741042925465117662970939884, + "varOffset": 0 + }, + "0x36233de70a8094be7b49f9a006a3251687d68b78": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 250, + "varSlot": 99279785610331492232992045841272130732677866786277888828016433687852972101911, + "varOffset": 0 + }, + "0x50d4ed95a92d9708bd8c1f7678b9b6bef730e3fa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2500, + "varSlot": 7016384270549932341574437138920656732047978650671041966864580592294882996326, + "varOffset": 0 + }, + "0xe1b84e9b1fb94eaba129d47db2424b8b5a037da7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150, + "varSlot": 23067853915445964593578584469568706919452324900621394532873472468132740364400, + "varOffset": 0 + }, + "0xe4f36f394d50d29192259965470140d337751f06": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1430, + "varSlot": 47272577958467619267817485922942140807079976621894165280175204680503707270445, + "varOffset": 0 + }, + "0xe93dba5072aa6a48d7767d3dcebe97bca6400d25": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 540, + "varSlot": 100072209744041335614989905339465072802404076322983524546090137187850980888146, + "varOffset": 0 + }, + "0xc65bab4e249e3bc2e57b91c25df90ac95e642be4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 82412005021701704469558697520700466532815518239754315611274561742433455475935, + "varOffset": 0 + }, + "0x581b49e42480df07b4121b153b1549a9b5c28c67": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000, + "varSlot": 97194461129331734155337200184806199393709406179666759014281859033075915263955, + "varOffset": 0 + }, + "0xa3445c0c9fbf846b0334921d9de3db8f1a1b39d2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500, + "varSlot": 62851145029611841097631576784812978445600365201284847877686321476929957322761, + "varOffset": 0 + }, + "0xa0ae43a448a94ddc28e7def3f5314be5d2443645": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 300, + "varSlot": 83087497903097914191900332064375333318758443692543778065101611872403931721836, + "varOffset": 0 + }, + "0x7b7e49f3265ac2bdb0979fb6b8e355ec2d411c60": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1616, + "varSlot": 83465361181330391520956608368774381874897148923793137207226254086915465232698, + "varOffset": 0 + }, + "0x63a5a729bdc4744dfb3f12be3fbffb7eb919d684": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500, + "varSlot": 87915487565246865861839791782386262773243353343659646559515436890007819246984, + "varOffset": 0 + }, + "0xf58f8e31776007d06da2580f177f37dd979b0aa4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 300, + "varSlot": 102017943015199036323425647769378755084209916222433385111266632719832744649592, + "varOffset": 0 + }, + "0x915c01cf41f520c5e34bb1de568bc358780065de": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1795, + "varSlot": 88015997474591890372308259003056630854382718461629090673470794072708746328503, + "varOffset": 0 + }, + "0xd04fb4ae5a62390db506e7cf27ef27b2905791d5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 1580820630095205854276955792564600386666006675248966708665943629682460990930, + "varOffset": 0 + }, + "0xa9363e46e0f23d8ade803ec860ef62a64601641e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 913, + "varSlot": 61504482960944606419606266690847107235585445250056315923165667955101836357059, + "varOffset": 0 + }, + "0x94fcd9b9a39afd8a4da314d0bd4d72e857f387d5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 600, + "varSlot": 98419201693513086053635926917214452150419387060563496037535081450930049260635, + "varOffset": 0 + }, + "0x47e92dcab2b2cb1d2e94a87b90456c3d6a3c6312": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 95128170989588982471041429649018398443026008630398478303677245316595434773683, + "varOffset": 0 + }, + "0xaac605ec0d240a41a99f3682f67a4af1d815a4c4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 930, + "varSlot": 94883822361482716912829063187089065990790882182772277885800732770389998834934, + "varOffset": 0 + }, + "0x173622487470f6684edd6599e050fcd5e099454f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500, + "varSlot": 40541487876413507545088412628532289775092595895384913457425789395577711399329, + "varOffset": 0 + }, + "0x9dc9fb18b1a0429148b0e1c629c1f8d14cc667ea": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 66293401630626996644634862805877515817079057337630368367694515843542782730346, + "varOffset": 0 + }, + "0x19aa050fa2f7bc7667165c9060499602818e9291": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1030, + "varSlot": 54311621980142440457655087097508563269210240350216746414417617247247485113868, + "varOffset": 0 + }, + "0xd83ec03659feee1b85bc33fc2220b7c2abc6849d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 305, + "varSlot": 77507273558012311852161313188641881553831036925073387940248080745396133342240, + "varOffset": 0 + }, + "0xdec5d3bcf55bff5510f90376cda9325916abb1ad": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10025, + "varSlot": 26914611783141398859997580066450500505362326077800581137981890243017634678030, + "varOffset": 0 + }, + "0xda42b7da1be1f060a33e9819f5dcbc36271fd61e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150, + "varSlot": 106009355159142635468006032962893318825508154297003218449036271197260317864487, + "varOffset": 0 + }, + "0xbaa6bd9d5d488f069c16da3a2df8fe8a3c53d79b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 808, + "varSlot": 37617737681429435406027948327867374138785126819371582206752177260490048552766, + "varOffset": 0 + }, + "0x0648745cce2fe88ca8f1c117fe0bc4297ba22eb7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2200, + "varSlot": 114508183012566528009717377209339318091231890336430528235707647715202305981601, + "varOffset": 0 + }, + "0xcef760f6e6b51b9f8057eaa7ce032234b817606d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200, + "varSlot": 85363137512035334331616041117117024629971636633089963471265327561135329077875, + "varOffset": 0 + }, + "0x802b4a446acddbb5d16db41f57699b248775d02f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 47533047640886547460890547500259186313864478321818880377125111201674163465772, + "varOffset": 0 + }, + "0x6691aedf7f788c26575fc05dcc8f1c529721d8f0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200, + "varSlot": 33633031136564232823844278060863095337608132752613808696759288293404558811056, + "varOffset": 0 + }, + "0x882c87b7a7392753b12d8db2f56622fd56639f65": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000, + "varSlot": 46430423157656625934196933874114172691099601960832283708132238235656628152400, + "varOffset": 0 + }, + "0xc229d1b9b437280591a775e7c155b2e1b9895ffc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 7147797452913524331978338893733563198079391650863134796704842116281289819638, + "varOffset": 0 + }, + "0xf501dcba7fbbc71633f7cb1bfc90795b287d7d4e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500, + "varSlot": 59640173481938251309405272559944770600504416069244313494248239399188968708985, + "varOffset": 0 + }, + "0x00dbaac73e64f8a464cbdb7333c895dcb7ea7e96": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1370, + "varSlot": 8437096921500198032132178334682715963946688391347893986499133162974459597125, + "varOffset": 0 + }, + "0x86c8cf0a61a8ee279c9200864d739f80f87d6e46": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 84053168826147809460648883624460074973921699325559108178669659586757820208954, + "varOffset": 0 + }, + "0x588aef3e826a2c947b4a47e92e1652326496b3f2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 13482784102436101489522031729542202878012232849008145345958987593224033160015, + "varOffset": 0 + }, + "0xf37d9aa1624998a54b8acf1913a4b3c4bc9c3b07": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 546, + "varSlot": 66224543747093855949970612951698670346981675560020244405188063677483995045038, + "varOffset": 0 + }, + "0xd305546de6673df7fb3a53338b179f34384ca265": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4000, + "varSlot": 102699127576572362271084490964240282355309113897551879137864586151664808744198, + "varOffset": 0 + }, + "0xa046c75c014e18a45f658464a49ab5a58eb57415": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 2613279998216495072470987087455990014632883327923185695111261430690160224629, + "varOffset": 0 + }, + "0x22fa9b11a9194bc6fc0c5ff4da4a460f42301180": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 18177141894336034031162329640012142280027149761495608961325382597426726624183, + "varOffset": 0 + }, + "0x34b8b50a7f2ad731ac99e3390ccf62a37e6f83db": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 115749144370378776360004415256664576614769714366077102498397676291295249853201, + "varOffset": 0 + }, + "0xaafe16655fd769cb705ecbc149530fc675afb84c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200, + "varSlot": 15128114638504248240931273739032670731917475327079091171754023056948910973185, + "varOffset": 0 + }, + "0x3b4cc68ca51fc087e3c69684c6ad07fc72a2c5f4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 889, + "varSlot": 37221253570034322370328911796748222080641109676018239961237502416788738275452, + "varOffset": 0 + }, + "0xd71da75d8e58ea4d2eff5bc025e9f6939225e385": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 580, + "varSlot": 14877552785709659189622437419722404379775663735009312702516305284666186469500, + "varOffset": 0 + }, + "0x359b2eb9f2bfe40227054699cca211a2cf16fec8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 870, + "varSlot": 59287419667722871620675114882035329207529219601970057309019378633038582699717, + "varOffset": 0 + }, + "0x8dacb5cee21b37102ca880a8890a5c875a3b5524": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5300, + "varSlot": 17213620261973025173681825567058563060428608864636523437499133443569694495832, + "varOffset": 0 + }, + "0xf3799eecf98f9e2e3d82eca22ffa598cbbeda08a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 600, + "varSlot": 19369487691295605282656656466801145346536589104006410615340237319781194944376, + "varOffset": 0 + }, + "0x1b5c00a19b750b05af2ed298bc719a82acd90096": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 74, + "varSlot": 98616698529278285386255604375867278114624403066847326884487449388714890871050, + "varOffset": 0 + }, + "0xcd6d590ab5cb84616255e01547809ea9270458d5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200, + "varSlot": 10212225247019751329105774362215474622423164588419739415806481852206045300232, + "varOffset": 0 + }, + "0x20a6c8f792c2ef5a42a5019c3f5a3003c29f42ca": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 99462175299698348130586753760918874179074327499130833948405853919821996119567, + "varOffset": 0 + }, + "0x0623e08ddd0625203c993dea80dad2dbf1e38a8b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 45809364690099172721000834216397702760122518037047225111058701465992612393418, + "varOffset": 0 + }, + "0x8c6e0047e20a18e8124b2c4e914e7807e09b932c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150, + "varSlot": 31149846418805488999101249340920604031418457101790854060544115590617675686012, + "varOffset": 0 + }, + "0xe705ce707661d1d68bf8c9a38f31860cabc991a4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 76538070492755234537311102464618149220424779036006540682641381551301277660606, + "varOffset": 0 + }, + "0x1b9e804fb52ee91f1305bf14802c5967dfbc41da": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2217, + "varSlot": 51212920211192313199794675036660481936095294467339942182523989780192126795799, + "varOffset": 0 + }, + "0xc51f5dc8c1a55f17cf35c18a5e1703e9a34c006d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 99484668375437108454755039108458159097785317816225101605853944951527414183671, + "varOffset": 0 + }, + "0x0d98175208066b385977902c22b60d10440b5a26": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 14437831219234472635971046933578622937892252186305798294386278256731711239683, + "varOffset": 0 + }, + "0x5fa7302e5ac2a3699683f3cbdfb8aeedd1c61a27": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400, + "varSlot": 13445054833844111425868942429688522254103754097719770528494195248674419578521, + "varOffset": 0 + }, + "0xc46104106c7b8de8c9bb1b83c02203c121b1b49a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 61373231584874442953159259690311789821478475964407343444114855390705632865756, + "varOffset": 0 + }, + "0x168ce66793c95c603c580a1f8a2de2e5e1545e97": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 67605489484064270363470653281981885209147378865676385830537557151544931029237, + "varOffset": 0 + }, + "0x0bc03eb8315afee40bd02eebe608caeab52c1955": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200, + "varSlot": 53541854497387301635938565207516613404611864113575327053533889749276628845962, + "varOffset": 0 + }, + "0xde84e9e0fcaea3adc91e60a871f45fffbdade282": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1500, + "varSlot": 83812371158324621553449849373313258542358494510874910459558515330631883381780, + "varOffset": 0 + }, + "0xf63ec6b3c816e3e8dbb5a33ecaf78df4ed7320d6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2070, + "varSlot": 14727454506122991761071123263628799297459421116208693636512380539119378223529, + "varOffset": 0 + }, + "0xc1af96ba0ca7d91135442697d140e4c84a72884a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 102866823786248659498415251523171378848388272183095131186641125538677838557164, + "varOffset": 0 + }, + "0x130d8609777040fb299cc024dfc334080bca8180": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50, + "varSlot": 80444650815451327861475792599069618713117331719646526916417807885449233280098, + "varOffset": 0 + }, + "0xd17c8e6a3a4632e76e008b4d396815dc3e4ab3bc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4002, + "varSlot": 66996653627894091141856238912313079950907976559005073799469991678427968971092, + "varOffset": 0 + }, + "0x1d16c09e443b52d9cc1f2e368df0198d0eb92e74": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 80469149403099707064628833757526172688258429967727613276148025963854095640718, + "varOffset": 0 + }, + "0x784d40af717e8b4319540ead7c7e093babe85724": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 6147654790917992176171127619992399039430049751371249991160383169409628296540, + "varOffset": 0 + }, + "0x6f6463b564108e27b88a12e226581a49617c73ab": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2700, + "varSlot": 97124948642387717451929566533176160158629640846369147017306800974923370088572, + "varOffset": 0 + }, + "0x3d155e39f1433928a33c028889075965a08e9362": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 700, + "varSlot": 59364710424296563117653392267699411587177773641500532174620474263504183270991, + "varOffset": 0 + }, + "0xb58055c7ba893dd20a5ec0bb77180f9441412ebd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 65961501345413490512207844583368321427572888746511679203617381125060643016283, + "varOffset": 0 + }, + "0x2bae2ad0e1e6476f25d35659d82b1e726fd08c10": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1700, + "varSlot": 71056655532521692332942090198008430060206622779004358877573746687386428771444, + "varOffset": 0 + }, + "0x4795add7a17a261cc3230e5bab5b1739887b7a70": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1216, + "varSlot": 55344590868609143510061339475703582145603941843266130955235194549717857121775, + "varOffset": 0 + }, + "0x3f1024acf58eefcc0ab85dd24af4a6b08595674c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 92707412019513654813085561743466244243183516901033893752846120419809351791137, + "varOffset": 0 + }, + "0x71956e2b1b5a5faead87b32a46e8d296b39bc1d7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 580, + "varSlot": 23527004950830578754850456568645537050777338631913997130176101199638478946722, + "varOffset": 0 + }, + "0x940b4111ab2e6d0a98538dfc263349bbb25b4e56": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200, + "varSlot": 89228466993824238615900765947867623206529692984114514926078202223462564260050, + "varOffset": 0 + }, + "0x5b9714fc2ccf13d5d0cc9a567659ef7c96bdc564": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 424, + "varSlot": 14775210553391021578869857038728179234504362670676255882817116137175742147438, + "varOffset": 0 + }, + "0xe42b5144c79a50a55e5ced6d6f468d15fecf0ffa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 39066719330898090671455774993373236069563131360913259079430859699400159122563, + "varOffset": 0 + }, + "0x30495ac090d9cf20233731acd4eff9d3bc77151f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 67398468854930962806056745468145050946805429351136159502660310645970356189831, + "varOffset": 0 + }, + "0xc7f75d71b2e06bc1c1321b4313d6969ee13cddaa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 109237671804862944285429871866667653998704781474007244109921474109648773843271, + "varOffset": 0 + }, + "0x6c260b6f1c10b506e91eb032b962a81063feeb32": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 47565550727546166916543295198146737675054353109847450838822952544294022540897, + "varOffset": 0 + }, + "0x03a50992038ec8350ba5e92a2aaf20be591d9583": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 50820692549644915174588715482692000107575238563045977482958919829121213188800, + "varOffset": 0 + }, + "0x9e6c03b9f513918f15b25b8097aa34ca2cabf04d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7250, + "varSlot": 82423004189086536295120510603446373207259064387763500617874775752641846175216, + "varOffset": 0 + }, + "0x9c9b22fc539d5d761979c5ff086ed3d939bd8a86": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 13896155423523041881016394026801146167786288593609337917349513405300884880110, + "varOffset": 0 + }, + "0x800a635f553860b3555003980cd46eb7c364895f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1900, + "varSlot": 66860358037917965285386125780230198380261144642801560098183638192373685385177, + "varOffset": 0 + }, + "0xea7603b983d4b26b2d3576619db7e76db52bb50c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 104316327534851841734930661979566400358704008465710991306873490553543008085926, + "varOffset": 0 + }, + "0x6d1d8c9dbe037f972ce4033d09c5d7e7b2d849d8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100, + "varSlot": 87456005723642073645292088900501562116340427812911447604511918867414776287861, + "varOffset": 0 + }, + "0xc4fb9327790f88846ae2eddc23e44e0784163775": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000, + "varSlot": 40873755025747903646836708212987459826965254905755925720032486662235185720136, + "varOffset": 0 + }, + "0x88b8d157ebf601658adb13c9adc05d6ea91b6912": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3150, + "varSlot": 66858922348547733353657797239164866049298129851855778654550969397368330230160, + "varOffset": 0 + }, + "0x370eac915c7b7aad019f431f75f185843013011d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 619, + "varSlot": 36729352900437294360669297760988832334065928601110946475742968599682233113558, + "varOffset": 0 + }, + "0x725655fe414c2c2c0c6b432dafb64a60b22263c1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 88391925398751963088181931533181925657115973089547305880338066966588708704756, + "varOffset": 0 + }, + "0x02dda4dbef8fe39bd77fbd0973bdbd36e9644f79": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6550, + "varSlot": 59270020073257018302773776454096083655416199373125845191161215145537944686273, + "varOffset": 0 + }, + "0xa5dc259405c52571fcfc96c4d45c3213ddb75fa4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 96585, + "varSlot": 90758796324985780637912730220320847515713452492759932096626903587745347033645, + "varOffset": 0 + }, + "0xb6af66226206125c269ffa342282bd2e6521015f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 820, + "varSlot": 5312145676751129937581064402619967735931989356688128951040320079166732649088, + "varOffset": 0 + }, + "0xf5fac8ba125ff4f2c06c20baa138ee30bfbe1fb1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4020, + "varSlot": 13470616039062525836356196264278226314023603551179868383277307310151641972576, + "varOffset": 0 + }, + "0x815e09b6c513377ff227995c9b99772cc62f1cd8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200, + "varSlot": 2697843139364487825040498318591684690583811514183633597565841108159430126097, + "varOffset": 0 + }, + "0xea8fc673e5d1dfe62752a1cbab11afc393753431": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 32733302853853736346401979016119503525211585097689695813181891885849410971350, + "varOffset": 0 + }, + "0x680d77d981ecbb1c3615e67a334e0e3c680a51c2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000, + "varSlot": 43340508764453672437778745908359789712942701381716809007782034900504762844740, + "varOffset": 0 + }, + "0x30e8b02e0db5a05bbfc4eec38dd8b07cdbc96f12": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 96022791458917074460837926761164287830874987475255904690776433063009651273890, + "varOffset": 0 + }, + "0x27cd66a53a2dc15ac3a863bf7692d21c46792975": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 105039696515012316761069250536184509961288854053011885380264133877626550727308, + "varOffset": 0 + }, + "0xcd7cdd40f6be68d3cf7b74f45fcbbc26dc9aea4b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 19560156656575564295291731354941380619589258270669786458848775079765643868964, + "varOffset": 0 + }, + "0x9cba96c7429e017b7f7fc5dcb543b7d79172a7f9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000, + "varSlot": 89063362382873437462708917298497626874070550312723886722851304598997816444087, + "varOffset": 0 + }, + "0x1b97ae83a088fac114f3b254951b6712f417b976": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 66092444281176887601316894254368065893836845612710500854457436949822275868862, + "varOffset": 0 + }, + "0x218c266203c80227b47e20f70da300c48a882c0e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 8576, + "varSlot": 29652399718853192341780037680926500259845761793099955081080692224366608123063, + "varOffset": 0 + }, + "0xcb6e82a0c6cf6f0752eb3fe9937d47f2a73ba024": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000, + "varSlot": 5938855348725457338143357016335664261451786039170213896227581691465950185173, + "varOffset": 0 + }, + "0x318bbe062dc700caaa6194b8bbd7e65acf167ac7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1500, + "varSlot": 90969638188249773693700503248670003817400266860617216390076202021814367366608, + "varOffset": 0 + }, + "0x5b8ab5d130fbfae6ac7a132717b068f6eb53a97f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1500, + "varSlot": 44061455716094051412604869601925993558086206116914792147424908662552700191664, + "varOffset": 0 + }, + "0x37a15c92e67686aa268df03d4c881a76340907e8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 480, + "varSlot": 60359678283872499069910181235432943072625704286731452844807713404870794982434, + "varOffset": 0 + }, + "0x998dfc0ec2cb220f6bedf8998b9a95d4779091c2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1600, + "varSlot": 70375243858404815014765738895246984297792490064347248076727331949066633781417, + "varOffset": 0 + }, + "0xc0e3c6bf2a003cf8f70514586e5c14988adb33a7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4626, + "varSlot": 110024158340379179941566224047703971343001582459772274066309718500243529956623, + "varOffset": 0 + }, + "0xc61a0951d6816cd301b11cf11d0817b16d463ff9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 16405, + "varSlot": 65445250944881460859572402627040027356159658700480410732877020782980918034430, + "varOffset": 0 + }, + "0xa5cd0d7496aa3d15184afc5132fd441e5d9dd181": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 106591387827025674009955825220435853691857579124622847072405648655002696798452, + "varOffset": 0 + }, + "0x595932e984d2a62abda189fc17baa3d26706e839": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 270000, + "varSlot": 57527461792804008109545377760847758920822618817808475147205136516711696570781, + "varOffset": 0 + }, + "0x939e992a4f02901d965e65bbd0c8432972e9a444": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000, + "varSlot": 52968256179912536347952577805852308630189060445388227226347354874879116504401, + "varOffset": 0 + }, + "0xe612f33e73d61e75153117ccb61410f7be11b496": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000, + "varSlot": 46823866870008163540020767116439959794104330656482303182586409801584207970038, + "varOffset": 0 + }, + "0xd3e380c86d7a856bee631b7111dbe6720470c0c8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 90539251514228038103351180058485682848911601763781652363780168421696015531018, + "varOffset": 0 + }, + "0x470fd27c296b5f72c62b400fb5a76a7ed18ecd5a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 12500, + "varSlot": 104452357930572694069094089711506541405162097629615160408351827821602602712633, + "varOffset": 0 + }, + "0x1a55d62ec4d8d17eebf7a3c3daaa8ba5f6390347": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2500, + "varSlot": 80696720539783232640104600216361252134816633626949220829827098751564821826119, + "varOffset": 0 + }, + "0x497e1520e2a4d17a0f3ef8475cfb886ecdb7df60": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 110962742331832521932222977716984700402201469577261351437797269124497018882608, + "varOffset": 0 + }, + "0x33bb673014e46c0331d755c63f5242c24c4247b9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1400, + "varSlot": 71159416016873428485046783601668534168303617093222977847492972807760819723033, + "varOffset": 0 + }, + "0xca475ed05308ed3deb0785245b42c30df48c6520": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 14590, + "varSlot": 53471000776380493331852765746597349725813812964971054144310669809004925652940, + "varOffset": 0 + }, + "0xa90dbaaba498cde899bb503a2005f9b0946aafb8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 650, + "varSlot": 59241654647216740133623801502895937560765257719193216656875904643971065190332, + "varOffset": 0 + }, + "0x83df3d79f5326ca3cce635d6042ddd5e42ccc421": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 15287553765658923213418842078671231514906123914753520584284603920509109949867, + "varOffset": 0 + }, + "0x16043db51aea1afb7b531de647472b6477b9702e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000, + "varSlot": 70671334005494642316608949659270247365466002855755479303574792943950422169368, + "varOffset": 0 + }, + "0x4c5b98ef479d44b54c9765e6e871e87259a36612": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000, + "varSlot": 24337146894440372831879094774214167944779820561653608037406515056787045367997, + "varOffset": 0 + }, + "0xfede886dc61823a33fab4166dec3b5fd0eedabb3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 848, + "varSlot": 66960916128360650410329750054994021101215853347556465137760103783179051745709, + "varOffset": 0 + }, + "0xa950e2f53d8f0f2c05482c7ef03a63e35a982e47": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3984, + "varSlot": 61490233806093641882843990002917753197715842403565843285521920187821086213300, + "varOffset": 0 + }, + "0x24e2af5c9bb02a9e21271ed18d3a8abfd32e54f3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500, + "varSlot": 45529021303662593126140288220358748792363763246308009784546886425043071865882, + "varOffset": 0 + }, + "0x2a8d0727fcdc697287eb4b3364adcf14ced7d8d3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3400, + "varSlot": 58373009570485495527694519227172808335479609586195467828068964323369088054993, + "varOffset": 0 + }, + "0x088858c8ebf0ffe3e15290faebd518df84fa99be": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100, + "varSlot": 87792778194446065138883306168300770081056602959999818730789419969207288635592, + "varOffset": 0 + }, + "0x80fd6d65813214ca4d043c5d751ef5ddbdce41c9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000, + "varSlot": 53615018001543049134524430034758160309625199310545580411955761313519715767398, + "varOffset": 0 + }, + "0xa1429e97e9c1d28d72ae7741dd2a4f73eae00cb2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5720, + "varSlot": 54542789466927232157279841741925460506365141565277219853828628542976817194038, + "varOffset": 0 + }, + "0xb0e308fdbca84c8b7faeb8a79e280d199c15168a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000, + "varSlot": 7293125476557709498869153087089357458499487430302894318109753680130887399406, + "varOffset": 0 + }, + "0xf7832aef07efd96be9bad4b1b6127734b0ebdc32": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10, + "varSlot": 99275658475147479639489583664480677459489573028754470596857504977155628976238, + "varOffset": 0 + }, + "0x9d94804c6fa68aae9df73cbf0066c6cc30b97e40": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500, + "varSlot": 61738641173950406898009236806987939540270609023169676486579024728518856791176, + "varOffset": 0 + }, + "0x72607beded30c643e28cfd4bba39bbfdda1c7741": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 65954498676553396104660313093224467136689550274179460831955134700969465542794, + "varOffset": 0 + }, + "0x6a80edf3c51bb636453467a35896d31ce3f8b137": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000, + "varSlot": 17646213390993343460940490933505963102916082620841853466827961045524221468097, + "varOffset": 0 + }, + "0xd58d691aee5ce20646224054baf5e2cf02754351": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9000, + "varSlot": 77462716087508133937119009816481135253653616518226371178336363509702288421919, + "varOffset": 0 + }, + "0x1d331e2852bcc2bb7586215bc053a1a078b411cf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1110, + "varSlot": 103429618060501399044573873582148347117968727412361349216477816935177171864983, + "varOffset": 0 + }, + "0x9fd80096ac1b5dff2bcfbf9574892de94e3e5446": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5230, + "varSlot": 66756129908632729324581048056712231876537642293233994803685610531325139673459, + "varOffset": 0 + }, + "0x7d8d133d74058c0a78c03792aa5fe702016149e1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000, + "varSlot": 22093779937885523434846840734457812229575316048642410653934376734509044545306, + "varOffset": 0 + }, + "0xb4648b501e8dc2725859ea894345d35ad590ae6f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 537, + "varSlot": 19650933604765180815880144625718016085843512506134724467588613462488113625929, + "varOffset": 0 + }, + "0xc09731b45dfcebafd11309e954be0aac3fc7ceba": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000, + "varSlot": 82151424448268124643409265451092049387323308582162315564914601202939991871756, + "varOffset": 0 + }, + "0x3bb78720636e4cc72c6eb7021abe5f4def0e4377": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 21660, + "varSlot": 91641411607506841377329594342016827047577601201351666391395835720197330436165, + "varOffset": 0 + }, + "0x3416089b4d5d16c3beec93f922f0e3dad533530e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 455, + "varSlot": 27732508553340195635881773293780695351948191039340942077508724872148174361583, + "varOffset": 0 + }, + "0xc385e6a7076a58913c2f73953e7ed9bb162c871d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 47040775969986913948995249796821912927084270454720812757280252870230566542288, + "varOffset": 0 + }, + "0x25757c67f558cf01680cb4b88cb6212c2f8184a6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 140, + "varSlot": 109971657743714414498576177340771567800128835207396022310140861515107691956831, + "varOffset": 0 + }, + "0xa007079642da3b5b538e262a79a2fd742f497c31": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 63456565297487526583429508180800018672965701402647466321643498116893560285600, + "varOffset": 0 + }, + "0x2975482f0e8832d87dc66ae3140947af4b2725ef": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4940, + "varSlot": 59777275004620474609410871321707947750523563847012278838960574420610727840974, + "varOffset": 0 + }, + "0xbee9fa5cdd8d45a606aa35c5e07044e8c3f886e4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 600, + "varSlot": 42875078303925633933736983185942292492961896280724765547076842431782766244284, + "varOffset": 0 + }, + "0x7df223c09603e82c0e53b0e4f414803f72e18fb1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3400, + "varSlot": 31603099075527881677455347574279454529782852668505270946379100878605808895, + "varOffset": 0 + }, + "0x7e3dcea96927cf7fb26b753a2a7d6e85b730ee33": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 102209, + "varSlot": 58088088555342993898396392666446458024900635423524183168786189794202999119503, + "varOffset": 0 + }, + "0xa8b51058fb7b256ed888c70c42a602cff3e3bf97": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000, + "varSlot": 70273827993349868375191052296668616339360322841381573500165130692300829792321, + "varOffset": 0 + }, + "0xd78ef6b4d7fd2bf101e04f8331dbbd4f957159f9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 900, + "varSlot": 109196487646816001936971679234496808294389900315910723378926753293013485290985, + "varOffset": 0 + }, + "0xd4eafae06beb7a2c5dee9838c9eba2682f7e0667": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4000, + "varSlot": 65052093426487426344601228966608249320794210414294468197406507859789553547345, + "varOffset": 0 + }, + "0x0f5d5a18be52ed5a8684cfaa20bc25f9eb515055": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000, + "varSlot": 42769106178150017181758953769123538864816081062848040095581857420333720901090, + "varOffset": 0 + }, + "0xa3baa237ec0af85dde284d182f933c1b70f76c42": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11200, + "varSlot": 24243229075348679961569886902686489612652523172979323346268158801601849808544, + "varOffset": 0 + }, + "0x23360423f02c33819620bc7a6839654c254df1de": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000, + "varSlot": 28174838292060522021877647986456549688476257474013339709899109431266206086640, + "varOffset": 0 + }, + "0x1598ad1f78745e7aaf9768a71784bfb4c922718b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1180, + "varSlot": 59244920319591514221258813615102824860495508769264634817145661942319358488182, + "varOffset": 0 + }, + "0xb1a34309af7f29b4195a6b589737f86e14597ddc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000, + "varSlot": 27488490485147738962432522645923082486194489605899537347167729338248722849874, + "varOffset": 0 + } + }, + "varSlot": 4, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "PIXIUFINANCE", + "varName": "allowed", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": { + "0xf105639f4e66f3f02b92df0fd11623a282733061": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xd9e1ce17f2641f24ae83637ab66a2cca9c378b9f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 23887001050990641181996052605158782230576863712028832370364844094022456081853, + "varOffset": 0 + }, + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 63254549094306203251782495208556545891297804654739938540636270726042060356382, + "varOffset": 0 + } + }, + "varSlot": 7820542604732113355217196658083953494158296441065492102009767408545726305774, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0x16043db51aea1afb7b531de647472b6477b9702e": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xc36442b4a4522e871399cd717abdd847ab11fe88": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 83012646938103467677687313449576299944741037012782488634563453048275145110722, + "varOffset": 0 + } + }, + "varSlot": 75393229018660823955597757027461976287981977071173973272347050639580161954561, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0xc61a0951d6816cd301b11cf11d0817b16d463ff9": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 101810209949597364078190918899464121359163514242853206757372161952764553110066, + "varOffset": 0 + } + }, + "varSlot": 44769088579285279775602911926661778181757812690656550232981457091577165380815, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0x7e3dcea96927cf7fb26b753a2a7d6e85b730ee33": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xc36442b4a4522e871399cd717abdd847ab11fe88": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 83300527505482275979120890606686134816901021834470146370546910492814201172418, + "varOffset": 0 + } + }, + "varSlot": 100339097831183562630559152366622070361086870088255735786390137699842518286498, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + "varSlot": 5, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json new file mode 100644 index 0000000..3f2d616 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json @@ -0,0 +1,312 @@ +[ + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "ori(_balances[account]) one of [0,200000000,40000000200000000,20000000200000000]", + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]", + "msg.value == 0", + "msg.value one of [0]", + "account != 0", + "amount > 0", + "amount one of [200000000,20000000000000000,200000000000000000000000000]", + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]", + "ori(_balances[account]) <= ori(Sum(_balances[...]))", + "ori(_balances[account]) <= ori(_totalSupply)", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [200000000]", + "elem of _balances[...] is one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]", + "_balances[account] > 0", + "_balances[account] one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "_totalSupply > 0", + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "_balances[account] <= Sum(_balances[...])", + "_balances[account] >= ori(_balances[account])", + "_balances[account] > ori(_balances[account])", + "_balances[account] != ori(_balances[account])", + "_balances[account] != ori(Sum(_balances[...]))", + "_balances[account] <= _totalSupply", + "_balances[account] != ori(_totalSupply)", + "Sum(_balances[...]) >= ori(_balances[account])", + "Sum(_balances[...]) > ori(_balances[account])", + "Sum(_balances[...]) != ori(_balances[account])", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply", + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) > ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "ori(_balances[account]) <= _totalSupply", + "ori(_balances[account]) < _totalSupply", + "ori(_balances[account]) != _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply", + "ori(Sum(_balances[...])) < _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "falsified_preconditions": [ + "ori(_balances[account]) == ori(Sum(_balances[...]))", + "ori(_balances[account]) >= ori(Sum(_balances[...]))", + "ori(_balances[account]) == ori(_totalSupply)", + "ori(_balances[account]) >= ori(_totalSupply)" + ], + "falsified_postconditions": [ + "_balances[account] == Sum(_balances[...])", + "_balances[account] >= Sum(_balances[...])", + "_balances[account] >= ori(Sum(_balances[...]))", + "_balances[account] > ori(Sum(_balances[...]))", + "_balances[account] == _totalSupply", + "_balances[account] >= _totalSupply", + "_balances[account] >= ori(_totalSupply)", + "_balances[account] > ori(_totalSupply)" + ] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_balances[recipient]) one of [0,5000000000000000000,100000000000000000000000,100000000000000000000,200000000000000000000000,5872550000000000000000,200000000000000000000,55000000000000000000]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 400000000040000000200000000", + "ori(Sum(_balances[...])) one of [400000000040000000200000000]", + "msg.value == 0", + "msg.value one of [0]", + "amount > 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 400000000040000000200000000", + "ori(_totalSupply) one of [400000000040000000200000000]", + "recipient != 0", + "ori(_balances[recipient]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "postconditions": [ + "elem of _balances[...] is one of [400000000040000000200000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 400000000040000000200000000", + "Sum(_balances[...]) one of [400000000040000000200000000]", + "_totalSupply > 0", + "_totalSupply == 400000000040000000200000000", + "_totalSupply one of [400000000040000000200000000]", + "_balances[recipient] > 0", + "ori(_balances[recipient]) <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])", + "ori(_balances[recipient]) <= _balances[recipient]", + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]", + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0" + ], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]", + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [200000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "_totalSupply > 0", + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply", + "Sum(_balances[...]) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= _totalSupply", + "_totalSupply >= ori(_totalSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "ori(Sum(_balances[...])) < _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.json new file mode 100644 index 0000000..bfd89f4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.json @@ -0,0 +1,619 @@ +{ + "variables": [ + { + "contractName": "Soya", + "varName": "_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200000000040000000200000000, + "varSlot": 53036503876541685931050326149618209939548879398984428055395384671020393076738, + "varOffset": 0 + }, + "0x9ab4d299a7b33154afcb575a0d51b38664734831": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 196781277180000000000000000, + "varSlot": 45970365826217623849834770573583489771133246279703267270482511401319224972827, + "varOffset": 0 + }, + "0x00973f0d47653fa0ae2460f91ee05c2d91d1ef1f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200020000000000000000000, + "varSlot": 97464638131235909443120420469529635586806204835158865131733864568277916653132, + "varOffset": 0 + }, + "0x00bbce8eae543b6fe31edb4c1d3ab37ed56d6fba": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 130000000000000000000, + "varSlot": 115331827768924371477420879106033370601337204665289724928391554188844109704671, + "varOffset": 0 + }, + "0x017df4c505140a39212cae9cf31d82ef0e2204db": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 35095332909172052504381279879233469943826675322042411649264516895244490338581, + "varOffset": 0 + }, + "0x012b81c4b195cdee2d0d48bc9e5dbe74e38cea80": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 16264648744607563044596444206557744982428468169320287739637592523503037637437, + "varOffset": 0 + }, + "0x027d8a79abd10d83aa58335131157032ed4cdc03": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 82060174140696169625549499648002855660063729314952017001731658285673616758300, + "varOffset": 0 + }, + "0x02f3c42d3da9bf598e453d794ae8d4890320b343": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 1146241398815394243123805056374174626467052878743429584512404894216177809151, + "varOffset": 0 + }, + "0x03caadee41595708c496f260bd3e4076ec61762c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 90425038532821615627119712111557879898748681153481420525441555204786193418549, + "varOffset": 0 + }, + "0x02f871a2ecc9458fd174f9eb08ec212b6ce0fadf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 34447311712406382648376959748480698779025950317008583810497055926006208436808, + "varOffset": 0 + }, + "0x046b440b797c65b68779c3e6239e548c81e47d66": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 103091500772287737612988311275233255923964643516416398058009849699409555670833, + "varOffset": 0 + }, + "0x0466eddf9ae0555d66caac5bb62a5dcf15633988": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 59992007636193261676380615806135756815949572447317923515228459606090564680528, + "varOffset": 0 + }, + "0x027683bb381306fd48f2fc0f64aa1cf72e3f1b7e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 103938502349774476944273093647145802062759486769086113948576288712917174745689, + "varOffset": 0 + }, + "0x0555d69e02e07a77bee2221e4bbe1437420e0132": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 112868699110779311444823305037658199691703559828712693899733220388389640875311, + "varOffset": 0 + }, + "0x04ed5454fbd2b14e23eed59f5e50f955537f8b59": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 89088337596016122826623990762465042604221273064998321147569441149699572047980, + "varOffset": 0 + }, + "0x04092f89bacc19dc2c4aa4c24061f975b4257351": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 79376602282373631706444171747679848886474373003035135177735074130552952664486, + "varOffset": 0 + }, + "0x019c4454e7444b8874f4ee65c2bf3ba7bf84202c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 92465780685132997566803384049262247818355694733545927843554068667825177834011, + "varOffset": 0 + }, + "0x02202a278f8a079782b0dec90afe39328f53ba03": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 68975754748845535105133391089274695118279397042090546312638199443878575693165, + "varOffset": 0 + }, + "0x068b69cb88c393e09aad5753a398a1bb97813d27": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 12546380089958044388382936959263880684425920169570543721058334477429381671978, + "varOffset": 0 + }, + "0x017e1733cc193c873fae6261c743e712c5c1cc4e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 33516603671364777314820639806980634929448172311890732177992068134402859543892, + "varOffset": 0 + }, + "0x027d210e67d2beaaa9832aab3fdcb0efeb4d22a8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 110215989426672089447017549175852450426678187258227035681477185753070354388591, + "varOffset": 0 + }, + "0x056b374b7a36f799fd85c662d5e4ef85027de8f6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 111331237609747408108187642150757869111863101152353772439182322471303222390691, + "varOffset": 0 + }, + "0x060dcf6f144e7edd01ac6f0801a4185fd226267e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 11612589450149173189312143136378318899896488040751609914457670663906354003068, + "varOffset": 0 + }, + "0x05e8fba1b74e21678bf89bc7b25261b80c678ebb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 8109837763908627066529273686349805823983633036763120149636749956163097416742, + "varOffset": 0 + }, + "0x06716cf10c90262bf8f4a36640f13a0e8b4b38f0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 40535361582758938112338974062367283167925913119920080415982231791265943931960, + "varOffset": 0 + }, + "0x066fa39d3d038dd424e1997105cf27f28d224f4f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 105608895912133699468765283407754576817130570603433447554659366875184390867291, + "varOffset": 0 + }, + "0x0686c9fc63240659be815d95289bda4246c9c12d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 92600758258388973929018112893879346863624397044181087925135539930739373215325, + "varOffset": 0 + }, + "0x00e368becfb9c047a173b659a3c2b27dab254abf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 98248137346915047839829947707499517179283798883046031052265562574779629263284, + "varOffset": 0 + }, + "0x06b7b8c8b23c7aacac716619fa58fd76d4958cb8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 43990465493471624308571125341090841756163868980327527887682188354460546364901, + "varOffset": 0 + }, + "0x03ed1382acf0219034916f9c6b1f0904385d2216": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 91987668210018757003466953393979722166040456838029715447931636439677538749955, + "varOffset": 0 + }, + "0x0695e6719ee9643ad13d7bdc4ac5067877d9553f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 72548599188174994973308731835104201462589993133124421097255292830383080957814, + "varOffset": 0 + }, + "0x06aa5b749eb031fa6e79a8420b650d07f903b711": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 42541135043861421516753647970292681487059638840161825225811215966770865240146, + "varOffset": 0 + }, + "0x07dbcfaf4339f90c7facc50ee4cdb29c80f0162c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 76942852567492430198851741037139435511034672257887913730477490924646395091321, + "varOffset": 0 + }, + "0x07e85836dce46e928e5dd9c022c33e527ba8a9ba": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 9751654099529984943707873235319295807496777769350602694854282274731086041414, + "varOffset": 0 + }, + "0x07e8ac57ae9a0b343fabadb2d0e0b14b3bf94236": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 100469189006291211207643308958676205224723481352808153904760163289544213052707, + "varOffset": 0 + }, + "0x006db972a1e87cd4b43aea957fcd199eca23bb8c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 32000000000000000000, + "varSlot": 40288388721680611528695979744956786037659533992777218488018377911570370750280, + "varOffset": 0 + }, + "0x0e773c76ce4444a9f12104c8cd41d45cd2b1aea6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000, + "varSlot": 7105020918224968978549034976815935140728774193363464533747794047732022612436, + "varOffset": 0 + }, + "0x0430d01eba8d2e8f40018af1be09c9f058876550": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 220000000000000000000, + "varSlot": 10385905104337272255405144824076130232786070341811387707278972793056502810685, + "varOffset": 0 + }, + "0x8ffe6ce619aeab685db18c21309ed1137aead61b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 5149922134456129199226751427611347208181861765524135154635441727745384681142, + "varOffset": 0 + }, + "0x00baa3b55d16d95f0e0bfa856d9a83714f419e04": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 45000000000000000000, + "varSlot": 22700661684056224765139856895449254052701643171405425822474824293764510226984, + "varOffset": 0 + }, + "0xde1c6e84bcc4931030e4656e02b828f8b9ec147f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000, + "varSlot": 60823256569164154826946015693708957913257723917010450254177044270793049507363, + "varOffset": 0 + }, + "0x043132791fc392ef76f3c7af32e69e27dabf2b89": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 43471096669979569617671162940546636736370780110924471137197054726182523003367, + "varOffset": 0 + }, + "0x8e456dfb072c32b430209d5edec5bf877ac58998": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 105000000000000000000, + "varSlot": 94550729563545447994653689980196494951948638087072669906758973250013228754530, + "varOffset": 0 + }, + "0x80f60d786a93f471f995e264cc71826f7a205b44": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000000000000000, + "varSlot": 33420279264452981202337286113987601148300660156437325374095600714171832152680, + "varOffset": 0 + }, + "0x54bdbe19fe3cb6f5cd89cd6db4d9faafa20f260e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000, + "varSlot": 90843255424543457810211342098997543476548784669954113424449783278051088024891, + "varOffset": 0 + }, + "0x0536ae6d02ebf3fc4fc60beda2306f6629fdf701": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000, + "varSlot": 851305194943013528861872606785205570048836830751724899315137180458656499704, + "varOffset": 0 + }, + "0x0712537955c5896db9a90c992f5c8fbb243897eb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000000000000000000, + "varSlot": 36448765543119802312833387683043847613970455255626450110488486282646883520693, + "varOffset": 0 + }, + "0x0ae6b8ad849b7f7d7c955311b6cd1bdeeacf2628": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000000000000000000000000, + "varSlot": 66330106115798642250239292311344782572045764842268583767333224675925055310212, + "varOffset": 0 + }, + "0x0a6798c220f5e1a1c88ebe00d1832248e87be4ac": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000, + "varSlot": 104376997888073234568293736914604644378199466266488339375390863992881883557053, + "varOffset": 0 + }, + "0x4849a18d6e94137baa4f55790a8005bac1604ba4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000000000000000, + "varSlot": 7523967648619069364483416174518068148487686217363723041484565096938622205531, + "varOffset": 0 + }, + "0xab5801a7d398351b8be11c439e05c5b3259aec9b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000, + "varSlot": 56744107275265879624807579115787474221706994895205559905566912267497923471361, + "varOffset": 0 + }, + "0x10c30768150d422a90ef7896e98a0b799c7ee7f4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 13940820000000000000000, + "varSlot": 57263265673443437443281485999113489926134150814064275012495132997980384746766, + "varOffset": 0 + }, + "0x04d894e7ab4379b526dc3f9798d636a8b9991af6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000, + "varSlot": 7721088798998900312041465502066885504236230056584341588241774704247006260642, + "varOffset": 0 + }, + "0x0cc751d19f5129643296a06b9b24fef960acbfae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000, + "varSlot": 28178835191907778421496909981924821991277552653408625664266573546546900506017, + "varOffset": 0 + } + }, + "varSlot": 0, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "Soya", + "varName": "_allowances", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": {}, + "varSlot": 1, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "Soya", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 400000000040000000200000000, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "Soya", + "varName": "_minters", + "varType": "Roles.Role", + "varBytes": 32, + "varValue": [ + { + "contractName": "Soya", + "varName": "bearer", + "varType": "mapping(address => bool)", + "varBytes": 32, + "varValue": { + "0x9ab4d299a7b33154afcb575a0d51b38664734831": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": true, + "varSlot": 5415072310845636673364418084494269952989763123438041640085470491836451944139, + "varOffset": 0 + } + }, + "varSlot": 3, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + ], + "varSlot": 3, + "varOffset": 0 + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.inv.json new file mode 100644 index 0000000..668ae42 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.inv.json @@ -0,0 +1,194 @@ +[ + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "_to != 0", + "_value > 0", + "msg.sender != 0", + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000", + "ori(Sum(balanceOf[...])) one of [100000000000000]", + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000", + "ori(totalSupply) one of [100000000000000]", + "ori(balanceOf[msg.sender]) > 0", + "ori(decimals) > 0", + "ori(decimals) == 6", + "ori(decimals) one of [6]", + "ori(balanceOf[_to]) <= ori(Sum(balanceOf[...]))", + "ori(balanceOf[_to]) < ori(Sum(balanceOf[...]))", + "ori(balanceOf[_to]) != ori(Sum(balanceOf[...]))", + "_value <= ori(Sum(balanceOf[...]))", + "_value < ori(Sum(balanceOf[...]))", + "_value != ori(Sum(balanceOf[...]))", + "_value <= ori(balanceOf[msg.sender])", + "ori(Sum(balanceOf[...])) >= ori(balanceOf[msg.sender])" + ], + "postconditions": [ + "elem of balanceOf[...] is one of [100000000000000]", + "totalSupply > 0", + "totalSupply == 100000000000000", + "totalSupply one of [100000000000000]", + "balanceOf[_to] > 0", + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000", + "Sum(balanceOf[...]) one of [100000000000000]", + "decimals > 0", + "decimals == 6", + "decimals one of [6]", + "ori(balanceOf[_to]) <= balanceOf[_to]", + "ori(balanceOf[_to]) <= Sum(balanceOf[...])", + "ori(balanceOf[_to]) < Sum(balanceOf[...])", + "ori(balanceOf[_to]) != Sum(balanceOf[...])", + "balanceOf[msg.sender] != _value", + "balanceOf[msg.sender] <= Sum(balanceOf[...])", + "balanceOf[msg.sender] < Sum(balanceOf[...])", + "balanceOf[msg.sender] != Sum(balanceOf[...])", + "balanceOf[msg.sender] <= ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] < ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] != ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] <= ori(balanceOf[msg.sender])", + "totalSupply == ori(totalSupply)", + "totalSupply >= ori(totalSupply)", + "totalSupply <= ori(totalSupply)", + "_value <= balanceOf[_to]", + "_value <= Sum(balanceOf[...])", + "_value < Sum(balanceOf[...])", + "_value != Sum(balanceOf[...])", + "balanceOf[_to] <= Sum(balanceOf[...])", + "balanceOf[_to] < Sum(balanceOf[...])", + "balanceOf[_to] != Sum(balanceOf[...])", + "balanceOf[_to] <= ori(Sum(balanceOf[...]))", + "balanceOf[_to] < ori(Sum(balanceOf[...]))", + "balanceOf[_to] != ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) >= ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) <= ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) >= ori(balanceOf[msg.sender])", + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "falsified_preconditions": [ + "ori(balanceOf[_to]) == 0", + "ori(balanceOf[_to]) <= _value", + "ori(balanceOf[_to]) < _value", + "ori(balanceOf[_to]) != _value", + "ori(balanceOf[_to]) <= ori(balanceOf[msg.sender])", + "ori(balanceOf[_to]) < ori(balanceOf[msg.sender])", + "ori(balanceOf[_to]) != ori(balanceOf[msg.sender])", + "_value < ori(balanceOf[msg.sender])", + "_value != ori(balanceOf[msg.sender])" + ], + "falsified_postconditions": [ + "balanceOf[msg.sender] > 0", + "ori(balanceOf[_to]) <= balanceOf[msg.sender]", + "ori(balanceOf[_to]) < balanceOf[msg.sender]", + "ori(balanceOf[_to]) != balanceOf[msg.sender]", + "ori(balanceOf[_to]) < balanceOf[_to]", + "ori(balanceOf[_to]) != balanceOf[_to]", + "balanceOf[msg.sender] >= _value", + "balanceOf[msg.sender] > _value", + "balanceOf[msg.sender] >= balanceOf[_to]", + "balanceOf[msg.sender] > balanceOf[_to]", + "balanceOf[msg.sender] != balanceOf[_to]", + "balanceOf[msg.sender] < ori(balanceOf[msg.sender])", + "balanceOf[msg.sender] != ori(balanceOf[msg.sender])", + "_value == balanceOf[_to]", + "_value >= balanceOf[_to]", + "balanceOf[_to] <= ori(balanceOf[msg.sender])", + "balanceOf[_to] < ori(balanceOf[msg.sender])", + "balanceOf[_to] != ori(balanceOf[msg.sender])", + "balanceOf[_to] - _value == ori(balanceOf[_to])", + "ori(balanceOf[msg.sender]) - _value == balanceOf[msg.sender]" + ] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000", + "ori(totalSupply) one of [100000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 6", + "ori(decimals) one of [6]", + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000", + "ori(Sum(balanceOf[...])) one of [100000000000000]" + ], + "postconditions": [ + "elem of balanceOf[...] is one of [100000000000000]", + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000", + "Sum(balanceOf[...]) one of [100000000000000]", + "decimals > 0", + "decimals == 6", + "decimals one of [6]", + "totalSupply > 0", + "totalSupply == 100000000000000", + "totalSupply one of [100000000000000]", + "ori(totalSupply) == totalSupply", + "ori(totalSupply) >= totalSupply", + "ori(totalSupply) <= totalSupply", + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) >= ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) <= ori(Sum(balanceOf[...]))", + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.json new file mode 100644 index 0000000..b611d8a --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.json @@ -0,0 +1,1161 @@ +{ + "variables": [ + { + "contractName": "Token", + "varName": "name", + "varType": "string", + "varBytes": 32, + "varValue": "Asia Tycoon", + "varSlot": 0, + "varOffset": 0, + "byteSize": 11, + "toReadSlot": 0 + }, + { + "contractName": "Token", + "varName": "symbol", + "varType": "string", + "varBytes": 32, + "varValue": "ATC", + "varSlot": 1, + "varOffset": 0, + "byteSize": 3, + "toReadSlot": 1 + }, + { + "contractName": "Token", + "varName": "totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "Token", + "varName": "decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 6, + "varSlot": 3, + "varOffset": 0 + }, + { + "contractName": "Token", + "varName": "balanceOf", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xaec71d79d5b2f587ce72075696de0c6ec013edaf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 98049745000000, + "varSlot": 78261094237122612561208606075897613756040355593838784461147794586676108249564, + "varOffset": 0 + }, + "0x8b00cb81ae967f125bf293d44e71f3b0228b967b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000, + "varSlot": 111710630229866561094249506719765984046335215492306220168952623543893849604108, + "varOffset": 0 + }, + "0x008e2c129874748b34cc0a4d3448a5eef950fc8b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 104534251869698707691525020700915582935391213436857317921534235366797816867956, + "varOffset": 0 + }, + "0xb9c682ecfdee068c4bfecd091ee948465ccafb40": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 18890344838381766536184769112230461562966257395793650714039924938269104291444, + "varOffset": 0 + }, + "0x62167b1befcf8834066479118f90d3c0e861ef71": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 31658599646944269812120083501364097506353539957896522523559367178659448789076, + "varOffset": 0 + }, + "0x8e1355434d3bbbed4b7b24d8148e39a994c375a6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000000000, + "varSlot": 1829447806044841620828536081209251190596714756690664046992943797218764213931, + "varOffset": 0 + }, + "0x4cc7f9bef204dd7eac5354cf4580638a38f8ec60": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 60000000000, + "varSlot": 114213703773474711593237574324510066415774027335954772881481761472086460257342, + "varOffset": 0 + }, + "0x44d7a0cfe66930495243a54c15411fce034e8952": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 26000000000, + "varSlot": 17703529742090518598459422962794902485396790518577867126644846952671248489195, + "varOffset": 0 + }, + "0xeff9c598a7517d11c6f9089972f6e8a978f2a006": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 74000000000, + "varSlot": 101955193942446409755410183915971305804592752256087885855853563021018675072995, + "varOffset": 0 + }, + "0xba338bea55674306208ab69cb73a5e312f9b9cf3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200000000000, + "varSlot": 31521077404341098982638545125553637479109188118685860760939926256598485622247, + "varOffset": 0 + }, + "0x8dc3ab7cbd25fe2c40f92ea105935b4dd33ad23a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 57181717690592018313454778353561707981466870074847292075129742696247851638247, + "varOffset": 0 + }, + "0xab64e13ff5c710cdb21d16e95b93b4cb8257fadc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 57856858110340611056182356657996162070124865100909651022417490636459342526830, + "varOffset": 0 + }, + "0x7b9ea68329e3c490a67c3308491f4068daaa17a3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 259000000, + "varSlot": 77557068974136978884324037736877259301839081005312564013071094366572230763144, + "varOffset": 0 + }, + "0x99777e366ef309afbfc45246eed59eaae9082dc7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 57893867786577961627678140221551393795917146538314264017081529699455053037670, + "varOffset": 0 + }, + "0x8844a4b390a1509b8b87601b319edf6124517962": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 15000000000, + "varSlot": 16566788672063556279565197072905941736007457036186447052583599918966167378026, + "varOffset": 0 + }, + "0x01f25b74775a9661e7490bca23516573ee8db6c3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11000000000, + "varSlot": 76118588692835084190867916492088591315702893921216907828090072283413359014349, + "varOffset": 0 + }, + "0x86c0cb468446a6792cad4a16fa5c83fbf68771ca": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000000000, + "varSlot": 98389632130966743250725305341807461763884834505528504419885338563261791312943, + "varOffset": 0 + }, + "0xd3f18ee6bafa790a47e34ee753dfcffc53dc446d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11000000000, + "varSlot": 33249141243157184853261583152235547906516868071367165731542609489369031369347, + "varOffset": 0 + }, + "0xd1f0dd84bf6ce3c4d81c4b6285859f2ce61f2789": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000, + "varSlot": 95980015966353833943501925217391241327109668459359197601014770152943132936555, + "varOffset": 0 + }, + "0xdca6ad1d5b1ca47b8dc2c6fecc8a410e7b49afd0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 80836553984885473618646476073803244068181489677481496849692021764079414242470, + "varOffset": 0 + }, + "0x4b0909f1d21001fd09f6d27968df260a6a9e0288": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 89314590902822769347148449726328150612409347181803450780942602530727516778705, + "varOffset": 0 + }, + "0xcb687f7458c81c6a811b934d741dd3db2afadee1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 2921676937242035636923244420317581788665362751410396864229184157608680567839, + "varOffset": 0 + }, + "0x651e476eb5ab383e661b660137c0910c1ff1461f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 98409986723775244442980457757498283776058468023187750904345575096528746776665, + "varOffset": 0 + }, + "0x9da98e5ebb1191887b882a4d606858b07d3fc0d8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 59930399670486453161007162374879889163057772538537407150448210252205464138521, + "varOffset": 0 + }, + "0xa7535cf5c38b84e0d68e9d0dbe31a257f8d6be29": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 113783905872646565594670512661129374384645792853475301759537620091017653269057, + "varOffset": 0 + }, + "0x23a1e0f7662bf22c3432279a35cf19d10dcb449e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 76824610682272510064709604099193539818164931595268118527829134309608187619638, + "varOffset": 0 + }, + "0x21d24a79f8973e9af8b5806b9f2878f82ca09f31": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 78635835110400591931288924002003540924734443382072793769332834987003640731206, + "varOffset": 0 + }, + "0x75cce0b23e85a573e06f703cde1255c3b28c67c1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7000000000, + "varSlot": 107461326514004060494607802263188964334106866393833558417120128125882370648007, + "varOffset": 0 + }, + "0x3d5cc0913adfac28e253c12873753014052edfca": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 22894428541930736724614501079928668872133673336351175457901339387065546575096, + "varOffset": 0 + }, + "0x9a06b55f62468f04fc5e9f6824d020f4e688c73c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 39000000000, + "varSlot": 79028695025365155508888776072460697561044422683534785029497542564700932742099, + "varOffset": 0 + }, + "0x71385efb5a7c763fd93fee13578597bb3832ef6c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000, + "varSlot": 24321837962726572238604993365173769554626948298944949527414668877159040279410, + "varOffset": 0 + }, + "0xbd3cb2fbf4c1cd9d78a1c91279dda4e2d5d97e09": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000000, + "varSlot": 68418435023999838545910475826692656155400728286943911717072654865484523040939, + "varOffset": 0 + }, + "0x633c49d58e36645cc4d359ef306edcf4e5d9b16f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 95277057222561740152686783047184532373336543134789182360401945276109259416617, + "varOffset": 0 + }, + "0x3aabf7c5007842b4563725a07b5b74d2ee7dffde": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000, + "varSlot": 95067445171029526481045292994664207638255178811926117058214334856546090038307, + "varOffset": 0 + }, + "0x7942d2af7785291e927dbb5f46d3444817e2c167": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 74900154487288539662878911733402766403920869384226957721647896434329294397320, + "varOffset": 0 + }, + "0xa16ebc263a79952b9b7cc204e1ef27d4869b5524": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 29866000000, + "varSlot": 28041661447083546476298337569153053766214026011741265999249387518869761897816, + "varOffset": 0 + }, + "0xab1703646f5c80c75273abb162c65f12ad94adf8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000000, + "varSlot": 19249356544436877949722866799224096679249463568383696148342249905451036098967, + "varOffset": 0 + }, + "0x8f760748b0db4682499ff358a5f9f80e59f1829c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 10318946829656777650197922145959517209729539424175787796702338653891755720659, + "varOffset": 0 + }, + "0x5e46afac097e109e0966e2fecacf122b3af21aec": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000000, + "varSlot": 88047704212308435630709395398335646481719150331256716007346587890923856439964, + "varOffset": 0 + }, + "0x7d536cd7566a80c18c2fe5622c05fdeca068d449": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 11301992748112526588337785212068449132670297067493549124259965115879805614724, + "varOffset": 0 + }, + "0x91b08faa93d6585564f45daf2ca176378139d95e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4545000000, + "varSlot": 107834918619664613675577303603703469535116174582413314280962879282996854906084, + "varOffset": 0 + }, + "0x7abfa60a3240757c3d34e5a73a9936bfd728ff1c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 12500000000, + "varSlot": 56058071104796647293534955063413913400949513674091829590867642314984229620227, + "varOffset": 0 + }, + "0x3a3159fcdc77077d443c7ffc6afd4af098c0a4f8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 112566160806022870848711835053367717544023471427446443900139544470307839652558, + "varOffset": 0 + }, + "0xc02711e78220748d089ab3ec3b8607493a5069c1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 49600000000, + "varSlot": 68679619373946090146051714345572113562101065995515288641225762319161313201580, + "varOffset": 0 + }, + "0x3042f57e1f3bce2a1b6261012c41a5a350a8f385": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 58014776284258296585514782994863800454736594450898083099913399126514472343001, + "varOffset": 0 + }, + "0x9b8d73b932ec9d8d9a5ef270efbed294704edef1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 46968199053491454820875351367651307195353725465997381840304903885503683744741, + "varOffset": 0 + }, + "0xf76ea66a861773afe488a433520a2349ad8f52e6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 106455860813995540457695507784724561334213415899706036951751849366135452075691, + "varOffset": 0 + }, + "0xe0690cca0d7cdf856668959dade6ccf23ec9fc67": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 10448370388647787315983109144457225692872319143617219497133528493762645467942, + "varOffset": 0 + }, + "0xaf18b5d376cb5f14d5d07385c8df38fc1142a015": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 3497377334883116583610137787860426326019690189451591434671249268295541323426, + "varOffset": 0 + }, + "0x453c19d0604aabef044ba74e0f1181b8ef450b8d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 1209103181385977938041768712456535896672899951533875693584585548529189366516, + "varOffset": 0 + }, + "0x394526300215f521d989ff269c4e00f9f52240ee": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 109854488908609026699738883790309476961511133096779867870777768919522545945867, + "varOffset": 0 + }, + "0x00cdbb2fe0e43dbc689fdf4e2cc6e4a6a6a0af6f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 107574303687808754656372767133399589988506931142773765220924799160262391886995, + "varOffset": 0 + }, + "0x86b2343c446b156d679b56d5683071535c84d8ca": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1720000000, + "varSlot": 51672559941497881540090843503724534048972857424174550558794356875602538441463, + "varOffset": 0 + }, + "0x1cb2ea58b38e6c8a22ad223d48958c86ccc4a93e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 259680000000, + "varSlot": 89669221886975563411633107984025334766517880792276605765557066976173463293365, + "varOffset": 0 + }, + "0x0031fe17615a857bb52bb9a9792dfe4c669b29ef": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 8258169323784650508481917765122289072872492235114619145899741865287978927965, + "varOffset": 0 + }, + "0x7849b8fbc68cab6665550cf658a8a39a45cf3f47": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 76982087831646325480219854228168173992100209745001675848341134914993199760092, + "varOffset": 0 + }, + "0x0f18383733b3eded650ca10c7b0a8a510b821851": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 66307231022100408245026797394302730611513962251457811283436108985209736255230, + "varOffset": 0 + }, + "0xd316b1ece40a535fc8ae851d80ba1843bb82068f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 45611471435373317655914552040070218119385859252298977104602969215194639254710, + "varOffset": 0 + }, + "0xa044077349d31a0bf796061e533cbd7d47ca53e7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 52313619564689738897949937005542529366980782677879975137945252476039584351835, + "varOffset": 0 + }, + "0xc56d5a647a9600478e071dda70fe4d2fde38c79d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 17857000000, + "varSlot": 97289901319176756394469224623977290260330005158215135377120223313114885493886, + "varOffset": 0 + }, + "0x9ac6188a4c37d846ca859432f2e53fd99fd7cd6e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 20551650730596454971540665469242653737646651863193010909067005471548189299267, + "varOffset": 0 + }, + "0x0073f80c494543c56c3b32506e71bddb02a6536a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 750000000, + "varSlot": 33353596927642130731675812966112352895618388343674936203455674406480384648283, + "varOffset": 0 + }, + "0x0e6c6d641021b26efa31c38f912d1d28594d8b96": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000000, + "varSlot": 3676606314197122977695304509458979837992721464966459890364130589679185531470, + "varOffset": 0 + }, + "0xdda788912b0602e291e08bf2f31fea004811c194": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000000, + "varSlot": 2969402337508825538255448794114343706781317820870080125779470566804443509016, + "varOffset": 0 + }, + "0x0e747eb2ff0f26fb77c3a1ea67ee07fac2dbb783": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1011445000000, + "varSlot": 79929199546139067373750802638169168598062074948831307505064113898261601460416, + "varOffset": 0 + }, + "0xce35c4211175be8b05ba3da3a1c55c0fa6e3a44c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 22000000, + "varSlot": 100655555281593790466574087601478014535508697110184927699519136706190781115952, + "varOffset": 0 + }, + "0xa4283f76975dee7ee3f310402bf1eafd9cbec760": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000, + "varSlot": 50559790994160279927079705420131407185824494984401497341466964058018790596596, + "varOffset": 0 + }, + "0xd4e317587ea11c8921f20e771a0929097509d502": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000000, + "varSlot": 59709368263213820263835784116968468766371402062212518250384128277442051628340, + "varOffset": 0 + }, + "0x74485552e0053b4eaa2c9f2cf6f330fe54eca60a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000, + "varSlot": 20183758196287245287003275039974076458241777871945426568882845020802948769565, + "varOffset": 0 + }, + "0xe1d9ef49481e54c197d94eb28b53b78a9c790797": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 64464200481965259548960179328907215340471498049511072230117613352015297574735, + "varOffset": 0 + }, + "0x38065eda036cb5779afd566527c51459e4ecb128": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000, + "varSlot": 72000162444002165211147031587224734025788619526051468802883415240087716782973, + "varOffset": 0 + }, + "0xa610e61ced45fc77027d277f4423ca9c875434c5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000, + "varSlot": 108227327325191594702146637831029277792602714483455377582330520640731907602002, + "varOffset": 0 + }, + "0x40a70e4041b2abb0b15093058e6aafec01f360fb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 428000000, + "varSlot": 77642738460794430800431574498748032901263791409310105020960718579099882091771, + "varOffset": 0 + }, + "0xa7fba66171b86cb26fc18ec1c701657d33b2fa2e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 828000000, + "varSlot": 81522971149906381948090884243236090427188856938089129823988379986790126207324, + "varOffset": 0 + }, + "0xdf536fb28afd4a8e381dc0043e6af2d4808c1328": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11000000, + "varSlot": 109197892333721561946786243182949959950742722252625658291495657866760076439150, + "varOffset": 0 + }, + "0x7bc4adf5b12c67f380f12968486ed3cc4c994018": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 41529344036981522281602415988457092951219423754485930368407204189340592920521, + "varOffset": 0 + }, + "0x4d5d3170f407cacaaa328660c2ee2499055e3b07": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 80000000, + "varSlot": 18601164438299959650320209536236545821381134982274475244903594132567347547221, + "varOffset": 0 + }, + "0xc65a173d8b253b9dc250bd436b5447e5df4f2e3b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 689000000, + "varSlot": 71602159267862504050552937818996852111459078761806757948093898494479071548795, + "varOffset": 0 + }, + "0xdb5d974960459b29b74095a8acad9739fa67f013": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 15000000, + "varSlot": 87018405127010094068511964323376652766680315003034552457419313820013550563257, + "varOffset": 0 + }, + "0xd91afb27ffdf7a9fc12a2364063787f8f228347d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 443000000, + "varSlot": 46786117880047661264867702784375267296346746516206930249846382434994793225770, + "varOffset": 0 + }, + "0xdda461e846b3cb5815807faecdb57dedb7645682": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 242000000, + "varSlot": 83920500829623788806763389663815108329726273555324292815877731704715407079550, + "varOffset": 0 + }, + "0x4183a5784d929f4b7845782ba16457c169929363": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 234000000, + "varSlot": 56325385851785847489474197799262468836565384123300329285279233048696993410935, + "varOffset": 0 + }, + "0xe0351293507a5cedbce378aa1ed9141672e937e9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 302000000, + "varSlot": 39136068401769137705667222834761185882804043841055186231766765459869055549209, + "varOffset": 0 + }, + "0x096bd5e50f2a63ff9a1cce03ffa820d8db85542d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 27057887148016466862081658228311644358464340066685101056362119901223867471702, + "varOffset": 0 + }, + "0x822ee81324b29f3e0111800edfd4c893031cb3bd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 58611274894784482310819553061342361377518425998920706067346629132083329397544, + "varOffset": 0 + }, + "0x42cd0f18479603f447dede76ad3c3c5da0b247a7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150000000, + "varSlot": 112880359297267164559131928553627458110010548872708988566279709891804271877165, + "varOffset": 0 + }, + "0x8d72a9af1e752df669c53b4aabc599226c249ddb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 121000000, + "varSlot": 41790371480609952492382403267060292981101145858262040619999359443036895198350, + "varOffset": 0 + }, + "0xf3378c83cf770df6891ca514ea10ddd8a79b5d43": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000, + "varSlot": 33669277147289296934526398857368769056505660985009140352895784843223356027044, + "varOffset": 0 + }, + "0xa5c77eacfd3f88e8ca13b87ac52550744c49d0c7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 123000000, + "varSlot": 56713527720562015722333663675355416322795713299145699661388297220859822043170, + "varOffset": 0 + }, + "0xbb633ae1485338f6c7c3ff9c83e4c0c0f24c9961": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 89533655810021225993190566504529355620132479071082173391499692719721985272325, + "varOffset": 0 + }, + "0xfea92faa0ad1dbfaca480056086ffba3533f33ad": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 72273788520537477613611949401352745625274816592389363502413341885325071114507, + "varOffset": 0 + }, + "0x7f90be04b2d7d83171205a51dd879a4c15262371": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 31056644738775523144851387821699690930973283719578520786205645921879450159125, + "varOffset": 0 + }, + "0xa1f6324bddca6380eb7b79bcdf6a4992fda6c59d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 275000000, + "varSlot": 52095733240935572191762266183232351057608556192471037345851166214118640744530, + "varOffset": 0 + }, + "0x1ed6a0403f69a44a36940be271a6176d497300d4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 106206142856240190444682043745816282087700031673021001686431463394524389316382, + "varOffset": 0 + }, + "0xa4ea9fa8873ee6b9c16bffe80623f6be9d18575c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 5668679696917346160737804579350568201244389565973073272132627878153965925185, + "varOffset": 0 + }, + "0x8e4bf34db4eea9f7e3318aedfbaf74c79dccd9fc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 80274377930369414242169708018039364904720734813686252951356258082965093198591, + "varOffset": 0 + }, + "0xdb0f7a577182c7f5929c0b92cc4e2dc8b211a9cb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 22745293925051962300347374433672963437086082900969269975755976659798358615914, + "varOffset": 0 + }, + "0xef9b34895b554b73815ac0c698e26a11eb0a8471": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 17376924248267845506290632811793604796818300597725869121829085847236395176323, + "varOffset": 0 + }, + "0x8c3bd253bcbb2b88881277279e1d440b92886235": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 21238934153867003590388068623378931930936624194968325436304349652561441955456, + "varOffset": 0 + }, + "0x78ecfb07390127dc5c034714df22268753139f39": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 114798132919927551966349309964458556020143654943475709552384005648712198445671, + "varOffset": 0 + }, + "0x1e8c9b9461fcca1eb382738f4ebcfc657d6b7d6c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 69782807716747610085837441232198398186392331040053681329752501269646720608906, + "varOffset": 0 + }, + "0xf24a55a7360fea825a81610b3ad0d813e4d842d7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 95497995807688336120921406273611949240820408464587143434051693365123243371052, + "varOffset": 0 + }, + "0x9ccc68ee594e3bc6b9b2ec943321e1e13fce673b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 1003317108527604984719943073363461012311297574574005932634265265882346540747, + "varOffset": 0 + }, + "0xf25e7e31432ac3147de5e860c7bce2ccdc376fbd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4000000, + "varSlot": 55644464800136197298690642109790032884200665272404565013919500967642630359182, + "varOffset": 0 + }, + "0x746427616d59b9ff9a866325c7fafee572359827": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 38000000, + "varSlot": 15856991234761495460433307014581121889709492709096512956612582103716266236602, + "varOffset": 0 + }, + "0x412686be4085155fe0bd0212dde8804dbf345538": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000, + "varSlot": 261760873576424050913453264038533985446188247834358349960669794767370319127, + "varOffset": 0 + }, + "0xb2f5a764b6e229f99855ba8caf69e0d36184c6c2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4000000, + "varSlot": 109636642012419237013132689585901367841623571791987920096591095858158939532271, + "varOffset": 0 + }, + "0x32f4bcf5187eedfb2a7608bd021bc71a799ce84e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 84917922748657538362472822353230026920730336914545681477878676235723844801687, + "varOffset": 0 + }, + "0x04c26fb6996473ab2a306585f5c0571ae322cd99": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 251284957478778564073656511944292344212114108993017123435633657717775301716, + "varOffset": 0 + }, + "0xc6de911087db195114a3a331a20502326c4b4210": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000, + "varSlot": 59433096743238571811779861448008623384945319743360963366122048667399365099099, + "varOffset": 0 + }, + "0x5023a411690a644dac849fbae75bf0c9be031381": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 7872139891488395007585274263630242343043848879988981398213472228779647501841, + "varOffset": 0 + }, + "0x94ac5b0e20244d28c0c311e215b7182f2d1d4aba": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 99872860832676542683834436111953421418065386601816256175493306576040657039131, + "varOffset": 0 + }, + "0x9543a080ab377674696adca601cc90f570025f7b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000, + "varSlot": 52287884241712214257620408694810200995120541067323756191268086828846974686175, + "varOffset": 0 + }, + "0x57ed5877ae731a17690259d4b0501ecf523e3c66": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 64645795503542699478815131204517763926635061898572585036717480237818813282455, + "varOffset": 0 + }, + "0x1a154aca1ee8616b17eb217f3363ec77382d509b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 69796448114164070138303936485562378601574234648437006465810828063937021746927, + "varOffset": 0 + }, + "0x27a7edfa7cfdc3e1f20d824ef20c3232b4387a73": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 22122411779009760895138743803008083340511301715927411880240250747680684689697, + "varOffset": 0 + } + }, + "varSlot": 4, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "Token", + "varName": "allowance", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": {}, + "varSlot": 5, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.inv.json new file mode 100644 index 0000000..2820b8a --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.inv.json @@ -0,0 +1,309 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000", + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]", + "msg.sender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_allowances[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000", + "ori(_totalSupply) one of [4000000000000000000000000000]", + "spender != msg.sender", + "value >= ori(_allowances[msg.sender][spender])", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])", + "value >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ], + "postconditions": [ + "elem of _balances[...] is one of [4000000000000000000000000000]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000", + "_totalSupply one of [4000000000000000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000", + "Sum(_balances[...]) one of [4000000000000000000000000000]", + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "elem of _allowances[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]", + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "value <= Sum(_allowances[msg.sender][...])", + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) >= ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) > ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "_allowances[msg.sender][spender] >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_balances[msg.sender]) > 0", + "amount > 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000", + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]", + "recipient != 0", + "msg.sender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000", + "ori(_totalSupply) one of [4000000000000000000000000000]", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "postconditions": [ + "elem of _balances[...] is one of [4000000000000000000000000000]", + "_balances[recipient] > 0", + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000", + "_totalSupply one of [4000000000000000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000", + "Sum(_balances[...]) one of [4000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]", + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_balances[recipient] <= Sum(_balances[...])", + "_balances[recipient] < Sum(_balances[...])", + "_balances[recipient] != Sum(_balances[...])", + "_balances[recipient] >= ori(_balances[recipient])", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0", + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])", + "recipient != msg.sender" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "ori(_balances[msg.sender]) >= _balances[recipient]", + "ori(_balances[msg.sender]) > _balances[recipient]", + "ori(_balances[msg.sender]) != _balances[recipient]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "_balances[recipient] <= _balances[msg.sender]", + "_balances[recipient] < _balances[msg.sender]", + "_balances[recipient] != _balances[msg.sender]", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])", + "_balances[msg.sender] >= ori(_balances[recipient])", + "_balances[msg.sender] > ori(_balances[recipient])", + "_balances[msg.sender] != ori(_balances[recipient])" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000", + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000", + "ori(_totalSupply) one of [4000000000000000000000000000]", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [4000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000", + "_totalSupply one of [4000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000", + "Sum(_balances[...]) one of [4000000000000000000000000000]", + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.json new file mode 100644 index 0000000..bf05e2e --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.json @@ -0,0 +1,2469 @@ +{ + "variables": [ + { + "contractName": "CloudProtocol", + "varName": "_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x197b07da30e60a3529df27945cd75a19b2cefa37": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 103705577031221054565418971455814682260788335359724300275326852883082211540342, + "varOffset": 0 + }, + "0x8dce574785ed697c2aea48e9656cad463bd7c3ab": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 45493515891677879006002112682391332631306919335287364901986630313469821758636, + "varOffset": 0 + }, + "0x3b79a5e54b72dfdd442c5a0ed0a6adb833f6e3dd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 99398020384018754942081188362424223822289486796135423448755297664872854580244, + "varOffset": 0 + }, + "0x5a071597c5999ed5c545fe070b3d51a976181370": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 57931718135949311866081009028640795267140775071629036971618558976923231929284, + "varOffset": 0 + }, + "0xe9d47582f25c32eb238f3ebb9235d5ab343758d9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 77813052473813037475549328948626299315987992999052203741689187338413745867287, + "varOffset": 0 + }, + "0xfdbfd5ebe42bf7ee0958b221ef16691c305891ec": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 32090868564258393583668982626662037954776554996868236780133106989914721449820, + "varOffset": 0 + }, + "0x4f7e3bd0893d42faafbd2ec222d9387d654c2211": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 6749567467596982129594188679261317129832478176440290554528878682616378402873, + "varOffset": 0 + }, + "0x69cd7204be13c099abce69c0c9191732302eb9f4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200000000000000000000000, + "varSlot": 103694505584966017720480586230517389359316648929094212383282272268404715436798, + "varOffset": 0 + }, + "0x5d6a73cf1c62bc658cab5f9b8d024e787ad238c8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 51795922853653777402348315628851750195913877976871255723228824624325673283627, + "varOffset": 0 + }, + "0x0af6e055325a1efc6c115ed0f38e3195e4beb5b8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 113098932059405940594059406, + "varSlot": 30245581374946088995643818290604084996465086887787081340190093128280194355682, + "varOffset": 0 + }, + "0x0a567085e10f05798d5ff4929ad1339ad55e23db": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 36404511485148514851485149, + "varSlot": 20503462923332879165914438017868229373965590374752174373179362617867468796586, + "varOffset": 0 + }, + "0x3c6305b91c8df2d59fe7269226fc01a8c8c1c821": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 176039603960396039603961, + "varSlot": 27044177447683357637713333117975455906351818558791521169963872947303328707501, + "varOffset": 0 + }, + "0x8bf637bece7cf6be26c509390f5457cfec62c16c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 41159926862488554295097654569752091275697461976511912570884488674247643123650, + "varOffset": 0 + }, + "0xa91d836838f629e1dcff3f837f6d76886421ff60": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 110000000000000000000000, + "varSlot": 59592703719121271781800721244689242664944719788255144857479315063806205935839, + "varOffset": 0 + }, + "0x6f09fbf188b2d36a9e98b23fa13afc6d57b397f1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 114476742267929267825821718854952870615656122967364378046843385831971028766969, + "varOffset": 0 + }, + "0x02151da70f63423ee0098914ede27a0a72089cec": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 1723097377033575901078949248189659188886337502692300325423315782229511575844, + "varOffset": 0 + }, + "0x5387c593e70c582d790e973903905efa9950a4a8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 105200513160610447459545382400763933085152852651305399725061569213442963595380, + "varOffset": 0 + }, + "0xe17757da8015f2c8ffb591ab975f55b8eece6123": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 125000000000000000000000, + "varSlot": 115320670007724447963448630379255236970942725973468883429159543576834788077713, + "varOffset": 0 + }, + "0xf2fe30bea616af154bfd9b98e8aa895d9376fc79": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 809300000000000000000000, + "varSlot": 61360115913054495748283052568630930002145674031294139238988777176342319556784, + "varOffset": 0 + }, + "0x669c286b62c6b95385d62c95d66ba227e8c25eae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 64988483453708887996730094857851984740233423121837308925849955895749170560192, + "varOffset": 0 + }, + "0x7eba05c1d0b56f8ccc8ecac92afd99a881a7fc9d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1071429000000000000000000, + "varSlot": 21623965624599532644877200004850873089440517366570570303782152409356739301208, + "varOffset": 0 + }, + "0x2421a400efc167372873554ca6183992acab43cc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 125000000000000000000000, + "varSlot": 31760472817809182467122115013635871465185624113193412552281191476114560899725, + "varOffset": 0 + }, + "0x871b2e65c6de83b71be1b94e366bedb4c782df57": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 142857000000000000000000, + "varSlot": 101163006165215015601021075172278221356157766324671019245104894704707983636368, + "varOffset": 0 + }, + "0x4d2ab01b22e757f275d495dbba8caeb728c9f092": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 101357901660751212374045675582327163435903912929224543787364229841288286369376, + "varOffset": 0 + }, + "0x5f3947681d0ed135827d541173b5e5b155a10070": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 428571000000000000000000, + "varSlot": 68271361392125443265487550289192908680862997833034958966486328082086024000837, + "varOffset": 0 + }, + "0xd48d418256771b6407688fa56eb57e4f5f108b4c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 535707000000000000000000, + "varSlot": 76889952947117792090713536100928542281473327678832666348089593370767887755766, + "varOffset": 0 + }, + "0xc1c1b293459eed25fc1a1aea08f10795ba8c7d30": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 89285000000000000000000, + "varSlot": 7578900844155795047136609286986297033694266858268059329465877473935373077299, + "varOffset": 0 + }, + "0xfe3a791227203123369d80e97aff951a57ee0cdb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 14751314875178184339865256547166538047542246052717550236330358018658306973630, + "varOffset": 0 + }, + "0x71d69632ab5319d16163308d189428615fea920d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150000000000000000000000, + "varSlot": 114239221253686273233215150629785979867947288408116390018870541719792892580309, + "varOffset": 0 + }, + "0xdebd58a799bbc347ce6e8648129e5dbb753e286e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150000000000000000000000, + "varSlot": 106346623046067983727113872099530288210052755511392519758197138069495288423965, + "varOffset": 0 + }, + "0xc50146b608c2ab3022fc4294931950cf4e622742": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 465000000000000000000000, + "varSlot": 19737455964746410347641459404004626746158741788766300811531495650905524591525, + "varOffset": 0 + }, + "0x6b3cafbc7ec10f6c0b52e1248db2cc005d860371": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 106225731195433703061789042932552664383532263671132634926688559060324738247381, + "varOffset": 0 + }, + "0xb8cb381f517044cfb74326fe39abfd8875402d76": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200000000000000000000000, + "varSlot": 56381689873208538619897326110880362249122131584134995015330600777671577205966, + "varOffset": 0 + }, + "0x26c655e1fe1778555d4ed1a4cb7dbf5c10b76143": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 160714000000000000000000, + "varSlot": 108184282274100690600822703925575047372137601968060079603389859159966410619220, + "varOffset": 0 + }, + "0xb2c72d6901f12396a25859bb323e9230baa6dcb2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 392856000000000000000000, + "varSlot": 11170558506331890169122698609949950025700110861381527459916239044030328149957, + "varOffset": 0 + }, + "0x37bf843e6605b67476dff6b1f2d750325c37a431": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7000000000000000000, + "varSlot": 44516596465247847758488274106988311291450133968370969612203083338900903989511, + "varOffset": 0 + }, + "0xa8e72bdd7cc39721e6239f406c7a56b477165b48": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 12142143221108307688246028982663553492148192243427347089730348201086940058575, + "varOffset": 0 + }, + "0xb38886a0ab7465cd105f7b74755384d92a5a7667": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 58805842264867784635861949889864081024855735127807315382011764283532480919929, + "varOffset": 0 + }, + "0x57dc505e0294f5087bf2d28cb62cddfe34f14c75": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500000000000000000000000, + "varSlot": 85293972347980227216543703661675806102738333100276478370000656905063484063367, + "varOffset": 0 + }, + "0xa8f74e527195b0471d12d214f4dcee9bf1913a1c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 79756787631425787586944063739993975496889770578332656699068909114415440584310, + "varOffset": 0 + }, + "0x38946eb0f814e40d35d63a3112d9325385c9b810": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 52864888873223357817616486565555610250422149100966162327139036168053632591535, + "varOffset": 0 + }, + "0x50aa52be1fec5744b5022a780248dfaba5fe719a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1500000000000000000000000, + "varSlot": 45345041018128156202084666570819169071499936702112456684302206325327004251028, + "varOffset": 0 + }, + "0x44b125c1639c0c839451f61055c233f589211187": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1500000000000000000000000, + "varSlot": 33210722188461947627882803106700641428442223922759239846285269845032341075989, + "varOffset": 0 + }, + "0x83321a2b0a27fea44ac72dafe04dbc4cc9a36765": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1500000000000000000000000, + "varSlot": 44501517972179656247439007966363585828716979765799043098136460097320721392003, + "varOffset": 0 + }, + "0x0e3f6d71eef5c35e3d9a08bfb033cb63b29b3467": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000000000000000000000, + "varSlot": 52772567262212731198178430723881482674117692509161031758291215340685145730979, + "varOffset": 0 + }, + "0x0b8d9c86035c71a389ad70fb45a31eadc1756871": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1650000000000000000000000, + "varSlot": 61548763045733629360423315416702825111984205275829511850327405130954209409779, + "varOffset": 0 + }, + "0xb6d9dff39565cc38f865c56e3971dc020f03599b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 31139581374369927760736394946254458007966896167138639696120022709618857399958, + "varOffset": 0 + }, + "0x57f63acd0bcfa0c8c1ef65cf6f6a4a7b1c0b94d0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 21106721811309820214570129782214794341797670484949899911216086278213210395753, + "varOffset": 0 + }, + "0x8c5a59af7e319e280782d9a933d91433e35ebb57": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 250000000000000000000000, + "varSlot": 78902922517439462342844703979263915812402266434068933267610822364083460723809, + "varOffset": 0 + }, + "0x210e3756cd0635e017f02ba028f3f70596f24781": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 250000000000000000000000, + "varSlot": 110768913282068941082157184790001744390529997532311076470144050904297748673118, + "varOffset": 0 + }, + "0xfd5d431777943a96a4848455eb0d02d8c211afcd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 36707267402919620739563750587860305009816742861251661079474176193533926883958, + "varOffset": 0 + }, + "0xe11cff5ebcc1934d314560220424a30be6aa3cae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 5843565963787451412287902718090491918549713240981392461464660940896291572550, + "varOffset": 0 + }, + "0x1083e200cc9d3850be4173f2c3fb87189242167d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1500000000000000000000000, + "varSlot": 86325746166976507572260545803373092752108952495733137453358751711022254897343, + "varOffset": 0 + }, + "0x6a36211360fff1e54af2f50caf5b7e807b1d99e1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 125000000000000000000000, + "varSlot": 12388732397170663146611019621586159025545126844606050842080155158842552034596, + "varOffset": 0 + }, + "0x2fe02ac2a53b35cc29476314462bce86a1d433c9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 157142000000000000000000, + "varSlot": 83457356056006678483142757419801242142437753681454636012591782310019041939972, + "varOffset": 0 + }, + "0xe72bf2d276b8fa6dcb083d59b6daa927c8e03708": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 55723486034573935450299157339452495426567564228835648699031708538255898155588, + "varOffset": 0 + }, + "0xb2b153b4a4254836cbee801e1ed58b99c70f6076": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 507142000000000000000000, + "varSlot": 105984055958440297243027683871834588196517517209601937498386624044279723811131, + "varOffset": 0 + }, + "0x787941424a88ed66500d2b26a143c4bae52c4802": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000, + "varSlot": 37293646281604006958020467473892419828708929609356251371469005356634060243275, + "varOffset": 0 + }, + "0xbb87b97cd47033dd47363f692b29298f574cf113": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000, + "varSlot": 94514001012060154141804071139616403787102044520577012937135451011892964377339, + "varOffset": 0 + }, + "0xb028ea48ef050fbd6417472f32b6d36780175572": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000, + "varSlot": 70077213554682159496793418253373099816225160973076108375227554283170072525445, + "varOffset": 0 + }, + "0x37ef345ba2cb8b8530e7a43882877a3ad0880329": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000, + "varSlot": 12568345771873327678501143882032826747846234421836956943037229482594818196982, + "varOffset": 0 + }, + "0xaf8de6f34f05a202f6514080a7c1c3204b51b77e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000, + "varSlot": 79494536734933562033463980992444425688960105662777881611761947574636495227698, + "varOffset": 0 + }, + "0xda11c9d70779eca1f57f898e679bc36c282a0b8a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 85496818700808647288563351723638269326913119645718770283803761571328490503591, + "varOffset": 0 + }, + "0x3245274162ad3faf1437492bb00066fae6d2d0e6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 88778144238423139753614117337211950476945723384111055734205852063433476032694, + "varOffset": 0 + }, + "0x28a966351256a84f93a1afcaca9739806288f8ae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 579300000000000000000000, + "varSlot": 30420424740611840318526183544126152218538000412201270421029657047459426174787, + "varOffset": 0 + }, + "0xc3601254bfb3f6378bd44ab03d8dcda79e736612": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 14737478694318486525562800590230847978817959427672984116530232287094954821557, + "varOffset": 0 + }, + "0xfbdeb87969f5610d006d1a4ed79308a5778e77e5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 7530816217837469696636409090005624411161940031753141496416970969771454951223, + "varOffset": 0 + }, + "0xe6f6b75a97bd0842140863be9fefb332298e3d40": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 62833815094053789048602763307024719031154943303283677088509369081178959803466, + "varOffset": 0 + }, + "0x8e922f752dbe91cf22dc1fad109ac58d2c90d8d6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3804286000000000000000000, + "varSlot": 6596313530093723468236077751565113252693612679071094302951385808019368744495, + "varOffset": 0 + }, + "0x2310f96d33dc8270eb7da616679e901903d18adf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 42516995746783577752970833056152131008130890211476952133150226107196675889932, + "varOffset": 0 + }, + "0xab976d79f1177e7d2857a4a3fa08acba3c71a4a8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 81069861688876936981130639326256792249449346859120572958856467582093754025498, + "varOffset": 0 + }, + "0x68f53272f7a8b825424df7b84612e11a6b8a9459": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 48435915880776498824475765698295414404374565662881023625802752177331758033565, + "varOffset": 0 + }, + "0x1b6e905bcad3ca7f48bbb190df14204814a99602": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 46329149992105498381857542745729240641178352764421536275543460252828563586902, + "varOffset": 0 + }, + "0x43c39886f8ad10fb7daf4a6299cca0a3d6d3baba": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 88984032054591160336354796832098310901430044202590408066983773753435448041950, + "varOffset": 0 + }, + "0x5b86bb8310ff4be7847b15b307878b6d88241f69": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 109905348151809288116910135481530157239617599384677054238586465497724137969680, + "varOffset": 0 + }, + "0x3817593737e9dba4d4e1457c9ba41ffbf477d133": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 114116281262762661527074679426433866770299798097248111113726480987850076099183, + "varOffset": 0 + }, + "0x6a090b6cb107ac5342d29bae821555bca1e69387": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 66433495644908360970885013724289822146485508174392923215377004939103048861572, + "varOffset": 0 + }, + "0x0632b1b4c52b35978d65c808e81ddac101aa76f4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1430000000000000000000000, + "varSlot": 10737621632292468673867755204830308291507094074682792094851667033365350479007, + "varOffset": 0 + }, + "0x35e63c9f479edecafac6a5142aae765c3b5ec2fc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 57309217222381483520062481986753852796615039259283008913587963631233432749708, + "varOffset": 0 + }, + "0x9d07901726c9c46d70ff3be8ce681885e2f00250": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 7447545605476271634481222661949029631718679708337946400518026371272720510211, + "varOffset": 0 + }, + "0x04846a55723c36781a8ee9add8fb457cbae33de1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 108275129003313245819836269727070703253943982788950998165893632091395519365897, + "varOffset": 0 + }, + "0x5944e37e1112e6643ce9a5734382a963f6a75cee": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3350123456780000000000, + "varSlot": 37752233420147905786019753171342999806413563672934063093041349419756555720495, + "varOffset": 0 + }, + "0x6198e302dac7d3b5066138193d23124f034a7f85": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 57683038943359303558614098997384549681059224741775496484330964317909611440284, + "varOffset": 0 + }, + "0x92f486792c13b22427690b118658d6b1d5385c9e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 107206893137403338801668466990679378733778368998333373341611411086881163844658, + "varOffset": 0 + }, + "0x7f2d547f3fc42641dbb02391587f7f3cd6e97fd4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 106407005390825031996473796606683899460824657334809659655890263525264178200413, + "varOffset": 0 + }, + "0xd92fd807d285934e744f4db140b8f097cbde9a6d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 613300000000000000000000, + "varSlot": 41923937291652711544470072662207321048422393527503062712722094222312837126266, + "varOffset": 0 + }, + "0x471cedc905d5914916f8921e501fa7febd6e5d99": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 16400123000000000000000000, + "varSlot": 34942370452936277659354000934360720029803296194594857775189591569330799469306, + "varOffset": 0 + }, + "0xe30aa95e4dfab092ba7fb3246898f7b5296fa883": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 30206771729950796449293345291363043703302558142699517567412367621244139072498, + "varOffset": 0 + }, + "0xcd2d1372b1154345012e85e9a743dccbbb60859c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 103573480834335715746595446347152110007230866934965253189923773263518019269674, + "varOffset": 0 + }, + "0x73b5f5ca9d6d11e6ea6cf420f697069cd485ed18": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 26689529163700618736617891864864896437479876493074044738869426074828363340183, + "varOffset": 0 + }, + "0x6ce00b5f271b6ee55333bb37024420e0ac5bb485": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 57162937897564006145279674835258543099541636396866452457996092149147581576675, + "varOffset": 0 + }, + "0xa6b92fafd9136637a7a5b40fc2ee632c14e2b9af": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 52608527368258635303533976814844603681357224311407112221905898977349782899468, + "varOffset": 0 + }, + "0xbddf82bdb823d666b5bff940038ecb66f1ce41b5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 16174200397076902804987417128791241611684391827353946855306310069566527688890, + "varOffset": 0 + }, + "0x71b3a09807f1f45e38da16ca23c7616cb7c5a919": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 109186110498912548398759236957621706720961090027541463059056377848225149850770, + "varOffset": 0 + }, + "0x06b5e88fe03061a0086ca54504271332fcb3ae66": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 102250000000000000000000, + "varSlot": 56312761365377934600044319558625908917480399851968845650462468874555545335750, + "varOffset": 0 + }, + "0x4365e5cfc73f10e1391fcec37d7f41e4a15d506a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 48509006546198087768777669539855731998060103190951124278631429438631399769523, + "varOffset": 0 + }, + "0x534a691bc5830420b386c5c92273278de6f57bfd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1200000000000000000000000, + "varSlot": 110395326168115561143920260122977681197152681624812484544711152976889136541642, + "varOffset": 0 + }, + "0x415467e770bd9dcf24de40eb890f4ec580a86bb6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 47456965054647558604280237782231038736589885922504849201217386559207451426820, + "varOffset": 0 + }, + "0xe2d48e497c7c1e89f9fa0e5d8fd5e4c9eca7bc5b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 180000000000000000000000, + "varSlot": 75551601681213406742735365964535014489218773958843945830718960796980547970053, + "varOffset": 0 + }, + "0xb780ab91d9c9cfd9fbfaed3599e81c25747bf892": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 53576285029402757011231634122231654206960159610066727569521736967045694435819, + "varOffset": 0 + }, + "0x9830218efa34b408c0c894a93fb19a48ff1a9b54": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 325000000000000000000000, + "varSlot": 80725550791141756138531319337992653292085073333276609904222393753194176254020, + "varOffset": 0 + }, + "0xee61f5fb0db81d3a09392375ee96f723c0620e07": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 54288645992400987037251782496940353310617610269493789423721158649361387634647, + "varOffset": 0 + }, + "0x00343217b01188388c0e3242278231ace35e1b61": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3621648926481690000000000, + "varSlot": 59058733808506577824294741091050504533326352505394665430757243438763494974558, + "varOffset": 0 + }, + "0x7891b20c690605f4e370d6944c8a5dbfac5a451c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 22651430677572753904619964505603704387979969153982575111396837402913295631618, + "varOffset": 0 + }, + "0x252c89b3bfff3a3b0af13d3b5820046b18fca03b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 122955058091650693069307, + "varSlot": 79000999377299710273111980135910981366076464801552082522083896425604673016633, + "varOffset": 0 + }, + "0xa5cd453f981cd255802e0b58d6a6512bd0416b37": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 88339027036232026354679396631023906305138460498036061800469236405792554552835, + "varOffset": 0 + }, + "0xbad43c0f19f897e7d98c6fff236f8f542c1a31dc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 250000000000000000000000, + "varSlot": 21515727154972184754790123550506370507828310892880636970344006343575517977668, + "varOffset": 0 + }, + "0xe0346e4c52e441f6e895b9f9d7dfc7ef94617068": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 564728000000000000000000, + "varSlot": 529554214936309790213622787869923947518501374542689991042097478217929268550, + "varOffset": 0 + }, + "0x77a195116bad43e513a35832b2459e269b3299f8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2429526754338910000000000, + "varSlot": 43280623055345597984547468223138042725817669509530162636523154416114589828261, + "varOffset": 0 + }, + "0xe10d232b50c5e8c0c072d5971a743493150d61e6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 530335119871280000000000, + "varSlot": 108802983298917537579698582175435965386999931921508761078392792004570066523125, + "varOffset": 0 + }, + "0xe3a2a3a7f0551f8e44ec1648fda4612f79ff8838": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1168902204712567115479765, + "varSlot": 6653754542168191109890281493200740444675462836993662408259448911788699736906, + "varOffset": 0 + }, + "0x4ae164039dc5cc03c6553497b0aa3ff7fb1d4615": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2723910891089108910892, + "varSlot": 81917088473824045722691936794131945616131785217284563024451483718750309829252, + "varOffset": 0 + }, + "0x07b1ccb5da7d7a0341fe0dc693546b089c6fa2cd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 799207777988910891089109, + "varSlot": 106687891971709132138825491578944298278067471763428769578951317998357280802695, + "varOffset": 0 + }, + "0xe742ee21b639818424822d2f06da70647a2e3d6e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 189353789531650000000000, + "varSlot": 46740685124599057027267941531039063303190930501492053489004844099338578307284, + "varOffset": 0 + }, + "0x9a7eed6209dce4744cabe2945bfe7d31217b1547": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7479900000000000000000000, + "varSlot": 73585050445243635036639656778774653208922895708426932326806905379137373558229, + "varOffset": 0 + }, + "0x5de17e060d1bd4a038cbca9a1048006c2252e53e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 232600000000000000000000, + "varSlot": 97193710825418474291685615100740357307696924216183283463694675356735201706460, + "varOffset": 0 + }, + "0x548a3c1660656c8bf96f54a8a647805b82e0246c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 194031247947140000000000, + "varSlot": 91308139621275699413612216781616471102341873260498081792750992136389453318290, + "varOffset": 0 + }, + "0x13e50c6ae3cc1200ff5039b6f10838844cd83f58": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 90231437766032158050780161592512672354974263749289102587667767262058952765698, + "varOffset": 0 + }, + "0x5ef94ea086c6f8c14fd431a9820af13f462063c1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 96959017828486625780513200339348227944086214075830579099075212701111444759424, + "varOffset": 0 + }, + "0xcd4ae656e922246f7f45f4c542e0a535bf221d26": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 12465096756110000000000000, + "varSlot": 2275743882578185812355161805473399259760998370245892300074350614747973968501, + "varOffset": 0 + }, + "0xcf79fd18a3d4343f9e12c85ef8e9fdaf8b397828": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 52076719495163132281989340448704304500537776342682788002907191994238839635891, + "varOffset": 0 + }, + "0xc7f7682eaf8770f2fb58f82089a2064086bcb107": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400000000000000000000, + "varSlot": 28023520768189682660437783445968441964333614230149297567766970580316540851521, + "varOffset": 0 + }, + "0x5b76cf9fa3287f486363769b9c967310d4fd48a5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400000000000000000000, + "varSlot": 62227793627549205463972428358227955816753993117883285628505843509454459897415, + "varOffset": 0 + }, + "0xc61221b53a52fb48a6d5515681169da0612870d5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400000000000000000000, + "varSlot": 113143589205411170239987948909091014263923923894861539133668907212154954581113, + "varOffset": 0 + }, + "0x29c1017b610f993431c498c531861102327c8ae5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400000000000000000000, + "varSlot": 29799050753996857428545782455615596598503095775485451695744971396271250048798, + "varOffset": 0 + }, + "0xb77c64a1fd89d57e0f26e1a5c0a4d5934ad84350": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400000000000000000000, + "varSlot": 69098160573111740587712778977314758552171641846691434374153659478616358007459, + "varOffset": 0 + }, + "0xb9a33f9c4eecb2e9b652a17a947fbf2040e1092b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400000000000000000000, + "varSlot": 72270291172363668758062374849280668953817616345749298186406329266698540734004, + "varOffset": 0 + }, + "0x31400d4673f4176df400424fef2b37ff4d9058d0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 550000000000000000000, + "varSlot": 104783980596043322713978622213481806176068533979008087375384603680534952509039, + "varOffset": 0 + }, + "0x733d89e5926ec9b3a3d689c19cb2adcdb96556aa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 425000000000000000000, + "varSlot": 87716549196071720615478924068508824275529622174433126253999959110831115819918, + "varOffset": 0 + }, + "0x507916179fcb268f106ef92ca227a3e0e8dea52c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 415000000000000000000, + "varSlot": 31737134917192999129700809386362525492347932770967576763674321492624034179722, + "varOffset": 0 + }, + "0x38256f28f0b5812f966871993e913d8fe7c1863a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 401000000000000000000, + "varSlot": 78915739139157617678403250961856586916081099019257365536062974981685288029968, + "varOffset": 0 + }, + "0x7f2c23f834ae4192074c27df09639f104993bdd1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 410000000000000000000, + "varSlot": 95163698321390028729224913711066724006796621329760806633170405441839482757291, + "varOffset": 0 + }, + "0x7be8076f4ea4a4ad08075c2508e481d6c946d12b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 418000000000000000000, + "varSlot": 8999558116637176457230048150530763701306214383353701540650226652522733625054, + "varOffset": 0 + }, + "0xe086a9f63c184a90ac3a9dd62782b082724b45b1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 804000000000000000000, + "varSlot": 88945739515462732565358721933240041758434366547696241945078135265826093688176, + "varOffset": 0 + }, + "0xcd95572dca841e191a4a85dacfbe524fced00e02": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 408000000000000000000, + "varSlot": 86371045747555509472130244489835195582467584937397975673313717770134102801903, + "varOffset": 0 + }, + "0xea674fdde714fd979de3edf0f56aa9716b898ec8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400000000000000000000, + "varSlot": 22328858380084127480173680638777804344614240543788864476902879190728356980004, + "varOffset": 0 + }, + "0xef3375b491cff653eaf7c9955a5466f7ea06f37b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 403000000000000000000, + "varSlot": 3050060307032846755573170170225876769422957175465880127866944128625571751067, + "varOffset": 0 + }, + "0xe592427a0aece92de3edee1f18e0157c05861564": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 404000000000000000000, + "varSlot": 101780613272479872168754013519175581084963595571427237223384418424692822622121, + "varOffset": 0 + }, + "0x57900b3dc6206994d3b2d593db8f6c6bfdbb61a9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 412000000000000000000, + "varSlot": 40514271212008632280398518007137301288267524788814363390830526606973513792369, + "varOffset": 0 + }, + "0xf580767347ccb0e78a653ef1a84b9983c1fa631f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 402000000000000000000, + "varSlot": 105042662512778176179447898851464487248633367553170794394952868022269288774533, + "varOffset": 0 + }, + "0x336bfe239cfde8917a7b55949ff8e73c583c91d0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 510000000000000000000, + "varSlot": 42009035302235366349330337375938205944733572230894533160800835104884879264522, + "varOffset": 0 + }, + "0x55199897c116c73ac41182a8be543aabe7a07fbd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 440000000000000000000, + "varSlot": 73162261888010495555031009212353506734278371076801167433716463562353895813201, + "varOffset": 0 + }, + "0xad245cc701ad59713e6a639342c45eb589175e35": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400000000000000000000, + "varSlot": 48320713103549549257292650391115915121834953305775658524234837745179602828163, + "varOffset": 0 + }, + "0x94c04e86221ec1507f8d8d02dbd27f1faa5aed51": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1813300000000000000000000, + "varSlot": 60142499372899338717697063106974646780119354881604992243557245830651866945680, + "varOffset": 0 + }, + "0xa8671abebe1c4702f48addac2809624acd4377a1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 425000000000000000000, + "varSlot": 56303371125929452253041564554594503361609475477324115694869680092275854147882, + "varOffset": 0 + }, + "0x93506ddd66b6c8f7c96be900bb1faf6622b1abc4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 408000000000000000000, + "varSlot": 14295512321180533236821661014829079603718274493668529140248933238024835290621, + "varOffset": 0 + }, + "0xe4a3a2ba2e6645ad5da7d04773316c5857638d8e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 521000000000000000000, + "varSlot": 64792054100760117060809646040463744902600423789919151788555669708957307479117, + "varOffset": 0 + }, + "0xc5458d4093fa55d515c26951a992e49b5c89e1e4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 480000000000000000000, + "varSlot": 12423971943158948245813957570938895731813797804459486192209554446343209704840, + "varOffset": 0 + }, + "0x35f8299ede4b964ae883760ace45445ba44b8540": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 460000000000000000000, + "varSlot": 83027111254649758878721017717156464370107634954606797413603879539419676716001, + "varOffset": 0 + }, + "0x8be414bd02dbe43bd087061c676bce9aacb7b522": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 415000000000000000000, + "varSlot": 48418882870001321254749469728234871924651167504326122160992842824958930388626, + "varOffset": 0 + }, + "0xe27b46c6f6f5bab5e8f7f2110c37a1e86408e20f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 418000000000000000000, + "varSlot": 14107567420636941242419714555726140794696783486871291160925957361989950587309, + "varOffset": 0 + }, + "0x99c1406452470cfce0fadd355c41077593680e76": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 444000000000000000000, + "varSlot": 112045178678018998136670831613879939357877596671107840476816546888476555837025, + "varOffset": 0 + }, + "0x8a4e6c5cb589e464f5962bed1913ecc17ae046d2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 475000000000000000000, + "varSlot": 32779840672848794386969627580797728720091468520285426120642130275166513646556, + "varOffset": 0 + }, + "0x5ee8e72d606779a6f3cd8bba1c6bd4818b8bad0f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 430000000000000000000, + "varSlot": 91931526966383376049625045294559146447562267985349705484828767514446707882633, + "varOffset": 0 + }, + "0x6be85603322df6dc66163ef5f82a9c6ffbc5e894": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 411000000000000000000, + "varSlot": 29112465557847230484607105202746047921203140684204968735717889151372597708918, + "varOffset": 0 + }, + "0x29b7efda7c08773f9eadbc7443a23758e35eac2d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 501000000000000000000, + "varSlot": 46912777143632067694406974280663346750576646842844383727137816127231165892315, + "varOffset": 0 + }, + "0x0bb61556329632a5e786fde652f3fdbcc711058b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 602000000000000000000, + "varSlot": 77320414397585786462648712492935460009900648256273214830635928113803740597453, + "varOffset": 0 + }, + "0x8d8324e011592519424f3267d7d27066b2a03407": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 448000000000000000000, + "varSlot": 20135569951379337226495963713606006061599117806013889567787416065000367328487, + "varOffset": 0 + }, + "0x0e5069514a3dd613350bab01b58fd850058e5ca4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 475000000000000000000, + "varSlot": 79086845051897558657735462865147732786087659653734920706339342097801738647822, + "varOffset": 0 + }, + "0xb5d63fa2d75e535d1398b45187974ba967e87c88": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 700000000000000000000, + "varSlot": 95928106711272334093501120044943248998169341145886515024632376401688010945343, + "varOffset": 0 + }, + "0xc1cae0a347db30cf2cbbd80127fe2182804f8a9e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 425000000000000000000, + "varSlot": 10929767188243256785850246713011285923336246224588320080865199313512095227871, + "varOffset": 0 + }, + "0x93299bc6e036190591291cb78ab626485a7c9c7f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 402000000000000000000, + "varSlot": 111996662782237649745420397722942639006408759439016648398878763849958450210419, + "varOffset": 0 + }, + "0xd0bf9a79df975506b79f331a0ff86ca6701e025d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 420000000000000000000, + "varSlot": 112688757487045472776458248443649542189202973066013580097215826359905636899131, + "varOffset": 0 + }, + "0xdd624287068e1b9f2b4a977791fd9f1e52e37bbf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 450000000000000000000, + "varSlot": 86584448812712550457989372162573021941598803348958252704567650938357130103048, + "varOffset": 0 + }, + "0xc361d80a6e08d143a6e878fe237546a82b7d2d7f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 414000000000000000000, + "varSlot": 77946047110501632492759315516145744464429343524154095688160863927303719847007, + "varOffset": 0 + }, + "0x1445ca8fc3d968497b3e34fb936520f037ca8b3d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 485000000000000000000, + "varSlot": 33405551988517046114603312844173761695723572674041241813468816947983184996037, + "varOffset": 0 + }, + "0x9a6a414d6f3497c05e3b1de90520765fa1e07c03": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 469000000000000000000, + "varSlot": 106464413925796766043525627725235197202444914672677443119445239620259916483620, + "varOffset": 0 + }, + "0xf9211ffbd6f741771393205c1c3f6d7d28b90f03": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 407000000000000000000, + "varSlot": 54853036383441855622283610841441655921636992931647247368154291389822168531693, + "varOffset": 0 + }, + "0x790f0cdb33f65befc4930394086625c57f40e5c7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 482000000000000000000, + "varSlot": 16332619009827339721081195919210417868610962953825589121051913369310842604812, + "varOffset": 0 + }, + "0x78628393d2dabc9164b2345e44d282d8f836af4d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 450000000000000000000, + "varSlot": 57804534213942966822412213516471166155197473385474816345670801558680878812347, + "varOffset": 0 + }, + "0xbfefd5ec9e0cae6d60bcd2da61458fac7b12b792": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 445000000000000000000, + "varSlot": 108065733677122204981707257562708076365046208711556711981106011667156837318081, + "varOffset": 0 + }, + "0x58d22506e14cdfe8e705102fa4c5804449b98939": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 434000000000000000000, + "varSlot": 48648607727468711665390543604766632186384904887681426967546677231416717895009, + "varOffset": 0 + }, + "0x347d6e84bb576da4665f050ffb07e242286ebb80": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 605000000000000000000, + "varSlot": 66762209683859227240984833309777278873357652846124751518724540226989056778524, + "varOffset": 0 + }, + "0x9581448dc4f66184db479c46824863a567214164": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 455000000000000000000, + "varSlot": 20324178785214520298813210636361790189715343398849425271985800901550919633774, + "varOffset": 0 + }, + "0xb5476c3eadb6018a0b4c7c877b9c22766b5fba7e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 425000000000000000000, + "varSlot": 69648394282587521464482850390828727687169445713787841747925874301062497458705, + "varOffset": 0 + }, + "0xfc689e0fc8a433b9aa72d44f36cd69d089ee8906": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 665000000000000000000, + "varSlot": 83608676424845077974477154264603769670786185218318150655072110078402917681368, + "varOffset": 0 + }, + "0x9278b72f21fa812610125d74819389fa68d026d1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 405000000000000000000, + "varSlot": 9882416373699166869519521036023676957406902961438599494780967891372439454202, + "varOffset": 0 + }, + "0xbb6a92d824588960ec018c087b111e90b740d3a3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500000000000000000000, + "varSlot": 12920261423781629954780600522614920911181365126016596679726848584523402881316, + "varOffset": 0 + }, + "0xf0f97eaf2a4fa320a8b01554adf260baa41cc6a9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 530000000000000000000, + "varSlot": 82545017069449138788773820139472481937534653878295314596021919021009213491766, + "varOffset": 0 + }, + "0x0f9ef21232f8819b74942c89de3f4d0796ad78ad": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 835000000000000000000, + "varSlot": 32888965285088670747109777796627065349902034334423568208531904696174198206631, + "varOffset": 0 + }, + "0xfd2e115a4f7a475b482297a36bf3b9006b85e374": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 107044935390249462434759262693149430023511536321339260148170726802218627361147, + "varOffset": 0 + }, + "0xf282d55d253ae36135c0797b43b51b55735d28bf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 450000000000000000000, + "varSlot": 73306451870500032696536745023526504067843186146827177362591436303500095204869, + "varOffset": 0 + }, + "0x37b755d1b2bcfca563635387db33abedf44835b6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 402000000000000000000, + "varSlot": 59473090685269217686128772740838292218687667875330027356402695331793595194537, + "varOffset": 0 + }, + "0xec3726c83d64da462a8a9d6d855b33d76750940f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 24500000000000000000000, + "varSlot": 32180701578971933892534214243985535614540275441211105465494926422891871993237, + "varOffset": 0 + }, + "0x462ec87974bf2a95fb562f393645e2ff0ad45f1c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 425000000000000000000, + "varSlot": 7788267841951000739943512635520854245207548878810630187538481443023770573473, + "varOffset": 0 + }, + "0x8ff79039d5a68a3b7c1247eb7d34da56e6868d41": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400000000000000000000, + "varSlot": 91224867203602208023136207407945352840892732078918356966467537983504225415556, + "varOffset": 0 + }, + "0x340242988671cec34192544f8f25b07b5786a451": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 408000000000000000000, + "varSlot": 31753781350023542301644309800135912155563951246899929256346144241160032689845, + "varOffset": 0 + }, + "0x4a4ddec803e7961a82d82a4c6ca598e8cac462ad": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 450000000000000000000, + "varSlot": 5458741639696858043698903447802033181507750745994563504159817538847411762352, + "varOffset": 0 + }, + "0xe0bb449bb115dbc335aa1ed348b30fffa666c37a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 430000000000000000000, + "varSlot": 14842160767612213492748325169874458557751406370229841054140154213091132823970, + "varOffset": 0 + }, + "0xbae6feccd7194aedf20a3485b78dd77b977d5c3a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 450000000000000000000, + "varSlot": 78390365058582195832830926698931032376107789997153146869301300091253121321394, + "varOffset": 0 + }, + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 422000000000000000000, + "varSlot": 35068872349544571845966850397657449441627970996093452078491042819850199529556, + "varOffset": 0 + }, + "0xbd826360d4621e76101bf17e4f6dfb96c4e2752c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 522000000000000000000, + "varSlot": 69243458855096525855984646546067503876388648334151484948020907332774018492241, + "varOffset": 0 + }, + "0x4ad64983349c49defe8d7a4686202d24b25d0ce8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 407000000000000000000, + "varSlot": 49210229803432617136181270784012397947201585374359028749745175488668556955767, + "varOffset": 0 + }, + "0x65e3181444bbf19c3f2836a3b9493dc3a7c3d901": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 428000000000000000000, + "varSlot": 6082232197134699294301607200661544882611731981185338715586502746715213327417, + "varOffset": 0 + }, + "0x7c0aaa91f2d1d5e42bedf502913ab1a9a7361978": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 458000000000000000000, + "varSlot": 97831296113971386936749935919667648341561534684584209009936698827425499465128, + "varOffset": 0 + }, + "0x31987132665ae1cbbb64b73f728cc81340486cef": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 422000000000000000000, + "varSlot": 29251312225051695705048576401721678108765694738876389625383632600928673334041, + "varOffset": 0 + }, + "0x6e836c029ab406c52a85dedb83074af9386b5260": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 722000000000000000000, + "varSlot": 66840072587784663386427944470892308779039595754394268495933463936083128036881, + "varOffset": 0 + }, + "0xfe2159cc10ccc0b2e5c716118250c8921c761ed5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 409000000000000000000, + "varSlot": 33525474427159863364623165894324692984767812917851351897139042386471533348530, + "varOffset": 0 + }, + "0x1406899696adb2fa7a95ea68e80d4f9c82fcdedd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 450000000000000000000, + "varSlot": 48209584112597473084403591014591895566723146882211236700442151659062145358012, + "varOffset": 0 + }, + "0xf28d22c8b25ff8fa961e305bba701918ddc3339a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 495000000000000000000, + "varSlot": 58496469798871301526056174272477806557860712222524545947043413944816773975769, + "varOffset": 0 + }, + "0xec573d1a68bb90def0829faef0e1df29b3980838": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 405000000000000000000, + "varSlot": 77010853922621585516055752418394402798409394308689216993233533805362284111439, + "varOffset": 0 + }, + "0xab61411efcad3965a3d8d703ff9ed17bfb55c30e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 410000000000000000000, + "varSlot": 88289117560994850255004700565826246276645709113817570671619411223135324597399, + "varOffset": 0 + }, + "0x2b334cfe39654b0216980a78e0ee326e8aab3ef3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 525000000000000000000, + "varSlot": 78364393433159493132285258509642890971031082170253120143091718547976768488468, + "varOffset": 0 + }, + "0x0d57858ed55a147513864c97a8b8f19e944fe478": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 580000000000000000000, + "varSlot": 107549917002531494810250662855855892191975217111048215787451969347791528689487, + "varOffset": 0 + }, + "0x46ff8d28d77ec3a14627cd2f4822e02f0e13e805": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 485000000000000000000, + "varSlot": 78134545243607722231506528466267031671142998369992640261110957394955254615208, + "varOffset": 0 + }, + "0xf33ffaff405a583aee5b25b3188b67bb1d8ea95d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 545000000000000000000, + "varSlot": 61981345068644100632474162409510766971283057590961001436146756711483475490921, + "varOffset": 0 + }, + "0x4ff0496dc70c6d54545e025630b5dc24e54c79c6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 485000000000000000000, + "varSlot": 1326289080184558550425384932437186347496545529904295631841824375224446186059, + "varOffset": 0 + }, + "0x1b8f7eefcf7773bf1e8682894c4caa8e7a8f404e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 558000000000000000000, + "varSlot": 63793297432847690283315914521201593729822976751816658520721136734036798937614, + "varOffset": 0 + }, + "0xcf78c9342605d163b948c8c5278df1232dddd86f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 625000000000000000000, + "varSlot": 7965995900470836849373861909688684239352035845541366954911667485034312788721, + "varOffset": 0 + }, + "0x9dd8bd58989b2cb8022eba498456526e0e700dd1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 455000000000000000000, + "varSlot": 41605652066865297171749801272693219249054438131676522716660252155880274749835, + "varOffset": 0 + }, + "0xc3037aadd8b5d09d84f25b664d8f9eedab5aaab7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 525000000000000000000, + "varSlot": 115658896443082250160108687426489041978052401878092737584195715690136074263210, + "varOffset": 0 + }, + "0x95ea3ed7c2d07ab148c784af919e6271456f83cf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3350000000000000000000, + "varSlot": 207229242999254516495809861354657781799997487563341797287472138705978293457, + "varOffset": 0 + }, + "0xf6f6ccd98a5dfc8597593a6e832ce611088953d8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3350000000000000000000, + "varSlot": 69569813632114617484571628180919864873934327408641994513772200560697327884653, + "varOffset": 0 + }, + "0xca4fbf5aa9ea301c0123ea4a9425ff05eb98bdcc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3350000000000000000000, + "varSlot": 28820069800798342358521549350935571934347960437081616604233980200036610209245, + "varOffset": 0 + }, + "0xbd2eb7ab6eeef13b5a45791f1b631eef93f38be2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1287987907413737029702971, + "varSlot": 89086575410945604060331858310435074340723552657028355757307455706282899997018, + "varOffset": 0 + }, + "0x816ca9daeb015f03ecee911664e5d18dbed47d67": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 116536702763904651960396043, + "varSlot": 97858215302450399196663830992378530498980937781525670621962179133452823206061, + "varOffset": 0 + }, + "0x0443cb6564de76aaea6a391886c5d9e238b45b13": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 80950574000000000000000, + "varSlot": 25528456214627593941304705084976901885157960160166740818598615721922174512063, + "varOffset": 0 + }, + "0x8ec52794f8184e8e3593f895cb072541292d601d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6001125762376247391089109, + "varSlot": 32228851790774885126155310501977865179258861214343482707778669112354415581109, + "varOffset": 0 + }, + "0x2ce8e5cdcfbd1d6dbf02bb0ad951d34d27da345d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2574257425742574257426, + "varSlot": 32249080980957420711828424762048213319214006166833446323684017420497507242719, + "varOffset": 0 + }, + "0x8a2cc9e1bce30e532a3f1c43fa2bf5f7285a91da": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 540596291262135922330097, + "varSlot": 10537003929283021538641068937790481568603948946374017843125836082316898896440, + "varOffset": 0 + }, + "0x5d935de9959033aea7163f8c86ea11b2464a3506": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1593300000000000000000000, + "varSlot": 27611313156630683481610723417710264125148092960983763642713370582205032656114, + "varOffset": 0 + }, + "0x8add85bd2c3f4563c128025c3ce736e3442a7fa5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000000, + "varSlot": 19792888244614915734405706324989712940340268461130466132490567081163915936498, + "varOffset": 0 + }, + "0xf3cc7c5dfcf91e37b38c26a61abe9ca7433549b9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 49699194944657197021357569022968586052757290190325384956104890063112709983107, + "varOffset": 0 + }, + "0xe69eb6787617988983da10603cf31786ad266167": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4509938425778040000000000, + "varSlot": 11589957941439411328859370616933563477305937114855370562096906274677501854822, + "varOffset": 0 + }, + "0xaa16281b15d0bfc8a019747558eadc1db9efe64f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 104567895778902963017905895096948179770435449063511690249301786561327090354396, + "varOffset": 0 + }, + "0x2953e3fb9ef8dc25bafa6c169a5c6cd4a473ac9e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 15000000000000000000000000, + "varSlot": 36842467406004335562578290877595521005678863126104963235172615325542927348872, + "varOffset": 0 + }, + "0xf9ca2babf4092d7646aa9e58cc537075f3ffc28e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 28300000000000000000000, + "varSlot": 110270893214356284399242639106087915458029731832935862536829524811517050923652, + "varOffset": 0 + }, + "0xac8d056e9f87eda2862d7350e56ae41817c1517d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 13639751554455445544554456, + "varSlot": 15808613984811563011107642420342947423808128989150681686854012746279086140142, + "varOffset": 0 + }, + "0xd48b685ad1cf16aa9b1e568eec88eb23ce1b6219": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9082150792079207920792080, + "varSlot": 52622192693918040618740717976055872464102112838067009539888049685180680471825, + "varOffset": 0 + }, + "0x727cdcdfdc58854e811c49dd7aecf107f3eecf35": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 26999999990000000000000000, + "varSlot": 76431509015829801309736857561571142469395273066892102783553116589608651803142, + "varOffset": 0 + }, + "0x6c2ec38aa80c493a6214ec1d330831d04134eff9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 86943108108100000000000, + "varSlot": 3050380060888480011907049744286286358942793450869674657450646989198916637262, + "varOffset": 0 + }, + "0x3a8d6f1b66f0ba021ac17b210b4a1dea224a4444": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 86532893808038839470306102531650684530474838705509022216303153660063159843075, + "varOffset": 0 + }, + "0x45a418b1957cd9ab0c7b6b648a443d3b9b862958": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 46557681980198019801980198, + "varSlot": 110033376715957032043699982298721418548570428430161152400115358704120833327118, + "varOffset": 0 + }, + "0x26e3b817f565bd3654e1ffef95c4fffa0faebb0d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 83714222550667790898095474542013873468941651886169672498769219049543698410160, + "varOffset": 0 + }, + "0x50206b7e137725b4c110d12672632ba93154e9ae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 282022518100000000000000000, + "varSlot": 34641220497413877279063388739122288948391479827893262692181834318065085736409, + "varOffset": 0 + }, + "0x991ad142df845ca1b592733e341781a4be8f54c6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 76001353839816748824020927947097539342959575959803752741843049416225410276644, + "varOffset": 0 + }, + "0xca50e17ca255a0a108bd35cdb137966b8064e3ee": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 48476226099009900990099010, + "varSlot": 58194738394415669607803611106939128015465099380088614321870913819301970601590, + "varOffset": 0 + }, + "0xb70d99465653a768669f584211ce4be98465241e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 86862485382743057626988618073745106222144800305384032336850930777659121729531, + "varOffset": 0 + }, + "0xf7fc211f583415f493955afc5c916a5c20045275": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 109343132283668971479398423247961758353549110915766573376239403556377882095997, + "varOffset": 0 + }, + "0x6f4c0276a0c6dfd3cf18d8b01d09f9d4d9306d23": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 51374249509409946470957407347685897844896351383959443706463971349245737158499, + "varOffset": 0 + }, + "0x952d6fc87e86442e91cebedac847537003e594c6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 17358368357430693211443946962677087414955124551414663123242374759186682750743, + "varOffset": 0 + }, + "0x000000000000000000000000000000000000dead": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1221500320000000000000000000, + "varSlot": 31063888810065305784377451194046110542589701094491830545216746748656552103811, + "varOffset": 0 + }, + "0x1477b2585c73dc5d47b36913ca3f1eeecfadf3b0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 8000004000000000000000000, + "varSlot": 70036333415046222415339079144544469754995846087844120088803117421381380024049, + "varOffset": 0 + }, + "0x5df211cf8a320d99401ae2ddbc41bd52a3b2dcf5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 103300000000000000000000, + "varSlot": 60037200156580503689071630160379919896381701459680970947143093102956833415677, + "varOffset": 0 + }, + "0x680b42a3f032dbdfd023932e4769cfed200e7329": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 120000000000000000000000, + "varSlot": 2235749597923566886314344520373608326017102998669445614442472465134109954877, + "varOffset": 0 + }, + "0x3e938d3585f77190708b32a98c8201e66bf09d6a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 333000000000000000000000, + "varSlot": 12420998095962731459154508084757605194921854309176687678887947106244943319369, + "varOffset": 0 + }, + "0x9829379f22b6985cc1b66aabddb01a1b76cfb580": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 19826661680000000000000, + "varSlot": 65376202509282532598833753505344856050057477952052973183683535938712774806541, + "varOffset": 0 + }, + "0x1786d0ca2b790e80e8c78c4eaa496cae806ff668": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 57107646858621834114042809234694128801079378982584548700663928592387193187324, + "varOffset": 0 + }, + "0x5dd697c77e80c7fda3da1cccd5214c3a75503727": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 24688414044777137607181772, + "varSlot": 75490889059005911571101998988617647144050871857306494622312551893450893662593, + "varOffset": 0 + }, + "0xabdfd1cf11f574fbd2ae65f76c14e981e55bb8ce": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1934122470723719493963919249, + "varSlot": 92542200306275237885547876366555794547885025903334293880005168407090811362678, + "varOffset": 0 + }, + "0x7d1b193701b390893736b557fbf7c2851344f64c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3309091126073639801980198, + "varSlot": 34792639770798969424371284755885605044511729613391900986515544326802255456142, + "varOffset": 0 + }, + "0x11eb2c10323c5f8e31476e544cba358d7297126b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1980198019801980198019802, + "varSlot": 66805594688326234067960652104215324718773464425471274603605545366887512382207, + "varOffset": 0 + } + }, + "varSlot": 0, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "CloudProtocol", + "varName": "_allowances", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": { + "0xaa16281b15d0bfc8a019747558eadc1db9efe64f": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 52370056516615773452568334661202799482438546893748502184620568678583335699945, + "varOffset": 0 + }, + "0xd9e1ce17f2641f24ae83637ab66a2cca9c378b9f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 33329680046960983064176437442729016745724123353194148473984613924707080114727, + "varOffset": 0 + } + }, + "varSlot": 41025574714158593127055574736958371784309407185066312796664019002322535094633, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0xf3cc7c5dfcf91e37b38c26a61abe9ca7433549b9": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xd9e1ce17f2641f24ae83637ab66a2cca9c378b9f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 77402591506188315686946392685637037665360891583830842229114140305262590802419, + "varOffset": 0 + } + }, + "varSlot": 73156740861048212066915589124928883641094974682824924869751122038791073323887, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + "varSlot": 1, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "CloudProtocol", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 4000000000000000000000000000, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "CloudProtocol", + "varName": "_name", + "varType": "string", + "varBytes": 32, + "varValue": "Cloud Protocol", + "varSlot": 3, + "varOffset": 0, + "byteSize": 14, + "toReadSlot": 3 + }, + { + "contractName": "CloudProtocol", + "varName": "_symbol", + "varType": "string", + "varBytes": 32, + "varValue": "CPRO", + "varSlot": 4, + "varOffset": 0, + "byteSize": 4, + "toReadSlot": 4 + }, + { + "contractName": "CloudProtocol", + "varName": "_decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 18, + "varSlot": 5, + "varOffset": 0 + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.inv.json new file mode 100644 index 0000000..bd5c3fc --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.inv.json @@ -0,0 +1,468 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_allowed[msg.sender][spender]) == 0", + "ori(_allowed[msg.sender][spender]) one of [0]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "msg.sender != 0", + "ori(Sum(_allowed[msg.sender][...])) == 0", + "ori(Sum(_allowed[msg.sender][...])) one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "spender != 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(_allowed[msg.sender][spender]) <= value", + "ori(_allowed[msg.sender][spender]) < value", + "ori(_allowed[msg.sender][spender]) != value", + "ori(_allowed[msg.sender][spender]) == ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) >= ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))", + "value >= ori(Sum(_allowed[msg.sender][...]))", + "value > ori(Sum(_allowed[msg.sender][...]))", + "value != ori(Sum(_allowed[msg.sender][...]))" + ], + "postconditions": [ + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_allowed[msg.sender][...]) > 0", + "Sum(_allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(_allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "elem of _balances[...] is one of [993060750000000000000000000000]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_allowed[msg.sender][spender] >= ori(_allowed[msg.sender][spender])", + "_allowed[msg.sender][spender] > ori(_allowed[msg.sender][spender])", + "_allowed[msg.sender][spender] != ori(_allowed[msg.sender][spender])", + "_allowed[msg.sender][spender] == value", + "_allowed[msg.sender][spender] >= value", + "_allowed[msg.sender][spender] <= value", + "_allowed[msg.sender][spender] == Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] >= Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] <= Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] >= ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] > ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] != ori(Sum(_allowed[msg.sender][...]))", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_allowed[msg.sender][spender]) <= Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "value == Sum(_allowed[msg.sender][...])", + "value >= Sum(_allowed[msg.sender][...])", + "value <= Sum(_allowed[msg.sender][...])", + "Sum(_allowed[msg.sender][...]) >= ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) > ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_balances[msg.sender]) > 0", + "value > 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(_balances[to]) one of [0,1485000000000000000000000000,4950000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "to != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_balances[msg.sender]) >= value", + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(_balances[to])", + "ori(_balances[msg.sender]) > ori(_balances[to])", + "ori(_balances[msg.sender]) != ori(_balances[to])", + "value <= ori(_totalSupply)", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)", + "value <= ori(Sum(_balances[...]))", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))", + "value != ori(_balances[to])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(_balances[to])", + "ori(_totalSupply) > ori(_balances[to])", + "ori(_totalSupply) != ori(_balances[to])", + "ori(Sum(_balances[...])) >= ori(_balances[to])", + "ori(Sum(_balances[...])) > ori(_balances[to])", + "ori(Sum(_balances[...])) != ori(_balances[to])" + ], + "postconditions": [ + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [993732500000000000000000000000]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_balances[to] > 0", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply >= value", + "_totalSupply > value", + "_totalSupply != value", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "_totalSupply >= _balances[to]", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]", + "_totalSupply >= ori(_balances[to])", + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])", + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "ori(_balances[msg.sender]) >= _balances[to]", + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]", + "value <= Sum(_balances[...])", + "value < Sum(_balances[...])", + "value != Sum(_balances[...])", + "value != _balances[msg.sender]", + "value != _balances[to]", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_totalSupply) >= _balances[to]", + "ori(_totalSupply) > _balances[to]", + "ori(_totalSupply) != _balances[to]", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) != _balances[msg.sender]", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= _balances[to]", + "Sum(_balances[...]) > _balances[to]", + "Sum(_balances[...]) != _balances[to]", + "Sum(_balances[...]) >= ori(_balances[to])", + "Sum(_balances[...]) > ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[to])", + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "_balances[msg.sender] != _balances[to]", + "_balances[msg.sender] >= ori(_balances[to])", + "ori(Sum(_balances[...])) >= _balances[to]", + "ori(Sum(_balances[...])) > _balances[to]", + "ori(Sum(_balances[...])) != _balances[to]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)", + "_balances[to] >= ori(_balances[to])", + "_balances[to] > ori(_balances[to])", + "_balances[to] != ori(_balances[to])", + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(_balances[to]) == 0", + "ori(_balances[msg.sender]) > value", + "ori(_balances[msg.sender]) != value", + "value >= ori(_balances[to])", + "value > ori(_balances[to])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "value <= _balances[msg.sender]", + "value < _balances[msg.sender]", + "value >= _balances[to]", + "value > _balances[to]", + "_balances[msg.sender] >= _balances[to]", + "_balances[msg.sender] > _balances[to]", + "_balances[msg.sender] > ori(_balances[to])", + "_balances[msg.sender] != ori(_balances[to])" + ] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [993732500000000000000000000000]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply <= ori(Sum(_balances[...]))", + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_totalSupply) >= Sum(_balances[...])", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.json new file mode 100644 index 0000000..b5a49e7 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.json @@ -0,0 +1,753 @@ +{ + "variables": [ + { + "contractName": "DOGEVIPER", + "varName": "_name", + "varType": "string", + "varBytes": 32, + "varValue": "DOGE VIPER", + "varSlot": 0, + "varOffset": 0, + "byteSize": 10, + "toReadSlot": 0 + }, + { + "contractName": "DOGEVIPER", + "varName": "_symbol", + "varType": "string", + "varBytes": 32, + "varValue": "DOGEVIPER", + "varSlot": 1, + "varOffset": 0, + "byteSize": 9, + "toReadSlot": 1 + }, + { + "contractName": "DOGEVIPER", + "varName": "_decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 18, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "DOGEVIPER", + "varName": "_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xa9c724165086adab0fb3a981170623e5a31ac2ce": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 313500000000000000000000000000, + "varSlot": 86934618025144297820767854193381425366193066700977187107761851995003902148250, + "varOffset": 0 + }, + "0xab5801a7d398351b8be11c439e05c5b3259aec9b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 346500000000000000000000000000, + "varSlot": 80391092520422671628179039345041454160039339376351971576145356178131370948120, + "varOffset": 0 + }, + "0xc5638c89ac1af758cc2177734cc76b9bb50ab7c8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 49500000000000000000000000000, + "varSlot": 96004031314403561058148409609162439133909647759564019982162345143433970372713, + "varOffset": 0 + }, + "0xfc7b86cca8bc329ea500135f129d4259690ef258": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000000, + "varSlot": 14904809627099441574906212822407734905139377202705590476689668703510742277914, + "varOffset": 0 + }, + "0xba5799fcbb98dcb987a25b8d0fa0698a6be7add2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000000, + "varSlot": 30411464332366953982646277906146784027276329998108680337635888658522263551533, + "varOffset": 0 + }, + "0x949da077579dee261b08f729b2f70a2c2c123495": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000000, + "varSlot": 51424280675599400192429610681528716527372066282825051432499814965646534165254, + "varOffset": 0 + }, + "0x320499df2dad3349ae7c8c7d94c06126e7b29ee1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 14850000000000000000000000000, + "varSlot": 42939569581527559088420619321270900721301353947432900258757188299940270775917, + "varOffset": 0 + }, + "0xb930febdfcc9a2df6a7827c5e9bc4d9388a6546d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000000, + "varSlot": 46383131406827350486355125593348775262876444402288443632538138907606969218020, + "varOffset": 0 + }, + "0x9bffd9bc367c93e4cc9f27588e74175ec4a6d31e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 8415000000000000000000000000, + "varSlot": 113912697040119457596443072916217323193989684814323663756322657635084442312639, + "varOffset": 0 + }, + "0x773e762f57aa6d9e6d80531bfd9ce84de93c6308": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 8415000000000000000000000000, + "varSlot": 1489053649569979105470799311184630770448535556352335220333086005919366653930, + "varOffset": 0 + }, + "0x9d693e28fbf01799efe33c1cdcb1af3211ff6e51": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 12870000000000000000000000000, + "varSlot": 1152927172016062401171417774496463891038164859817647473582571312963361072708, + "varOffset": 0 + }, + "0x5928159df4c80f0a3e4ca32535bddf990b387b65": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 14850000000000000000000000000, + "varSlot": 114124100418986901332020218233080163748978287490416106320503075677209848768386, + "varOffset": 0 + }, + "0xcaa77d056fef569436a9f6030b84ac67a1a49559": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3960000000000000000000000000, + "varSlot": 112189964893829938801306677563213938967463480672559664378437365657013814954601, + "varOffset": 0 + }, + "0x161bc4092af2463bb03257519febd6f90f86e5f6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000000, + "varSlot": 11774282524386364693251451869417386824291452791904523386650850077417906145558, + "varOffset": 0 + }, + "0x56dc4819e5edf44e63d066b7f62bd3ee1ad8b965": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11880000000000000000000000000, + "varSlot": 69570507270851175202288549030443871537325380891742215115357870058985207009711, + "varOffset": 0 + }, + "0x0cde9394256015b45fcfcb7973457dde4ad4ccdb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11880000000000000000000000000, + "varSlot": 97628209654809845849177012994002386165231528250757246478425604368560428086804, + "varOffset": 0 + }, + "0xb4705fd75ac926ff84a2467eb39a0be12892641f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11880000000000000000000000000, + "varSlot": 110927695264566941740369252338248888646109944673807173617278743815261773666305, + "varOffset": 0 + }, + "0x59d7b684bced2a28fedebfc09ce3a795f49a4620": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11880000000000000000000000000, + "varSlot": 26928983376994483993694994001385053682752003940024985006050374591506232658167, + "varOffset": 0 + }, + "0x59785551b29c603affb50aa2d2754061046df11c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4950000000000000000000000000, + "varSlot": 102291950126444657740285080023676476148905924884841690308839748701979512896113, + "varOffset": 0 + }, + "0x85c0cb055b0b61fc864d4b54b5bfb01adee8ed4c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2475000000000000000000000000, + "varSlot": 95303664786640873991404987558023141896057732065676501526949598664310771309596, + "varOffset": 0 + }, + "0x02c7f755a53c0adc97f86e946b8cd9b0a18bb916": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7425000000000000000000000000, + "varSlot": 10804870254047274411043478480165980927873201089564551735295251993799125495155, + "varOffset": 0 + }, + "0x856bfc01d2a30956e72b0f61fe50173a36b2e759": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 83659165289013894574343766888970080018943736933994901504050056314201942089253, + "varOffset": 0 + }, + "0xbd937f491c165dcb3b1ae618b9793b56eadfe684": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7425000000000000000000000000, + "varSlot": 53470295122147173114330981269201695878633861353996205328698207293949173883258, + "varOffset": 0 + }, + "0x7736c2bec1e3ec01fb82c209cd3e9f3971c9a011": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7425000000000000000000000000, + "varSlot": 99032326235759672775268441307998995383373694169790934748076465060847939242235, + "varOffset": 0 + }, + "0xf080f77fc1bd23dffa7d2340d6673cd2ee12e12e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7425000000000000000000000000, + "varSlot": 24188358346641307491504845845438888468289163927145952017867395899957674954196, + "varOffset": 0 + }, + "0xc1cff51724c9feed7d5145953ece9ad3fe26a0c8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4950000000000000000000000000, + "varSlot": 57927370383038547130092569295973344996300880455213048295963254127506431863291, + "varOffset": 0 + }, + "0xfb0bf63ae25f10cf0bd9990a650205ad37e1fc37": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4950000000000000000000000000, + "varSlot": 37597984069876990660152313499122852565848477771517288259326309012211613575486, + "varOffset": 0 + }, + "0x12bc921c156569edbce3f4608b4fe081c4a6c993": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 8910000000000000000000000000, + "varSlot": 113484652449409506940656585508003370635741465060735181423770615710732365842001, + "varOffset": 0 + }, + "0xdb9a30d014649a912577e67eb8900d1bd67f2c90": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1237500000000000000000000000, + "varSlot": 41853700910173277929219779574921204693934965610066855591952950162436202916051, + "varOffset": 0 + }, + "0xec7ac223c27fa967ef79d38fa43a37eecd9a3401": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3465000000000000000000000000, + "varSlot": 9197858675359039848768016032827134070239192853347042375035614596863674917901, + "varOffset": 0 + }, + "0x210a0c4b4d55a87b7eb98bb2205dd53b77033bec": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3465000000000000000000000000, + "varSlot": 24875977782065225994073256390680748839830874182687695076232405755250648416352, + "varOffset": 0 + }, + "0x0b188e813f047b1a01a092cd9139c00616846885": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2722500000000000000000000000, + "varSlot": 44738892570897121253544185003903572849035887211050221003488716950475890828513, + "varOffset": 0 + }, + "0x9d4321ff203bf403f832697643f256818b686df6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2475000000000000000000000000, + "varSlot": 37124368377265346373916974701903520135241294506485419289660804761739511983292, + "varOffset": 0 + }, + "0x794abb6064a4760da8cee3569492ff117bfd2d2f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2475000000000000000000000000, + "varSlot": 8721788588001491880325902068727882877353639634441606487656419145892350216062, + "varOffset": 0 + }, + "0x1c2e5f08cac74898083fcc41d8a5c6f835a4ad2a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2475000000000000000000000000, + "varSlot": 72638863514165083528042433594464455416629178839081437050208697716201656764689, + "varOffset": 0 + }, + "0xfd861f7c8a59ff456d6f5949c313ff02eb07b686": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4455000000000000000000000000, + "varSlot": 8260252901357432310621152183795438850016901973800267785107542125907999474188, + "varOffset": 0 + }, + "0x8480d1cfc89c56478d4736f6461f664a9c8659be": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4455000000000000000000000000, + "varSlot": 11280964567544985153290837156560319627063499364774418117271739548592207453011, + "varOffset": 0 + }, + "0x7e5857624aedd6582fe419043a546a989f9c04b5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4455000000000000000000000000, + "varSlot": 82174152304110987615973783830909939268522897160886892083447929413940582242883, + "varOffset": 0 + }, + "0x0daea7e9074a39c0f3a5558af4ec42ce5f3bf1dc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4455000000000000000000000000, + "varSlot": 98376551792062546102799696113424059878260075253023589258245010975080161437239, + "varOffset": 0 + }, + "0x62c9034d4f27dead882838fd931305d6507e8c8a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4455000000000000000000000000, + "varSlot": 61187989839708336110755790171803154968066079220618351208310511524396359237950, + "varOffset": 0 + }, + "0xa9a99e566b2754727ede3432a87cd162c33dc1e0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2970000000000000000000000000, + "varSlot": 47197402363673466043206802561643931572451090841148419378328184407093353111442, + "varOffset": 0 + }, + "0xfdf8f4016113df80a0f702a9d6dce0d89ab1a3b9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1485000000000000000000000000, + "varSlot": 76786049619033169399961495966754626629446694328459030965624338611163210241719, + "varOffset": 0 + }, + "0xe7948402320c36e61d25741cfc319524ae223b75": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4455000000000000000000000000, + "varSlot": 34499714987806356247948755946402953556447203124640550293674529769681527187095, + "varOffset": 0 + }, + "0x0e9ea21ce2647d29089535c903fb5c41a7a92c58": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2970000000000000000000000000, + "varSlot": 3508377530435681553810478322133548716349229679349170229777063510911287462406, + "varOffset": 0 + }, + "0x86a41524cb61edd8b115a72ad9735f8068996688": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4455000000000000000000000000, + "varSlot": 35487987335724117853666389494414959559137707548961973084001133255264986865173, + "varOffset": 0 + }, + "0xfb38d3924b632ed9e96271aefba4f66f82da4109": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2970000000000000000000000000, + "varSlot": 44483723999282024844390134598592597580526420152837444530497159152656398199722, + "varOffset": 0 + }, + "0x591e5f3b30808f6be7f939124cb698fe0a59b4ea": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7350750000000000000000000000, + "varSlot": 52854933453503076766857166870049905485227742747421077981636806341342229181502, + "varOffset": 0 + } + }, + "varSlot": 3, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "DOGEVIPER", + "varName": "_allowed", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": { + "0x59d7b684bced2a28fedebfc09ce3a795f49a4620": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 3292587289055594819407089388109202734571349420746022883139392109604493660868, + "varOffset": 0 + } + }, + "varSlot": 43013013373938678289835248282655924823365700555200575819838196054122002679865, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0xc1cff51724c9feed7d5145953ece9ad3fe26a0c8": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 59133333062059728914638038794584736394224434162381427100329890213284111984090, + "varOffset": 0 + } + }, + "varSlot": 12192316543101274168955708495656773746391947830234442567751805333524659213048, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0x0b188e813f047b1a01a092cd9139c00616846885": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 6075108021981013847594738479294960671898794399296357264953923948866606651952, + "varOffset": 0 + } + }, + "varSlot": 68027251038551573364424832661406660398748027473496867347633304993087232328295, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0xfb0bf63ae25f10cf0bd9990a650205ad37e1fc37": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 50080523424822598317700197000339141629022381421743284684790660819666685017045, + "varOffset": 0 + } + }, + "varSlot": 52555436909058616669211468680921079255374775960384029810722607747911154661822, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0xa9c724165086adab0fb3a981170623e5a31ac2ce": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 67001795072305707321793705059551470245610204688619303802073431610943305896871, + "varOffset": 0 + } + }, + "varSlot": 93960508902952709509180633582070803714845042050969765768265967835468258270057, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + "varSlot": 4, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "DOGEVIPER", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 993060750000000000000000000000, + "varSlot": 5, + "varOffset": 0 + }, + { + "contractName": "DOGEVIPER", + "varName": "basePercent", + "varType": "uint256", + "varBytes": 32, + "varValue": 100, + "varSlot": 6, + "varOffset": 0 + }, + { + "contractName": "DOGEVIPER", + "varName": "_burnStopAmount", + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": 7, + "varOffset": 0 + }, + { + "contractName": "DOGEVIPER", + "varName": "_lastTokenSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 200000000000000000000000, + "varSlot": 8, + "varOffset": 0 + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.inv.json new file mode 100644 index 0000000..3e21dbb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.inv.json @@ -0,0 +1,453 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFrom(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFrom(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(paused) == false", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000", + "ori(_totalSupply) one of [3000000000000000000000000000]", + "recipient != 0", + "amount > 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000", + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]", + "ori(_owner) != 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_balances[msg.sender]) > 0", + "msg.sender != 0", + "ori(_pendingowner) == 0", + "ori(Sum(_locked_balances[...])) == 0", + "ori(Sum(_locked_balances[...])) one of [0]", + "ori(_balances[recipient]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))", + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])" + ], + "postconditions": [ + "elem of _locked_balances[...] is one of [0]", + "elem of _locked_balances[...] is one of []", + "Sum(_locked_balances[...]) == 0", + "Sum(_locked_balances[...]) one of [0]", + "_balances[recipient] > 0", + "_owner != 0", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000", + "_totalSupply one of [3000000000000000000000000000]", + "elem of _balances[...] is one of [3000000000000000000000000000]", + "paused == false", + "_pendingowner == 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000", + "Sum(_balances[...]) one of [3000000000000000000000000000]", + "ori(paused) == paused", + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) >= ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) <= ori(Sum(_locked_balances[...]))", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] <= ori(Sum(_balances[...]))", + "_balances[recipient] <= Sum(_balances[...])", + "ori(_balances[recipient]) <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])", + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_owner == ori(_owner)", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_pendingowner) == _pendingowner" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) <= ori(_balances[msg.sender])" + ], + "falsified_postconditions": [ + "_balances[recipient] <= ori(_balances[msg.sender])", + "ori(_balances[recipient]) <= _balances[msg.sender]" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFromLocked(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFromLocked(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockTokenWhole(addresses)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockTokenWhole(addresses)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unlockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unlockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(paused) == false", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000", + "ori(_totalSupply) one of [3000000000000000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000", + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]", + "ori(_owner) != 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(Sum(_locked_balances[...])) == 0", + "ori(Sum(_locked_balances[...])) one of [0]", + "ori(_pendingowner) == 0", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(Sum(_balances[...])) >= ori(Sum(_locked_balances[...]))", + "ori(Sum(_balances[...])) > ori(Sum(_locked_balances[...]))", + "ori(Sum(_balances[...])) != ori(Sum(_locked_balances[...]))", + "ori(_owner) != ori(_pendingowner)" + ], + "postconditions": [ + "elem of _locked_balances[...] is one of [0]", + "elem of _locked_balances[...] is one of []", + "Sum(_locked_balances[...]) == 0", + "Sum(_locked_balances[...]) one of [0]", + "_owner != 0", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000", + "Sum(_balances[...]) one of [3000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000", + "_totalSupply one of [3000000000000000000000000000]", + "elem of _balances[...] is one of [3000000000000000000000000000]", + "paused == false", + "_pendingowner == 0", + "ori(paused) == paused", + "Sum(_locked_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) <= Sum(_balances[...])", + "Sum(_locked_balances[...]) < Sum(_balances[...])", + "Sum(_locked_balances[...]) != Sum(_balances[...])", + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) >= ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) <= ori(Sum(_locked_balances[...]))", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply", + "_owner == ori(_owner)", + "_owner != _pendingowner", + "_owner != ori(_pendingowner)", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply", + "Sum(_balances[...]) >= ori(Sum(_locked_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_locked_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_locked_balances[...]))", + "ori(_owner) != _pendingowner", + "_pendingowner == ori(_pendingowner)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.json new file mode 100644 index 0000000..e1b9d14 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.json @@ -0,0 +1,1557 @@ +{ + "variables": [ + { + "contractName": "KPopKorea", + "varName": "_owner", + "varType": "address", + "varBytes": 20, + "varValue": "0xb9fc46df0bc053eb52bc59004e8b5e123f92b7ed", + "varSlot": 0, + "varOffset": 0 + }, + { + "contractName": "KPopKorea", + "varName": "_pendingowner", + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": 1, + "varOffset": 0 + }, + { + "contractName": "KPopKorea", + "varName": "paused", + "varType": "bool", + "varBytes": 1, + "varValue": null, + "varSlot": 1, + "varOffset": 20 + }, + { + "contractName": "KPopKorea", + "varName": "_name", + "varType": "string", + "varBytes": 32, + "varValue": "K-POPKorea", + "varSlot": 2, + "varOffset": 0, + "byteSize": 10, + "toReadSlot": 2 + }, + { + "contractName": "KPopKorea", + "varName": "_symbol", + "varType": "string", + "varBytes": 32, + "varValue": "KPK", + "varSlot": 3, + "varOffset": 0, + "byteSize": 3, + "toReadSlot": 3 + }, + { + "contractName": "KPopKorea", + "varName": "_decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 18, + "varSlot": 4, + "varOffset": 0 + }, + { + "contractName": "KPopKorea", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 3000000000000000000000000000, + "varSlot": 5, + "varOffset": 0 + }, + { + "contractName": "KPopKorea", + "varName": "_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xb9fc46df0bc053eb52bc59004e8b5e123f92b7ed": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 79211660325188215211190150294960179947925403533794157451578481915549785122516, + "varOffset": 0 + }, + "0x5641da519a5a1045de2a7976bd52450d03cacf07": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 446929995000000000000000000, + "varSlot": 76233826640222769783899301949900279208905289555987932326770493938016198569190, + "varOffset": 0 + }, + "0x8d8c1c31ca322cba37d76e23d1ad86da157f3341": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000000000000000, + "varSlot": 71086079874119004763413235848135731135832883896213003514579153825461663672597, + "varOffset": 0 + }, + "0x9ebacbaec1e0be1d6acab2f1c77cb94a0ea31890": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 112094184910624253701113130936377240618483227027640871706036657255591586197854, + "varOffset": 0 + }, + "0x48e9ee1a995d4facc1940c4e032148e1c5c4b5c6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 34575313651710230241950660987259221100299749294989205605540520617116010211362, + "varOffset": 0 + }, + "0xc19cc564c9f1ae76fa21856d28958c2e56a7b93e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 900000000000, + "varSlot": 2966651179028514226032351988458072574386218022831751023623576400501685875672, + "varOffset": 0 + }, + "0x8ec530f825fd956f8c47069dbbea652909731c0e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 88809128940934239394655903556974962952851343877478241909905482573154800574904, + "varOffset": 0 + }, + "0xd41b73ec367a7d8d88c93e898b6afdac292e7c0a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 88167094435203092220106002926575903612872080873588288803891058508245194212268, + "varOffset": 0 + }, + "0xa50595b2ef5c1a010a1781be32f35dffb3e5bc70": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 82175020000000000000000000, + "varSlot": 61592391097909624508304800128673997167136303323063815458720010407979142900623, + "varOffset": 0 + }, + "0x63aeb62a393b3bb9a57fc5b5862178bedf3f3135": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 35781219501547003693010944544471862630145596053884321433942577871407496223855, + "varOffset": 0 + }, + "0xbac61fd14362fdf294e057b9fbacc3a56d79aadf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 34556182726722368717892535183682803252205865901727493828615888278277947010536, + "varOffset": 0 + }, + "0x7798a254d9ed7b6762177ceb4a65e58506483ee4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 100642431477489495088091406964553366222625452025978525779571852093319478946590, + "varOffset": 0 + }, + "0x7136c3983786ca12d851e09467a216e8d22518c5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 96920266479325134335548146144292800336891821331125398138236201764687320476047, + "varOffset": 0 + }, + "0xfb028e87f31ca33eea1ff8eedf43e08cf9b4c330": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 43729692499220283240549601508382830521655742738083611693903492096101189833169, + "varOffset": 0 + }, + "0x1998927e6443fd7449d0359aca5d17fd48c328b8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 14614180109164422048270773827856656021092263332159946183010375475353343149102, + "varOffset": 0 + }, + "0x9f9043c10a1dec12ba2b4b774c99d45c94780813": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 100830460696663432258965443293765739003135975000373883300368937902142511343971, + "varOffset": 0 + }, + "0x0e3f018494217959a254b1e684cc79572bc3276a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 75373597073776726173793561534592293171208966288819814518968780907802015064501, + "varOffset": 0 + }, + "0xdef0ed8fbfde8b13850b15424c6092e523f8f7e5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 17382410235285703429740823820019751652405874370644232784428183467132968361556, + "varOffset": 0 + }, + "0x8a79a6d9f00a2558d4d39d43cdefd6ecc2f39372": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 96075981453912838023213971583988871935699168516445262398355177705349433366074, + "varOffset": 0 + }, + "0x6064250161eb724089feea70dbd13c3561305495": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 61166000000000000000000, + "varSlot": 53794136811986066107598679369570961763036015703565256489543697909687033931248, + "varOffset": 0 + }, + "0x1be218fc2b2d2a6c6e77ceb4b688bf6becd36de7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 62367566885588788313768853853262610353923304983444477423312116665590315360516, + "varOffset": 0 + }, + "0x38f3576710105632553994e641730783f342f36a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 4741073719507650448863007332039460485580906862031440214753740176049419753148, + "varOffset": 0 + }, + "0x39a4a5c03b966e4ec3b5d0143fa2f381fcf4c076": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 105759882356389585942985775845090336539821367399242102591660859826688412154882, + "varOffset": 0 + }, + "0x2cae4349c985cad2e07c12f3d5c3b0ecdbf71752": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 112364865655031184392063993258594412097991897953557096074958365238918569246634, + "varOffset": 0 + }, + "0xf4f304ae97f03c3c50dbdd0af4250021723c5964": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 74736462728959453118899868850171920613941283010568312618032005677473479358470, + "varOffset": 0 + }, + "0xf17fa265f1bf707b689f91ba5dfdd43e5371961d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 89204174455038402363412305561363078964343212451682624094312420073363604209069, + "varOffset": 0 + }, + "0xdc64e3bf1a1afb60eee0acdf1deb6df390157305": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 20118445817950664332173242639555355743016486226539945590202569311026497762787, + "varOffset": 0 + }, + "0xd5bbbfadf2568176f8cbcb180b28a26980f9a009": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 84385170980898812200700266001344980955483424790626269531037376441477083624228, + "varOffset": 0 + }, + "0xab2f7f0518be7848de2ba7c6601f163ba8f17bce": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 36622074829625689732041135756586354637329465988963552255725616894120820733055, + "varOffset": 0 + }, + "0x554f94f96f8ca1a0e7ebca5aea2999616d196309": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 32158167029698472150319274237011302816793929431995295101477659605119136818276, + "varOffset": 0 + }, + "0x1d18d01eb8d8c38a27c05b0e2c7dd7d5232b8261": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 98780935239639104243758555985309430213248899922739613112144562220251830361817, + "varOffset": 0 + }, + "0xc358d64bd735b3195759078804d6789260ef4fbb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 101235551681222567159301316623598124643780643186280480432976768859073529527703, + "varOffset": 0 + }, + "0x73c6230a2f3335a0bfcdce504ce67b1d257a3f41": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 42713237672451566315412761115817209722048741057437386080827283812392305651988, + "varOffset": 0 + }, + "0xd4134e896250fabf90e4939f189c17978760a117": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 115351549544174897040731594149220478424602798300826265309433982786865100254254, + "varOffset": 0 + }, + "0xca0c7270c88470d34c7e838bb8e0e0d56cde52eb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 18999950458007520887675142342634069736786994270434443273609077311797598716098, + "varOffset": 0 + }, + "0x7dcbc2ac1f9da4e253d2852aa35f3fb83b37793b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 22173716472543494703660655757165617101049633072058539721810048919863522318756, + "varOffset": 0 + }, + "0x8f22399543ba8ce198c4d48a9ca0bb143c48d51f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 87381218789057536206381914668414221885622979802738026204854292782321656669796, + "varOffset": 0 + }, + "0x43cd0b29b576385372a55bcbcd9cf62aac6bd303": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 60246367790940194384840691782499622292032468927546665130199983514041188020207, + "varOffset": 0 + }, + "0xb89a55a4a410cc85ddc811daefb47bdbe31f82a7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 74913593890915525069600049429380932751735698497425372140750413656080716047088, + "varOffset": 0 + }, + "0xb708200a2ac09b6de50c1b73a09b98a287da8ebc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 12491638344407421924641948166649205365883626213257444804095016599210111744671, + "varOffset": 0 + }, + "0x549d1a1c531d0ddf5f4ff68589b5d827da71022f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 33378321864681288107187652275648568010744415383588905187996629668260299068443, + "varOffset": 0 + }, + "0x41ce960e9cc91d25a21cc2bceacfa27e3fa3a1c1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 110068362857849775789842328033381767794051078703004859698030302231849915591571, + "varOffset": 0 + }, + "0xc09b31784ac43088aed1bf58ba7662f35ca005f9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 26902180025595347349587565689068251469605723321487495364457372331847400772851, + "varOffset": 0 + }, + "0x2c994392b2be04845c4a349e56eed4ff49391d2c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 74383500114425762241621628961031978238764719576247655132581339502554471926835, + "varOffset": 0 + }, + "0xc67150135c5374c5030a58e0d4b1e8189a82d711": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 14656920096375264650685002562308559123408936859822531976170783671880675800513, + "varOffset": 0 + }, + "0xb2276ff29b8816a9df5f6d609c0017bcbc960864": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 70317468014626556318869595591826192612025019095112549726453218035257396545737, + "varOffset": 0 + }, + "0xa96b760d94cd62a3aff968848ebc16e144a43b2d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 40482547438377103685036280768222837984294063318463972169355810967559244116883, + "varOffset": 0 + }, + "0xb35ef1b89448c855fac0db3a2baf609406343d42": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 50760668004641545221088858287021646161820743804507625033498685179898385370338, + "varOffset": 0 + }, + "0xc6b3e902c3f2c8943d7c34f845e67acc4d6f36d3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 21852379552524922968350366236424015457214508284323171791057188195939700329930, + "varOffset": 0 + }, + "0xccb892dc52355b73d330904aa88c1400c9653f7d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 22801678526655802367645021974140485382546896825570374043134812646865690791148, + "varOffset": 0 + }, + "0x963a04af96b934cc65874d67f6f8d47d08f327a5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 82965988005648433250843558033383134705272785824318241116237217486455510306562, + "varOffset": 0 + }, + "0x5283589d7c9fbba52cf9a271798be307f77dd804": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 79976838182001177565722874280783845154863528067858075340391253569658587917846, + "varOffset": 0 + }, + "0xae9d2e7d8b64e499f722f93aa0a0a997eef13c74": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000000, + "varSlot": 88507670346749561414768382598193220785256564116641575407697672552350230108025, + "varOffset": 0 + }, + "0xe36ac69ec6c11df8d30d8244492a2fbf3f490807": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 56588942323800545976122789005869908421042867473169422659855603256058482624859, + "varOffset": 0 + }, + "0x89d4b5333cd062699f15a22b8cb37c213340eff6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 49508709013173913131292799709754922062504396665641813241226156713507623598189, + "varOffset": 0 + }, + "0x23912ff9606d8d03b7f875c96b0ecbee13c18bdc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 59322874418331425856756287742350769142238221718917833004041990743789750974856, + "varOffset": 0 + }, + "0x89716afcaa70c853393534cd631a5b59a07f77b0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 77807152896101690592603811475930803977934737220245838752386303616457721247923, + "varOffset": 0 + }, + "0xc69e6b5ae086a7a09d692d038689f9880e4b92ce": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 40000000000000000000000, + "varSlot": 27343499306202282648171934409516017601776778333771873907076352650962801445026, + "varOffset": 0 + }, + "0x268a999512a0cc5c63648df581650fb07a36e18c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 10142164921047982000269272017786906981775831443402329183647446397651791089049, + "varOffset": 0 + }, + "0x7acb3e4e4ae30dd41b57489871ddb335115ac710": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 18448913125980613297314346932767295498828033983736438975749730078054562959296, + "varOffset": 0 + }, + "0xdda667a8729309b3b206517a623807038051b483": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 54341372799485209986380513074094064870465586557613891838379714044517446344080, + "varOffset": 0 + }, + "0xd5b46ebe7fd3b2054b14306ae87bee66a08a286d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 19576847145797066810887671994592150118642240349268446091617795825222956814240, + "varOffset": 0 + }, + "0xfabd4b43b47f27a641a0a1cc3ee53142de9dd466": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 32048027900590374363496988402789689599350665386955733708080546257385633685659, + "varOffset": 0 + }, + "0x232a28e80b6d64fc22e9482c555dafc9604b752b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 45859081896961756280263789944174011804906893714062512200938200103817304782293, + "varOffset": 0 + }, + "0xfa256111acd55cb5ecc1a79310892f2677b74f5f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 260000000000000000000000, + "varSlot": 82095614537803440440019519741373002452814985913976059841587432003745362979255, + "varOffset": 0 + }, + "0x5a81aa7f0a021469562236dcba1cdad8a837cefc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 12000000000000000000000, + "varSlot": 98227929148519506797408879399753656679253268901362226898512403656927966803771, + "varOffset": 0 + }, + "0xb42d39355b6ca4a52a92e1f747d7727deef32d76": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 33000000000000000000000, + "varSlot": 6990376318793153346267280780261505883118920510815817965504860713244153308427, + "varOffset": 0 + }, + "0xa23856fc4f2567ce642a9f59c9a434a2d1d7a7b3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 20352948755055351454038281375180232551272060887149257836929887408035628936141, + "varOffset": 0 + }, + "0x0b0ee0a9bb65350fd74ea000d03d2863fe4e42f7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1022389000000000000000000, + "varSlot": 41778518785310789810948605004773455335364228071527794662164882816522148011000, + "varOffset": 0 + }, + "0xd1b6301019d10a0ab6ac6403a688f0cf21d52fe5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000000, + "varSlot": 90270182147923789193542078287776591248233652277613776247674682390493781302288, + "varOffset": 0 + }, + "0x6e47ac34120e4fdfc9284e60881e0e3e2ff952df": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 70696939102362353361468707203500254106345300531848951597073438200236540913646, + "varOffset": 0 + }, + "0x1199e38e6b4f5179477d6d72f650b4deb9826b15": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000000, + "varSlot": 5806258592977559896041539914953782221285843252503126204999032547047353611359, + "varOffset": 0 + }, + "0xafac70b7631db920c7deaf09191cc10913a01466": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 310000000000000000000000, + "varSlot": 31815646320378635323897185231013558533645942361374292896609767918054090058838, + "varOffset": 0 + }, + "0x590bbeff4f457a7a49f2bd103e0d8f32859b2fed": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 13000000000000000000000, + "varSlot": 56981044299360184281366075707160695268341933085650731831977437633162343629921, + "varOffset": 0 + }, + "0x099985c94d270f2667516561fbd24f74865322ac": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 33000000000000000000000, + "varSlot": 98368571767723211011025144316765259186020035044910942656669670017527131265745, + "varOffset": 0 + }, + "0x21c86b37e01ae70d79619db49f09645c03a8c9cc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000000, + "varSlot": 5037142593306440223747955637057676707231098785950685439247796561854653985774, + "varOffset": 0 + }, + "0xd73e824438405a901e53b3b671d7d1ef82fd296e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000000, + "varSlot": 10815411700312182599090777072453233968696324217987273864022556458093323442557, + "varOffset": 0 + }, + "0x94327cda2ddc013f0d6b6c14922e48571c13d453": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000000, + "varSlot": 24858056925178328117366348552667864526337505336044864454168445834141907009465, + "varOffset": 0 + }, + "0xf7e8b3344a54405ca59535984ddcd0834e8b7d2f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 83387791991014017405385886529479380448683305187190331856144855062196928500722, + "varOffset": 0 + }, + "0x8c62d507777dd8297e9ec4bfc9dbd3365c2a15fb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000000, + "varSlot": 32631597911400410564869711111796375496467514923582994045252046945860900280941, + "varOffset": 0 + }, + "0x8840f949c11882c007d3a903c9aed39cd9800efc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 44458987524337279728948392957747332253192672270179543393021306540158606232477, + "varOffset": 0 + }, + "0x0e1611cad2a591f949466965b09f7ad87f772cd0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2011708300000000000000000000, + "varSlot": 111724782435879691541150769275058510341717105865675833642276702494257513454982, + "varOffset": 0 + }, + "0xbfcf2af34b064d9d45e7d3cf32467db33c42db0d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2910000000000000000000000, + "varSlot": 3421004603545475592603279428621594510934089651895600280496606669981626785330, + "varOffset": 0 + }, + "0x6ec1c256d18bd31cae4dcd54054d0e80b3d65bf8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000, + "varSlot": 113794914294578162325968533068753438834646218247805934506833736690461451309051, + "varOffset": 0 + }, + "0xe7a5d1416dab85f58ad2cc9986f8290e795d6e4b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000, + "varSlot": 85405472789538621560621309499675012063481133513349168342721408640327644945306, + "varOffset": 0 + }, + "0x22c9de8eba64b8adab4b0ea3846a1e33ba999be1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000, + "varSlot": 89250005011677118492026576824224677812246683430401975619868691477849502131237, + "varOffset": 0 + }, + "0x83e99c226eb55fd088538b3ec9d4741804a1e641": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000000000000000000000, + "varSlot": 27771121544571277701993534256560142020308006702134678198660555775843913096339, + "varOffset": 0 + }, + "0x52e6a87a260aae9960252f4ed6b3f5aabfc78234": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 110768237982587153705708250365381586861190662728942343561618448794310179054022, + "varOffset": 0 + }, + "0xc8204fcbe8d6639358777a7a9769befd10d7e5ef": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 17707256212334490910760086201166108447523458678172400767484809028874096374830, + "varOffset": 0 + }, + "0x9b143513b845e6bcd60549ec20ebe165cb60506b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4286867000000000000000000, + "varSlot": 2619780587945739770936782888963754415625202240694063099160075188494190640184, + "varOffset": 0 + }, + "0x2d2b0c2ad6ef98ba269c444a0121898d2ad8d67c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 48499524040802565189609905026289039960718398475997896353006746356811325503455, + "varOffset": 0 + }, + "0xa6b5d11fdb70cfe56ad4d5417557f7a0a1014d38": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000, + "varSlot": 15896246358391298165313815362965932982939302044472343202974786982808584906909, + "varOffset": 0 + }, + "0x26cae2c2085935eeb2adc7a08bcb3e8f9eef4162": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200000000000000000000000, + "varSlot": 50216269501308577594305255266407598983996827464426165507258939792971656654552, + "varOffset": 0 + }, + "0xebecc87dc356e415236be2d1ca77dc9b8b8afb3a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 83183298397069601931939693054369705195321567575155896323388734870293113152176, + "varOffset": 0 + }, + "0x923f3fe77732ec3fc5327eb52327b06be4e472f8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 60000000000000000000000, + "varSlot": 72923902910649735786415686503340758028369262263041525312967040833056127565935, + "varOffset": 0 + }, + "0x298782f2055185558c0190d3c6b08331216b6dc0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000, + "varSlot": 35154903912365133590403098126411154831033546460380430303935702484076219668692, + "varOffset": 0 + }, + "0xa2a3549f9b3d1f4c4a50b07d17ccb67d9550b73c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000000, + "varSlot": 38074135791311515216935157315145484491892295573583276877475982318592282508951, + "varOffset": 0 + }, + "0x2a34747a6e11603fda6178e1aa500c308b560f80": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000, + "varSlot": 12928214514167317069547434973664089053503691345916271454522892792249041549247, + "varOffset": 0 + }, + "0x8fffc7495579a0663b3ab84c02f835a9d56fea46": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000000, + "varSlot": 12281155299433953922553117347813706385116234409132583372631496436709336318610, + "varOffset": 0 + }, + "0x7cbd6e14746fdacd52e27d8cfd3da7ef39aaaac6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4876890000000000000000000, + "varSlot": 11705462374306549486989574998627785097459429837440880337107970170977821881776, + "varOffset": 0 + }, + "0xc9409bbe787fbd67ad7cdcf01420397056044dfe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 12584717436215762567330347227007733848714965937519719414044533614983439237796, + "varOffset": 0 + }, + "0x44587cf4bf01552d89aafe9e791c4e4c580780b2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 84936417864639290860229435090141711972237842160786449624550731379546698883815, + "varOffset": 0 + }, + "0x92f8be6744d9338853daeaf5f4e79e74411f834e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000, + "varSlot": 107611408471291815883416382884978279748939601105281611049417385671791888526993, + "varOffset": 0 + }, + "0x239224c526c544984cea598c62b075c00406be6d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 60000000000000000000000, + "varSlot": 50231966379910330848066191062849996447481039921172892416005700545268952117976, + "varOffset": 0 + }, + "0x9bc42c5fb443e59a2a49ee0199cd3483c179b81d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 60000000000000000000000, + "varSlot": 14858445415733112646505510534760964225562966093583736064163402139715461296351, + "varOffset": 0 + }, + "0x4e173fb7e1541e07bc908298856ec18f967c087d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000000000000000000000000, + "varSlot": 74233222013296729621820729237082322936406693446725245076407908208631724117701, + "varOffset": 0 + }, + "0x65d029aa48e723d8dc4c76825f48aefd9934b9be": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000000000000000000000, + "varSlot": 88472654597426809076146917263320743536417391832760168933619911281571844681991, + "varOffset": 0 + }, + "0x5fc318d33bee771f70d0fd15293e0c144fd89ebc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1321730860000000000000, + "varSlot": 22602904202077508254013489824645835812919695595993758495214379498957617291291, + "varOffset": 0 + }, + "0x23eab78fdac942447bac0112ac4cbc3a2e51e975": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 19640555793650000000000, + "varSlot": 23715117891583414012740069879888193603061193824002745126982998021653929188573, + "varOffset": 0 + }, + "0x80256ad737dd1f5377d0fc8ab9dcb1963357e06c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 957428163055180000000000, + "varSlot": 100714501821881806994467760595486333469610030787658974632621819486827814231524, + "varOffset": 0 + }, + "0x66fb00b3630e41fceb6780965084b5e099e7b323": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 570841178072820000000000, + "varSlot": 102930620239154302298118023800775941877990137622378540429279175927532911560669, + "varOffset": 0 + }, + "0x8f39033e1a875e11d8228d8e85fb67bd1d55b767": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4304985429550000000000, + "varSlot": 9305088641129156885117522560008651761942060270116804727048160503325246747730, + "varOffset": 0 + }, + "0xc2c30b83d8fd5fa9469506e39170fa3d509c3a69": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10923080000000000000000, + "varSlot": 62235334115470100809541123739067839691190600644087239762124328283887608701411, + "varOffset": 0 + }, + "0xe02f9d61f1ae8f051261b85e58ea82bb7274ac75": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20923080000000000000000, + "varSlot": 43441239831685215635651072065043395165164260346726044389397391093877613851891, + "varOffset": 0 + }, + "0x5d8bf8cd18c90acdb54d437d0ad8fb0fe5cf691d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 309013080000000000000000, + "varSlot": 63584228563177816296128802860484394568902552061952503750268363946139006128082, + "varOffset": 0 + }, + "0x1ee1eb2a9e194b35087e33eb95dd313f09e82d4b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 19579908810000000000000, + "varSlot": 8165322595257968037730530230077168489805831461592654824107323254674417385501, + "varOffset": 0 + }, + "0x8b86631557954b02ce4cffaa92547a0d6de4a92e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2373868005930000000000, + "varSlot": 14228813301195908970746230450484800565086512945696583905955771756800768720988, + "varOffset": 0 + }, + "0xc99a53e51049a35d4167c7ab02f6726ac53edf94": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 17495098779990000000000, + "varSlot": 14403008412023237204006596426766947797375555771568447367649306899125656684735, + "varOffset": 0 + }, + "0x8db9515f98704a95c7b8d9a998a631f4e8c26a46": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 321305280000000000000, + "varSlot": 90734202770508415413778659493830839817776144067331230127262801708000940277452, + "varOffset": 0 + }, + "0xc296011122a480368ef14c7ff24ae347be766a3a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4425759735890000000000, + "varSlot": 63213448634937156450880995267499999279298282666966593009499837421403271148467, + "varOffset": 0 + }, + "0x34b406049cba692862536cd229d37ca1c03ef3f9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 201096840000000000000, + "varSlot": 100248520688615020668969166871391234808333821142969803573004766875733535093521, + "varOffset": 0 + }, + "0xd9c626560de1a94cfdd83b39ec3c13b6f06e87cb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5085399424310000000000, + "varSlot": 2276588485702878198143892419928472683036734194800837712700999793795865854487, + "varOffset": 0 + }, + "0x0eb3ea2414b6f3069d403c989d3857ddc1a58bca": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7098438210000000000000, + "varSlot": 11279301426253856836446037012044557824414358926844874915555544403764375427938, + "varOffset": 0 + }, + "0xa296a644f24a606e67d9565ca034368f5fb92fed": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1661233220000000000000, + "varSlot": 19895682090567258010737773330998846343864256065794259690362193749339581917623, + "varOffset": 0 + }, + "0x85f1f6d407a096c294368dce9769ae95ba247baf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1542272830000000000000, + "varSlot": 49583207480209218663869723947834100067222827039605497004141298577569887184256, + "varOffset": 0 + }, + "0xa91ed89c6efe1d30b138199cf1083666d4f8b15d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 26923080000000000000000, + "varSlot": 62086078526632441349408315622964600307448759332987588447712641010692419359511, + "varOffset": 0 + }, + "0xeb624285bb407a72519871f692deaa1629934587": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 83605772055730000000000, + "varSlot": 113976547417141192449700786606802681856244080743945305587013057725471382908364, + "varOffset": 0 + }, + "0x4c52ff58487cd566af81897a0367b5ff2f33cd5a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4136205190000000000000, + "varSlot": 114508655531729937861721267761318626255681429228357619626714115070576200036245, + "varOffset": 0 + }, + "0x03d633fe3e1714e1706d7013f633ee3f7f9057d1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2260557090000000000000, + "varSlot": 78548190497393846505623418820054268268018129454153113229106847089059349784956, + "varOffset": 0 + }, + "0x6c58db52b7ca463d4f8c2cff6bdc7668b6e43b00": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50809616519360000000000, + "varSlot": 13643173550309844401514830604498865897289572805592029254333582852097934484476, + "varOffset": 0 + }, + "0x0533fa2f51ad9e482617502fc828817ded0a1df8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 512013080000000000000000, + "varSlot": 81486712338685359725547595148816233163513803551791551000600576999996835644667, + "varOffset": 0 + }, + "0xddc33db302809b165691fe6c0c81f5503b368a10": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 22154080000000000000000, + "varSlot": 112308773424231342572990471257476665161873258489600266371692552334082762511535, + "varOffset": 0 + }, + "0x0b5d353fed878f05a69bc081df5264b86a9718e7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20034080000000000000000, + "varSlot": 3462890486978940960433342779711058440226793658918996558715294734160836579157, + "varOffset": 0 + }, + "0xbde08eceb1a40716d57c953ac83efc647dc52b9a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 36282534850620000000000, + "varSlot": 109257798740997813192404415154883517765343591727004575371036582301248250458028, + "varOffset": 0 + }, + "0x8c0b426035131c09ade7e11272806d8a11a0fe06": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4664132990000000000000, + "varSlot": 52227788404076871232237066141783461541238647361980430059893672671359415134287, + "varOffset": 0 + }, + "0x737819e738b1ecc78aebe28a6f0deae3e8a1a016": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5628807120000000000000, + "varSlot": 16863120980421565459874617585769243729747560470092806799604797803261110852907, + "varOffset": 0 + }, + "0x5ea399625a5f7b974f7bc09b7467a03c1f38ebee": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 13699246700000000000000, + "varSlot": 14360121726926548540436319236842331226377858793383848059142922498533561977335, + "varOffset": 0 + }, + "0x982adafdd2524b54d1d9da41cbf77c9a440c5fd8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1773799762030000000000, + "varSlot": 7800782302692449917051744673079424851201040588125585624072302496459436300793, + "varOffset": 0 + }, + "0xa15b2dd9310caa0049aa4fa7aafcf7b683eb596a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 21921882390000000000000, + "varSlot": 99007196035945536881431792009387526489427439922130225798590530357615925898659, + "varOffset": 0 + }, + "0xf3be88761b1107f859a27cd868a488dbdf3a3eb2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 948080000000000000000, + "varSlot": 19734179335536250309065251674834851537096110645046595915423648392904731882136, + "varOffset": 0 + }, + "0xd21487eeed7b13e031c3d9e137a17982a6b09b41": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 64154461849120000000000, + "varSlot": 69873563122212753703039748706464969359805400470326243817472173236096759090675, + "varOffset": 0 + }, + "0xe93fde6b5479143ecdaa3264bf88092ecd9cacca": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2565152708660000000000, + "varSlot": 46547347268370590275767378451216003612471491956593454815645601220982918439075, + "varOffset": 0 + }, + "0x756cee8189fa5b0d1c8b4edfb1e15538b70661e4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2012701381260000000000, + "varSlot": 111474424749282707987687516375433626572851347608530051956708139640252506017386, + "varOffset": 0 + }, + "0x03eba76efa2d3150f7022296b26a121a362ba92c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50667023900000000000000, + "varSlot": 95547359039787605166803492576859762255655567821823199807197534797423676848531, + "varOffset": 0 + }, + "0x33a4d5efa1a26e25a24da8ccd5e9c2a4834030d0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 269631724330000000000000, + "varSlot": 62643447963412020794692199257507215874729656603538432296816860884586236358296, + "varOffset": 0 + }, + "0x33a1b98c6fe8b19dfc5897cf8b2578cb66db2b1a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 181604080000000000000000, + "varSlot": 7018480544710950518244043317353336030340871398994480434445625598171627668885, + "varOffset": 0 + }, + "0x22105116f830a91b8f568deabb350bf8f0573488": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1026232070000000000000, + "varSlot": 42366780560992835691844359198735829505936246536062447392713493241569372216147, + "varOffset": 0 + }, + "0x9e8b6d4f68ec87810a94d27408ca151db92fd154": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 772776350000000000000, + "varSlot": 74142996675274438145029538946734322775990961368148358162555095320903175948475, + "varOffset": 0 + }, + "0x478adabddce89efa4fa580bef35d328b37903667": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 103211788658395000000000000, + "varSlot": 91918003151805087798801856384793310747585851863610126633743891353086666140968, + "varOffset": 0 + }, + "0xef7e32e73990522e61c399fa96ab32307d566a74": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 25738233570032582413031821495424310064155728234200257639843833232271687929104, + "varOffset": 0 + }, + "0xf45dfcdb54f8d33d59b5c189d57227040508209f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000000000000000000000, + "varSlot": 85941878937428203523198074691759450322957349613106798751004844439308034512627, + "varOffset": 0 + }, + "0xbb126a92058a4fbfe63f3fdfc36296b5463a090a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150000000000000000000000000, + "varSlot": 49667055985272449857473615830906524196547071967794144771819453003299733084509, + "varOffset": 0 + }, + "0x3233bd66cc332c29fc9ede5cbbfadc486613f920": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50010000000000000000000, + "varSlot": 105667343211129606035679850922628940450128960698174659868402821825650141046238, + "varOffset": 0 + }, + "0xb89b7c77044970a1adf74f9a89d95101d5a4fca0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 23100000000000000000000, + "varSlot": 109700948638792807384160757161478889480738569809899541969338597063886227820487, + "varOffset": 0 + } + }, + "varSlot": 6, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "KPopKorea", + "varName": "_allowances", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": {}, + "varSlot": 7, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "KPopKorea", + "varName": "_locked_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": {}, + "varSlot": 8, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.inv.json new file mode 100644 index 0000000..05932f6 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.inv.json @@ -0,0 +1,292 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000", + "ori(_totalSupply) one of [1000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 5", + "ori(_decimals) one of [5]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000", + "ori(Sum(_balances[...])) one of [1000000000000000]", + "to != 0", + "ori(_paused) == false", + "value > 0", + "msg.sender != 0" + ], + "postconditions": [ + "_decimals > 0", + "_decimals == 5", + "_decimals one of [5]", + "_paused == false", + "elem of _balances[...] is one of [1000000000000000]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000", + "_totalSupply one of [1000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000", + "Sum(_balances[...]) one of [1000000000000000]", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_paused == ori(_paused)", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_paused) == false", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000", + "ori(_totalSupply) one of [1000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000", + "ori(Sum(_balances[...])) one of [1000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 5", + "ori(_decimals) one of [5]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000", + "_totalSupply one of [1000000000000000]", + "elem of _balances[...] is one of [1000000000000000]", + "_decimals > 0", + "_decimals == 5", + "_decimals one of [5]", + "_paused == false", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000", + "Sum(_balances[...]) one of [1000000000000000]", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply == ori(Sum(_balances[...]))", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "ori(_paused) == _paused", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.json new file mode 100644 index 0000000..f1a30c0 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.json @@ -0,0 +1,992 @@ +{ + "variables": [ + { + "contractName": "FXCO", + "varName": "_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x5db34e9d00816b8f6b1ef37621ff84d46bab8a58": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 912350000000000, + "varSlot": 70880464268214524869806474968152836029351576850757535673473888869841194616171, + "varOffset": 0 + }, + "0xee24aa8893758d80bf443bfdab4c7a20a6456c98": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 62928368440326744698296352525057020546282562559079303474135530420116435367041, + "varOffset": 0 + }, + "0x763e58529e8a4b2c17f5208214dd98d71d64bc24": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 95843690269099764919878769736587058207063079505960412576224521725402876348830, + "varOffset": 0 + }, + "0xcce8d59affdd93be338fc77fa0a298c2cb65da59": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 490, + "varSlot": 1144496751169075986929341588237807061608228862517556004134390783278195309896, + "varOffset": 0 + }, + "0xc041071e04438f8209d435d5db3e540c29e358e6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 33349811034352490137789564264798067963085700671112981818517764759304632653220, + "varOffset": 0 + }, + "0xb1855c6b4d1eaa02d92429c49a8eb3df589fe380": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11100051500, + "varSlot": 64614023954446068277655625007919004790465375575237320079798618874455764989208, + "varOffset": 0 + }, + "0x307e9d453c717cd2960ee72b9e794c7cd3a22d2c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10304500000, + "varSlot": 35462145587226053529709786511765733740299046204002241797491687115966010899857, + "varOffset": 0 + }, + "0x52d6b838b17af80b10fedb78158c8ffa8b884463": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 107000949540596731869620494527660592971071168281237711533518123780441830947533, + "varOffset": 0 + }, + "0xf6ff0191bd4754bf00966e89721038bd3a82cb7a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 62004493521233495175298097805370962877137438497718522382926921086100092268320, + "varOffset": 0 + }, + "0x0df2279c112d7ae0e818babe44ce7b0d995d4cd9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 920744263924, + "varSlot": 19059979470920070203778110572353830919120639002542170542628891522851170035082, + "varOffset": 0 + }, + "0x727008c79ca9ffaccb74f8787d40abbd943503de": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 84400345048074602566982480892001310671135354300800903304043663540196447220991, + "varOffset": 0 + }, + "0x01a68db8de642ee2aa9f9467d8641368af7b3c60": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 75887598674057589706871230454509026853562997530522084774816886387744937673716, + "varOffset": 0 + }, + "0x9ba3560231e3e0ad7dde23106f5b98c72e30b468": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 83857595399510, + "varSlot": 11034702379224424986971857434465332421645250202310236121938870270103604099675, + "varOffset": 0 + }, + "0xfde8abe8a4a467bc05202aef6eb41744a7a7e389": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 2162103661192590471154517296707004160403024056454742831431335626010852646426, + "varOffset": 0 + }, + "0xe8cfdd6eb9e0bf2de8802b2913e761d00bf6e667": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 102084498350506412210294864380764787422651586259043923164721014460500874856785, + "varOffset": 0 + }, + "0x888e5d9a3dbfa81e303b5f9bd40e885bea97f444": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 92393543175228189975425457002058834841645648666945467557000717477205410082153, + "varOffset": 0 + }, + "0xe1badcfaaec4cb4ded6d681aaf52e868b0eb87f6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 99089726997628265825561588302000964877099646062206396886295053917330488727721, + "varOffset": 0 + }, + "0xb82c1791542af23b422087a9b6d0f72df745504e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 75574621076534325060858910968906911220359475022734542881183747773599712651456, + "varOffset": 0 + }, + "0x41e853d20d3a95ace9922f40e6dceb675aea7a40": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 103024882881759590789771256914432113479126625758904746103892082232048113263703, + "varOffset": 0 + }, + "0x33f204d8c8eb2f2c079748fefa1bfda49bf2b83e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 40001171241401573843998971563282754625348497202838476286911348898730831586666, + "varOffset": 0 + }, + "0xd8a760402b0735ed5523f37fb5d139b5e03c6b6f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 84816059147225363520822680434454863357204896245688724579936785876838605345219, + "varOffset": 0 + }, + "0xcb7927565884e44cd180392f44411ebf27bfc3a7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 40984117815488199286457121439084138557687674330981483857222543259023475002872, + "varOffset": 0 + }, + "0xd3c8a525315dd52897a266fdc0fa5e0c2cc75739": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 21152090187215750530267779687478429235514921361639239278902055735885766233265, + "varOffset": 0 + }, + "0xead55c9464617f5b04ecae9a8897ee1098f6b178": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000, + "varSlot": 45023590817804887996019778070367675854372542789978278886192717166441887504636, + "varOffset": 0 + }, + "0x834cc361c5248c3c7d627ddd22ba6c535fd3d67f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000, + "varSlot": 98054133678497692443164902928973207466587209216406897852824194526826680682494, + "varOffset": 0 + }, + "0xab36ada943aae72c5daaa55a7e3df50466f2cbaa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 60424310591726356715870299392132611894188549212341655783778511588950627679156, + "varOffset": 0 + }, + "0xc28e8d137321c174fdf31f641232643e0c39651c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 115352568187809730375623980442760597351463944662677919681877925815107758391725, + "varOffset": 0 + }, + "0xa6f20c1090eb8f31f696b9cf608e99111a827b47": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 36726026998922478257248202600452698785745928457674569941223712932945980749633, + "varOffset": 0 + }, + "0x9f6f2049973b225c628be7d75d3c13dad943e04b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 24907749752480583507795322793952195758305953144957353485345600297187238932028, + "varOffset": 0 + }, + "0x8eeff2f9ecded4981963e7a2aba5fb0f6767a503": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 20357845939103777674562022478198952693647464427332179074268823247718127301744, + "varOffset": 0 + }, + "0xb7df48bbfbbc7daedfc4b92ab337b258c9d9fefe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 95203648598621116214114437332574667178577397626027166073546616754012067040744, + "varOffset": 0 + }, + "0x8f107e19ba37d05f9d33baa204567aca3f155fa5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 91616930061198738034171443767992280665682723230346311905266660905436491259426, + "varOffset": 0 + }, + "0x13c639162423e57ac6f81f208b4bd0df2910b2d7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 2512082884701541210003571297982849018942191462696167381020355724666576652790, + "varOffset": 0 + }, + "0xa5bbfd817b732ddac7b5c92f3c3173ef08ff01de": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 12701051713700847647694122098947972676009618696206269557026804545641287404869, + "varOffset": 0 + }, + "0xaa30696622442f78fce76a915017757340158793": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 45239742318709910635330236807710032417711280293808986072739178768279268110314, + "varOffset": 0 + }, + "0x63b8e48d1ad867146a8b118377c6887ed46f3e6b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 20964591313063277968692059777821484554590005222811870437392404311272796290916, + "varOffset": 0 + }, + "0x505fae4ad4cab7fd72b362596dcc25166b8b116d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 24578082959068233726702310898113920199677666219174863547763588414036258517793, + "varOffset": 0 + }, + "0x19aefe1ed95e4e788064b38bd38c771ba60ac618": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 105910277745726772338346164488354763626725057018186382876836158891437822201021, + "varOffset": 0 + }, + "0x8d31fc5e79727e400ed541263c30b77c382dbc03": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 33152332392132024902165446206854407608673932327712599559470551285156977125826, + "varOffset": 0 + }, + "0x8657b6f6b3c0fa0be08e9e4eabda290d9adf7d4d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 99469455773666011849665881946418423053600707438776083573294786750066365188803, + "varOffset": 0 + }, + "0x04455f2fe36eebd60fa210b51d050eb605252458": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 33719953041312076786571520717246539601857068138058465609425302889095517346913, + "varOffset": 0 + }, + "0x2f20b42bf4efa7c3918f80100b1b4b7eff7566ef": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 113041831005705838209727631520197498722706233740528686619511807898083874679592, + "varOffset": 0 + }, + "0xb511fc88e19a734cca07c49fe4ca55a79b1e80f6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 100247079802693604765874171012850982882352234952508171923146467756469466397641, + "varOffset": 0 + }, + "0xb852538b86d6928122c90696da0aaaf85c92a9fe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 24244913113697977524357314493578279387394845563074042343978774186655812247872, + "varOffset": 0 + }, + "0xbc863e0ad0aa9a24c3b4d7e8960b0032de47ba7b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 89038258548728632775733867570242106958875121676971489381380632643455787099741, + "varOffset": 0 + }, + "0xeb0e4720baa0f085b901e13aa41225ecdabf664b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 101614837847819036634714374637879466028636435383871969108103217817558432972214, + "varOffset": 0 + }, + "0x4a8fa9366950809f57d7ba457450440678dfeb1e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 85794177089551249775219979449226545358405164764234685398291200488401760506569, + "varOffset": 0 + }, + "0x7d0c627463916ecb3e9cd0868871010b0d4bf58c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 80719495778431125915604626775620474589825116906506006439382521154290991303768, + "varOffset": 0 + }, + "0x8c679179ae4e66fea355502b0edf90c0d72ddda4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 42502744527861186779119426274639473888690793054366707788407725476698165234454, + "varOffset": 0 + }, + "0x0398edc925c89d2026b50123271dabc07308cfbc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 17757705719161604565492130207290553884770204965959016159266897635247900963973, + "varOffset": 0 + }, + "0x263056b4ec3f31f9299c609aca439ad210faf50c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 25272220360836270589513859937224619084856926195512308584413665222405596580881, + "varOffset": 0 + }, + "0xc4b94821f8d829e95692bf1c574670b98f5e61df": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 87047587025544778234259339691401820343434691376978917702622192325968194344258, + "varOffset": 0 + }, + "0xda2edc79693dea35a060f2ac69b1e895f5b0410d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 84814541837898987206546702857303636699712625544400425660013625947594228569078, + "varOffset": 0 + }, + "0x65f47ad898871baf0743c7a057783247edd07e1a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 89086719433631179561099465491336781840610040050200762503596280848162710608640, + "varOffset": 0 + }, + "0xbc5a1f036e4cd80aa9a6842b26df82ede75847a2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 92699537905531232726314205838774195657668806314391905219951825814631307478209, + "varOffset": 0 + }, + "0xb208d50ab7b86e803c648184fc466eed4c2293aa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 38686723281450943375973064693220921380792538044059254574201393343385425716705, + "varOffset": 0 + }, + "0xae07b9755eb99e776be9e2bb18853a7dffeebf12": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 80106380911051368144945840790898964730721804325575553502907306455249046482263, + "varOffset": 0 + }, + "0x7ec48e486a47068c2f2f9c2718eeca51f43d1b76": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 54805225482293102261082652599128181018022966705655793113104201980162028389908, + "varOffset": 0 + }, + "0x11e929ada79fc9484b5bf24a8f6f91441d931135": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 3046477242112719026761979805890977314804184669613222122806009345813991654543, + "varOffset": 0 + }, + "0xdd6e90d008d0b696373004ef1ee2a2075a683b4a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 49969216589460986492826861567259093652747802256836129374927433082726843448944, + "varOffset": 0 + }, + "0xf1b18969c04f1a4f26f393eeb27fad6beee89ebe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 18967210687956863785761169266308611259820419646550965001403003381728363685919, + "varOffset": 0 + }, + "0xc74358add7fe361f10e35917ca39ae47e45fc749": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 16338122529814592318004638093921097504025597464607817013802729138807547082773, + "varOffset": 0 + }, + "0x9c155f13e9c04426208e943891214a0ad48f60ee": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 36704170041107892338046764923658966107699848292132730702294692629094322921968, + "varOffset": 0 + }, + "0x6789698448aec2ff2dabf62ee64c4bd47edec878": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 115328758123339031903968306353109738231915807153894244508102620923612283693703, + "varOffset": 0 + }, + "0xfc76bbe1977cde1ccdeaca1337103abb9c01f19a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 107437870086511829093379207023985945507472354785754261588398765754152386115460, + "varOffset": 0 + }, + "0x7c5eae0905ba850e2c6ed4734c05baf5ed142557": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 35242601007223070967008541861840940187471394301605038963777818644169753414767, + "varOffset": 0 + }, + "0x50cecf8f619850b7805fabd49dea613a35cd1510": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 42087277918763107647489208603412191643027060332561932756209289658798322151974, + "varOffset": 0 + }, + "0x006700fd222f5bb436196ebd956d72b27a61547d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 65843954972257982568137936306334527443688075784018557930691562058516826874001, + "varOffset": 0 + }, + "0x419daa7e09d5203114c930ade2e1248884bc2a4f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 107379605087122861209086255468658528688915257620190327070422876047952126813171, + "varOffset": 0 + }, + "0xb3c865083cf4b0361318e859bdba65ce31f2f12e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 17269212442273314188102819219132484427991001061631284758366711854293221479119, + "varOffset": 0 + }, + "0xd6d7773099b5c9b8675c86fcd71ac28de0e6078e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 57457255273309278143624270273899642963470413811513909373138059553112448691053, + "varOffset": 0 + }, + "0xef74226b2bc61259a83d1317bf6567ab2e804f92": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 58350529899807126293959440725207694938214216217503221167017892761587525636174, + "varOffset": 0 + }, + "0x24aa9115e23d179d4e9345915cec2a75058faf37": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 73655953051622503995217099487111602051956384080441704990152825498860535374605, + "varOffset": 0 + }, + "0x357c96d9e68e09d80eca60c1db24ae2e80535cee": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 7279841030020261670923125659329781512373894329280726095676390955194959475165, + "varOffset": 0 + }, + "0x4cf5885f3b4774bcb88a87498ad62ff1ed9aa264": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 43871646771126971295449079868382628837449540960918429871278759841174847738071, + "varOffset": 0 + }, + "0x13ae2aadd4fb72c2bdebd742822708d965abab7c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 65461369416563007341270682876360794914903714132952156741281184247549089259700, + "varOffset": 0 + }, + "0x3f13dda7b0eaa95d2fd68b5a7af84f56affdbecf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 16993108971203307418295955452765974057531179942006317031025368853472380048661, + "varOffset": 0 + }, + "0x1e9bd8316b78a3bdb8e36e0888edcc0da5be26ab": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 106106795322410423346472745009501550383788264828134082134828803432537387496986, + "varOffset": 0 + }, + "0x5f17d50945bd24debfe6759a57df2ed4549ab53b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 26768140729375640241359223171328488053072500596035808514600371858791138451572, + "varOffset": 0 + }, + "0x82f724b41a7580fd13af3f77fd9a81b1d8eff91f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 14960606690477557246035831054019372068449357012264752170780783810384093370770, + "varOffset": 0 + }, + "0x894bb8572649b47cbda805a366e45564e1d15993": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 78516168274716084755685403166061357795245075379497720780519643719100357431796, + "varOffset": 0 + }, + "0x42d0b2fc6ee9809c026c8976760a2163a0f106e3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 61156845421711473943078625057854995429806682208660272262738205143408162309194, + "varOffset": 0 + }, + "0xbb600b63eaf6d6d18f88963b859c7c03ed416d49": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 72046688036875883390961396303342858064267021437490309394413062189529323325699, + "varOffset": 0 + }, + "0xcb36d5d2373923a755780db9d105bc2b4b33cb50": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 103723627151121738053205411354563316769678075156830417245282782036057558989370, + "varOffset": 0 + }, + "0x5d3c60d572920725491e8a13d0944e11fbdbff2c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 19630583514432763745147569538032328640275490999264188243048075445005829597515, + "varOffset": 0 + }, + "0x7e4895ce0c609128cbe757fbfe9f07a484332303": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 52103893857354429980345253650004718512639872888101582765984506258927509797329, + "varOffset": 0 + }, + "0xe3784b40eee57d8b7f58439ea2b35a90a3457503": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 6658899313964720451066470122057484633690749228774910849807556224482829794600, + "varOffset": 0 + }, + "0x263e231fb7880afce10dd61eeb0e8cf183ada35c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 13172109624968241287217939966652361136031364867699250951661037131953457979192, + "varOffset": 0 + }, + "0x253ff8d3b639243e2c9c4a36a4c461aa7fc5fe0d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1758148500, + "varSlot": 2515240564884621023213687808967237176454418775448722888229813862472343928290, + "varOffset": 0 + }, + "0xd78c494f6df661bbe74ce762653de7139ad244d9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20604100000, + "varSlot": 100027926099637362396170897470915207937634511209037806978859471995566397197071, + "varOffset": 0 + }, + "0xfce2ddbbe54363b321eb10486e7c19ebb173a63a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 197893536076, + "varSlot": 39815985771801256187423104841668894576646433711477432056119611717487998022270, + "varOffset": 0 + } + }, + "varSlot": 0, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "FXCO", + "varName": "_allowances", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": {}, + "varSlot": 1, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "FXCO", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "FXCO", + "varName": "_name", + "varType": "string", + "varBytes": 32, + "varValue": "FXCoToken", + "varSlot": 3, + "varOffset": 0, + "byteSize": 9, + "toReadSlot": 3 + }, + { + "contractName": "FXCO", + "varName": "_symbol", + "varType": "string", + "varBytes": 32, + "varValue": "FXCO", + "varSlot": 4, + "varOffset": 0, + "byteSize": 4, + "toReadSlot": 4 + }, + { + "contractName": "FXCO", + "varName": "_decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 5, + "varSlot": 5, + "varOffset": 0 + }, + { + "contractName": "FXCO", + "varName": "_pausers", + "varType": "Roles.Role", + "varBytes": 32, + "varValue": [ + { + "contractName": "FXCO", + "varName": "bearer", + "varType": "mapping(address => bool)", + "varBytes": 32, + "varValue": { + "0x5db34e9d00816b8f6b1ef37621ff84d46bab8a58": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": true, + "varSlot": 45115616182106514354411449716276929851132792545556836354382811778261483267245, + "varOffset": 0 + } + }, + "varSlot": 6, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + ], + "varSlot": 6, + "varOffset": 0 + }, + { + "contractName": "FXCO", + "varName": "_paused", + "varType": "bool", + "varBytes": 1, + "varValue": null, + "varSlot": 7, + "varOffset": 0 + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.inv.json new file mode 100644 index 0000000..c7095d4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.inv.json @@ -0,0 +1,219 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "destroySmartContract(_to)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "destroySmartContract(_to)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000", + "ori(Sum(balances[...])) one of [7000000000000000000000000]", + "ori(balances[to]) one of [0,124700000000000000000000,374700000000000000000000,437200000000000000000000,499700000000000000000000,749700000000000000000000]", + "to != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000", + "ori(_totalSupply) one of [7000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(balances[msg.sender]) > 0", + "ori(owner) != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "tokens > 0", + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens", + "ori(balances[to]) != ori(balances[msg.sender])", + "ori(balances[to]) != tokens", + "ori(balances[msg.sender]) >= tokens" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000", + "_totalSupply one of [7000000000000000000000000]", + "owner != 0", + "elem of balances[...] is one of [7000000000000000000000000]", + "balances[to] > 0", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000", + "Sum(balances[...]) one of [7000000000000000000000000]", + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) > balances[to]", + "ori(Sum(balances[...])) != balances[to]", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(balances[to]) != balances[msg.sender]", + "ori(balances[to]) <= balances[to]", + "ori(balances[to]) < balances[to]", + "ori(balances[to]) != balances[to]", + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "balances[msg.sender] <= ori(balances[msg.sender])", + "balances[msg.sender] < ori(balances[msg.sender])", + "balances[msg.sender] != ori(balances[msg.sender])", + "balances[msg.sender] != balances[to]", + "balances[msg.sender] <= Sum(balances[...])", + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])", + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "ori(balances[msg.sender]) != balances[to]", + "ori(balances[msg.sender]) <= Sum(balances[...])", + "owner == ori(owner)", + "balances[to] <= Sum(balances[...])", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])", + "balances[to] >= tokens", + "Sum(balances[...]) >= tokens", + "Sum(balances[...]) > tokens", + "Sum(balances[...]) != tokens", + "tokens + ori(balances[to]) == balances[to]", + "tokens + balances[msg.sender] == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[to]) <= ori(balances[msg.sender])", + "ori(balances[to]) < ori(balances[msg.sender])", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[msg.sender]) > tokens", + "ori(balances[msg.sender]) != tokens" + ], + "falsified_postconditions": [ + "balances[msg.sender] > 0", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[to]) < balances[msg.sender]", + "balances[msg.sender] >= balances[to]", + "balances[msg.sender] > balances[to]", + "balances[msg.sender] >= tokens", + "balances[msg.sender] > tokens", + "balances[msg.sender] != tokens", + "ori(balances[msg.sender]) >= balances[to]", + "ori(balances[msg.sender]) > balances[to]", + "balances[to] == tokens", + "balances[to] <= tokens" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000", + "ori(_totalSupply) one of [7000000000000000000000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000", + "ori(Sum(balances[...])) one of [7000000000000000000000000]", + "ori(owner) != 0" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000", + "_totalSupply one of [7000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000", + "Sum(balances[...]) one of [7000000000000000000000000]", + "elem of balances[...] is one of [7000000000000000000000000]", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.json new file mode 100644 index 0000000..8e36eab --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.json @@ -0,0 +1,621 @@ +{ + "variables": [ + { + "contractName": "WrappedHeC", + "varName": "name", + "varType": "string", + "varBytes": 32, + "varValue": "Wrapped HeC", + "varSlot": 0, + "varOffset": 0, + "byteSize": 11, + "toReadSlot": 0 + }, + { + "contractName": "WrappedHeC", + "varName": "symbol", + "varType": "string", + "varBytes": 32, + "varValue": "WHeC", + "varSlot": 1, + "varOffset": 0, + "byteSize": 4, + "toReadSlot": 1 + }, + { + "contractName": "WrappedHeC", + "varName": "decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 18, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "WrappedHeC", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 7000000000000000000000000, + "varSlot": 3, + "varOffset": 0 + }, + { + "contractName": "WrappedHeC", + "varName": "owner", + "varType": "address", + "varBytes": 20, + "varValue": "0xd4820d993fa54ed9116c96f21538b0d1d38e7e25", + "varSlot": 4, + "varOffset": 0 + }, + { + "contractName": "WrappedHeC", + "varName": "balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xd4820d993fa54ed9116c96f21538b0d1d38e7e25": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1374700000000000000000000, + "varSlot": 79136715996131551122039671353393624465719489420132459267780344676257460827922, + "varOffset": 0 + }, + "0x0149e7d42c4164755ce047938172b29c8676344f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000, + "varSlot": 34577132489483418114478287258434099060114836016201169927739983029896302545112, + "varOffset": 0 + }, + "0x5966a41fd8588ae21fd0a01db36d1ba8c07d1ea5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 100565514256441885331857705396048636231376973498718416446415544241883468914475, + "varOffset": 0 + }, + "0xfaeea93c3df7f5cebfa1d4c00f33cc275e709922": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 125000000000000000000000, + "varSlot": 78981230400791756540249202350783767349949799100710232085273150550666238925124, + "varOffset": 0 + }, + "0xca6b61e2cf21c1af75989ec17315fd907479ebe6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 62500000000000000000000, + "varSlot": 2399191807263717893928026565578543026636691170917659508410157554087982121744, + "varOffset": 0 + }, + "0xd781dcbc7e6455f24d402d6a9754462c3c87dbea": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500000000000000000000000, + "varSlot": 13458835821974403087672440656895559333092963018445192020708641815147734940439, + "varOffset": 0 + }, + "0x955cdd4cf06db8db6ad6e2672fb6963e51333dea": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 112578867939347559154269593958061020731737552793227494904815252601561468441715, + "varOffset": 0 + }, + "0x7077ee5f7d40970a1ad2b6a604cf0039b0748133": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 49486620107146742208123337579455711061398101157418349831727308440436511867965, + "varOffset": 0 + }, + "0xdaddf4e55dc1450ee80a3ba0ceb5a5a9f190917e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 24700000000000000000000, + "varSlot": 38303941638145390996837314001857762975065770933046864950558793596023219466982, + "varOffset": 0 + }, + "0xc20d2228683ab38839dffc8bb8446cfe61ba84cf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 181250000000000000000000, + "varSlot": 34794588252447241794970023544794977417971761287609428094194616809305829682855, + "varOffset": 0 + }, + "0xdd3ded6e9b93edb66cd753647ff3de311c8d2705": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 92656315275517747745467409622485899533302313337357811784355000968130526116187, + "varOffset": 0 + }, + "0x9f5c457eef7f4b54dcbc85187cddce47cb82c475": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 78750000000000000000000, + "varSlot": 87315632969984238764878753768041073366183417480469258173951877197286058030374, + "varOffset": 0 + }, + "0x5e33bcf2ab05a1e12d7718bc5d200a4be5a90379": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 68554237523003425469830491644230639543336882781127343273777614276526002775531, + "varOffset": 0 + }, + "0x3a6a143363a6377a87e784ab783f4ad6d1fd76bc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 37500000000000000000000, + "varSlot": 94635828750365681648314974006109620410492829098436964264992387944792555911521, + "varOffset": 0 + }, + "0x785f1b4841c87bec9f63e6a9a93d100966497e16": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 47998647662544238444629049152014263532449554738793143986011370280585544282642, + "varOffset": 0 + }, + "0xd1300d06851f0fd787e02115bcc436c155454c18": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 4117808191793061176451932111244507989296345305141820014675054384990242369881, + "varOffset": 0 + }, + "0xd4aaa9ae169c7137f36236f6957f15a820466397": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25125000000000000000000, + "varSlot": 21496011462858169470440901763290012040094693325465114010053439277102395946631, + "varOffset": 0 + }, + "0x78225876e234d0b731b55b3f4f98c09009b8f2a8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2500000000000000000000, + "varSlot": 53566941633027790759973943894679775048951591583508987567606153258272701219631, + "varOffset": 0 + }, + "0x5a7e005df62605b5aa03390ad7709ffbebef31bd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 94700207090371795213619830342925740154892712359635962213857000468416996188852, + "varOffset": 0 + }, + "0x17bedfe4d22975bc1b9b27ec911808b2843d7442": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 22650000000000000000000, + "varSlot": 30454749787048059759559796133398510492256829368467393248685496487591059774628, + "varOffset": 0 + }, + "0xa4760db77c17356a6344b09be0e32b10d14ee3a1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 184375000000000000000000, + "varSlot": 63767581980893961815061479706993371552135241838940542846446173472354842085045, + "varOffset": 0 + }, + "0x8c4af4d67d2ef43c31f50f32250a04582f91a329": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 212500000000000000000000, + "varSlot": 16002175417051399389566340315857969461596511483225395288093783209172218631718, + "varOffset": 0 + }, + "0xd32714c93ccedb5d180dfb4a87647523660a42ef": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 52176986523862526237934879354514834897110948459757175735009205587496708522840, + "varOffset": 0 + }, + "0x8276608875fec4f66a554f8fe9ff33d0bad6514b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 156262500000000000000000, + "varSlot": 3200438741887019800256834596224775076339246950471303985565109200539271144627, + "varOffset": 0 + }, + "0x5a64a123a63f79b2ce5a2c6d4f340c542474485e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000, + "varSlot": 28481873044670481077116131164897124118048882983182356310376389451114223776479, + "varOffset": 0 + }, + "0xd01c7664455b889ecb2b94eaeeb01baeb8e600a4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 37500000000000000000000, + "varSlot": 5986309283064404965716881902051148380952804509807970536781477831546870192734, + "varOffset": 0 + }, + "0x06558e7eaa5c2e6002f55571aa4fb7ccd3598436": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50075000000000000000000, + "varSlot": 41863651180441451599327763603817140927975280501259092487883054800780524484188, + "varOffset": 0 + }, + "0x9b331f1845d7668fccaf393630cf1ba46407fcbd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 28125000000000000000000, + "varSlot": 22291609129218399943640694795139036286690845230555359677950622617791890898358, + "varOffset": 0 + }, + "0x10057fb0906dcbdd6b3d046d8510d907e4a26925": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 124925000000000000000000, + "varSlot": 56974695718905209276562930321718575569913972207607431260851517189016202620946, + "varOffset": 0 + }, + "0xa81f8e40f2cc3b5ac47462dfd9d7c8d821c33524": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 31250000000000000000000, + "varSlot": 30822908697796041039035336041165144219607742170881914926715252020837983400471, + "varOffset": 0 + }, + "0xb8bc62e3f2ef8d7dc470cb536fc91bfb04c503fe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 75000000000000000000000, + "varSlot": 49217095786467851907073963753557741409682487054199310082230313132798148559198, + "varOffset": 0 + }, + "0x07cd93a5ff58c0e930df96bce175b9b768b61df8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 412500000000000000000000, + "varSlot": 69376935801467821630518403719941104282200366395784329444144409890282817041421, + "varOffset": 0 + }, + "0xdf1662d3490572cc4ae96a80b3fcc628c7ee7d72": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 62500000000000000000000, + "varSlot": 60241953633198914855011043852547431266846288644500851836725365181612218513011, + "varOffset": 0 + }, + "0x05451d23d212de6a9b5108849b01c9e6710f52ea": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 187500000000000000000000, + "varSlot": 29077899669497513340600735956514902955423414428544113307782263890669698432336, + "varOffset": 0 + }, + "0xb160894b8813ac7460741f80b74e91e1e9a19fc8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 60024965351212831856800414666049449441817863012872750618240315503609322820488, + "varOffset": 0 + }, + "0x77fb62fcca3ed31b1c546f415cc5a4c563990bb7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 625000000000000000000000, + "varSlot": 45798896855991529552533079911382506198543946871814071139651263587139963924951, + "varOffset": 0 + }, + "0xd8e93d203338ef27619349da2f0661f43e4888c8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 62500000000000000000000, + "varSlot": 102554318909113372991195965490609170424602342419241966265631349901300099277898, + "varOffset": 0 + }, + "0xbeff80bd6cb914f2be87eb82e0ac67921ed18004": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 107281597836983771658587867197273330491441026737230611523092417307437848014439, + "varOffset": 0 + }, + "0x29f8dce5fa24578115a2c436d5927686b3f4891c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 73958055085511464580531057539976623993955676499571200619919829983084621605547, + "varOffset": 0 + }, + "0x28964b45a2ecc3179d66e47688b05e81824601e4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 62875000000000000000000, + "varSlot": 88878988255541994859976323420517309968057973264822549125816499568340752425785, + "varOffset": 0 + }, + "0x314618e4c592709fb958955b44f16ee4bf085718": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 62500000000000000000000, + "varSlot": 94607651516337608578722145413765377226588569256019499123229290540506195982647, + "varOffset": 0 + }, + "0xacc63ecae6b0989d9626a455ef1f217e2c4c2ff8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 106403618212952070557668299123765700839283465542110243399852736642359234226060, + "varOffset": 0 + }, + "0xcc92f00562c4a4633e8373643e84b877fd65b12c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 8929699852873620707790297934233626946385155570444896459382706639822917768415, + "varOffset": 0 + }, + "0xd315337bd68d6b5736b273e33cc397044b88dfb3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 187500000000000000000000, + "varSlot": 104097819881906133253331902908135337252753832062550599780930762282191440939751, + "varOffset": 0 + }, + "0xa0e7faf3624e593eae53937e276649e186109423": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 53162500000000000000000, + "varSlot": 18066688303145276714894659435796964185325285059950644294611085269560539918973, + "varOffset": 0 + }, + "0x37c3b4df88fa906692e14b595ab2138abd446184": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150000000000000000000000, + "varSlot": 59204992122872475936666564476299056403477480264468652705863509223035217746208, + "varOffset": 0 + }, + "0xc101453e7817c2f43fa203e087b28bb1a4dcb3bc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 12500000000000000000000, + "varSlot": 17224591198806550077758734394807309544604327732506118806408310666605955747753, + "varOffset": 0 + }, + "0x52f8a4890eef98dda43e619b254df1f6cc898491": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000000000000, + "varSlot": 58431423244936772929934269936968324131331703813623557513152763137943147335885, + "varOffset": 0 + }, + "0x7c6a39fd5401f8dbd3674094793ae50c9ebe9db9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 138587500000000000000000, + "varSlot": 29448666299285817269606926510695703568155989305257514206241014046488601024134, + "varOffset": 0 + }, + "0xf0857b367f2bfb2012488c7b522e80e451277969": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 111250000000000000000000, + "varSlot": 66722213937396825436283185179524775297211763058577884917742785405188511104696, + "varOffset": 0 + }, + "0xce5e1a83f20ed768756804d7100378b17c3424a9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 311937500000000000000000, + "varSlot": 79191261521303954215384325382617773175386075096885095882493642203479877771741, + "varOffset": 0 + }, + "0xdad9dd6f65f22802d26730ec5d4c9aaea3999729": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 625000000000000000000000, + "varSlot": 67285796836164917453543604087137402861465598726303176654482905399153353774012, + "varOffset": 0 + }, + "0x4ec4b545c089fc5cfa643718b3825d878a5b7218": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 83185833421243339775563885583022925148611938706684260806097884081970570542077, + "varOffset": 0 + }, + "0x68093239ee7ac9d051e715d3fa9ea2b19a6dd892": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 6162943219434538336119500045795271093037003759417532506074972657782630585754, + "varOffset": 0 + }, + "0xb783a00f82dbda988d8865bdd31b33400cd9d744": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000, + "varSlot": 40991492256815822074307270439305970574123142667802382983564714444260927137322, + "varOffset": 0 + } + }, + "varSlot": 5, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "WrappedHeC", + "varName": "allowed", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": {}, + "varSlot": 6, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.inv.json new file mode 100644 index 0000000..7f81950 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.inv.json @@ -0,0 +1,784 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) one of [1500000000000000000000000,720000000000000000000000000]", + "ori(_allowed[msg.sender][spender]) == 0", + "ori(_allowed[msg.sender][spender]) one of [0]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]", + "ori(Sum(_allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]", + "ori(_allowed[msg.sender][spender]) <= value", + "ori(_allowed[msg.sender][spender]) < value", + "ori(_allowed[msg.sender][spender]) != value", + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))", + "value >= ori(Sum(_allowed[msg.sender][...]))" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_allowed[msg.sender][...]) > 0", + "Sum(_allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]", + "elem of _balances[...] is one of [997200000000000000000000000]", + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount one of [1500000000000000000000000,720000000000000000000000000]", + "elem of _allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]", + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)", + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "ori(_allowed[msg.sender][spender]) <= Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) <= _allowed[msg.sender][spender]", + "ori(_allowed[msg.sender][spender]) < _allowed[msg.sender][spender]", + "ori(_allowed[msg.sender][spender]) != _allowed[msg.sender][spender]", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "Sum(_allowed[msg.sender][...]) >= _allowed[msg.sender][spender]", + "Sum(_allowed[msg.sender][...]) >= value", + "Sum(_allowed[msg.sender][...]) >= ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) > ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] == value", + "_allowed[msg.sender][spender] >= value", + "_allowed[msg.sender][spender] <= value", + "_allowed[msg.sender][spender] >= ori(Sum(_allowed[msg.sender][...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addToBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "account != 0", + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 1500000000000000000000000", + "ori(maxTxAmount) one of [1500000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]", + "ori(_isBlackListed[account]) == false", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000000000000000", + "ori(Sum(_balances[...])) one of [1000000000000000000000000000]", + "msg.sender == ori(currentOwner)" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000000000000000", + "Sum(_balances[...]) one of [1000000000000000000000000000]", + "elem of _balances[...] is one of [1000000000000000000000000000]", + "currentOwner != 0", + "_isBlackListed[account] == true", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount == 1500000000000000000000000", + "maxTxAmount one of [1500000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)", + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "msg.sender == currentOwner", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_isBlackListed[account] != ori(_isBlackListed[account])", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addToBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeFromBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeFromBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 300000000000000000000000000", + "ori(maxTxAmount) one of [300000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_balances[to]) == 0", + "ori(_balances[to]) one of [0]", + "ori(_balances[msg.sender]) > 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "value > 0", + "value one of [10000000000000000000000000,3000000000000000000000000,7000000000000000000000000]", + "ori(_totalSupply) > 0", + "msg.value == 0", + "msg.value one of [0]", + "to != 0", + "ori(Sum(_balances[...])) > 0", + "ori(maxTxAmount) >= ori(_balances[to])", + "ori(maxTxAmount) > ori(_balances[to])", + "ori(maxTxAmount) != ori(_balances[to])", + "ori(maxTxAmount) <= ori(_balances[msg.sender])", + "ori(maxTxAmount) < ori(_balances[msg.sender])", + "ori(maxTxAmount) != ori(_balances[msg.sender])", + "ori(maxTxAmount) >= value", + "ori(maxTxAmount) > value", + "ori(maxTxAmount) != value", + "ori(maxTxAmount) <= ori(_totalSupply)", + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)", + "ori(maxTxAmount) <= ori(Sum(_balances[...]))", + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))", + "msg.sender != to", + "ori(_balances[to]) <= ori(_balances[msg.sender])", + "ori(_balances[to]) < ori(_balances[msg.sender])", + "ori(_balances[to]) != ori(_balances[msg.sender])", + "ori(_balances[to]) <= value", + "ori(_balances[to]) < value", + "ori(_balances[to]) != value", + "ori(_balances[to]) <= ori(_totalSupply)", + "ori(_balances[to]) < ori(_totalSupply)", + "ori(_balances[to]) != ori(_totalSupply)", + "ori(_balances[to]) <= ori(Sum(_balances[...]))", + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= value", + "ori(_balances[msg.sender]) > value", + "ori(_balances[msg.sender]) != value", + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "value <= ori(_totalSupply)", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)", + "value <= ori(Sum(_balances[...]))", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_balances[msg.sender] > 0", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [998970000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "_balances[to] > 0", + "_balances[to] one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000]", + "maxTxAmount > 0", + "maxTxAmount == 300000000000000000000000000", + "maxTxAmount one of [300000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)", + "_balances[msg.sender] >= ori(maxTxAmount)", + "_balances[msg.sender] > ori(maxTxAmount)", + "_balances[msg.sender] != ori(maxTxAmount)", + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] >= ori(_balances[to])", + "_balances[msg.sender] > ori(_balances[to])", + "_balances[msg.sender] != ori(_balances[to])", + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] <= _totalSupply", + "_balances[msg.sender] < _totalSupply", + "_balances[msg.sender] != _totalSupply", + "_balances[msg.sender] >= value", + "_balances[msg.sender] > value", + "_balances[msg.sender] != value", + "_balances[msg.sender] >= _balances[to]", + "_balances[msg.sender] > _balances[to]", + "_balances[msg.sender] != _balances[to]", + "_balances[msg.sender] <= ori(_totalSupply)", + "_balances[msg.sender] < ori(_totalSupply)", + "_balances[msg.sender] != ori(_totalSupply)", + "_balances[msg.sender] >= maxTxAmount", + "_balances[msg.sender] > maxTxAmount", + "_balances[msg.sender] != maxTxAmount", + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "ori(maxTxAmount) <= Sum(_balances[...])", + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])", + "ori(maxTxAmount) <= _totalSupply", + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply", + "ori(maxTxAmount) >= _balances[to]", + "ori(maxTxAmount) > _balances[to]", + "ori(maxTxAmount) != _balances[to]", + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) >= ori(_balances[to])", + "Sum(_balances[...]) > ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[msg.sender])", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply", + "Sum(_balances[...]) >= value", + "Sum(_balances[...]) > value", + "Sum(_balances[...]) != value", + "Sum(_balances[...]) >= _balances[to]", + "Sum(_balances[...]) > _balances[to]", + "Sum(_balances[...]) != _balances[to]", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "Sum(_balances[...]) >= maxTxAmount", + "Sum(_balances[...]) > maxTxAmount", + "Sum(_balances[...]) != maxTxAmount", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "ori(_balances[to]) <= _totalSupply", + "ori(_balances[to]) < _totalSupply", + "ori(_balances[to]) != _totalSupply", + "ori(_balances[to]) <= _balances[to]", + "ori(_balances[to]) < _balances[to]", + "ori(_balances[to]) != _balances[to]", + "ori(_balances[to]) <= maxTxAmount", + "ori(_balances[to]) < maxTxAmount", + "ori(_balances[to]) != maxTxAmount", + "ori(_balances[msg.sender]) != _totalSupply", + "ori(_balances[msg.sender]) >= _balances[to]", + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]", + "ori(_balances[msg.sender]) >= maxTxAmount", + "ori(_balances[msg.sender]) > maxTxAmount", + "ori(_balances[msg.sender]) != maxTxAmount", + "_totalSupply >= value", + "_totalSupply > value", + "_totalSupply != value", + "_totalSupply >= _balances[to]", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply >= maxTxAmount", + "_totalSupply > maxTxAmount", + "_totalSupply != maxTxAmount", + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)", + "value >= _balances[to]", + "value > _balances[to]", + "value != _balances[to]", + "value <= maxTxAmount", + "value < maxTxAmount", + "value != maxTxAmount", + "_balances[to] <= ori(_totalSupply)", + "_balances[to] < ori(_totalSupply)", + "_balances[to] != ori(_totalSupply)", + "_balances[to] <= maxTxAmount", + "_balances[to] < maxTxAmount", + "_balances[to] != maxTxAmount", + "_balances[to] <= ori(Sum(_balances[...]))", + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))", + "ori(_totalSupply) >= maxTxAmount", + "ori(_totalSupply) > maxTxAmount", + "ori(_totalSupply) != maxTxAmount", + "maxTxAmount <= ori(Sum(_balances[...]))", + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))", + "value + _balances[msg.sender] == ori(_balances[msg.sender])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMaxTxAmount(theAmount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "theAmount > 0", + "theAmount one of [300000000,720000000,1500000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]", + "msg.sender == ori(currentOwner)" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]", + "elem of _balances[...] is one of [997200000000000000000000000]", + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)", + "ori(maxTxAmount) != maxTxAmount", + "msg.sender == currentOwner", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMaxTxAmount(theAmount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(maxTxAmount) <= ori(_totalSupply)", + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)", + "ori(maxTxAmount) <= ori(Sum(_balances[...]))", + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [998970000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)", + "ori(maxTxAmount) <= Sum(_balances[...])", + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])", + "ori(maxTxAmount) <= _totalSupply", + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) >= maxTxAmount", + "Sum(_balances[...]) > maxTxAmount", + "Sum(_balances[...]) != maxTxAmount", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply >= maxTxAmount", + "_totalSupply > maxTxAmount", + "_totalSupply != maxTxAmount", + "_totalSupply <= ori(Sum(_balances[...]))", + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)", + "ori(_totalSupply) >= maxTxAmount", + "ori(_totalSupply) > maxTxAmount", + "ori(_totalSupply) != maxTxAmount", + "maxTxAmount <= ori(Sum(_balances[...]))", + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply == ori(Sum(_balances[...]))", + "_totalSupply >= ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.json new file mode 100644 index 0000000..c958cc3 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.json @@ -0,0 +1,580 @@ +{ + "variables": [ + { + "contractName": "YakuzaInu", + "varName": "_name", + "varType": "string", + "varBytes": 32, + "varValue": "Yakuza Inu", + "varSlot": 0, + "varOffset": 0, + "byteSize": 10, + "toReadSlot": 0 + }, + { + "contractName": "YakuzaInu", + "varName": "_symbol", + "varType": "string", + "varBytes": 32, + "varValue": "YakuzaInu", + "varSlot": 1, + "varOffset": 0, + "byteSize": 9, + "toReadSlot": 1 + }, + { + "contractName": "YakuzaInu", + "varName": "_decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 18, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "YakuzaInu", + "varName": "_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x85b1a1b1b94c3153474b347aa84a7509238acd5b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 720000000000000000000000000, + "varSlot": 169402378288258515624326699567912095976359862484927977156045028269176961881, + "varOffset": 0 + }, + "0x1821ce945bbcd7253ca349c54ef0a302e88b2346": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 102272268956875944169197915674571783612206373479193736650529262046811484030886, + "varOffset": 0 + }, + "0xb930febdfcc9a2df6a7827c5e9bc4d9388a6546d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 46383131406827350486355125593348775262876444402288443632538138907606969218020, + "varOffset": 0 + }, + "0x60cd3f9918053923e15dc2505af3e8e2b3fbb14e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2970000000000000000000000, + "varSlot": 23037820285546349183993067221689120209484922259256943681497544699871944233080, + "varOffset": 0 + }, + "0x6280321f73c0a772c5b52d1ad9f3ca32ea243206": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 21825719445281405309661447702408500200462095520486873987205255841915513124556, + "varOffset": 0 + }, + "0x9d693e28fbf01799efe33c1cdcb1af3211ff6e51": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 1152927172016062401171417774496463891038164859817647473582571312963361072708, + "varOffset": 0 + }, + "0x5632ec55985dd14fb44fab82be43f0d0e497de10": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 14068390668846100449602423943365291281166916816104163349284836675208528057705, + "varOffset": 0 + }, + "0xb30ce1c9b33035c9d80244aae1cc190f5b44ff8e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 6504677661999812078194835699942732614508335200343791751870940432446892875736, + "varOffset": 0 + }, + "0x9bffd9bc367c93e4cc9f27588e74175ec4a6d31e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 113912697040119457596443072916217323193989684814323663756322657635084442312639, + "varOffset": 0 + }, + "0xf509121bcc9e18145d98e08120adc0168c495259": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 112760784611906813053809059381850837767921586919207538174594426870066456453466, + "varOffset": 0 + }, + "0x8718fb2f866d8ecd9663046931d3c21b425188b5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 86499959312929365880840430830467168221588947632461165255585857057497179051004, + "varOffset": 0 + }, + "0xb4705fd75ac926ff84a2467eb39a0be12892641f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 110927695264566941740369252338248888646109944673807173617278743815261773666305, + "varOffset": 0 + }, + "0xeacccdf1487ed0ce4bc1f57526e1c9a789b1a5af": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 725011155571450319295239062947325226542448851104192551588902750908306659369, + "varOffset": 0 + }, + "0xb4de483a98e2d5c52c0ed51f5936a26a0d1ef39b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 113418874150965902459487019902215008179444697074420181027297293562727058830073, + "varOffset": 0 + }, + "0x240a4ad6523c4094613dfda3fa094c4576cc3e5d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 75561271242495183222359529851669713406734216016326849290757721895817118844154, + "varOffset": 0 + }, + "0xc1cff51724c9feed7d5145953ece9ad3fe26a0c8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 57927370383038547130092569295973344996300880455213048295963254127506431863291, + "varOffset": 0 + }, + "0x7b77cd8b9ea4f189184808ddf6a1758f2d89bbaa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 112314517418073921997093830505672800752185631635350056804692529481103044656805, + "varOffset": 0 + }, + "0xc0774fa2912e3d7bb96edd015193e349e00779d8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 8605573092162535937641245009968114370112072849765055275699989981918968101745, + "varOffset": 0 + }, + "0x949da077579dee261b08f729b2f70a2c2c123495": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 51424280675599400192429610681528716527372066282825051432499814965646534165254, + "varOffset": 0 + }, + "0xfc7b86cca8bc329ea500135f129d4259690ef258": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 14904809627099441574906212822407734905139377202705590476689668703510742277914, + "varOffset": 0 + }, + "0x0a3a0543ca4110c3569de1fc1459789929a056c1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 64895442594394823782810021618014895736410852735188962274012513632738438395396, + "varOffset": 0 + }, + "0xdbab7326199c40093d5c9ab424cf4b1b30795ff1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 80411850621976741864460490298514215557523275391706136354747957663648442134451, + "varOffset": 0 + }, + "0x6b4660a8833fc648a078f26b30ab092759b2ae5a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6930000000000000000000000, + "varSlot": 57634217956042495444075887163194152951371974287633828758690177004724331210367, + "varOffset": 0 + }, + "0xcc1a8576f7e75398a390a147da1fbe683c2a9587": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 11486608887152201548099169355584427606451192659195744009289037990055632499794, + "varOffset": 0 + }, + "0xee6006609f1808fa80f5d033abf6841118b8e0f5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 94445422395021839413987910192092670436048669977537269696764472033160464606153, + "varOffset": 0 + }, + "0x1f40fa4ac47d212ba2dd469abae91e5454344e10": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 72762533932155348075298992977583319597348039382452363483734567173079194259451, + "varOffset": 0 + }, + "0x59785551b29c603affb50aa2d2754061046df11c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 102291950126444657740285080023676476148905924884841690308839748701979512896113, + "varOffset": 0 + }, + "0xb9e5f6b46e60cb8e2a36f7a5eb8501ca577a8ff0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 56670927855998622942548634025912778897865583659373072435935091314599884124717, + "varOffset": 0 + }, + "0x5c1032bba7b914e42dc00a0b2249059a022a2b0d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 103702799018002653863765883184159382279657063470823685089635932221359874265476, + "varOffset": 0 + }, + "0x320499df2dad3349ae7c8c7d94c06126e7b29ee1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000000, + "varSlot": 42939569581527559088420619321270900721301353947432900258757188299940270775917, + "varOffset": 0 + } + }, + "varSlot": 3, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "YakuzaInu", + "varName": "_allowed", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": { + "0x85b1a1b1b94c3153474b347aa84a7509238acd5b": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xa5025faba6e70b84f74e9b1113e5f7f4e7f4859f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 71911819868194900973420882720408324263289321997623994110965365704222956660993, + "varOffset": 0 + }, + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 102609142787139636305462627381960491081422274693476769960599809560374062649810, + "varOffset": 0 + } + }, + "varSlot": 108079860857071901008166695271772982209333366771278325273230462844422018798273, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0x22246f9bca9921bfa9a3f8df5babc5bc8ee73850": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x63abe8e2d1a85872de3d12211f155ec8f7499050": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 110785733350744379643227521426671369019042702030568094362962362520519295949463, + "varOffset": 0 + } + }, + "varSlot": 66228695479730709085275756076795817810502601012382013674906778337269770338761, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + "varSlot": 4, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "YakuzaInu", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 997200000000000000000000000, + "varSlot": 5, + "varOffset": 0 + }, + { + "contractName": "YakuzaInu", + "varName": "basePercent", + "varType": "uint256", + "varBytes": 32, + "varValue": 100, + "varSlot": 6, + "varOffset": 0 + }, + { + "contractName": "YakuzaInu", + "varName": "_burnStopAmount", + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": 7, + "varOffset": 0 + }, + { + "contractName": "YakuzaInu", + "varName": "_lastTokenSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 200000000000000000000000, + "varSlot": 8, + "varOffset": 0 + }, + { + "contractName": "YakuzaInu", + "varName": "maxTxAmount", + "varType": "uint256", + "varBytes": 32, + "varValue": 720000000000000000000000000, + "varSlot": 9, + "varOffset": 0 + }, + { + "contractName": "YakuzaInu", + "varName": "currentOwner", + "varType": "address", + "varBytes": 20, + "varValue": "0x85b1a1b1b94c3153474b347aa84a7509238acd5b", + "varSlot": 10, + "varOffset": 0 + }, + { + "contractName": "YakuzaInu", + "varName": "_isBlackListed", + "varType": "mapping(address => bool)", + "varBytes": 32, + "varValue": { + "0x9e64e525da3ec2b9749a42347afbfa56f64fb90c": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": true, + "varSlot": 10606304155096988826745307615174592899917343484596823828634861178803069588626, + "varOffset": 0 + }, + "0x739df0234e61f1db66eeb4fdf0564bac183995e0": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": true, + "varSlot": 52474533755919088706688854584276662713085947348208473050927895846462148010386, + "varOffset": 0 + }, + "0xf3daa7465273587aec8b2d2706335e06068ccce4": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": true, + "varSlot": 50336864925964299586843773422214131176564397916105540738551269933167985657221, + "varOffset": 0 + }, + "0x3f8efd0caf139190c6013bebc751f24b612b7c47": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": true, + "varSlot": 16180190632629402356523460238732791630723944392967689926891503551535816199540, + "varOffset": 0 + } + }, + "varSlot": 11, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.inv.json new file mode 100644 index 0000000..40a4347 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.inv.json @@ -0,0 +1,311 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000", + "ori(_totalSupply) one of [100000000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]", + "ori(Sum(_allowances[msg.sender][...])) == 0", + "ori(Sum(_allowances[msg.sender][...])) one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "spender != msg.sender", + "value >= ori(_allowances[msg.sender][spender])", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])", + "value >= ori(Sum(_allowances[msg.sender][...]))", + "value > ori(Sum(_allowances[msg.sender][...]))", + "value != ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) == ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ], + "postconditions": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]", + "elem of _balances[...] is one of [0,15000000000000000000000000000000,30000000000000000000000000000000,500000000000000000000000000000,200000000000000000000000000000,20000000000000000000000000000000,2605000000000000000000000000000,10000000000000000000000000000,100000000000000000000000000000,10000000000000000000000000000000,25000000000000000000000000000]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000", + "_totalSupply one of [100000000000000000000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000000000000000]", + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])", + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) >= ori(_allowances[msg.sender][spender])", + "Sum(_allowances[msg.sender][...]) > ori(_allowances[msg.sender][spender])", + "Sum(_allowances[msg.sender][...]) != ori(_allowances[msg.sender][spender])", + "Sum(_allowances[msg.sender][...]) >= ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) > ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) == _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) <= _allowances[msg.sender][spender]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(_allowances[msg.sender][spender]) <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(Sum(_allowances[msg.sender][...])) <= _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_balances[msg.sender]) > 0", + "recipient != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000", + "ori(_totalSupply) one of [100000000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]", + "amount > 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_balances[recipient]) one of [0,20000000000000000000000000000000]", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])", + "recipient != msg.sender", + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "postconditions": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000", + "_totalSupply one of [100000000000000000000000000000000]", + "_balances[recipient] > 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000000000000000]", + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "_balances[msg.sender] != _balances[recipient]", + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])", + "_balances[recipient] <= Sum(_balances[...])", + "ori(_balances[recipient]) <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0" + ], + "falsified_postconditions": [ + "_balances[msg.sender] >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) >= _balances[recipient]" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000", + "ori(_totalSupply) one of [100000000000000000000000000000000]", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000", + "_totalSupply one of [100000000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000000000000000]", + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.json new file mode 100644 index 0000000..97fd898 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.json @@ -0,0 +1,614 @@ +{ + "variables": [ + { + "contractName": "Cogecoin", + "varName": "_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xb90fa49f365466e4b3dbcdbc0e5044836a845f3d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 64718069516717215145370413106622152450544377953277360390854839277228361411202, + "varOffset": 0 + }, + "0xe6a40332d7a2ce2b4ada05d4ce28a0c942ffd3a9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000000000000000000000, + "varSlot": 75571054289111343595992817486970992382578975212530059004837635593098921260016, + "varOffset": 0 + }, + "0x2ce1ccdd14627967aad6df19ba97b7f926d1f2c4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000000000000, + "varSlot": 98690774437847855138174385550293615590980711393020765183424654131805424967972, + "varOffset": 0 + }, + "0x2ed37b7f31b242f817bdf92dc2d4c29308711138": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 15000000000000000000000000000000, + "varSlot": 43124462917255635757183357780562018337589826379460394261096680873770204237182, + "varOffset": 0 + }, + "0x74d439e021bb822a72f5e8a8ea8e8e6b93f948bb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000000000000, + "varSlot": 12645884590644194865094748049092766074632464770378996758578920071554033680385, + "varOffset": 0 + }, + "0x100eb54c7d9c42f9fe62c06cf0b21f13edad5815": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000000000000, + "varSlot": 19094835388309936940603273841183507276746077954297276371411793410772629908032, + "varOffset": 0 + }, + "0x100d0dded9b47d9af5ee1a26ea3c07ba4a86c0bd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2605000000000000000000000000000, + "varSlot": 104205074317779089291488989433599666822397934639959261687800380245394438411979, + "varOffset": 0 + }, + "0xc5eea04f9f1c8d44edd539396b76fda8c0abbbeb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200000000000000000000000000000, + "varSlot": 36026050675385428421166978887700039956811826298400487639312930390532227595635, + "varOffset": 0 + }, + "0x3b9087253fa4a8de96f152ac037be47764f4e93a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000, + "varSlot": 2489250158454277391985651808042560506763811402001609282108169789165429331012, + "varOffset": 0 + }, + "0x4da710a7a334d103c589c0284376e185a7ebe35b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000, + "varSlot": 111408293439294462263315871849886298110668008910878273739546978834739854424273, + "varOffset": 0 + }, + "0x33af9a0e7fcb744bde01159c636b7a954ca85175": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000, + "varSlot": 15104676410614759535365951949786978473506403403549330756406972621702660728865, + "varOffset": 0 + }, + "0x1a9ab1c88b4515131ff965bce9f1025df04fb2e7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000, + "varSlot": 64737177167871621865853594874558908231716312778504993873474592585691100874347, + "varOffset": 0 + }, + "0xe2f3414241936b7b6434aef595bf85e569f4ce91": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000, + "varSlot": 109500819125617763851492890804500827111049009392958944156706040558132900096269, + "varOffset": 0 + }, + "0x8761e9a10caa07d03d23d50896bb1d65c17d9336": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000, + "varSlot": 54656801845953106988910786647308297876602946748399625665801411257260417578869, + "varOffset": 0 + }, + "0x6857d3dbb49d0bba26a100fcce1c1abe37ee3a27": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000, + "varSlot": 15580003144930654730121385825364239442188093024038763388152568089793086024890, + "varOffset": 0 + }, + "0xd2f1c12d609994f5ab344f92031adb45afb85f67": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000, + "varSlot": 79071423629578190929541646109212675029849857227227509567219473371408145805982, + "varOffset": 0 + }, + "0x505bbd6c95c528f14ef2e846b40849111b7b7e87": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000, + "varSlot": 21819189027609952319703687729661795374310236803773118803601538295897743431937, + "varOffset": 0 + }, + "0x7c307eebc0f65b7ee6e813cbe0c6b9e7471026c8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500000000000000000000000000000, + "varSlot": 90637613750929615282448416282361334162003004054135514136466042934575571096999, + "varOffset": 0 + }, + "0xf56ed3416f9d80e95d08cfee08f95d8e4bed97b8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 4488147011577225593937261040348366090212043323613147135872939160679087679855, + "varOffset": 0 + }, + "0x3cb625d4f4387c87f18ba26e27692591f4e0a3c6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 38425775250230940217671231351447256954108531386356956074489478302277617095838, + "varOffset": 0 + }, + "0x87fa619a17b0517e50fa30f99cc0204db937e0b5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 39892039020543739365775560819413297735566369653148355022025264425274930425884, + "varOffset": 0 + }, + "0x47d331e854fa825d74df0e26d852cbc1eba5c90e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 79814963265245819773688659377443885966145808710578162174794507754812988177172, + "varOffset": 0 + }, + "0x4be00b662961154f42e29a1d51d2936ead2f5bd3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 81323464138884807332675585336275578402479838745711005564689986455633688261132, + "varOffset": 0 + }, + "0xd7688fafd824c4534e829130727a191dd1b8743f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 98254970659874635452959786600720102024230760308850424189740489925420652153491, + "varOffset": 0 + }, + "0x9cf17967e3ef2bd679cecc7e27bf4c12b2b137f7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 78262209214284354208122461858879498078238439287349025288021765746486889073254, + "varOffset": 0 + }, + "0xe3f800e75d45ab25b0f6f31c6f4eed1cd6d7d570": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 78212622461099001165762880571544557942999218160635636606751643231148759681819, + "varOffset": 0 + }, + "0x9bab0c5f3991a908c240239e295365f9b9ebeff7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 37069552926667738628690448237821012992862157489555784338757183065027001073737, + "varOffset": 0 + }, + "0xa82ead04aed17f41951717ccddee7041b9c37dde": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 75331037117750137705365236546133062356967513644196565476825332585571984903655, + "varOffset": 0 + }, + "0xeeed49d691394a7a4b044927cfe23ab71555eec2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 75366840823992384129056594933469521252265346206304518428859439290401214612409, + "varOffset": 0 + }, + "0x79452ee40e9fe6d400ff3fd310cccb5dacac37ad": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 72342087786983993623131653553105117613738818006540460008308959154485342473963, + "varOffset": 0 + }, + "0x443c5aeae586c5712dacb0b2fa0bbdc632b07d84": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 7915428627307135247251897602970007246546122141582377348405077287149184679355, + "varOffset": 0 + }, + "0xd3bce59297b0cb84d83647cb887dee48edf30672": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 78275551620652948262354430754956724007237253504103226358189874930013874292176, + "varOffset": 0 + }, + "0xaf30683572b8cabc9ea6ac0e5475f8b32d5b18a1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 3750290076955706236988569224525142225430082226403903774933436623365590896263, + "varOffset": 0 + }, + "0xa98ea0997befed3c5796cdd5f071f8083e709b27": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 113017369378107625190562644110926079703591872553401535953705940914522499730410, + "varOffset": 0 + }, + "0xefbc2b95a7647383df70dbe0b20da28d5b0cfbb7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 93339772140925596221872342711481118452860938313800276092908542671937075803333, + "varOffset": 0 + }, + "0x34c2ce86df498cbd74de9a50564e2033bcdfb90c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 32962897625403920258788752626265295734569011822711053071553515668374196805449, + "varOffset": 0 + }, + "0x3f52aa8eb16abd4a5cfed9f70b41f60320b88cd8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 13348559894928703609349653296415988542825875167622514972337222836405182707200, + "varOffset": 0 + }, + "0x1ce1492c79aa8dd7d248e252c8fbf3aa623e8c25": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 51268740036453405696831295387013358689181916263462353275941360789088823148338, + "varOffset": 0 + }, + "0xa7fc3c1a73e6072d5c7009d29323b9dd640ac02d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 89406675722618136268250236312089458736288811478791338484474792121770663390139, + "varOffset": 0 + }, + "0x3e4f6e104edbd46cd98c6019d7ea1ea47ce51ca4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 96076252983635421287790165410156083260728455247493171923295212935865940796216, + "varOffset": 0 + }, + "0x770f97e844e6fe9c5348d082bf743975ee04a731": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 83759078455906092171760529858326856561501438676546905714150638522703632070115, + "varOffset": 0 + }, + "0xf378c6c1adf48afffc313067cd7975d0471e8b00": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 79852536422564357735670471124086709778917483663097519775795035389533548791861, + "varOffset": 0 + }, + "0xaa3c82dc3c4c19f4a3379237e1711610e773fffb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 37186247203734175703863911601686807319012656492625560456441243672678360686082, + "varOffset": 0 + }, + "0x6f2635707d83ed3b86152b83b45cad31b7a1b405": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 3218023246365190454132687474718963559998963218737676793583668708921835880355, + "varOffset": 0 + }, + "0xc74b9a89a66c7931bf5f60c845b007e0598d01c8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 29753913588670589857395188818628779937981185308600143898890614472375653275630, + "varOffset": 0 + }, + "0x19c0db8d561b0bce881ab8569d49f6e96f4281fc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 50342725901875765086598413312466252405709904887709450437509357671661883074799, + "varOffset": 0 + }, + "0xf1eaf33522ca21f08521994346b7bec25a8f2003": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 2802112130419744241089046687860380184466146149310609638909303960118803649022, + "varOffset": 0 + }, + "0x6ea3dc051bd387e202bca5d6cf7bcb4f017f42d0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 67668140395535361237674907509975777843552118330467306048406358683640469339217, + "varOffset": 0 + }, + "0x17d8c25393d22fade2f1cd9d181bca9fb1c9a6db": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000000000, + "varSlot": 67517158329865421322407056870768146988625506531630667701178120979562479856292, + "varOffset": 0 + }, + "0xaa24c1278ebc08ec8b070355ed42691404988b67": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000000000, + "varSlot": 16228176713396488937402311664956610255818037871818850971542029266466565930274, + "varOffset": 0 + }, + "0xecebde26aac1b0c78cccbf7ee72906d9cf9b3bf2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25000000000000000000000000000, + "varSlot": 92212997052808606263169336271237285856683883069970846017083846325872637109421, + "varOffset": 0 + } + }, + "varSlot": 0, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "Cogecoin", + "varName": "_allowances", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": { + "0x100eb54c7d9c42f9fe62c06cf0b21f13edad5815": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 46967275472805369620389373735830949754578873859360870856860175666150940790342, + "varOffset": 0 + } + }, + "varSlot": 74037056899799066668640565262483723894352586998031804602144589404854227553989, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + "varSlot": 1, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "Cogecoin", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000000, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "Cogecoin", + "varName": "_name", + "varType": "string", + "varBytes": 32, + "varValue": "Cogecoin", + "varSlot": 3, + "varOffset": 0, + "byteSize": 8, + "toReadSlot": 3 + }, + { + "contractName": "Cogecoin", + "varName": "_symbol", + "varType": "string", + "varBytes": 32, + "varValue": "COGE", + "varSlot": 4, + "varOffset": 0, + "byteSize": 4, + "toReadSlot": 4 + }, + { + "contractName": "Cogecoin", + "varName": "_decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 18, + "varSlot": 5, + "varOffset": 0 + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.inv.json new file mode 100644 index 0000000..b735194 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.inv.json @@ -0,0 +1,369 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_balances[msg.sender]) > 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "to != 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "msg.sender != 0", + "ori(_balances[to]) one of [0,519750000000000000000,247500000000000000000000,7920000000000000000000,2549250000000000000000]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000", + "ori(_lastTokenSupply) one of [100000000000000000000000000]", + "value <= ori(_balances[msg.sender])", + "value <= ori(_totalSupply)", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)", + "value <= ori(Sum(_balances[...]))", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_balances[to])", + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[to]) <= ori(_totalSupply)", + "ori(_balances[to]) < ori(_totalSupply)", + "ori(_balances[to]) != ori(_totalSupply)", + "ori(_balances[to]) <= ori(Sum(_balances[...]))", + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000", + "_lastTokenSupply one of [100000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [101004337700000000000000000]", + "_totalSupply >= value", + "_totalSupply > value", + "_totalSupply != value", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", + "_totalSupply >= _balances[to]", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply >= ori(_balances[to])", + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply <= ori(Sum(_balances[...]))", + "basePercent == ori(basePercent)", + "basePercent >= ori(basePercent)", + "basePercent <= ori(basePercent)", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)", + "value != _balances[msg.sender]", + "value <= Sum(_balances[...])", + "value < Sum(_balances[...])", + "value != Sum(_balances[...])", + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[to]", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "_balances[msg.sender] != _balances[to]", + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] <= ori(_totalSupply)", + "_balances[msg.sender] < ori(_totalSupply)", + "_balances[msg.sender] != ori(_totalSupply)", + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "_balances[to] <= Sum(_balances[...])", + "_balances[to] < Sum(_balances[...])", + "_balances[to] != Sum(_balances[...])", + "_balances[to] >= ori(_balances[to])", + "_balances[to] <= ori(_totalSupply)", + "_balances[to] < ori(_totalSupply)", + "_balances[to] != ori(_totalSupply)", + "_balances[to] <= ori(Sum(_balances[...]))", + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(_balances[to])", + "Sum(_balances[...]) > ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[to])", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ], + "falsified_preconditions": [ + "value > 0", + "ori(_balances[to]) == 0", + "value < ori(_balances[msg.sender])", + "value != ori(_balances[msg.sender])", + "value >= ori(_balances[to])", + "value > ori(_balances[to])", + "value != ori(_balances[to])", + "ori(_balances[msg.sender]) >= ori(_balances[to])", + "ori(_balances[msg.sender]) > ori(_balances[to])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "_balances[to] > 0", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "value <= _balances[msg.sender]", + "value < _balances[msg.sender]", + "value >= _balances[to]", + "value > _balances[to]", + "value != _balances[to]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "ori(_balances[msg.sender]) >= _balances[to]", + "ori(_balances[msg.sender]) > _balances[to]", + "_balances[msg.sender] >= _balances[to]", + "_balances[msg.sender] > _balances[to]", + "_balances[msg.sender] >= ori(_balances[to])", + "_balances[msg.sender] > ori(_balances[to])", + "_balances[msg.sender] != ori(_balances[to])", + "_balances[to] > ori(_balances[to])", + "_balances[to] != ori(_balances[to])", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000", + "ori(_lastTokenSupply) one of [100000000000000000000000000]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000", + "_lastTokenSupply one of [100000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [101004337700000000000000000]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply <= ori(Sum(_balances[...]))", + "basePercent == ori(basePercent)", + "basePercent >= ori(basePercent)", + "basePercent <= ori(basePercent)", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)", + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.json new file mode 100644 index 0000000..aae4c0a --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.json @@ -0,0 +1,585 @@ +{ + "variables": [ + { + "contractName": "DFV", + "varName": "_name", + "varType": "string", + "varBytes": 32, + "varValue": "DEEPFUKCINGVALUE", + "varSlot": 0, + "varOffset": 0, + "byteSize": 16, + "toReadSlot": 0 + }, + { + "contractName": "DFV", + "varName": "_symbol", + "varType": "string", + "varBytes": 32, + "varValue": "DFV", + "varSlot": 1, + "varOffset": 0, + "byteSize": 3, + "toReadSlot": 1 + }, + { + "contractName": "DFV", + "varName": "_decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 18, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "DFV", + "varName": "_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xee029ec0e45661c61dbdb83f586a317323cba10d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 98638949000000000000000000, + "varSlot": 112277216014720034817544757172685071416310753888293618869442254554230770438660, + "varOffset": 0 + }, + "0xd75246a687d77072d726d96f07d5d6cc5310714d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 8043750000000000000000, + "varSlot": 16430081287239834550117664861063816804295134634602411620502833109000002587428, + "varOffset": 0 + }, + "0xe63bb44afcf825c1aa29b242baf3bce9f8a91348": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 495000000000000000000, + "varSlot": 110134968529670973673685699046698045665660684175645101369238400152369371668414, + "varOffset": 0 + }, + "0x771dda90158eaac4ac17822a0f95584dfb6edfdf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1014750000000000000000, + "varSlot": 80969879293470167238781347954149542338132047986465039553717018681425866067619, + "varOffset": 0 + }, + "0x96a954be99612024ac205904fdbfda0081d84fe8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 409850000000000000000000, + "varSlot": 46297718442145671288655158826602360715822744811381686304586574981988681749373, + "varOffset": 0 + }, + "0xef7fe13371923ddc9951a16a5df78b0ea4af5d4e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4950000000000000000000, + "varSlot": 28172866925188684836417798253518237513783533118581985246079843610378938037753, + "varOffset": 0 + }, + "0xe062a1e44e3c0f221dc175fd0a31e05a16fd27d2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4950000000000000000000, + "varSlot": 68420298189759019556519852305662785104656618487914527478978347446200315408726, + "varOffset": 0 + }, + "0xffb4776bebf9c5eb127fcba63d8abf769434f15e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000, + "varSlot": 105363245260559245407194223580691175338801984634468957458601978156743787273704, + "varOffset": 0 + }, + "0x7464fa14025e1563cb330ce305f00f9ecc274227": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 49500000000000000000000, + "varSlot": 62478584948898806490740616493697540726300265085800618613516052830833245197670, + "varOffset": 0 + }, + "0x6bfa6d22934fe70de1e034e1bf45b5bd6654ead0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 49500000000000000000000, + "varSlot": 27314606860854688577068432179677542159661965527710638349320937038489501110434, + "varOffset": 0 + }, + "0xb5b27e5f908f8108004a00864c00c1f48e5c2f94": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000, + "varSlot": 5676080447783206511988104099819094942936758298133790804808770079135130286811, + "varOffset": 0 + }, + "0xad267304ecf94ec9c217e26d050dadc5923cc8e5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9900000000000000000000, + "varSlot": 82373752525895806284470233914491734421273563350231496415703134783110116186721, + "varOffset": 0 + }, + "0xf515765eabb5ea587933a03b4cce489d80572fe6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 49500000000000000000000, + "varSlot": 86534967272227454408479580629782730997440573054899363570001017890295892384204, + "varOffset": 0 + }, + "0xabbc135c8d6067aaaa99447f09967373cc465873": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 24750000000000000000000, + "varSlot": 90553446201544420888219157091499123889319088682002376128232890329037683118827, + "varOffset": 0 + }, + "0x80844e658c84aa2371f1190fc469f0a16aa8d2c4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 198000000000000000000000, + "varSlot": 87843378649483594731303585121917324494099155470518916118729420487919845970084, + "varOffset": 0 + }, + "0xb1c83e7d2f0c038c0bad04cd11788487d7581a3e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 544500000000000000000, + "varSlot": 29022440253023725644596764671149137850411378795789205365035884323058368377794, + "varOffset": 0 + }, + "0x50ac0f2f935a20788cf045bbc07f55dfb336e4d6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 574200000000000000000, + "varSlot": 102892162205623915852350425917960453983348034927905497494751539208094410436534, + "varOffset": 0 + }, + "0xaee077a922a7dcd5f1a90c53e2699b7d07fbe0ba": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 544500000000000000000, + "varSlot": 45276409522792375155552144187456084012301513131931784956820961449703503354095, + "varOffset": 0 + }, + "0xdce6b398183adbacaf9857f6111c6b58b9864676": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 19800000000000000000000, + "varSlot": 95942547318132877101498895513659632872143079957499178950086663687052314946779, + "varOffset": 0 + }, + "0x385d72dd441727502b01bb557fabb1e6622cb78a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1980000000000000000000, + "varSlot": 85387355721529063179178781229515517922284279984321803931358069419576151254933, + "varOffset": 0 + }, + "0x2a9752b03f763e3eb35890271b1225efe9748000": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 495000000000000000000000, + "varSlot": 83157753408817075292936175466585990626554471905790374326016543282859655570288, + "varOffset": 0 + }, + "0x22f1fd049a0aa20cc80b890093eaee7127ece16d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 74250000000000000000000, + "varSlot": 112899918391415474335209217606294874460627726823215007634224080283768671367005, + "varOffset": 0 + }, + "0x7d2daa701893cf04f080583e6edb99eae3415ad6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 24750000000000000000000, + "varSlot": 39220531228940166159033441727966763871543451080561784325913826759384227965115, + "varOffset": 0 + }, + "0x3f74845031279630fc862d0041e37d7b2dd5bf41": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 24750000000000000000000, + "varSlot": 38932138559552971989480704927089996702409107401384508063313215652518248918679, + "varOffset": 0 + }, + "0x4ba8f6871cac6bd48ed648c52dfa1ba59862d123": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 21780000000000000000000, + "varSlot": 63627745046986245067936028164489586056301462736504465129564517811763272484165, + "varOffset": 0 + }, + "0xabd3867497f0c6f93e2e0dcbf125b5ae760d9a20": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 325908000000000000000000, + "varSlot": 78761460539182062601608513022999181321896486203903661739888394076937290635670, + "varOffset": 0 + }, + "0x16edb8ac4c20b98c5c189fd333c2dd22aff6bbfd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 19800000000000000000000, + "varSlot": 14920383245879120831896321229811700022956490953731121857700267912151407854373, + "varOffset": 0 + }, + "0x58bb736c528983bb11d7d98e35624c8df696ef93": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 84150000000000000000000, + "varSlot": 1643784239974221994011697353727543648187602880667311328967091136498728582679, + "varOffset": 0 + }, + "0x99a94c6fa97b6e3a623acf1158299fb453fde8e8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 49500000000000000000000, + "varSlot": 97517141568917181631007930514335023456341479505740051184117715408130512698051, + "varOffset": 0 + }, + "0x8173bf90b6b58c5f02af43807c4af649ed2de901": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 14850000000000000000000, + "varSlot": 23738640311231892174588945923009435566451027026117244455099233989896342264619, + "varOffset": 0 + }, + "0xc320deb9f4acbc61a878c300da82b9e7d9301bab": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 29700000000000000000000, + "varSlot": 111013590740701700608449796826265716999372265966344565691306176894025058256197, + "varOffset": 0 + }, + "0x2d51a2c7f7ddfa14ed55c553016e8140fa9fc6bc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 19800000000000000000000, + "varSlot": 60307479478528436462832490724063254719910267153900578346569611122949847823647, + "varOffset": 0 + }, + "0x66bbb273fd9da8deae1ce51c746a2255ae2491ae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 90162626390625563622413162812447878134415139204613658595444100925997111413835, + "varOffset": 0 + }, + "0x0aefa1f3e96a7160ff1ca82dfcb457ee14e3da97": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 49500000000000000000000, + "varSlot": 32315603830224310157720409699540989246068007867947756513350154768866119384659, + "varOffset": 0 + }, + "0x2c1bf9e9a32b41754289b20f83aac766b37c437a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 123750000000000000000000, + "varSlot": 59269969555682847130516429728565592829349245598667614573789720272769250702181, + "varOffset": 0 + }, + "0x08d31348364a0f493688e637ee90dcaca80fdbd0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 173250000000000000000, + "varSlot": 19331411066873700772123460467254773082395166985163156137549304624789448359694, + "varOffset": 0 + }, + "0x3921fea5c5dfedb252beceb570b7c487cc59be0b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 534600000000000000000, + "varSlot": 113045937092873239951668540982440777570832223011363962995497863417226205544422, + "varOffset": 0 + }, + "0x08865185af4d742fa1a34761db2e20efff099b8f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5791500000000000000000, + "varSlot": 45301223924520488115440661856619599619569256370789123823944160156756878021197, + "varOffset": 0 + }, + "0x5d0469a8ee004811b7b1754f8b9a5fda7b5c3363": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6270000000000000000000, + "varSlot": 39994297054430302591635416029347857101562622601768006472720747441876776130113, + "varOffset": 0 + }, + "0xb5774b0137fabf88ac7cd23682d4a69522a947da": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6534000000000000000000, + "varSlot": 37603667829083747547310673701121809326465586247483165899513268519512078600130, + "varOffset": 0 + }, + "0x126db261a1ba443f288bafc0e03526257627362f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 519750000000000000000, + "varSlot": 107322970237461740219528287266884654179774134401290097784721397524215155722845, + "varOffset": 0 + }, + "0x03ab59478c69852759558d8a1712dd4467eca499": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 529650000000000000000, + "varSlot": 88521871964622209159585659603558074072423219875485807470050702647835362121032, + "varOffset": 0 + }, + "0xcc4cb20af4a6fab44d684bb1911539ec2b973eb3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2970000000000000000000, + "varSlot": 36146961262215144382174472190458781514319958163351837965686823308201647248762, + "varOffset": 0 + }, + "0xdc1650e35a8854c30f81c209ae0dc7aa65bc8fc3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2475000000000000000000, + "varSlot": 31088242753117290525696229815200417044224118909376186393151427022786736914369, + "varOffset": 0 + }, + "0x4477cc99e33d61fc4b5c9dfc92e96d3ebd3821e7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5940000000000000000000, + "varSlot": 90264022310510585475165810993034497168489814274214301449453176185825037570608, + "varOffset": 0 + }, + "0x497b1d6dc3e48a7f347382a3e342546fe1626208": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1069200000000000000000, + "varSlot": 29491084860257524372769858994959130127933511126153745775807908502881152486871, + "varOffset": 0 + }, + "0x200094e7d01bd18ba78a0eee3690fe91036798db": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 61380000000000000000, + "varSlot": 40173269349935516150187742665152211099590060715014605783327878584321250686617, + "varOffset": 0 + }, + "0x110bb5f1ae7224e92c07ad7d46f73a6ef7c658f7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1044450000000000000000, + "varSlot": 102298188553713658596805086325914973387927354704575141189269895259763872596586, + "varOffset": 0 + }, + "0x9ae7d27ca5a4ad736c8c15426aba0d38e013b7fe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 99000000000000000000000, + "varSlot": 70637068268054368925063501922772116621115800399243588491446823884144156729234, + "varOffset": 0 + } + }, + "varSlot": 3, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "DFV", + "varName": "_allowed", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": {}, + "varSlot": 4, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "DFV", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 100983046480000000000000000, + "varSlot": 5, + "varOffset": 0 + }, + { + "contractName": "DFV", + "varName": "basePercent", + "varType": "uint256", + "varBytes": 32, + "varValue": 100, + "varSlot": 6, + "varOffset": 0 + }, + { + "contractName": "DFV", + "varName": "_burnStopAmount", + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": 7, + "varOffset": 0 + }, + { + "contractName": "DFV", + "varName": "_lastTokenSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000, + "varSlot": 8, + "varOffset": 0 + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.inv.json new file mode 100644 index 0000000..171727d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.inv.json @@ -0,0 +1,393 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(Sum(_allowances[msg.sender][...])) == 0", + "ori(Sum(_allowances[msg.sender][...])) one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 9", + "ori(_decimals) one of [9]", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "spender != msg.sender", + "ori(Sum(_allowances[msg.sender][...])) <= value", + "ori(Sum(_allowances[msg.sender][...])) < value", + "ori(Sum(_allowances[msg.sender][...])) != value", + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) >= ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) <= ori(_allowances[msg.sender][spender])", + "value >= ori(_allowances[msg.sender][spender])", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ], + "postconditions": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000]", + "elem of _balances[...] is one of [100000000000000000000]", + "elem of _balances[...] is one of [1000000000000000,3169849838330000000,39000000000000,12000000000000000,0,420000000000000,123930000000000,30000000000000,330000000000000,60000000000000,438872000000000,80050000000,208080000000000,900000000000000,50000000000,112410000000000,96800000000000000000,10000000,440544000000000,1740000000000000,750000000000000,2104500000000000,135556000000000,1124100000000000,75804000000000,410495670000000,80000000000,50000000000000,210000000000000,270050010000000,119659930000000,150000000000000,36870000000000,90000000000000,1050000000000000,1035000000000000,75000000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000", + "_totalSupply one of [100000000000000000000]", + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 9", + "_decimals one of [9]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_allowances[msg.sender][...])) <= _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) <= Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] == value", + "_allowances[msg.sender][spender] >= value", + "_allowances[msg.sender][spender] <= value", + "_allowances[msg.sender][spender] >= ori(_allowances[msg.sender][spender])", + "_allowances[msg.sender][spender] > ori(_allowances[msg.sender][spender])", + "_allowances[msg.sender][spender] != ori(_allowances[msg.sender][spender])", + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "amount > 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 9", + "ori(_decimals) one of [9]", + "msg.value == 0", + "msg.value one of [0]", + "recipient != 0", + "ori(_balances[msg.sender]) > 0", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "recipient != msg.sender", + "ori(_balances[msg.sender]) != ori(_balances[recipient])", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000]", + "elem of _balances[...] is one of [100000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000", + "_totalSupply one of [100000000000000000000]", + "_balances[recipient] > 0", + "_decimals > 0", + "_decimals == 9", + "_decimals one of [9]", + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] != _balances[recipient]", + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "Sum(_balances[...]) >= ori(_balances[msg.sender])", + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])", + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_balances[recipient]) <= _balances[recipient]", + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]", + "_balances[recipient] <= ori(Sum(_balances[...]))", + "_balances[recipient] < ori(Sum(_balances[...]))", + "_balances[recipient] != ori(Sum(_balances[...]))" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0", + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "_balances[msg.sender] >= ori(_balances[recipient])", + "_balances[msg.sender] > ori(_balances[recipient])", + "_balances[msg.sender] != ori(_balances[recipient])", + "_balances[msg.sender] >= _balances[recipient]", + "_balances[msg.sender] > _balances[recipient]", + "ori(_balances[msg.sender]) >= _balances[recipient]", + "ori(_balances[msg.sender]) > _balances[recipient]", + "ori(_balances[msg.sender]) != _balances[recipient]" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferMinterRole(newMinter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferMinterRole(newMinter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9", + "ori(_decimals) one of [9]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000]", + "elem of _balances[...] is one of [100000000000000000000]", + "_decimals > 0", + "_decimals == 9", + "_decimals one of [9]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000", + "_totalSupply one of [100000000000000000000]", + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.json new file mode 100644 index 0000000..1f24e1e --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.json @@ -0,0 +1,715 @@ +{ + "variables": [ + { + "contractName": "TokenMintERC20MintableToken", + "varName": "_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xdb4d29a5c525711225afc87ee22a0199d1457bff": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 96800000000000000000, + "varSlot": 4848153241568381266683658797730632418230197832543806618594141387931688149839, + "varOffset": 0 + }, + "0x3618dffe76ff92e4c4d80b279c7a715565c485ba": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3169849838330000000, + "varSlot": 10836706714547624905443850489930674368559143022443851357632164194681537090152, + "varOffset": 0 + }, + "0x8162087132c5b65af3541c3eaa57a2c03c709fad": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000, + "varSlot": 18409552267253336345941240173225479905076434954372804427205881359590822628868, + "varOffset": 0 + }, + "0xba8a54ee3100d6bb8f370aceb3ec56752accf031": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000, + "varSlot": 88658731475816358909432096687327154408068326955207923474192991781927094172947, + "varOffset": 0 + }, + "0x4b0b6553ea73bf4896bc9ba296fb8baa2239549a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000, + "varSlot": 76040205477631269536266355021993134272600503772031870176247666887957571382278, + "varOffset": 0 + }, + "0x488cedf7dbdf6d809f307dadbdc90de18d89eb9b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 12000000000000000, + "varSlot": 107009243686098588029046706243921614875286003913085799304250851827387826361690, + "varOffset": 0 + }, + "0xae65bd364ae0edec6ed0267b7868a068a5835ff5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000, + "varSlot": 76848445597119414506185768330384562889535596253674864756520103371230518933744, + "varOffset": 0 + }, + "0x340fdfa82ec19e5235157bc1439d28af0e3f21b4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 39000000000000, + "varSlot": 42364989480259643946789144532027881677252754560977680416125638056683329875353, + "varOffset": 0 + }, + "0xd46858473e3e824d49541b4755151e5dcb5b9f21": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 16911873320900065153991750166982651497178795398634463391822771687631898520536, + "varOffset": 0 + }, + "0xa8ed69078c01a7bf72c8696292810dfed2697871": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 420000000000000, + "varSlot": 47400717079881783767849372628339463738577397258393878421053377206691222604630, + "varOffset": 0 + }, + "0xc5fd239974ec9f878c0068b47fe769495c08c6ff": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 123930000000000, + "varSlot": 6721504860990964451015962900432837557413477854304310144855345574781337350527, + "varOffset": 0 + }, + "0xca3498b13bf07106c7ae256040f66bb45c203c75": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000, + "varSlot": 24341950502247259971669320101946809451327382615854929405914381335437589269595, + "varOffset": 0 + }, + "0x0aefcf1306f4d0c004e147eaa18fdcd64b205bd6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 330000000000000, + "varSlot": 78374741887920792861132201519108910085226522530466348323002620150300408082134, + "varOffset": 0 + }, + "0xa4c465c2ec5a44289a30646edd7176a6962a3e31": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 60000000000000, + "varSlot": 111835521274009125430157871472647068251378554970417669875293104487665369121255, + "varOffset": 0 + }, + "0xa54c874a8c0b5697bd7881c3a6efa23f73c245da": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 410495670000000, + "varSlot": 50262204566383991115061319969976161231981303771910603808811323520925133179066, + "varOffset": 0 + }, + "0x8667d4d4a21ae8be0e068dc61321d2c25100de62": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 440544000000000, + "varSlot": 5306709684641680827949955579517298873136037301538738941856666877098492443721, + "varOffset": 0 + }, + "0xca198bbb1c68bb1b546506110ee1e4a18993d360": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 750000000000000, + "varSlot": 90157825310166991531646821644789836204005471104359481215670882001868698040229, + "varOffset": 0 + }, + "0x3c66a603b14fcec16b3fd6fc6de7335989f86ab3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 438872000000000, + "varSlot": 18435542868254428939646534642658206078964185732257952429486838838574899033120, + "varOffset": 0 + }, + "0x3fead7573eaba0238fa84ce87ef12233871919f5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 36870000000000, + "varSlot": 112984596195675394134549555564582276659122168573518273056693590354443184314321, + "varOffset": 0 + }, + "0x186ff5ce23dc8157297d074dee8a444d5ccef808": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2104500000000000, + "varSlot": 53722082824081727152640375572144797801118608170777950848632363941467986682389, + "varOffset": 0 + }, + "0xd743a109c2f10358fb9fa379fb2e1e2a378164e4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 270050010000000, + "varSlot": 44581509007464442062491848817728622842665833321411232902312304100603819043303, + "varOffset": 0 + }, + "0xbc81e8ebda23757320ad90ce3b68dbf8c569704b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 119659930000000, + "varSlot": 88506854732096226846048663085474701011091640723033576968673801511396829092727, + "varOffset": 0 + }, + "0x587856113d8dfe1e6275b90e7f92680e2b8dd6d5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000, + "varSlot": 98717420935908794056858220693142205807422869300261412755915385702512074697266, + "varOffset": 0 + }, + "0x0783a45ae02d7c181bf1537d435891a9dfd08d39": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 80000000000, + "varSlot": 48481715185220129154208829970401079309814319250411260494280362750407866985997, + "varOffset": 0 + }, + "0xe5d2e95aaa7b863041c3158c210b01aef35a255c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 80050000000, + "varSlot": 58768640301528592366815180999093305986178148555338850731874084875645647887139, + "varOffset": 0 + }, + "0x060789f804590b917a5b3e3efacc93906e023fc4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 80000000000, + "varSlot": 29597052516599268610948425635785208708798167024899170997391351014435187992109, + "varOffset": 0 + }, + "0x17b4306b044a926c2fda480214d27d1fa32de647": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000, + "varSlot": 67146193756817746292999280421966294417841903047591213081633929840802047323827, + "varOffset": 0 + }, + "0x298e0a74895b6b76d38266a40a2703345ef0257e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50000000000000, + "varSlot": 56398112843384313097025781030376112935288552476535434759511202581087567331117, + "varOffset": 0 + }, + "0x98b02fa84b428ea76a02709b4260e803fc91590d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 90000000000000, + "varSlot": 59932059482153263442849073833909938948812981682125740395992979998901400117613, + "varOffset": 0 + }, + "0xe940dc9343fb861d400ccddf71bcc1e391416986": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 60000000000000, + "varSlot": 2747559976935491487586546177565357964524155308280798903407020643109500111141, + "varOffset": 0 + }, + "0xc3524163711073f87cf880db6fd30d523dfd761d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 210000000000000, + "varSlot": 55705456934216810369229956555735921836508232411960576318498936671877566214453, + "varOffset": 0 + }, + "0x02ed745071918e562be726b7d5ea2f57befa9572": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 135556000000000, + "varSlot": 99026158067180738262500735165176454297936574849326572613589807177769735393954, + "varOffset": 0 + }, + "0x0128b8a7e6eb54b8777b0edbee8bc88baa2bda70": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 90000000000000, + "varSlot": 3930875701392017436407683010926823264631652786834480848854062055515821318107, + "varOffset": 0 + }, + "0x05ab31372228515f8d52aafa782f7e99a84e6ae8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 90000000000000, + "varSlot": 89833391162236264993153317962969571128620754184667513443255175049516023329352, + "varOffset": 0 + }, + "0x1872fd6df005558b19035aaeec66ceee09436308": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 208080000000000, + "varSlot": 18743370205636267290633271267534502164060742204362812354829080640427062140021, + "varOffset": 0 + }, + "0xbc0a87b3aff32eb5109bee44c5c6d5925fc203b8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1035000000000000, + "varSlot": 112838457310898694696129384125240906654539213003884212814461458024973867233023, + "varOffset": 0 + }, + "0xbe9ef46124d93dcfe50c2781010c9706b42fc69a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1740000000000000, + "varSlot": 59012444358135340034260595567175612771972635687167114734823864989036065055833, + "varOffset": 0 + }, + "0xf890b8480cee391486eaa52d71856fea09672a96": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 90000000000000, + "varSlot": 54556635425882562732828124482854324127889173470558850217437410051590910363146, + "varOffset": 0 + }, + "0x5a69ca585e4d71adb59861a3684c950b76cd3526": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000, + "varSlot": 85649079319334995642719856259904439596446984151492016391050572661522522600098, + "varOffset": 0 + }, + "0x3304c7500ef77d4dd2aab950a630aa14699abd30": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 60000000000000, + "varSlot": 10472165915231034407085988278109238793996080059348498254411121436347422640865, + "varOffset": 0 + }, + "0xc96eecb752ef3def8573a3a8bfdb226f97e95c68": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 330000000000000, + "varSlot": 32574910872226007536203077835559581626744956620467345536334618342845540601253, + "varOffset": 0 + }, + "0x34f4cd4dbedff17efed9945122e8167ac5cb51da": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1050000000000000, + "varSlot": 24271589421405614740349364100429085405576996517179270174984290640635090457383, + "varOffset": 0 + }, + "0xf79a705339d21dbe3f73e4e43e790bffec8cb127": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1124100000000000, + "varSlot": 103379226039750264814843432493641378738180452038167083574890342663504238156875, + "varOffset": 0 + }, + "0x86b962b5014813931827c6f840a43fdc2862453f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 60000000000000, + "varSlot": 32184592176592343438856521634461916958530789466950166716555755656390426926396, + "varOffset": 0 + }, + "0x34eb8d5064d55d251b4b6502b9892d9147bc9c50": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 60000000000000, + "varSlot": 83254296218726478508911630803249945931256009037442635043525478385860315300082, + "varOffset": 0 + }, + "0xe571913fb68b86ff570c43e0bf709b3c5c115029": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 90000000000000, + "varSlot": 5848050757518360114124713101526736723748641985163883056216751919660807321448, + "varOffset": 0 + }, + "0xf2e691f5d94f3829beebb2a52756c65c411eae36": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 210000000000000, + "varSlot": 79485110013710720639445954447773643567791576690779516343461525512646475187943, + "varOffset": 0 + }, + "0xb6058eed9a0116d97779b8213064e28b72e4b564": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000, + "varSlot": 16403310401594578387991159067299583010885291656577718924336934443264416877120, + "varOffset": 0 + }, + "0xdaa4cfc28b4e268f7cb7dcbb3f67395387f17df6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 112410000000000, + "varSlot": 113607835506651846958917736524563491568700343262740413640100429772822018873475, + "varOffset": 0 + }, + "0xaf704e9a2ed612b804c304fdd26bdb6088fdf64a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 75000000000000, + "varSlot": 48853259164390546443166461535568789877557062757724883844841710159068540756736, + "varOffset": 0 + }, + "0xce6f430987cd8de4dfd9d8e8f9f2a83877c22e87": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000, + "varSlot": 55035291046265985647355107535189738396347684192062325990462886949503673441320, + "varOffset": 0 + }, + "0x6ca5240b4e25b6e8930de17ee54071adde30ccd3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000, + "varSlot": 90583949447170248990079414976555463909070151206338915982336276762146005806299, + "varOffset": 0 + }, + "0x49c0702352a155fdf89f9fd1274f7fc06535f380": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 75804000000000, + "varSlot": 23857829693613132386740506830365965036402447922721913116569624955354264390270, + "varOffset": 0 + }, + "0x1e8644c62956de2f2d7ad66769064135f1b7d8f4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 330000000000000, + "varSlot": 66999437922602041779838122367122298584957312480849110136472491902712657990117, + "varOffset": 0 + }, + "0x74180d1036ad306068a48e6da9908223aa4b0b75": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 30000000000000, + "varSlot": 28737766831511800333027146973158642495339372182138233854631777997649344911367, + "varOffset": 0 + }, + "0xe38fea3a406da405ef15f0afff2caf228f4f6aa9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150000000000000, + "varSlot": 49617793380289523198218612508330257779756328495657139763792866603987648288700, + "varOffset": 0 + }, + "0x6ff8c48ff385a774902e8db834faa4ef4d5ca7fc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 900000000000000, + "varSlot": 2641583921151865941348766105174770371832437261982522631541096881222184474765, + "varOffset": 0 + } + }, + "varSlot": 0, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "TokenMintERC20MintableToken", + "varName": "_allowances", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": { + "0x3618dffe76ff92e4c4d80b279c7a715565c485ba": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xc36442b4a4522e871399cd717abdd847ab11fe88": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 7303897002815590496751963438285965474617363594491341441026510498195700073931, + "varOffset": 0 + } + }, + "varSlot": 110535306094635816784847009734805136909439620937939585652322713219106499950607, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + "varSlot": 1, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "TokenMintERC20MintableToken", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "TokenMintERC20MintableToken", + "varName": "_minters", + "varType": "Roles.Role", + "varBytes": 32, + "varValue": [ + { + "contractName": "TokenMintERC20MintableToken", + "varName": "bearer", + "varType": "mapping(address => bool)", + "varBytes": 32, + "varValue": { + "0xdb4d29a5c525711225afc87ee22a0199d1457bff": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": true, + "varSlot": 65007320280604284285064135315866359855001205611576163392631420059824477364232, + "varOffset": 0 + } + }, + "varSlot": 3, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "bool", + "varBytes": 1, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + ], + "varSlot": 3, + "varOffset": 0 + }, + { + "contractName": "TokenMintERC20MintableToken", + "varName": "_name", + "varType": "string", + "varBytes": 32, + "varValue": "Tomcat Coin", + "varSlot": 4, + "varOffset": 0, + "byteSize": 11, + "toReadSlot": 4 + }, + { + "contractName": "TokenMintERC20MintableToken", + "varName": "_symbol", + "varType": "string", + "varBytes": 32, + "varValue": "TOMC", + "varSlot": 5, + "varOffset": 0, + "byteSize": 4, + "toReadSlot": 5 + }, + { + "contractName": "TokenMintERC20MintableToken", + "varName": "_decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 9, + "varSlot": 6, + "varOffset": 0 + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.inv.json new file mode 100644 index 0000000..266662b --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.inv.json @@ -0,0 +1,249 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "tokens > 0", + "tokens == 1214154393080207565488897145207363713379238199016", + "tokens one of [1214154393080207565488897145207363713379238199016]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(allowed[msg.sender][...])) == 0", + "ori(Sum(allowed[msg.sender][...])) one of [0]", + "spender != 0", + "msg.sender != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000", + "ori(_totalSupply) one of [1000000000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 8", + "ori(decimals) one of [8]", + "ori(allowed[msg.sender][spender]) <= tokens", + "ori(allowed[msg.sender][spender]) < tokens", + "ori(allowed[msg.sender][spender]) != tokens", + "ori(allowed[msg.sender][spender]) == ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) >= ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))", + "tokens >= ori(Sum(allowed[msg.sender][...]))", + "tokens > ori(Sum(allowed[msg.sender][...]))", + "tokens != ori(Sum(allowed[msg.sender][...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000", + "_totalSupply one of [1000000000000000000]", + "elem of balances[...] is one of [1000000000000000000]", + "elem of balances[...] is one of [0,42155608000000,7827168000000,26727712000000,2364184000000,14505336000000,39866984000000,26200000000000,1991093640000000,60000000000,200000000000000,223083670000000,4856418504000000,2886756805000000,733387377300000,466343312000000,89562000000000,614258317000000,115335000000000,293365795000000,55321433000000,10100000000000,808584315377000000,67977665000000,7549993000000,3309113000000,2321935681000000,50633353000000,13500177000000,23370833000000,2100000000000,822900562000000,362332495000000,230490600000000,494315646000000,234663856000000,568993250000000,1056758701000000,955539526000000,2290247800000000,816436753000000,1500000000000000,287186755000000,35912634000000,1475154770000000,8253082000000,4196890000000,210344090000000,2581883922000000,85196714000000,408071641000000,1308507218000000,1365056466000000,907453248000000,253334180000000,1634666760000000,1650101000000000,100000000000000,3552133331000000,2147174090000000,1819394147000000,287238396000000,119538379000000,42432787000000,1905260435000000,1451707355000000,23514979000000,25595051000000,89326155000000,117578331000000,7103883000000,1900128000000,18888800000000,243285700000000,1916403000000,3298409047000000,4212424891000000,9126009837000000,1753730950000000,1498000000000000,814045727000000,1896835000000,1105069134000000,599482190000000,1740028000000,301265220000000,8596628000000,32234460000000,315772404000000,268733620000000,719812020000000,36880755700000000,310833676000000,250440116000000,2160100000000,2609636221000000,3002439449000000,3523832342000000,1600000000000000,2326235055000000,506668360000000,1933196460000000,274876741000000,10000000000,1231918352000000,42995981000000,1876942246000000,1015929560000000,2226634250000000,2454909000000,1967529221000000,252862285000000,5670605000000,355760661000000,3118813000000,562571485000000,71098725000000,100000000000,150144416000000,20100000000000,186156392000000,243145064000000,3077644954000000,1179432137000000,1375765499000000,250245012000000,2500000000000,1379680451000000,1501362421000000,34207198000000,7751278000000,809717142000000,2453660118000000,216910870000000,36701942000000,9379382000000,2443859382000000,3000000000000,511371390000000,2495907929000000,1263531812000000,1691474109000000,1169134166000000,2000000000000,5000000000,571697800000000,3563600000000,47000000000000,2741947060000000,25185204000000,38577000000,1899900000000,1200000000000,1881079000000,40680695000000,59926463000000,218139263000000,2995575000000,37517527000000,4300000000000,856864703000000,5520682479000000,1807288095000000,1857587524000000,9600000000000,263852200000000,4148000000000000,172345459000000,1669293427000000,2344197414700000,3212593467000000,532420717000000,341006648000000,394034232000000,2909613777000000,3520287800000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000", + "Sum(balances[...]) one of [1000000000000000000]", + "elem of allowed[msg.sender][...] is one of [1214154393080207565488897145207363713379238199016]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 1214154393080207565488897145207363713379238199016", + "Sum(allowed[msg.sender][...]) one of [1214154393080207565488897145207363713379238199016]", + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 1214154393080207565488897145207363713379238199016", + "allowed[msg.sender][spender] one of [1214154393080207565488897145207363713379238199016]", + "decimals > 0", + "decimals == 8", + "decimals one of [8]", + "ori(allowed[msg.sender][spender]) <= Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) <= allowed[msg.sender][spender]", + "ori(allowed[msg.sender][spender]) < allowed[msg.sender][spender]", + "ori(allowed[msg.sender][spender]) != allowed[msg.sender][spender]", + "tokens == Sum(allowed[msg.sender][...])", + "tokens >= Sum(allowed[msg.sender][...])", + "tokens <= Sum(allowed[msg.sender][...])", + "tokens == allowed[msg.sender][spender]", + "tokens >= allowed[msg.sender][spender]", + "tokens <= allowed[msg.sender][spender]", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))", + "Sum(allowed[msg.sender][...]) == allowed[msg.sender][spender]", + "Sum(allowed[msg.sender][...]) >= allowed[msg.sender][spender]", + "Sum(allowed[msg.sender][...]) <= allowed[msg.sender][spender]", + "Sum(allowed[msg.sender][...]) >= ori(Sum(allowed[msg.sender][...]))", + "Sum(allowed[msg.sender][...]) > ori(Sum(allowed[msg.sender][...]))", + "Sum(allowed[msg.sender][...]) != ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))", + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(balances[msg.sender]) > 0", + "msg.sender != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000", + "ori(_totalSupply) one of [1000000000000000000]", + "to != 0", + "ori(decimals) > 0", + "ori(decimals) == 8", + "ori(decimals) one of [8]", + "tokens <= ori(Sum(balances[...]))", + "tokens <= ori(balances[msg.sender])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000", + "_totalSupply one of [1000000000000000000]", + "elem of balances[...] is one of [1000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000", + "Sum(balances[...]) one of [1000000000000000000]", + "decimals > 0", + "decimals == 8", + "decimals one of [8]", + "tokens <= Sum(balances[...])", + "tokens <= balances[to]", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))", + "Sum(balances[...]) >= balances[to]", + "Sum(balances[...]) >= ori(balances[msg.sender])", + "Sum(balances[...]) >= ori(balances[to])", + "Sum(balances[...]) > ori(balances[to])", + "Sum(balances[...]) != ori(balances[to])", + "Sum(balances[...]) >= balances[msg.sender]", + "Sum(balances[...]) > balances[msg.sender]", + "Sum(balances[...]) != balances[msg.sender]", + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "balances[to] >= ori(balances[to])", + "ori(balances[msg.sender]) >= balances[msg.sender]", + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "falsified_preconditions": [ + "tokens > 0", + "tokens >= ori(balances[to])", + "tokens > ori(balances[to])", + "tokens != ori(balances[to])", + "ori(balances[msg.sender]) >= ori(balances[to])", + "ori(balances[msg.sender]) > ori(balances[to])", + "ori(balances[msg.sender]) != ori(balances[to])" + ], + "falsified_postconditions": [ + "balances[to] > 0", + "tokens != balances[msg.sender]", + "balances[to] > ori(balances[to])", + "balances[to] != ori(balances[to])", + "balances[to] != balances[msg.sender]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "ori(balances[to]) + tokens == balances[to]", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 8", + "ori(decimals) one of [8]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000", + "ori(_totalSupply) one of [1000000000000000000]" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000", + "_totalSupply one of [1000000000000000000]", + "elem of balances[...] is one of [1000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000", + "Sum(balances[...]) one of [1000000000000000000]", + "decimals > 0", + "decimals == 8", + "decimals one of [8]", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.json new file mode 100644 index 0000000..5a27e7e --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.json @@ -0,0 +1,3107 @@ +{ + "variables": [ + { + "contractName": "YCCToken", + "varName": "name", + "varType": "string", + "varBytes": 32, + "varValue": "Yuan Chain New", + "varSlot": 0, + "varOffset": 0, + "byteSize": 14, + "toReadSlot": 0 + }, + { + "contractName": "YCCToken", + "varName": "symbol", + "varType": "string", + "varBytes": 32, + "varValue": "YCC", + "varSlot": 1, + "varOffset": 0, + "byteSize": 3, + "toReadSlot": 1 + }, + { + "contractName": "YCCToken", + "varName": "decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 8, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "YCCToken", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000, + "varSlot": 3, + "varOffset": 0 + }, + { + "contractName": "YCCToken", + "varName": "balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x83d1704026d5ac0cc58f18d47119ade00b96b29b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 90933479388743741833108663648437708301853597445380940974786529862116047428895, + "varOffset": 0 + }, + "0xaa9e99ec700a25514605e89dd7d271c07e2f8272": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 13566983995214637841573720984460272281956666936936984271192116992461462340132, + "varOffset": 0 + }, + "0x0a5057d8c4f2504ccf2db97a0f6463ef0359130a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 100979720517537367821185557220413921030742071312976469219003126087123259101015, + "varOffset": 0 + }, + "0xcafbb72acd942f188caff07e46b3a839dd5e5100": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 781875949322261977, + "varSlot": 47632481382422404310953994368487718516776858864196846034398095655080282324472, + "varOffset": 0 + }, + "0x71f7da17f5c9409eaef46704d148f657c433bdd7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 67977665000000, + "varSlot": 96453281634147883229970182999372221300575674740328547266083798345276275156362, + "varOffset": 0 + }, + "0xe874310b20e54765699152fc7209baabd697ffb7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25595051000000, + "varSlot": 28427688534121017145692980039955892737542153916395622401534093291600141623359, + "varOffset": 0 + }, + "0xe1b22c0d32c122bdda232af8ce9bd7acda177ef4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 34207198000000, + "varSlot": 32819296441310701971474881218806415629172959376659117529139836076323606913773, + "varOffset": 0 + }, + "0xd06060010bb1f67e40c0c3708e54fcbb666be2c8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 68117236362186300354227582278128724755844592479912495978580860818021461162927, + "varOffset": 0 + }, + "0xde28020026b9eea3383206d42ea91493344af273": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1740028000000, + "varSlot": 68646106315240107881641580787331125797520134232125530313524476359115712718711, + "varOffset": 0 + }, + "0x92cc523615c1a34b7c205ae604bae039557bdec0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 89326155000000, + "varSlot": 11153464383689662730349776852563027559772653793472408738272742771619566854058, + "varOffset": 0 + }, + "0x35a2adb6f3d16f384136e6c8339cb80d2dc864c0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 117578331000000, + "varSlot": 94636730500793233364967780437585275599274198403686456082447033615828905453397, + "varOffset": 0 + }, + "0x738ca9ea356e3ca17d2b27ee469d63e88010fff3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 42155608000000, + "varSlot": 80486009208509144587760203996406331687427159781458711959235874242813656685799, + "varOffset": 0 + }, + "0x2f9cfa6851851c5d6885035a5aed396cb357c383": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2995575000000, + "varSlot": 11911310012136854377087445962516492898444513761784709830392412886429520874845, + "varOffset": 0 + }, + "0x6e0d3aa09bb77acb0b8dd181b9a9408cf6eeb144": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7827168000000, + "varSlot": 51545506587991552327398687572309325438699772627884877481775977481882370182979, + "varOffset": 0 + }, + "0xcf3432f1aa3d31727f59e925a3d86ac16bd06282": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2364184000000, + "varSlot": 80382860205455077369284596327591896146349341550138618067810882603964530109484, + "varOffset": 0 + }, + "0x4a6d713586936b55955a2d84ae0f66e85bc0688b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 14505336000000, + "varSlot": 48076684459208058529164082486973298703021015881668944277718641350611217211563, + "varOffset": 0 + }, + "0x2ae7edd780dcc28576848c05c2c647202001fc00": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7103883000000, + "varSlot": 29940984824539580870667591071379588208282695837121288368707512004940782565483, + "varOffset": 0 + }, + "0x8ffc8e2de27d0a92077384d6f3f83ddab9a90c52": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7751278000000, + "varSlot": 18862364636497510996451275044184649118316015268066650320084248575084046573708, + "varOffset": 0 + }, + "0x31b95dbe80a19387449cbcfab574e1cfe35ae276": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7549993000000, + "varSlot": 44734811665930679666806003185000007545380874658428767174930859071419303507018, + "varOffset": 0 + }, + "0x82e2fd06eecee33b350fe8aabb1744b2f5293f1f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 26727712000000, + "varSlot": 93958532018018451608563222804606333765498594359330649700077906999590663855131, + "varOffset": 0 + }, + "0xbc96bbb113609018ab474b067a3c15a0843ca471": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 39866984000000, + "varSlot": 44818739820420851619791410134008664781203234437500648627321528832009445690660, + "varOffset": 0 + }, + "0xfc3028b994affcd6a5f3da7c69305a0190d7a435": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3118813000000, + "varSlot": 91875843492949760284282148307979663201625157335816220513761469978906907084738, + "varOffset": 0 + }, + "0xbb0323d7ac3a03da5b85983a8176e6079d59c09e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3309113000000, + "varSlot": 48126914010131375334037788861948695023817228661465972279213364942335369495311, + "varOffset": 0 + }, + "0xf0b18e9b9c247823d18a7456c1ecfcb74f5e9aa1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 84623768308387273461136980796954547441310853529671945016078632050764488683552, + "varOffset": 0 + }, + "0x48e83d61437163885d56ddba3dcfe07765c85f8a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 26200000000000, + "varSlot": 71255718119508975302989555138551671630225291078137649769052988775243902778944, + "varOffset": 0 + }, + "0x208e3e95011bc71246fc489a49a4281ddf4ff90d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 32234460000000, + "varSlot": 53989814013646423638959492718638280673435130167264824748540598775963334181564, + "varOffset": 0 + }, + "0xe060bc5345f3d370f22f5ff666ca933a896c0d47": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 8253082000000, + "varSlot": 30135387017173694322656797682003401344132842295165287513202827988118155371091, + "varOffset": 0 + }, + "0xcb9b6761d049a6b4cae151921b12012130d21aef": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 13500177000000, + "varSlot": 79310262768244975578005177039901073712701160441258400172109564717619455879330, + "varOffset": 0 + }, + "0x0105cb2608c8fc5258bad1c390429da5f892abb9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 85196714000000, + "varSlot": 41968301803604940077203317760622826900522580481459496518347895154652568305391, + "varOffset": 0 + }, + "0x319fd25b54c5f23614ef65e2c189b56180fcfa9e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 42432787000000, + "varSlot": 40265908540615684012304160076267604559019830811891245649783425398723402909550, + "varOffset": 0 + }, + "0x56158aff0e8a3333f7099c07ab25a43ccd2d3f8a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4196890000000, + "varSlot": 115605964663187870797934716657009611177687804523719413256612153230694521672984, + "varOffset": 0 + }, + "0x45b4622efdab471826ae9031a6306e479e3ced52": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1900128000000, + "varSlot": 41028178885635496949588323993371119231708008308539422447824668007068314829741, + "varOffset": 0 + }, + "0x82aa0a2ea2d91469996dc03572ea0da952210b75": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2454909000000, + "varSlot": 52773824549060243015353558212898533266472207204398387110443388389054990181698, + "varOffset": 0 + }, + "0xd9b4159cb6032cbbe20b7adc995d8b1154b9c086": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1881079000000, + "varSlot": 29807239074881234534150676585111802642454606077756880895208011808105258574952, + "varOffset": 0 + }, + "0x9c1134d6a0914a1bc5a29c5709cccce4befcab12": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1896835000000, + "varSlot": 105678861097715386807835636264215643984644335953870056573344279549586511908580, + "varOffset": 0 + }, + "0xb539362017ce49092dc790f552cbe06d3684066f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1916403000000, + "varSlot": 88781282556835383621353175370675283702904450834969520330349912383579677161043, + "varOffset": 0 + }, + "0xe2767323d0d143ee1b666e44d211a7858e8b3b35": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 8596628000000, + "varSlot": 64572842199717859271601580485773952475954066018754158489619023749665955610510, + "varOffset": 0 + }, + "0x8d3efb2216968852a648aafead618ad801feff10": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 59926463000000, + "varSlot": 62398829338704538460973012930870489381463837382814516477088884393665610928878, + "varOffset": 0 + }, + "0x8a2535e617aa03b438247935ff7100032c486e9d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 50633353000000, + "varSlot": 15894725374007114805494046606354510435602215640998339765497411302608316046202, + "varOffset": 0 + }, + "0x3f979e072260fb256abe53ce15e0955bde763631": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 71098725000000, + "varSlot": 35983034829106106457359246979680851846278146970064326436770419692375371373244, + "varOffset": 0 + }, + "0x590f4a08fef0262e6de100978e486d5775b5982e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 172345459000000, + "varSlot": 27024277804062310060728259649311170448516478356675962079204510067133255748875, + "varOffset": 0 + }, + "0x87ac4952cde5380165475494edb6793f452e2fbe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 23514979000000, + "varSlot": 4534612850114849383762537913156898839245854896184071336911828456941319785973, + "varOffset": 0 + }, + "0x29f4fe639a1ebd12a99a736b7e6829f75d6f8566": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1475154770000000, + "varSlot": 85259780381072798418838226570070910113734735499396189780783996508135865123221, + "varOffset": 0 + }, + "0x2d450dd39691ed2a8ea933616e0cd3d36dd3da9c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 252862285000000, + "varSlot": 26024868583259726599033569203044130512238776802277436514315070616648302947737, + "varOffset": 0 + }, + "0x0059138210da42afc056be1255a77a0a5d5e4484": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 562571485000000, + "varSlot": 106362947910548399268901810346410619068794835833734382155551876292130137650204, + "varOffset": 0 + }, + "0x1cdf4ab34ed03737a9bfa1478a1d7d24b92ac4fe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 23370833000000, + "varSlot": 55116325398759020145607080761109741104285319148353245998477795883272202976347, + "varOffset": 0 + }, + "0x239442a57b99e9d2883b7d7fb7d0eaaaa123ea29": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 150144416000000, + "varSlot": 68516545758015614704746495791070862866281430859022957554511102475959111756695, + "varOffset": 0 + }, + "0x480a965c0920ae922d992fc2ff8c8d0dd61f55c7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 36701942000000, + "varSlot": 95308586355065651702306636567205312434477041173680876240085487384754464190488, + "varOffset": 0 + }, + "0xc033f5f111dd66558de29ba95c0376dbc46b1e63": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115335000000000, + "varSlot": 28450278144804407380989027110469001689366219259732481763339995797671764890587, + "varOffset": 0 + }, + "0x766db4209dff2799dbeb8853b1ee23cdf5cb21d2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 55321433000000, + "varSlot": 68710081095167934249921226662781620024002018053443212780774581196819383030172, + "varOffset": 0 + }, + "0x84e765bfe45e98a16f7e0e540a2cfef11e8c052e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5670605000000, + "varSlot": 57981134052457425511089052270110571473086204792961802588570474950997144454422, + "varOffset": 0 + }, + "0x1dbef7415f44a44acaade164a31cd096d090713f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 301265220000000, + "varSlot": 5636820724438936787047634957641034033681815521685085740654980734526151117718, + "varOffset": 0 + }, + "0x0d87679989f231a546d822b0a6af30ffeb6de1f4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000, + "varSlot": 18152100269842745006710748452513951908549043660523880288329772299052470667807, + "varOffset": 0 + }, + "0xfc3824981337e0f59e8fba73add647048f28892d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 809717142000000, + "varSlot": 30035408318378594216101575387657613757156260992003538422123478699921388707238, + "varOffset": 0 + }, + "0xfebde89083c437b0511f8ec5f43adc9d6f80af07": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 78740243778190982629068061299335686801079787251383752372791747977260213988520, + "varOffset": 0 + }, + "0xedf67700ba003933e898ce939a4f859394c14e4b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000, + "varSlot": 23046917402262898859776004740276011832071305126865803648639999315262266074338, + "varOffset": 0 + }, + "0x852c572a877b357c5231597c5a3031d9a3f8425a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 89617402259037865270929337864835913888657914339364495409461513904188298217403, + "varOffset": 0 + }, + "0x0b7cb7fa4b503b6bf65a440cdbaeb27f267ae386": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 218139263000000, + "varSlot": 44178057981112259901260274694895031095756934226263941518350186139923485184296, + "varOffset": 0 + }, + "0xadd2ad4c3d8406fcefbedd1372379f50b7535cab": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 287186755000000, + "varSlot": 70465121342713437791587095404380885715696614423297484526143338039993150290031, + "varOffset": 0 + }, + "0x827f1e82f6bcf45589bba85ed00352486bca1a93": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1088284502113658, + "varSlot": 86040271091753027153739304554266373455754516119892762477329182243216786238431, + "varOffset": 0 + }, + "0x4a1aa4794277d049ce093e57113ccf2f54832020": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1967529221000000, + "varSlot": 31897690490204936706829683279655525415451757775647882116773745144904350126777, + "varOffset": 0 + }, + "0x4c3d3fe73a23911b63ea2c81c2a716d1e63ceb58": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10100000000000, + "varSlot": 88138576918582188431014582982624379933084812723878941805535999016722033096697, + "varOffset": 0 + }, + "0xb537c4fd0d1bb76c4d0f12f3baa91d67005804d8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200000000000000, + "varSlot": 95861257168414269562257738325996487380886259891049791931255942984363972096770, + "varOffset": 0 + }, + "0xe577788d84f0b8896536e1d98af60f840019d36e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 37517527000000, + "varSlot": 86160130264163797052154591259544506689174566322363125425390632298972295007667, + "varOffset": 0 + }, + "0x90376eed33db82c0bcbf5065ad8ec1a8bb0e0eb6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2453660118000000, + "varSlot": 75409803396654292236237152464399460018701436792151247377392025944334034773962, + "varOffset": 0 + }, + "0x39a315670402c8b40ddb184d13fe4fb30c389018": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9379382000000, + "varSlot": 49191851898687849330167751330894373718920987017048495825479095508804742621518, + "varOffset": 0 + }, + "0x93493c3f6eb7e11259216e2e4989ff89bf2211a9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 511371390000000, + "varSlot": 50275559785724486015424271917242519379233483232527682824103334043294403746540, + "varOffset": 0 + }, + "0x9627478b9abcd2aac0dbf23360c61ba30e39196f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 70765567359404626402567891662143163811680158468505735604894479159080699974150, + "varOffset": 0 + }, + "0x1b2d9e9931cf303e1cf245a06555f12b4764f61e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 119538379000000, + "varSlot": 55966955802565853637672226298721791436960441780566091058503927725927292283934, + "varOffset": 0 + }, + "0x85c110ab9f6677c9b4a9b1c03d3f8f6b0787a823": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1231918352000000, + "varSlot": 89180185089788569900673815647444471706273187140289477707545613849550428446647, + "varOffset": 0 + }, + "0xe09e08ddeff1e86db2d2dfb471ff552cdbc595a1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 216910870000000, + "varSlot": 112223685653742435622317713506892240800733793105718944764403947252076094335002, + "varOffset": 0 + }, + "0xa96203bbc87e421ad0f4c08807d7721d6e20a2f9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 35912634000000, + "varSlot": 62928552412534196278907205114377461649054150164736697028714171913273716011985, + "varOffset": 0 + }, + "0xf6dbea5210ea8b8634246b7741c32571828b3e11": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2443859382000000, + "varSlot": 82021538274927527212568434295721702498444684849305215653585689819760078209074, + "varOffset": 0 + }, + "0x7026129b1a0779a20f1ffa607dfdfee5f989e706": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 114907147022872748023906997005946387929295848889501155034578818317194347397358, + "varOffset": 0 + }, + "0xfebb08700251c050d397e5495d8ae6887be7bdc3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2321935681000000, + "varSlot": 115082575889889271155581221070081850285600429123740740037327875323072741516570, + "varOffset": 0 + }, + "0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1105069134000000, + "varSlot": 36359148033157982975709640705130845063820315700019495870496071878138813135276, + "varOffset": 0 + }, + "0x8f58ae8aed8673055d2260cbdc9dec6f17481838": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 355760661000000, + "varSlot": 66062925413744022381028069747268135847767069890822367706013609728372138752697, + "varOffset": 0 + }, + "0xb4460e7acc5eb7ada4c919022e06ca67c6790554": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 40680695000000, + "varSlot": 28668637550918803158885207389926575522961450367353775981197115825932757467791, + "varOffset": 0 + }, + "0x0a84314cfa8baa409b24da2de5e74153b1d7a54a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2581883922000000, + "varSlot": 34307101685187555291052436328657620811810371931029053688192396108996798553125, + "varOffset": 0 + }, + "0x22b398ff3f98435c19bacd14340c85c3bc588f07": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3000000000000, + "varSlot": 89787852250960595070943651676965153867581318721885687462106543819653225377817, + "varOffset": 0 + }, + "0xe88e9dd3eabb667141632e3fef7ae819f4edae66": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 60000000000, + "varSlot": 23237131158953458161138893091257565018279218205443616197304413808953718802528, + "varOffset": 0 + }, + "0x252008ab3d4f26823c9a3cd1790c7571cae1d658": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 60000000000, + "varSlot": 93082748832013699216793263484863179890961260367946354768128650376163331379388, + "varOffset": 0 + }, + "0x18f9d463279f77326dd01f11de26296c63042a78": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 6695098957850084721490226268039425842694336788307803879586633049481171578161, + "varOffset": 0 + }, + "0x17bf3271ad6c7ae43b732f85988a8322233dd3d9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 186156392000000, + "varSlot": 66971301316291979620778568604924518384732154556565295407098547637215049811190, + "varOffset": 0 + }, + "0x9f3f275a7db702295dbf5dc8a810a17cba2ee442": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 210344090000000, + "varSlot": 13370706619981762602058987015872419058096840762311232958075571941979515014893, + "varOffset": 0 + }, + "0x78c1bd79bc6f8312707274423188a915c153315f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 111127271467738171070379407000589365995227498496398467566426217727497271867304, + "varOffset": 0 + }, + "0x7c6e89b0ba3b82f56d97fa31bc3a08fea67690b2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1451707355000000, + "varSlot": 3339512773757123183640111008175211633001107759690767071447687216121536275897, + "varOffset": 0 + }, + "0x87f7751a03cb7db67579f543b9aa47b434177a49": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1905260435000000, + "varSlot": 58890921617698118483495754068946016467208258869958121423795039583705299110125, + "varOffset": 0 + }, + "0xdb624554b3b5207b99b47d053d83bb17681c03d3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1991093640000000, + "varSlot": 100909581657828252414305495402003838945363203244727121183295174750930554323750, + "varOffset": 0 + }, + "0xada4dd692f931ef58d0dcf6d96d178cbbe4522ab": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4212424891000000, + "varSlot": 30949744410796467993455576508806234737836025221247881601696078843849124170539, + "varOffset": 0 + }, + "0x4f6cf686edfaf53724dab55840067640ddc95167": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 506668360000000, + "varSlot": 45560513728507346401696105268986444723479171769729571608457609696521988678610, + "varOffset": 0 + }, + "0xd4ccdc63fb196c5fe1a196821874a0b47692be57": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 45395224630236018393375563846913597771876778949408873575792982338068579783973, + "varOffset": 0 + }, + "0x5dd4241a684abb4f24cb5be0d30ebafe5ca65922": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 234663856000000, + "varSlot": 72179104205923510795770821479384453838886000194408564081854357123425796612210, + "varOffset": 0 + }, + "0x537b213e04e5b030165d34f2525df215f32572ae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4300000000000, + "varSlot": 91575248990200663635910455541938452849371294925891208613441433003935385719162, + "varOffset": 0 + }, + "0x48eae3b06ae03c43cf470d4b1a5ea56793790d19": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 315772404000000, + "varSlot": 59032876062800364085321713695538106897143265454265609019081419817297378307691, + "varOffset": 0 + }, + "0xfb9ec9e23be9b84883df961a99f0e4845ae790df": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 408071641000000, + "varSlot": 85601248694266286980124653927478352211024880049795441690907552497420977622956, + "varOffset": 0 + }, + "0x24400e27824bc94a59d28baf7f9b47867ab6a249": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 494315646000000, + "varSlot": 27200651324330941416029285854074022257554907954808053989402528187014126999874, + "varOffset": 0 + }, + "0x86bdf85ec76d48509019c2e83b2301edca710424": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2909613777000000, + "varSlot": 115664700573539353670928601386551106412860148034485761259119074311543089428917, + "varOffset": 0 + }, + "0x650d60af39eea7647cbde4e637334172f5fe0605": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 268733620000000, + "varSlot": 54222954301943107644352805776505292867597483444910423178561578870060699984243, + "varOffset": 0 + }, + "0x09df06bdf26ac6c9452b939e5dec87b73b0167ed": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2886756805000000, + "varSlot": 44331475314521722309098544312451680292462478267104113633851794532920135926895, + "varOffset": 0 + }, + "0x233f8ad792f62e6c30e22ec234e7135d34fba196": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 856864703000000, + "varSlot": 36459430121122910963358256441382235861747700658866083209619489825604481866640, + "varOffset": 0 + }, + "0x88d8c6dc07c359ca84744f2b868aab7909301db1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 18348622870775535618608615425233342681767327418923271323754992897092329825632, + "varOffset": 0 + }, + "0xa5b9d35a1ee3a9d0499399db48f24a5fcf525763": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2495907929000000, + "varSlot": 90810365056753941505264687414832070068978789194906583821875193822223333721766, + "varOffset": 0 + }, + "0x579c8615b41e901822be43a1f06b14e332bad678": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3212593467000000, + "varSlot": 42574328308875528890848871119417151858740814632096622630834546774342475553285, + "varOffset": 0 + }, + "0xdd1e4f0e212773237bc263c1fd183acfd6715eaa": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5520682479000000, + "varSlot": 49484341869534666377892276952676762853451742032772360790060391827364295439706, + "varOffset": 0 + }, + "0xd56810fa813141d74b9bd1a9b56b2fba56385fec": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 111312143957732961739650690130027677269969176097122883789909617666955394595675, + "varOffset": 0 + }, + "0x51d435f52cc9e59313c1f571f974d557f885f0e4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 96039910093963506154877700778954584934630857257235339857899446389605183627552, + "varOffset": 0 + }, + "0xb7db3dded6de2865587928593a58fe66be73104f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 56526890177022921953529070755441026946531468309829980815685028158218658252412, + "varOffset": 0 + }, + "0xa22893bfcec62ec05369999eb1d06315438a4e1d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 614258317000000, + "varSlot": 53887973790288851606767362417197872435990286912911895585671902675292241437741, + "varOffset": 0 + }, + "0xfa79c443d735b5a8585b882445f23f35d9a2f991": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 955539526000000, + "varSlot": 46546906017439552758588989779454694032948357862903778724290508264258648463211, + "varOffset": 0 + }, + "0x090f91dbe58a787dbe00f2ab8d712228fe25d7d1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 56085793690198864833900619738909173697623043227784316751517751391815575960276, + "varOffset": 0 + }, + "0x29c34494d1fa02fc32057d023f15985e1a44b6be": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 719812020000000, + "varSlot": 31479858628718863146474994219921375616627524946885107158506913606262488009648, + "varOffset": 0 + }, + "0x58ce1f710947596908c5616913d608aa4b847feb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 46764671897418698913089498473309820346472709730034252978529776343681078947831, + "varOffset": 0 + }, + "0xf9eb36d32a135dd60ffd007b9bbb127e72df096d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1379680451000000, + "varSlot": 8369698178271324012128508888014454323028728258841692901220498733217211442947, + "varOffset": 0 + }, + "0xa2f9d99416b300ab56a99c317d61789e44bcf589": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 2818800910279306526851232465471664285209615307169048696949423946973111134358, + "varOffset": 0 + }, + "0x672bdeca1c0f46aadc8323ac67f8e98293effd42": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 362332495000000, + "varSlot": 589690334693919568585198864989270501548988066593471431066054029974258408981, + "varOffset": 0 + }, + "0x6e3d9444238063986152935740ce98a35e9aeaf7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1308507218000000, + "varSlot": 22282653291171425807547408803003860240258140401081200255243513986797578588213, + "varOffset": 0 + }, + "0x819e6ac8812816d607e8cecc52c1a1dc08efc641": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2326235055000000, + "varSlot": 57382228032645137635847076602126692572736449434074092146191196796777324181046, + "varOffset": 0 + }, + "0x01ede428ace8d307a3ea6ee86a504eac9990e6af": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20100000000000, + "varSlot": 70170017660374474325522898600708817603728285535462439701037246364654957441077, + "varOffset": 0 + }, + "0x67facf6394c85581fdd4152db3a104dcd3b6ac48": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2609636221000000, + "varSlot": 69080110091388290923507760445991000921708067923265431915394506998081718613236, + "varOffset": 0 + }, + "0xccc74a0cac15a6c16eac82f2873d35f1a36c86c9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3298409047000000, + "varSlot": 36487472569500659537036414597383283143562694406681771960728616403164382977872, + "varOffset": 0 + }, + "0x7752680b9dbdb857369d60137cb4f37894ad724c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1169134166000000, + "varSlot": 19863648895883677643392437970989371525090784055261201727152223467881020479678, + "varOffset": 0 + }, + "0x5d76439b0cf8f696e94323ee6d7b8f3751062eb4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 36880755700000000, + "varSlot": 24058408046411897804605967425070291052849204459404012688846470456736589001903, + "varOffset": 0 + }, + "0xe2d380304d358f3c278aaa36a567955137855746": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 341006648000000, + "varSlot": 53509554246170970118475568714314624565667132609649984598399024447911563061662, + "varOffset": 0 + }, + "0xa901ea3ea9fe9a55d592d28aa847a37d03b68d26": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 66895573957371800465932504806238007041627905763840836232739594601608960542961, + "varOffset": 0 + }, + "0x37ca514ec22bf475ce39e1f6d905cfecf5fec1af": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 310833676000000, + "varSlot": 11140086782779752130535045086162228895655894860564758134438405543066257821224, + "varOffset": 0 + }, + "0x1606ee7c09260c1f25588a866fdb1c5cb4ee118b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 87025936052309244874434940376097002373023941947215284676919881567587239798376, + "varOffset": 0 + }, + "0x9a21f758fc0ea0a918d062cbd3117fb16367a905": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1365056466000000, + "varSlot": 4181774245751968201721547801526302833889540936618636738821240834749205903226, + "varOffset": 0 + }, + "0x813bb1d6a741cdfdcaff669ba3598ffcc0a5e2df": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 243145064000000, + "varSlot": 23030342026480529746294262705485132483451261826022272703078337433581687048447, + "varOffset": 0 + }, + "0xf5886553724237521d7db3ff2403776da9b00fa6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 82011636430470325210603089026748878410614375783369164678216250057226467335603, + "varOffset": 0 + }, + "0x0b729b1253aa195d59ba25e6d49e479189642883": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000, + "varSlot": 75657569725479455450529610711728250263671325224692996526698520375977251641987, + "varOffset": 0 + }, + "0x93ca7ab87a8ded9ee39a7abbac4935dfcd002f1a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 274876741000000, + "varSlot": 46294834094118206857849922844751771295582499793804983418990399220456384017090, + "varOffset": 0 + }, + "0x5e2cf413934e3a81389ef2848104cf12ee4a1881": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 394034232000000, + "varSlot": 110663005724448676697745206621828887160897752006835638441923700881273790084977, + "varOffset": 0 + }, + "0xaf6ab642f9371dd02abcb60978acb4df72854cbc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 250440116000000, + "varSlot": 94193163112212068730753755879670433516282265050191816810278784858823773320924, + "varOffset": 0 + }, + "0x831bd1c2c6ca39474246d1cb70e62c1fdeb29e59": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 466343312000000, + "varSlot": 64323321571951292004009460236402689797060306498135891445839950567346609947323, + "varOffset": 0 + }, + "0xa3a3e25f11efabae829bf04451f8c303c00f5ca7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2741947060000000, + "varSlot": 30397633043401252374300134961669316663484036194724220833266143377797590325812, + "varOffset": 0 + }, + "0xebe2abb2d620bbb940c92567fbb17d499dd2ced4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3552133331000000, + "varSlot": 110288461031430081955935458817655387104845347851161937771006592487353849111626, + "varOffset": 0 + }, + "0x67a0a45b5960a58198a1ccad92cbecce94ebb252": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 293365795000000, + "varSlot": 30225696821251010584674702686544841803620239260748834722749596930896232162951, + "varOffset": 0 + }, + "0xccee25a4c13c67821f1887e75deba89380bd3ac5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 287238396000000, + "varSlot": 88060959904812130172846871997260432068860087033909669456833684743391823529304, + "varOffset": 0 + }, + "0x84d59dc35d1fcea5b6174534eac583e2cf882c06": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 80307449120183140316356017972620495059505159521569247007588236153777541468566, + "varOffset": 0 + }, + "0xea10ffce4b12c75a3720354fab94d3f633a7d2b4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1669293427000000, + "varSlot": 43017475065266088212658653562579270150274423771898015791936743072175040398776, + "varOffset": 0 + }, + "0x8daf6a480f4bdcd8df9c722a19c938c33820657e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 38577000000, + "varSlot": 6202722437680617603306385220738962441774679899508215922402151343391942574740, + "varOffset": 0 + }, + "0x3f80119f888e50d83cfa0ee556bd554e149e08bd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 532420717000000, + "varSlot": 53837551118082604915541446026154263179834741687769991383931007413865797131824, + "varOffset": 0 + }, + "0xa4063e2193d06bc9fc2586f5e0871ff33cf6b5ed": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 223083670000000, + "varSlot": 39293921216183037722521817432857061061677828347204391685975641716475925766698, + "varOffset": 0 + }, + "0x4b44d4f4e42577e4f743397661c7dd44b0b66ba9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3523832342000000, + "varSlot": 34184227236675625310711854734589756778956406065564947103817553488102691844623, + "varOffset": 0 + }, + "0x1425d236955f9556c48d5bb6cf2dee243b4c74ca": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 39005805668684922438216906904168041082517692242214928406461623853207658215440, + "varOffset": 0 + }, + "0x559d84efb3fcc57da51ac0cec0f68491c249ed50": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000000, + "varSlot": 82214043799449303205239987880437807173177307603238187779899628144376213082444, + "varOffset": 0 + }, + "0x57eb3d69c26479f50125dceb56493c4575cee2f7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000000, + "varSlot": 70960416968331989979384844626955398804022599357876303520223286001516611567181, + "varOffset": 0 + }, + "0x6a536259e2b4660f83a8758a3117d0c1b5be328e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4856418504000000, + "varSlot": 102574076008567697351857874263116193188836641118562695476619303386186329541851, + "varOffset": 0 + }, + "0xd938077b52717654ca7277edc9e10e559a83f170": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 90371275122240711801847855881420422026767364571375692280892165140452863697436, + "varOffset": 0 + }, + "0x2c1ce0ab29ac90ff767b9359f5a9144b76a9c468": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1263531812000000, + "varSlot": 64140516964548007453869577787810075333071505746401483322684108746793572280687, + "varOffset": 0 + }, + "0xf8f9075bb43702adaf88b8c57d0333ff7beaa252": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3077644954000000, + "varSlot": 26902842859406561516285917061585660920188669860901046491317935582394495927040, + "varOffset": 0 + }, + "0x6645be590004736ce35e0f7de3d8ba183c21e9e7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 335670105142866, + "varSlot": 69435632005584534215191970262704651570824306597341000191085038335021667348592, + "varOffset": 0 + }, + "0x4ccf2dfb4a2a8ff455f9195c9d48e16550442175": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2100000000000, + "varSlot": 58594346213517000561351747041383443237192512841302999806900329057942470039220, + "varOffset": 0 + }, + "0xc69cf4702e7a3bdd481d64ee91ec42ef5c81aff1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 27877378915667507614536403483866561706036324446042525802490851457893603633127, + "varOffset": 0 + }, + "0xe19b10afd421d03a77c5e338ebc3cc19ca02e14d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 106999068894976331006927011103332065728855036801473556214432588590358423595434, + "varOffset": 0 + }, + "0x3faaac383a42ea42aa65e1779cfbd3655aa9b19d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 263852200000000, + "varSlot": 79093211697324422415940054919447098217546876263424119209026083829084062066166, + "varOffset": 0 + }, + "0x04dfb40e511b59f622eaf3cde9a1a374ab0e5db9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 25514171495017245459749863742483534808390914042353634792867673103666738567894, + "varOffset": 0 + }, + "0x8fd8a891165e9a49727d181fb94891fa58c81789": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1899900000000, + "varSlot": 71618702409602168288811384623194946569965639925064813168852489265273448145136, + "varOffset": 0 + }, + "0x6cab24d31b18d4f47b1ba6918d8cc294e979c3a3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 18888800000000, + "varSlot": 46606052551665173888367801308784598871005077899232244436777937084113246370831, + "varOffset": 0 + }, + "0xbd3fdab2ff0a7d4e8107e6eaf28281f245e5e317": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2160100000000, + "varSlot": 44550350680426540001282674321872805878882916125831564995466539138129053009198, + "varOffset": 0 + }, + "0xe4bb4cd8f30b94477e7eb374abc5fc0b130afd6c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 19564421619109283505990231458944012990281053983353105220509491952250270362278, + "varOffset": 0 + }, + "0xc45f4a95b286ff44ef34a4e78378cf646364b344": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 64915113063492449075435658086211546108517947605229134116521307382471217949183, + "varOffset": 0 + }, + "0x728182b0319e29cb353d1cb59f00be2056a59e4f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2290247800000000, + "varSlot": 84068740469900193415872092644537446132349363411838434555055279220652390132603, + "varOffset": 0 + }, + "0xcea11e6d1262d3c61edfae5ba78978f75ac426cb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 45544499329449278424585531893010130280410159936008422558794609231344388428260, + "varOffset": 0 + }, + "0x6cdf39bc7d6d81cb7c41a9c61f6bd40fe0ed0fa9": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 87757372712931126883731810749353781804429467335821451039006124702612053139176, + "varOffset": 0 + }, + "0xd8c49c834df3dea775085af41cef2bb857d9fabe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 4897959637692476035245014865361964607638109407903334219135749176838428409797, + "varOffset": 0 + }, + "0xc134faf2125f4824a229bda4575cd25edc796db5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 43278785381574450140486752390668199942327861356547473732745220016935631910253, + "varOffset": 0 + }, + "0x4c9df57276dc17dee5635ded208c07b0be32afd0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 45233237559550223979707856538601845715068252344370195011386433181142086730381, + "varOffset": 0 + }, + "0xa085c65094d5ccd670992d21b020c5c09d70c4c5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 73163587262703612683783602044766875292468365261407790116993464233655055496987, + "varOffset": 0 + }, + "0x80ec754a0c00a029544ccb30ed5ae8c39f5702df": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 99670073142152551809137062475930003221349150169911950127168793066144591077444, + "varOffset": 0 + }, + "0x58becc50a625646353a13e77727e5f97c05a76ab": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2245119824000000, + "varSlot": 66351782344159205090457745031376472695938214411325017328759065853259582613854, + "varOffset": 0 + }, + "0xf9d0319d333689927fa51d2511092f97b2b079f6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1501362421000000, + "varSlot": 56449321444568192210408168370228858174822406882635366073523387570397624316733, + "varOffset": 0 + }, + "0xab421d9f998aa0dcfa2f120dbecd99569e61139f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 28409173574854710682397685145957689651358543807000959775905612049043462961915, + "varOffset": 0 + }, + "0xb2dbc83bcddea0beaa0ae2571b77398db53223d7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1056758701000000, + "varSlot": 15376969417421786518715077315048446231256907240338026440064411965904415663776, + "varOffset": 0 + }, + "0xb8ce9469be171de6d8e1cc66a8cd21e70cbc93da": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2147174090000000, + "varSlot": 44466148475177844002705592636218936826850996597028590660514641961158333087954, + "varOffset": 0 + }, + "0x105918f70d7f60320ec2bd23c3ba874f025a74d5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 59067515720198873488641889317013702625596230505819922011045978420445226699564, + "varOffset": 0 + }, + "0xabac59f539c8c83c4686ce25876b068617d2aaa3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 1988073323596625876333123926085176326968980380293607295853340217007738594107, + "varOffset": 0 + }, + "0x3b9014ef78587a2fb2ebc85b7892e6c02b952477": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 96371385307690382433531385194479845214053226346004455724290284004532595257614, + "varOffset": 0 + }, + "0x70cdfce1dc0124ee78be3fb3fc1feca60cd5af15": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 250245012000000, + "varSlot": 94884493462144649493242077846962805773884126093873641025720923528924007084176, + "varOffset": 0 + }, + "0xa8674b7acebf80e9c1e783fb0f2d810379a90b1b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 96057855833064510971247152691639238910801357498226671476543787975556816765132, + "varOffset": 0 + }, + "0x5fd0323bb09c0c9b721cbf24793569f1f0a8fb73": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 22347601838960185673093856236278056041821355018111254813823640873133746774973, + "varOffset": 0 + }, + "0x9ae9b25787ffba197de2a664be1077ded48f4831": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 7488528713645553306417112059464565158429863472632139126766476092897400720804, + "varOffset": 0 + }, + "0x7dd2170cf848747fe5e4bfb1cf3df94bd6da8e05": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 32139712311203215082679229821223551914053854765211161027449960127376829196772, + "varOffset": 0 + }, + "0x9ffc493d67869cfd0fbb83de2002f609f8de8424": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2344197414700000, + "varSlot": 25332389985504713452067483269483044834556161540712985109096654286426996108790, + "varOffset": 0 + }, + "0x5d5fd53f0050873f626f4eb9d24a40a34cae14cc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1015929560000000, + "varSlot": 10324501549856785262198547361314063064833167849096976874612603753683096771395, + "varOffset": 0 + }, + "0x5cebb373f4e500b1718caae1e9ea4b79976a8d07": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 47000000000000, + "varSlot": 78278312298299570509414163088393669608294380781342600618996212338808286382144, + "varOffset": 0 + }, + "0xbda22cf80b9d2ddf56644d679a344ea934d4b7a1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 109447384474738971750074934189377696562492604214053196205409161373159810821164, + "varOffset": 0 + }, + "0xbd84d2bc477676f3cfb80c9b346a993a815a0ad0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 25654191162359470713671217183925144153888219540661188241654263569507917180864, + "varOffset": 0 + }, + "0x4d062aae0ca46f43101f0381217c0cd668d143bd": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 15059144089832495946828085541304332420810058013436970023685204796263962864223, + "varOffset": 0 + }, + "0xd624c7ee82ad233e393d2f97e59b6da89b8f92c7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 1676802481669026487911088112378651654578438599767403141382854046622414582773, + "varOffset": 0 + }, + "0x6389f2c11823712215c833cf62df94ed66a5979c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 20672322907250590389850383532840270745329525172465903279665345931785682420033, + "varOffset": 0 + }, + "0x815fea2523a7805de08541bc771f2f6e51c35a69": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 91566009699982145855850232335053168507540016565933734958420840322970178370009, + "varOffset": 0 + }, + "0xc78733231487809b8eb8bf42a2946e5cccf682d5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1600000000000000, + "varSlot": 97456540862959700482649996464544300738418585250426072846708521625211690184155, + "varOffset": 0 + }, + "0x673db543abb4be7e16796f25b055d64301b51457": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 103901521843264977024571412439232826980454934659556932850949795277632218288939, + "varOffset": 0 + }, + "0x36707fcf370bd77d484cfa4c00b1fb2da18009b2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 58920199155464168994918536721997169846018499107132969356610498855275614642042, + "varOffset": 0 + }, + "0x3ccb34844f1258c97b8a68f95cc244250da5f1a5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4752609100000000, + "varSlot": 78395375165123116047606404543344952081002149543312478566608728244744778008758, + "varOffset": 0 + }, + "0xce15887d6be5505a1908876621df7ecea9623210": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000000000, + "varSlot": 47606354979081329995315243414948798821736784383208174038574982811676318945115, + "varOffset": 0 + }, + "0x17d86570c0964b924e3690c668006ac67f341866": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1498000000000000, + "varSlot": 83292802213235852582986372728178033973353363414339057004953144775268323714796, + "varOffset": 0 + }, + "0xde9ed099138afbf8f7d2b39e54a17c9355a2ba83": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 25185204000000, + "varSlot": 112984099746790380513054048164294495584796972438895039273585990158365899285565, + "varOffset": 0 + }, + "0x3a03e0e21b26a4b2531e49a55d26558374c250db": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 816436753000000, + "varSlot": 57580047554468777262271327961254629322694201427540142891194683810810959408680, + "varOffset": 0 + }, + "0xb14897af527144e166a1a0532a8bf2ab6052a504": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1819394147000000, + "varSlot": 2624224927618723599225373093271411817237459797831365192853168696857324403360, + "varOffset": 0 + }, + "0x8b77806878d5e782dc98c7a20d0b7009c2d45296": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 35478186006959062528080081971932243625345539849903730289184943327711697806533, + "varOffset": 0 + }, + "0x969b956fb972990ac8d2b81cd10ae1ce5a905554": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 253334180000000, + "varSlot": 80575685952966468321895763626901021591520565805262712745521511399595771165593, + "varOffset": 0 + }, + "0xdbbb29492df2df15b07d7056b6fb4fa9eb6a1299": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 89562000000000, + "varSlot": 50043478495071354753685836004633249686647040685887070386008788412736467181054, + "varOffset": 0 + }, + "0x655b126b9887a28f456038d0c6aeaac403598715": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1500000000000000, + "varSlot": 86227868991214499846096370255167947484793672884712942669829155592024387506289, + "varOffset": 0 + }, + "0xdfc0375a2823af1531cc91b675387a335891ed0c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1200000000000, + "varSlot": 58664125529410226662484086281875557650996143479357149973294379590766332283331, + "varOffset": 0 + }, + "0x0d9fe7474365b83181a1786ce600ecc5345dcbf7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 335265757293467703340520566015379097979422882514322828102309890206958067976, + "varOffset": 0 + }, + "0x05f1ff8805f6dbbcb851208953bf835537862d24": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 84948605287858684858166941482301865279823422978514855849934313050682453440200, + "varOffset": 0 + }, + "0x525921ef29f35da823dcdade07a8f65169d6b1ed": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 47767364912883564504473946803206879359111445818359197827749018635908836618430, + "varOffset": 0 + }, + "0x67d4c14870522aced6aef9aacae9d3f440d45210": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 39127447182264512586815186001886658593808791038259242123126758882049603045244, + "varOffset": 0 + }, + "0x959435324d732d13f3cd4fcc3da15a9b95f0a6e0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 56138357863920845361049919737852593436135168828287573137246759772096154272000, + "varOffset": 0 + }, + "0x14e9d086ce3145206eeecfae6faca6a977fd43fb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 106706740161605315442187717408029113342520003693490432238927470448893422607817, + "varOffset": 0 + }, + "0x306343dc8566bb292eb2a2304f1ab2070e7be45d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3563600000000, + "varSlot": 75504773598939242813415983331338862662042377765887731385953623822992315226830, + "varOffset": 0 + }, + "0x1d7c32621163ac998e326236efd35bcee339f94d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 14095521517582674472817110220365418093953720030582952681292406495456847607680, + "varOffset": 0 + }, + "0x3a7ac49ff0060e6000f65f471b447c0befd3fc70": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 24460997731200172232326157442603033919491509034210328409924640098180302068915, + "varOffset": 0 + }, + "0x0765763b230c645dcb771236efa4046990821cc8": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000, + "varSlot": 102320296629660957661635443121172142194732014114357228231832766091171222288509, + "varOffset": 0 + }, + "0x5b3935b152cc0688f076852791db5e9d9c48beeb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2000000000000, + "varSlot": 57514576319869730497769426386100491504041146974082267692721628279854283128017, + "varOffset": 0 + }, + "0x281de7c223a5388e513235456f2e38bdd10c2159": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9600000000000, + "varSlot": 58872368879554331510679568034863353512519928076527200743632382660795721070127, + "varOffset": 0 + }, + "0xf819825356b293f16700573894862b405d57da18": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2500000000000, + "varSlot": 54667432728214597811902276604138959917858169434612057503661992484263154242877, + "varOffset": 0 + }, + "0x95f099bc428fd1bb0f3cd7eb0e06aedf385ddb3f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 31048305453068336193958773632631184356323706526942753849276026692579872277147, + "varOffset": 0 + }, + "0xad7c56b03ff6f8d711ddf860ec2670c253b50a5d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2681167652000000, + "varSlot": 13029776921134485255103880265936261301323058549468001890552072926716044616769, + "varOffset": 0 + }, + "0xcdc10ea814f93f0f3eac069c5ffc9f3477a9fa61": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1876942246000000, + "varSlot": 50810911042100305300875143504173874653074677919114902964448618930476951206471, + "varOffset": 0 + }, + "0x72d4f2aa7d2e47b9afdf4dcd2d65bf079fad855e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 599482190000000, + "varSlot": 38990071544836543948661774576522869665526131989476048907250350043353121630525, + "varOffset": 0 + }, + "0x0f6aa045f401d41291a2e8782306ef7a46311456": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1650101000000000, + "varSlot": 57732024072402003940773119159826573426387151625109858904782974833691001638196, + "varOffset": 0 + }, + "0x24aa85f5dc2a389ffa54ab62c4e75824d642456e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1375765499000000, + "varSlot": 82131184019171282603791842215316650799787388003958042947588862474236651102301, + "varOffset": 0 + }, + "0x7741cc83bdd943cea700a912458d6dbaca0d8136": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 56502149992327516937240906558125546260599096714741206488532593917331713410983, + "varOffset": 0 + }, + "0xa22dc6abc7644bf158b42649614bc9f2b8076541": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 81585770937288100456729678189353432170642470782287713828595174749734865134876, + "varOffset": 0 + }, + "0xf3b5be617b9df75545013584b7384dc626a9aaa4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 84112117905419831445152040656848577057477033001840338420004085569017001367249, + "varOffset": 0 + }, + "0xa1f84cce72e9d853ce4474bfcb263b46390e5c07": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 398142740000000, + "varSlot": 41512662017986812644406736151461284557374776288466300252982516697599998500929, + "varOffset": 0 + }, + "0x580f1155f909d0841e17f7dd2498f68c8d983e03": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 63274634000000, + "varSlot": 65192284773476234036038858264294576941044042950446951756087395106209252895364, + "varOffset": 0 + }, + "0x1834e713316f702d2c020056551622db7858bbdc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 20098045547407386631784784240196638862105643155862041532934309006791834620975, + "varOffset": 0 + }, + "0x3ca9c5b039f67b3d8f9b7abc80cb9d174e4e0b04": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 23282839995088042926865703669051659703014186001100329086156853661843153702118, + "varOffset": 0 + }, + "0xd373bb03fb93ee611e98247f687d26729965a3a6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2457850518000000, + "varSlot": 4503309589306900925704338217026617578139504412745417194671468703348234346445, + "varOffset": 0 + }, + "0x76d09732c85653b46212703ea8f7cd7326074b5f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2040643239060000, + "varSlot": 77423153905608439615933632055115577105705881724831214243970587014412339217382, + "varOffset": 0 + }, + "0xadc398d1f93292c24cbd1890bb017d91b46edb77": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4298800000000, + "varSlot": 97613786602294441811056774576314625125909746976468280191008866575188230924873, + "varOffset": 0 + }, + "0xef27a901c33a85466acae37a96b4dc7fada71d6a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10125154500000000, + "varSlot": 77227076665019236053622872911994701071940864526903780396768221300316866555586, + "varOffset": 0 + }, + "0x05c98b6e510e9b30c168357af5ec9b579591662c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2012100000, + "varSlot": 95059056221023779278323410342545400735171514218287736478502003910103943129622, + "varOffset": 0 + }, + "0x7db21dab1499eb9325e811e5764d93f688dab1cb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 90174406240000, + "varSlot": 43641581004874073025700278278231716321217933390130355257031628904365397764067, + "varOffset": 0 + }, + "0x144c155e36a58500b5ae62d267a34fbf16db6c3f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 77750960089752676246663980081334422465949525215755987026041116776064631723903, + "varOffset": 0 + }, + "0x9c5dd74420edd3db59b3fa0d4d62503ff7054d19": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1358882160000000, + "varSlot": 100121784722802385838407819353834286918605725917281750466166105973266601788317, + "varOffset": 0 + }, + "0x4a69b195ff22427bf8deef54ae7c516650df26cf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3437944333000000, + "varSlot": 46560139640105456884604875611595815244943253359747143358327669909592233008530, + "varOffset": 0 + }, + "0xcd58476ca56c905af60cd23f5d54552415e0c254": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 9100000000000, + "varSlot": 70361642066706465159269171505046404652435259146209173444106670164056958675099, + "varOffset": 0 + }, + "0xb481e5da213efe014fdc7f9dc500bf35459445a5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 110508211637556233056959749241894736962697240007558688944279802195005799083028, + "varOffset": 0 + }, + "0x50aee738261663e611e915f6ca7bb98750fa7ebe": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10614323000000, + "varSlot": 76667823315223900639840624220299497149627505287077346113116054744112883037751, + "varOffset": 0 + }, + "0xf29742df35781193746c01bd79ae24b684bd1e00": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2597847000000, + "varSlot": 94003952580424450756408524954510641430778948584542396499100757443119975752023, + "varOffset": 0 + }, + "0x5680e843286fceb141aeeb61c2e997484bc1fa09": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 74515479152525790263197607294799016086632588099768221226764451718929160289906, + "varOffset": 0 + }, + "0xc8144738fe3ea83db68d068878981887efda9c0b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 520848749600000, + "varSlot": 6289323346529498895670894754742710550572533197878639239922947655507955323132, + "varOffset": 0 + }, + "0xce2a7f446b0293c9de4616fbbb62598936452d91": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 109878985917802897566743051003806003448979792261712267935262518383941005965671, + "varOffset": 0 + }, + "0x45dfe8f107aac5410dd37d5a4b14b477f69b3875": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 400000000000, + "varSlot": 81407402884463314410291718166198672379504559614449345023115270945632308354737, + "varOffset": 0 + }, + "0x6d1d55be973d2088240b5d1098304285a3ee94b0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1532187000000, + "varSlot": 7189703028305331830720323470210343564246372652851874663343912219209741411770, + "varOffset": 0 + }, + "0xb07c293be56b08846a8da98a5783bbf19b013aac": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 103992700708388723831837388796940768593725391046356710565547692157373564587966, + "varOffset": 0 + }, + "0xd5068fd6e702710a16a73314c47eb781543769c6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 74987919313614602446978122717302937206543333318344560688290215742535593300351, + "varOffset": 0 + }, + "0xe7c2b9cbfa0f620d0622d68cc4220f0280f39f89": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4000000000000, + "varSlot": 73363376822616222266617287007308004349472705789766817293101041618955544076982, + "varOffset": 0 + }, + "0x174cbec1eceabfbc552c2edb8c065b8aaac2a19e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1634666760000000, + "varSlot": 7677737850570080693170148192911217261751623495705223865757342475256168567540, + "varOffset": 0 + }, + "0x93c2e09e5f52a7dcfbf841da8d8fdf8ea97769cc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 82642546708005878058673017016141534016937982239498616432703015234134413209305, + "varOffset": 0 + }, + "0x1ccf3d0c4c8d37ba481af00281f84ab98f44357f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 63377449483862505155474868106108034531368093179468765564199528798959237877010, + "varOffset": 0 + }, + "0x865f1a155f3c1f8db6366fb10f2c775918c5a3dc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2479631289100000, + "varSlot": 28972615899208501891682553168100538298704381214886095275018520105620096362004, + "varOffset": 0 + }, + "0xd3679e491379f8fd3ab81c5dc8d74bd817dd9d6e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 516363561256209, + "varSlot": 32927947539325232216825288558217550907828294939825094986462375684065943846023, + "varOffset": 0 + }, + "0xc26d8dd1fd6df08ee2cb4f7a60f452dc2c9ce6ea": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 24116921000000, + "varSlot": 21723563702104501064098874123989280970549017418911128314145914907048480339016, + "varOffset": 0 + }, + "0x531e20291af9ffe1526f063cda66cbbf3b00fea5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 519968524571979, + "varSlot": 22266015230626647116313678895733366805492118079479039664958883032669171212145, + "varOffset": 0 + }, + "0xd09045eef174b5097c7472ac315296e9964c5c4d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1927247625000000, + "varSlot": 21522928325847046424957459163853243263919273514101757778517580595001133925371, + "varOffset": 0 + }, + "0x417e19fcfa5e503ed94609d99ceed8dc3314caed": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 15425513000000, + "varSlot": 114497144685744241092186990169311601920260276047407822478806903971095788163458, + "varOffset": 0 + }, + "0xcbf8473ca3b75202ab929d438d20969fc4ae5e24": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 719261831857134, + "varSlot": 29362380332521991546527622291069279232653407889627440740826275021778854472612, + "varOffset": 0 + }, + "0x025745f5590c09ed4b39d4f4cf3941625f4b3cc0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20300000000000, + "varSlot": 35800413491716410038087566729367183157289946831095689162975141457378751994404, + "varOffset": 0 + }, + "0x6be381f44d790f5c61c23db2912a0a6028226a60": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000, + "varSlot": 77183176079735946500190742932114128085655957552144457245106452229273945565500, + "varOffset": 0 + }, + "0xebc9efa1a3956f6d1c2814f3910a89fece0051d4": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2300000000000, + "varSlot": 47540117266629417635231175322006298027304082110646896935958777051436193047543, + "varOffset": 0 + }, + "0xace9438769b56c19c39f4c03121b6b3a4ecc923d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 230490600000000, + "varSlot": 9716032186742252452467093813899152177139573304583722271220180123044614062735, + "varOffset": 0 + }, + "0xd33c82e27fe81e245d0b5e4d6f9272a01c949a7b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 382035930225680, + "varSlot": 25290459667258494007204868590728562834608388740772841137121612801995666590789, + "varOffset": 0 + }, + "0x9fac0b164071ab034b72496b6e22b1ff4b607267": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000, + "varSlot": 94317031023224444042134027034600531072624761725721452349138957492525378758089, + "varOffset": 0 + }, + "0xfb8a3b8c93ce89a16cb528be33c0fda206dfad1b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 656909000000, + "varSlot": 36451993916603019528810254052280629300231108752717291217482156186119422274330, + "varOffset": 0 + }, + "0xd8b9ac1617ba6d13aa81b78231c8f0748313e0f2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500000000000, + "varSlot": 20133322572620125856034293971415564678359436736688679993597607143714847995055, + "varOffset": 0 + }, + "0x706adff29869c7c48583fbffbe7e490792e64c6b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 81241763470189340419704358613251949346412328822040324903639965549099287864200, + "varOffset": 0 + }, + "0x3143a908e6879c97773e0447672bf8ea97e1d6f5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 555000000000, + "varSlot": 9103902702477578903761691604220279412987608181063261868620492092178554237040, + "varOffset": 0 + }, + "0x515231696335702a058b50c37e9ec76f63565289": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5687185000000000, + "varSlot": 67495020113369394427499492226149855028464585102382708888806728417619393864889, + "varOffset": 0 + }, + "0xe007ba649d1733b8885d8a645e884afd4f9b6d24": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 500000000000, + "varSlot": 76660434080532440296282907282289278123938200608591267680313345896169186644154, + "varOffset": 0 + }, + "0xb6e8d328bc48e16a0c2fa8c5f42a128680a10dce": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 90033691151240747644234878675122550317522606074861353029697380783956080861954, + "varOffset": 0 + }, + "0x74fdda33a7e4aab4c8c893748d30bd455c6a95db": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 729910621130973, + "varSlot": 44600147572097998928797177228911071483848750394880962826803477137118669338873, + "varOffset": 0 + }, + "0xe1f43622d932c0241ff7e38103eb10b0293d2835": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 647645168815159, + "varSlot": 9016524068336410049912188539455642005947783979222324503451697656298679172089, + "varOffset": 0 + }, + "0x7ea2a4fdb275e4f2e44ef385b56351b7b8a8ec2d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2228254264000000, + "varSlot": 55456106821015759992174387669406109373206503940571784475354332859125473816634, + "varOffset": 0 + }, + "0xa3f59e3d4d83c707a957e4c0200965221269e784": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2300000000000, + "varSlot": 21574531837955363630450559708720685093199109479707195081560168593028755437777, + "varOffset": 0 + }, + "0x06e2ce0d1fe126b7833d0693bc709ea447667e1d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1400000000000, + "varSlot": 84257870001315411874696233252861121743289074489911686330486241308966275193483, + "varOffset": 0 + }, + "0xd3b9926fcce50ff042b6c464c30e8336f6c5cf07": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2142121524000000, + "varSlot": 86223284495346032373843370975179396261401746426150174045132267991216426185098, + "varOffset": 0 + }, + "0xc29ee1c4a393de269ba963c3d7a70539f88c8589": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 19280000000000, + "varSlot": 101117071885487515203679565208037201535779181476723830787138578471211053291931, + "varOffset": 0 + }, + "0x87b31fa9776bebe5aa4e058e83de68cd159e3888": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 200000000000, + "varSlot": 13185275728795942164421305026072611248203071850560874623506089261858059879548, + "varOffset": 0 + }, + "0xc2cff7541ed79d3119865920231832dcc64d68cf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 2658951029125813651196080191338429399292506161487240235150648893963979638596, + "varOffset": 0 + }, + "0x5df779c5a70f89de544fa3069a8cf1fcf9718041": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 362301000000, + "varSlot": 73204436152788033260230734305633269340780968726409163862718840035372991744760, + "varOffset": 0 + }, + "0x6c60ea443e12d4c4c5123ebce902b8b0996e2d4b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2400000000000, + "varSlot": 23567876434492520955093309093230700304753352888427345850019453112766506715043, + "varOffset": 0 + }, + "0x51603ea0580f0cf747fd627fb17b0149957f4f4c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 12328137775, + "varSlot": 94178596508929915301544573026894319723155019450641163304101361228554381249808, + "varOffset": 0 + }, + "0xc83bc448fbef9f631be773db0f85c160367ae6da": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7500000000000, + "varSlot": 70679869308631720668615112757855262653125793295010488253533273702276205973697, + "varOffset": 0 + }, + "0xfabf07595deb68010b6a8d57e540e4f5ba4e9588": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 126065500000000, + "varSlot": 47169175603324759538658165769970286761696074771643553895564155225516919875107, + "varOffset": 0 + }, + "0x9c4d30a60f4c9193f6ada56eb4e32f5bcb3a1c3b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5300000000000, + "varSlot": 33082717376686736038338227545799894732763267148862203972859770151170691185999, + "varOffset": 0 + }, + "0x9cf570628ebb6c4f6704fbe60d8a8788cdbeb184": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 102869935236969742800416606089920366892798587819931853758468396940205135321899, + "varOffset": 0 + }, + "0x871f2baedaee4158aedf59b620ffdf6937bb6bff": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 267447613698667, + "varSlot": 26311974411370882206313094528900039120060927168530700011212360787324081557073, + "varOffset": 0 + }, + "0x9188978fc7a74fe146e24532206a4da3eb0c1342": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2295742000000, + "varSlot": 78408418433134890252668971429063382869205252429125018068411184632325219852287, + "varOffset": 0 + }, + "0x4435f6d6117302b3f76d79561b8262d463639317": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4788867000000, + "varSlot": 6677633114447457464417325342625097316295649616141349221661720085272802661772, + "varOffset": 0 + }, + "0x6687b325415325e5bbd281e5555ad5032a59de68": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 412513407200000, + "varSlot": 18559351530645079458275866791817991714360672430463205759019060932139308235580, + "varOffset": 0 + }, + "0xc80f7e658a6c1cb247ca29f081310d7053322478": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1916900000000, + "varSlot": 77000710445994987668591399821349091468546723217715884461171368052003790366893, + "varOffset": 0 + }, + "0x93af894e36f5ed090af0496920c2ad2b1e2d2657": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 18313834755579360703555364732753517735213149352219176974812593669359823716707, + "varOffset": 0 + }, + "0xbd8c1bde8e89b4d8ed226fdeefe7ab7b721973ff": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 2494432481998900347754663080303095176505940700441983537891075199241214118063, + "varOffset": 0 + }, + "0x61ff5907fc7d542265ca7707201f644875304c3c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3530000000000, + "varSlot": 1399724160966571982678922313437367007375561506475575928976078984629919551531, + "varOffset": 0 + }, + "0x51df20acaaf5828d81df2c5ee4bb2ff3a30481ca": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 820000000000, + "varSlot": 42852693609440009768048337661136085119679102241164008404120935128634744675739, + "varOffset": 0 + }, + "0xc73849851ad41dac9aaee813ddecd62a35d7a745": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11600000000000, + "varSlot": 38534680928884358868061212017715981181631491525907702774735252432408945655525, + "varOffset": 0 + }, + "0x7a2ec4df8c5b9d9c8b260ec5d2d476e6859d6b05": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 690405000000000, + "varSlot": 95789293330716753363818579931441654819571386123674089910978369677790375643675, + "varOffset": 0 + }, + "0xd977c00b1b451fe17c967abc8bd4ccdcf9597064": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1632342946349900, + "varSlot": 75045634322282730183618837081912548571709297744024319236926069129578268032821, + "varOffset": 0 + }, + "0x5c4ffeea720435ed0285c0af9ca3927529ac2d4d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 31250000000000, + "varSlot": 25213926165553083784897130921475366478467936681672340535427374633317451835675, + "varOffset": 0 + }, + "0x7162560cfa772e60589e56b1229a2523c42e6f8d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2190000000000, + "varSlot": 69144826646334125686391616421649589084470283174422393238103594166131843438339, + "varOffset": 0 + }, + "0x5950203c98c6f69c693f549cda495da0f923b989": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3431800000000, + "varSlot": 89674282524823332281356843267489431753055686235544307796339881340391561561251, + "varOffset": 0 + }, + "0xcae81647ab03141a3d592bfb76068b851d24a646": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4400000000000, + "varSlot": 43364308604044994529249957935064115227499899369766832328816480217528815307870, + "varOffset": 0 + }, + "0xf6965c834f303f483c428db6520cb156e092fb55": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 11038800000000, + "varSlot": 36886348098189935574132061201887770894246189040486821583840063221700538149209, + "varOffset": 0 + }, + "0x49a7ef926996086839fe2bf0327cc72dee9a5017": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000, + "varSlot": 65829855158446201251424563102231306716050189399286428602548152973783616932370, + "varOffset": 0 + }, + "0xe16e19882cc786218259aa0d734d6c767bd9e0c5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 6256300000000, + "varSlot": 105525091941550858709605193335446969767599030432441123805881902519382020540942, + "varOffset": 0 + }, + "0xd693172b98ec046374376eb34d6668e1d4e27465": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3248900000000, + "varSlot": 105021032247240951071762044321923048605138884957768786620676793247616787848947, + "varOffset": 0 + }, + "0xce51cd90fefa6a203aa886d62b50e9ec30a131bb": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2200000000000, + "varSlot": 100199766956220681736283887857596132908037311077729537091858043704073256899038, + "varOffset": 0 + }, + "0x951792b50772b131611f4121a157c41b20345d3e": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 16800000000000, + "varSlot": 104910812755609164195254269951757285384907724787701768784263615854278584788686, + "varOffset": 0 + }, + "0xa98d1ba5ba3c0d028a86a8b28271a1727ed12c83": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 266862300000000, + "varSlot": 65124305931212136473916907332635507470702840190914119243402428251520720479148, + "varOffset": 0 + }, + "0x514a66909aa6f4b0e456d3986f610e18c4de90c3": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 2900000000000, + "varSlot": 51921869579413595365081406869942141023290951233831566025518823122283428205664, + "varOffset": 0 + }, + "0x25668681f854203133a7b3c0248078262c2f4c63": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 5000000000, + "varSlot": 101239894688516450073664028931906400720734932881802891101432036494222190927265, + "varOffset": 0 + }, + "0x8b027ebcb4dcd63abf93d8dcc3d54e4ccbc8edb5": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1783050103000000, + "varSlot": 22304969684110624194593466627269119943709908781826537272891715807164183462119, + "varOffset": 0 + }, + "0x9d9d9f96e9e52b83e173c756e216336c1a977469": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3900000000000, + "varSlot": 64375107482820920641337656485746579892911062958338539065704824326916518028131, + "varOffset": 0 + }, + "0x88e4ffe71c391c176a99f29365985eb082c495b1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 83342449272778435297783693883515198441497596971996486097447935991581678094481, + "varOffset": 0 + }, + "0xbffa81b598f9505b5ea63147f67d0d7d3bab8e44": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 66301424932668004367478878604473665007927410188633631134414350810297633314528, + "varOffset": 0 + }, + "0xb8bde2e4307687b85b8c3076b89141573bc53897": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1007299500000000, + "varSlot": 37095067636349112277859145518515945739917956767375015129961512176806754729572, + "varOffset": 0 + }, + "0x184aa52929cb8ba1f3957f7ee0a70f39b660eb46": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 578019722000000, + "varSlot": 24379046170141869524780172596762044303189993813585987674103396921923835405863, + "varOffset": 0 + }, + "0x5a655148477837ef33faa3ae4e83e1cbc322a997": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 170584390200000, + "varSlot": 95255855830459122993247987804434883582829994148879248509295791921790692382971, + "varOffset": 0 + }, + "0x369b918ea7e8eb88d5d162ed299e7ac266d89e91": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3202696239800000, + "varSlot": 94313887370413766889024051661956297618282279062042913220459055816600219338438, + "varOffset": 0 + }, + "0xc5881838fa24ffcb1c80e2f72eed4400a77de29d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 261088393000000, + "varSlot": 42844085110130743468638070995095473490179504810675354879703292979673459822071, + "varOffset": 0 + }, + "0xb31a2527596d6e026c9872daf66645c5c599e6d0": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3435202942438023, + "varSlot": 109883936696785735753620474034849295427573735266442385349648071527893172346924, + "varOffset": 0 + } + }, + "varSlot": 4, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "YCCToken", + "varName": "allowed", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": { + "0x0d9fe7474365b83181a1786ce600ecc5345dcbf7": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x0d9fe7474365b83181a1786ce600ecc5345dcbf7": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1214154393080207565488897145207363713379238199016, + "varSlot": 65651440038714500291731449151586128913534434540374771777303333972086887773503, + "varOffset": 0 + } + }, + "varSlot": 47164528577015091153003499373095889719293194419197690870775202032610806952871, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + "varSlot": 5, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.inv.json new file mode 100644 index 0000000..56eab25 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.inv.json @@ -0,0 +1,262 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000", + "ori(_totalSupply) one of [250000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000", + "ori(Sum(balances[...])) one of [250000000000000000000000000]", + "ori(Sum(allowed[msg.sender][...])) == 0", + "ori(Sum(allowed[msg.sender][...])) one of [0]", + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "msg.sender != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "tokens > 0", + "tokens == 116143000000000000000000", + "tokens one of [116143000000000000000000]", + "spender != 0", + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) >= ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) <= ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) <= tokens", + "ori(Sum(allowed[msg.sender][...])) < tokens", + "ori(Sum(allowed[msg.sender][...])) != tokens", + "ori(allowed[msg.sender][spender]) <= tokens", + "ori(allowed[msg.sender][spender]) < tokens", + "ori(allowed[msg.sender][spender]) != tokens" + ], + "postconditions": [ + "elem of allowed[msg.sender][...] is one of [116143000000000000000000]", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 116143000000000000000000", + "allowed[msg.sender][spender] one of [116143000000000000000000]", + "elem of balances[...] is one of [250000000000000000000000000]", + "elem of balances[...] is one of [0,100000000000000000000000,249676860000000000000000000,1140000000000000000000,10000000000000000000000,12000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000", + "_totalSupply one of [250000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000", + "Sum(balances[...]) one of [250000000000000000000000000]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 116143000000000000000000", + "Sum(allowed[msg.sender][...]) one of [116143000000000000000000]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)", + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] > ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] == tokens", + "allowed[msg.sender][spender] >= tokens", + "allowed[msg.sender][spender] <= tokens", + "ori(Sum(allowed[msg.sender][...])) <= Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])", + "Sum(allowed[msg.sender][...]) >= ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) > ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) == tokens", + "Sum(allowed[msg.sender][...]) >= tokens", + "Sum(allowed[msg.sender][...]) <= tokens" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000", + "ori(_totalSupply) one of [250000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000", + "ori(Sum(balances[...])) one of [250000000000000000000000000]", + "msg.sender != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "to != 0", + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens", + "ori(balances[to]) != ori(balances[msg.sender])", + "ori(balances[msg.sender]) >= tokens" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "elem of balances[...] is one of [250000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000", + "_totalSupply one of [250000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000", + "Sum(balances[...]) one of [250000000000000000000000000]", + "balances[to] > 0", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) > balances[to]", + "ori(Sum(balances[...])) != balances[to]", + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)", + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "ori(balances[to]) <= balances[to]", + "Sum(balances[...]) >= ori(balances[msg.sender])", + "Sum(balances[...]) >= balances[to]", + "Sum(balances[...]) > balances[to]", + "Sum(balances[...]) != balances[to]", + "Sum(balances[...]) >= tokens", + "Sum(balances[...]) > tokens", + "Sum(balances[...]) != tokens", + "Sum(balances[...]) >= balances[msg.sender]", + "Sum(balances[...]) > balances[msg.sender]", + "Sum(balances[...]) != balances[msg.sender]", + "ori(balances[msg.sender]) >= balances[msg.sender]", + "balances[to] >= tokens", + "balances[to] != balances[msg.sender]", + "tokens + ori(balances[to]) == balances[to]", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[msg.sender]) > 0", + "tokens > 0", + "ori(balances[to]) <= ori(balances[msg.sender])", + "ori(balances[to]) < ori(balances[msg.sender])", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[to]) != tokens" + ], + "falsified_postconditions": [ + "ori(balances[to]) < balances[to]", + "ori(balances[to]) != balances[to]", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[msg.sender]) >= balances[to]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "balances[to] == tokens", + "balances[to] <= tokens", + "tokens != balances[msg.sender]" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000", + "ori(_totalSupply) one of [250000000000000000000000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000", + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ], + "postconditions": [ + "elem of balances[...] is one of [250000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000", + "_totalSupply one of [250000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000", + "Sum(balances[...]) one of [250000000000000000000000000]", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.json new file mode 100644 index 0000000..31cbd22 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.json @@ -0,0 +1,416 @@ +{ + "variables": [ + { + "contractName": "EnergyEfficientBitcoin", + "varName": "name", + "varType": "string", + "varBytes": 32, + "varValue": "EnergyEfficientBitcoin", + "varSlot": 0, + "varOffset": 0, + "byteSize": 22, + "toReadSlot": 0 + }, + { + "contractName": "EnergyEfficientBitcoin", + "varName": "symbol", + "varType": "string", + "varBytes": 32, + "varValue": "EEB", + "varSlot": 1, + "varOffset": 0, + "byteSize": 3, + "toReadSlot": 1 + }, + { + "contractName": "EnergyEfficientBitcoin", + "varName": "decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 18, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "EnergyEfficientBitcoin", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 250000000000000000000000000, + "varSlot": 3, + "varOffset": 0 + }, + { + "contractName": "EnergyEfficientBitcoin", + "varName": "balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xa43b64d64d0c511ac169e58173591ebd165b3172": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 248631250000000000000000000, + "varSlot": 13020391839425298403200901798189927680173892992797087033093923678488840858404, + "varOffset": 0 + }, + "0xebf49d447688b4b4914b941b8287e2d296d99719": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 53873283585191547313709388068851110928539472706338420118469494309336173955230, + "varOffset": 0 + }, + "0xf95f37dbbcbd27bc1ef844f9079e4549059b9b16": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000, + "varSlot": 104667263794330466079099550791454825114849942872714225827991541902979250032867, + "varOffset": 0 + }, + "0x50a1f845e66a628288a51c3a3727e3ff916474cf": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 10000000000000000000000, + "varSlot": 47165084926775951858336814203808669089645469668069456412851976266046687029123, + "varOffset": 0 + }, + "0x6dcf8bdbaf92a18996f0c94930d70f03013bfb47": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 92703044246285169667312600211732920782604618717006634629600939850895123346144, + "varOffset": 0 + }, + "0xf5533eb704678bafd6abef472928feaacbe726ae": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 78524074106989114255169113245801857130872851100960815167185553251222843328266, + "varOffset": 0 + }, + "0x983c78206d601cc45099fee5d34461ff92fd1f93": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1140000000000000000000, + "varSlot": 71512461368023809765011904165216137489793557472179855138829454515005976413910, + "varOffset": 0 + }, + "0x564d01d7adf5f4de3250a46ef34dcabd8b956f97": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000, + "varSlot": 107410374392867566439058328636452424777204397857209853026183270105314342724145, + "varOffset": 0 + }, + "0xc773acc90f5211c6914d23573d102a88d2d4ef58": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 14420000000000000000000, + "varSlot": 93003940830014260178832360285848594053803996541927046611365683621134367914100, + "varOffset": 0 + }, + "0xd864ccaf2b33e8cf78e6546d8b90ad365ac63d0d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3374000000000000000000, + "varSlot": 103198906868592623111814550693600232855253991358510684275314957215602244418999, + "varOffset": 0 + }, + "0x8e3aea5bd3ca9912b114d247cb9bea01ebb02959": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 3585000000000000000000, + "varSlot": 30915616378629886987617116823791761592587751785768032030270577906476650729230, + "varOffset": 0 + }, + "0x4e8b155cbe52bc3014f9fc9d27876ed0ff0bac30": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 773000000000000000000, + "varSlot": 112306065503877727089071935143962435212633445916973466375248100086468489324436, + "varOffset": 0 + }, + "0x78cc615e76a407223fe3abf7093076462f7c1cd1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 26839943831495390644437911371085221489904042015093384549369667084811332588897, + "varOffset": 0 + }, + "0x8e729b173f6c8036ac375dfedefd2030f3d4c6ff": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 7000000000000000000000, + "varSlot": 2104494240571363776297737054373290485854782030758442261328976060815853881555, + "varOffset": 0 + }, + "0x55013b0a7cda20e4d7b6c21018412029f3ec053c": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1030000000000000000000, + "varSlot": 69998584350550383103117206603206736423576348244870756820080223026607025812403, + "varOffset": 0 + }, + "0xaeaefe989c04559397ff6212fdd7c966b5a50bad": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 20000000000000000000000, + "varSlot": 19294972813472932640417699734357284472997981794532174276606469380592832469981, + "varOffset": 0 + }, + "0x80d9cfa54d8aaf334cb85a0f2969666547d78f60": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 76252387277778682816695780899446143527480336424341142162932017830192126691963, + "varOffset": 0 + }, + "0x663375d75007b9c879be400ecdccac9f1220d401": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 98711102807211725697260898066661583390888148401070814908160580108060758283027, + "varOffset": 0 + }, + "0xc44754f789b934d88723353d3643499b25b37370": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1428000000000000000000, + "varSlot": 66095430588015681429824754837968468441400305619675003359415982869870851741888, + "varOffset": 0 + }, + "0x8c593a3cfec5e05908e27f1a13e63a4ac237232b": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 20440625893609947063605055190832943107806593183366987747407880192145725518712, + "varOffset": 0 + }, + "0xe00a35ea4333eba15e72e89947c3e44a618e01a2": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 1000000000000000000000000, + "varSlot": 68163175617324546506698095363468887644537604488157691816749080589717453313500, + "varOffset": 0 + }, + "0x14fcc203b02017868ebd94d72cb4a8ebd6ed0040": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 4000000000000000000000, + "varSlot": 13935155707587386761778134294791446147060343009957336712648050303918665332027, + "varOffset": 0 + }, + "0x9700a6ce637914f47d93e2416e0aff813d083ff6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 110021256248911177599419502086125931746460670988492402573888736371764406483781, + "varOffset": 0 + }, + "0xf26a257f0aba02e4c0032e8507833bd58246da5f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 46305045577119235168482415127035309943007787450528068100539128766841661218117, + "varOffset": 0 + }, + "0x2e40056ad7456a14e01da9661b3e4fcbcd54e26a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 31771682945403059317302538934258465567165921279379986756218387091433484793713, + "varOffset": 0 + }, + "0x05219b69198f830dfd4b1e3f0dce7d192256a16f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 102000000000000000000000, + "varSlot": 106219867934554466461818584279024109832560921900210336066631145513244919151323, + "varOffset": 0 + }, + "0x5a806c0828487a385aad6acdf679227773c74539": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 82086470156215068584688891022447410240763696285916830599721484778423438155728, + "varOffset": 0 + }, + "0xc55c79dbe0e8a1811911806d827e8322fe19f7fc": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 108835573063396228635339460611237513687811504114288244102661099893944679407704, + "varOffset": 0 + }, + "0x0a169d33467ea36f6d03f3439270d33822e954c6": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 101428827357256304923517238128490300836175754421526119346877765653379913749057, + "varOffset": 0 + } + }, + "varSlot": 4, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "EnergyEfficientBitcoin", + "varName": "allowed", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": { + "0xa43b64d64d0c511ac169e58173591ebd165b3172": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xa5025faba6e70b84f74e9b1113e5f7f4e7f4859f": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 116143000000000000000000, + "varSlot": 72439149409893511001185959045781543809189427933813645387417089783125231812128, + "varOffset": 0 + } + }, + "varSlot": 83661050767354932848814123851162596907916421634317581733719781461605502217977, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + "varSlot": 5, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json new file mode 100644 index 0000000..26ab8f8 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json @@ -0,0 +1,331 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000", + "ori(_totalSupply) one of [100000000000]", + "ori(Sum(_allowances[msg.sender][...])) == 0", + "ori(Sum(_allowances[msg.sender][...])) one of [0]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000", + "ori(Sum(_balances[...])) one of [100000000000]", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "spender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "value > 0", + "value one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) >= ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) <= ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) <= value", + "ori(Sum(_allowances[msg.sender][...])) < value", + "ori(Sum(_allowances[msg.sender][...])) != value", + "msg.sender != spender", + "ori(_allowances[msg.sender][spender]) <= value", + "ori(_allowances[msg.sender][spender]) < value", + "ori(_allowances[msg.sender][spender]) != value" + ], + "postconditions": [ + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000]", + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply == 100000000000", + "_totalSupply one of [100000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000", + "Sum(_balances[...]) one of [100000000000]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of _balances[...] is one of [100000000000]", + "elem of _balances[...] is one of [0,100000000000]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(Sum(_allowances[msg.sender][...])) <= _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) <= Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(_allowances[msg.sender][spender]) <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] == value", + "_allowances[msg.sender][spender] >= value", + "_allowances[msg.sender][spender] <= value", + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])", + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000", + "ori(_totalSupply) one of [100000000000]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000", + "ori(Sum(_balances[...])) one of [100000000000]", + "msg.value == 0", + "msg.value one of [0]", + "amount > 0", + "amount == 100000000000", + "amount one of [100000000000]", + "recipient != 0", + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000", + "ori(_balances[msg.sender]) one of [100000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(_balances[recipient]) == 0", + "ori(_balances[recipient]) one of [0]", + "msg.sender != recipient", + "ori(Sum(_balances[...])) == ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) <= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])", + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ], + "postconditions": [ + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "_balances[msg.sender] == 0", + "_balances[msg.sender] one of [0]", + "elem of _balances[...] is one of [100000000000]", + "elem of _balances[...] is one of [0,100000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000", + "_totalSupply one of [100000000000]", + "_balances[recipient] > 0", + "_balances[recipient] == 100000000000", + "_balances[recipient] one of [100000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000", + "Sum(_balances[...]) one of [100000000000]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) == _balances[recipient]", + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) <= _balances[recipient]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_balances[msg.sender] <= _balances[recipient]", + "_balances[msg.sender] < _balances[recipient]", + "_balances[msg.sender] != _balances[recipient]", + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] == ori(_balances[recipient])", + "_balances[msg.sender] >= ori(_balances[recipient])", + "_balances[msg.sender] <= ori(_balances[recipient])", + "_balances[recipient] == ori(_balances[msg.sender])", + "_balances[recipient] >= ori(_balances[msg.sender])", + "_balances[recipient] <= ori(_balances[msg.sender])", + "_balances[recipient] == Sum(_balances[...])", + "_balances[recipient] >= Sum(_balances[...])", + "_balances[recipient] <= Sum(_balances[...])", + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])", + "ori(_balances[msg.sender]) == Sum(_balances[...])", + "ori(_balances[msg.sender]) >= Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000", + "ori(_totalSupply) one of [100000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000", + "ori(Sum(_balances[...])) one of [100000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000", + "Sum(_balances[...]) one of [100000000000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "_totalSupply > 0", + "_totalSupply == 100000000000", + "_totalSupply one of [100000000000]", + "elem of _balances[...] is one of [100000000000]", + "elem of _balances[...] is one of [0,100000000000]", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.json b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.json new file mode 100644 index 0000000..2ce7c44 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.json @@ -0,0 +1,395 @@ +{ + "variables": [ + { + "contractName": "EmaxClassic", + "varName": "_balances", + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x1730f5c4a668f54ba68cf18d1b62114157cfeca1": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000, + "varSlot": 96432478569228633719077683398517431093894308228623241102637369197084399630577, + "varOffset": 0 + }, + "0xb25e75478d6ef6c521f3ddbda7958e5031638e5a": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 0, + "varSlot": 214982515041565508129447542416532081954874773953431392777647904129402891873, + "varOffset": 0 + } + }, + "varSlot": 0, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + { + "contractName": "EmaxClassic", + "varName": "_allowances", + "varType": "mapping(address => mapping(address => uint256))", + "varBytes": 32, + "varValue": { + "0xb25e75478d6ef6c521f3ddbda7958e5031638e5a": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xc36442b4a4522e871399cd717abdd847ab11fe88": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 103399482453887468414862401411389904719652160272775386562104675350171570263799, + "varOffset": 0 + } + }, + "varSlot": 31574498955971699564380447321662489428577089587752054957569454797271568779128, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0x93576d1c949f1629a8c047022a2539efce6330cb": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000000000000000000000000000000, + "varSlot": 68418790787732240791127124283098044082587038121743536531926820035994473672990, + "varOffset": 0 + } + }, + "varSlot": 65258969219111202649399723216767632846424803250697319248882993247879823718808, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0x0ba48b0aea8f86423254b787461ca35c2496f2d0": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000000000000000000000000000000000000000000000000, + "varSlot": 43145866543738893429482304451061230436175895619839625810803221249729297329669, + "varOffset": 0 + } + }, + "varSlot": 97202112206295083193531928085461602326516374350200731842927722458906209816757, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0xcc642d6233727237acd57cb14c440af89f3bc87d": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 12454735262339028685673497788300318546938325848861819782564385797836738293947, + "varOffset": 0 + } + }, + "varSlot": 90332730288726060797593842869578560364617491009152550176682173254158650483541, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0x5666ba60d132edf7341166edb2e733d79b4bcde2": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 54688998861855284190053193365064116678314710209431751090606828218066486977104, + "varOffset": 0 + } + }, + "varSlot": 98978108273103548851373671905475479435132980904066207770521964629589667389962, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0x1f2159afcb737510deb559a3baa5b6e5d79bae64": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0x7a250d5630b4cf539739df2c5dacb4c659f2488d": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 29329974476240613277494142622732232930019955502129707549139518605131168132161, + "varOffset": 0 + } + }, + "varSlot": 16779342576841280177810517440621511315230785734959226046079763281999259608406, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + }, + "0x1730f5c4a668f54ba68cf18d1b62114157cfeca1": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": { + "0xc36442b4a4522e871399cd717abdd847ab11fe88": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "varSlot": 63701865563913388379165791044221239633683998569616659821211022038353676460293, + "varOffset": 0 + } + }, + "varSlot": 21220530857940905002521690508497612209541378683963289268040440482825781642400, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + "varSlot": 1, + "varOffset": 0, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "mapping(address => uint256)", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null, + "key_var_type": { + "contractName": null, + "varName": null, + "varType": "address", + "varBytes": 20, + "varValue": null, + "varSlot": null, + "varOffset": null + }, + "val_var_type": { + "contractName": null, + "varName": null, + "varType": "uint256", + "varBytes": 32, + "varValue": null, + "varSlot": null, + "varOffset": null + } + } + }, + { + "contractName": "EmaxClassic", + "varName": "_totalSupply", + "varType": "uint256", + "varBytes": 32, + "varValue": 100000000000, + "varSlot": 2, + "varOffset": 0 + }, + { + "contractName": "EmaxClassic", + "varName": "_name", + "varType": "string", + "varBytes": 32, + "varValue": "Ethereum Max Classic", + "varSlot": 3, + "varOffset": 0, + "byteSize": 20, + "toReadSlot": 3 + }, + { + "contractName": "EmaxClassic", + "varName": "_symbol", + "varType": "string", + "varBytes": 32, + "varValue": "EmaxC", + "varSlot": 4, + "varOffset": 0, + "byteSize": 5, + "toReadSlot": 4 + }, + { + "contractName": "EmaxClassic", + "varName": "_decimals", + "varType": "uint8", + "varBytes": 1, + "varValue": 6, + "varSlot": 5, + "varOffset": 0 + } + ] +} \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json new file mode 100644 index 0000000..7a5d5d9 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json @@ -0,0 +1,96 @@ +[ + { + "func": "cache(size)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "cache(size)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "update()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Q112) == 0", + "ori(Q112) one of [0]", + "ori(e10) == 0", + "ori(e10) one of [0]", + "ori(length) == 0", + "ori(length) one of [0]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0" + ], + "postconditions": [ + "Q112 == 0", + "Q112 one of [0]", + "e10 == 0", + "e10 one of [0]", + "length == 0", + "length one of [0]", + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112", + "e10 == ori(e10)", + "e10 >= ori(e10)", + "e10 <= ori(e10)", + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "update()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Q112) == 0", + "ori(Q112) one of [0]", + "ori(e10) == 0", + "ori(e10) one of [0]", + "ori(length) == 0", + "ori(length) one of [0]" + ], + "postconditions": [ + "Q112 == 0", + "Q112 one of [0]", + "e10 == 0", + "e10 one of [0]", + "length == 0", + "length one of [0]", + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112", + "e10 == ori(e10)", + "e10 >= ori(e10)", + "e10 <= ori(e10)", + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json new file mode 100644 index 0000000..30c6478 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json @@ -0,0 +1,1867 @@ +[ + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "amount > 0", + "amount == 79228162514000000000000000000", + "amount one of [79228162514000000000000000000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "spender != 0", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(_totalSupply) > 0", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [860260929152]", + "_totalSupply > 0", + "Sum(userDepoistTime[...]) > 0", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [51597976325]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "_amount > 0", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(userDepoistTime[msg.sender]) one of [0,1611890956,1612413709,1612672271,1612709011,1612516662]", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(_balances[msg.sender]) one of [0,494036168419,501354600,72,9986072971,9975667988]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(Sum(_balances[...])) <= ori(earnLowerlimit)", + "ori(Sum(_balances[...])) < ori(earnLowerlimit)", + "ori(Sum(_balances[...])) != ori(earnLowerlimit)", + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)", + "ori(earnLowerlimit) >= ori(_balances[msg.sender])", + "ori(earnLowerlimit) > ori(_balances[msg.sender])", + "ori(earnLowerlimit) != ori(_balances[msg.sender])", + "ori(earnLowerlimit) >= ori(_totalSupply)", + "ori(earnLowerlimit) > ori(_totalSupply)", + "ori(earnLowerlimit) != ori(_totalSupply)", + "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))", + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [860260929152]", + "_balances[msg.sender] > 0", + "_totalSupply > 0", + "Sum(userDepoistTime[...]) > 0", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [51597976325]", + "RestrictContractCall == true", + "userDepoistTime[msg.sender] > 0", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(earnLowerlimit)", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply", + "Sum(_balances[...]) >= ori(_balances[msg.sender])", + "Sum(_balances[...]) > ori(_balances[msg.sender])", + "Sum(_balances[...]) != ori(_balances[msg.sender])", + "Sum(_balances[...]) != earnLowerlimit", + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) > ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) <= _totalSupply", + "ori(Sum(_balances[...])) < _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply", + "ori(Sum(_balances[...])) <= earnLowerlimit", + "ori(Sum(_balances[...])) < earnLowerlimit", + "ori(Sum(_balances[...])) != earnLowerlimit", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)", + "ori(earnLowerlimit) != _balances[msg.sender]", + "ori(earnLowerlimit) != _totalSupply", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)", + "token == ori(token)", + "ori(userDepoistTime[msg.sender]) <= Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) < userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) != userDepoistTime[msg.sender]", + "fee3 == ori(fee3)", + "fee3 >= ori(fee3)", + "fee3 <= ori(fee3)", + "ori(governance) == governance", + "ori(controller) == controller", + "_balances[msg.sender] <= _totalSupply", + "_balances[msg.sender] >= ori(_balances[msg.sender])", + "_balances[msg.sender] > ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] != earnLowerlimit", + "_balances[msg.sender] != ori(_totalSupply)", + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply != earnLowerlimit", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "ori(_balances[msg.sender]) <= earnLowerlimit", + "ori(_balances[msg.sender]) < earnLowerlimit", + "ori(_balances[msg.sender]) != earnLowerlimit", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) > ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) != ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= userDepoistTime[msg.sender]", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)", + "earnLowerlimit >= ori(_totalSupply)", + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "ori(Sum(userDepoistTime[...])) <= userDepoistTime[msg.sender]", + "ori(Sum(userDepoistTime[...])) < userDepoistTime[msg.sender]" + ] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [82641458184]", + "_totalSupply > 0", + "_totalSupply one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [37084585504]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setEarnLowerlimit(_earnLowerlimit)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [50815436600,82641458184]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "_earnLowerlimit > 0", + "_earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) == 5", + "ori(fee1) one of [5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [3224014173,1611989982]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [50815436600,82641458184]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(earnLowerlimit) <= _earnLowerlimit", + "ori(earnLowerlimit) < _earnLowerlimit", + "ori(earnLowerlimit) != _earnLowerlimit", + "msg.sender == ori(governance)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [50815436600,82641458184]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [50815436600]", + "elem of _balances[...] is one of [50815436600,31826021500,84]", + "_totalSupply > 0", + "_totalSupply one of [50815436600,82641458184]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [3224014173,1611989982]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 == 5", + "fee1 one of [5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [3224014173]", + "elem of userDepoistTime[...] is one of [1611989982,1612024191]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(earnLowerlimit) < earnLowerlimit", + "ori(earnLowerlimit) != earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "msg.sender == governance", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)", + "_earnLowerlimit == earnLowerlimit", + "_earnLowerlimit >= earnLowerlimit", + "_earnLowerlimit <= earnLowerlimit", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setEarnLowerlimit(_earnLowerlimit)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeAddress(fadd)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeAddress(fadd)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeRatio(fees)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1310289998969", + "ori(Sum(_balances[...])) one of [1310289998969]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) == 5", + "ori(fee1) one of [5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 41922035526", + "ori(Sum(userDepoistTime[...])) one of [41922035526]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1310289998969", + "ori(_totalSupply) one of [1310289998969]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(feeMax) >= ori(fee2)", + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)", + "ori(feeMax) >= ori(fee3)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)", + "ori(feeMax) >= ori(fee1)", + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)", + "ori(fee2) >= ori(fee3)", + "ori(fee2) > ori(fee3)", + "ori(fee2) != ori(fee3)", + "ori(fee2) <= ori(fee1)", + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)", + "ori(fee3) <= ori(fee1)", + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)", + "msg.sender == ori(timelock)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1310289998969", + "Sum(_balances[...]) one of [1310289998969]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [1310289998969]", + "elem of _balances[...] is one of [0,4,6,9,17,23,26,29,36,43,47,73,75,1300417580500,84,88,92,93,97,98,9872417260]", + "_totalSupply > 0", + "_totalSupply == 1310289998969", + "_totalSupply one of [1310289998969]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 41922035526", + "Sum(userDepoistTime[...]) one of [41922035526]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 == 10", + "fee1 one of [10]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [41922035526]", + "elem of userDepoistTime[...] is one of [1612433282,1612411910,1612393607,1612411674,1612422047,1612497702,1612414375,1612493096,1612411957,1612410556,1612413117,1612399811,1612435272,1612419407,1612421072,1612459224,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612444665,1612414461,1612024191]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(feeMax) >= fee3", + "ori(feeMax) > fee3", + "ori(feeMax) != fee3", + "ori(feeMax) >= fee2", + "ori(feeMax) > fee2", + "ori(feeMax) != fee2", + "ori(feeMax) >= fee1", + "ori(feeMax) > fee1", + "ori(feeMax) != fee1", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) >= fee3", + "ori(fee2) > fee3", + "ori(fee2) != fee3", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(fee2) <= fee1", + "ori(fee2) < fee1", + "ori(fee2) != fee1", + "ori(fee2) <= feeMax", + "ori(fee2) < feeMax", + "ori(fee2) != feeMax", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(fee3) <= fee2", + "ori(fee3) < fee2", + "ori(fee3) != fee2", + "ori(fee3) <= fee1", + "ori(fee3) < fee1", + "ori(fee3) != fee1", + "ori(fee3) <= feeMax", + "ori(fee3) < feeMax", + "ori(fee3) != feeMax", + "fee3 <= fee2", + "fee3 < fee2", + "fee3 != fee2", + "fee3 <= fee1", + "fee3 < fee1", + "fee3 != fee1", + "fee3 <= feeMax", + "fee3 < feeMax", + "fee3 != feeMax", + "fee3 <= ori(fee1)", + "fee3 < ori(fee1)", + "fee3 != ori(fee1)", + "msg.sender == timelock", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee2 <= fee1", + "fee2 < fee1", + "fee2 != fee1", + "fee2 <= feeMax", + "fee2 < feeMax", + "fee2 != feeMax", + "fee2 <= ori(fee1)", + "fee2 < ori(fee1)", + "fee2 != ori(fee1)", + "fee1 <= feeMax", + "fee1 < feeMax", + "fee1 != feeMax", + "fee1 >= ori(fee1)", + "fee1 > ori(fee1)", + "fee1 != ori(fee1)", + "feeMax >= ori(fee1)", + "feeMax > ori(fee1)", + "feeMax != ori(fee1)", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeRatio(fees)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 851093071954", + "ori(Sum(_balances[...])) one of [851093071954]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "_governance != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) == 5", + "ori(fee1) one of [5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 32247272285", + "ori(Sum(userDepoistTime[...])) one of [32247272285]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 851093071954", + "ori(_totalSupply) one of [851093071954]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "_governance != msg.sender", + "_governance != ori(governance)", + "msg.sender == ori(governance)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 851093071954", + "Sum(_balances[...]) one of [851093071954]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [851093071954]", + "elem of _balances[...] is one of [0,4,6,9,18,23,26,29,36,73,75,77,84,115213479893,88,92,93,97,1373058547,734506532600]", + "_totalSupply > 0", + "_totalSupply == 851093071954", + "_totalSupply one of [851093071954]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 32247272285", + "Sum(userDepoistTime[...]) one of [32247272285]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 == 5", + "fee1 one of [5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [32247272285]", + "elem of userDepoistTime[...] is one of [1612411910,1612393607,1612411674,1612422047,1612414375,1612411957,1612410556,1612413117,1612399811,1612419407,1612421072,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612414461,1612024191]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)", + "_governance == governance", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "msg.sender != governance", + "ori(governance) != governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setRestrictContractCall(enabled)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setRestrictContractCall(enabled)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimeLock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimeLock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "amount > 0", + "amount one of [4673850400,19974784100,120385957800,499026405900,31826021500]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(_balances[recipient]) > 0", + "ori(_balances[recipient]) one of [36,77,18,84,88]", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "recipient != 0", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [38697044728,53210802285,43534554260,3224014173]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "_balances[recipient] > 0", + "_balances[recipient] one of [499026405988,120385957836,4673850477,31826021584,19974784118]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [1003539015686]", + "_totalSupply > 0", + "_totalSupply one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [38697044728,53210802285,43534554260,3224014173]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [38697044728]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]", + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)", + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "amount > 0", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(RestrictContractCall) == true", + "ori(Sum(_balances[...])) > 0", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(Sum(_allowances[sender][...])) > 0", + "ori(Sum(_allowances[sender][...])) one of [79228162513999999970070829900,79228162513999999968173978500,79228162514000000000000000000]", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "sender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "recipient != 0", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(_totalSupply) > 0", + "ori(_balances[sender]) > 0", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "amount <= ori(Sum(_allowances[sender][...]))", + "amount < ori(Sum(_allowances[sender][...]))", + "amount != ori(Sum(_allowances[sender][...]))", + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])", + "ori(Sum(_balances[...])) >= ori(_balances[sender])", + "ori(Sum(_balances[...])) > ori(_balances[sender])", + "ori(Sum(_balances[...])) != ori(_balances[sender])", + "ori(_balances[recipient]) != ori(_balances[sender])", + "sender != recipient" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_allowances[sender][...]) > 0", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "_balances[recipient] > 0", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [860260929152]", + "_totalSupply > 0", + "Sum(userDepoistTime[...]) > 0", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "elem of _allowances[sender][...] is one of [79228162513999999968173978500]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [51597976325]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) >= _balances[sender]", + "Sum(_balances[...]) > _balances[sender]", + "Sum(_balances[...]) != _balances[sender]", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]", + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])", + "Sum(_balances[...]) >= ori(_balances[sender])", + "Sum(_balances[...]) > ori(_balances[sender])", + "Sum(_balances[...]) != ori(_balances[sender])", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "_balances[sender] <= ori(Sum(_balances[...]))", + "_balances[sender] < ori(Sum(_balances[...]))", + "_balances[sender] != ori(Sum(_balances[...]))", + "_balances[sender] <= _balances[recipient]", + "_balances[sender] < _balances[recipient]", + "_balances[sender] != _balances[recipient]", + "_balances[sender] != ori(_balances[recipient])", + "_balances[sender] <= ori(_balances[sender])", + "_balances[sender] < ori(_balances[sender])", + "_balances[sender] != ori(_balances[sender])", + "amount <= Sum(_allowances[sender][...])", + "amount < Sum(_allowances[sender][...])", + "amount != Sum(_allowances[sender][...])", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "Sum(_allowances[sender][...]) <= ori(Sum(_allowances[sender][...]))", + "Sum(_allowances[sender][...]) < ori(Sum(_allowances[sender][...]))", + "Sum(_allowances[sender][...]) != ori(Sum(_allowances[sender][...]))", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)", + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)", + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[sender])", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) <= ori(_balances[sender])", + "ori(_balances[recipient]) < ori(_balances[sender])" + ], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(userDepoistTime[msg.sender]) > 0", + "ori(userDepoistTime[msg.sender]) one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) one of [499026405988,120385957836,4673850477,31826021584,19974784118,262979296856]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [38697044728,43534554260,53210802285,33859705567]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) > ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) != ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)", + "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))", + "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))", + "ori(userDepoistTime[msg.sender]) != ori(Sum(userDepoistTime[...]))", + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) < ori(_totalSupply)", + "ori(_balances[msg.sender]) != ori(_totalSupply)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [1408314583361]", + "_balances[msg.sender] == 0", + "_balances[msg.sender] one of [0]", + "_totalSupply > 0", + "_totalSupply one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [38697044728,43534554260,53210802285,33859705567]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [38697044728]", + "RestrictContractCall == true", + "userDepoistTime[msg.sender] > 0", + "userDepoistTime[msg.sender] one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) != _balances[msg.sender]", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply", + "Sum(_balances[...]) >= ori(_balances[msg.sender])", + "Sum(_balances[...]) > ori(_balances[msg.sender])", + "Sum(_balances[...]) != ori(_balances[msg.sender])", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) > _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)", + "token == ori(token)", + "ori(userDepoistTime[msg.sender]) <= Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) >= userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]", + "fee3 == ori(fee3)", + "fee3 >= ori(fee3)", + "fee3 <= ori(fee3)", + "ori(governance) == governance", + "ori(controller) == controller", + "_balances[msg.sender] <= _totalSupply", + "_balances[msg.sender] < _totalSupply", + "_balances[msg.sender] != _totalSupply", + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] <= ori(_totalSupply)", + "_balances[msg.sender] < ori(_totalSupply)", + "_balances[msg.sender] != ori(_totalSupply)", + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= userDepoistTime[msg.sender]", + "Sum(userDepoistTime[...]) > userDepoistTime[msg.sender]", + "Sum(userDepoistTime[...]) != userDepoistTime[msg.sender]", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(Sum(userDepoistTime[...])) >= userDepoistTime[msg.sender]", + "ori(Sum(userDepoistTime[...])) > userDepoistTime[msg.sender]", + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(feeMax) >= ori(fee2)", + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)", + "ori(feeMax) >= ori(fee3)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)", + "ori(feeMax) >= ori(fee1)", + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)", + "ori(fee2) >= ori(fee3)", + "ori(fee2) > ori(fee3)", + "ori(fee2) != ori(fee3)", + "ori(fee2) <= ori(fee1)", + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)", + "ori(Sum(_balances[...])) != ori(earnLowerlimit)", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)", + "ori(earnLowerlimit) != ori(_totalSupply)", + "ori(fee3) <= ori(fee1)", + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" + ], + "postconditions": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [0]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [0]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) != ori(earnLowerlimit)", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply", + "Sum(_balances[...]) != earnLowerlimit", + "ori(feeMax) >= fee3", + "ori(feeMax) > fee3", + "ori(feeMax) != fee3", + "ori(feeMax) >= fee2", + "ori(feeMax) > fee2", + "ori(feeMax) != fee2", + "ori(feeMax) >= fee1", + "ori(feeMax) > fee1", + "ori(feeMax) != fee1", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) >= fee3", + "ori(fee2) > fee3", + "ori(fee2) != fee3", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(fee2) <= fee1", + "ori(fee2) < fee1", + "ori(fee2) != fee1", + "ori(fee2) <= feeMax", + "ori(fee2) < feeMax", + "ori(fee2) != feeMax", + "ori(Sum(_balances[...])) <= earnLowerlimit", + "ori(Sum(_balances[...])) < earnLowerlimit", + "ori(Sum(_balances[...])) != earnLowerlimit", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)", + "ori(earnLowerlimit) != _totalSupply", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(fee3) <= fee2", + "ori(fee3) < fee2", + "ori(fee3) != fee2", + "ori(fee3) <= fee1", + "ori(fee3) < fee1", + "ori(fee3) != fee1", + "ori(fee3) <= feeMax", + "ori(fee3) < feeMax", + "ori(fee3) != feeMax", + "fee3 <= fee2", + "fee3 < fee2", + "fee3 != fee2", + "fee3 <= fee1", + "fee3 < fee1", + "fee3 != fee1", + "fee3 <= feeMax", + "fee3 < feeMax", + "fee3 != feeMax", + "fee3 <= ori(fee1)", + "fee3 < ori(fee1)", + "fee3 != ori(fee1)", + "ori(controller) == controller", + "_totalSupply != earnLowerlimit", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee2 <= fee1", + "fee2 < fee1", + "fee2 != fee1", + "fee2 <= feeMax", + "fee2 < feeMax", + "fee2 != feeMax", + "fee2 <= ori(fee1)", + "fee2 < ori(fee1)", + "fee2 != ori(fee1)", + "fee1 <= feeMax", + "fee1 < feeMax", + "fee1 != feeMax", + "fee1 >= ori(fee1)", + "earnLowerlimit >= ori(_totalSupply)", + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)", + "feeMax >= ori(fee1)", + "feeMax > ori(fee1)", + "feeMax != ori(fee1)", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "falsified_preconditions": [ + "ori(Sum(_balances[...])) <= ori(earnLowerlimit)", + "ori(Sum(_balances[...])) < ori(earnLowerlimit)", + "ori(earnLowerlimit) >= ori(_totalSupply)", + "ori(earnLowerlimit) > ori(_totalSupply)" + ], + "falsified_postconditions": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= _totalSupply", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(governance) == governance", + "_totalSupply >= ori(_totalSupply)", + "fee1 == ori(fee1)", + "fee1 <= ori(fee1)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json new file mode 100644 index 0000000..423c987 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json @@ -0,0 +1,72 @@ +[ + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(sushi) != 0", + "ori(factory) != 0", + "msg.sender != 0", + "ori(weth) != 0", + "token0 != 0", + "ori(bar) != 0", + "token1 != 0", + "ori(sushi) != ori(weth)", + "ori(sushi) != token0" + ], + "postconditions": [ + "weth != 0", + "sushi != 0", + "bar != 0", + "factory != 0", + "ori(sushi) != weth", + "ori(sushi) == sushi", + "ori(factory) == factory", + "ori(weth) == weth", + "ori(weth) != sushi", + "weth != sushi", + "token0 != sushi", + "bar == ori(bar)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(sushi) != 0", + "ori(factory) != 0", + "ori(weth) != 0", + "ori(bar) != 0", + "ori(sushi) != ori(weth)" + ], + "postconditions": [ + "weth != 0", + "sushi != 0", + "bar != 0", + "factory != 0", + "ori(sushi) != weth", + "ori(sushi) == sushi", + "ori(factory) == factory", + "ori(weth) == weth", + "ori(weth) != sushi", + "weth != sushi", + "bar == ori(bar)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json new file mode 100644 index 0000000..bfc55c5 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json @@ -0,0 +1,1124 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_owner) != 0", + "msg.sender != 0", + "ori(lastAccrueTime) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "msg.value > 0", + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) >= ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(_totalSupply) >= ori(reservePool)", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_totalSupply) != ori(_guardCounter)", + "ori(reservePool) <= ori(Sum(_balances[...]))", + "ori(reservePool) != ori(_guardCounter)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_guardCounter)", + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "_totalSupply > 0", + "_balances[msg.sender] > 0", + "elem of _balances[...] is one of [10000000000000000000]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(glbDebtVal) != _totalSupply", + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) != _balances[msg.sender]", + "ori(glbDebtVal) != Sum(_balances[...])", + "ori(glbDebtVal) != _guardCounter", + "ori(glbDebtVal) <= glbDebtVal", + "ori(_owner) == _owner", + "ori(_totalSupply) <= _totalSupply", + "ori(_totalSupply) < _totalSupply", + "ori(_totalSupply) != _totalSupply", + "ori(_totalSupply) >= reservePool", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) != _guardCounter", + "ori(reservePool) <= _totalSupply", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply", + "ori(reservePool) <= reservePool", + "ori(reservePool) != _balances[msg.sender]", + "ori(reservePool) <= Sum(_balances[...])", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])", + "ori(reservePool) != _guardCounter", + "ori(reservePool) <= glbDebtVal", + "lastAccrueTime >= ori(lastAccrueTime)", + "glbDebtShare == ori(glbDebtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "glbDebtShare <= ori(glbDebtShare)", + "_totalSupply >= reservePool", + "_totalSupply > reservePool", + "_totalSupply != reservePool", + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply >= _guardCounter", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter", + "_totalSupply >= ori(_guardCounter)", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)", + "_totalSupply != glbDebtVal", + "reservePool <= ori(Sum(_balances[...]))", + "reservePool != _balances[msg.sender]", + "reservePool <= Sum(_balances[...])", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])", + "reservePool != _guardCounter", + "reservePool != ori(_guardCounter)", + "reservePool <= glbDebtVal", + "ori(_balances[msg.sender]) <= _balances[msg.sender]", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) != _guardCounter", + "ori(_balances[msg.sender]) <= glbDebtVal", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) < Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])", + "ori(Sum(_balances[...])) != _guardCounter", + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] >= _guardCounter", + "_balances[msg.sender] > _guardCounter", + "_balances[msg.sender] != _guardCounter", + "_balances[msg.sender] >= ori(_guardCounter)", + "_balances[msg.sender] > ori(_guardCounter)", + "_balances[msg.sender] != ori(_guardCounter)", + "_balances[msg.sender] != glbDebtVal", + "Sum(_balances[...]) >= _guardCounter", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) != _guardCounter", + "Sum(_balances[...]) >= ori(_guardCounter)", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != ori(_guardCounter)", + "Sum(_balances[...]) != glbDebtVal", + "nextPositionID == ori(nextPositionID)", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(nextPositionID)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter >= ori(_guardCounter)", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)", + "_guardCounter != glbDebtVal", + "config == ori(config)", + "ori(_guardCounter) != glbDebtVal" + ], + "falsified_preconditions": [ + "ori(_balances[msg.sender]) == 0", + "ori(glbDebtVal) <= ori(_totalSupply)", + "ori(glbDebtVal) <= ori(Sum(_balances[...]))", + "ori(reservePool) >= ori(_balances[msg.sender])", + "ori(_balances[msg.sender]) <= ori(_guardCounter)", + "ori(_balances[msg.sender]) < ori(_guardCounter)" + ], + "falsified_postconditions": [ + "ori(glbDebtVal) <= _totalSupply", + "ori(glbDebtVal) < _totalSupply", + "ori(glbDebtVal) <= Sum(_balances[...])", + "ori(glbDebtVal) < Sum(_balances[...])", + "ori(_totalSupply) >= glbDebtVal", + "ori(reservePool) <= _balances[msg.sender]", + "ori(reservePool) < _balances[msg.sender]", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)", + "_totalSupply >= glbDebtVal", + "_totalSupply > glbDebtVal", + "reservePool >= ori(_balances[msg.sender])", + "reservePool <= _balances[msg.sender]", + "reservePool < _balances[msg.sender]", + "ori(_balances[msg.sender]) <= _guardCounter", + "ori(_balances[msg.sender]) < _guardCounter", + "ori(Sum(_balances[...])) >= glbDebtVal", + "Sum(_balances[...]) >= glbDebtVal", + "Sum(_balances[...]) > glbDebtVal" + ] + }, + { + "func": "deposit()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "kill(id)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "kill(id)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "recover(token,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "recover(token,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "reduceReserve(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "reduceReserve(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "updateConfig(_config)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(glbDebtVal) > 0", + "ori(glbDebtVal) == 14854681992016139228071", + "ori(glbDebtVal) one of [14854681992016139228071]", + "ori(_owner) != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 20424063187886226982599", + "ori(_totalSupply) one of [20424063187886226982599]", + "ori(reservePool) > 0", + "ori(reservePool) == 148922433659474232", + "ori(reservePool) one of [148922433659474232]", + "msg.sender != 0", + "ori(lastAccrueTime) > 0", + "ori(lastAccrueTime) == 1602231144", + "ori(lastAccrueTime) one of [1602231144]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 20424063187886226982599", + "ori(Sum(_balances[...])) one of [20424063187886226982599]", + "_config != 0", + "ori(nextPositionID) > 0", + "ori(nextPositionID) == 198", + "ori(nextPositionID) one of [198]", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "ori(_guardCounter) == 376", + "ori(_guardCounter) one of [376]", + "ori(glbDebtShare) > 0", + "ori(glbDebtShare) == 14846441340661167278357", + "ori(glbDebtShare) one of [14846441340661167278357]", + "msg.value == 0", + "msg.value one of [0]", + "_config != ori(config)" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "lastAccrueTime == 1602231144", + "lastAccrueTime one of [1602231144]", + "glbDebtShare > 0", + "glbDebtShare == 14846441340661167278357", + "glbDebtShare one of [14846441340661167278357]", + "_totalSupply > 0", + "_totalSupply == 20424063187886226982599", + "_totalSupply one of [20424063187886226982599]", + "reservePool > 0", + "reservePool == 148922433659474232", + "reservePool one of [148922433659474232]", + "elem of _balances[...] is one of [20424063187886226982599]", + "elem of _balances[...] is one of [0,207595542558178816,2499288059837974695884,4999207308361928720,76989635665897056757,2099694672502978261129,2499278042403573792,23994090941122685480,348905267647927528350,4057048061363058246,19994236218049902145,12008096684355041865,3498972866121430093,399952049758648104376,379892644249751734723,7331074273148906603,499926721158544918445,28995014649187331200,155534040163110543,3419055614113489263301,199945786064955255869,99984922215138066540,11940731249496242,9998648791479301808,99997986090636984,4999319919409024702,75278599312019471008,20004274794429721786,22994220695367180988,3998913359845597384,9497882822697579207,1849753685077835228080,1499693766495532245,9998132539448897243,2999161464973501151,122963923838163536554,9998602921031189222,249933540782134667412,8748256010480108303,199870887498978286782,74979877460347423478,2999622873234109207,74989718060626759416,1999465504916710427064,499908735865805608,1241962116152060713,401109492287907629,73980033536100457236,29886166173581944622,359442063782612289,39988232675288000305,999713726897813322,953321242468317018,22006669614395381074,330342581938126080214,401583241182296934,1999553099697343335,4998650914601382245,899807013883311181285,349967173402743561941,4999141914029901165,999808531376531825,19996452589694343531,2999199985428679028,100983359711349393234,86984751696672373087,299941269738273242381,2999577045009891728,2099550583177882008,156757421593122201,18497345372475515793,2999475445556411802,99980055585089435,282421952098266234655,99985734138462998901,499892501497066034892,37108231016789653399,7997832369182641578,1427667316733088179,2199682035744654782,499855855955010505,9997205556608119756,19994928949477146578,4018969067458326495,19995027751107133405,1999420721406120521858,177960697518442657180,39994654851654382555,999861461461553649,99985182676534263,1999560000545579004,29998406400582478834]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 20424063187886226982599", + "Sum(_balances[...]) one of [20424063187886226982599]", + "nextPositionID > 0", + "nextPositionID == 198", + "nextPositionID one of [198]", + "_guardCounter > 0", + "_guardCounter == 376", + "_guardCounter one of [376]", + "config != 0", + "glbDebtVal > 0", + "glbDebtVal == 14854681992016139228071", + "glbDebtVal one of [14854681992016139228071]", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(glbDebtVal) == glbDebtVal", + "ori(glbDebtVal) >= glbDebtVal", + "ori(glbDebtVal) <= glbDebtVal", + "ori(_owner) == _owner", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(reservePool) == reservePool", + "ori(reservePool) >= reservePool", + "ori(reservePool) <= reservePool", + "lastAccrueTime == ori(lastAccrueTime)", + "lastAccrueTime >= ori(lastAccrueTime)", + "lastAccrueTime <= ori(lastAccrueTime)", + "glbDebtShare == ori(glbDebtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "glbDebtShare <= ori(glbDebtShare)", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_config == config", + "nextPositionID == ori(nextPositionID)", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(nextPositionID)", + "_guardCounter == ori(_guardCounter)", + "_guardCounter >= ori(_guardCounter)", + "_guardCounter <= ori(_guardCounter)", + "config != ori(config)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "updateConfig(_config)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(share)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(glbDebtVal) > 0", + "ori(_owner) != 0", + "ori(_totalSupply) > 0", + "ori(reservePool) > 0", + "msg.sender != 0", + "share > 0", + "ori(lastAccrueTime) > 0", + "ori(_balances[msg.sender]) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "ori(glbDebtShare) > 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(glbDebtVal) != ori(_totalSupply)", + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) > ori(reservePool)", + "ori(glbDebtVal) != ori(reservePool)", + "ori(glbDebtVal) >= ori(_balances[msg.sender])", + "ori(glbDebtVal) > ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(Sum(_balances[...]))", + "ori(glbDebtVal) >= ori(_guardCounter)", + "ori(glbDebtVal) > ori(_guardCounter)", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(_totalSupply) >= ori(reservePool)", + "ori(_totalSupply) > ori(reservePool)", + "ori(_totalSupply) != ori(reservePool)", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(_guardCounter)", + "ori(_totalSupply) > ori(_guardCounter)", + "ori(_totalSupply) != ori(_guardCounter)", + "ori(reservePool) != ori(_balances[msg.sender])", + "ori(reservePool) <= ori(Sum(_balances[...]))", + "ori(reservePool) < ori(Sum(_balances[...]))", + "ori(reservePool) != ori(Sum(_balances[...]))", + "ori(reservePool) >= ori(_guardCounter)", + "ori(reservePool) > ori(_guardCounter)", + "ori(reservePool) != ori(_guardCounter)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(_guardCounter)", + "ori(_balances[msg.sender]) > ori(_guardCounter)", + "ori(_balances[msg.sender]) != ori(_guardCounter)", + "ori(Sum(_balances[...])) >= ori(_guardCounter)", + "ori(Sum(_balances[...])) > ori(_guardCounter)", + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "glbDebtShare > 0", + "_totalSupply > 0", + "reservePool > 0", + "_balances[msg.sender] one of [0,999710360703060260929,65205495417134526340]", + "elem of _balances[...] is one of [20424063187886226982599]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "glbDebtVal > 0", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(glbDebtVal) != _totalSupply", + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) > reservePool", + "ori(glbDebtVal) != reservePool", + "ori(glbDebtVal) >= _balances[msg.sender]", + "ori(glbDebtVal) > _balances[msg.sender]", + "ori(glbDebtVal) != _balances[msg.sender]", + "ori(glbDebtVal) != Sum(_balances[...])", + "ori(glbDebtVal) >= _guardCounter", + "ori(glbDebtVal) > _guardCounter", + "ori(glbDebtVal) != _guardCounter", + "ori(glbDebtVal) <= glbDebtVal", + "ori(glbDebtVal) < glbDebtVal", + "ori(glbDebtVal) != glbDebtVal", + "ori(_owner) == _owner", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) > _totalSupply", + "ori(_totalSupply) != _totalSupply", + "ori(_totalSupply) >= reservePool", + "ori(_totalSupply) > reservePool", + "ori(_totalSupply) != reservePool", + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) >= _guardCounter", + "ori(_totalSupply) > _guardCounter", + "ori(_totalSupply) != _guardCounter", + "ori(_totalSupply) != glbDebtVal", + "ori(reservePool) <= _totalSupply", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply", + "ori(reservePool) <= reservePool", + "ori(reservePool) < reservePool", + "ori(reservePool) != reservePool", + "ori(reservePool) != _balances[msg.sender]", + "ori(reservePool) <= Sum(_balances[...])", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])", + "ori(reservePool) >= _guardCounter", + "ori(reservePool) > _guardCounter", + "ori(reservePool) != _guardCounter", + "ori(reservePool) <= glbDebtVal", + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal", + "lastAccrueTime >= ori(lastAccrueTime)", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)", + "glbDebtShare == ori(glbDebtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "glbDebtShare <= ori(glbDebtShare)", + "_totalSupply >= reservePool", + "_totalSupply > reservePool", + "_totalSupply != reservePool", + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply >= _guardCounter", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter", + "_totalSupply >= ori(_guardCounter)", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)", + "_totalSupply != glbDebtVal", + "reservePool != ori(_balances[msg.sender])", + "reservePool <= ori(Sum(_balances[...]))", + "reservePool < ori(Sum(_balances[...]))", + "reservePool != ori(Sum(_balances[...]))", + "reservePool != _balances[msg.sender]", + "reservePool <= Sum(_balances[...])", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])", + "reservePool >= _guardCounter", + "reservePool > _guardCounter", + "reservePool != _guardCounter", + "reservePool >= ori(_guardCounter)", + "reservePool > ori(_guardCounter)", + "reservePool != ori(_guardCounter)", + "reservePool <= glbDebtVal", + "reservePool < glbDebtVal", + "reservePool != glbDebtVal", + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) >= _guardCounter", + "ori(_balances[msg.sender]) > _guardCounter", + "ori(_balances[msg.sender]) != _guardCounter", + "ori(_balances[msg.sender]) <= glbDebtVal", + "ori(_balances[msg.sender]) < glbDebtVal", + "ori(_balances[msg.sender]) != glbDebtVal", + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) > Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])", + "ori(Sum(_balances[...])) >= _guardCounter", + "ori(Sum(_balances[...])) > _guardCounter", + "ori(Sum(_balances[...])) != _guardCounter", + "ori(Sum(_balances[...])) != glbDebtVal", + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] != _guardCounter", + "_balances[msg.sender] != ori(_guardCounter)", + "_balances[msg.sender] <= glbDebtVal", + "_balances[msg.sender] < glbDebtVal", + "_balances[msg.sender] != glbDebtVal", + "Sum(_balances[...]) >= _guardCounter", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) != _guardCounter", + "Sum(_balances[...]) >= ori(_guardCounter)", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != ori(_guardCounter)", + "Sum(_balances[...]) != glbDebtVal", + "nextPositionID == ori(nextPositionID)", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(nextPositionID)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter >= ori(_guardCounter)", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)", + "_guardCounter <= glbDebtVal", + "_guardCounter < glbDebtVal", + "_guardCounter != glbDebtVal", + "config == ori(config)", + "ori(_guardCounter) <= glbDebtVal", + "ori(_guardCounter) < glbDebtVal", + "ori(_guardCounter) != glbDebtVal" + ], + "falsified_preconditions": [ + "ori(glbDebtVal) <= ori(_totalSupply)", + "ori(glbDebtVal) < ori(_totalSupply)", + "ori(glbDebtVal) <= ori(Sum(_balances[...]))", + "ori(glbDebtVal) < ori(Sum(_balances[...]))", + "ori(reservePool) <= ori(_balances[msg.sender])", + "ori(reservePool) < ori(_balances[msg.sender])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] == 0", + "ori(glbDebtVal) <= _totalSupply", + "ori(glbDebtVal) < _totalSupply", + "ori(glbDebtVal) <= Sum(_balances[...])", + "ori(glbDebtVal) < Sum(_balances[...])", + "ori(_totalSupply) >= glbDebtVal", + "ori(_totalSupply) > glbDebtVal", + "ori(reservePool) >= _balances[msg.sender]", + "ori(reservePool) > _balances[msg.sender]", + "_totalSupply >= glbDebtVal", + "_totalSupply > glbDebtVal", + "reservePool <= ori(_balances[msg.sender])", + "reservePool < ori(_balances[msg.sender])", + "reservePool >= _balances[msg.sender]", + "reservePool > _balances[msg.sender]", + "ori(Sum(_balances[...])) >= glbDebtVal", + "ori(Sum(_balances[...])) > glbDebtVal", + "_balances[msg.sender] <= _guardCounter", + "_balances[msg.sender] < _guardCounter", + "_balances[msg.sender] <= ori(_guardCounter)", + "_balances[msg.sender] < ori(_guardCounter)", + "Sum(_balances[...]) >= glbDebtVal", + "Sum(_balances[...]) > glbDebtVal" + ] + }, + { + "func": "withdraw(share)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawReserve(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawReserve(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "work(id,goblin,loan,maxReturn,data)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_owner) != 0", + "maxReturn one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "goblin != 0", + "msg.sender != 0", + "ori(lastAccrueTime) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "data != \"\"", + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) >= id", + "ori(glbDebtVal) != ori(nextPositionID)", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(glbDebtVal) >= ori(glbDebtShare)", + "ori(reservePool) >= id", + "ori(reservePool) != loan", + "ori(reservePool) != ori(nextPositionID)", + "ori(reservePool) != ori(_guardCounter)", + "ori(reservePool) <= ori(glbDebtShare)", + "goblin != msg.sender", + "id <= ori(nextPositionID)", + "id < ori(nextPositionID)", + "id != ori(nextPositionID)", + "id <= ori(_guardCounter)", + "id < ori(_guardCounter)", + "id != ori(_guardCounter)", + "id <= ori(glbDebtShare)", + "loan != ori(nextPositionID)", + "loan != ori(_guardCounter)", + "ori(nextPositionID) <= ori(_guardCounter)", + "ori(nextPositionID) < ori(_guardCounter)", + "ori(nextPositionID) != ori(_guardCounter)", + "ori(nextPositionID) != ori(glbDebtShare)", + "ori(_guardCounter) != ori(glbDebtShare)" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "glbDebtShare > 0", + "_totalSupply > 0", + "elem of _balances[...] is one of [10000000000000000000]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "glbDebtVal > 0", + "positions[id].goblin == ori(positions[id].goblin)", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(glbDebtVal) != glbDebtShare", + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) != nextPositionID", + "ori(glbDebtVal) != _guardCounter", + "ori(_owner) == _owner", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(reservePool) <= glbDebtShare", + "ori(reservePool) < glbDebtShare", + "ori(reservePool) != glbDebtShare", + "ori(reservePool) <= reservePool", + "ori(reservePool) != nextPositionID", + "ori(reservePool) != _guardCounter", + "ori(reservePool) <= glbDebtVal", + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal", + "lastAccrueTime >= ori(lastAccrueTime)", + "positions[id].debtShare <= ori(positions[id].debtShare)", + "id <= glbDebtShare", + "id < glbDebtShare", + "id != glbDebtShare", + "id <= reservePool", + "id <= nextPositionID", + "id < nextPositionID", + "id != nextPositionID", + "id <= _guardCounter", + "id < _guardCounter", + "id != _guardCounter", + "id <= glbDebtVal", + "id < glbDebtVal", + "id != glbDebtVal", + "glbDebtShare >= reservePool", + "glbDebtShare > reservePool", + "glbDebtShare != reservePool", + "glbDebtShare >= loan", + "glbDebtShare >= nextPositionID", + "glbDebtShare > nextPositionID", + "glbDebtShare != nextPositionID", + "glbDebtShare >= _guardCounter", + "glbDebtShare > _guardCounter", + "glbDebtShare != _guardCounter", + "glbDebtShare >= ori(nextPositionID)", + "glbDebtShare > ori(nextPositionID)", + "glbDebtShare != ori(nextPositionID)", + "glbDebtShare >= ori(_guardCounter)", + "glbDebtShare > ori(_guardCounter)", + "glbDebtShare != ori(_guardCounter)", + "glbDebtShare <= glbDebtVal", + "reservePool != loan", + "reservePool != nextPositionID", + "reservePool != _guardCounter", + "reservePool != ori(nextPositionID)", + "reservePool != ori(_guardCounter)", + "reservePool <= ori(glbDebtShare)", + "reservePool <= glbDebtVal", + "reservePool < glbDebtVal", + "reservePool != glbDebtVal", + "ori(positions[id].owner) == positions[id].owner", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "loan != nextPositionID", + "loan != _guardCounter", + "loan <= glbDebtVal", + "nextPositionID <= _guardCounter", + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(_guardCounter)", + "nextPositionID != ori(glbDebtShare)", + "nextPositionID <= glbDebtVal", + "nextPositionID < glbDebtVal", + "nextPositionID != glbDebtVal", + "_guardCounter >= ori(nextPositionID)", + "_guardCounter > ori(nextPositionID)", + "_guardCounter != ori(nextPositionID)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter >= ori(_guardCounter)", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)", + "_guardCounter != ori(glbDebtShare)", + "_guardCounter <= glbDebtVal", + "_guardCounter < glbDebtVal", + "_guardCounter != glbDebtVal", + "config == ori(config)", + "ori(nextPositionID) <= glbDebtVal", + "ori(nextPositionID) < glbDebtVal", + "ori(nextPositionID) != glbDebtVal", + "ori(_guardCounter) <= glbDebtVal", + "ori(_guardCounter) < glbDebtVal", + "ori(_guardCounter) != glbDebtVal", + "ori(glbDebtShare) != glbDebtVal" + ], + "falsified_preconditions": [ + "maxReturn == 0", + "ori(positions[id].goblin) == 0", + "id == 0", + "ori(positions[id].debtShare) == 0", + "ori(positions[id].owner) == 0", + "msg.value > 0", + "id <= loan" + ], + "falsified_postconditions": [ + "positions[id].goblin == 0", + "positions[id].debtShare == 0", + "positions[id].owner == 0", + "ori(glbDebtVal) <= glbDebtVal", + "ori(glbDebtVal) < glbDebtVal", + "ori(glbDebtVal) != glbDebtVal", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)", + "positions[id].debtShare == ori(positions[id].debtShare)", + "positions[id].debtShare >= ori(positions[id].debtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "nextPositionID == ori(nextPositionID) + 1", + "nextPositionID > ori(nextPositionID)", + "nextPositionID != ori(nextPositionID)", + "ori(glbDebtShare) <= glbDebtVal", + "ori(glbDebtShare) < glbDebtVal" + ] + }, + { + "func": "work(id,goblin,loan,maxReturn,data)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_owner) != 0", + "ori(lastAccrueTime) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) != ori(nextPositionID)", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(glbDebtVal) >= ori(glbDebtShare)", + "ori(_totalSupply) >= ori(reservePool)", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_totalSupply) != ori(_guardCounter)", + "ori(reservePool) <= ori(Sum(_balances[...]))", + "ori(reservePool) != ori(nextPositionID)", + "ori(reservePool) != ori(_guardCounter)", + "ori(reservePool) <= ori(glbDebtShare)", + "ori(Sum(_balances[...])) != ori(_guardCounter)", + "ori(nextPositionID) <= ori(_guardCounter)", + "ori(nextPositionID) != ori(glbDebtShare)", + "ori(_guardCounter) != ori(glbDebtShare)" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "_totalSupply > 0", + "elem of _balances[...] is one of [10000000000000000000]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(glbDebtVal) != _totalSupply", + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) != Sum(_balances[...])", + "ori(glbDebtVal) != nextPositionID", + "ori(glbDebtVal) != _guardCounter", + "ori(_owner) == _owner", + "ori(_totalSupply) >= reservePool", + "ori(_totalSupply) != _guardCounter", + "ori(reservePool) <= glbDebtShare", + "ori(reservePool) <= _totalSupply", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply", + "ori(reservePool) <= reservePool", + "ori(reservePool) <= Sum(_balances[...])", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])", + "ori(reservePool) != nextPositionID", + "ori(reservePool) != _guardCounter", + "ori(reservePool) <= glbDebtVal", + "lastAccrueTime >= ori(lastAccrueTime)", + "glbDebtShare >= reservePool", + "glbDebtShare != nextPositionID", + "glbDebtShare != _guardCounter", + "glbDebtShare != ori(nextPositionID)", + "glbDebtShare != ori(_guardCounter)", + "glbDebtShare <= glbDebtVal", + "_totalSupply >= reservePool", + "_totalSupply > reservePool", + "_totalSupply != reservePool", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply >= _guardCounter", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter", + "_totalSupply >= ori(_guardCounter)", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)", + "_totalSupply != glbDebtVal", + "reservePool <= ori(Sum(_balances[...]))", + "reservePool <= Sum(_balances[...])", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])", + "reservePool != nextPositionID", + "reservePool != _guardCounter", + "reservePool != ori(nextPositionID)", + "reservePool != ori(_guardCounter)", + "reservePool <= ori(glbDebtShare)", + "reservePool <= glbDebtVal", + "ori(Sum(_balances[...])) != _guardCounter", + "Sum(_balances[...]) >= _guardCounter", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) != _guardCounter", + "Sum(_balances[...]) >= ori(_guardCounter)", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != ori(_guardCounter)", + "Sum(_balances[...]) != glbDebtVal", + "nextPositionID <= _guardCounter", + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(_guardCounter)", + "nextPositionID != ori(glbDebtShare)", + "nextPositionID != glbDebtVal", + "_guardCounter >= ori(nextPositionID)", + "_guardCounter > ori(nextPositionID)", + "_guardCounter != ori(nextPositionID)", + "_guardCounter >= ori(_guardCounter)", + "_guardCounter != ori(glbDebtShare)", + "_guardCounter != glbDebtVal", + "ori(nextPositionID) != glbDebtVal", + "ori(_guardCounter) != glbDebtVal" + ], + "falsified_preconditions": [ + "ori(reservePool) == 0", + "ori(glbDebtVal) <= ori(_totalSupply)", + "ori(glbDebtVal) <= ori(Sum(_balances[...]))", + "ori(glbDebtVal) == ori(glbDebtShare)", + "ori(glbDebtVal) <= ori(glbDebtShare)", + "ori(reservePool) <= ori(nextPositionID)", + "ori(reservePool) < ori(nextPositionID)", + "ori(reservePool) <= ori(_guardCounter)", + "ori(reservePool) < ori(_guardCounter)" + ], + "falsified_postconditions": [ + "ori(glbDebtVal) <= glbDebtShare", + "ori(glbDebtVal) <= _totalSupply", + "ori(glbDebtVal) < _totalSupply", + "ori(glbDebtVal) <= Sum(_balances[...])", + "ori(glbDebtVal) < Sum(_balances[...])", + "ori(glbDebtVal) <= glbDebtVal", + "ori(_totalSupply) <= _totalSupply", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) >= glbDebtVal", + "ori(reservePool) <= nextPositionID", + "ori(reservePool) < nextPositionID", + "ori(reservePool) <= _guardCounter", + "ori(reservePool) < _guardCounter", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)", + "glbDebtShare >= ori(glbDebtShare)", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply >= glbDebtVal", + "_totalSupply > glbDebtVal", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) >= glbDebtVal", + "Sum(_balances[...]) >= glbDebtVal", + "Sum(_balances[...]) > glbDebtVal", + "nextPositionID == _guardCounter - 1", + "nextPositionID == ori(_guardCounter)", + "nextPositionID >= ori(_guardCounter)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)", + "config == ori(config)", + "ori(glbDebtShare) <= glbDebtVal" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json new file mode 100644 index 0000000..463fc08 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json @@ -0,0 +1,736 @@ +[ + { + "func": "approveJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "_converter != 0", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "ori(approvedJarConverters[_converter]) == false", + "ori(governance) == msg.sender" + ], + "postconditions": [ + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "approvedJarConverters[_converter] == true", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance == ori(governance)", + "governance == msg.sender", + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist == ori(strategist)", + "approvedJarConverters[_converter] != ori(approvedJarConverters[_converter])", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approveJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approveStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_strategy != 0", + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(approvedStrategies[_token][_strategy]) == false", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_token != 0", + "ori(timelock) == msg.sender" + ], + "postconditions": [ + "approvedStrategies[_token][_strategy] == true", + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "approvedStrategies[_token][_strategy] != ori(approvedStrategies[_token][_strategy])", + "governance == ori(governance)", + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist == ori(strategist)", + "ori(timelock) == timelock", + "msg.sender == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approveStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseStrategyTokenGetStuck(_strategy,_token)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseStrategyTokenGetStuck(_strategy,_token)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseTokensGetStuck(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseTokensGetStuck(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setConvenienceFee(_convenienceFee)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setConvenienceFee(_convenienceFee)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setDevFund(_devfund)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setDevFund(_devfund)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_governance != 0", + "ori(governance) == msg.sender", + "ori(governance) != _governance", + "msg.sender != _governance" + ], + "postconditions": [ + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance != ori(governance)", + "governance != msg.sender", + "governance == _governance", + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist == ori(strategist)", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setJar(_token,_jar)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(jars[_token]) == 0", + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "_jar != 0", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_token != 0", + "ori(jars[_token]) != _jar", + "ori(governance) != ori(strategist)", + "ori(governance) == msg.sender", + "ori(strategist) != msg.sender" + ], + "postconditions": [ + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "jars[_token] != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "ori(jars[_token]) != jars[_token]", + "governance != strategist", + "governance == ori(governance)", + "governance != ori(strategist)", + "governance == msg.sender", + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "_jar == jars[_token]", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist != ori(governance)", + "strategist == ori(strategist)", + "strategist != msg.sender", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setJar(_token,_jar)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setOneSplit(_onesplit)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setOneSplit(_onesplit)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setSplit(_split)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setSplit(_split)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategist(_strategist)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategist(_strategist)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_strategy != 0", + "ori(devfund) != 0", + "ori(strategies[_token]) == 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(approvedStrategies[_token][_strategy]) == true", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_token != 0", + "_strategy != ori(strategies[_token])", + "ori(governance) != ori(strategist)", + "ori(governance) == msg.sender", + "ori(strategist) != msg.sender" + ], + "postconditions": [ + "approvedStrategies[_token][_strategy] == true", + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategies[_token] != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "_strategy == strategies[_token]", + "approvedStrategies[_token][_strategy] == ori(approvedStrategies[_token][_strategy])", + "governance != strategist", + "governance == ori(governance)", + "governance != ori(strategist)", + "governance == msg.sender", + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)", + "ori(devfund) == devfund", + "ori(strategies[_token]) != strategies[_token]", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist != ori(governance)", + "strategist == ori(strategist)", + "strategist != msg.sender", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimelock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_timelock != 0", + "ori(timelock) == msg.sender", + "ori(timelock) != _timelock", + "msg.sender != _timelock" + ], + "postconditions": [ + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance == ori(governance)", + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist == ori(strategist)", + "ori(timelock) != timelock", + "msg.sender != timelock", + "timelock == _timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimelock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTreasury(_treasury)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTreasury(_treasury)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapExactJarForJar(_fromJar,_toJar,_fromJarAmount,_toJarMinAmount,_targets,_data)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapExactJarForJar(_fromJar,_toJar,_fromJarAmount,_toJarMinAmount,_targets,_data)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll(_token)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll(_token)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "yearn(_strategy,_token,parts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "yearn(_strategy,_token,parts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "ori(governance) != ori(strategist)" + ], + "postconditions": [ + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance != strategist", + "governance != ori(strategist)", + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist != ori(governance)", + "strategist == ori(strategist)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "governance == ori(governance)", + "ori(timelock) == timelock" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json new file mode 100644 index 0000000..fefd26c --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json @@ -0,0 +1,557 @@ +[ + { + "func": "anySwapFeeTo(token,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapFeeTo(token,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,tokens,to,amounts,fromChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,tokens,to,amounts,fromChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInAuto(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "to != 0", + "token != 0", + "amount > 0", + "fromChainID > 0", + "fromChainID one of [56,137,250]", + "txs != \"\"", + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]", + "msg.sender != 0" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInAuto(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForNative(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForNative(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForTokens(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForTokens(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInUnderlying(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInUnderlying(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "to != 0", + "token != 0", + "toChainID > 0", + "toChainID == 56", + "toChainID one of [56]", + "amount > 0", + "amount == 390000000000", + "amount one of [390000000000]", + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]", + "msg.sender != 0" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(tokens,to,amounts,toChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(tokens,to,amounts,toChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNative(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNative(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokens(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokens(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlying(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "to != 0", + "token != 0", + "toChainID > 0", + "toChainID one of [56,137,250]", + "amount > 0", + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]", + "msg.sender != 0" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlying(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithTransferPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithTransferPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeMPC(newMPC)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeMPC(newMPC)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeVault(token,newVault)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeVault(token,newVault)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountIn(amountOut,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountIn(amountOut,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountOut(amountIn,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountOut(amountIn,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "quote(amountA,reserveA,reserveB)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "quote(amountA,reserveA,reserveB)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json new file mode 100644 index 0000000..5fdb5f1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json @@ -0,0 +1,444 @@ +[ + { + "func": "removeAlerter(alerter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeAlerter(alerter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "tradeWithHint(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId,hint)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "tradeWithHint(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId,hint)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToEther(token,srcAmount,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToEther(token,srcAmount,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawToken(token,amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) > 0", + "ori(Sum(decimals[...])) == 81", + "ori(Sum(decimals[...])) one of [81]", + "ori(pendingAdmin) != 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "sendTo != 0", + "token != 0", + "ori(admin) != 0", + "amount > 0", + "amount == 40963957051", + "amount one of [40963957051]", + "msg.sender == ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [81]", + "elem of decimals[...] is one of [9,18]", + "pendingAdmin != 0", + "admin != 0", + "Sum(decimals[...]) > 0", + "Sum(decimals[...]) == 81", + "Sum(decimals[...]) one of [81]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "ori(pendingAdmin) == pendingAdmin", + "msg.sender == admin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawToken(token,amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addAlerter(newAlerter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addAlerter(newAlerter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToToken(src,srcAmount,dest,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToToken(src,srcAmount,dest,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdmin(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(Sum(decimals[...])) one of [0]", + "ori(pendingAdmin) == 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "newAdmin != 0", + "ori(admin) != 0", + "ori(pendingAdmin) != newAdmin", + "msg.sender == ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of []", + "pendingAdmin != 0", + "admin != 0", + "Sum(decimals[...]) == 0", + "Sum(decimals[...]) one of [0]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "ori(pendingAdmin) != pendingAdmin", + "msg.sender == admin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "newAdmin == pendingAdmin", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdmin(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimAdmin()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimAdmin()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapEtherToToken(token,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapEtherToToken(token,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdminQuickly(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(Sum(decimals[...])) one of [0]", + "ori(pendingAdmin) == 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "newAdmin != 0", + "ori(admin) != 0", + "msg.sender != newAdmin", + "msg.sender == ori(admin)", + "newAdmin != ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of []", + "pendingAdmin == 0", + "admin != 0", + "Sum(decimals[...]) == 0", + "Sum(decimals[...]) one of [0]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "ori(pendingAdmin) == pendingAdmin", + "msg.sender != admin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "newAdmin == admin", + "ori(admin) != admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdminQuickly(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addOperator(newOperator)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addOperator(newOperator)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setKyberNetworkContract(_kyberNetworkContract)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(Sum(decimals[...])) one of [0]", + "_kyberNetworkContract != 0", + "ori(pendingAdmin) == 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) == 0", + "ori(admin) != 0", + "_kyberNetworkContract != ori(kyberNetworkContract)", + "msg.sender == ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of []", + "pendingAdmin == 0", + "admin != 0", + "Sum(decimals[...]) == 0", + "Sum(decimals[...]) one of [0]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "_kyberNetworkContract == kyberNetworkContract", + "ori(pendingAdmin) == pendingAdmin", + "msg.sender == admin", + "ori(kyberNetworkContract) != kyberNetworkContract", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setKyberNetworkContract(_kyberNetworkContract)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeOperator(operator)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeOperator(operator)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "trade(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "minConversionRate > 0", + "destAddress != 0", + "ori(pendingAdmin) != 0", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "maxDestAmount > 0", + "maxDestAmount one of [57896044618658097711785492504343953926634992332820282019728792003956564819968,1606938044258990300000000000000000000000000000000000000000000]", + "dest != 0", + "src != 0", + "srcAmount > 0", + "ori(admin) != 0", + "walletId != 0" + ], + "postconditions": [ + "elem of decimals[...] is one of [161]", + "elem of decimals[...] is one of [8,9,18,12]", + "pendingAdmin != 0", + "admin != 0", + "Sum(decimals[...]) > 0", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "ori(pendingAdmin) == pendingAdmin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "ori(Sum(decimals[...])) < Sum(decimals[...])", + "ori(Sum(decimals[...])) != Sum(decimals[...])" + ] + }, + { + "func": "trade(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawEther(amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawEther(amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(admin) != 0", + "ori(admin) != ori(pendingAdmin)" + ], + "postconditions": [ + "admin != 0", + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of [8,9,18,12]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "pendingAdmin != ori(admin)", + "pendingAdmin != admin", + "admin != ori(pendingAdmin)" + ], + "falsified_preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(pendingAdmin) == 0" + ], + "falsified_postconditions": [ + "Sum(decimals[...]) == 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json new file mode 100644 index 0000000..948abf4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json @@ -0,0 +1,516 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "spender != 0", + "ori(Sum(_allowedFragments[msg.sender][...])) == 0", + "ori(Sum(_allowedFragments[msg.sender][...])) one of [0]", + "msg.sender != 0", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_allowedFragments[msg.sender][spender]) == 0", + "ori(_allowedFragments[msg.sender][spender]) one of [0]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000", + "ori(_totalSupply) one of [60000000000000]", + "ori(initialized) == true", + "msg.value == 0", + "msg.value one of [0]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733", + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]", + "ori(_owner) == 0", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "value > 0", + "value one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(Sum(_allowedFragments[msg.sender][...])) == ori(_allowedFragments[msg.sender][spender])", + "ori(Sum(_allowedFragments[msg.sender][...])) >= ori(_allowedFragments[msg.sender][spender])", + "ori(Sum(_allowedFragments[msg.sender][...])) <= ori(_allowedFragments[msg.sender][spender])", + "ori(Sum(_allowedFragments[msg.sender][...])) <= value", + "ori(Sum(_allowedFragments[msg.sender][...])) < value", + "ori(Sum(_allowedFragments[msg.sender][...])) != value", + "ori(_allowedFragments[msg.sender][spender]) <= value", + "ori(_allowedFragments[msg.sender][spender]) < value", + "ori(_allowedFragments[msg.sender][spender]) != value" + ], + "postconditions": [ + "_allowedFragments[msg.sender][spender] > 0", + "_allowedFragments[msg.sender][spender] one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "initializing == false", + "_totalSupply > 0", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "Sum(_allowedFragments[msg.sender][...]) > 0", + "Sum(_allowedFragments[msg.sender][...]) one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000]", + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(initializing) == initializing", + "_allowedFragments[msg.sender][spender] >= ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] > ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] != ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] >= Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] <= Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] >= ori(_allowedFragments[msg.sender][spender])", + "_allowedFragments[msg.sender][spender] > ori(_allowedFragments[msg.sender][spender])", + "_allowedFragments[msg.sender][spender] != ori(_allowedFragments[msg.sender][spender])", + "_allowedFragments[msg.sender][spender] == value", + "_allowedFragments[msg.sender][spender] >= value", + "_allowedFragments[msg.sender][spender] <= value", + "ori(Sum(_allowedFragments[msg.sender][...])) <= Sum(_allowedFragments[msg.sender][...])", + "ori(Sum(_allowedFragments[msg.sender][...])) < Sum(_allowedFragments[msg.sender][...])", + "ori(Sum(_allowedFragments[msg.sender][...])) != Sum(_allowedFragments[msg.sender][...])", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "Sum(_allowedFragments[msg.sender][...]) >= ori(_allowedFragments[msg.sender][spender])", + "Sum(_allowedFragments[msg.sender][...]) > ori(_allowedFragments[msg.sender][spender])", + "Sum(_allowedFragments[msg.sender][...]) != ori(_allowedFragments[msg.sender][spender])", + "Sum(_allowedFragments[msg.sender][...]) == value", + "Sum(_allowedFragments[msg.sender][...]) >= value", + "Sum(_allowedFragments[msg.sender][...]) <= value", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "_gonsPerFragment == ori(_gonsPerFragment)", + "_gonsPerFragment >= ori(_gonsPerFragment)", + "_gonsPerFragment <= ori(_gonsPerFragment)", + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) <= ori(Sum(_gonBalances[...]))", + "ori(initialized) == initialized", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(_owner) == _owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(name,symbol,decimals)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(name,symbol,decimals)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "rebase(epoch,supplyDelta)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "rebase(epoch,supplyDelta)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMonetaryPolicy(monetaryPolicy_)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "msg.sender != 0", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000", + "ori(_totalSupply) one of [60000000000000]", + "ori(initialized) == true", + "msg.value == 0", + "msg.value one of [0]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733", + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]", + "ori(_owner) == 0", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "monetaryPolicy_ != 0", + "ori(monetaryPolicy) != monetaryPolicy_" + ], + "postconditions": [ + "initializing == false", + "_totalSupply > 0", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "ori(initializing) == initializing", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "monetaryPolicy != monetaryPolicy_", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "_gonsPerFragment == ori(_gonsPerFragment)", + "_gonsPerFragment >= ori(_gonsPerFragment)", + "_gonsPerFragment <= ori(_gonsPerFragment)", + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) <= ori(Sum(_gonBalances[...]))", + "ori(initialized) == initialized", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(_owner) == _owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMonetaryPolicy(monetaryPolicy_)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(owner_)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "msg.sender != 0", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_totalSupply) == 0", + "ori(_totalSupply) one of [0]", + "ori(initialized) == false", + "msg.value == 0", + "msg.value one of [0]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) == 0", + "ori(Sum(_gonBalances[...])) one of [0]", + "ori(_gonsPerFragment) == 0", + "ori(_gonsPerFragment) one of [0]", + "ori(_owner) == 0", + "ori(_gonBalances[owner_]) == 0", + "ori(_gonBalances[owner_]) one of [0]", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "owner_ != 0", + "ori(initializing) == ori(tokenPausedDeprecated)", + "ori(initializing) == ori(initialized)", + "ori(tokenPausedDeprecated) == ori(initialized)", + "ori(Sum(_gonBalances[...])) == ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) >= ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) <= ori(_gonBalances[owner_])" + ], + "postconditions": [ + "initializing == false", + "_totalSupply > 0", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "_gonBalances[owner_] > 0", + "_gonBalances[owner_] == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "_gonBalances[owner_] one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(initializing) == initializing", + "ori(initializing) == tokenPausedDeprecated", + "ori(initializing) != initialized", + "initializing == ori(tokenPausedDeprecated)", + "initializing == tokenPausedDeprecated", + "initializing == ori(initialized)", + "initializing != initialized", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "ori(tokenPausedDeprecated) != initialized", + "_gonsPerFragment >= ori(_gonsPerFragment)", + "_gonsPerFragment > ori(_gonsPerFragment)", + "_gonsPerFragment != ori(_gonsPerFragment)", + "tokenPausedDeprecated == ori(initialized)", + "tokenPausedDeprecated != initialized", + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) > ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) != ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) >= ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) > ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) != ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) == _gonBalances[owner_]", + "Sum(_gonBalances[...]) >= _gonBalances[owner_]", + "Sum(_gonBalances[...]) <= _gonBalances[owner_]", + "ori(initialized) != initialized", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(Sum(_gonBalances[...])) <= _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) < _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) != _gonBalances[owner_]", + "ori(_owner) == _owner", + "ori(_gonBalances[owner_]) <= _gonBalances[owner_]", + "ori(_gonBalances[owner_]) < _gonBalances[owner_]", + "ori(_gonBalances[owner_]) != _gonBalances[owner_]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(owner_)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_totalSupply) one of [0,60000000000000]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) one of [0,115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(_gonsPerFragment) one of [0,1929868153955269923726183083478131797554499744427342733990959733]", + "ori(_owner) == 0", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "ori(initializing) == ori(tokenPausedDeprecated)", + "ori(_totalSupply) <= ori(_gonsPerFragment)" + ], + "postconditions": [ + "initializing == false", + "_totalSupply > 0", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "ori(initializing) == initializing", + "ori(initializing) == tokenPausedDeprecated", + "ori(initializing) != initialized", + "initializing == ori(tokenPausedDeprecated)", + "initializing == tokenPausedDeprecated", + "initializing != initialized", + "_totalSupply <= _gonsPerFragment", + "_totalSupply < _gonsPerFragment", + "_totalSupply != _gonsPerFragment", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply != ori(_gonsPerFragment)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "ori(tokenPausedDeprecated) != initialized", + "_gonsPerFragment >= ori(_totalSupply)", + "_gonsPerFragment > ori(_totalSupply)", + "_gonsPerFragment != ori(_totalSupply)", + "_gonsPerFragment >= ori(_gonsPerFragment)", + "tokenPausedDeprecated != initialized", + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)", + "ori(_owner) == _owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json new file mode 100644 index 0000000..5b6a06b --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json @@ -0,0 +1,747 @@ +[ + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]", + "ori(_balances[msg.sender]) == 0", + "ori(_balances[msg.sender]) one of [0]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "_amount > 0", + "_amount one of [500000000000000000000,13105133700000000000000,100000000000000000000,103970700000000000000]", + "ori(Sum(_balances[...])) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] > 0", + "_balances[msg.sender] one of [13082359060001746878663,103789481789261074604,100000000000000000000,499130119572851959406]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [142345985557645870700604]", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) <= _balances[msg.sender]", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance == ori(governance)", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_balances[msg.sender]) one of [0,90000000000000000000]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "token != 0", + "Sum(_balances[...]) > 0", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] > 0", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [134406668607338084218100]", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) <= _balances[msg.sender]", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance == ori(governance)", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "elem of _balances[...] is one of [100000000000000000000]", + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,193288114234845046898,15113130871002806453838,100000000000000000000,7682645945411942583280,9999286966540985221802,58078098074825682085113]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance == ori(governance)", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "harvest(reserve,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "harvest(reserve,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_governance != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 142449775039435131775208", + "ori(_totalSupply) one of [142449775039435131775208]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 142449775039435131775208", + "ori(Sum(_balances[...])) one of [142449775039435131775208]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "_governance != ori(governance)", + "_governance != msg.sender", + "ori(governance) == msg.sender" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 142449775039435131775208", + "_totalSupply one of [142449775039435131775208]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 142449775039435131775208", + "Sum(_balances[...]) one of [142449775039435131775208]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "elem of _balances[...] is one of [142449775039435131775208]", + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,0,193288114234845046898,499130119572851959406,15113130871002806453838,2887782269888984921831,28891975855582153400605,13082359060001746878663,7682645945411942583280,194232561057094695264,103789481789261074604,9999286966540985221802,58078098074825682085113]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "_governance == governance", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance != ori(governance)", + "governance != msg.sender", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_shares > 0", + "_shares == 10000000000000000000", + "_shares one of [10000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000000000000", + "ori(_balances[msg.sender]) one of [100000000000000000000]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) == ori(_balances[msg.sender])", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) <= ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 90000000000000000000", + "_totalSupply one of [90000000000000000000]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 90000000000000000000", + "Sum(_balances[...]) one of [90000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] > 0", + "_balances[msg.sender] == 90000000000000000000", + "_balances[msg.sender] one of [90000000000000000000]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [90000000000000000000]", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply <= ori(_balances[msg.sender])", + "_totalSupply < ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply == _balances[msg.sender]", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply <= _balances[msg.sender]", + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_balances[msg.sender]) >= Sum(_balances[...])", + "ori(_balances[msg.sender]) > Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "Sum(_balances[...]) == _balances[msg.sender]", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) <= _balances[msg.sender]", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance == ori(governance)", + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [128942301002958992697573,134406668607338084218100]", + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) one of [5464367604379091520527,29264013041526968930907]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [128942301002958992697573,134406668607338084218100]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply one of [128942301002958992697573,99678287961432023766666]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [128942301002958992697573,99678287961432023766666]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] == 0", + "_balances[msg.sender] one of [0]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [128942301002958992697573]", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) != _balances[msg.sender]", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance == ori(governance)", + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(governance) != 0", + "ori(controller) != 0", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "token != 0", + "Sum(_balances[...]) > 0", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "elem of _balances[...] is one of [141846855438073018741198]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "governance == ori(governance)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json new file mode 100644 index 0000000..26e7fcb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json @@ -0,0 +1,163 @@ +[ + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_bridges[ori(weth)]) == 0", + "token0 != 0", + "ori(owner) != 0", + "token1 != 0", + "ori(_bridges[weth]) == 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(pendingOwner) == 0", + "msg.sender != 0", + "ori(_bridges[ori(weth)]) == ori(_bridges[weth])", + "token0 != token1" + ], + "postconditions": [ + "owner != 0", + "_bridges[ori(weth)] == 0", + "_bridges[weth] == 0", + "pendingOwner == 0", + "owner == ori(owner)", + "_bridges[ori(weth)] == ori(_bridges[ori(weth)])", + "_bridges[ori(weth)] == _bridges[weth]", + "_bridges[ori(weth)] == ori(_bridges[weth])", + "ori(_bridges[ori(weth)]) == _bridges[weth]", + "_bridges[weth] == ori(_bridges[weth])", + "pendingOwner == ori(pendingOwner)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convertMultiple(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convertMultiple(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setBridge(token,bridge)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setBridge(token,bridge)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner,direct,renounce)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "newOwner != 0", + "renounce == false", + "direct == true", + "ori(owner) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(pendingOwner) == 0", + "msg.sender != 0", + "newOwner != ori(owner)", + "newOwner != ori(pendingOwner)", + "newOwner != msg.sender", + "ori(owner) != ori(pendingOwner)", + "ori(owner) == msg.sender", + "ori(pendingOwner) != msg.sender" + ], + "postconditions": [ + "owner != 0", + "pendingOwner == 0", + "newOwner == owner", + "newOwner != pendingOwner", + "owner != ori(owner)", + "owner != pendingOwner", + "owner != ori(pendingOwner)", + "owner != msg.sender", + "ori(owner) != pendingOwner", + "pendingOwner == ori(pendingOwner)", + "pendingOwner != msg.sender" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner,direct,renounce)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(owner) != 0", + "ori(pendingOwner) == 0", + "ori(owner) != ori(pendingOwner)" + ], + "postconditions": [ + "owner != 0", + "pendingOwner == 0", + "owner != pendingOwner", + "owner != ori(pendingOwner)", + "ori(owner) != pendingOwner", + "pendingOwner == ori(pendingOwner)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/manual_evalution.py b/use-cases/dynamically-mined-invariant-denoising/manual_evalution.py new file mode 100644 index 0000000..377faa6 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/manual_evalution.py @@ -0,0 +1,40 @@ +import json +import os + +def update_validity(filename): + # Load data from the file + with open(filename, 'r') as file: + data = json.load(file) + + # Iterate through each entry and ask if reduction is valid + for entry in data: + print("Before reduction predicates:") + for pred in entry["before_preds"]: + print(f" - {pred}") + + print("After reduction predicates:") + for pred in entry["after_preds"]: + print(f" - {pred}") + + # Ask the user if the reduction is valid + response = input("Is the reduction valid? (yes/no): ").strip().lower() + if response == "yes": + entry["valid_output"] = True + elif response == "no": + entry["valid_output"] = False + else: + print("Invalid input, keeping the current value.") + + print("\n" + "="*40 + "\n") + + # Create the new filename with "_after_eval" appended + new_filename = f"{os.path.splitext(filename)[0]}_after_eval.json" + + # Save the updated data to the new file + with open(new_filename, 'w') as file: + json.dump(data, file, indent=4) + + print(f"File saved as {new_filename}.") + +# Example usage: +update_validity('erc20_random_sample_removed.json') diff --git a/use-cases/dynamically-mined-invariant-denoising/output_data.json b/use-cases/dynamically-mined-invariant-denoising/output_data.json new file mode 100644 index 0000000..ad15897 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_data.json @@ -0,0 +1,42 @@ +[ + { + "predicates_before_reduction": 95, + "predicates_after_reduction": 63, + "reduction_ratio": 0.6631578947368421, + "total_parsing_time": 0.0004382133483886719, + "total_reduction_time": 3.184911012649536, + "contract": "./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json" + }, + { + "predicates_before_reduction": 78, + "predicates_after_reduction": 46, + "reduction_ratio": 0.5897435897435898, + "total_parsing_time": 0.0003733634948730469, + "total_reduction_time": 2.8910562992095947, + "contract": "./invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json" + }, + { + "predicates_before_reduction": 175, + "predicates_after_reduction": 96, + "reduction_ratio": 0.5485714285714286, + "total_parsing_time": 0.0006830692291259766, + "total_reduction_time": 6.357718467712402, + "contract": "./invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json" + }, + { + "predicates_before_reduction": 158, + "predicates_after_reduction": 96, + "reduction_ratio": 0.6075949367088608, + "total_parsing_time": 0.0007081031799316406, + "total_reduction_time": 5.436082124710083, + "contract": "./invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json" + }, + { + "predicates_before_reduction": 108, + "predicates_after_reduction": 68, + "reduction_ratio": 0.6296296296296297, + "total_parsing_time": 0.0004811286926269531, + "total_reduction_time": 4.03608775138855, + "contract": "./invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json" + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/parse_cluster.py b/use-cases/dynamically-mined-invariant-denoising/parse_cluster.py new file mode 100644 index 0000000..3b390dd --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/parse_cluster.py @@ -0,0 +1,98 @@ +import re + +def parse_daikon_list(predicates: list): + """Takes a list of predicates and outputs a list of parsed predicats""" + parsed_list = [] + for expression in predicates: + parsed = parse_daikon(expression) + parsed_list.append(parsed) + return parsed_list + + +def recursive_parse(a: str ,b="" ): + """Uses regex to clean daikon expression from [...], Sum(), ori() """ + + + if(a.startswith("ori")): + a = a[4:] + a = a[0:-1] + b += ".ori" + a = recursive_parse(a) + + if(a.startswith("Sum")): + a = a[4:] + a = a[0:-1] + b += ".sum" + a = recursive_parse(a) + + if(a.endswith("[...]")): + a = a[0:-5] + b += ".spo" + a = recursive_parse(a) + + + return a + b + +def split_expression(a:str): + """Takes a predicates and splits into the a tuple of + (lefthandside of expression, relation, righthandside of expression)""" + if "elem in" in a: + a = re.split("(elem in)", a) + if "one of" in a: + a = re.split("(one of)", a) + if ">=" in a: + a = re.split("(\>=)",a) + if "<=" in a: + a = re.split("(\<=)",a) + elif "==" in a: + a = re.split("(\==)",a) + elif "!=" in a: + a = re.split("(\!=)",a) + elif ">" in a: + a = re.split("(\>)",a) + elif "<" in a: + a = re.split("(\<)",a) + + left = a[0] + right = a[-1] + relation = a[1] + return left, relation, right + +def parse_daikon(a:str): + """Takes a daikon style predicate and create a tuple of the (invovled variabels, + orignal predicate, parsed predicate) + + """ + original = a + left, delimeter, right = split_expression(a) + left = recursive_parse(left.strip()) + right = recursive_parse(right.strip()) + if(right.isnumeric()): + parsed_right = "Literal" + + else: + parsed_right = right + + return (left+ " " + parsed_right, original, f"{left} {delimeter} {right}") + + +def parse_original(input: dict, list): + """Takes input dict with orignal predicates and the the parsed and outputs a list of the orignal predicates """ + new_list = [] + for preds in list: + for entry in preds: + new_list.append(input[entry]) + return new_list + + + +if __name__ == "__main__": + cluster = [ + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ] + + parsed_cluster = parse_daikon_list(cluster) + for parsed in parsed_cluster: + print(parsed[2]) # Print the parsed predicate (Solidity-compatible) diff --git a/use-cases/dynamically-mined-invariant-denoising/parser.py b/use-cases/dynamically-mined-invariant-denoising/parser.py new file mode 100644 index 0000000..6e8d348 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/parser.py @@ -0,0 +1,85 @@ +import re + +def parse_daikon_list(predicates: list): + """Takes a list of predicates and outputs a list of parsed predicats""" + parsed_list = [] + for expression in predicates: + parsed = parse_daikon(expression) + parsed_list.append(parsed) + return parsed_list + + +def recursive_parse(a: str ,b="" ): + """Uses regex to clean daikon expression from [...], Sum(), ori() """ + + + if(a.startswith("ori")): + a = a[4:] + a = a[0:-1] + b += ".ori" + a = recursive_parse(a) + + if(a.startswith("Sum")): + a = a[4:] + a = a[0:-1] + b += ".sum" + a = recursive_parse(a) + + if(a.endswith("[...]")): + a = a[0:-5] + b += ".spo" + a = recursive_parse(a) + + + return a + b + +def split_expression(a:str): + """Takes a predicates and splits into the a tuple of + (lefthandside of expression, relation, righthandside of expression)""" + if "elem in" in a: + a = re.split("(elem in)", a) + if "one of" in a: + a = re.split("(one of)", a) + if ">=" in a: + a = re.split("(\>=)",a) + if "<=" in a: + a = re.split("(\<=)",a) + elif "==" in a: + a = re.split("(\==)",a) + elif "!=" in a: + a = re.split("(\!=)",a) + elif ">" in a: + a = re.split("(\>)",a) + elif "<" in a: + a = re.split("(\<)",a) + + left = a[0] + right = a[-1] + relation = a[1] + return left, relation, right + +def parse_daikon(a:str): + """Takes a daikon style predicate and create a tuple of the (invovled variabels, + orignal predicate, parsed predicate) + + """ + original = a + left, delimeter, right = split_expression(a) + left = recursive_parse(left.strip()) + right = recursive_parse(right.strip()) + if(right.isnumeric()): + parsed_right = "Literal" + + else: + parsed_right = right + + return (left+ " " + parsed_right, original, f"{left} {delimeter} {right}") + + +def parse_original(input: dict, list): + """Takes input dict with orignal predicates and the the parsed and outputs a list of the orignal predicates """ + new_list = [] + for preds in list: + for entry in preds: + new_list.append(input[entry]) + return new_list diff --git a/use-cases/dynamically-mined-invariant-denoising/random_sample.py b/use-cases/dynamically-mined-invariant-denoising/random_sample.py new file mode 100644 index 0000000..5c1268d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/random_sample.py @@ -0,0 +1,47 @@ + + +import os +import json +import random +import sys +# Set the path to your folder + + + +def extract_random_entries(n, folder_path, output_path): + files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))] + random_entries = [] + for _ in range(n): + selected_file = random.choice(files) + file_path = os.path.join(folder_path, selected_file) + print(selected_file) + with open(file_path, 'r') as f: + data = json.load(f) + + random_entry = random.choice(data) + # Add additional field to the entry + random_entry["valid_output"] = False + random_entries.append(random_entry) + + # Write all entries to a JSON file in array format + with open(output_path, 'w') as outfile: + json.dump(random_entries, outfile, indent=4) + + + + + +if __name__ == "__main__": + folder_path = '/Users/gustavkasche/InvPurge/InvCon+/src/output/sok/removed' + output_path = './sok_random_sample_removed.json' + extract_random_entries(50, folder_path, output_path) + folder_path = '/Users/gustavkasche/InvPurge/InvCon+/src/output/sok/kept' + output_path = './sok_random_sample_kept.json' + extract_random_entries(50, folder_path, output_path) + + folder_path = '/Users/gustavkasche/InvPurge/InvCon+/src/output/erc20/removed' + output_path = './erc20_random_sample_removed.json' + extract_random_entries(50, folder_path, output_path) + folder_path = '/Users/gustavkasche/InvPurge/InvCon+/src/output/erc20/kept' + output_path = './erc20_random_sample_kept.json' + extract_random_entries(50, folder_path, output_path) \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/reader copy.py b/use-cases/dynamically-mined-invariant-denoising/reader copy.py new file mode 100644 index 0000000..203634b --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/reader copy.py @@ -0,0 +1,331 @@ +import json +import sys +import predi.comparator as cp +import re +import time +import os + + +sok = [ + "/Users/gustavkasche/InvPurge/InvCon+/sok/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json2", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintsokMintableToken.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.inv.json", + "/Users/gustavkasche/InvPurge/InvCon+/sok/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json" +] + + +comparator = cp.Comparator() + + + +def parse_daikon_list(predicates: list): + """Takes a list of predicates and outputs a list of parsed predicats""" + parsed_list = [] + for expression in predicates: + parsed = parse_daikon(expression) + parsed_list.append(parsed) + return parsed_list + +def parsed_to_dict(parsed:list): + """Takes a parsed list of predicates and creates a two dicts one where the predicates are grouped according to + their involved variabels and one where parsed predicates are mapped to their orignal format """ + category_dict = {} + preds_dict = {} + for pred in parsed: + big_key ,k, v = pred + if big_key in category_dict: + category_dict[big_key] = category_dict[big_key] + [v] + else: + category_dict[big_key] = [v] + preds_dict[v] = k + + return category_dict, preds_dict + + +def find_strongest_in_dict(preds_dict: dict, contract_addr, all_preds_dict): + """Takes a dict of predicates and find the strongest for each one and outputs a new list of reduced preds """ + reduced_preds = [] + + + # Open the output file in write mode + for pred in preds_dict.values(): + reduced_pred = find_strongest_predicate(pred,contract_addr,all_preds_dict) + + reduced_preds.append(reduced_pred) + + + return reduced_preds + + +def parse_original(input: dict, list): + """Takes input dict with orignal predicates and the the parsed and outputs a list of the orignal predicates """ + new_list = [] + for preds in list: + for entry in preds: + new_list.append(input[entry]) + return new_list + + +def reduce_json(path: str, contract_addr: str): + """Reduces the invariants found in the path and outputs a new json""" + f = open(path) + data = json.load(f) + total_list = [] + total_list_red = [] + output_file = open("./sok.json" ,"a") + output_data: dict = {"contract": path } + total_parsing_time = 0 + total_reducing_time = 0 + for entry in data: + pre_conditions = entry["preconditions"] + post_conditions = entry["postconditions"] + total_list += pre_conditions + post_conditions + parsing_time_start = time.time() + parsed_preconditions = parse_daikon_list(pre_conditions) + parsed_postconditions = parse_daikon_list(post_conditions) + parsing_time_end = time.time() + total_parsing_time += (parsing_time_end - parsing_time_start) + category_preconditions_dict, parsed_preconditions_dict = parsed_to_dict(parsed_preconditions ) + category_postconditions_dict, parsed_postconditions_dict = parsed_to_dict(parsed_postconditions) + reducing_time_start = time.time() + strongest_preconditions = find_strongest_in_dict(category_preconditions_dict, contract_addr, parsed_preconditions_dict,) + strongest_postconditions = find_strongest_in_dict(category_postconditions_dict, contract_addr, parsed_postconditions_dict) + reducing_time_end = time.time() + total_reducing_time += (reducing_time_end - reducing_time_start) + reduced_preconditions = parse_original(parsed_preconditions_dict, strongest_preconditions) + reduced_postconditions = parse_original(parsed_postconditions_dict, strongest_postconditions) + entry["postconditions"] = reduced_postconditions + entry["preconditions"] =reduced_preconditions + total_list_red += reduced_postconditions + reduced_preconditions + + json_out = open(f"./output/sok/{contract_addr}.json", "w") + json.dump(data, json_out, indent=4) + json_out.close() + output_data["predicates_before_reduction"] = len(total_list) + output_data["predicates_after_reduction"] = len(total_list_red) + output_data["reduction_ratio"] = len(total_list_red) / len(total_list) + output_data["total_parsing_time"] = total_parsing_time + output_data["total_reduction_time"] = total_reducing_time + json.dump([output_data], output_file) + + + + + + + + + +def find_strongest_predicate(preds: list, contract_addr:str, all_preds_dict:dict): + """Takes a list of predicates preds and finds the strongest ones in the list """ + before_preds = preds.copy() + + for first_pred in preds: + stronger_predicate_exists = False + for second_pred in preds: + if '"' in first_pred or '"' in second_pred: + continue + result = comparator.compare(first_pred, second_pred) + if result == 'The predicates are equivalent.': + continue + if result == 'The first predicate is stronger.': + preds.remove(second_pred) + if result == 'The second predicate is stronger.': + preds.remove(first_pred) + + + if len(preds) != len(before_preds): + print(preds) + print(before_preds) + output_file = open(f"./output/sok/classes/{contract_addr}-classes.json","a") + output_data = {"before_preds": parse_original(all_preds_dict, [before_preds]), "after_preds": parse_original(all_preds_dict, [preds])} + json.dump(output_data, output_file) + output_file.close() + if(len(preds) > len(before_preds)): + print("ERROR") + exit() + + return preds + + + + +def regex_parse(a: str,): + """Uses regex to clean daikon expression from [...], Sum(), ori() """ + a = re.sub(r'\[\.\.\.\]', 'arrayPlaceHolder', a) + result = re.search(r'ori\(([\w\[\]\(\)\.]+)\)', a) + if result: + a = result.group(1) + + result = re.search(r'Sum\(([\w\[\]\(\)\.]+)\)', a) + if result: + a = result.group(1) + + return a + + +def recursive_parse(a: str ,b="" ): + """Uses regex to clean daikon expression from [...], Sum(), ori() """ + + + if(a.startswith("ori")): + a = a[4:] + a = a[0:-1] + b += ".ori" + a = recursive_parse(a) + + if(a.startswith("Sum")): + a = a[4:] + a = a[0:-1] + b += ".sum" + a = recursive_parse(a) + + if(a.endswith("[...]")): + a = a[0:-5] + b += ".spo" + a = recursive_parse(a) + + + return a + b + + +def split_expression(a:str): + """Takes a predicates and splits into the a tuple of + (lefthandside of expression, relation, righthandside of expression)""" + if ">=" in a: + a = re.split("(\>=)",a) + if "<=" in a: + a = re.split("(\<=)",a) + elif "==" in a: + a = re.split("(\==)",a) + elif "!=" in a: + a = re.split("(\!=)",a) + elif ">" in a: + a = re.split("(\>)",a) + elif "<" in a: + a = re.split("(\<)",a) + + left = a[0] + right = a[-1] + relation = a[1] + return left, relation, right + + + + + +def split_expression(a:str): + """Takes a predicates and splits into the a tuple of + (lefthandside of expression, relation, righthandside of expression)""" + if "elem in" in a: + a = re.split("(elem in)", a) + if "one of" in a: + a = re.split("(one of)", a) + if ">=" in a: + a = re.split("(\>=)",a) + if "<=" in a: + a = re.split("(\<=)",a) + elif "==" in a: + a = re.split("(\==)",a) + elif "!=" in a: + a = re.split("(\!=)",a) + elif ">" in a: + a = re.split("(\>)",a) + elif "<" in a: + a = re.split("(\<)",a) + + left = a[0] + right = a[-1] + relation = a[1] + return left, relation, right + +def parse_daikon(a:str): + """Takes a daikon style predicate and create a tuple of the (invovled variabels, + orignal predicate, parsed predicate) + + """ + original = a + left, delimeter, right = split_expression(a) + left = recursive_parse(left.strip()) + right = recursive_parse(right.strip()) + if(right.isnumeric()): + parsed_right = "Literal" + + else: + parsed_right = right + + return (left+ " " + parsed_right, original, f"{left} {delimeter} {right}") + + +def print_list(list): + for x in list: + print(x) + +if __name__ == "__main__": + + # pred_list = [ + + # "_value > 0", + # "_to != 0", + # "ori(Sum(balances[...])) > 0", + # "ori(Sum(balances[...])) == 5000000000000000000000000", + # "ori(Sum(balances[...])) one of [5000000000000000000000000]", + # "msg.value == 0", + # "msg.value one of [0]", + # "ori(totalSupply_) > 0", + # "ori(totalSupply_) == 5000000000000000000000000", + # "ori(totalSupply_) one of [5000000000000000000000000]", + # "ori(unfrozen) == true", + # "ori(owner) != 0" + # ] + # parsed_list = parse_daikon_list(pred_list) + + + # cat, pred = parsed_to_dict(parsed_list) + + # red = find_strongest_in_dict(cat) + + + # for x in pred_list: + # print(x) + # red = parse_original(pred, red) + # print("_________________________________________________") + # for x in red: + # print(x) + + # print(recursive_parse("Sum(stakingTokenBalances[...])")) + # print(recursive_parse("ori(Sum(stakingTokenBalances[...]))")) + # print(comparator.compare("stakingTokenBalances_spo_sum_ == stakingTokenBalances_spo_sum_ori_", "stakingTokenBalances_spo_sum_ <= stakingTokenBalances_spo_sum_ori_")) + + # print(comparator.compare("x < y", "x <= y")) + ##print(comparator.compare("x > y", "x >= y")) + path = sys.argv[1] + contract_addr = path[43:83] + + reduce_json(path, contract_addr) + + + # print(comparator.compare("_balances[msg.sender_ori]._ori <= _balances_spo_sum_", + # "_balances[msg.sender]._ori < _balances_spo_sum_")) + + # print(comparator.compare("stakingTokenBalances > stakingTokenBalances", "stakingTokenBalances != stakingTokenBalances")) + # print(comparator.compare("x > y" ,"x != y")) + # # print(comparator.compare(predicate1="exampleFunction(x) > exampleFunction(y)", predicate2="exampleFunction(x) >= exampleFunction(y)")) +# print(comparator.compare("x - 1 < y", "x - 1 <= y")) + # # print(comparator.compare("x + 1 < y", "x + 1 <= y")) + # # print(comparator.compare("x <= y", "x == y")) + # # print(comparator.compare("x >= y", "x == y")) \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/reader.py b/use-cases/dynamically-mined-invariant-denoising/reader.py new file mode 100644 index 0000000..2b8d8e6 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/reader.py @@ -0,0 +1,351 @@ +import json +import sys +import predi.comparator as cp +import re +import time +import os + + +comparator = cp.Comparator() +output_folder = "" + +def parse_daikon_list(predicates: list): + """Takes a list of predicates and outputs a list of parsed predicats""" + parsed_list = [] + for expression in predicates: + parsed = parse_daikon(expression) + parsed_list.append(parsed) + return parsed_list + +def parsed_to_dict(parsed:list): + """Takes a parsed list of predicates and creates a two dicts one where the predicates are grouped according to + their involved variabels and one where parsed predicates are mapped to their orignal format """ + category_dict = {} + preds_dict = {} + for pred in parsed: + big_key ,k, v = pred + if big_key in category_dict: + category_dict[big_key] = category_dict[big_key] + [v] + else: + category_dict[big_key] = [v] + preds_dict[v] = k + + return category_dict, preds_dict + + +def find_strongest_in_dict(preds_dict: dict, contract_addr, all_preds_dict): + """Takes a dict of predicates and find the strongest for each one and outputs a new list of reduced preds """ + reduced_preds = [] + + + # Open the output file in write mode + for pred in preds_dict.values(): + reduced_pred = find_strongest_predicate(pred,contract_addr,all_preds_dict) + + reduced_preds.append(reduced_pred) + + + return reduced_preds + + +def parse_original(input: dict, list): + """Takes input dict with orignal predicates and the the parsed and outputs a list of the orignal predicates """ + new_list = [] + for preds in list: + for entry in preds: + new_list.append(input[entry]) + return new_list + + +def reduce_json(path: str, contract_addr: str): + """Reduces the invariants found in the path and outputs a new json""" + f = open(path) + data = json.load(f) + total_list = [] + total_list_red = [] + output_path= output_folder.replace("./output/", "").rstrip("/") + ".json" + + output_data: dict = {"contract": path } + total_parsing_time = 0 + total_reducing_time = 0 + for entry in data: + pre_conditions = entry["preconditions"] + post_conditions = entry["postconditions"] + total_list += pre_conditions + post_conditions + parsing_time_start = time.time() + parsed_preconditions = parse_daikon_list(pre_conditions) + parsed_postconditions = parse_daikon_list(post_conditions) + parsing_time_end = time.time() + total_parsing_time += (parsing_time_end - parsing_time_start) + category_preconditions_dict, parsed_preconditions_dict = parsed_to_dict(parsed_preconditions ) + category_postconditions_dict, parsed_postconditions_dict = parsed_to_dict(parsed_postconditions) + reducing_time_start = time.time() + strongest_preconditions = find_strongest_in_dict(category_preconditions_dict, contract_addr, parsed_preconditions_dict,) + strongest_postconditions = find_strongest_in_dict(category_postconditions_dict, contract_addr, parsed_postconditions_dict) + reducing_time_end = time.time() + total_reducing_time += (reducing_time_end - reducing_time_start) + reduced_preconditions = parse_original(parsed_preconditions_dict, strongest_preconditions) + reduced_postconditions = parse_original(parsed_postconditions_dict, strongest_postconditions) + entry["postconditions"] = reduced_postconditions + entry["preconditions"] =reduced_preconditions + total_list_red += reduced_postconditions + reduced_preconditions + + json_out = open(f"{output_folder}/{contract_addr}.json", "w") + json.dump(data, json_out, indent=4) + json_out.close() + output_data = { + "predicates_before_reduction": len(total_list), + "predicates_after_reduction": len(total_list_red), + "reduction_ratio": len(total_list_red) / len(total_list), + "total_parsing_time": total_parsing_time, + "total_reduction_time": total_reducing_time, + "contract": path +} + + + +# Check if the output file exists and load existing data + if os.path.exists(output_path): + with open(output_path, "r") as f: + try: + all_output_data = json.load(f) + except json.JSONDecodeError: + # In case of an empty or malformed file, start with an empty list + all_output_data = [] + else: + all_output_data = [] + +# Append the new data + all_output_data.append(output_data) + + # Write the updated list back to the file with indentation + with open(output_path, "w") as f: + json.dump(all_output_data, f, indent=4) + + + + + +def find_strongest_predicate(preds: list, contract_addr: str, all_preds_dict: dict): + """Takes a list of predicates preds and finds the strongest ones in the list""" + before_preds = preds.copy() + + for first_pred in preds: + stronger_predicate_exists = False + for second_pred in preds: + if '"' in first_pred or '"' in second_pred: + continue + result = comparator.compare(first_pred, second_pred) + if result == 'The predicates are equivalent.': + continue + if result == 'The first predicate is stronger.': + preds.remove(second_pred) + if result == 'The second predicate is stronger.': + preds.remove(first_pred) + + # Define file paths for removed and kept predicates + removed_file_path = f"{output_folder}/removed/{contract_addr}-removed.json" + kept_file_path = f"{output_folder}/kept/{contract_addr}-kept.json" + + # Prepare output data + output_data = { + "before_preds": parse_original(all_preds_dict, [before_preds]), + "after_preds": parse_original(all_preds_dict, [preds]) + } + + # Select the appropriate file path based on whether predicates were removed + file_path = removed_file_path if len(preds) != len(before_preds) else kept_file_path + + # Load existing data, append new data, and write back to the file + if os.path.exists(file_path): + with open(file_path, "r") as file: + existing_data = json.load(file) + else: + existing_data = [] + + existing_data.append(output_data) + + with open(file_path, "w") as file: + json.dump(existing_data, file, indent=4) + + # Error handling for unexpected increase in predicates + if len(preds) > len(before_preds): + print("ERROR") + exit() + + return preds + + +def regex_parse(a: str,): + """Uses regex to clean daikon expression from [...], Sum(), ori() """ + a = re.sub(r'\[\.\.\.\]', 'arrayPlaceHolder', a) + result = re.search(r'ori\(([\w\[\]\(\)\.]+)\)', a) + if result: + a = result.group(1) + + result = re.search(r'Sum\(([\w\[\]\(\)\.]+)\)', a) + if result: + a = result.group(1) + + return a + + +def recursive_parse(a: str ,b="" ): + """Uses regex to clean daikon expression from [...], Sum(), ori() """ + + + if(a.startswith("ori")): + a = a[4:] + a = a[0:-1] + b += ".ori" + a = recursive_parse(a) + + if(a.startswith("Sum")): + a = a[4:] + a = a[0:-1] + b += ".sum" + a = recursive_parse(a) + + if(a.endswith("[...]")): + a = a[0:-5] + b += ".spo" + a = recursive_parse(a) + + + return a + b + + +def split_expression(a:str): + """Takes a predicates and splits into the a tuple of + (lefthandside of expression, relation, righthandside of expression)""" + if ">=" in a: + a = re.split("(\>=)",a) + if "<=" in a: + a = re.split("(\<=)",a) + elif "==" in a: + a = re.split("(\==)",a) + elif "!=" in a: + a = re.split("(\!=)",a) + elif ">" in a: + a = re.split("(\>)",a) + elif "<" in a: + a = re.split("(\<)",a) + + left = a[0] + right = a[-1] + relation = a[1] + return left, relation, right + + + + + +def split_expression(a:str): + """Takes a predicates and splits into the a tuple of + (lefthandside of expression, relation, righthandside of expression)""" + if "elem in" in a: + a = re.split("(elem in)", a) + if "one of" in a: + a = re.split("(one of)", a) + if ">=" in a: + a = re.split("(\>=)",a) + if "<=" in a: + a = re.split("(\<=)",a) + elif "==" in a: + a = re.split("(\==)",a) + elif "!=" in a: + a = re.split("(\!=)",a) + elif ">" in a: + a = re.split("(\>)",a) + elif "<" in a: + a = re.split("(\<)",a) + + left = a[0] + right = a[-1] + relation = a[1] + return left, relation, right + +def parse_daikon(a:str): + """Takes a daikon style predicate and create a tuple of the (invovled variabels, + orignal predicate, parsed predicate) + + """ + original = a + left, delimeter, right = split_expression(a) + left = recursive_parse(left.strip()) + right = recursive_parse(right.strip()) + if(right.isnumeric()): + parsed_right = "Literal" + + else: + parsed_right = right + + return (left+ " " + parsed_right, original, f"{left} {delimeter} {right}") + + +def print_list(list): + for x in list: + print(x) + + +def extract_address(file_path): + # Regular expression to match Ethereum address format + match = re.search(r'0x[a-fA-F0-9]{40}', file_path) + return match.group(0) if match else None + +if __name__ == "__main__": + + # pred_list = [ + + # "_value > 0", + # "_to != 0", + # "ori(Sum(balances[...])) > 0", + # "ori(Sum(balances[...])) == 5000000000000000000000000", + # "ori(Sum(balances[...])) one of [5000000000000000000000000]", + # "msg.value == 0", + # "msg.value one of [0]", + # "ori(totalSupply_) > 0", + # "ori(totalSupply_) == 5000000000000000000000000", + # "ori(totalSupply_) one of [5000000000000000000000000]", + # "ori(unfrozen) == true", + # "ori(owner) != 0" + # ] + # parsed_list = parse_daikon_list(pred_list) + + + # cat, pred = parsed_to_dict(parsed_list) + + # red = find_strongest_in_dict(cat) + + + # for x in pred_list: + # print(x) + # red = parse_original(pred, red) + # print("_________________________________________________") + # for x in red: + # print(x) + + # print(recursive_parse("Sum(stakingTokenBalances[...])")) + # print(recursive_parse("ori(Sum(stakingTokenBalances[...]))")) + # print(comparator.compare("stakingTokenBalances_spo_sum_ == stakingTokenBalances_spo_sum_ori_", "stakingTokenBalances_spo_sum_ <= stakingTokenBalances_spo_sum_ori_")) + + # print(comparator.compare("x < y", "x <= y")) + ##print(comparator.compare("x > y", "x >= y")) + path = sys.argv[1] + output_folder = sys.argv[2] + print(path) + contract_addr = extract_address(path) + + reduce_json(path, contract_addr) + + + # print(comparator.compare("_balances[msg.sender_ori]._ori <= _balances_spo_sum_", + # "_balances[msg.sender]._ori < _balances_spo_sum_")) + + # print(comparator.compare("stakingTokenBalances > stakingTokenBalances", "stakingTokenBalances != stakingTokenBalances")) + # print(comparator.compare("x > y" ,"x != y")) + # # print(comparator.compare(predicate1="exampleFunction(x) > exampleFunction(y)", predicate2="exampleFunction(x) >= exampleFunction(y)")) +# print(comparator.compare("x - 1 < y", "x - 1 <= y")) + # # print(comparator.compare("x + 1 < y", "x + 1 <= y")) + # # print(comparator.compare("x <= y", "x == y")) + # # print(comparator.compare("x >= y", "x == y")) \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/reduce.py b/use-cases/dynamically-mined-invariant-denoising/reduce.py new file mode 100644 index 0000000..12f99b9 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/reduce.py @@ -0,0 +1,53 @@ +from parser import parse_original +from predi import comparator +import os +import json + +def find_strongest_predicate(preds: list, contract_addr: str, all_preds_dict: dict): + """Takes a list of predicates preds and finds the strongest ones in the list""" + before_preds = preds.copy() + + for first_pred in preds: + stronger_predicate_exists = False + for second_pred in preds: + if '"' in first_pred or '"' in second_pred: + continue + result = comparator.compare(first_pred, second_pred) + if result == 'The predicates are equivalent.': + continue + if result == 'The first predicate is stronger.': + preds.remove(second_pred) + if result == 'The second predicate is stronger.': + preds.remove(first_pred) + + # Define file paths for removed and kept predicates + removed_file_path = f"{output_folder}/removed/{contract_addr}-removed.json" + kept_file_path = f"{output_folder}/kept/{contract_addr}-kept.json" + + # Prepare output data + output_data = { + "before_preds": parse_original(all_preds_dict, [before_preds]), + "after_preds": parse_original(all_preds_dict, [preds]) + } + + # Select the appropriate file path based on whether predicates were removed + file_path = removed_file_path if len(preds) != len(before_preds) else kept_file_path + + # Load existing data, append new data, and write back to the file + if os.path.exists(file_path): + with open(file_path, "r") as file: + existing_data = json.load(file) + else: + existing_data = [] + + existing_data.append(output_data) + + with open(file_path, "w") as file: + json.dump(existing_data, file, indent=4) + + # Error handling for unexpected increase in predicates + if len(preds) > len(before_preds): + print("ERROR") + exit() + + return preds diff --git a/use-cases/dynamically-mined-invariant-denoising/similarty.py b/use-cases/dynamically-mined-invariant-denoising/similarty.py new file mode 100644 index 0000000..aa7ee71 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/similarty.py @@ -0,0 +1,92 @@ +from predi.comparator import Comparator +import re +list =[ "Sum(stakingTokenBalances[...])", + "Sum(stakingTokenBalances[...]) ", + "Sum(stakingTokenBalances[...])", + "0",] + + +list2 = [ "ori(Sum(stakingTokenBalances[...])) >= stakingTokenSupply", + "ori(Sum(stakingTokenBalances[...])) > stakingTokenSupply", + "ori(Sum(stakingTokenBalances[...])) != stakingTokenSupply"] + + + +def jaccard_index_characters(str1, str2): + set1 = set(str1) + set2 = set(str2) + + intersection = set1.intersection(set2) + union = set1.union(set2) + + jaccard_index = len(intersection) / len(union) + return jaccard_index + + + +def regex_parse(a: str): + """Uses regex to clean daikon expression from [...], Sum(), ori() """ + a = re.sub(r'\[\.\.\.\]', '[placeHolder]', a) + result = re.search(r'ori\(([\w\[\]\(\)\.]+)\)', a) + if result: + a = result.group(1) + + result = re.search(r'Sum\(([\w\[\]\(\)\.]+)\)', a) + if result: + a = result.group(1) + + return a + + +def recursive_parse(a: str): + """Uses regex to clean daikon expression from [...], Sum(), ori() """ + if(a.startswith("ori") or a.startswith("Sum")): + a = a[4:] + a = a[0:-1] + a = recursive_parse(a) + + if(a.endswith("[...]")): + a = a[0:-5] + a += "[spreadOperator]" + + return a + + + +# for exp in list: +# print("___") +# print(exp) +# print(recursive_parse(exp)) + + +# print(recursive_parse("ori(Sum(stakingTokenBalances[...]))")) + + + +# for x in list: +# for x1 in list2: +# print(x, x1) +# print(jaccard_index_characters(x,x1)) +# cp = Comparator() +# print(cp.compare("foo$x$ == 3", "foo$x$ > 3")) + + +print(jaccard_index_characters("ori(_status) > 0", + "ori(_status) == 1")) + +print(jaccard_index_characters("ori(Sum(stakingTokenBalances[...])) != stakingTokenSupply", + "Sum(stakingTokenBalances[...]) <= stakingTokenSupply")) + + + +# print(cp.compare("_status > ori(_status)", "_status == ori(_status)")) + + +# print(comparator.compare("x == 1", "x == 0 || x == 2 || x == 3 || x == 1 || x == 6 || x == 7 || x == 9 || x == 8 || x == 10")) +# print(comparator.compare("stakingTokenBalances > stakingTokenBalances", "stakingTokenBalances != stakingTokenBalances")) +# print(comparator.compare("x > y" ,"x != y")) +# # print(comparator.compare(predicate1="exampleFunction(x) > exampleFunction(y)", predicate2="exampleFunction(x) >= exampleFunction(y)")) +# # print(comparator.compare("x - 1 < y", "x - 1 <= y")) +# # print(comparator.compare("x + 1 < y", "x + 1 <= y")) +# # print(comparator.compare("x <= y", "x == y")) +# # print(comparator.compare("x >= y", "x == y")) \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/sok.json b/use-cases/dynamically-mined-invariant-denoising/sok.json new file mode 100644 index 0000000..103323c --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/sok.json @@ -0,0 +1,82 @@ +[ + { + "predicates_before_reduction": 1491, + "predicates_after_reduction": 924, + "reduction_ratio": 0.6197183098591549, + "total_parsing_time": 0.003945112228393555, + "total_reduction_time": 51.6808500289917, + "contract": "./invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json" + }, + { + "predicates_before_reduction": 88, + "predicates_after_reduction": 70, + "reduction_ratio": 0.7954545454545454, + "total_parsing_time": 0.0003712177276611328, + "total_reduction_time": 1.672656774520874, + "contract": "./invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json" + }, + { + "predicates_before_reduction": 45, + "predicates_after_reduction": 33, + "reduction_ratio": 0.7333333333333333, + "total_parsing_time": 0.0002181529998779297, + "total_reduction_time": 1.381868839263916, + "contract": "./invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json" + }, + { + "predicates_before_reduction": 708, + "predicates_after_reduction": 430, + "reduction_ratio": 0.6073446327683616, + "total_parsing_time": 0.002055644989013672, + "total_reduction_time": 31.290276527404785, + "contract": "./invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json" + }, + { + "predicates_before_reduction": 141, + "predicates_after_reduction": 130, + "reduction_ratio": 0.9219858156028369, + "total_parsing_time": 0.0005276203155517578, + "total_reduction_time": 3.0120651721954346, + "contract": "./invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json" + }, + { + "predicates_before_reduction": 39, + "predicates_after_reduction": 39, + "reduction_ratio": 1.0, + "total_parsing_time": 0.00020503997802734375, + "total_reduction_time": 1.025242567062378, + "contract": "./invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json" + }, + { + "predicates_before_reduction": 330, + "predicates_after_reduction": 274, + "reduction_ratio": 0.8303030303030303, + "total_parsing_time": 0.0010573863983154297, + "total_reduction_time": 8.86786961555481, + "contract": "./invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json" + }, + { + "predicates_before_reduction": 299, + "predicates_after_reduction": 220, + "reduction_ratio": 0.7357859531772575, + "total_parsing_time": 0.0009560585021972656, + "total_reduction_time": 10.77918028831482, + "contract": "./invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json" + }, + { + "predicates_before_reduction": 468, + "predicates_after_reduction": 293, + "reduction_ratio": 0.6260683760683761, + "total_parsing_time": 0.001405954360961914, + "total_reduction_time": 16.010133504867554, + "contract": "./invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json" + }, + { + "predicates_before_reduction": 56, + "predicates_after_reduction": 56, + "reduction_ratio": 1.0, + "total_parsing_time": 0.00022912025451660156, + "total_reduction_time": 1.5980191230773926, + "contract": "./invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json" + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/sok.txt b/use-cases/dynamically-mined-invariant-denoising/sok.txt new file mode 100644 index 0000000..7b07f49 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/sok.txt @@ -0,0 +1,50 @@ +/Users/gustavkasche/InvPurge/InvCon+/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json +Predicates before reduction: 1491 +Predicates after reduction: 924 +Reduction ratio: 0.6197183098591549 +Total parsing time: 0.004885196685791016 s +Total reduction time: 64.65608477592468 s +/Users/gustavkasche/InvPurge/InvCon+/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json +/Users/gustavkasche/InvPurge/InvCon+/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json +Predicates before reduction: 45 +Predicates after reduction: 33 +Reduction ratio: 0.7333333333333333 +Total parsing time: 0.0003199577331542969 s +Total reduction time: 1.7243852615356445 s +/Users/gustavkasche/InvPurge/InvCon+/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json +/Users/gustavkasche/InvPurge/InvCon+/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json +Predicates before reduction: 141 +Predicates after reduction: 130 +Reduction ratio: 0.9219858156028369 +Total parsing time: 0.0007388591766357422 s +Total reduction time: 3.7112464904785156 s +/Users/gustavkasche/InvPurge/InvCon+/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json +Predicates before reduction: 39 +Predicates after reduction: 39 +Reduction ratio: 1.0 +Total parsing time: 0.00024080276489257812 s +Total reduction time: 1.3424432277679443 s +/Users/gustavkasche/InvPurge/InvCon+/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json +Predicates before reduction: 330 +Predicates after reduction: 274 +Reduction ratio: 0.8303030303030303 +Total parsing time: 0.001226663589477539 s +Total reduction time: 11.030735969543457 s +/Users/gustavkasche/InvPurge/InvCon+/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json +Predicates before reduction: 299 +Predicates after reduction: 220 +Reduction ratio: 0.7357859531772575 +Total parsing time: 0.0012552738189697266 s +Total reduction time: 13.606786012649536 s +/Users/gustavkasche/InvPurge/InvCon+/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json +Predicates before reduction: 468 +Predicates after reduction: 293 +Reduction ratio: 0.6260683760683761 +Total parsing time: 0.001814126968383789 s +Total reduction time: 20.23685646057129 s +/Users/gustavkasche/InvPurge/InvCon+/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json +Predicates before reduction: 56 +Predicates after reduction: 56 +Reduction ratio: 1.0 +Total parsing time: 0.0003132820129394531 s +Total reduction time: 2.064401149749756 s diff --git a/use-cases/dynamically-mined-invariant-denoising/sok_random_sample_kept_after_eval.json b/use-cases/dynamically-mined-invariant-denoising/sok_random_sample_kept_after_eval.json new file mode 100644 index 0000000..d417372 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/sok_random_sample_kept_after_eval.json @@ -0,0 +1,452 @@ +[ + { + "before_preds": [ + "ori(e10) == 0" + ], + "after_preds": [ + "ori(e10) == 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) one of [0,115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) one of [0,115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "after_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "valid_output": true + }, + { + "before_preds": [ + "owner != pendingOwner" + ], + "after_preds": [ + "owner != pendingOwner" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(initialized) == initialized" + ], + "after_preds": [ + "ori(initialized) == initialized" + ], + "valid_output": true + }, + { + "before_preds": [ + "dest != 0" + ], + "after_preds": [ + "dest != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))" + ], + "valid_output": true + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(glbDebtVal) != _totalSupply" + ], + "after_preds": [ + "ori(glbDebtVal) != _totalSupply" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "valid_output": true + }, + { + "before_preds": [ + "e10 one of [0]" + ], + "after_preds": [ + "e10 one of [0]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(bar) != 0" + ], + "after_preds": [ + "ori(bar) != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_gonBalances[owner_]) == 0" + ], + "after_preds": [ + "ori(_gonBalances[owner_]) == 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_oldMPC) == _oldMPC" + ], + "after_preds": [ + "ori(_oldMPC) == _oldMPC" + ], + "valid_output": true + }, + { + "before_preds": [ + "msg.sender == ori(admin)" + ], + "after_preds": [ + "msg.sender == ori(admin)" + ], + "valid_output": true + }, + { + "before_preds": [ + "_newMPC != 0" + ], + "after_preds": [ + "_newMPC != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(e10) == 0" + ], + "after_preds": [ + "ori(e10) == 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ], + "valid_output": true + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_totalSupply) one of [20424063187886226982599]" + ], + "after_preds": [ + "ori(_totalSupply) one of [20424063187886226982599]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != _guardCounter" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != _guardCounter" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "_balances[msg.sender] one of [0,999710360703060260929,65205495417134526340]" + ], + "after_preds": [ + "_balances[msg.sender] one of [0,999710360703060260929,65205495417134526340]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(reservePool) != loan" + ], + "after_preds": [ + "ori(reservePool) != loan" + ], + "valid_output": true + }, + { + "before_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "after_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [128942301002958992697573,134406668607338084218100]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [128942301002958992697573,134406668607338084218100]" + ], + "valid_output": true + }, + { + "before_preds": [ + "length one of [0]" + ], + "after_preds": [ + "length one of [0]" + ], + "valid_output": true + }, + { + "before_preds": [ + "token1 != 0" + ], + "after_preds": [ + "token1 != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "Q112 == 0" + ], + "after_preds": [ + "Q112 == 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "toChainID > 0" + ], + "after_preds": [ + "toChainID > 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_governance != 0" + ], + "after_preds": [ + "_governance != 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "_bridges[weth] == ori(_bridges[weth])" + ], + "after_preds": [ + "_bridges[weth] == ori(_bridges[weth])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Q112) one of [0]" + ], + "after_preds": [ + "ori(Q112) one of [0]" + ], + "valid_output": true + }, + { + "before_preds": [ + "_bridges[weth] == ori(_bridges[weth])" + ], + "after_preds": [ + "_bridges[weth] == ori(_bridges[weth])" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "valid_output": true + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(jars[_token]) == 0" + ], + "after_preds": [ + "ori(jars[_token]) == 0" + ], + "valid_output": true + }, + { + "before_preds": [ + "weth != sushi" + ], + "after_preds": [ + "weth != sushi" + ], + "valid_output": true + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ], + "valid_output": true + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/sok_random_sample_removed_after_eval.json b/use-cases/dynamically-mined-invariant-denoising/sok_random_sample_removed_after_eval.json new file mode 100644 index 0000000..9c5e71d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/sok_random_sample_removed_after_eval.json @@ -0,0 +1,535 @@ +[ + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) == 500" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) > Sum(_balances[...])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ], + "after_preds": [ + "ori(Q112) == Q112" + ], + "valid_output": true + }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime == 1624013046" + ], + "valid_output": true + }, + { + "before_preds": [ + "glbDebtShare >= nextPositionID", + "glbDebtShare > nextPositionID", + "glbDebtShare != nextPositionID" + ], + "after_preds": [ + "glbDebtShare > nextPositionID" + ], + "valid_output": true + }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime == 1624013046" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "valid_output": true + }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime == 1624013046" + ], + "valid_output": true + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ], + "valid_output": true + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ], + "valid_output": true + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply == 60000000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "_gonsPerFragment >= ori(_gonsPerFragment)", + "_gonsPerFragment > ori(_gonsPerFragment)", + "_gonsPerFragment != ori(_gonsPerFragment)" + ], + "after_preds": [ + "_gonsPerFragment > ori(_gonsPerFragment)" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "after_preds": [ + "ori(length) == length" + ], + "valid_output": true + }, + { + "before_preds": [ + "e10 == ori(e10)", + "e10 >= ori(e10)", + "e10 <= ori(e10)" + ], + "after_preds": [ + "e10 == ori(e10)" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "after_preds": [ + "ori(length) == length" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee3)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee3)" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) > _totalSupply", + "ori(_totalSupply) != _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) > _totalSupply" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee1)", + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee1)" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) <= ori(Sum(_gonBalances[...]))" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "valid_output": true + }, + { + "before_preds": [ + "_gonBalances[owner_] > 0", + "_gonBalances[owner_] == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "_gonBalances[owner_] == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(decimals[...]) > 0", + "Sum(decimals[...]) == 81" + ], + "after_preds": [ + "Sum(decimals[...]) == 81" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[sender])", + "ori(Sum(_balances[...])) > ori(_balances[sender])", + "ori(Sum(_balances[...])) != ori(_balances[sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > ori(_balances[sender])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) == 1000" + ], + "valid_output": true + }, + { + "before_preds": [ + "amount > 0", + "amount == 40963957051" + ], + "after_preds": [ + "amount == 40963957051" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(glbDebtVal) == glbDebtVal", + "ori(glbDebtVal) >= glbDebtVal", + "ori(glbDebtVal) <= glbDebtVal" + ], + "after_preds": [ + "ori(glbDebtVal) == glbDebtVal" + ], + "valid_output": true + }, + { + "before_preds": [ + "e10 == ori(e10)", + "e10 >= ori(e10)", + "e10 <= ori(e10)" + ], + "after_preds": [ + "e10 == ori(e10)" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) == 100" + ], + "valid_output": true + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "after_preds": [ + "ori(length) == length" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[msg.sender]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) > 0", + "ori(Sum(decimals[...])) == 81" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == 81" + ], + "valid_output": true + }, + { + "before_preds": [ + "toChainID > 0", + "toChainID == 56" + ], + "after_preds": [ + "toChainID == 56" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[msg.sender]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(fee3) <= fee2", + "ori(fee3) < fee2", + "ori(fee3) != fee2" + ], + "after_preds": [ + "ori(fee3) < fee2" + ], + "valid_output": true + }, + { + "before_preds": [ + "id <= _guardCounter", + "id < _guardCounter", + "id != _guardCounter" + ], + "after_preds": [ + "id < _guardCounter" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) == 500" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ], + "after_preds": [ + "ori(Q112) == Q112" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) == ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) >= ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) <= ori(_gonBalances[owner_])" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) == ori(_gonBalances[owner_])" + ], + "valid_output": true + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) == _gonBalances[owner_]", + "Sum(_gonBalances[...]) >= _gonBalances[owner_]", + "Sum(_gonBalances[...]) <= _gonBalances[owner_]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == _gonBalances[owner_]" + ], + "valid_output": true + }, + { + "before_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "after_preds": [ + "ori(length) == length" + ], + "valid_output": true + }, + { + "before_preds": [ + "_gonsPerFragment >= ori(_gonsPerFragment)", + "_gonsPerFragment > ori(_gonsPerFragment)", + "_gonsPerFragment != ori(_gonsPerFragment)" + ], + "after_preds": [ + "_gonsPerFragment > ori(_gonsPerFragment)" + ], + "valid_output": true + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ], + "valid_output": true + } +] \ No newline at end of file From 25a2377e332a51ccc1cf93c1999ca63e3566b4e6 Mon Sep 17 00:00:00 2001 From: Mojtaba Eshghie Date: Sat, 16 Aug 2025 10:14:02 +0200 Subject: [PATCH 2/7] Feature #67: Adding the new results running denoiser. --- .../erc20.json | 8 + .../full_experiment.bash | 0 .../full_experiment2.bash | 0 ...0c2e08acb830f2a4ee4d34b48594dade48651.json | 296 ++ ...8acb830f2a4ee4d34b48594dade48651-kept.json | 330 ++ ...b830f2a4ee4d34b48594dade48651-removed.json | 210 + ...1df026010b5aea781f90542ee19e900f2db15.json | 84 + ...4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json | 1298 +++++ ...4977bbed67e101bb80fc07fccfba655c0a64f.json | 72 + ...66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json | 846 +++ ...7259b2b3a4c17e7c43c54409810af48ba5210.json | 680 +++ ...a87899490ece95443e979ca9485cbe7e71522.json | 539 ++ ...e6fecd516ecc3849daf6845e3ec868087b755.json | 433 ++ ...93840aad42d2621e1a452bf5d7076ff804d61.json | 448 ++ ...43e627e64355f1861cec6d3a6688b31a6f952.json | 572 +++ ...fc0b43ab98eb91e9836129d1ee7c3bc95df50.json | 163 + ...6010b5aea781f90542ee19e900f2db15-kept.json | 218 + ...e803ee84009ce6e1ecf419c9cb1e8af0-kept.json | 4514 +++++++++++++++++ ...bed67e101bb80fc07fccfba655c0a64f-kept.json | 314 ++ ...d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json | 2226 ++++++++ ...2b3a4c17e7c43c54409810af48ba5210-kept.json | 1858 +++++++ ...9490ece95443e979ca9485cbe7e71522-kept.json | 450 ++ ...d516ecc3849daf6845e3ec868087b755-kept.json | 986 ++++ ...aad42d2621e1a452bf5d7076ff804d61-kept.json | 1440 ++++++ ...7e64355f1861cec6d3a6688b31a6f952-kept.json | 1490 ++++++ ...3ab98eb91e9836129d1ee7c3bc95df50-kept.json | 450 ++ ...0b5aea781f90542ee19e900f2db15-removed.json | 62 + ...3ee84009ce6e1ecf419c9cb1e8af0-removed.json | 3435 +++++++++++++ ...b37fa76aa3ed1ff33e8e39f0b9c7a-removed.json | 1496 ++++++ ...a4c17e7c43c54409810af48ba5210-removed.json | 394 ++ ...0ece95443e979ca9485cbe7e71522-removed.json | 132 + ...6ecc3849daf6845e3ec868087b755-removed.json | 69 + ...42d2621e1a452bf5d7076ff804d61-removed.json | 414 ++ ...4355f1861cec6d3a6688b31a6f952-removed.json | 1033 ++++ .../reader.py | 27 +- .../sok.json | 48 +- 36 files changed, 27004 insertions(+), 31 deletions(-) mode change 100644 => 100755 use-cases/dynamically-mined-invariant-denoising/full_experiment.bash mode change 100644 => 100755 use-cases/dynamically-mined-invariant-denoising/full_experiment2.bash create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6684977bbed67e101bb80fc07fccfba655c0a64f-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x818e6fecd516ecc3849daf6845e3ec868087b755-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json diff --git a/use-cases/dynamically-mined-invariant-denoising/erc20.json b/use-cases/dynamically-mined-invariant-denoising/erc20.json index d1e19a6..cc292a5 100644 --- a/use-cases/dynamically-mined-invariant-denoising/erc20.json +++ b/use-cases/dynamically-mined-invariant-denoising/erc20.json @@ -150,5 +150,13 @@ "total_parsing_time": 0.0008337497711181641, "total_reduction_time": 6.636699199676514, "contract": "./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json" + }, + { + "predicates_before_reduction": 95, + "predicates_after_reduction": 63, + "reduction_ratio": 0.6631578947368421, + "total_parsing_time": 0.0007114410400390625, + "total_reduction_time": 5.690693140029907, + "contract": "./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json" } ] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/full_experiment.bash b/use-cases/dynamically-mined-invariant-denoising/full_experiment.bash old mode 100644 new mode 100755 diff --git a/use-cases/dynamically-mined-invariant-denoising/full_experiment2.bash b/use-cases/dynamically-mined-invariant-denoising/full_experiment2.bash old mode 100644 new mode 100755 diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651.json new file mode 100644 index 0000000..d603dae --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651.json @@ -0,0 +1,296 @@ +[ + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "disableTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "disableTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseApproval(_spender,_subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseApproval(_spender,_subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unfreeze()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "ori(Sum(balances[...])) == 5000000000000000000000000", + "ori(Sum(balances[...])) one of [5000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(totalSupply_) == 5000000000000000000000000", + "ori(totalSupply_) one of [5000000000000000000000000]", + "ori(unfrozen) == false", + "ori(owner) != 0", + "msg.sender == ori(owner)" + ], + "postconditions": [ + "Sum(balances[...]) == 5000000000000000000000000", + "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ == 5000000000000000000000000", + "totalSupply_ one of [5000000000000000000000000]", + "unfrozen == true", + "elem of balances[...] is one of [5000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "msg.sender == owner", + "ori(totalSupply_) == totalSupply_", + "unfrozen != ori(unfrozen)", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unfreeze()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(_from,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(_from,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "_value > 0", + "_to != 0", + "ori(Sum(balances[...])) == 5000000000000000000000000", + "ori(Sum(balances[...])) one of [5000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(totalSupply_) == 5000000000000000000000000", + "ori(totalSupply_) one of [5000000000000000000000000]", + "ori(unfrozen) == true", + "ori(owner) != 0" + ], + "postconditions": [ + "Sum(balances[...]) == 5000000000000000000000000", + "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ == 5000000000000000000000000", + "totalSupply_ one of [5000000000000000000000000]", + "unfrozen == true", + "elem of balances[...] is one of [5000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "ori(totalSupply_) == totalSupply_", + "unfrozen == ori(unfrozen)", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "allowTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "allowTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseApproval(_spender,_addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseApproval(_spender,_addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(_newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(_newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) == 5000000000000000000000000", + "ori(Sum(balances[...])) one of [5000000000000000000000000]", + "ori(totalSupply_) == 5000000000000000000000000", + "ori(totalSupply_) one of [5000000000000000000000000]", + "ori(owner) != 0", + "ori(Sum(balances[...])) == ori(totalSupply_)" + ], + "postconditions": [ + "Sum(balances[...]) == 5000000000000000000000000", + "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ == 5000000000000000000000000", + "totalSupply_ one of [5000000000000000000000000]", + "unfrozen == true", + "elem of balances[...] is one of [5000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) == ori(totalSupply_)", + "Sum(balances[...]) == totalSupply_", + "ori(Sum(balances[...])) == totalSupply_", + "ori(totalSupply_) == totalSupply_", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json new file mode 100644 index 0000000..7b20fcb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json @@ -0,0 +1,330 @@ +[ + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(unfrozen) == false" + ], + "after_preds": [ + "ori(unfrozen) == false" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "msg.sender == ori(owner)" + ], + "after_preds": [ + "msg.sender == ori(owner)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ], + "after_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "unfrozen == true" + ], + "after_preds": [ + "unfrozen == true" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "msg.sender == owner" + ], + "after_preds": [ + "msg.sender == owner" + ] + }, + { + "before_preds": [ + "unfrozen != ori(unfrozen)" + ], + "after_preds": [ + "unfrozen != ori(unfrozen)" + ] + }, + { + "before_preds": [ + "ori(owner) == owner" + ], + "after_preds": [ + "ori(owner) == owner" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_value > 0" + ], + "after_preds": [ + "_value > 0" + ] + }, + { + "before_preds": [ + "_to != 0" + ], + "after_preds": [ + "_to != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(unfrozen) == true" + ], + "after_preds": [ + "ori(unfrozen) == true" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ], + "after_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "unfrozen == true" + ], + "after_preds": [ + "unfrozen == true" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "unfrozen == ori(unfrozen)" + ], + "after_preds": [ + "unfrozen == ori(unfrozen)" + ] + }, + { + "before_preds": [ + "ori(owner) == owner" + ], + "after_preds": [ + "ori(owner) == owner" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ], + "after_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "unfrozen == true" + ], + "after_preds": [ + "unfrozen == true" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "ori(owner) == owner" + ], + "after_preds": [ + "ori(owner) == owner" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json new file mode 100644 index 0000000..b9b80d2 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json @@ -0,0 +1,210 @@ +[ + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(totalSupply_) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ], + "after_preds": [ + "totalSupply_ == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ], + "after_preds": [ + "ori(totalSupply_) == totalSupply_" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(totalSupply_) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ], + "after_preds": [ + "totalSupply_ == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ], + "after_preds": [ + "ori(totalSupply_) == totalSupply_" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(totalSupply_) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == ori(totalSupply_)", + "ori(Sum(balances[...])) >= ori(totalSupply_)", + "ori(Sum(balances[...])) <= ori(totalSupply_)" + ], + "after_preds": [ + "ori(Sum(balances[...])) == ori(totalSupply_)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ], + "after_preds": [ + "totalSupply_ == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(totalSupply_)", + "Sum(balances[...]) >= ori(totalSupply_)", + "Sum(balances[...]) <= ori(totalSupply_)" + ], + "after_preds": [ + "Sum(balances[...]) == ori(totalSupply_)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == totalSupply_", + "Sum(balances[...]) >= totalSupply_", + "Sum(balances[...]) <= totalSupply_" + ], + "after_preds": [ + "Sum(balances[...]) == totalSupply_" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == totalSupply_", + "ori(Sum(balances[...])) >= totalSupply_", + "ori(Sum(balances[...])) <= totalSupply_" + ], + "after_preds": [ + "ori(Sum(balances[...])) == totalSupply_" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ], + "after_preds": [ + "ori(totalSupply_) == totalSupply_" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json new file mode 100644 index 0000000..e1bab50 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json @@ -0,0 +1,84 @@ +[ + { + "func": "cache(size)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "cache(size)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "update()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Q112) == 0", + "ori(Q112) one of [0]", + "ori(e10) == 0", + "ori(e10) one of [0]", + "ori(length) == 0", + "ori(length) one of [0]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0" + ], + "postconditions": [ + "Q112 == 0", + "Q112 one of [0]", + "e10 == 0", + "e10 one of [0]", + "length == 0", + "length one of [0]", + "ori(Q112) == Q112", + "e10 == ori(e10)", + "ori(length) == length" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "update()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Q112) == 0", + "ori(Q112) one of [0]", + "ori(e10) == 0", + "ori(e10) one of [0]", + "ori(length) == 0", + "ori(length) one of [0]" + ], + "postconditions": [ + "Q112 == 0", + "Q112 one of [0]", + "e10 == 0", + "e10 one of [0]", + "length == 0", + "length one of [0]", + "ori(Q112) == Q112", + "e10 == ori(e10)", + "ori(length) == length" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json new file mode 100644 index 0000000..721f165 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json @@ -0,0 +1,1298 @@ +[ + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "amount == 79228162514000000000000000000", + "amount one of [79228162514000000000000000000]", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "spender != 0", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(_totalSupply) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [860260929152]", + "_totalSupply > 0", + "Sum(userDepoistTime[...]) > 0", + "timelock != 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [51597976325]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(fee2) == fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "_amount > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(userDepoistTime[msg.sender]) one of [0,1611890956,1612413709,1612672271,1612709011,1612516662]", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(_balances[msg.sender]) one of [0,494036168419,501354600,72,9986072971,9975667988]", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(Sum(_balances[...])) < ori(earnLowerlimit)", + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(earnLowerlimit) > ori(_balances[msg.sender])", + "ori(earnLowerlimit) > ori(_totalSupply)", + "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))", + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [860260929152]", + "_balances[msg.sender] > 0", + "_totalSupply > 0", + "Sum(userDepoistTime[...]) > 0", + "timelock != 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [51597976325]", + "RestrictContractCall == true", + "userDepoistTime[msg.sender] > 0", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(earnLowerlimit)", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) > ori(_balances[msg.sender])", + "Sum(_balances[...]) != earnLowerlimit", + "Sum(_balances[...]) > ori(_totalSupply)", + "ori(feeMax) == feeMax", + "ori(fee2) == fee2", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) < _totalSupply", + "ori(Sum(_balances[...])) < earnLowerlimit", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) != _balances[msg.sender]", + "ori(earnLowerlimit) != _totalSupply", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) < userDepoistTime[msg.sender]", + "fee3 == ori(fee3)", + "ori(governance) == governance", + "ori(controller) == controller", + "_balances[msg.sender] <= _totalSupply", + "_balances[msg.sender] > ori(_balances[msg.sender])", + "_balances[msg.sender] != earnLowerlimit", + "_balances[msg.sender] != ori(_totalSupply)", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != earnLowerlimit", + "_totalSupply > ori(_totalSupply)", + "ori(_balances[msg.sender]) < earnLowerlimit", + "Sum(userDepoistTime[...]) > ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= userDepoistTime[msg.sender]", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "earnLowerlimit > ori(_totalSupply)", + "_decimals == ori(_decimals)", + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "ori(Sum(userDepoistTime[...])) <= userDepoistTime[msg.sender]", + "ori(Sum(userDepoistTime[...])) < userDepoistTime[msg.sender]" + ] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [82641458184]", + "_totalSupply > 0", + "_totalSupply one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]", + "timelock != 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [37084585504]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(fee2) == fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setEarnLowerlimit(_earnLowerlimit)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [50815436600,82641458184]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "_earnLowerlimit > 0", + "_earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) == 5", + "ori(fee1) one of [5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [3224014173,1611989982]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [50815436600,82641458184]", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(earnLowerlimit) < _earnLowerlimit", + "msg.sender == ori(governance)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [50815436600,82641458184]", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [50815436600]", + "elem of _balances[...] is one of [50815436600,31826021500,84]", + "_totalSupply > 0", + "_totalSupply one of [50815436600,82641458184]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [3224014173,1611989982]", + "timelock != 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 == 5", + "fee1 one of [5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [3224014173]", + "elem of userDepoistTime[...] is one of [1611989982,1612024191]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(fee2) == fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) < earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "msg.sender == governance", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_earnLowerlimit == earnLowerlimit", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setEarnLowerlimit(_earnLowerlimit)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeAddress(fadd)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeAddress(fadd)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeRatio(fees)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) == 1310289998969", + "ori(Sum(_balances[...])) one of [1310289998969]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) == 5", + "ori(fee1) one of [5]", + "ori(Sum(userDepoistTime[...])) == 41922035526", + "ori(Sum(userDepoistTime[...])) one of [41922035526]", + "ori(_totalSupply) == 1310289998969", + "ori(_totalSupply) one of [1310289998969]", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(feeMax) > ori(fee2)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) > ori(fee1)", + "ori(fee2) > ori(fee3)", + "ori(fee2) < ori(fee1)", + "ori(fee3) < ori(fee1)", + "msg.sender == ori(timelock)" + ], + "postconditions": [ + "Sum(_balances[...]) == 1310289998969", + "Sum(_balances[...]) one of [1310289998969]", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [1310289998969]", + "elem of _balances[...] is one of [0,4,6,9,17,23,26,29,36,43,47,73,75,1300417580500,84,88,92,93,97,98,9872417260]", + "_totalSupply == 1310289998969", + "_totalSupply one of [1310289998969]", + "Sum(userDepoistTime[...]) == 41922035526", + "Sum(userDepoistTime[...]) one of [41922035526]", + "timelock != 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 == 10", + "fee1 one of [10]", + "controller != 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [41922035526]", + "elem of userDepoistTime[...] is one of [1612433282,1612411910,1612393607,1612411674,1612422047,1612497702,1612414375,1612493096,1612411957,1612410556,1612413117,1612399811,1612435272,1612419407,1612421072,1612459224,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612444665,1612414461,1612024191]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(feeMax) > fee3", + "ori(feeMax) > fee2", + "ori(feeMax) > fee1", + "ori(feeMax) == feeMax", + "ori(fee2) > fee3", + "ori(fee2) == fee2", + "ori(fee2) < fee1", + "ori(fee2) < feeMax", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) < fee2", + "ori(fee3) < fee1", + "ori(fee3) < feeMax", + "fee3 < fee2", + "fee3 < fee1", + "fee3 < feeMax", + "fee3 < ori(fee1)", + "msg.sender == timelock", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee2 < fee1", + "fee2 < feeMax", + "fee2 < ori(fee1)", + "fee1 < feeMax", + "fee1 > ori(fee1)", + "feeMax > ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeRatio(fees)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) == 851093071954", + "ori(Sum(_balances[...])) one of [851093071954]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "_governance != 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) == 5", + "ori(fee1) one of [5]", + "ori(Sum(userDepoistTime[...])) == 32247272285", + "ori(Sum(userDepoistTime[...])) one of [32247272285]", + "ori(_totalSupply) == 851093071954", + "ori(_totalSupply) one of [851093071954]", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "_governance != msg.sender", + "_governance != ori(governance)", + "msg.sender == ori(governance)" + ], + "postconditions": [ + "Sum(_balances[...]) == 851093071954", + "Sum(_balances[...]) one of [851093071954]", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [851093071954]", + "elem of _balances[...] is one of [0,4,6,9,18,23,26,29,36,73,75,77,84,115213479893,88,92,93,97,1373058547,734506532600]", + "_totalSupply == 851093071954", + "_totalSupply one of [851093071954]", + "Sum(userDepoistTime[...]) == 32247272285", + "Sum(userDepoistTime[...]) one of [32247272285]", + "timelock != 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 == 5", + "fee1 one of [5]", + "controller != 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [32247272285]", + "elem of userDepoistTime[...] is one of [1612411910,1612393607,1612411674,1612422047,1612414375,1612411957,1612410556,1612413117,1612399811,1612419407,1612421072,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612414461,1612024191]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(fee2) == fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "_governance == governance", + "token == ori(token)", + "ori(fee3) == fee3", + "msg.sender != governance", + "ori(governance) != governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setRestrictContractCall(enabled)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setRestrictContractCall(enabled)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimeLock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimeLock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "amount > 0", + "amount one of [4673850400,19974784100,120385957800,499026405900,31826021500]", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(_balances[recipient]) > 0", + "ori(_balances[recipient]) one of [36,77,18,84,88]", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "recipient != 0", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [38697044728,53210802285,43534554260,3224014173]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(Sum(_balances[...])) > ori(_balances[recipient])" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min == 9500", + "min one of [9500]", + "_balances[recipient] > 0", + "_balances[recipient] one of [499026405988,120385957836,4673850477,31826021584,19974784118]", + "token != 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [1003539015686]", + "_totalSupply > 0", + "_totalSupply one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [38697044728,53210802285,43534554260,3224014173]", + "timelock != 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [38697044728]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) > ori(_balances[recipient])", + "ori(feeMax) == feeMax", + "ori(fee2) == fee2", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "_balances[recipient] > ori(_balances[recipient])", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "amount > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(RestrictContractCall) == true", + "ori(Sum(_balances[...])) > 0", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(Sum(_allowances[sender][...])) > 0", + "ori(Sum(_allowances[sender][...])) one of [79228162513999999970070829900,79228162513999999968173978500,79228162514000000000000000000]", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "sender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "recipient != 0", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(_totalSupply) > 0", + "ori(_balances[sender]) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "amount < ori(Sum(_allowances[sender][...]))", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[sender])", + "ori(_balances[recipient]) != ori(_balances[sender])", + "sender != recipient" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_allowances[sender][...]) > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min == 9500", + "min one of [9500]", + "_balances[recipient] > 0", + "token != 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [860260929152]", + "_totalSupply > 0", + "Sum(userDepoistTime[...]) > 0", + "timelock != 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "elem of _allowances[sender][...] is one of [79228162513999999968173978500]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [51597976325]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) > _balances[sender]", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[sender])", + "ori(feeMax) == feeMax", + "_balances[sender] < ori(Sum(_balances[...]))", + "_balances[sender] < _balances[recipient]", + "_balances[sender] != ori(_balances[recipient])", + "_balances[sender] < ori(_balances[sender])", + "amount < Sum(_allowances[sender][...])", + "ori(fee2) == fee2", + "Sum(_allowances[sender][...]) < ori(Sum(_allowances[sender][...]))", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[sender])", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) <= ori(_balances[sender])", + "ori(_balances[recipient]) < ori(_balances[sender])" + ], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(userDepoistTime[msg.sender]) > 0", + "ori(userDepoistTime[msg.sender]) one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) one of [499026405988,120385957836,4673850477,31826021584,19974784118,262979296856]", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [38697044728,43534554260,53210802285,33859705567]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(Sum(_balances[...])) > ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))", + "ori(_balances[msg.sender]) < ori(_totalSupply)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [1408314583361]", + "_balances[msg.sender] == 0", + "_balances[msg.sender] one of [0]", + "_totalSupply > 0", + "_totalSupply one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [38697044728,43534554260,53210802285,33859705567]", + "timelock != 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [38697044728]", + "RestrictContractCall == true", + "userDepoistTime[msg.sender] > 0", + "userDepoistTime[msg.sender] one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) > ori(_balances[msg.sender])", + "Sum(_balances[...]) < ori(_totalSupply)", + "ori(feeMax) == feeMax", + "ori(fee2) == fee2", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) > _totalSupply", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]", + "fee3 == ori(fee3)", + "ori(governance) == governance", + "ori(controller) == controller", + "_balances[msg.sender] < _totalSupply", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_totalSupply)", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply < ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) > userDepoistTime[msg.sender]", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)", + "ori(Sum(userDepoistTime[...])) > userDepoistTime[msg.sender]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(feeMax) > ori(fee2)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) > ori(fee1)", + "ori(fee2) > ori(fee3)", + "ori(fee2) < ori(fee1)", + "ori(Sum(_balances[...])) != ori(earnLowerlimit)", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(earnLowerlimit) != ori(_totalSupply)", + "ori(fee3) < ori(fee1)" + ], + "postconditions": [ + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [0]", + "timelock != 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [0]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) != ori(earnLowerlimit)", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) != earnLowerlimit", + "ori(feeMax) > fee3", + "ori(feeMax) > fee2", + "ori(feeMax) > fee1", + "ori(feeMax) == feeMax", + "ori(fee2) > fee3", + "ori(fee2) == fee2", + "ori(fee2) < fee1", + "ori(fee2) < feeMax", + "ori(Sum(_balances[...])) < earnLowerlimit", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) != _totalSupply", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) < fee2", + "ori(fee3) < fee1", + "ori(fee3) < feeMax", + "fee3 < fee2", + "fee3 < fee1", + "fee3 < feeMax", + "fee3 < ori(fee1)", + "ori(controller) == controller", + "_totalSupply != earnLowerlimit", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee2 < fee1", + "fee2 < feeMax", + "fee2 < ori(fee1)", + "fee1 < feeMax", + "fee1 >= ori(fee1)", + "earnLowerlimit > ori(_totalSupply)", + "feeMax > ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [ + "ori(Sum(_balances[...])) <= ori(earnLowerlimit)", + "ori(Sum(_balances[...])) < ori(earnLowerlimit)", + "ori(earnLowerlimit) >= ori(_totalSupply)", + "ori(earnLowerlimit) > ori(_totalSupply)" + ], + "falsified_postconditions": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= _totalSupply", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(governance) == governance", + "_totalSupply >= ori(_totalSupply)", + "fee1 == ori(fee1)", + "fee1 <= ori(fee1)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f.json new file mode 100644 index 0000000..423c987 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f.json @@ -0,0 +1,72 @@ +[ + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(sushi) != 0", + "ori(factory) != 0", + "msg.sender != 0", + "ori(weth) != 0", + "token0 != 0", + "ori(bar) != 0", + "token1 != 0", + "ori(sushi) != ori(weth)", + "ori(sushi) != token0" + ], + "postconditions": [ + "weth != 0", + "sushi != 0", + "bar != 0", + "factory != 0", + "ori(sushi) != weth", + "ori(sushi) == sushi", + "ori(factory) == factory", + "ori(weth) == weth", + "ori(weth) != sushi", + "weth != sushi", + "token0 != sushi", + "bar == ori(bar)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(sushi) != 0", + "ori(factory) != 0", + "ori(weth) != 0", + "ori(bar) != 0", + "ori(sushi) != ori(weth)" + ], + "postconditions": [ + "weth != 0", + "sushi != 0", + "bar != 0", + "factory != 0", + "ori(sushi) != weth", + "ori(sushi) == sushi", + "ori(factory) == factory", + "ori(weth) == weth", + "ori(weth) != sushi", + "weth != sushi", + "bar == ori(bar)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json new file mode 100644 index 0000000..7086cf4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json @@ -0,0 +1,846 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_owner) != 0", + "msg.sender != 0", + "ori(lastAccrueTime) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "msg.value > 0", + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) >= ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(_totalSupply) >= ori(reservePool)", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) != ori(_guardCounter)", + "ori(reservePool) <= ori(Sum(_balances[...]))", + "ori(reservePool) != ori(_guardCounter)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_guardCounter)", + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ], + "postconditions": [ + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "_totalSupply > 0", + "_balances[msg.sender] > 0", + "elem of _balances[...] is one of [10000000000000000000]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "ori(decimals) == decimals", + "ori(glbDebtVal) != _totalSupply", + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) != _balances[msg.sender]", + "ori(glbDebtVal) != Sum(_balances[...])", + "ori(glbDebtVal) != _guardCounter", + "ori(glbDebtVal) <= glbDebtVal", + "ori(_owner) == _owner", + "ori(_totalSupply) < _totalSupply", + "ori(_totalSupply) >= reservePool", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != _guardCounter", + "ori(reservePool) < _totalSupply", + "ori(reservePool) <= reservePool", + "ori(reservePool) != _balances[msg.sender]", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != _guardCounter", + "ori(reservePool) <= glbDebtVal", + "lastAccrueTime >= ori(lastAccrueTime)", + "glbDebtShare == ori(glbDebtShare)", + "_totalSupply > reservePool", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply > _guardCounter", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != glbDebtVal", + "reservePool <= ori(Sum(_balances[...]))", + "reservePool != _balances[msg.sender]", + "reservePool < Sum(_balances[...])", + "reservePool != _guardCounter", + "reservePool != ori(_guardCounter)", + "reservePool <= glbDebtVal", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != _guardCounter", + "ori(_balances[msg.sender]) <= glbDebtVal", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) < Sum(_balances[...])", + "ori(Sum(_balances[...])) != _guardCounter", + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] > _guardCounter", + "_balances[msg.sender] > ori(_guardCounter)", + "_balances[msg.sender] != glbDebtVal", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != glbDebtVal", + "nextPositionID == ori(nextPositionID)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != glbDebtVal", + "config == ori(config)", + "ori(_guardCounter) != glbDebtVal" + ], + "falsified_preconditions": [ + "ori(_balances[msg.sender]) == 0", + "ori(glbDebtVal) <= ori(_totalSupply)", + "ori(glbDebtVal) <= ori(Sum(_balances[...]))", + "ori(reservePool) >= ori(_balances[msg.sender])", + "ori(_balances[msg.sender]) <= ori(_guardCounter)", + "ori(_balances[msg.sender]) < ori(_guardCounter)" + ], + "falsified_postconditions": [ + "ori(glbDebtVal) <= _totalSupply", + "ori(glbDebtVal) < _totalSupply", + "ori(glbDebtVal) <= Sum(_balances[...])", + "ori(glbDebtVal) < Sum(_balances[...])", + "ori(_totalSupply) >= glbDebtVal", + "ori(reservePool) <= _balances[msg.sender]", + "ori(reservePool) < _balances[msg.sender]", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)", + "_totalSupply >= glbDebtVal", + "_totalSupply > glbDebtVal", + "reservePool >= ori(_balances[msg.sender])", + "reservePool <= _balances[msg.sender]", + "reservePool < _balances[msg.sender]", + "ori(_balances[msg.sender]) <= _guardCounter", + "ori(_balances[msg.sender]) < _guardCounter", + "ori(Sum(_balances[...])) >= glbDebtVal", + "Sum(_balances[...]) >= glbDebtVal", + "Sum(_balances[...]) > glbDebtVal" + ] + }, + { + "func": "deposit()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "kill(id)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "kill(id)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "recover(token,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "recover(token,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "reduceReserve(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "reduceReserve(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "updateConfig(_config)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(glbDebtVal) == 14854681992016139228071", + "ori(glbDebtVal) one of [14854681992016139228071]", + "ori(_owner) != 0", + "ori(_totalSupply) == 20424063187886226982599", + "ori(_totalSupply) one of [20424063187886226982599]", + "ori(reservePool) == 148922433659474232", + "ori(reservePool) one of [148922433659474232]", + "msg.sender != 0", + "ori(lastAccrueTime) == 1602231144", + "ori(lastAccrueTime) one of [1602231144]", + "ori(Sum(_balances[...])) == 20424063187886226982599", + "ori(Sum(_balances[...])) one of [20424063187886226982599]", + "_config != 0", + "ori(nextPositionID) == 198", + "ori(nextPositionID) one of [198]", + "ori(config) != 0", + "ori(_guardCounter) == 376", + "ori(_guardCounter) one of [376]", + "ori(glbDebtShare) == 14846441340661167278357", + "ori(glbDebtShare) one of [14846441340661167278357]", + "msg.value == 0", + "msg.value one of [0]", + "_config != ori(config)" + ], + "postconditions": [ + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime == 1602231144", + "lastAccrueTime one of [1602231144]", + "glbDebtShare == 14846441340661167278357", + "glbDebtShare one of [14846441340661167278357]", + "_totalSupply == 20424063187886226982599", + "_totalSupply one of [20424063187886226982599]", + "reservePool == 148922433659474232", + "reservePool one of [148922433659474232]", + "elem of _balances[...] is one of [20424063187886226982599]", + "elem of _balances[...] is one of [0,207595542558178816,2499288059837974695884,4999207308361928720,76989635665897056757,2099694672502978261129,2499278042403573792,23994090941122685480,348905267647927528350,4057048061363058246,19994236218049902145,12008096684355041865,3498972866121430093,399952049758648104376,379892644249751734723,7331074273148906603,499926721158544918445,28995014649187331200,155534040163110543,3419055614113489263301,199945786064955255869,99984922215138066540,11940731249496242,9998648791479301808,99997986090636984,4999319919409024702,75278599312019471008,20004274794429721786,22994220695367180988,3998913359845597384,9497882822697579207,1849753685077835228080,1499693766495532245,9998132539448897243,2999161464973501151,122963923838163536554,9998602921031189222,249933540782134667412,8748256010480108303,199870887498978286782,74979877460347423478,2999622873234109207,74989718060626759416,1999465504916710427064,499908735865805608,1241962116152060713,401109492287907629,73980033536100457236,29886166173581944622,359442063782612289,39988232675288000305,999713726897813322,953321242468317018,22006669614395381074,330342581938126080214,401583241182296934,1999553099697343335,4998650914601382245,899807013883311181285,349967173402743561941,4999141914029901165,999808531376531825,19996452589694343531,2999199985428679028,100983359711349393234,86984751696672373087,299941269738273242381,2999577045009891728,2099550583177882008,156757421593122201,18497345372475515793,2999475445556411802,99980055585089435,282421952098266234655,99985734138462998901,499892501497066034892,37108231016789653399,7997832369182641578,1427667316733088179,2199682035744654782,499855855955010505,9997205556608119756,19994928949477146578,4018969067458326495,19995027751107133405,1999420721406120521858,177960697518442657180,39994654851654382555,999861461461553649,99985182676534263,1999560000545579004,29998406400582478834]", + "Sum(_balances[...]) == 20424063187886226982599", + "Sum(_balances[...]) one of [20424063187886226982599]", + "nextPositionID == 198", + "nextPositionID one of [198]", + "_guardCounter == 376", + "_guardCounter one of [376]", + "config != 0", + "glbDebtVal == 14854681992016139228071", + "glbDebtVal one of [14854681992016139228071]", + "ori(decimals) == decimals", + "ori(glbDebtVal) == glbDebtVal", + "ori(_owner) == _owner", + "ori(_totalSupply) == _totalSupply", + "ori(reservePool) == reservePool", + "lastAccrueTime == ori(lastAccrueTime)", + "glbDebtShare == ori(glbDebtShare)", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "_config == config", + "nextPositionID == ori(nextPositionID)", + "_guardCounter == ori(_guardCounter)", + "config != ori(config)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "updateConfig(_config)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(share)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(glbDebtVal) > 0", + "ori(_owner) != 0", + "ori(_totalSupply) > 0", + "ori(reservePool) > 0", + "msg.sender != 0", + "share > 0", + "ori(lastAccrueTime) > 0", + "ori(_balances[msg.sender]) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "ori(glbDebtShare) > 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(glbDebtVal) != ori(_totalSupply)", + "ori(glbDebtVal) > ori(reservePool)", + "ori(glbDebtVal) > ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(Sum(_balances[...]))", + "ori(glbDebtVal) > ori(_guardCounter)", + "ori(_totalSupply) > ori(reservePool)", + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) > ori(_guardCounter)", + "ori(reservePool) != ori(_balances[msg.sender])", + "ori(reservePool) < ori(Sum(_balances[...]))", + "ori(reservePool) > ori(_guardCounter)", + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) > ori(_guardCounter)", + "ori(Sum(_balances[...])) > ori(_guardCounter)" + ], + "postconditions": [ + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "glbDebtShare > 0", + "_totalSupply > 0", + "reservePool > 0", + "_balances[msg.sender] one of [0,999710360703060260929,65205495417134526340]", + "elem of _balances[...] is one of [20424063187886226982599]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "glbDebtVal > 0", + "ori(decimals) == decimals", + "ori(glbDebtVal) != _totalSupply", + "ori(glbDebtVal) > reservePool", + "ori(glbDebtVal) > _balances[msg.sender]", + "ori(glbDebtVal) != Sum(_balances[...])", + "ori(glbDebtVal) > _guardCounter", + "ori(glbDebtVal) < glbDebtVal", + "ori(_owner) == _owner", + "ori(_totalSupply) > _totalSupply", + "ori(_totalSupply) > reservePool", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) > _guardCounter", + "ori(_totalSupply) != glbDebtVal", + "ori(reservePool) < _totalSupply", + "ori(reservePool) < reservePool", + "ori(reservePool) != _balances[msg.sender]", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) > _guardCounter", + "ori(reservePool) < glbDebtVal", + "lastAccrueTime > ori(lastAccrueTime)", + "glbDebtShare == ori(glbDebtShare)", + "_totalSupply > reservePool", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply > _balances[msg.sender]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply > _guardCounter", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != glbDebtVal", + "reservePool != ori(_balances[msg.sender])", + "reservePool < ori(Sum(_balances[...]))", + "reservePool != _balances[msg.sender]", + "reservePool < Sum(_balances[...])", + "reservePool > _guardCounter", + "reservePool > ori(_guardCounter)", + "reservePool < glbDebtVal", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) > _guardCounter", + "ori(_balances[msg.sender]) < glbDebtVal", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) > Sum(_balances[...])", + "ori(Sum(_balances[...])) > _guardCounter", + "ori(Sum(_balances[...])) != glbDebtVal", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != _guardCounter", + "_balances[msg.sender] != ori(_guardCounter)", + "_balances[msg.sender] < glbDebtVal", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != glbDebtVal", + "nextPositionID == ori(nextPositionID)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter > ori(_guardCounter)", + "_guardCounter < glbDebtVal", + "config == ori(config)", + "ori(_guardCounter) < glbDebtVal" + ], + "falsified_preconditions": [ + "ori(glbDebtVal) <= ori(_totalSupply)", + "ori(glbDebtVal) < ori(_totalSupply)", + "ori(glbDebtVal) <= ori(Sum(_balances[...]))", + "ori(glbDebtVal) < ori(Sum(_balances[...]))", + "ori(reservePool) <= ori(_balances[msg.sender])", + "ori(reservePool) < ori(_balances[msg.sender])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] == 0", + "ori(glbDebtVal) <= _totalSupply", + "ori(glbDebtVal) < _totalSupply", + "ori(glbDebtVal) <= Sum(_balances[...])", + "ori(glbDebtVal) < Sum(_balances[...])", + "ori(_totalSupply) >= glbDebtVal", + "ori(_totalSupply) > glbDebtVal", + "ori(reservePool) >= _balances[msg.sender]", + "ori(reservePool) > _balances[msg.sender]", + "_totalSupply >= glbDebtVal", + "_totalSupply > glbDebtVal", + "reservePool <= ori(_balances[msg.sender])", + "reservePool < ori(_balances[msg.sender])", + "reservePool >= _balances[msg.sender]", + "reservePool > _balances[msg.sender]", + "ori(Sum(_balances[...])) >= glbDebtVal", + "ori(Sum(_balances[...])) > glbDebtVal", + "_balances[msg.sender] <= _guardCounter", + "_balances[msg.sender] < _guardCounter", + "_balances[msg.sender] <= ori(_guardCounter)", + "_balances[msg.sender] < ori(_guardCounter)", + "Sum(_balances[...]) >= glbDebtVal", + "Sum(_balances[...]) > glbDebtVal" + ] + }, + { + "func": "withdraw(share)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawReserve(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawReserve(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "work(id,goblin,loan,maxReturn,data)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_owner) != 0", + "maxReturn one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "goblin != 0", + "msg.sender != 0", + "ori(lastAccrueTime) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "data != \"\"", + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) >= id", + "ori(glbDebtVal) != ori(nextPositionID)", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(glbDebtVal) >= ori(glbDebtShare)", + "ori(reservePool) >= id", + "ori(reservePool) != loan", + "ori(reservePool) != ori(nextPositionID)", + "ori(reservePool) != ori(_guardCounter)", + "ori(reservePool) <= ori(glbDebtShare)", + "goblin != msg.sender", + "id < ori(nextPositionID)", + "id < ori(_guardCounter)", + "id <= ori(glbDebtShare)", + "loan != ori(nextPositionID)", + "loan != ori(_guardCounter)", + "ori(nextPositionID) < ori(_guardCounter)", + "ori(nextPositionID) != ori(glbDebtShare)", + "ori(_guardCounter) != ori(glbDebtShare)" + ], + "postconditions": [ + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "glbDebtShare > 0", + "_totalSupply > 0", + "elem of _balances[...] is one of [10000000000000000000]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "glbDebtVal > 0", + "positions[id].goblin == ori(positions[id].goblin)", + "ori(decimals) == decimals", + "ori(glbDebtVal) != glbDebtShare", + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) != nextPositionID", + "ori(glbDebtVal) != _guardCounter", + "ori(_owner) == _owner", + "ori(_totalSupply) == _totalSupply", + "ori(reservePool) < glbDebtShare", + "ori(reservePool) <= reservePool", + "ori(reservePool) != nextPositionID", + "ori(reservePool) != _guardCounter", + "ori(reservePool) < glbDebtVal", + "lastAccrueTime >= ori(lastAccrueTime)", + "positions[id].debtShare <= ori(positions[id].debtShare)", + "id < glbDebtShare", + "id <= reservePool", + "id < nextPositionID", + "id < _guardCounter", + "id < glbDebtVal", + "glbDebtShare > reservePool", + "glbDebtShare >= loan", + "glbDebtShare > nextPositionID", + "glbDebtShare > _guardCounter", + "glbDebtShare > ori(nextPositionID)", + "glbDebtShare > ori(_guardCounter)", + "glbDebtShare <= glbDebtVal", + "reservePool != loan", + "reservePool != nextPositionID", + "reservePool != _guardCounter", + "reservePool != ori(nextPositionID)", + "reservePool != ori(_guardCounter)", + "reservePool <= ori(glbDebtShare)", + "reservePool < glbDebtVal", + "ori(positions[id].owner) == positions[id].owner", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "loan != nextPositionID", + "loan != _guardCounter", + "loan <= glbDebtVal", + "nextPositionID < _guardCounter", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(_guardCounter)", + "nextPositionID != ori(glbDebtShare)", + "nextPositionID < glbDebtVal", + "_guardCounter > ori(nextPositionID)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(glbDebtShare)", + "_guardCounter < glbDebtVal", + "config == ori(config)", + "ori(nextPositionID) < glbDebtVal", + "ori(_guardCounter) < glbDebtVal", + "ori(glbDebtShare) != glbDebtVal" + ], + "falsified_preconditions": [ + "maxReturn == 0", + "ori(positions[id].goblin) == 0", + "id == 0", + "ori(positions[id].debtShare) == 0", + "ori(positions[id].owner) == 0", + "msg.value > 0", + "id <= loan" + ], + "falsified_postconditions": [ + "positions[id].goblin == 0", + "positions[id].debtShare == 0", + "positions[id].owner == 0", + "ori(glbDebtVal) <= glbDebtVal", + "ori(glbDebtVal) < glbDebtVal", + "ori(glbDebtVal) != glbDebtVal", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)", + "positions[id].debtShare == ori(positions[id].debtShare)", + "positions[id].debtShare >= ori(positions[id].debtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "nextPositionID == ori(nextPositionID) + 1", + "nextPositionID > ori(nextPositionID)", + "nextPositionID != ori(nextPositionID)", + "ori(glbDebtShare) <= glbDebtVal", + "ori(glbDebtShare) < glbDebtVal" + ] + }, + { + "func": "work(id,goblin,loan,maxReturn,data)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_owner) != 0", + "ori(lastAccrueTime) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) != ori(nextPositionID)", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(glbDebtVal) >= ori(glbDebtShare)", + "ori(_totalSupply) >= ori(reservePool)", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) != ori(_guardCounter)", + "ori(reservePool) <= ori(Sum(_balances[...]))", + "ori(reservePool) != ori(nextPositionID)", + "ori(reservePool) != ori(_guardCounter)", + "ori(reservePool) <= ori(glbDebtShare)", + "ori(Sum(_balances[...])) != ori(_guardCounter)", + "ori(nextPositionID) <= ori(_guardCounter)", + "ori(nextPositionID) != ori(glbDebtShare)", + "ori(_guardCounter) != ori(glbDebtShare)" + ], + "postconditions": [ + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "_totalSupply > 0", + "elem of _balances[...] is one of [10000000000000000000]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "ori(decimals) == decimals", + "ori(glbDebtVal) != _totalSupply", + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) != Sum(_balances[...])", + "ori(glbDebtVal) != nextPositionID", + "ori(glbDebtVal) != _guardCounter", + "ori(_owner) == _owner", + "ori(_totalSupply) >= reservePool", + "ori(_totalSupply) != _guardCounter", + "ori(reservePool) <= glbDebtShare", + "ori(reservePool) < _totalSupply", + "ori(reservePool) <= reservePool", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != nextPositionID", + "ori(reservePool) != _guardCounter", + "ori(reservePool) <= glbDebtVal", + "lastAccrueTime >= ori(lastAccrueTime)", + "glbDebtShare >= reservePool", + "glbDebtShare != nextPositionID", + "glbDebtShare != _guardCounter", + "glbDebtShare != ori(nextPositionID)", + "glbDebtShare != ori(_guardCounter)", + "glbDebtShare <= glbDebtVal", + "_totalSupply > reservePool", + "_totalSupply == Sum(_balances[...])", + "_totalSupply > _guardCounter", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != glbDebtVal", + "reservePool <= ori(Sum(_balances[...]))", + "reservePool < Sum(_balances[...])", + "reservePool != nextPositionID", + "reservePool != _guardCounter", + "reservePool != ori(nextPositionID)", + "reservePool != ori(_guardCounter)", + "reservePool <= ori(glbDebtShare)", + "reservePool <= glbDebtVal", + "ori(Sum(_balances[...])) != _guardCounter", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != glbDebtVal", + "nextPositionID < _guardCounter", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(_guardCounter)", + "nextPositionID != ori(glbDebtShare)", + "nextPositionID != glbDebtVal", + "_guardCounter > ori(nextPositionID)", + "_guardCounter >= ori(_guardCounter)", + "_guardCounter != ori(glbDebtShare)", + "_guardCounter != glbDebtVal", + "ori(nextPositionID) != glbDebtVal", + "ori(_guardCounter) != glbDebtVal" + ], + "falsified_preconditions": [ + "ori(reservePool) == 0", + "ori(glbDebtVal) <= ori(_totalSupply)", + "ori(glbDebtVal) <= ori(Sum(_balances[...]))", + "ori(glbDebtVal) == ori(glbDebtShare)", + "ori(glbDebtVal) <= ori(glbDebtShare)", + "ori(reservePool) <= ori(nextPositionID)", + "ori(reservePool) < ori(nextPositionID)", + "ori(reservePool) <= ori(_guardCounter)", + "ori(reservePool) < ori(_guardCounter)" + ], + "falsified_postconditions": [ + "ori(glbDebtVal) <= glbDebtShare", + "ori(glbDebtVal) <= _totalSupply", + "ori(glbDebtVal) < _totalSupply", + "ori(glbDebtVal) <= Sum(_balances[...])", + "ori(glbDebtVal) < Sum(_balances[...])", + "ori(glbDebtVal) <= glbDebtVal", + "ori(_totalSupply) <= _totalSupply", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) >= glbDebtVal", + "ori(reservePool) <= nextPositionID", + "ori(reservePool) < nextPositionID", + "ori(reservePool) <= _guardCounter", + "ori(reservePool) < _guardCounter", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)", + "glbDebtShare >= ori(glbDebtShare)", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply >= glbDebtVal", + "_totalSupply > glbDebtVal", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) >= glbDebtVal", + "Sum(_balances[...]) >= glbDebtVal", + "Sum(_balances[...]) > glbDebtVal", + "nextPositionID == _guardCounter - 1", + "nextPositionID == ori(_guardCounter)", + "nextPositionID >= ori(_guardCounter)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)", + "config == ori(config)", + "ori(glbDebtShare) <= glbDebtVal" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json new file mode 100644 index 0000000..83d3ba4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json @@ -0,0 +1,680 @@ +[ + { + "func": "approveJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "_converter != 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "ori(approvedJarConverters[_converter]) == false", + "ori(governance) == msg.sender" + ], + "postconditions": [ + "governance != 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "approvedJarConverters[_converter] == true", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance == ori(governance)", + "governance == msg.sender", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "strategist == ori(strategist)", + "approvedJarConverters[_converter] != ori(approvedJarConverters[_converter])", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approveJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approveStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_strategy != 0", + "ori(devfund) != 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(approvedStrategies[_token][_strategy]) == false", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_token != 0", + "ori(timelock) == msg.sender" + ], + "postconditions": [ + "approvedStrategies[_token][_strategy] == true", + "governance != 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "approvedStrategies[_token][_strategy] != ori(approvedStrategies[_token][_strategy])", + "governance == ori(governance)", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "strategist == ori(strategist)", + "ori(timelock) == timelock", + "msg.sender == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approveStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseStrategyTokenGetStuck(_strategy,_token)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseStrategyTokenGetStuck(_strategy,_token)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseTokensGetStuck(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseTokensGetStuck(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setConvenienceFee(_convenienceFee)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setConvenienceFee(_convenienceFee)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setDevFund(_devfund)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setDevFund(_devfund)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_governance != 0", + "ori(governance) == msg.sender", + "ori(governance) != _governance", + "msg.sender != _governance" + ], + "postconditions": [ + "governance != 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance != ori(governance)", + "governance != msg.sender", + "governance == _governance", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "strategist == ori(strategist)", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setJar(_token,_jar)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(jars[_token]) == 0", + "ori(devfund) != 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "_jar != 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_token != 0", + "ori(jars[_token]) != _jar", + "ori(governance) != ori(strategist)", + "ori(governance) == msg.sender", + "ori(strategist) != msg.sender" + ], + "postconditions": [ + "governance != 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "jars[_token] != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "ori(jars[_token]) != jars[_token]", + "governance != strategist", + "governance == ori(governance)", + "governance != ori(strategist)", + "governance == msg.sender", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "_jar == jars[_token]", + "ori(convenienceFee) == convenienceFee", + "strategist != ori(governance)", + "strategist == ori(strategist)", + "strategist != msg.sender", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setJar(_token,_jar)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setOneSplit(_onesplit)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setOneSplit(_onesplit)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setSplit(_split)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setSplit(_split)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategist(_strategist)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategist(_strategist)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_strategy != 0", + "ori(devfund) != 0", + "ori(strategies[_token]) == 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(approvedStrategies[_token][_strategy]) == true", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_token != 0", + "_strategy != ori(strategies[_token])", + "ori(governance) != ori(strategist)", + "ori(governance) == msg.sender", + "ori(strategist) != msg.sender" + ], + "postconditions": [ + "approvedStrategies[_token][_strategy] == true", + "governance != 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategies[_token] != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "_strategy == strategies[_token]", + "approvedStrategies[_token][_strategy] == ori(approvedStrategies[_token][_strategy])", + "governance != strategist", + "governance == ori(governance)", + "governance != ori(strategist)", + "governance == msg.sender", + "split == ori(split)", + "ori(devfund) == devfund", + "ori(strategies[_token]) != strategies[_token]", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "strategist != ori(governance)", + "strategist == ori(strategist)", + "strategist != msg.sender", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimelock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_timelock != 0", + "ori(timelock) == msg.sender", + "ori(timelock) != _timelock", + "msg.sender != _timelock" + ], + "postconditions": [ + "governance != 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance == ori(governance)", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "strategist == ori(strategist)", + "ori(timelock) != timelock", + "msg.sender != timelock", + "timelock == _timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimelock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTreasury(_treasury)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTreasury(_treasury)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapExactJarForJar(_fromJar,_toJar,_fromJarAmount,_toJarMinAmount,_targets,_data)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapExactJarForJar(_fromJar,_toJar,_fromJarAmount,_toJarMinAmount,_targets,_data)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll(_token)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll(_token)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "yearn(_strategy,_token,parts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "yearn(_strategy,_token,parts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) == 500", + "ori(split) one of [500]", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "ori(governance) != ori(strategist)" + ], + "postconditions": [ + "governance != 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance != strategist", + "governance != ori(strategist)", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "strategist != ori(governance)", + "strategist == ori(strategist)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "governance == ori(governance)", + "ori(timelock) == timelock" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json new file mode 100644 index 0000000..479dbee --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json @@ -0,0 +1,539 @@ +[ + { + "func": "anySwapFeeTo(token,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapFeeTo(token,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,tokens,to,amounts,fromChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,tokens,to,amounts,fromChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInAuto(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "to != 0", + "token != 0", + "amount > 0", + "fromChainID > 0", + "fromChainID one of [56,137,250]", + "txs != \"\"", + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]", + "msg.sender != 0" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInAuto(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForNative(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForNative(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForTokens(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForTokens(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInUnderlying(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInUnderlying(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "to != 0", + "token != 0", + "toChainID == 56", + "toChainID one of [56]", + "amount == 390000000000", + "amount one of [390000000000]", + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]", + "msg.sender != 0" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(tokens,to,amounts,toChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(tokens,to,amounts,toChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNative(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNative(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokens(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokens(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlying(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "to != 0", + "token != 0", + "toChainID > 0", + "toChainID one of [56,137,250]", + "amount > 0", + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]", + "msg.sender != 0" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlying(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithTransferPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithTransferPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeMPC(newMPC)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeMPC(newMPC)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeVault(token,newVault)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeVault(token,newVault)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountIn(amountOut,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountIn(amountOut,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountOut(amountIn,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountOut(amountIn,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "quote(amountA,reserveA,reserveB)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "quote(amountA,reserveA,reserveB)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json new file mode 100644 index 0000000..1cc42db --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json @@ -0,0 +1,433 @@ +[ + { + "func": "removeAlerter(alerter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeAlerter(alerter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "tradeWithHint(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId,hint)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "tradeWithHint(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId,hint)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToEther(token,srcAmount,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToEther(token,srcAmount,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawToken(token,amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) == 81", + "ori(Sum(decimals[...])) one of [81]", + "ori(pendingAdmin) != 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "sendTo != 0", + "token != 0", + "ori(admin) != 0", + "amount == 40963957051", + "amount one of [40963957051]", + "msg.sender == ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [81]", + "elem of decimals[...] is one of [9,18]", + "pendingAdmin != 0", + "admin != 0", + "Sum(decimals[...]) == 81", + "Sum(decimals[...]) one of [81]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(pendingAdmin) == pendingAdmin", + "msg.sender == admin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawToken(token,amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addAlerter(newAlerter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addAlerter(newAlerter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToToken(src,srcAmount,dest,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToToken(src,srcAmount,dest,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdmin(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(Sum(decimals[...])) one of [0]", + "ori(pendingAdmin) == 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "newAdmin != 0", + "ori(admin) != 0", + "ori(pendingAdmin) != newAdmin", + "msg.sender == ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of []", + "pendingAdmin != 0", + "admin != 0", + "Sum(decimals[...]) == 0", + "Sum(decimals[...]) one of [0]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(pendingAdmin) != pendingAdmin", + "msg.sender == admin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "newAdmin == pendingAdmin", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdmin(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimAdmin()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimAdmin()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapEtherToToken(token,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapEtherToToken(token,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdminQuickly(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(Sum(decimals[...])) one of [0]", + "ori(pendingAdmin) == 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "newAdmin != 0", + "ori(admin) != 0", + "msg.sender != newAdmin", + "msg.sender == ori(admin)", + "newAdmin != ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of []", + "pendingAdmin == 0", + "admin != 0", + "Sum(decimals[...]) == 0", + "Sum(decimals[...]) one of [0]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(pendingAdmin) == pendingAdmin", + "msg.sender != admin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "newAdmin == admin", + "ori(admin) != admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdminQuickly(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addOperator(newOperator)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addOperator(newOperator)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setKyberNetworkContract(_kyberNetworkContract)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(Sum(decimals[...])) one of [0]", + "_kyberNetworkContract != 0", + "ori(pendingAdmin) == 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) == 0", + "ori(admin) != 0", + "_kyberNetworkContract != ori(kyberNetworkContract)", + "msg.sender == ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of []", + "pendingAdmin == 0", + "admin != 0", + "Sum(decimals[...]) == 0", + "Sum(decimals[...]) one of [0]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "_kyberNetworkContract == kyberNetworkContract", + "ori(pendingAdmin) == pendingAdmin", + "msg.sender == admin", + "ori(kyberNetworkContract) != kyberNetworkContract", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setKyberNetworkContract(_kyberNetworkContract)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeOperator(operator)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeOperator(operator)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "trade(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "minConversionRate > 0", + "destAddress != 0", + "ori(pendingAdmin) != 0", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "maxDestAmount > 0", + "maxDestAmount one of [57896044618658097711785492504343953926634992332820282019728792003956564819968,1606938044258990300000000000000000000000000000000000000000000]", + "dest != 0", + "src != 0", + "srcAmount > 0", + "ori(admin) != 0", + "walletId != 0" + ], + "postconditions": [ + "elem of decimals[...] is one of [161]", + "elem of decimals[...] is one of [8,9,18,12]", + "pendingAdmin != 0", + "admin != 0", + "Sum(decimals[...]) > 0", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "ori(pendingAdmin) == pendingAdmin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "ori(Sum(decimals[...])) < Sum(decimals[...])", + "ori(Sum(decimals[...])) != Sum(decimals[...])" + ] + }, + { + "func": "trade(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawEther(amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawEther(amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(admin) != 0", + "ori(admin) != ori(pendingAdmin)" + ], + "postconditions": [ + "admin != 0", + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of [8,9,18,12]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "pendingAdmin != ori(admin)", + "pendingAdmin != admin", + "admin != ori(pendingAdmin)" + ], + "falsified_preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(pendingAdmin) == 0" + ], + "falsified_postconditions": [ + "Sum(decimals[...]) == 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json new file mode 100644 index 0000000..78cdaa3 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json @@ -0,0 +1,448 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "spender != 0", + "ori(Sum(_allowedFragments[msg.sender][...])) == 0", + "ori(Sum(_allowedFragments[msg.sender][...])) one of [0]", + "msg.sender != 0", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_allowedFragments[msg.sender][spender]) == 0", + "ori(_allowedFragments[msg.sender][spender]) one of [0]", + "ori(_totalSupply) == 60000000000000", + "ori(_totalSupply) one of [60000000000000]", + "ori(initialized) == true", + "msg.value == 0", + "msg.value one of [0]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733", + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]", + "ori(_owner) == 0", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "value > 0", + "value one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(Sum(_allowedFragments[msg.sender][...])) == ori(_allowedFragments[msg.sender][spender])", + "ori(Sum(_allowedFragments[msg.sender][...])) < value", + "ori(_allowedFragments[msg.sender][spender]) < value" + ], + "postconditions": [ + "_allowedFragments[msg.sender][spender] > 0", + "_allowedFragments[msg.sender][spender] one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "initializing == false", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "Sum(_allowedFragments[msg.sender][...]) > 0", + "Sum(_allowedFragments[msg.sender][...]) one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000]", + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(initializing) == initializing", + "_allowedFragments[msg.sender][spender] > ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] > ori(_allowedFragments[msg.sender][spender])", + "_allowedFragments[msg.sender][spender] == value", + "ori(Sum(_allowedFragments[msg.sender][...])) < Sum(_allowedFragments[msg.sender][...])", + "_totalSupply == ori(_totalSupply)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "Sum(_allowedFragments[msg.sender][...]) > ori(_allowedFragments[msg.sender][spender])", + "Sum(_allowedFragments[msg.sender][...]) == value", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "_gonsPerFragment == ori(_gonsPerFragment)", + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))", + "ori(initialized) == initialized", + "_decimals == ori(_decimals)", + "ori(_owner) == _owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(name,symbol,decimals)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(name,symbol,decimals)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "rebase(epoch,supplyDelta)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "rebase(epoch,supplyDelta)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMonetaryPolicy(monetaryPolicy_)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "msg.sender != 0", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_totalSupply) == 60000000000000", + "ori(_totalSupply) one of [60000000000000]", + "ori(initialized) == true", + "msg.value == 0", + "msg.value one of [0]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733", + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]", + "ori(_owner) == 0", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "monetaryPolicy_ != 0", + "ori(monetaryPolicy) != monetaryPolicy_" + ], + "postconditions": [ + "initializing == false", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "ori(initializing) == initializing", + "_totalSupply == ori(_totalSupply)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "monetaryPolicy != monetaryPolicy_", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "_gonsPerFragment == ori(_gonsPerFragment)", + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))", + "ori(initialized) == initialized", + "_decimals == ori(_decimals)", + "ori(_owner) == _owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMonetaryPolicy(monetaryPolicy_)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(owner_)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "msg.sender != 0", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_totalSupply) == 0", + "ori(_totalSupply) one of [0]", + "ori(initialized) == false", + "msg.value == 0", + "msg.value one of [0]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) == 0", + "ori(Sum(_gonBalances[...])) one of [0]", + "ori(_gonsPerFragment) == 0", + "ori(_gonsPerFragment) one of [0]", + "ori(_owner) == 0", + "ori(_gonBalances[owner_]) == 0", + "ori(_gonBalances[owner_]) one of [0]", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "owner_ != 0", + "ori(initializing) == ori(tokenPausedDeprecated)", + "ori(initializing) == ori(initialized)", + "ori(tokenPausedDeprecated) == ori(initialized)", + "ori(Sum(_gonBalances[...])) == ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) >= ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) <= ori(_gonBalances[owner_])" + ], + "postconditions": [ + "initializing == false", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "_gonBalances[owner_] > 0", + "_gonBalances[owner_] == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "_gonBalances[owner_] one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(initializing) == initializing", + "ori(initializing) == tokenPausedDeprecated", + "ori(initializing) != initialized", + "initializing == ori(tokenPausedDeprecated)", + "initializing == tokenPausedDeprecated", + "initializing == ori(initialized)", + "initializing != initialized", + "_totalSupply > ori(_totalSupply)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "ori(tokenPausedDeprecated) != initialized", + "_gonsPerFragment > ori(_gonsPerFragment)", + "tokenPausedDeprecated == ori(initialized)", + "tokenPausedDeprecated != initialized", + "Sum(_gonBalances[...]) > ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) >= ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) > ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) != ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) == _gonBalances[owner_]", + "Sum(_gonBalances[...]) >= _gonBalances[owner_]", + "Sum(_gonBalances[...]) <= _gonBalances[owner_]", + "ori(initialized) != initialized", + "_decimals == ori(_decimals)", + "ori(Sum(_gonBalances[...])) <= _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) < _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) != _gonBalances[owner_]", + "ori(_owner) == _owner", + "ori(_gonBalances[owner_]) <= _gonBalances[owner_]", + "ori(_gonBalances[owner_]) < _gonBalances[owner_]", + "ori(_gonBalances[owner_]) != _gonBalances[owner_]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(owner_)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_totalSupply) one of [0,60000000000000]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) one of [0,115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(_gonsPerFragment) one of [0,1929868153955269923726183083478131797554499744427342733990959733]", + "ori(_owner) == 0", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "ori(initializing) == ori(tokenPausedDeprecated)", + "ori(_totalSupply) <= ori(_gonsPerFragment)" + ], + "postconditions": [ + "initializing == false", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "ori(initializing) == initializing", + "ori(initializing) == tokenPausedDeprecated", + "ori(initializing) != initialized", + "initializing == ori(tokenPausedDeprecated)", + "initializing == tokenPausedDeprecated", + "initializing != initialized", + "_totalSupply < _gonsPerFragment", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply != ori(_gonsPerFragment)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "ori(tokenPausedDeprecated) != initialized", + "_gonsPerFragment > ori(_totalSupply)", + "_gonsPerFragment >= ori(_gonsPerFragment)", + "tokenPausedDeprecated != initialized", + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "_decimals == ori(_decimals)", + "ori(_owner) == _owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json new file mode 100644 index 0000000..550e29a --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json @@ -0,0 +1,572 @@ +[ + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]", + "ori(_balances[msg.sender]) == 0", + "ori(_balances[msg.sender]) one of [0]", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "_amount > 0", + "_amount one of [500000000000000000000,13105133700000000000000,100000000000000000000,103970700000000000000]", + "ori(Sum(_balances[...])) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] > 0", + "_balances[msg.sender] one of [13082359060001746878663,103789481789261074604,100000000000000000000,499130119572851959406]", + "controller != 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [142345985557645870700604]", + "_totalSupply > ori(_totalSupply)", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "ori(min) == min", + "governance == ori(governance)", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_balances[msg.sender]) one of [0,90000000000000000000]", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "token != 0", + "Sum(_balances[...]) > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] > 0", + "controller != 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [134406668607338084218100]", + "_totalSupply > ori(_totalSupply)", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "ori(min) == min", + "governance == ori(governance)", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "elem of _balances[...] is one of [100000000000000000000]", + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,193288114234845046898,15113130871002806453838,100000000000000000000,7682645945411942583280,9999286966540985221802,58078098074825682085113]", + "controller != 0", + "min == 9500", + "min one of [9500]", + "_totalSupply == ori(_totalSupply)", + "token == ori(token)", + "ori(_decimals) == _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(min) == min", + "governance == ori(governance)", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "harvest(reserve,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "harvest(reserve,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_governance != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) == 142449775039435131775208", + "ori(_totalSupply) one of [142449775039435131775208]", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) == 142449775039435131775208", + "ori(Sum(_balances[...])) one of [142449775039435131775208]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "_governance != ori(governance)", + "_governance != msg.sender", + "ori(governance) == msg.sender" + ], + "postconditions": [ + "_totalSupply == 142449775039435131775208", + "_totalSupply one of [142449775039435131775208]", + "token != 0", + "Sum(_balances[...]) == 142449775039435131775208", + "Sum(_balances[...]) one of [142449775039435131775208]", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "elem of _balances[...] is one of [142449775039435131775208]", + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,0,193288114234845046898,499130119572851959406,15113130871002806453838,2887782269888984921831,28891975855582153400605,13082359060001746878663,7682645945411942583280,194232561057094695264,103789481789261074604,9999286966540985221802,58078098074825682085113]", + "controller != 0", + "min == 9500", + "min one of [9500]", + "_governance == governance", + "_totalSupply == ori(_totalSupply)", + "token == ori(token)", + "ori(_decimals) == _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(min) == min", + "governance != ori(governance)", + "governance != msg.sender", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_shares == 10000000000000000000", + "_shares one of [10000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(_balances[msg.sender]) == 100000000000000000000", + "ori(_balances[msg.sender]) one of [100000000000000000000]", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) == ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply == 90000000000000000000", + "_totalSupply one of [90000000000000000000]", + "token != 0", + "Sum(_balances[...]) == 90000000000000000000", + "Sum(_balances[...]) one of [90000000000000000000]", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] == 90000000000000000000", + "_balances[msg.sender] one of [90000000000000000000]", + "controller != 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [90000000000000000000]", + "_totalSupply < ori(_totalSupply)", + "_totalSupply < ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply == _balances[msg.sender]", + "_totalSupply < ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_balances[msg.sender]) > Sum(_balances[...])", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "Sum(_balances[...]) == _balances[msg.sender]", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "ori(min) == min", + "governance == ori(governance)", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [128942301002958992697573,134406668607338084218100]", + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) one of [5464367604379091520527,29264013041526968930907]", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [128942301002958992697573,134406668607338084218100]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply one of [128942301002958992697573,99678287961432023766666]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [128942301002958992697573,99678287961432023766666]", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] == 0", + "_balances[msg.sender] one of [0]", + "controller != 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [128942301002958992697573]", + "_totalSupply < ori(_totalSupply)", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply > _balances[msg.sender]", + "_totalSupply < ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "ori(min) == min", + "governance == ori(governance)", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(governance) != 0", + "ori(controller) != 0", + "ori(_totalSupply) == ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "token != 0", + "Sum(_balances[...]) > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "elem of _balances[...] is one of [141846855438073018741198]", + "controller != 0", + "min == 9500", + "min one of [9500]", + "_totalSupply == Sum(_balances[...])", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(min) == min", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "governance == ori(governance)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50.json new file mode 100644 index 0000000..26e7fcb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50.json @@ -0,0 +1,163 @@ +[ + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_bridges[ori(weth)]) == 0", + "token0 != 0", + "ori(owner) != 0", + "token1 != 0", + "ori(_bridges[weth]) == 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(pendingOwner) == 0", + "msg.sender != 0", + "ori(_bridges[ori(weth)]) == ori(_bridges[weth])", + "token0 != token1" + ], + "postconditions": [ + "owner != 0", + "_bridges[ori(weth)] == 0", + "_bridges[weth] == 0", + "pendingOwner == 0", + "owner == ori(owner)", + "_bridges[ori(weth)] == ori(_bridges[ori(weth)])", + "_bridges[ori(weth)] == _bridges[weth]", + "_bridges[ori(weth)] == ori(_bridges[weth])", + "ori(_bridges[ori(weth)]) == _bridges[weth]", + "_bridges[weth] == ori(_bridges[weth])", + "pendingOwner == ori(pendingOwner)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convertMultiple(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convertMultiple(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setBridge(token,bridge)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setBridge(token,bridge)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner,direct,renounce)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "newOwner != 0", + "renounce == false", + "direct == true", + "ori(owner) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(pendingOwner) == 0", + "msg.sender != 0", + "newOwner != ori(owner)", + "newOwner != ori(pendingOwner)", + "newOwner != msg.sender", + "ori(owner) != ori(pendingOwner)", + "ori(owner) == msg.sender", + "ori(pendingOwner) != msg.sender" + ], + "postconditions": [ + "owner != 0", + "pendingOwner == 0", + "newOwner == owner", + "newOwner != pendingOwner", + "owner != ori(owner)", + "owner != pendingOwner", + "owner != ori(pendingOwner)", + "owner != msg.sender", + "ori(owner) != pendingOwner", + "pendingOwner == ori(pendingOwner)", + "pendingOwner != msg.sender" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner,direct,renounce)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(owner) != 0", + "ori(pendingOwner) == 0", + "ori(owner) != ori(pendingOwner)" + ], + "postconditions": [ + "owner != 0", + "pendingOwner == 0", + "owner != pendingOwner", + "owner != ori(pendingOwner)", + "ori(owner) != pendingOwner", + "pendingOwner == ori(pendingOwner)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json new file mode 100644 index 0000000..de0643a --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json @@ -0,0 +1,218 @@ +[ + { + "before_preds": [ + "ori(Q112) == 0" + ], + "after_preds": [ + "ori(Q112) == 0" + ] + }, + { + "before_preds": [ + "ori(Q112) one of [0]" + ], + "after_preds": [ + "ori(Q112) one of [0]" + ] + }, + { + "before_preds": [ + "ori(e10) == 0" + ], + "after_preds": [ + "ori(e10) == 0" + ] + }, + { + "before_preds": [ + "ori(e10) one of [0]" + ], + "after_preds": [ + "ori(e10) one of [0]" + ] + }, + { + "before_preds": [ + "ori(length) == 0" + ], + "after_preds": [ + "ori(length) == 0" + ] + }, + { + "before_preds": [ + "ori(length) one of [0]" + ], + "after_preds": [ + "ori(length) one of [0]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "Q112 == 0" + ], + "after_preds": [ + "Q112 == 0" + ] + }, + { + "before_preds": [ + "Q112 one of [0]" + ], + "after_preds": [ + "Q112 one of [0]" + ] + }, + { + "before_preds": [ + "e10 == 0" + ], + "after_preds": [ + "e10 == 0" + ] + }, + { + "before_preds": [ + "e10 one of [0]" + ], + "after_preds": [ + "e10 one of [0]" + ] + }, + { + "before_preds": [ + "length == 0" + ], + "after_preds": [ + "length == 0" + ] + }, + { + "before_preds": [ + "length one of [0]" + ], + "after_preds": [ + "length one of [0]" + ] + }, + { + "before_preds": [ + "ori(Q112) == 0" + ], + "after_preds": [ + "ori(Q112) == 0" + ] + }, + { + "before_preds": [ + "ori(Q112) one of [0]" + ], + "after_preds": [ + "ori(Q112) one of [0]" + ] + }, + { + "before_preds": [ + "ori(e10) == 0" + ], + "after_preds": [ + "ori(e10) == 0" + ] + }, + { + "before_preds": [ + "ori(e10) one of [0]" + ], + "after_preds": [ + "ori(e10) one of [0]" + ] + }, + { + "before_preds": [ + "ori(length) == 0" + ], + "after_preds": [ + "ori(length) == 0" + ] + }, + { + "before_preds": [ + "ori(length) one of [0]" + ], + "after_preds": [ + "ori(length) one of [0]" + ] + }, + { + "before_preds": [ + "Q112 == 0" + ], + "after_preds": [ + "Q112 == 0" + ] + }, + { + "before_preds": [ + "Q112 one of [0]" + ], + "after_preds": [ + "Q112 one of [0]" + ] + }, + { + "before_preds": [ + "e10 == 0" + ], + "after_preds": [ + "e10 == 0" + ] + }, + { + "before_preds": [ + "e10 one of [0]" + ], + "after_preds": [ + "e10 one of [0]" + ] + }, + { + "before_preds": [ + "length == 0" + ], + "after_preds": [ + "length == 0" + ] + }, + { + "before_preds": [ + "length one of [0]" + ], + "after_preds": [ + "length one of [0]" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json new file mode 100644 index 0000000..b51ce64 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json @@ -0,0 +1,4514 @@ +[ + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "amount one of [79228162514000000000000000000]" + ], + "after_preds": [ + "amount one of [79228162514000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [860260929152]" + ], + "after_preds": [ + "elem of _balances[...] is one of [860260929152]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "_amount > 0" + ], + "after_preds": [ + "_amount > 0" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) one of [0,1611890956,1612413709,1612672271,1612709011,1612516662]" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) one of [0,1611890956,1612413709,1612672271,1612709011,1612516662]" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [0,494036168419,501354600,72,9986072971,9975667988]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [0,494036168419,501354600,72,9986072971,9975667988]" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [860260929152]" + ], + "after_preds": [ + "elem of _balances[...] is one of [860260929152]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0" + ], + "after_preds": [ + "_balances[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "userDepoistTime[msg.sender] > 0" + ], + "after_preds": [ + "userDepoistTime[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != ori(earnLowerlimit)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(earnLowerlimit)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != earnLowerlimit" + ], + "after_preds": [ + "Sum(_balances[...]) != earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(earnLowerlimit) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) != _totalSupply" + ], + "after_preds": [ + "ori(earnLowerlimit) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= _totalSupply" + ], + "after_preds": [ + "_balances[msg.sender] <= _totalSupply" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != earnLowerlimit" + ], + "after_preds": [ + "_balances[msg.sender] != earnLowerlimit" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply != earnLowerlimit" + ], + "after_preds": [ + "_totalSupply != earnLowerlimit" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) >= userDepoistTime[msg.sender]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) >= userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ], + "after_preds": [ + "ori(_totalSupply) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [82641458184]" + ], + "after_preds": [ + "elem of _balances[...] is one of [82641458184]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ], + "after_preds": [ + "_totalSupply one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [37084585504]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [37084585504]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [50815436600,82641458184]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [50815436600,82641458184]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "_earnLowerlimit > 0" + ], + "after_preds": [ + "_earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "_earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "_earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [5]" + ], + "after_preds": [ + "ori(fee1) one of [5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [3224014173,1611989982]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [3224014173,1611989982]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [50815436600,82641458184]" + ], + "after_preds": [ + "ori(_totalSupply) one of [50815436600,82641458184]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "msg.sender == ori(governance)" + ], + "after_preds": [ + "msg.sender == ori(governance)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [50815436600,82641458184]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [50815436600,82641458184]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [50815436600]" + ], + "after_preds": [ + "elem of _balances[...] is one of [50815436600]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [50815436600,31826021500,84]" + ], + "after_preds": [ + "elem of _balances[...] is one of [50815436600,31826021500,84]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [50815436600,82641458184]" + ], + "after_preds": [ + "_totalSupply one of [50815436600,82641458184]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [3224014173,1611989982]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [3224014173,1611989982]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 one of [5]" + ], + "after_preds": [ + "fee1 one of [5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [3224014173]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [3224014173]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [1611989982,1612024191]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [1611989982,1612024191]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "msg.sender == governance" + ], + "after_preds": [ + "msg.sender == governance" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1310289998969]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1310289998969]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [5]" + ], + "after_preds": [ + "ori(fee1) one of [5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [41922035526]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [41922035526]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1310289998969]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1310289998969]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "msg.sender == ori(timelock)" + ], + "after_preds": [ + "msg.sender == ori(timelock)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1310289998969]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1310289998969]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1310289998969]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1310289998969]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,4,6,9,17,23,26,29,36,43,47,73,75,1300417580500,84,88,92,93,97,98,9872417260]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,4,6,9,17,23,26,29,36,43,47,73,75,1300417580500,84,88,92,93,97,98,9872417260]" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1310289998969]" + ], + "after_preds": [ + "_totalSupply one of [1310289998969]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [41922035526]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [41922035526]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 one of [10]" + ], + "after_preds": [ + "fee1 one of [10]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [41922035526]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [41922035526]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [1612433282,1612411910,1612393607,1612411674,1612422047,1612497702,1612414375,1612493096,1612411957,1612410556,1612413117,1612399811,1612435272,1612419407,1612421072,1612459224,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612444665,1612414461,1612024191]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [1612433282,1612411910,1612393607,1612411674,1612422047,1612497702,1612414375,1612493096,1612411957,1612410556,1612413117,1612399811,1612435272,1612419407,1612421072,1612459224,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612444665,1612414461,1612024191]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "msg.sender == timelock" + ], + "after_preds": [ + "msg.sender == timelock" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [851093071954]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [851093071954]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "_governance != 0" + ], + "after_preds": [ + "_governance != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [5]" + ], + "after_preds": [ + "ori(fee1) one of [5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [32247272285]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [32247272285]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [851093071954]" + ], + "after_preds": [ + "ori(_totalSupply) one of [851093071954]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "_governance != msg.sender" + ], + "after_preds": [ + "_governance != msg.sender" + ] + }, + { + "before_preds": [ + "_governance != ori(governance)" + ], + "after_preds": [ + "_governance != ori(governance)" + ] + }, + { + "before_preds": [ + "msg.sender == ori(governance)" + ], + "after_preds": [ + "msg.sender == ori(governance)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [851093071954]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [851093071954]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [851093071954]" + ], + "after_preds": [ + "elem of _balances[...] is one of [851093071954]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,4,6,9,18,23,26,29,36,73,75,77,84,115213479893,88,92,93,97,1373058547,734506532600]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,4,6,9,18,23,26,29,36,73,75,77,84,115213479893,88,92,93,97,1373058547,734506532600]" + ] + }, + { + "before_preds": [ + "_totalSupply one of [851093071954]" + ], + "after_preds": [ + "_totalSupply one of [851093071954]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [32247272285]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [32247272285]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 one of [5]" + ], + "after_preds": [ + "fee1 one of [5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [32247272285]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [32247272285]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [1612411910,1612393607,1612411674,1612422047,1612414375,1612411957,1612410556,1612413117,1612399811,1612419407,1612421072,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612414461,1612024191]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [1612411910,1612393607,1612411674,1612422047,1612414375,1612411957,1612410556,1612413117,1612399811,1612419407,1612421072,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612414461,1612024191]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "_governance == governance" + ], + "after_preds": [ + "_governance == governance" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "msg.sender != governance" + ], + "after_preds": [ + "msg.sender != governance" + ] + }, + { + "before_preds": [ + "ori(governance) != governance" + ], + "after_preds": [ + "ori(governance) != governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "amount one of [4673850400,19974784100,120385957800,499026405900,31826021500]" + ], + "after_preds": [ + "amount one of [4673850400,19974784100,120385957800,499026405900,31826021500]" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) > 0" + ], + "after_preds": [ + "ori(_balances[recipient]) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) one of [36,77,18,84,88]" + ], + "after_preds": [ + "ori(_balances[recipient]) one of [36,77,18,84,88]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [38697044728,53210802285,43534554260,3224014173]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [38697044728,53210802285,43534554260,3224014173]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "_balances[recipient] one of [499026405988,120385957836,4673850477,31826021584,19974784118]" + ], + "after_preds": [ + "_balances[recipient] one of [499026405988,120385957836,4673850477,31826021584,19974784118]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1003539015686]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1003539015686]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "_totalSupply one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [38697044728,53210802285,43534554260,3224014173]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [38697044728,53210802285,43534554260,3224014173]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [38697044728]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [38697044728]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[sender][...])) > 0" + ], + "after_preds": [ + "ori(Sum(_allowances[sender][...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[sender][...])) one of [79228162513999999970070829900,79228162513999999968173978500,79228162514000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_allowances[sender][...])) one of [79228162513999999970070829900,79228162513999999968173978500,79228162514000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "sender != 0" + ], + "after_preds": [ + "sender != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[sender]) > 0" + ], + "after_preds": [ + "ori(_balances[sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) != ori(_balances[sender])" + ], + "after_preds": [ + "ori(_balances[recipient]) != ori(_balances[sender])" + ] + }, + { + "before_preds": [ + "sender != recipient" + ], + "after_preds": [ + "sender != recipient" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_allowances[sender][...]) > 0" + ], + "after_preds": [ + "Sum(_allowances[sender][...]) > 0" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [860260929152]" + ], + "after_preds": [ + "elem of _balances[...] is one of [860260929152]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "elem of _allowances[sender][...] is one of [79228162513999999968173978500]" + ], + "after_preds": [ + "elem of _allowances[sender][...] is one of [79228162513999999968173978500]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "_balances[sender] != ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[sender] != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "_balances[recipient] != ori(_balances[sender])" + ], + "after_preds": [ + "_balances[recipient] != ori(_balances[sender])" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) > 0" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [499026405988,120385957836,4673850477,31826021584,19974784118,262979296856]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [499026405988,120385957836,4673850477,31826021584,19974784118,262979296856]" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [38697044728,43534554260,53210802285,33859705567]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [38697044728,43534554260,53210802285,33859705567]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1408314583361]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1408314583361]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] == 0" + ], + "after_preds": [ + "_balances[msg.sender] == 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [0]" + ], + "after_preds": [ + "_balances[msg.sender] one of [0]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]" + ], + "after_preds": [ + "_totalSupply one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [38697044728,43534554260,53210802285,33859705567]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [38697044728,43534554260,53210802285,33859705567]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [38697044728]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [38697044728]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "userDepoistTime[msg.sender] > 0" + ], + "after_preds": [ + "userDepoistTime[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "userDepoistTime[msg.sender] one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]" + ], + "after_preds": [ + "userDepoistTime[msg.sender] one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != ori(earnLowerlimit)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(earnLowerlimit)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(earnLowerlimit) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [0]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [0]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != ori(earnLowerlimit)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(earnLowerlimit)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != earnLowerlimit" + ], + "after_preds": [ + "Sum(_balances[...]) != earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) != _totalSupply" + ], + "after_preds": [ + "ori(earnLowerlimit) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "_totalSupply != earnLowerlimit" + ], + "after_preds": [ + "_totalSupply != earnLowerlimit" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "fee1 >= ori(fee1)" + ], + "after_preds": [ + "fee1 >= ori(fee1)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6684977bbed67e101bb80fc07fccfba655c0a64f-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6684977bbed67e101bb80fc07fccfba655c0a64f-kept.json new file mode 100644 index 0000000..cad3ee1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6684977bbed67e101bb80fc07fccfba655c0a64f-kept.json @@ -0,0 +1,314 @@ +[ + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(sushi) != 0" + ], + "after_preds": [ + "ori(sushi) != 0" + ] + }, + { + "before_preds": [ + "ori(factory) != 0" + ], + "after_preds": [ + "ori(factory) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(weth) != 0" + ], + "after_preds": [ + "ori(weth) != 0" + ] + }, + { + "before_preds": [ + "token0 != 0" + ], + "after_preds": [ + "token0 != 0" + ] + }, + { + "before_preds": [ + "ori(bar) != 0" + ], + "after_preds": [ + "ori(bar) != 0" + ] + }, + { + "before_preds": [ + "token1 != 0" + ], + "after_preds": [ + "token1 != 0" + ] + }, + { + "before_preds": [ + "ori(sushi) != ori(weth)" + ], + "after_preds": [ + "ori(sushi) != ori(weth)" + ] + }, + { + "before_preds": [ + "ori(sushi) != token0" + ], + "after_preds": [ + "ori(sushi) != token0" + ] + }, + { + "before_preds": [ + "weth != 0" + ], + "after_preds": [ + "weth != 0" + ] + }, + { + "before_preds": [ + "sushi != 0" + ], + "after_preds": [ + "sushi != 0" + ] + }, + { + "before_preds": [ + "bar != 0" + ], + "after_preds": [ + "bar != 0" + ] + }, + { + "before_preds": [ + "factory != 0" + ], + "after_preds": [ + "factory != 0" + ] + }, + { + "before_preds": [ + "ori(sushi) != weth" + ], + "after_preds": [ + "ori(sushi) != weth" + ] + }, + { + "before_preds": [ + "ori(sushi) == sushi" + ], + "after_preds": [ + "ori(sushi) == sushi" + ] + }, + { + "before_preds": [ + "ori(factory) == factory" + ], + "after_preds": [ + "ori(factory) == factory" + ] + }, + { + "before_preds": [ + "ori(weth) == weth" + ], + "after_preds": [ + "ori(weth) == weth" + ] + }, + { + "before_preds": [ + "ori(weth) != sushi" + ], + "after_preds": [ + "ori(weth) != sushi" + ] + }, + { + "before_preds": [ + "weth != sushi" + ], + "after_preds": [ + "weth != sushi" + ] + }, + { + "before_preds": [ + "token0 != sushi" + ], + "after_preds": [ + "token0 != sushi" + ] + }, + { + "before_preds": [ + "bar == ori(bar)" + ], + "after_preds": [ + "bar == ori(bar)" + ] + }, + { + "before_preds": [ + "ori(sushi) != 0" + ], + "after_preds": [ + "ori(sushi) != 0" + ] + }, + { + "before_preds": [ + "ori(factory) != 0" + ], + "after_preds": [ + "ori(factory) != 0" + ] + }, + { + "before_preds": [ + "ori(weth) != 0" + ], + "after_preds": [ + "ori(weth) != 0" + ] + }, + { + "before_preds": [ + "ori(bar) != 0" + ], + "after_preds": [ + "ori(bar) != 0" + ] + }, + { + "before_preds": [ + "ori(sushi) != ori(weth)" + ], + "after_preds": [ + "ori(sushi) != ori(weth)" + ] + }, + { + "before_preds": [ + "weth != 0" + ], + "after_preds": [ + "weth != 0" + ] + }, + { + "before_preds": [ + "sushi != 0" + ], + "after_preds": [ + "sushi != 0" + ] + }, + { + "before_preds": [ + "bar != 0" + ], + "after_preds": [ + "bar != 0" + ] + }, + { + "before_preds": [ + "factory != 0" + ], + "after_preds": [ + "factory != 0" + ] + }, + { + "before_preds": [ + "ori(sushi) != weth" + ], + "after_preds": [ + "ori(sushi) != weth" + ] + }, + { + "before_preds": [ + "ori(sushi) == sushi" + ], + "after_preds": [ + "ori(sushi) == sushi" + ] + }, + { + "before_preds": [ + "ori(factory) == factory" + ], + "after_preds": [ + "ori(factory) == factory" + ] + }, + { + "before_preds": [ + "ori(weth) == weth" + ], + "after_preds": [ + "ori(weth) == weth" + ] + }, + { + "before_preds": [ + "ori(weth) != sushi" + ], + "after_preds": [ + "ori(weth) != sushi" + ] + }, + { + "before_preds": [ + "weth != sushi" + ], + "after_preds": [ + "weth != sushi" + ] + }, + { + "before_preds": [ + "bar == ori(bar)" + ], + "after_preds": [ + "bar == ori(bar)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json new file mode 100644 index 0000000..bc655d4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json @@ -0,0 +1,2226 @@ +[ + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) > 0" + ], + "after_preds": [ + "ori(lastAccrueTime) > 0" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) > 0" + ], + "after_preds": [ + "ori(nextPositionID) > 0" + ] + }, + { + "before_preds": [ + "ori(config) != 0" + ], + "after_preds": [ + "ori(config) != 0" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) > 0" + ], + "after_preds": [ + "ori(_guardCounter) > 0" + ] + }, + { + "before_preds": [ + "msg.value > 0" + ], + "after_preds": [ + "msg.value > 0" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(reservePool)" + ], + "after_preds": [ + "ori(_totalSupply) >= ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(_totalSupply) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "lastAccrueTime > 0" + ], + "after_preds": [ + "lastAccrueTime > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0" + ], + "after_preds": [ + "_balances[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "nextPositionID > 0" + ], + "after_preds": [ + "nextPositionID > 0" + ] + }, + { + "before_preds": [ + "_guardCounter > 0" + ], + "after_preds": [ + "_guardCounter > 0" + ] + }, + { + "before_preds": [ + "config != 0" + ], + "after_preds": [ + "config != 0" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _totalSupply" + ], + "after_preds": [ + "ori(glbDebtVal) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= reservePool" + ], + "after_preds": [ + "ori(glbDebtVal) >= reservePool" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(glbDebtVal) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _guardCounter" + ], + "after_preds": [ + "ori(glbDebtVal) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) <= glbDebtVal" + ], + "after_preds": [ + "ori(glbDebtVal) <= glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= reservePool" + ], + "after_preds": [ + "ori(_totalSupply) >= reservePool" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != _guardCounter" + ], + "after_preds": [ + "ori(_totalSupply) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= reservePool" + ], + "after_preds": [ + "ori(reservePool) <= reservePool" + ] + }, + { + "before_preds": [ + "ori(reservePool) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(reservePool) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(reservePool) != _guardCounter" + ], + "after_preds": [ + "ori(reservePool) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtVal" + ], + "after_preds": [ + "ori(reservePool) <= glbDebtVal" + ] + }, + { + "before_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ], + "after_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply != glbDebtVal" + ], + "after_preds": [ + "_totalSupply != glbDebtVal" + ] + }, + { + "before_preds": [ + "reservePool <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "reservePool <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "reservePool != _balances[msg.sender]" + ], + "after_preds": [ + "reservePool != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "reservePool != _guardCounter" + ], + "after_preds": [ + "reservePool != _guardCounter" + ] + }, + { + "before_preds": [ + "reservePool != ori(_guardCounter)" + ], + "after_preds": [ + "reservePool != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= glbDebtVal" + ], + "after_preds": [ + "reservePool <= glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != _guardCounter" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= glbDebtVal" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != _guardCounter" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _guardCounter" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != glbDebtVal" + ], + "after_preds": [ + "_balances[msg.sender] != glbDebtVal" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ], + "after_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ] + }, + { + "before_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ], + "after_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ] + }, + { + "before_preds": [ + "_guardCounter != glbDebtVal" + ], + "after_preds": [ + "_guardCounter != glbDebtVal" + ] + }, + { + "before_preds": [ + "config == ori(config)" + ], + "after_preds": [ + "config == ori(config)" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) != glbDebtVal" + ], + "after_preds": [ + "ori(_guardCounter) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) one of [14854681992016139228071]" + ], + "after_preds": [ + "ori(glbDebtVal) one of [14854681992016139228071]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [20424063187886226982599]" + ], + "after_preds": [ + "ori(_totalSupply) one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "ori(reservePool) one of [148922433659474232]" + ], + "after_preds": [ + "ori(reservePool) one of [148922433659474232]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) one of [1602231144]" + ], + "after_preds": [ + "ori(lastAccrueTime) one of [1602231144]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [20424063187886226982599]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "_config != 0" + ], + "after_preds": [ + "_config != 0" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) one of [198]" + ], + "after_preds": [ + "ori(nextPositionID) one of [198]" + ] + }, + { + "before_preds": [ + "ori(config) != 0" + ], + "after_preds": [ + "ori(config) != 0" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) one of [376]" + ], + "after_preds": [ + "ori(_guardCounter) one of [376]" + ] + }, + { + "before_preds": [ + "ori(glbDebtShare) one of [14846441340661167278357]" + ], + "after_preds": [ + "ori(glbDebtShare) one of [14846441340661167278357]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "_config != ori(config)" + ], + "after_preds": [ + "_config != ori(config)" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "lastAccrueTime one of [1602231144]" + ], + "after_preds": [ + "lastAccrueTime one of [1602231144]" + ] + }, + { + "before_preds": [ + "glbDebtShare one of [14846441340661167278357]" + ], + "after_preds": [ + "glbDebtShare one of [14846441340661167278357]" + ] + }, + { + "before_preds": [ + "_totalSupply one of [20424063187886226982599]" + ], + "after_preds": [ + "_totalSupply one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "reservePool one of [148922433659474232]" + ], + "after_preds": [ + "reservePool one of [148922433659474232]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [20424063187886226982599]" + ], + "after_preds": [ + "elem of _balances[...] is one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,207595542558178816,2499288059837974695884,4999207308361928720,76989635665897056757,2099694672502978261129,2499278042403573792,23994090941122685480,348905267647927528350,4057048061363058246,19994236218049902145,12008096684355041865,3498972866121430093,399952049758648104376,379892644249751734723,7331074273148906603,499926721158544918445,28995014649187331200,155534040163110543,3419055614113489263301,199945786064955255869,99984922215138066540,11940731249496242,9998648791479301808,99997986090636984,4999319919409024702,75278599312019471008,20004274794429721786,22994220695367180988,3998913359845597384,9497882822697579207,1849753685077835228080,1499693766495532245,9998132539448897243,2999161464973501151,122963923838163536554,9998602921031189222,249933540782134667412,8748256010480108303,199870887498978286782,74979877460347423478,2999622873234109207,74989718060626759416,1999465504916710427064,499908735865805608,1241962116152060713,401109492287907629,73980033536100457236,29886166173581944622,359442063782612289,39988232675288000305,999713726897813322,953321242468317018,22006669614395381074,330342581938126080214,401583241182296934,1999553099697343335,4998650914601382245,899807013883311181285,349967173402743561941,4999141914029901165,999808531376531825,19996452589694343531,2999199985428679028,100983359711349393234,86984751696672373087,299941269738273242381,2999577045009891728,2099550583177882008,156757421593122201,18497345372475515793,2999475445556411802,99980055585089435,282421952098266234655,99985734138462998901,499892501497066034892,37108231016789653399,7997832369182641578,1427667316733088179,2199682035744654782,499855855955010505,9997205556608119756,19994928949477146578,4018969067458326495,19995027751107133405,1999420721406120521858,177960697518442657180,39994654851654382555,999861461461553649,99985182676534263,1999560000545579004,29998406400582478834]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,207595542558178816,2499288059837974695884,4999207308361928720,76989635665897056757,2099694672502978261129,2499278042403573792,23994090941122685480,348905267647927528350,4057048061363058246,19994236218049902145,12008096684355041865,3498972866121430093,399952049758648104376,379892644249751734723,7331074273148906603,499926721158544918445,28995014649187331200,155534040163110543,3419055614113489263301,199945786064955255869,99984922215138066540,11940731249496242,9998648791479301808,99997986090636984,4999319919409024702,75278599312019471008,20004274794429721786,22994220695367180988,3998913359845597384,9497882822697579207,1849753685077835228080,1499693766495532245,9998132539448897243,2999161464973501151,122963923838163536554,9998602921031189222,249933540782134667412,8748256010480108303,199870887498978286782,74979877460347423478,2999622873234109207,74989718060626759416,1999465504916710427064,499908735865805608,1241962116152060713,401109492287907629,73980033536100457236,29886166173581944622,359442063782612289,39988232675288000305,999713726897813322,953321242468317018,22006669614395381074,330342581938126080214,401583241182296934,1999553099697343335,4998650914601382245,899807013883311181285,349967173402743561941,4999141914029901165,999808531376531825,19996452589694343531,2999199985428679028,100983359711349393234,86984751696672373087,299941269738273242381,2999577045009891728,2099550583177882008,156757421593122201,18497345372475515793,2999475445556411802,99980055585089435,282421952098266234655,99985734138462998901,499892501497066034892,37108231016789653399,7997832369182641578,1427667316733088179,2199682035744654782,499855855955010505,9997205556608119756,19994928949477146578,4018969067458326495,19995027751107133405,1999420721406120521858,177960697518442657180,39994654851654382555,999861461461553649,99985182676534263,1999560000545579004,29998406400582478834]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [20424063187886226982599]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "nextPositionID one of [198]" + ], + "after_preds": [ + "nextPositionID one of [198]" + ] + }, + { + "before_preds": [ + "_guardCounter one of [376]" + ], + "after_preds": [ + "_guardCounter one of [376]" + ] + }, + { + "before_preds": [ + "config != 0" + ], + "after_preds": [ + "config != 0" + ] + }, + { + "before_preds": [ + "glbDebtVal one of [14854681992016139228071]" + ], + "after_preds": [ + "glbDebtVal one of [14854681992016139228071]" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "_config == config" + ], + "after_preds": [ + "_config == config" + ] + }, + { + "before_preds": [ + "config != ori(config)" + ], + "after_preds": [ + "config != ori(config)" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) > 0" + ], + "after_preds": [ + "ori(glbDebtVal) > 0" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(reservePool) > 0" + ], + "after_preds": [ + "ori(reservePool) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "share > 0" + ], + "after_preds": [ + "share > 0" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) > 0" + ], + "after_preds": [ + "ori(lastAccrueTime) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) > 0" + ], + "after_preds": [ + "ori(nextPositionID) > 0" + ] + }, + { + "before_preds": [ + "ori(config) != 0" + ], + "after_preds": [ + "ori(config) != 0" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) > 0" + ], + "after_preds": [ + "ori(_guardCounter) > 0" + ] + }, + { + "before_preds": [ + "ori(glbDebtShare) > 0" + ], + "after_preds": [ + "ori(glbDebtShare) > 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(reservePool) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "lastAccrueTime > 0" + ], + "after_preds": [ + "lastAccrueTime > 0" + ] + }, + { + "before_preds": [ + "glbDebtShare > 0" + ], + "after_preds": [ + "glbDebtShare > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "reservePool > 0" + ], + "after_preds": [ + "reservePool > 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [0,999710360703060260929,65205495417134526340]" + ], + "after_preds": [ + "_balances[msg.sender] one of [0,999710360703060260929,65205495417134526340]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [20424063187886226982599]" + ], + "after_preds": [ + "elem of _balances[...] is one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "nextPositionID > 0" + ], + "after_preds": [ + "nextPositionID > 0" + ] + }, + { + "before_preds": [ + "_guardCounter > 0" + ], + "after_preds": [ + "_guardCounter > 0" + ] + }, + { + "before_preds": [ + "config != 0" + ], + "after_preds": [ + "config != 0" + ] + }, + { + "before_preds": [ + "glbDebtVal > 0" + ], + "after_preds": [ + "glbDebtVal > 0" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _totalSupply" + ], + "after_preds": [ + "ori(glbDebtVal) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != glbDebtVal" + ], + "after_preds": [ + "ori(_totalSupply) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(reservePool) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(reservePool) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply != glbDebtVal" + ], + "after_preds": [ + "_totalSupply != glbDebtVal" + ] + }, + { + "before_preds": [ + "reservePool != ori(_balances[msg.sender])" + ], + "after_preds": [ + "reservePool != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "reservePool != _balances[msg.sender]" + ], + "after_preds": [ + "reservePool != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != glbDebtVal" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != glbDebtVal" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != _guardCounter" + ], + "after_preds": [ + "_balances[msg.sender] != _guardCounter" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != ori(_guardCounter)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ], + "after_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ] + }, + { + "before_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ], + "after_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ] + }, + { + "before_preds": [ + "config == ori(config)" + ], + "after_preds": [ + "config == ori(config)" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "maxReturn one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "maxReturn one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "goblin != 0" + ], + "after_preds": [ + "goblin != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) > 0" + ], + "after_preds": [ + "ori(lastAccrueTime) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) > 0" + ], + "after_preds": [ + "ori(nextPositionID) > 0" + ] + }, + { + "before_preds": [ + "ori(config) != 0" + ], + "after_preds": [ + "ori(config) != 0" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) > 0" + ], + "after_preds": [ + "ori(_guardCounter) > 0" + ] + }, + { + "before_preds": [ + "data != \"\"" + ], + "after_preds": [ + "data != \"\"" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= id" + ], + "after_preds": [ + "ori(glbDebtVal) >= id" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(nextPositionID)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(glbDebtShare)" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(reservePool) >= id" + ], + "after_preds": [ + "ori(reservePool) >= id" + ] + }, + { + "before_preds": [ + "ori(reservePool) != loan" + ], + "after_preds": [ + "ori(reservePool) != loan" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(nextPositionID)" + ], + "after_preds": [ + "ori(reservePool) != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= ori(glbDebtShare)" + ], + "after_preds": [ + "ori(reservePool) <= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "goblin != msg.sender" + ], + "after_preds": [ + "goblin != msg.sender" + ] + }, + { + "before_preds": [ + "id <= ori(glbDebtShare)" + ], + "after_preds": [ + "id <= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "loan != ori(nextPositionID)" + ], + "after_preds": [ + "loan != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "loan != ori(_guardCounter)" + ], + "after_preds": [ + "loan != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) != ori(glbDebtShare)" + ], + "after_preds": [ + "ori(nextPositionID) != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) != ori(glbDebtShare)" + ], + "after_preds": [ + "ori(_guardCounter) != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "lastAccrueTime > 0" + ], + "after_preds": [ + "lastAccrueTime > 0" + ] + }, + { + "before_preds": [ + "glbDebtShare > 0" + ], + "after_preds": [ + "glbDebtShare > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "nextPositionID > 0" + ], + "after_preds": [ + "nextPositionID > 0" + ] + }, + { + "before_preds": [ + "_guardCounter > 0" + ], + "after_preds": [ + "_guardCounter > 0" + ] + }, + { + "before_preds": [ + "config != 0" + ], + "after_preds": [ + "config != 0" + ] + }, + { + "before_preds": [ + "glbDebtVal > 0" + ], + "after_preds": [ + "glbDebtVal > 0" + ] + }, + { + "before_preds": [ + "positions[id].goblin == ori(positions[id].goblin)" + ], + "after_preds": [ + "positions[id].goblin == ori(positions[id].goblin)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != glbDebtShare" + ], + "after_preds": [ + "ori(glbDebtVal) != glbDebtShare" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= reservePool" + ], + "after_preds": [ + "ori(glbDebtVal) >= reservePool" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != nextPositionID" + ], + "after_preds": [ + "ori(glbDebtVal) != nextPositionID" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _guardCounter" + ], + "after_preds": [ + "ori(glbDebtVal) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= reservePool" + ], + "after_preds": [ + "ori(reservePool) <= reservePool" + ] + }, + { + "before_preds": [ + "ori(reservePool) != nextPositionID" + ], + "after_preds": [ + "ori(reservePool) != nextPositionID" + ] + }, + { + "before_preds": [ + "ori(reservePool) != _guardCounter" + ], + "after_preds": [ + "ori(reservePool) != _guardCounter" + ] + }, + { + "before_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ], + "after_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ] + }, + { + "before_preds": [ + "positions[id].debtShare <= ori(positions[id].debtShare)" + ], + "after_preds": [ + "positions[id].debtShare <= ori(positions[id].debtShare)" + ] + }, + { + "before_preds": [ + "id <= reservePool" + ], + "after_preds": [ + "id <= reservePool" + ] + }, + { + "before_preds": [ + "glbDebtShare >= loan" + ], + "after_preds": [ + "glbDebtShare >= loan" + ] + }, + { + "before_preds": [ + "glbDebtShare <= glbDebtVal" + ], + "after_preds": [ + "glbDebtShare <= glbDebtVal" + ] + }, + { + "before_preds": [ + "reservePool != loan" + ], + "after_preds": [ + "reservePool != loan" + ] + }, + { + "before_preds": [ + "reservePool != nextPositionID" + ], + "after_preds": [ + "reservePool != nextPositionID" + ] + }, + { + "before_preds": [ + "reservePool != _guardCounter" + ], + "after_preds": [ + "reservePool != _guardCounter" + ] + }, + { + "before_preds": [ + "reservePool != ori(nextPositionID)" + ], + "after_preds": [ + "reservePool != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "reservePool != ori(_guardCounter)" + ], + "after_preds": [ + "reservePool != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= ori(glbDebtShare)" + ], + "after_preds": [ + "reservePool <= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(positions[id].owner) == positions[id].owner" + ], + "after_preds": [ + "ori(positions[id].owner) == positions[id].owner" + ] + }, + { + "before_preds": [ + "loan != nextPositionID" + ], + "after_preds": [ + "loan != nextPositionID" + ] + }, + { + "before_preds": [ + "loan != _guardCounter" + ], + "after_preds": [ + "loan != _guardCounter" + ] + }, + { + "before_preds": [ + "loan <= glbDebtVal" + ], + "after_preds": [ + "loan <= glbDebtVal" + ] + }, + { + "before_preds": [ + "nextPositionID >= ori(nextPositionID)" + ], + "after_preds": [ + "nextPositionID >= ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "nextPositionID <= ori(_guardCounter)" + ], + "after_preds": [ + "nextPositionID <= ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "nextPositionID != ori(glbDebtShare)" + ], + "after_preds": [ + "nextPositionID != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ], + "after_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ] + }, + { + "before_preds": [ + "_guardCounter != ori(glbDebtShare)" + ], + "after_preds": [ + "_guardCounter != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "config == ori(config)" + ], + "after_preds": [ + "config == ori(config)" + ] + }, + { + "before_preds": [ + "ori(glbDebtShare) != glbDebtVal" + ], + "after_preds": [ + "ori(glbDebtShare) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) > 0" + ], + "after_preds": [ + "ori(lastAccrueTime) > 0" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) > 0" + ], + "after_preds": [ + "ori(nextPositionID) > 0" + ] + }, + { + "before_preds": [ + "ori(config) != 0" + ], + "after_preds": [ + "ori(config) != 0" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) > 0" + ], + "after_preds": [ + "ori(_guardCounter) > 0" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(nextPositionID)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(glbDebtShare)" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(reservePool)" + ], + "after_preds": [ + "ori(_totalSupply) >= ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(_totalSupply) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(nextPositionID)" + ], + "after_preds": [ + "ori(reservePool) != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= ori(glbDebtShare)" + ], + "after_preds": [ + "ori(reservePool) <= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) <= ori(_guardCounter)" + ], + "after_preds": [ + "ori(nextPositionID) <= ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) != ori(glbDebtShare)" + ], + "after_preds": [ + "ori(nextPositionID) != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) != ori(glbDebtShare)" + ], + "after_preds": [ + "ori(_guardCounter) != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "lastAccrueTime > 0" + ], + "after_preds": [ + "lastAccrueTime > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "nextPositionID > 0" + ], + "after_preds": [ + "nextPositionID > 0" + ] + }, + { + "before_preds": [ + "_guardCounter > 0" + ], + "after_preds": [ + "_guardCounter > 0" + ] + }, + { + "before_preds": [ + "config != 0" + ], + "after_preds": [ + "config != 0" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _totalSupply" + ], + "after_preds": [ + "ori(glbDebtVal) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= reservePool" + ], + "after_preds": [ + "ori(glbDebtVal) >= reservePool" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != nextPositionID" + ], + "after_preds": [ + "ori(glbDebtVal) != nextPositionID" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _guardCounter" + ], + "after_preds": [ + "ori(glbDebtVal) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= reservePool" + ], + "after_preds": [ + "ori(_totalSupply) >= reservePool" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != _guardCounter" + ], + "after_preds": [ + "ori(_totalSupply) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtShare" + ], + "after_preds": [ + "ori(reservePool) <= glbDebtShare" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= reservePool" + ], + "after_preds": [ + "ori(reservePool) <= reservePool" + ] + }, + { + "before_preds": [ + "ori(reservePool) != nextPositionID" + ], + "after_preds": [ + "ori(reservePool) != nextPositionID" + ] + }, + { + "before_preds": [ + "ori(reservePool) != _guardCounter" + ], + "after_preds": [ + "ori(reservePool) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtVal" + ], + "after_preds": [ + "ori(reservePool) <= glbDebtVal" + ] + }, + { + "before_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ], + "after_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ] + }, + { + "before_preds": [ + "glbDebtShare >= reservePool" + ], + "after_preds": [ + "glbDebtShare >= reservePool" + ] + }, + { + "before_preds": [ + "glbDebtShare != nextPositionID" + ], + "after_preds": [ + "glbDebtShare != nextPositionID" + ] + }, + { + "before_preds": [ + "glbDebtShare != _guardCounter" + ], + "after_preds": [ + "glbDebtShare != _guardCounter" + ] + }, + { + "before_preds": [ + "glbDebtShare != ori(nextPositionID)" + ], + "after_preds": [ + "glbDebtShare != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "glbDebtShare != ori(_guardCounter)" + ], + "after_preds": [ + "glbDebtShare != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "glbDebtShare <= glbDebtVal" + ], + "after_preds": [ + "glbDebtShare <= glbDebtVal" + ] + }, + { + "before_preds": [ + "_totalSupply != glbDebtVal" + ], + "after_preds": [ + "_totalSupply != glbDebtVal" + ] + }, + { + "before_preds": [ + "reservePool <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "reservePool <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "reservePool != nextPositionID" + ], + "after_preds": [ + "reservePool != nextPositionID" + ] + }, + { + "before_preds": [ + "reservePool != _guardCounter" + ], + "after_preds": [ + "reservePool != _guardCounter" + ] + }, + { + "before_preds": [ + "reservePool != ori(nextPositionID)" + ], + "after_preds": [ + "reservePool != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "reservePool != ori(_guardCounter)" + ], + "after_preds": [ + "reservePool != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= ori(glbDebtShare)" + ], + "after_preds": [ + "reservePool <= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "reservePool <= glbDebtVal" + ], + "after_preds": [ + "reservePool <= glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != _guardCounter" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _guardCounter" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ], + "after_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ] + }, + { + "before_preds": [ + "nextPositionID >= ori(nextPositionID)" + ], + "after_preds": [ + "nextPositionID >= ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "nextPositionID <= ori(_guardCounter)" + ], + "after_preds": [ + "nextPositionID <= ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "nextPositionID != ori(glbDebtShare)" + ], + "after_preds": [ + "nextPositionID != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "nextPositionID != glbDebtVal" + ], + "after_preds": [ + "nextPositionID != glbDebtVal" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(_guardCounter)" + ], + "after_preds": [ + "_guardCounter >= ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "_guardCounter != ori(glbDebtShare)" + ], + "after_preds": [ + "_guardCounter != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "_guardCounter != glbDebtVal" + ], + "after_preds": [ + "_guardCounter != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) != glbDebtVal" + ], + "after_preds": [ + "ori(nextPositionID) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) != glbDebtVal" + ], + "after_preds": [ + "ori(_guardCounter) != glbDebtVal" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json new file mode 100644 index 0000000..755b4a1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json @@ -0,0 +1,1858 @@ +[ + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "_converter != 0" + ], + "after_preds": [ + "_converter != 0" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(approvedJarConverters[_converter]) == false" + ], + "after_preds": [ + "ori(approvedJarConverters[_converter]) == false" + ] + }, + { + "before_preds": [ + "ori(governance) == msg.sender" + ], + "after_preds": [ + "ori(governance) == msg.sender" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "approvedJarConverters[_converter] == true" + ], + "after_preds": [ + "approvedJarConverters[_converter] == true" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "governance == msg.sender" + ], + "after_preds": [ + "governance == msg.sender" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "approvedJarConverters[_converter] != ori(approvedJarConverters[_converter])" + ], + "after_preds": [ + "approvedJarConverters[_converter] != ori(approvedJarConverters[_converter])" + ] + }, + { + "before_preds": [ + "ori(timelock) == timelock" + ], + "after_preds": [ + "ori(timelock) == timelock" + ] + }, + { + "before_preds": [ + "_strategy != 0" + ], + "after_preds": [ + "_strategy != 0" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(approvedStrategies[_token][_strategy]) == false" + ], + "after_preds": [ + "ori(approvedStrategies[_token][_strategy]) == false" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_token != 0" + ], + "after_preds": [ + "_token != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) == msg.sender" + ], + "after_preds": [ + "ori(timelock) == msg.sender" + ] + }, + { + "before_preds": [ + "approvedStrategies[_token][_strategy] == true" + ], + "after_preds": [ + "approvedStrategies[_token][_strategy] == true" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "approvedStrategies[_token][_strategy] != ori(approvedStrategies[_token][_strategy])" + ], + "after_preds": [ + "approvedStrategies[_token][_strategy] != ori(approvedStrategies[_token][_strategy])" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(timelock) == timelock" + ], + "after_preds": [ + "ori(timelock) == timelock" + ] + }, + { + "before_preds": [ + "msg.sender == timelock" + ], + "after_preds": [ + "msg.sender == timelock" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_governance != 0" + ], + "after_preds": [ + "_governance != 0" + ] + }, + { + "before_preds": [ + "ori(governance) == msg.sender" + ], + "after_preds": [ + "ori(governance) == msg.sender" + ] + }, + { + "before_preds": [ + "ori(governance) != _governance" + ], + "after_preds": [ + "ori(governance) != _governance" + ] + }, + { + "before_preds": [ + "msg.sender != _governance" + ], + "after_preds": [ + "msg.sender != _governance" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "governance != ori(governance)" + ], + "after_preds": [ + "governance != ori(governance)" + ] + }, + { + "before_preds": [ + "governance != msg.sender" + ], + "after_preds": [ + "governance != msg.sender" + ] + }, + { + "before_preds": [ + "governance == _governance" + ], + "after_preds": [ + "governance == _governance" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(timelock) == timelock" + ], + "after_preds": [ + "ori(timelock) == timelock" + ] + }, + { + "before_preds": [ + "ori(jars[_token]) == 0" + ], + "after_preds": [ + "ori(jars[_token]) == 0" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "_jar != 0" + ], + "after_preds": [ + "_jar != 0" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_token != 0" + ], + "after_preds": [ + "_token != 0" + ] + }, + { + "before_preds": [ + "ori(jars[_token]) != _jar" + ], + "after_preds": [ + "ori(jars[_token]) != _jar" + ] + }, + { + "before_preds": [ + "ori(governance) != ori(strategist)" + ], + "after_preds": [ + "ori(governance) != ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(governance) == msg.sender" + ], + "after_preds": [ + "ori(governance) == msg.sender" + ] + }, + { + "before_preds": [ + "ori(strategist) != msg.sender" + ], + "after_preds": [ + "ori(strategist) != msg.sender" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "jars[_token] != 0" + ], + "after_preds": [ + "jars[_token] != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "ori(jars[_token]) != jars[_token]" + ], + "after_preds": [ + "ori(jars[_token]) != jars[_token]" + ] + }, + { + "before_preds": [ + "governance != strategist" + ], + "after_preds": [ + "governance != strategist" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "governance != ori(strategist)" + ], + "after_preds": [ + "governance != ori(strategist)" + ] + }, + { + "before_preds": [ + "governance == msg.sender" + ], + "after_preds": [ + "governance == msg.sender" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "_jar == jars[_token]" + ], + "after_preds": [ + "_jar == jars[_token]" + ] + }, + { + "before_preds": [ + "strategist != ori(governance)" + ], + "after_preds": [ + "strategist != ori(governance)" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "strategist != msg.sender" + ], + "after_preds": [ + "strategist != msg.sender" + ] + }, + { + "before_preds": [ + "ori(timelock) == timelock" + ], + "after_preds": [ + "ori(timelock) == timelock" + ] + }, + { + "before_preds": [ + "_strategy != 0" + ], + "after_preds": [ + "_strategy != 0" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(strategies[_token]) == 0" + ], + "after_preds": [ + "ori(strategies[_token]) == 0" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(approvedStrategies[_token][_strategy]) == true" + ], + "after_preds": [ + "ori(approvedStrategies[_token][_strategy]) == true" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_token != 0" + ], + "after_preds": [ + "_token != 0" + ] + }, + { + "before_preds": [ + "_strategy != ori(strategies[_token])" + ], + "after_preds": [ + "_strategy != ori(strategies[_token])" + ] + }, + { + "before_preds": [ + "ori(governance) != ori(strategist)" + ], + "after_preds": [ + "ori(governance) != ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(governance) == msg.sender" + ], + "after_preds": [ + "ori(governance) == msg.sender" + ] + }, + { + "before_preds": [ + "ori(strategist) != msg.sender" + ], + "after_preds": [ + "ori(strategist) != msg.sender" + ] + }, + { + "before_preds": [ + "approvedStrategies[_token][_strategy] == true" + ], + "after_preds": [ + "approvedStrategies[_token][_strategy] == true" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategies[_token] != 0" + ], + "after_preds": [ + "strategies[_token] != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "_strategy == strategies[_token]" + ], + "after_preds": [ + "_strategy == strategies[_token]" + ] + }, + { + "before_preds": [ + "approvedStrategies[_token][_strategy] == ori(approvedStrategies[_token][_strategy])" + ], + "after_preds": [ + "approvedStrategies[_token][_strategy] == ori(approvedStrategies[_token][_strategy])" + ] + }, + { + "before_preds": [ + "governance != strategist" + ], + "after_preds": [ + "governance != strategist" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "governance != ori(strategist)" + ], + "after_preds": [ + "governance != ori(strategist)" + ] + }, + { + "before_preds": [ + "governance == msg.sender" + ], + "after_preds": [ + "governance == msg.sender" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "ori(strategies[_token]) != strategies[_token]" + ], + "after_preds": [ + "ori(strategies[_token]) != strategies[_token]" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "strategist != ori(governance)" + ], + "after_preds": [ + "strategist != ori(governance)" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "strategist != msg.sender" + ], + "after_preds": [ + "strategist != msg.sender" + ] + }, + { + "before_preds": [ + "ori(timelock) == timelock" + ], + "after_preds": [ + "ori(timelock) == timelock" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_timelock != 0" + ], + "after_preds": [ + "_timelock != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) == msg.sender" + ], + "after_preds": [ + "ori(timelock) == msg.sender" + ] + }, + { + "before_preds": [ + "ori(timelock) != _timelock" + ], + "after_preds": [ + "ori(timelock) != _timelock" + ] + }, + { + "before_preds": [ + "msg.sender != _timelock" + ], + "after_preds": [ + "msg.sender != _timelock" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(timelock) != timelock" + ], + "after_preds": [ + "ori(timelock) != timelock" + ] + }, + { + "before_preds": [ + "msg.sender != timelock" + ], + "after_preds": [ + "msg.sender != timelock" + ] + }, + { + "before_preds": [ + "timelock == _timelock" + ], + "after_preds": [ + "timelock == _timelock" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != ori(strategist)" + ], + "after_preds": [ + "ori(governance) != ori(strategist)" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "governance != strategist" + ], + "after_preds": [ + "governance != strategist" + ] + }, + { + "before_preds": [ + "governance != ori(strategist)" + ], + "after_preds": [ + "governance != ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "strategist != ori(governance)" + ], + "after_preds": [ + "strategist != ori(governance)" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json new file mode 100644 index 0000000..37502d4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json @@ -0,0 +1,450 @@ +[ + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "fromChainID > 0" + ], + "after_preds": [ + "fromChainID > 0" + ] + }, + { + "before_preds": [ + "fromChainID one of [56,137,250]" + ], + "after_preds": [ + "fromChainID one of [56,137,250]" + ] + }, + { + "before_preds": [ + "txs != \"\"" + ], + "after_preds": [ + "txs != \"\"" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == 0" + ], + "after_preds": [ + "ori(_oldMPC) == 0" + ] + }, + { + "before_preds": [ + "ori(_newMPC) != 0" + ], + "after_preds": [ + "ori(_newMPC) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_newMPC != 0" + ], + "after_preds": [ + "_newMPC != 0" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "after_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ] + }, + { + "before_preds": [ + "_oldMPC == 0" + ], + "after_preds": [ + "_oldMPC == 0" + ] + }, + { + "before_preds": [ + "_newMPC == ori(_newMPC)" + ], + "after_preds": [ + "_newMPC == ori(_newMPC)" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == _oldMPC" + ], + "after_preds": [ + "ori(_oldMPC) == _oldMPC" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "toChainID one of [56]" + ], + "after_preds": [ + "toChainID one of [56]" + ] + }, + { + "before_preds": [ + "amount one of [390000000000]" + ], + "after_preds": [ + "amount one of [390000000000]" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == 0" + ], + "after_preds": [ + "ori(_oldMPC) == 0" + ] + }, + { + "before_preds": [ + "ori(_newMPC) != 0" + ], + "after_preds": [ + "ori(_newMPC) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_newMPC != 0" + ], + "after_preds": [ + "_newMPC != 0" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "after_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ] + }, + { + "before_preds": [ + "_oldMPC == 0" + ], + "after_preds": [ + "_oldMPC == 0" + ] + }, + { + "before_preds": [ + "_newMPC == ori(_newMPC)" + ], + "after_preds": [ + "_newMPC == ori(_newMPC)" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == _oldMPC" + ], + "after_preds": [ + "ori(_oldMPC) == _oldMPC" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "toChainID > 0" + ], + "after_preds": [ + "toChainID > 0" + ] + }, + { + "before_preds": [ + "toChainID one of [56,137,250]" + ], + "after_preds": [ + "toChainID one of [56,137,250]" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == 0" + ], + "after_preds": [ + "ori(_oldMPC) == 0" + ] + }, + { + "before_preds": [ + "ori(_newMPC) != 0" + ], + "after_preds": [ + "ori(_newMPC) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_newMPC != 0" + ], + "after_preds": [ + "_newMPC != 0" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "after_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ] + }, + { + "before_preds": [ + "_oldMPC == 0" + ], + "after_preds": [ + "_oldMPC == 0" + ] + }, + { + "before_preds": [ + "_newMPC == ori(_newMPC)" + ], + "after_preds": [ + "_newMPC == ori(_newMPC)" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == _oldMPC" + ], + "after_preds": [ + "ori(_oldMPC) == _oldMPC" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == 0" + ], + "after_preds": [ + "ori(_oldMPC) == 0" + ] + }, + { + "before_preds": [ + "ori(_newMPC) != 0" + ], + "after_preds": [ + "ori(_newMPC) != 0" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ] + }, + { + "before_preds": [ + "_newMPC != 0" + ], + "after_preds": [ + "_newMPC != 0" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "after_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ] + }, + { + "before_preds": [ + "_oldMPC == 0" + ], + "after_preds": [ + "_oldMPC == 0" + ] + }, + { + "before_preds": [ + "_newMPC == ori(_newMPC)" + ], + "after_preds": [ + "_newMPC == ori(_newMPC)" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == _oldMPC" + ], + "after_preds": [ + "ori(_oldMPC) == _oldMPC" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json new file mode 100644 index 0000000..5fb2450 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json @@ -0,0 +1,986 @@ +[ + { + "before_preds": [ + "ori(Sum(decimals[...])) one of [81]" + ], + "after_preds": [ + "ori(Sum(decimals[...])) one of [81]" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) != 0" + ], + "after_preds": [ + "ori(pendingAdmin) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) != 0" + ], + "after_preds": [ + "ori(kyberNetworkContract) != 0" + ] + }, + { + "before_preds": [ + "sendTo != 0" + ], + "after_preds": [ + "sendTo != 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "amount one of [40963957051]" + ], + "after_preds": [ + "amount one of [40963957051]" + ] + }, + { + "before_preds": [ + "msg.sender == ori(admin)" + ], + "after_preds": [ + "msg.sender == ori(admin)" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [81]" + ], + "after_preds": [ + "elem of decimals[...] is one of [81]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [9,18]" + ], + "after_preds": [ + "elem of decimals[...] is one of [9,18]" + ] + }, + { + "before_preds": [ + "pendingAdmin != 0" + ], + "after_preds": [ + "pendingAdmin != 0" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) one of [81]" + ], + "after_preds": [ + "Sum(decimals[...]) one of [81]" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ] + }, + { + "before_preds": [ + "msg.sender == admin" + ], + "after_preds": [ + "msg.sender == admin" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ], + "after_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ] + }, + { + "before_preds": [ + "ori(admin) == admin" + ], + "after_preds": [ + "ori(admin) == admin" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == 0" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == 0" + ], + "after_preds": [ + "ori(pendingAdmin) == 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) != 0" + ], + "after_preds": [ + "ori(kyberNetworkContract) != 0" + ] + }, + { + "before_preds": [ + "newAdmin != 0" + ], + "after_preds": [ + "newAdmin != 0" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) != newAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) != newAdmin" + ] + }, + { + "before_preds": [ + "msg.sender == ori(admin)" + ], + "after_preds": [ + "msg.sender == ori(admin)" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [0]" + ], + "after_preds": [ + "elem of decimals[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of []" + ], + "after_preds": [ + "elem of decimals[...] is one of []" + ] + }, + { + "before_preds": [ + "pendingAdmin != 0" + ], + "after_preds": [ + "pendingAdmin != 0" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) == 0" + ], + "after_preds": [ + "Sum(decimals[...]) == 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) one of [0]" + ], + "after_preds": [ + "Sum(decimals[...]) one of [0]" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) != pendingAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) != pendingAdmin" + ] + }, + { + "before_preds": [ + "msg.sender == admin" + ], + "after_preds": [ + "msg.sender == admin" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ], + "after_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ] + }, + { + "before_preds": [ + "newAdmin == pendingAdmin" + ], + "after_preds": [ + "newAdmin == pendingAdmin" + ] + }, + { + "before_preds": [ + "ori(admin) == admin" + ], + "after_preds": [ + "ori(admin) == admin" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == 0" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == 0" + ], + "after_preds": [ + "ori(pendingAdmin) == 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) != 0" + ], + "after_preds": [ + "ori(kyberNetworkContract) != 0" + ] + }, + { + "before_preds": [ + "newAdmin != 0" + ], + "after_preds": [ + "newAdmin != 0" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != newAdmin" + ], + "after_preds": [ + "msg.sender != newAdmin" + ] + }, + { + "before_preds": [ + "msg.sender == ori(admin)" + ], + "after_preds": [ + "msg.sender == ori(admin)" + ] + }, + { + "before_preds": [ + "newAdmin != ori(admin)" + ], + "after_preds": [ + "newAdmin != ori(admin)" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [0]" + ], + "after_preds": [ + "elem of decimals[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of []" + ], + "after_preds": [ + "elem of decimals[...] is one of []" + ] + }, + { + "before_preds": [ + "pendingAdmin == 0" + ], + "after_preds": [ + "pendingAdmin == 0" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) == 0" + ], + "after_preds": [ + "Sum(decimals[...]) == 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) one of [0]" + ], + "after_preds": [ + "Sum(decimals[...]) one of [0]" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ] + }, + { + "before_preds": [ + "msg.sender != admin" + ], + "after_preds": [ + "msg.sender != admin" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ], + "after_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ] + }, + { + "before_preds": [ + "newAdmin == admin" + ], + "after_preds": [ + "newAdmin == admin" + ] + }, + { + "before_preds": [ + "ori(admin) != admin" + ], + "after_preds": [ + "ori(admin) != admin" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == 0" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ] + }, + { + "before_preds": [ + "_kyberNetworkContract != 0" + ], + "after_preds": [ + "_kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == 0" + ], + "after_preds": [ + "ori(pendingAdmin) == 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) == 0" + ], + "after_preds": [ + "ori(kyberNetworkContract) == 0" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "_kyberNetworkContract != ori(kyberNetworkContract)" + ], + "after_preds": [ + "_kyberNetworkContract != ori(kyberNetworkContract)" + ] + }, + { + "before_preds": [ + "msg.sender == ori(admin)" + ], + "after_preds": [ + "msg.sender == ori(admin)" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [0]" + ], + "after_preds": [ + "elem of decimals[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of []" + ], + "after_preds": [ + "elem of decimals[...] is one of []" + ] + }, + { + "before_preds": [ + "pendingAdmin == 0" + ], + "after_preds": [ + "pendingAdmin == 0" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) == 0" + ], + "after_preds": [ + "Sum(decimals[...]) == 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) one of [0]" + ], + "after_preds": [ + "Sum(decimals[...]) one of [0]" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "_kyberNetworkContract == kyberNetworkContract" + ], + "after_preds": [ + "_kyberNetworkContract == kyberNetworkContract" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ] + }, + { + "before_preds": [ + "msg.sender == admin" + ], + "after_preds": [ + "msg.sender == admin" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) != kyberNetworkContract" + ], + "after_preds": [ + "ori(kyberNetworkContract) != kyberNetworkContract" + ] + }, + { + "before_preds": [ + "ori(admin) == admin" + ], + "after_preds": [ + "ori(admin) == admin" + ] + }, + { + "before_preds": [ + "minConversionRate > 0" + ], + "after_preds": [ + "minConversionRate > 0" + ] + }, + { + "before_preds": [ + "destAddress != 0" + ], + "after_preds": [ + "destAddress != 0" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) != 0" + ], + "after_preds": [ + "ori(pendingAdmin) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) != 0" + ], + "after_preds": [ + "ori(kyberNetworkContract) != 0" + ] + }, + { + "before_preds": [ + "maxDestAmount > 0" + ], + "after_preds": [ + "maxDestAmount > 0" + ] + }, + { + "before_preds": [ + "maxDestAmount one of [57896044618658097711785492504343953926634992332820282019728792003956564819968,1606938044258990300000000000000000000000000000000000000000000]" + ], + "after_preds": [ + "maxDestAmount one of [57896044618658097711785492504343953926634992332820282019728792003956564819968,1606938044258990300000000000000000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "dest != 0" + ], + "after_preds": [ + "dest != 0" + ] + }, + { + "before_preds": [ + "src != 0" + ], + "after_preds": [ + "src != 0" + ] + }, + { + "before_preds": [ + "srcAmount > 0" + ], + "after_preds": [ + "srcAmount > 0" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "walletId != 0" + ], + "after_preds": [ + "walletId != 0" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [161]" + ], + "after_preds": [ + "elem of decimals[...] is one of [161]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [8,9,18,12]" + ], + "after_preds": [ + "elem of decimals[...] is one of [8,9,18,12]" + ] + }, + { + "before_preds": [ + "pendingAdmin != 0" + ], + "after_preds": [ + "pendingAdmin != 0" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) > 0" + ], + "after_preds": [ + "Sum(decimals[...]) > 0" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ], + "after_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ] + }, + { + "before_preds": [ + "ori(admin) == admin" + ], + "after_preds": [ + "ori(admin) == admin" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "ori(admin) != ori(pendingAdmin)" + ], + "after_preds": [ + "ori(admin) != ori(pendingAdmin)" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [0]" + ], + "after_preds": [ + "elem of decimals[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [8,9,18,12]" + ], + "after_preds": [ + "elem of decimals[...] is one of [8,9,18,12]" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, + { + "before_preds": [ + "pendingAdmin != ori(admin)" + ], + "after_preds": [ + "pendingAdmin != ori(admin)" + ] + }, + { + "before_preds": [ + "pendingAdmin != admin" + ], + "after_preds": [ + "pendingAdmin != admin" + ] + }, + { + "before_preds": [ + "admin != ori(pendingAdmin)" + ], + "after_preds": [ + "admin != ori(pendingAdmin)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json new file mode 100644 index 0000000..8b510be --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json @@ -0,0 +1,1440 @@ +[ + { + "before_preds": [ + "ori(initializing) == false" + ], + "after_preds": [ + "ori(initializing) == false" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == false" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(rebasePausedDeprecated) == false" + ], + "after_preds": [ + "ori(rebasePausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(_allowedFragments[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowedFragments[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowedFragments[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowedFragments[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [60000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [60000000000000]" + ] + }, + { + "before_preds": [ + "ori(initialized) == true" + ], + "after_preds": [ + "ori(initialized) == true" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(monetaryPolicy) == 0" + ], + "after_preds": [ + "ori(monetaryPolicy) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "ori(_owner) == 0" + ], + "after_preds": [ + "ori(_owner) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) == 0" + ], + "after_preds": [ + "ori(_decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [0]" + ], + "after_preds": [ + "ori(_decimals) one of [0]" + ] + }, + { + "before_preds": [ + "value > 0" + ], + "after_preds": [ + "value > 0" + ] + }, + { + "before_preds": [ + "value one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] > 0" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] > 0" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "initializing == false" + ], + "after_preds": [ + "initializing == false" + ] + }, + { + "before_preds": [ + "_totalSupply one of [60000000000000]" + ], + "after_preds": [ + "_totalSupply one of [60000000000000]" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == false" + ], + "after_preds": [ + "rebasePausedDeprecated == false" + ] + }, + { + "before_preds": [ + "monetaryPolicy == 0" + ], + "after_preds": [ + "monetaryPolicy == 0" + ] + }, + { + "before_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_allowedFragments[msg.sender][...]) > 0" + ], + "after_preds": [ + "Sum(_allowedFragments[msg.sender][...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_allowedFragments[msg.sender][...]) one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowedFragments[msg.sender][...]) one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated == false" + ], + "after_preds": [ + "tokenPausedDeprecated == false" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_decimals == 0" + ], + "after_preds": [ + "_decimals == 0" + ] + }, + { + "before_preds": [ + "_decimals one of [0]" + ], + "after_preds": [ + "_decimals one of [0]" + ] + }, + { + "before_preds": [ + "initialized == true" + ], + "after_preds": [ + "initialized == true" + ] + }, + { + "before_preds": [ + "_owner == 0" + ], + "after_preds": [ + "_owner == 0" + ] + }, + { + "before_preds": [ + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000]" + ], + "after_preds": [ + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000]" + ] + }, + { + "before_preds": [ + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(initializing) == initializing" + ], + "after_preds": [ + "ori(initializing) == initializing" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ], + "after_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ] + }, + { + "before_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ], + "after_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(initialized) == initialized" + ], + "after_preds": [ + "ori(initialized) == initialized" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(initializing) == false" + ], + "after_preds": [ + "ori(initializing) == false" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == false" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(rebasePausedDeprecated) == false" + ], + "after_preds": [ + "ori(rebasePausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [60000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [60000000000000]" + ] + }, + { + "before_preds": [ + "ori(initialized) == true" + ], + "after_preds": [ + "ori(initialized) == true" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(monetaryPolicy) == 0" + ], + "after_preds": [ + "ori(monetaryPolicy) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "ori(_owner) == 0" + ], + "after_preds": [ + "ori(_owner) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) == 0" + ], + "after_preds": [ + "ori(_decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [0]" + ], + "after_preds": [ + "ori(_decimals) one of [0]" + ] + }, + { + "before_preds": [ + "monetaryPolicy_ != 0" + ], + "after_preds": [ + "monetaryPolicy_ != 0" + ] + }, + { + "before_preds": [ + "ori(monetaryPolicy) != monetaryPolicy_" + ], + "after_preds": [ + "ori(monetaryPolicy) != monetaryPolicy_" + ] + }, + { + "before_preds": [ + "initializing == false" + ], + "after_preds": [ + "initializing == false" + ] + }, + { + "before_preds": [ + "_totalSupply one of [60000000000000]" + ], + "after_preds": [ + "_totalSupply one of [60000000000000]" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == false" + ], + "after_preds": [ + "rebasePausedDeprecated == false" + ] + }, + { + "before_preds": [ + "monetaryPolicy == 0" + ], + "after_preds": [ + "monetaryPolicy == 0" + ] + }, + { + "before_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated == false" + ], + "after_preds": [ + "tokenPausedDeprecated == false" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_decimals == 0" + ], + "after_preds": [ + "_decimals == 0" + ] + }, + { + "before_preds": [ + "_decimals one of [0]" + ], + "after_preds": [ + "_decimals one of [0]" + ] + }, + { + "before_preds": [ + "initialized == true" + ], + "after_preds": [ + "initialized == true" + ] + }, + { + "before_preds": [ + "_owner == 0" + ], + "after_preds": [ + "_owner == 0" + ] + }, + { + "before_preds": [ + "ori(initializing) == initializing" + ], + "after_preds": [ + "ori(initializing) == initializing" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ], + "after_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ] + }, + { + "before_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ], + "after_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ] + }, + { + "before_preds": [ + "monetaryPolicy != monetaryPolicy_" + ], + "after_preds": [ + "monetaryPolicy != monetaryPolicy_" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(initialized) == initialized" + ], + "after_preds": [ + "ori(initialized) == initialized" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(initializing) == false" + ], + "after_preds": [ + "ori(initializing) == false" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == false" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(rebasePausedDeprecated) == false" + ], + "after_preds": [ + "ori(rebasePausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == 0" + ], + "after_preds": [ + "ori(_totalSupply) == 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [0]" + ], + "after_preds": [ + "ori(_totalSupply) one of [0]" + ] + }, + { + "before_preds": [ + "ori(initialized) == false" + ], + "after_preds": [ + "ori(initialized) == false" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(monetaryPolicy) == 0" + ], + "after_preds": [ + "ori(monetaryPolicy) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) == 0" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) == 0" + ], + "after_preds": [ + "ori(_gonsPerFragment) == 0" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) one of [0]" + ], + "after_preds": [ + "ori(_gonsPerFragment) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_owner) == 0" + ], + "after_preds": [ + "ori(_owner) == 0" + ] + }, + { + "before_preds": [ + "ori(_gonBalances[owner_]) == 0" + ], + "after_preds": [ + "ori(_gonBalances[owner_]) == 0" + ] + }, + { + "before_preds": [ + "ori(_gonBalances[owner_]) one of [0]" + ], + "after_preds": [ + "ori(_gonBalances[owner_]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) == 0" + ], + "after_preds": [ + "ori(_decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [0]" + ], + "after_preds": [ + "ori(_decimals) one of [0]" + ] + }, + { + "before_preds": [ + "owner_ != 0" + ], + "after_preds": [ + "owner_ != 0" + ] + }, + { + "before_preds": [ + "ori(initializing) == ori(tokenPausedDeprecated)" + ], + "after_preds": [ + "ori(initializing) == ori(tokenPausedDeprecated)" + ] + }, + { + "before_preds": [ + "ori(initializing) == ori(initialized)" + ], + "after_preds": [ + "ori(initializing) == ori(initialized)" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == ori(initialized)" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == ori(initialized)" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) == ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) >= ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) <= ori(_gonBalances[owner_])" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) == ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) >= ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) <= ori(_gonBalances[owner_])" + ] + }, + { + "before_preds": [ + "initializing == false" + ], + "after_preds": [ + "initializing == false" + ] + }, + { + "before_preds": [ + "_totalSupply one of [60000000000000]" + ], + "after_preds": [ + "_totalSupply one of [60000000000000]" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == false" + ], + "after_preds": [ + "rebasePausedDeprecated == false" + ] + }, + { + "before_preds": [ + "monetaryPolicy == 0" + ], + "after_preds": [ + "monetaryPolicy == 0" + ] + }, + { + "before_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated == false" + ], + "after_preds": [ + "tokenPausedDeprecated == false" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_decimals == 0" + ], + "after_preds": [ + "_decimals == 0" + ] + }, + { + "before_preds": [ + "_decimals one of [0]" + ], + "after_preds": [ + "_decimals one of [0]" + ] + }, + { + "before_preds": [ + "initialized == true" + ], + "after_preds": [ + "initialized == true" + ] + }, + { + "before_preds": [ + "_owner == 0" + ], + "after_preds": [ + "_owner == 0" + ] + }, + { + "before_preds": [ + "_gonBalances[owner_] > 0", + "_gonBalances[owner_] == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "_gonBalances[owner_] > 0", + "_gonBalances[owner_] == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "_gonBalances[owner_] one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "_gonBalances[owner_] one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "ori(initializing) == initializing" + ], + "after_preds": [ + "ori(initializing) == initializing" + ] + }, + { + "before_preds": [ + "ori(initializing) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(initializing) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(initializing) != initialized" + ], + "after_preds": [ + "ori(initializing) != initialized" + ] + }, + { + "before_preds": [ + "initializing == ori(tokenPausedDeprecated)" + ], + "after_preds": [ + "initializing == ori(tokenPausedDeprecated)" + ] + }, + { + "before_preds": [ + "initializing == tokenPausedDeprecated" + ], + "after_preds": [ + "initializing == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "initializing == ori(initialized)" + ], + "after_preds": [ + "initializing == ori(initialized)" + ] + }, + { + "before_preds": [ + "initializing != initialized" + ], + "after_preds": [ + "initializing != initialized" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ], + "after_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ] + }, + { + "before_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ], + "after_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) != initialized" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) != initialized" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated == ori(initialized)" + ], + "after_preds": [ + "tokenPausedDeprecated == ori(initialized)" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated != initialized" + ], + "after_preds": [ + "tokenPausedDeprecated != initialized" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) >= ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) > ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) != ori(_gonBalances[owner_])" + ], + "after_preds": [ + "Sum(_gonBalances[...]) >= ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) > ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) != ori(_gonBalances[owner_])" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) == _gonBalances[owner_]", + "Sum(_gonBalances[...]) >= _gonBalances[owner_]", + "Sum(_gonBalances[...]) <= _gonBalances[owner_]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == _gonBalances[owner_]", + "Sum(_gonBalances[...]) >= _gonBalances[owner_]", + "Sum(_gonBalances[...]) <= _gonBalances[owner_]" + ] + }, + { + "before_preds": [ + "ori(initialized) != initialized" + ], + "after_preds": [ + "ori(initialized) != initialized" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) <= _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) < _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) != _gonBalances[owner_]" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) <= _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) < _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) != _gonBalances[owner_]" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(_gonBalances[owner_]) <= _gonBalances[owner_]", + "ori(_gonBalances[owner_]) < _gonBalances[owner_]", + "ori(_gonBalances[owner_]) != _gonBalances[owner_]" + ], + "after_preds": [ + "ori(_gonBalances[owner_]) <= _gonBalances[owner_]", + "ori(_gonBalances[owner_]) < _gonBalances[owner_]", + "ori(_gonBalances[owner_]) != _gonBalances[owner_]" + ] + }, + { + "before_preds": [ + "ori(initializing) == false" + ], + "after_preds": [ + "ori(initializing) == false" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == false" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(rebasePausedDeprecated) == false" + ], + "after_preds": [ + "ori(rebasePausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [0,60000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [0,60000000000000]" + ] + }, + { + "before_preds": [ + "ori(monetaryPolicy) == 0" + ], + "after_preds": [ + "ori(monetaryPolicy) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) one of [0,115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) one of [0,115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) one of [0,1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "ori(_gonsPerFragment) one of [0,1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "ori(_owner) == 0" + ], + "after_preds": [ + "ori(_owner) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) == 0" + ], + "after_preds": [ + "ori(_decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [0]" + ], + "after_preds": [ + "ori(_decimals) one of [0]" + ] + }, + { + "before_preds": [ + "ori(initializing) == ori(tokenPausedDeprecated)" + ], + "after_preds": [ + "ori(initializing) == ori(tokenPausedDeprecated)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) <= ori(_gonsPerFragment)" + ], + "after_preds": [ + "ori(_totalSupply) <= ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "initializing == false" + ], + "after_preds": [ + "initializing == false" + ] + }, + { + "before_preds": [ + "_totalSupply one of [60000000000000]" + ], + "after_preds": [ + "_totalSupply one of [60000000000000]" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == false" + ], + "after_preds": [ + "rebasePausedDeprecated == false" + ] + }, + { + "before_preds": [ + "monetaryPolicy == 0" + ], + "after_preds": [ + "monetaryPolicy == 0" + ] + }, + { + "before_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated == false" + ], + "after_preds": [ + "tokenPausedDeprecated == false" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_decimals == 0" + ], + "after_preds": [ + "_decimals == 0" + ] + }, + { + "before_preds": [ + "_decimals one of [0]" + ], + "after_preds": [ + "_decimals one of [0]" + ] + }, + { + "before_preds": [ + "initialized == true" + ], + "after_preds": [ + "initialized == true" + ] + }, + { + "before_preds": [ + "_owner == 0" + ], + "after_preds": [ + "_owner == 0" + ] + }, + { + "before_preds": [ + "ori(initializing) == initializing" + ], + "after_preds": [ + "ori(initializing) == initializing" + ] + }, + { + "before_preds": [ + "ori(initializing) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(initializing) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(initializing) != initialized" + ], + "after_preds": [ + "ori(initializing) != initialized" + ] + }, + { + "before_preds": [ + "initializing == ori(tokenPausedDeprecated)" + ], + "after_preds": [ + "initializing == ori(tokenPausedDeprecated)" + ] + }, + { + "before_preds": [ + "initializing == tokenPausedDeprecated" + ], + "after_preds": [ + "initializing == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "initializing != initialized" + ], + "after_preds": [ + "initializing != initialized" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply >= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply != ori(_gonsPerFragment)" + ], + "after_preds": [ + "_totalSupply != ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ], + "after_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ] + }, + { + "before_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ], + "after_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) != initialized" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) != initialized" + ] + }, + { + "before_preds": [ + "_gonsPerFragment >= ori(_gonsPerFragment)" + ], + "after_preds": [ + "_gonsPerFragment >= ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated != initialized" + ], + "after_preds": [ + "tokenPausedDeprecated != initialized" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))" + ], + "after_preds": [ + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json new file mode 100644 index 0000000..6c352ec --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json @@ -0,0 +1,1490 @@ +[ + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]" + ], + "after_preds": [ + "ori(_totalSupply) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) == 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [0]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "_amount > 0" + ], + "after_preds": [ + "_amount > 0" + ] + }, + { + "before_preds": [ + "_amount one of [500000000000000000000,13105133700000000000000,100000000000000000000,103970700000000000000]" + ], + "after_preds": [ + "_amount one of [500000000000000000000,13105133700000000000000,100000000000000000000,103970700000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]" + ], + "after_preds": [ + "_totalSupply one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0" + ], + "after_preds": [ + "_balances[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [13082359060001746878663,103789481789261074604,100000000000000000000,499130119572851959406]" + ], + "after_preds": [ + "_balances[msg.sender] one of [13082359060001746878663,103789481789261074604,100000000000000000000,499130119572851959406]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [142345985557645870700604]" + ], + "after_preds": [ + "elem of _balances[...] is one of [142345985557645870700604]" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [0,90000000000000000000]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [0,90000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0" + ], + "after_preds": [ + "_balances[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [134406668607338084218100]" + ], + "after_preds": [ + "elem of _balances[...] is one of [134406668607338084218100]" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,193288114234845046898,15113130871002806453838,100000000000000000000,7682645945411942583280,9999286966540985221802,58078098074825682085113]" + ], + "after_preds": [ + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,193288114234845046898,15113130871002806453838,100000000000000000000,7682645945411942583280,9999286966540985221802,58078098074825682085113]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "_governance != 0" + ], + "after_preds": [ + "_governance != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [142449775039435131775208]" + ], + "after_preds": [ + "ori(_totalSupply) one of [142449775039435131775208]" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [142449775039435131775208]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [142449775039435131775208]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "_governance != ori(governance)" + ], + "after_preds": [ + "_governance != ori(governance)" + ] + }, + { + "before_preds": [ + "_governance != msg.sender" + ], + "after_preds": [ + "_governance != msg.sender" + ] + }, + { + "before_preds": [ + "ori(governance) == msg.sender" + ], + "after_preds": [ + "ori(governance) == msg.sender" + ] + }, + { + "before_preds": [ + "_totalSupply one of [142449775039435131775208]" + ], + "after_preds": [ + "_totalSupply one of [142449775039435131775208]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [142449775039435131775208]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [142449775039435131775208]" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [142449775039435131775208]" + ], + "after_preds": [ + "elem of _balances[...] is one of [142449775039435131775208]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,0,193288114234845046898,499130119572851959406,15113130871002806453838,2887782269888984921831,28891975855582153400605,13082359060001746878663,7682645945411942583280,194232561057094695264,103789481789261074604,9999286966540985221802,58078098074825682085113]" + ], + "after_preds": [ + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,0,193288114234845046898,499130119572851959406,15113130871002806453838,2887782269888984921831,28891975855582153400605,13082359060001746878663,7682645945411942583280,194232561057094695264,103789481789261074604,9999286966540985221802,58078098074825682085113]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "_governance == governance" + ], + "after_preds": [ + "_governance == governance" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "governance != ori(governance)" + ], + "after_preds": [ + "governance != ori(governance)" + ] + }, + { + "before_preds": [ + "governance != msg.sender" + ], + "after_preds": [ + "governance != msg.sender" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "_shares one of [10000000000000000000]" + ], + "after_preds": [ + "_shares one of [10000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [90000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [90000000000000000000]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [90000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [90000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [90000000000000000000]" + ], + "after_preds": [ + "_balances[msg.sender] one of [90000000000000000000]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [90000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [90000000000000000000]" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [128942301002958992697573,134406668607338084218100]" + ], + "after_preds": [ + "ori(_totalSupply) one of [128942301002958992697573,134406668607338084218100]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [5464367604379091520527,29264013041526968930907]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [5464367604379091520527,29264013041526968930907]" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [128942301002958992697573,134406668607338084218100]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [128942301002958992697573,134406668607338084218100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [128942301002958992697573,99678287961432023766666]" + ], + "after_preds": [ + "_totalSupply one of [128942301002958992697573,99678287961432023766666]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [128942301002958992697573,99678287961432023766666]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [128942301002958992697573,99678287961432023766666]" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] == 0" + ], + "after_preds": [ + "_balances[msg.sender] == 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [0]" + ], + "after_preds": [ + "_balances[msg.sender] one of [0]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [128942301002958992697573]" + ], + "after_preds": [ + "elem of _balances[...] is one of [128942301002958992697573]" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [141846855438073018741198]" + ], + "after_preds": [ + "elem of _balances[...] is one of [141846855438073018741198]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-kept.json new file mode 100644 index 0000000..c0d33c8 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-kept.json @@ -0,0 +1,450 @@ +[ + { + "before_preds": [ + "ori(_bridges[ori(weth)]) == 0" + ], + "after_preds": [ + "ori(_bridges[ori(weth)]) == 0" + ] + }, + { + "before_preds": [ + "token0 != 0" + ], + "after_preds": [ + "token0 != 0" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "token1 != 0" + ], + "after_preds": [ + "token1 != 0" + ] + }, + { + "before_preds": [ + "ori(_bridges[weth]) == 0" + ], + "after_preds": [ + "ori(_bridges[weth]) == 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(pendingOwner) == 0" + ], + "after_preds": [ + "ori(pendingOwner) == 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_bridges[ori(weth)]) == ori(_bridges[weth])" + ], + "after_preds": [ + "ori(_bridges[ori(weth)]) == ori(_bridges[weth])" + ] + }, + { + "before_preds": [ + "token0 != token1" + ], + "after_preds": [ + "token0 != token1" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "_bridges[ori(weth)] == 0" + ], + "after_preds": [ + "_bridges[ori(weth)] == 0" + ] + }, + { + "before_preds": [ + "_bridges[weth] == 0" + ], + "after_preds": [ + "_bridges[weth] == 0" + ] + }, + { + "before_preds": [ + "pendingOwner == 0" + ], + "after_preds": [ + "pendingOwner == 0" + ] + }, + { + "before_preds": [ + "owner == ori(owner)" + ], + "after_preds": [ + "owner == ori(owner)" + ] + }, + { + "before_preds": [ + "_bridges[ori(weth)] == ori(_bridges[ori(weth)])" + ], + "after_preds": [ + "_bridges[ori(weth)] == ori(_bridges[ori(weth)])" + ] + }, + { + "before_preds": [ + "_bridges[ori(weth)] == _bridges[weth]" + ], + "after_preds": [ + "_bridges[ori(weth)] == _bridges[weth]" + ] + }, + { + "before_preds": [ + "_bridges[ori(weth)] == ori(_bridges[weth])" + ], + "after_preds": [ + "_bridges[ori(weth)] == ori(_bridges[weth])" + ] + }, + { + "before_preds": [ + "ori(_bridges[ori(weth)]) == _bridges[weth]" + ], + "after_preds": [ + "ori(_bridges[ori(weth)]) == _bridges[weth]" + ] + }, + { + "before_preds": [ + "_bridges[weth] == ori(_bridges[weth])" + ], + "after_preds": [ + "_bridges[weth] == ori(_bridges[weth])" + ] + }, + { + "before_preds": [ + "pendingOwner == ori(pendingOwner)" + ], + "after_preds": [ + "pendingOwner == ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "newOwner != 0" + ], + "after_preds": [ + "newOwner != 0" + ] + }, + { + "before_preds": [ + "renounce == false" + ], + "after_preds": [ + "renounce == false" + ] + }, + { + "before_preds": [ + "direct == true" + ], + "after_preds": [ + "direct == true" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(pendingOwner) == 0" + ], + "after_preds": [ + "ori(pendingOwner) == 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "newOwner != ori(owner)" + ], + "after_preds": [ + "newOwner != ori(owner)" + ] + }, + { + "before_preds": [ + "newOwner != ori(pendingOwner)" + ], + "after_preds": [ + "newOwner != ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "newOwner != msg.sender" + ], + "after_preds": [ + "newOwner != msg.sender" + ] + }, + { + "before_preds": [ + "ori(owner) != ori(pendingOwner)" + ], + "after_preds": [ + "ori(owner) != ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "ori(owner) == msg.sender" + ], + "after_preds": [ + "ori(owner) == msg.sender" + ] + }, + { + "before_preds": [ + "ori(pendingOwner) != msg.sender" + ], + "after_preds": [ + "ori(pendingOwner) != msg.sender" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "pendingOwner == 0" + ], + "after_preds": [ + "pendingOwner == 0" + ] + }, + { + "before_preds": [ + "newOwner == owner" + ], + "after_preds": [ + "newOwner == owner" + ] + }, + { + "before_preds": [ + "newOwner != pendingOwner" + ], + "after_preds": [ + "newOwner != pendingOwner" + ] + }, + { + "before_preds": [ + "owner != ori(owner)" + ], + "after_preds": [ + "owner != ori(owner)" + ] + }, + { + "before_preds": [ + "owner != pendingOwner" + ], + "after_preds": [ + "owner != pendingOwner" + ] + }, + { + "before_preds": [ + "owner != ori(pendingOwner)" + ], + "after_preds": [ + "owner != ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "owner != msg.sender" + ], + "after_preds": [ + "owner != msg.sender" + ] + }, + { + "before_preds": [ + "ori(owner) != pendingOwner" + ], + "after_preds": [ + "ori(owner) != pendingOwner" + ] + }, + { + "before_preds": [ + "pendingOwner == ori(pendingOwner)" + ], + "after_preds": [ + "pendingOwner == ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "pendingOwner != msg.sender" + ], + "after_preds": [ + "pendingOwner != msg.sender" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "ori(pendingOwner) == 0" + ], + "after_preds": [ + "ori(pendingOwner) == 0" + ] + }, + { + "before_preds": [ + "ori(owner) != ori(pendingOwner)" + ], + "after_preds": [ + "ori(owner) != ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "pendingOwner == 0" + ], + "after_preds": [ + "pendingOwner == 0" + ] + }, + { + "before_preds": [ + "owner != pendingOwner" + ], + "after_preds": [ + "owner != pendingOwner" + ] + }, + { + "before_preds": [ + "owner != ori(pendingOwner)" + ], + "after_preds": [ + "owner != ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "ori(owner) != pendingOwner" + ], + "after_preds": [ + "ori(owner) != pendingOwner" + ] + }, + { + "before_preds": [ + "pendingOwner == ori(pendingOwner)" + ], + "after_preds": [ + "pendingOwner == ori(pendingOwner)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json new file mode 100644 index 0000000..3afb914 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json @@ -0,0 +1,62 @@ +[ + { + "before_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ], + "after_preds": [ + "ori(Q112) == Q112" + ] + }, + { + "before_preds": [ + "e10 == ori(e10)", + "e10 >= ori(e10)", + "e10 <= ori(e10)" + ], + "after_preds": [ + "e10 == ori(e10)" + ] + }, + { + "before_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "after_preds": [ + "ori(length) == length" + ] + }, + { + "before_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ], + "after_preds": [ + "ori(Q112) == Q112" + ] + }, + { + "before_preds": [ + "e10 == ori(e10)", + "e10 >= ori(e10)", + "e10 <= ori(e10)" + ], + "after_preds": [ + "e10 == ori(e10)" + ] + }, + { + "before_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "after_preds": [ + "ori(length) == length" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json new file mode 100644 index 0000000..a5309e0 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json @@ -0,0 +1,3435 @@ +[ + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "amount > 0", + "amount == 79228162514000000000000000000" + ], + "after_preds": [ + "amount == 79228162514000000000000000000" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 == 3" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals == 6" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= ori(earnLowerlimit)", + "ori(Sum(_balances[...])) < ori(earnLowerlimit)", + "ori(Sum(_balances[...])) != ori(earnLowerlimit)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) < ori(earnLowerlimit)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) >= ori(_balances[msg.sender])", + "ori(earnLowerlimit) > ori(_balances[msg.sender])", + "ori(earnLowerlimit) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(earnLowerlimit) > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) >= ori(_totalSupply)", + "ori(earnLowerlimit) > ori(_totalSupply)", + "ori(earnLowerlimit) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(earnLowerlimit) > ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 == 3" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals == 6" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[msg.sender])", + "Sum(_balances[...]) > ori(_balances[msg.sender])", + "Sum(_balances[...]) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) > ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= _totalSupply", + "ori(Sum(_balances[...])) < _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) < _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= earnLowerlimit", + "ori(Sum(_balances[...])) < earnLowerlimit", + "ori(Sum(_balances[...])) != earnLowerlimit" + ], + "after_preds": [ + "ori(Sum(_balances[...])) < earnLowerlimit" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) <= Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) < userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) != userDepoistTime[msg.sender]" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) < userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "fee3 == ori(fee3)", + "fee3 >= ori(fee3)", + "fee3 <= ori(fee3)" + ], + "after_preds": [ + "fee3 == ori(fee3)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= ori(_balances[msg.sender])", + "_balances[msg.sender] > ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply > ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= earnLowerlimit", + "ori(_balances[msg.sender]) < earnLowerlimit", + "ori(_balances[msg.sender]) != earnLowerlimit" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < earnLowerlimit" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) > ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) != ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "earnLowerlimit >= ori(_totalSupply)", + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)" + ], + "after_preds": [ + "earnLowerlimit > ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 == 3" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals == 6" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ], + "after_preds": [ + "ori(fee1) == 5" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) <= _earnLowerlimit", + "ori(earnLowerlimit) < _earnLowerlimit", + "ori(earnLowerlimit) != _earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) < _earnLowerlimit" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee1 > 0", + "fee1 == 5" + ], + "after_preds": [ + "fee1 == 5" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals == 6" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(earnLowerlimit) < earnLowerlimit", + "ori(earnLowerlimit) != earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) < earnLowerlimit" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_earnLowerlimit == earnLowerlimit", + "_earnLowerlimit >= earnLowerlimit", + "_earnLowerlimit <= earnLowerlimit" + ], + "after_preds": [ + "_earnLowerlimit == earnLowerlimit" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1310289998969" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == 1310289998969" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ], + "after_preds": [ + "ori(fee1) == 5" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 41922035526" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) == 41922035526" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1310289998969" + ], + "after_preds": [ + "ori(_totalSupply) == 1310289998969" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee2)", + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee2)" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee3)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee3)" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee1)", + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee1)" + ] + }, + { + "before_preds": [ + "ori(fee2) >= ori(fee3)", + "ori(fee2) > ori(fee3)", + "ori(fee2) != ori(fee3)" + ], + "after_preds": [ + "ori(fee2) > ori(fee3)" + ] + }, + { + "before_preds": [ + "ori(fee2) <= ori(fee1)", + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)" + ], + "after_preds": [ + "ori(fee2) < ori(fee1)" + ] + }, + { + "before_preds": [ + "ori(fee3) <= ori(fee1)", + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" + ], + "after_preds": [ + "ori(fee3) < ori(fee1)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1310289998969" + ], + "after_preds": [ + "Sum(_balances[...]) == 1310289998969" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 == 1" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1310289998969" + ], + "after_preds": [ + "_totalSupply == 1310289998969" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 41922035526" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == 41922035526" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee1 > 0", + "fee1 == 10" + ], + "after_preds": [ + "fee1 == 10" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals == 6" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee3", + "ori(feeMax) > fee3", + "ori(feeMax) != fee3" + ], + "after_preds": [ + "ori(feeMax) > fee3" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee2", + "ori(feeMax) > fee2", + "ori(feeMax) != fee2" + ], + "after_preds": [ + "ori(feeMax) > fee2" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee1", + "ori(feeMax) > fee1", + "ori(feeMax) != fee1" + ], + "after_preds": [ + "ori(feeMax) > fee1" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) >= fee3", + "ori(fee2) > fee3", + "ori(fee2) != fee3" + ], + "after_preds": [ + "ori(fee2) > fee3" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2" + ] + }, + { + "before_preds": [ + "ori(fee2) <= fee1", + "ori(fee2) < fee1", + "ori(fee2) != fee1" + ], + "after_preds": [ + "ori(fee2) < fee1" + ] + }, + { + "before_preds": [ + "ori(fee2) <= feeMax", + "ori(fee2) < feeMax", + "ori(fee2) != feeMax" + ], + "after_preds": [ + "ori(fee2) < feeMax" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3" + ] + }, + { + "before_preds": [ + "ori(fee3) <= fee2", + "ori(fee3) < fee2", + "ori(fee3) != fee2" + ], + "after_preds": [ + "ori(fee3) < fee2" + ] + }, + { + "before_preds": [ + "ori(fee3) <= fee1", + "ori(fee3) < fee1", + "ori(fee3) != fee1" + ], + "after_preds": [ + "ori(fee3) < fee1" + ] + }, + { + "before_preds": [ + "ori(fee3) <= feeMax", + "ori(fee3) < feeMax", + "ori(fee3) != feeMax" + ], + "after_preds": [ + "ori(fee3) < feeMax" + ] + }, + { + "before_preds": [ + "fee3 <= fee2", + "fee3 < fee2", + "fee3 != fee2" + ], + "after_preds": [ + "fee3 < fee2" + ] + }, + { + "before_preds": [ + "fee3 <= fee1", + "fee3 < fee1", + "fee3 != fee1" + ], + "after_preds": [ + "fee3 < fee1" + ] + }, + { + "before_preds": [ + "fee3 <= feeMax", + "fee3 < feeMax", + "fee3 != feeMax" + ], + "after_preds": [ + "fee3 < feeMax" + ] + }, + { + "before_preds": [ + "fee3 <= ori(fee1)", + "fee3 < ori(fee1)", + "fee3 != ori(fee1)" + ], + "after_preds": [ + "fee3 < ori(fee1)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee2 <= fee1", + "fee2 < fee1", + "fee2 != fee1" + ], + "after_preds": [ + "fee2 < fee1" + ] + }, + { + "before_preds": [ + "fee2 <= feeMax", + "fee2 < feeMax", + "fee2 != feeMax" + ], + "after_preds": [ + "fee2 < feeMax" + ] + }, + { + "before_preds": [ + "fee2 <= ori(fee1)", + "fee2 < ori(fee1)", + "fee2 != ori(fee1)" + ], + "after_preds": [ + "fee2 < ori(fee1)" + ] + }, + { + "before_preds": [ + "fee1 <= feeMax", + "fee1 < feeMax", + "fee1 != feeMax" + ], + "after_preds": [ + "fee1 < feeMax" + ] + }, + { + "before_preds": [ + "fee1 >= ori(fee1)", + "fee1 > ori(fee1)", + "fee1 != ori(fee1)" + ], + "after_preds": [ + "fee1 > ori(fee1)" + ] + }, + { + "before_preds": [ + "feeMax >= ori(fee1)", + "feeMax > ori(fee1)", + "feeMax != ori(fee1)" + ], + "after_preds": [ + "feeMax > ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 851093071954" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == 851093071954" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ], + "after_preds": [ + "ori(fee1) == 5" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 32247272285" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) == 32247272285" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 851093071954" + ], + "after_preds": [ + "ori(_totalSupply) == 851093071954" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 851093071954" + ], + "after_preds": [ + "Sum(_balances[...]) == 851093071954" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 == 1" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 851093071954" + ], + "after_preds": [ + "_totalSupply == 851093071954" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 32247272285" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == 32247272285" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee1 > 0", + "fee1 == 5" + ], + "after_preds": [ + "fee1 == 5" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals == 6" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 == 3" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals == 6" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]" + ], + "after_preds": [ + "Sum(_balances[...]) > _balances[recipient]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > _balances[recipient]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] > ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "amount <= ori(Sum(_allowances[sender][...]))", + "amount < ori(Sum(_allowances[sender][...]))", + "amount != ori(Sum(_allowances[sender][...]))" + ], + "after_preds": [ + "amount < ori(Sum(_allowances[sender][...]))" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[sender])", + "ori(Sum(_balances[...])) > ori(_balances[sender])", + "ori(Sum(_balances[...])) != ori(_balances[sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > ori(_balances[sender])" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 == 3" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals == 6" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[sender]", + "Sum(_balances[...]) > _balances[sender]", + "Sum(_balances[...]) != _balances[sender]" + ], + "after_preds": [ + "Sum(_balances[...]) > _balances[sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]" + ], + "after_preds": [ + "Sum(_balances[...]) > _balances[recipient]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[sender])", + "Sum(_balances[...]) > ori(_balances[sender])", + "Sum(_balances[...]) != ori(_balances[sender])" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(_balances[sender])" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax" + ] + }, + { + "before_preds": [ + "_balances[sender] <= ori(Sum(_balances[...]))", + "_balances[sender] < ori(Sum(_balances[...]))", + "_balances[sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[sender] < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[sender] <= _balances[recipient]", + "_balances[sender] < _balances[recipient]", + "_balances[sender] != _balances[recipient]" + ], + "after_preds": [ + "_balances[sender] < _balances[recipient]" + ] + }, + { + "before_preds": [ + "_balances[sender] <= ori(_balances[sender])", + "_balances[sender] < ori(_balances[sender])", + "_balances[sender] != ori(_balances[sender])" + ], + "after_preds": [ + "_balances[sender] < ori(_balances[sender])" + ] + }, + { + "before_preds": [ + "amount <= Sum(_allowances[sender][...])", + "amount < Sum(_allowances[sender][...])", + "amount != Sum(_allowances[sender][...])" + ], + "after_preds": [ + "amount < Sum(_allowances[sender][...])" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2" + ] + }, + { + "before_preds": [ + "Sum(_allowances[sender][...]) <= ori(Sum(_allowances[sender][...]))", + "Sum(_allowances[sender][...]) < ori(Sum(_allowances[sender][...]))", + "Sum(_allowances[sender][...]) != ori(Sum(_allowances[sender][...]))" + ], + "after_preds": [ + "Sum(_allowances[sender][...]) < ori(Sum(_allowances[sender][...]))" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > _balances[recipient]" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] > ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) > ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))", + "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))", + "ori(userDepoistTime[msg.sender]) != ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) < ori(_totalSupply)", + "ori(_balances[msg.sender]) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 == 3" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals == 6" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) != _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[msg.sender])", + "Sum(_balances[...]) > ori(_balances[msg.sender])", + "Sum(_balances[...]) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) < ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) > _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > _totalSupply" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) <= Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) >= userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "fee3 == ori(fee3)", + "fee3 >= ori(fee3)", + "fee3 <= ori(fee3)" + ], + "after_preds": [ + "fee3 == ori(fee3)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= _totalSupply", + "_balances[msg.sender] < _totalSupply", + "_balances[msg.sender] != _totalSupply" + ], + "after_preds": [ + "_balances[msg.sender] < _totalSupply" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] < ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_totalSupply)", + "_balances[msg.sender] < ori(_totalSupply)", + "_balances[msg.sender] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[msg.sender] < ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply < ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) >= userDepoistTime[msg.sender]", + "Sum(userDepoistTime[...]) > userDepoistTime[msg.sender]", + "Sum(userDepoistTime[...]) != userDepoistTime[msg.sender]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) >= userDepoistTime[msg.sender]", + "ori(Sum(userDepoistTime[...])) > userDepoistTime[msg.sender]", + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee2)", + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee2)" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee3)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee3)" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee1)", + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee1)" + ] + }, + { + "before_preds": [ + "ori(fee2) >= ori(fee3)", + "ori(fee2) > ori(fee3)", + "ori(fee2) != ori(fee3)" + ], + "after_preds": [ + "ori(fee2) > ori(fee3)" + ] + }, + { + "before_preds": [ + "ori(fee2) <= ori(fee1)", + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)" + ], + "after_preds": [ + "ori(fee2) < ori(fee1)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(fee3) <= ori(fee1)", + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" + ], + "after_preds": [ + "ori(fee3) < ori(fee1)" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 == 3" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals == 6" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee3", + "ori(feeMax) > fee3", + "ori(feeMax) != fee3" + ], + "after_preds": [ + "ori(feeMax) > fee3" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee2", + "ori(feeMax) > fee2", + "ori(feeMax) != fee2" + ], + "after_preds": [ + "ori(feeMax) > fee2" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee1", + "ori(feeMax) > fee1", + "ori(feeMax) != fee1" + ], + "after_preds": [ + "ori(feeMax) > fee1" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) >= fee3", + "ori(fee2) > fee3", + "ori(fee2) != fee3" + ], + "after_preds": [ + "ori(fee2) > fee3" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2" + ] + }, + { + "before_preds": [ + "ori(fee2) <= fee1", + "ori(fee2) < fee1", + "ori(fee2) != fee1" + ], + "after_preds": [ + "ori(fee2) < fee1" + ] + }, + { + "before_preds": [ + "ori(fee2) <= feeMax", + "ori(fee2) < feeMax", + "ori(fee2) != feeMax" + ], + "after_preds": [ + "ori(fee2) < feeMax" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= earnLowerlimit", + "ori(Sum(_balances[...])) < earnLowerlimit", + "ori(Sum(_balances[...])) != earnLowerlimit" + ], + "after_preds": [ + "ori(Sum(_balances[...])) < earnLowerlimit" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3" + ] + }, + { + "before_preds": [ + "ori(fee3) <= fee2", + "ori(fee3) < fee2", + "ori(fee3) != fee2" + ], + "after_preds": [ + "ori(fee3) < fee2" + ] + }, + { + "before_preds": [ + "ori(fee3) <= fee1", + "ori(fee3) < fee1", + "ori(fee3) != fee1" + ], + "after_preds": [ + "ori(fee3) < fee1" + ] + }, + { + "before_preds": [ + "ori(fee3) <= feeMax", + "ori(fee3) < feeMax", + "ori(fee3) != feeMax" + ], + "after_preds": [ + "ori(fee3) < feeMax" + ] + }, + { + "before_preds": [ + "fee3 <= fee2", + "fee3 < fee2", + "fee3 != fee2" + ], + "after_preds": [ + "fee3 < fee2" + ] + }, + { + "before_preds": [ + "fee3 <= fee1", + "fee3 < fee1", + "fee3 != fee1" + ], + "after_preds": [ + "fee3 < fee1" + ] + }, + { + "before_preds": [ + "fee3 <= feeMax", + "fee3 < feeMax", + "fee3 != feeMax" + ], + "after_preds": [ + "fee3 < feeMax" + ] + }, + { + "before_preds": [ + "fee3 <= ori(fee1)", + "fee3 < ori(fee1)", + "fee3 != ori(fee1)" + ], + "after_preds": [ + "fee3 < ori(fee1)" + ] + }, + { + "before_preds": [ + "fee2 <= fee1", + "fee2 < fee1", + "fee2 != fee1" + ], + "after_preds": [ + "fee2 < fee1" + ] + }, + { + "before_preds": [ + "fee2 <= feeMax", + "fee2 < feeMax", + "fee2 != feeMax" + ], + "after_preds": [ + "fee2 < feeMax" + ] + }, + { + "before_preds": [ + "fee2 <= ori(fee1)", + "fee2 < ori(fee1)", + "fee2 != ori(fee1)" + ], + "after_preds": [ + "fee2 < ori(fee1)" + ] + }, + { + "before_preds": [ + "fee1 <= feeMax", + "fee1 < feeMax", + "fee1 != feeMax" + ], + "after_preds": [ + "fee1 < feeMax" + ] + }, + { + "before_preds": [ + "earnLowerlimit >= ori(_totalSupply)", + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)" + ], + "after_preds": [ + "earnLowerlimit > ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "feeMax >= ori(fee1)", + "feeMax > ori(fee1)", + "feeMax != ori(fee1)" + ], + "after_preds": [ + "feeMax > ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json new file mode 100644 index 0000000..37f22e4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json @@ -0,0 +1,1496 @@ +[ + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) <= _totalSupply", + "ori(_totalSupply) < _totalSupply", + "ori(_totalSupply) != _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) < _totalSupply" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= _totalSupply", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" + ], + "after_preds": [ + "ori(reservePool) < _totalSupply" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= Sum(_balances[...])", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(reservePool) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "glbDebtShare == ori(glbDebtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "glbDebtShare <= ori(glbDebtShare)" + ], + "after_preds": [ + "glbDebtShare == ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "_totalSupply >= reservePool", + "_totalSupply > reservePool", + "_totalSupply != reservePool" + ], + "after_preds": [ + "_totalSupply > reservePool" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply > ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply >= _guardCounter", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" + ], + "after_preds": [ + "_totalSupply > _guardCounter" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_guardCounter)", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" + ], + "after_preds": [ + "_totalSupply > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= Sum(_balances[...])", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" + ], + "after_preds": [ + "reservePool < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= _balances[msg.sender]", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) < Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= _guardCounter", + "_balances[msg.sender] > _guardCounter", + "_balances[msg.sender] != _guardCounter" + ], + "after_preds": [ + "_balances[msg.sender] > _guardCounter" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= ori(_guardCounter)", + "_balances[msg.sender] > ori(_guardCounter)", + "_balances[msg.sender] != ori(_guardCounter)" + ], + "after_preds": [ + "_balances[msg.sender] > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _guardCounter", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) != _guardCounter" + ], + "after_preds": [ + "Sum(_balances[...]) > _guardCounter" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_guardCounter)", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != ori(_guardCounter)" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "nextPositionID == ori(nextPositionID)", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(nextPositionID)" + ], + "after_preds": [ + "nextPositionID == ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(_guardCounter)", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)" + ], + "after_preds": [ + "_guardCounter > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) > 0", + "ori(glbDebtVal) == 14854681992016139228071" + ], + "after_preds": [ + "ori(glbDebtVal) == 14854681992016139228071" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 20424063187886226982599" + ], + "after_preds": [ + "ori(_totalSupply) == 20424063187886226982599" + ] + }, + { + "before_preds": [ + "ori(reservePool) > 0", + "ori(reservePool) == 148922433659474232" + ], + "after_preds": [ + "ori(reservePool) == 148922433659474232" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) > 0", + "ori(lastAccrueTime) == 1602231144" + ], + "after_preds": [ + "ori(lastAccrueTime) == 1602231144" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 20424063187886226982599" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == 20424063187886226982599" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) > 0", + "ori(nextPositionID) == 198" + ], + "after_preds": [ + "ori(nextPositionID) == 198" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) > 0", + "ori(_guardCounter) == 376" + ], + "after_preds": [ + "ori(_guardCounter) == 376" + ] + }, + { + "before_preds": [ + "ori(glbDebtShare) > 0", + "ori(glbDebtShare) == 14846441340661167278357" + ], + "after_preds": [ + "ori(glbDebtShare) == 14846441340661167278357" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals == 18" + ] + }, + { + "before_preds": [ + "lastAccrueTime > 0", + "lastAccrueTime == 1602231144" + ], + "after_preds": [ + "lastAccrueTime == 1602231144" + ] + }, + { + "before_preds": [ + "glbDebtShare > 0", + "glbDebtShare == 14846441340661167278357" + ], + "after_preds": [ + "glbDebtShare == 14846441340661167278357" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 20424063187886226982599" + ], + "after_preds": [ + "_totalSupply == 20424063187886226982599" + ] + }, + { + "before_preds": [ + "reservePool > 0", + "reservePool == 148922433659474232" + ], + "after_preds": [ + "reservePool == 148922433659474232" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 20424063187886226982599" + ], + "after_preds": [ + "Sum(_balances[...]) == 20424063187886226982599" + ] + }, + { + "before_preds": [ + "nextPositionID > 0", + "nextPositionID == 198" + ], + "after_preds": [ + "nextPositionID == 198" + ] + }, + { + "before_preds": [ + "_guardCounter > 0", + "_guardCounter == 376" + ], + "after_preds": [ + "_guardCounter == 376" + ] + }, + { + "before_preds": [ + "glbDebtVal > 0", + "glbDebtVal == 14854681992016139228071" + ], + "after_preds": [ + "glbDebtVal == 14854681992016139228071" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) == glbDebtVal", + "ori(glbDebtVal) >= glbDebtVal", + "ori(glbDebtVal) <= glbDebtVal" + ], + "after_preds": [ + "ori(glbDebtVal) == glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply" + ] + }, + { + "before_preds": [ + "ori(reservePool) == reservePool", + "ori(reservePool) >= reservePool", + "ori(reservePool) <= reservePool" + ], + "after_preds": [ + "ori(reservePool) == reservePool" + ] + }, + { + "before_preds": [ + "lastAccrueTime == ori(lastAccrueTime)", + "lastAccrueTime >= ori(lastAccrueTime)", + "lastAccrueTime <= ori(lastAccrueTime)" + ], + "after_preds": [ + "lastAccrueTime == ori(lastAccrueTime)" + ] + }, + { + "before_preds": [ + "glbDebtShare == ori(glbDebtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "glbDebtShare <= ori(glbDebtShare)" + ], + "after_preds": [ + "glbDebtShare == ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "nextPositionID == ori(nextPositionID)", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(nextPositionID)" + ], + "after_preds": [ + "nextPositionID == ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "_guardCounter == ori(_guardCounter)", + "_guardCounter >= ori(_guardCounter)", + "_guardCounter <= ori(_guardCounter)" + ], + "after_preds": [ + "_guardCounter == ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) > ori(reservePool)", + "ori(glbDebtVal) != ori(reservePool)" + ], + "after_preds": [ + "ori(glbDebtVal) > ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(_balances[msg.sender])", + "ori(glbDebtVal) > ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(glbDebtVal) > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(_guardCounter)", + "ori(glbDebtVal) > ori(_guardCounter)", + "ori(glbDebtVal) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(glbDebtVal) > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(reservePool)", + "ori(_totalSupply) > ori(reservePool)", + "ori(_totalSupply) != ori(reservePool)" + ], + "after_preds": [ + "ori(_totalSupply) > ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_guardCounter)", + "ori(_totalSupply) > ori(_guardCounter)", + "ori(_totalSupply) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(_totalSupply) > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))", + "ori(reservePool) < ori(Sum(_balances[...]))", + "ori(reservePool) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(reservePool) < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(reservePool) >= ori(_guardCounter)", + "ori(reservePool) > ori(_guardCounter)", + "ori(reservePool) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(reservePool) > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= ori(_guardCounter)", + "ori(_balances[msg.sender]) > ori(_guardCounter)", + "ori(_balances[msg.sender]) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_guardCounter)", + "ori(Sum(_balances[...])) > ori(_guardCounter)", + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) > reservePool", + "ori(glbDebtVal) != reservePool" + ], + "after_preds": [ + "ori(glbDebtVal) > reservePool" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= _balances[msg.sender]", + "ori(glbDebtVal) > _balances[msg.sender]", + "ori(glbDebtVal) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(glbDebtVal) > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= _guardCounter", + "ori(glbDebtVal) > _guardCounter", + "ori(glbDebtVal) != _guardCounter" + ], + "after_preds": [ + "ori(glbDebtVal) > _guardCounter" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) <= glbDebtVal", + "ori(glbDebtVal) < glbDebtVal", + "ori(glbDebtVal) != glbDebtVal" + ], + "after_preds": [ + "ori(glbDebtVal) < glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) > _totalSupply", + "ori(_totalSupply) != _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) > _totalSupply" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= reservePool", + "ori(_totalSupply) > reservePool", + "ori(_totalSupply) != reservePool" + ], + "after_preds": [ + "ori(_totalSupply) > reservePool" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) > Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _guardCounter", + "ori(_totalSupply) > _guardCounter", + "ori(_totalSupply) != _guardCounter" + ], + "after_preds": [ + "ori(_totalSupply) > _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= _totalSupply", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" + ], + "after_preds": [ + "ori(reservePool) < _totalSupply" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= reservePool", + "ori(reservePool) < reservePool", + "ori(reservePool) != reservePool" + ], + "after_preds": [ + "ori(reservePool) < reservePool" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= Sum(_balances[...])", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(reservePool) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(reservePool) >= _guardCounter", + "ori(reservePool) > _guardCounter", + "ori(reservePool) != _guardCounter" + ], + "after_preds": [ + "ori(reservePool) > _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtVal", + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal" + ], + "after_preds": [ + "ori(reservePool) < glbDebtVal" + ] + }, + { + "before_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)" + ], + "after_preds": [ + "lastAccrueTime > ori(lastAccrueTime)" + ] + }, + { + "before_preds": [ + "glbDebtShare == ori(glbDebtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "glbDebtShare <= ori(glbDebtShare)" + ], + "after_preds": [ + "glbDebtShare == ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "_totalSupply >= reservePool", + "_totalSupply > reservePool", + "_totalSupply != reservePool" + ], + "after_preds": [ + "_totalSupply > reservePool" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply >= _guardCounter", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" + ], + "after_preds": [ + "_totalSupply > _guardCounter" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_guardCounter)", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" + ], + "after_preds": [ + "_totalSupply > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= ori(Sum(_balances[...]))", + "reservePool < ori(Sum(_balances[...]))", + "reservePool != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "reservePool < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "reservePool <= Sum(_balances[...])", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" + ], + "after_preds": [ + "reservePool < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "reservePool >= _guardCounter", + "reservePool > _guardCounter", + "reservePool != _guardCounter" + ], + "after_preds": [ + "reservePool > _guardCounter" + ] + }, + { + "before_preds": [ + "reservePool >= ori(_guardCounter)", + "reservePool > ori(_guardCounter)", + "reservePool != ori(_guardCounter)" + ], + "after_preds": [ + "reservePool > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= glbDebtVal", + "reservePool < glbDebtVal", + "reservePool != glbDebtVal" + ], + "after_preds": [ + "reservePool < glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _guardCounter", + "ori(_balances[msg.sender]) > _guardCounter", + "ori(_balances[msg.sender]) != _guardCounter" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _guardCounter" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= glbDebtVal", + "ori(_balances[msg.sender]) < glbDebtVal", + "ori(_balances[msg.sender]) != glbDebtVal" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) > Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _guardCounter", + "ori(Sum(_balances[...])) > _guardCounter", + "ori(Sum(_balances[...])) != _guardCounter" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > _guardCounter" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= glbDebtVal", + "_balances[msg.sender] < glbDebtVal", + "_balances[msg.sender] != glbDebtVal" + ], + "after_preds": [ + "_balances[msg.sender] < glbDebtVal" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _guardCounter", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) != _guardCounter" + ], + "after_preds": [ + "Sum(_balances[...]) > _guardCounter" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_guardCounter)", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != ori(_guardCounter)" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "nextPositionID == ori(nextPositionID)", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(nextPositionID)" + ], + "after_preds": [ + "nextPositionID == ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(_guardCounter)", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)" + ], + "after_preds": [ + "_guardCounter > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "_guardCounter <= glbDebtVal", + "_guardCounter < glbDebtVal", + "_guardCounter != glbDebtVal" + ], + "after_preds": [ + "_guardCounter < glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) <= glbDebtVal", + "ori(_guardCounter) < glbDebtVal", + "ori(_guardCounter) != glbDebtVal" + ], + "after_preds": [ + "ori(_guardCounter) < glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "id <= ori(nextPositionID)", + "id < ori(nextPositionID)", + "id != ori(nextPositionID)" + ], + "after_preds": [ + "id < ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "id <= ori(_guardCounter)", + "id < ori(_guardCounter)", + "id != ori(_guardCounter)" + ], + "after_preds": [ + "id < ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) <= ori(_guardCounter)", + "ori(nextPositionID) < ori(_guardCounter)", + "ori(nextPositionID) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(nextPositionID) < ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtShare", + "ori(reservePool) < glbDebtShare", + "ori(reservePool) != glbDebtShare" + ], + "after_preds": [ + "ori(reservePool) < glbDebtShare" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtVal", + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal" + ], + "after_preds": [ + "ori(reservePool) < glbDebtVal" + ] + }, + { + "before_preds": [ + "id <= glbDebtShare", + "id < glbDebtShare", + "id != glbDebtShare" + ], + "after_preds": [ + "id < glbDebtShare" + ] + }, + { + "before_preds": [ + "id <= nextPositionID", + "id < nextPositionID", + "id != nextPositionID" + ], + "after_preds": [ + "id < nextPositionID" + ] + }, + { + "before_preds": [ + "id <= _guardCounter", + "id < _guardCounter", + "id != _guardCounter" + ], + "after_preds": [ + "id < _guardCounter" + ] + }, + { + "before_preds": [ + "id <= glbDebtVal", + "id < glbDebtVal", + "id != glbDebtVal" + ], + "after_preds": [ + "id < glbDebtVal" + ] + }, + { + "before_preds": [ + "glbDebtShare >= reservePool", + "glbDebtShare > reservePool", + "glbDebtShare != reservePool" + ], + "after_preds": [ + "glbDebtShare > reservePool" + ] + }, + { + "before_preds": [ + "glbDebtShare >= nextPositionID", + "glbDebtShare > nextPositionID", + "glbDebtShare != nextPositionID" + ], + "after_preds": [ + "glbDebtShare > nextPositionID" + ] + }, + { + "before_preds": [ + "glbDebtShare >= _guardCounter", + "glbDebtShare > _guardCounter", + "glbDebtShare != _guardCounter" + ], + "after_preds": [ + "glbDebtShare > _guardCounter" + ] + }, + { + "before_preds": [ + "glbDebtShare >= ori(nextPositionID)", + "glbDebtShare > ori(nextPositionID)", + "glbDebtShare != ori(nextPositionID)" + ], + "after_preds": [ + "glbDebtShare > ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "glbDebtShare >= ori(_guardCounter)", + "glbDebtShare > ori(_guardCounter)", + "glbDebtShare != ori(_guardCounter)" + ], + "after_preds": [ + "glbDebtShare > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= glbDebtVal", + "reservePool < glbDebtVal", + "reservePool != glbDebtVal" + ], + "after_preds": [ + "reservePool < glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "nextPositionID <= _guardCounter", + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter" + ], + "after_preds": [ + "nextPositionID < _guardCounter" + ] + }, + { + "before_preds": [ + "nextPositionID <= glbDebtVal", + "nextPositionID < glbDebtVal", + "nextPositionID != glbDebtVal" + ], + "after_preds": [ + "nextPositionID < glbDebtVal" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(nextPositionID)", + "_guardCounter > ori(nextPositionID)", + "_guardCounter != ori(nextPositionID)" + ], + "after_preds": [ + "_guardCounter > ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(_guardCounter)", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)" + ], + "after_preds": [ + "_guardCounter > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "_guardCounter <= glbDebtVal", + "_guardCounter < glbDebtVal", + "_guardCounter != glbDebtVal" + ], + "after_preds": [ + "_guardCounter < glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) <= glbDebtVal", + "ori(nextPositionID) < glbDebtVal", + "ori(nextPositionID) != glbDebtVal" + ], + "after_preds": [ + "ori(nextPositionID) < glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) <= glbDebtVal", + "ori(_guardCounter) < glbDebtVal", + "ori(_guardCounter) != glbDebtVal" + ], + "after_preds": [ + "ori(_guardCounter) < glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= _totalSupply", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" + ], + "after_preds": [ + "ori(reservePool) < _totalSupply" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= Sum(_balances[...])", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(reservePool) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply >= reservePool", + "_totalSupply > reservePool", + "_totalSupply != reservePool" + ], + "after_preds": [ + "_totalSupply > reservePool" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply >= _guardCounter", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" + ], + "after_preds": [ + "_totalSupply > _guardCounter" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_guardCounter)", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" + ], + "after_preds": [ + "_totalSupply > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= Sum(_balances[...])", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" + ], + "after_preds": [ + "reservePool < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _guardCounter", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) != _guardCounter" + ], + "after_preds": [ + "Sum(_balances[...]) > _guardCounter" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_guardCounter)", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != ori(_guardCounter)" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "nextPositionID <= _guardCounter", + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter" + ], + "after_preds": [ + "nextPositionID < _guardCounter" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(nextPositionID)", + "_guardCounter > ori(nextPositionID)", + "_guardCounter != ori(nextPositionID)" + ], + "after_preds": [ + "_guardCounter > ori(nextPositionID)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json new file mode 100644 index 0000000..1f15e27 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json @@ -0,0 +1,394 @@ +[ + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split == 500" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split == 500" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split == 500" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split == 500" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split == 500" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split == 500" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split == 500" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json new file mode 100644 index 0000000..daca6e9 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json @@ -0,0 +1,132 @@ +[ + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)" + ], + "after_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)" + ] + }, + { + "before_preds": [ + "toChainID > 0", + "toChainID == 56" + ], + "after_preds": [ + "toChainID == 56" + ] + }, + { + "before_preds": [ + "amount > 0", + "amount == 390000000000" + ], + "after_preds": [ + "amount == 390000000000" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)" + ], + "after_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)" + ], + "after_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)" + ], + "after_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x818e6fecd516ecc3849daf6845e3ec868087b755-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x818e6fecd516ecc3849daf6845e3ec868087b755-removed.json new file mode 100644 index 0000000..e4f9747 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x818e6fecd516ecc3849daf6845e3ec868087b755-removed.json @@ -0,0 +1,69 @@ +[ + { + "before_preds": [ + "ori(Sum(decimals[...])) > 0", + "ori(Sum(decimals[...])) == 81" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == 81" + ] + }, + { + "before_preds": [ + "amount > 0", + "amount == 40963957051" + ], + "after_preds": [ + "amount == 40963957051" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) > 0", + "Sum(decimals[...]) == 81" + ], + "after_preds": [ + "Sum(decimals[...]) == 81" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json new file mode 100644 index 0000000..5f210ab --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json @@ -0,0 +1,414 @@ +[ + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000" + ], + "after_preds": [ + "ori(_totalSupply) == 60000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) == ori(_allowedFragments[msg.sender][spender])", + "ori(Sum(_allowedFragments[msg.sender][...])) >= ori(_allowedFragments[msg.sender][spender])", + "ori(Sum(_allowedFragments[msg.sender][...])) <= ori(_allowedFragments[msg.sender][spender])" + ], + "after_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) == ori(_allowedFragments[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) <= value", + "ori(Sum(_allowedFragments[msg.sender][...])) < value", + "ori(Sum(_allowedFragments[msg.sender][...])) != value" + ], + "after_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) < value" + ] + }, + { + "before_preds": [ + "ori(_allowedFragments[msg.sender][spender]) <= value", + "ori(_allowedFragments[msg.sender][spender]) < value", + "ori(_allowedFragments[msg.sender][spender]) != value" + ], + "after_preds": [ + "ori(_allowedFragments[msg.sender][spender]) < value" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply == 60000000000000" + ] + }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] >= ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] > ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] != ori(Sum(_allowedFragments[msg.sender][...]))" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] > ori(Sum(_allowedFragments[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] >= Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] <= Sum(_allowedFragments[msg.sender][...])" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] >= ori(_allowedFragments[msg.sender][spender])", + "_allowedFragments[msg.sender][spender] > ori(_allowedFragments[msg.sender][spender])", + "_allowedFragments[msg.sender][spender] != ori(_allowedFragments[msg.sender][spender])" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] > ori(_allowedFragments[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] == value", + "_allowedFragments[msg.sender][spender] >= value", + "_allowedFragments[msg.sender][spender] <= value" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] == value" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) <= Sum(_allowedFragments[msg.sender][...])", + "ori(Sum(_allowedFragments[msg.sender][...])) < Sum(_allowedFragments[msg.sender][...])", + "ori(Sum(_allowedFragments[msg.sender][...])) != Sum(_allowedFragments[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) < Sum(_allowedFragments[msg.sender][...])" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_allowedFragments[msg.sender][...]) >= ori(_allowedFragments[msg.sender][spender])", + "Sum(_allowedFragments[msg.sender][...]) > ori(_allowedFragments[msg.sender][spender])", + "Sum(_allowedFragments[msg.sender][...]) != ori(_allowedFragments[msg.sender][spender])" + ], + "after_preds": [ + "Sum(_allowedFragments[msg.sender][...]) > ori(_allowedFragments[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "Sum(_allowedFragments[msg.sender][...]) == value", + "Sum(_allowedFragments[msg.sender][...]) >= value", + "Sum(_allowedFragments[msg.sender][...]) <= value" + ], + "after_preds": [ + "Sum(_allowedFragments[msg.sender][...]) == value" + ] + }, + { + "before_preds": [ + "_gonsPerFragment == ori(_gonsPerFragment)", + "_gonsPerFragment >= ori(_gonsPerFragment)", + "_gonsPerFragment <= ori(_gonsPerFragment)" + ], + "after_preds": [ + "_gonsPerFragment == ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) <= ori(Sum(_gonBalances[...]))" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000" + ], + "after_preds": [ + "ori(_totalSupply) == 60000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply == 60000000000000" + ] + }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_gonsPerFragment == ori(_gonsPerFragment)", + "_gonsPerFragment >= ori(_gonsPerFragment)", + "_gonsPerFragment <= ori(_gonsPerFragment)" + ], + "after_preds": [ + "_gonsPerFragment == ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) <= ori(Sum(_gonBalances[...]))" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply == 60000000000000" + ] + }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply > ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_gonsPerFragment >= ori(_gonsPerFragment)", + "_gonsPerFragment > ori(_gonsPerFragment)", + "_gonsPerFragment != ori(_gonsPerFragment)" + ], + "after_preds": [ + "_gonsPerFragment > ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) > ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) != ori(Sum(_gonBalances[...]))" + ], + "after_preds": [ + "Sum(_gonBalances[...]) > ori(Sum(_gonBalances[...]))" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply == 60000000000000" + ] + }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply <= _gonsPerFragment", + "_totalSupply < _gonsPerFragment", + "_totalSupply != _gonsPerFragment" + ], + "after_preds": [ + "_totalSupply < _gonsPerFragment" + ] + }, + { + "before_preds": [ + "_gonsPerFragment >= ori(_totalSupply)", + "_gonsPerFragment > ori(_totalSupply)", + "_gonsPerFragment != ori(_totalSupply)" + ], + "after_preds": [ + "_gonsPerFragment > ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json new file mode 100644 index 0000000..669fcbb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json @@ -0,0 +1,1033 @@ +[ + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals == 18" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply > ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply > ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= _balances[msg.sender]", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals == 18" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply > ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply > ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= _balances[msg.sender]", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) > ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals == 18" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 142449775039435131775208" + ], + "after_preds": [ + "ori(_totalSupply) == 142449775039435131775208" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 142449775039435131775208" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == 142449775039435131775208" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 142449775039435131775208" + ], + "after_preds": [ + "_totalSupply == 142449775039435131775208" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 142449775039435131775208" + ], + "after_preds": [ + "Sum(_balances[...]) == 142449775039435131775208" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals == 18" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min" + ] + }, + { + "before_preds": [ + "_shares > 0", + "_shares == 10000000000000000000" + ], + "after_preds": [ + "_shares == 10000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000000000000" + ], + "after_preds": [ + "ori(_balances[msg.sender]) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(_balances[msg.sender])", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) == ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 90000000000000000000" + ], + "after_preds": [ + "_totalSupply == 90000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 90000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) == 90000000000000000000" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0", + "_balances[msg.sender] == 90000000000000000000" + ], + "after_preds": [ + "_balances[msg.sender] == 90000000000000000000" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply < ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_balances[msg.sender])", + "_totalSupply < ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply < ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply == _balances[msg.sender]", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply <= _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply == _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) > Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= Sum(_balances[...])", + "ori(_balances[msg.sender]) > Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _balances[msg.sender]", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) <= _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) == _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals == 18" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply < ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) > Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) != _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) > _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals == 18" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min == 9500" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/reader.py b/use-cases/dynamically-mined-invariant-denoising/reader.py index 2b8d8e6..73b242a 100644 --- a/use-cases/dynamically-mined-invariant-denoising/reader.py +++ b/use-cases/dynamically-mined-invariant-denoising/reader.py @@ -1,6 +1,12 @@ import json import sys -import predi.comparator as cp + +# import our comparator module from the parent directory +sys.path.append('../..') +import src.sindi.comparator as cp +import src.sindi.comparator_light as cp_light + + import re import time import os @@ -135,13 +141,20 @@ def find_strongest_predicate(preds: list, contract_addr: str, all_preds_dict: di for second_pred in preds: if '"' in first_pred or '"' in second_pred: continue - result = comparator.compare(first_pred, second_pred) - if result == 'The predicates are equivalent.': + try: + result = comparator.compare(first_pred, second_pred) + if result == 'The predicates are equivalent.': + continue + if result == 'The first predicate is stronger.': + preds.remove(second_pred) + if result == 'The second predicate is stronger.': + preds.remove(first_pred) + except Exception as e: + print('- - -' * 20) + print(f"Error comparing predicates: {first_pred} and {second_pred}. Error: {e}") + print('- - -' * 20) continue - if result == 'The first predicate is stronger.': - preds.remove(second_pred) - if result == 'The second predicate is stronger.': - preds.remove(first_pred) + # Define file paths for removed and kept predicates removed_file_path = f"{output_folder}/removed/{contract_addr}-removed.json" diff --git a/use-cases/dynamically-mined-invariant-denoising/sok.json b/use-cases/dynamically-mined-invariant-denoising/sok.json index 103323c..9e7b020 100644 --- a/use-cases/dynamically-mined-invariant-denoising/sok.json +++ b/use-cases/dynamically-mined-invariant-denoising/sok.json @@ -1,82 +1,82 @@ [ { "predicates_before_reduction": 1491, - "predicates_after_reduction": 924, - "reduction_ratio": 0.6197183098591549, - "total_parsing_time": 0.003945112228393555, - "total_reduction_time": 51.6808500289917, + "predicates_after_reduction": 922, + "reduction_ratio": 0.6183769282360831, + "total_parsing_time": 0.00718235969543457, + "total_reduction_time": 113.1889967918396, "contract": "./invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json" }, { "predicates_before_reduction": 88, "predicates_after_reduction": 70, "reduction_ratio": 0.7954545454545454, - "total_parsing_time": 0.0003712177276611328, - "total_reduction_time": 1.672656774520874, + "total_parsing_time": 0.0009465217590332031, + "total_reduction_time": 3.193233013153076, "contract": "./invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json" }, { "predicates_before_reduction": 45, "predicates_after_reduction": 33, "reduction_ratio": 0.7333333333333333, - "total_parsing_time": 0.0002181529998779297, - "total_reduction_time": 1.381868839263916, + "total_parsing_time": 0.0005981922149658203, + "total_reduction_time": 2.453716278076172, "contract": "./invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json" }, { "predicates_before_reduction": 708, "predicates_after_reduction": 430, "reduction_ratio": 0.6073446327683616, - "total_parsing_time": 0.002055644989013672, - "total_reduction_time": 31.290276527404785, + "total_parsing_time": 0.004693269729614258, + "total_reduction_time": 71.69141364097595, "contract": "./invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json" }, { "predicates_before_reduction": 141, "predicates_after_reduction": 130, "reduction_ratio": 0.9219858156028369, - "total_parsing_time": 0.0005276203155517578, - "total_reduction_time": 3.0120651721954346, + "total_parsing_time": 0.0011169910430908203, + "total_reduction_time": 6.443445444107056, "contract": "./invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json" }, { "predicates_before_reduction": 39, "predicates_after_reduction": 39, "reduction_ratio": 1.0, - "total_parsing_time": 0.00020503997802734375, - "total_reduction_time": 1.025242567062378, + "total_parsing_time": 0.0003592967987060547, + "total_reduction_time": 2.2742459774017334, "contract": "./invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json" }, { "predicates_before_reduction": 330, "predicates_after_reduction": 274, "reduction_ratio": 0.8303030303030303, - "total_parsing_time": 0.0010573863983154297, - "total_reduction_time": 8.86786961555481, + "total_parsing_time": 0.002045869827270508, + "total_reduction_time": 17.68912625312805, "contract": "./invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json" }, { "predicates_before_reduction": 299, - "predicates_after_reduction": 220, - "reduction_ratio": 0.7357859531772575, - "total_parsing_time": 0.0009560585021972656, - "total_reduction_time": 10.77918028831482, + "predicates_after_reduction": 231, + "reduction_ratio": 0.7725752508361204, + "total_parsing_time": 0.0018007755279541016, + "total_reduction_time": 22.529717206954956, "contract": "./invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json" }, { "predicates_before_reduction": 468, "predicates_after_reduction": 293, "reduction_ratio": 0.6260683760683761, - "total_parsing_time": 0.001405954360961914, - "total_reduction_time": 16.010133504867554, + "total_parsing_time": 0.0034198760986328125, + "total_reduction_time": 36.94824767112732, "contract": "./invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json" }, { "predicates_before_reduction": 56, "predicates_after_reduction": 56, "reduction_ratio": 1.0, - "total_parsing_time": 0.00022912025451660156, - "total_reduction_time": 1.5980191230773926, + "total_parsing_time": 0.00047969818115234375, + "total_reduction_time": 3.274705648422241, "contract": "./invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json" } ] \ No newline at end of file From faa660fdd7917b4250c1589674e6cddeaffb44fa Mon Sep 17 00:00:00 2001 From: Mojtaba Eshghie Date: Sat, 16 Aug 2025 10:39:32 +0200 Subject: [PATCH 3/7] Feature #67: Just added the light algorithm results for invariant denoising. --- .../erc20.json | 162 - ...eriment2.bash => full_experiment_erc.bash} | 0 .../full_experiment_light_erc.bash | 29 + .../full_experiment_light_sok.bash | 19 + ...periment.bash => full_experiment_sok.bash} | 0 .../output_light/erc20.json | 146 + ...0c2e08acb830f2a4ee4d34b48594dade48651.json | 314 + ...e5588cb1de19c70b6ad5399152d8c643fae7b.json | 279 + ...57c27368d1475a3ce49a25c48c40b85e7f7e1.json | 236 + ...15c92e67686aa268df03d4c881a76340907e8.json | 228 + ...833cd4cfce20c04d0279ccbb8cd827c8bcdbf.json | 279 + ...d3170f407cacaaa328660c2ee2499055e3b07.json | 174 + ...a550259532f7429530dcb93d86269629e3f2a.json | 282 + ...8591fe802585a9713bd6ebe75d6c285236c54.json | 407 ++ ...f3fe77732ec3fc5327eb52327b06be4e472f8.json | 430 ++ ...bdd708b6f7247d57e9281e2073d2b88a67a42.json | 286 + ...23909b5d8bbe01505121f15a4503b6617dae7.json | 197 + ...d4fb8595f4b923ec53533f4bbd641c1910aca.json | 654 ++ ...2e04099a435439725bb40647e2b32dc136806.json | 277 + ...94c97a5d4374ec35bda83570c461c6d6f6079.json | 336 + ...0d1d98b5ca16b79c7eedada2454c2564da59e.json | 357 + ...c90e33ac839c29a3d98c807eeef0c4508bee8.json | 217 + ...690a0c9958e5375eda5694e754b125a6c972c.json | 223 + ...ae54b74a37be4fc11e9f1a35021848d996afc.json | 283 + ...8acb830f2a4ee4d34b48594dade48651-kept.json | 486 ++ ...cb1de19c70b6ad5399152d8c643fae7b-kept.json | 350 + ...368d1475a3ce49a25c48c40b85e7f7e1-kept.json | 676 ++ ...e67686aa268df03d4c881a76340907e8-kept.json | 702 ++ ...4cfce20c04d0279ccbb8cd827c8bcdbf-kept.json | 410 ++ ...f407cacaaa328660c2ee2499055e3b07-kept.json | 358 + ...59532f7429530dcb93d86269629e3f2a-kept.json | 706 ++ ...e802585a9713bd6ebe75d6c285236c54-kept.json | 1040 +++ ...7732ec3fc5327eb52327b06be4e472f8-kept.json | 682 ++ ...8b6f7247d57e9281e2073d2b88a67a42-kept.json | 406 ++ ...b5d8bbe01505121f15a4503b6617dae7-kept.json | 470 ++ ...595f4b923ec53533f4bbd641c1910aca-kept.json | 1966 +++++ ...99a435439725bb40647e2b32dc136806-kept.json | 724 ++ ...a5d4374ec35bda83570c461c6d6f6079-kept.json | 642 ++ ...8b5ca16b79c7eedada2454c2564da59e-kept.json | 696 ++ ...3ac839c29a3d98c807eeef0c4508bee8-kept.json | 664 ++ ...c9958e5375eda5694e754b125a6c972c-kept.json | 676 ++ ...74a37be4fc11e9f1a35021848d996afc-kept.json | 768 ++ ...b830f2a4ee4d34b48594dade48651-removed.json | 72 + ...de19c70b6ad5399152d8c643fae7b-removed.json | 72 + ...d1475a3ce49a25c48c40b85e7f7e1-removed.json | 219 + ...686aa268df03d4c881a76340907e8-removed.json | 168 + ...ce20c04d0279ccbb8cd827c8bcdbf-removed.json | 185 + ...7cacaaa328660c2ee2499055e3b07-removed.json | 138 + ...32f7429530dcb93d86269629e3f2a-removed.json | 167 + ...2585a9713bd6ebe75d6c285236c54-removed.json | 409 ++ ...2ec3fc5327eb52327b06be4e472f8-removed.json | 147 + ...f7247d57e9281e2073d2b88a67a42-removed.json | 32 + ...8bbe01505121f15a4503b6617dae7-removed.json | 136 + ...f4b923ec53533f4bbd641c1910aca-removed.json | 820 +++ ...435439725bb40647e2b32dc136806-removed.json | 208 + ...4374ec35bda83570c461c6d6f6079-removed.json | 233 + ...ca16b79c7eedada2454c2564da59e-removed.json | 230 + ...839c29a3d98c807eeef0c4508bee8-removed.json | 186 + ...58e5375eda5694e754b125a6c972c-removed.json | 215 + ...37be4fc11e9f1a35021848d996afc-removed.json | 266 + .../output_light/sok.json | 82 + ...1df026010b5aea781f90542ee19e900f2db15.json | 92 + ...4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json | 1569 ++++ ...4977bbed67e101bb80fc07fccfba655c0a64f.json | 72 + ...66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json | 970 +++ ...7259b2b3a4c17e7c43c54409810af48ba5210.json | 722 ++ ...a87899490ece95443e979ca9485cbe7e71522.json | 549 ++ ...e6fecd516ecc3849daf6845e3ec868087b755.json | 444 ++ ...93840aad42d2621e1a452bf5d7076ff804d61.json | 471 ++ ...43e627e64355f1861cec6d3a6688b31a6f952.json | 692 ++ ...fc0b43ab98eb91e9836129d1ee7c3bc95df50.json | 163 + ...6010b5aea781f90542ee19e900f2db15-kept.json | 266 + ...e803ee84009ce6e1ecf419c9cb1e8af0-kept.json | 6428 +++++++++++++++++ ...bed67e101bb80fc07fccfba655c0a64f-kept.json | 314 + ...d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json | 2690 +++++++ ...2b3a4c17e7c43c54409810af48ba5210-kept.json | 2222 ++++++ ...9490ece95443e979ca9485cbe7e71522-kept.json | 550 ++ ...d516ecc3849daf6845e3ec868087b755-kept.json | 1064 +++ ...aad42d2621e1a452bf5d7076ff804d61-kept.json | 1632 +++++ ...7e64355f1861cec6d3a6688b31a6f952-kept.json | 2204 ++++++ ...3ab98eb91e9836129d1ee7c3bc95df50-kept.json | 450 ++ ...0b5aea781f90542ee19e900f2db15-removed.json | 22 + ...3ee84009ce6e1ecf419c9cb1e8af0-removed.json | 1792 +++++ ...b37fa76aa3ed1ff33e8e39f0b9c7a-removed.json | 1156 +++ ...a4c17e7c43c54409810af48ba5210-removed.json | 72 + ...0ece95443e979ca9485cbe7e71522-removed.json | 42 + ...42d2621e1a452bf5d7076ff804d61-removed.json | 245 + ...4355f1861cec6d3a6688b31a6f952-removed.json | 439 ++ .../reader.py | 2 +- .../sok.json | 82 - 90 files changed, 49393 insertions(+), 245 deletions(-) rename use-cases/dynamically-mined-invariant-denoising/{full_experiment2.bash => full_experiment_erc.bash} (100%) create mode 100755 use-cases/dynamically-mined-invariant-denoising/full_experiment_light_erc.bash create mode 100755 use-cases/dynamically-mined-invariant-denoising/full_experiment_light_sok.bash rename use-cases/dynamically-mined-invariant-denoising/{full_experiment.bash => full_experiment_sok.bash} (100%) create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xc382e04099a435439725bb40647e2b32dc136806.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x37a15c92e67686aa268df03d4c881a76340907e8-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x6f2a550259532f7429530dcb93d86269629e3f2a-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x8b68591fe802585a9713bd6ebe75d6c285236c54-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xb2923909b5d8bbe01505121f15a4503b6617dae7-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xc382e04099a435439725bb40647e2b32dc136806-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xeeb690a0c9958e5375eda5694e754b125a6c972c-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x37a15c92e67686aa268df03d4c881a76340907e8-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x6f2a550259532f7429530dcb93d86269629e3f2a-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x8b68591fe802585a9713bd6ebe75d6c285236c54-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xb2923909b5d8bbe01505121f15a4503b6617dae7-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xc382e04099a435439725bb40647e2b32dc136806-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xeeb690a0c9958e5375eda5694e754b125a6c972c-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6684977bbed67e101bb80fc07fccfba655c0a64f-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json diff --git a/use-cases/dynamically-mined-invariant-denoising/erc20.json b/use-cases/dynamically-mined-invariant-denoising/erc20.json index cc292a5..e69de29 100644 --- a/use-cases/dynamically-mined-invariant-denoising/erc20.json +++ b/use-cases/dynamically-mined-invariant-denoising/erc20.json @@ -1,162 +0,0 @@ -[ - { - "predicates_before_reduction": 95, - "predicates_after_reduction": 63, - "reduction_ratio": 0.6631578947368421, - "total_parsing_time": 0.0005500316619873047, - "total_reduction_time": 4.150881290435791, - "contract": "./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json" - }, - { - "predicates_before_reduction": 78, - "predicates_after_reduction": 46, - "reduction_ratio": 0.5897435897435898, - "total_parsing_time": 0.0004525184631347656, - "total_reduction_time": 3.722658634185791, - "contract": "./invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json" - }, - { - "predicates_before_reduction": 175, - "predicates_after_reduction": 96, - "reduction_ratio": 0.5485714285714286, - "total_parsing_time": 0.0008111000061035156, - "total_reduction_time": 8.162627458572388, - "contract": "./invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json" - }, - { - "predicates_before_reduction": 158, - "predicates_after_reduction": 96, - "reduction_ratio": 0.6075949367088608, - "total_parsing_time": 0.0007655620574951172, - "total_reduction_time": 7.1824915409088135, - "contract": "./invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json" - }, - { - "predicates_before_reduction": 108, - "predicates_after_reduction": 68, - "reduction_ratio": 0.6296296296296297, - "total_parsing_time": 0.0006222724914550781, - "total_reduction_time": 5.119410514831543, - "contract": "./invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json" - }, - { - "predicates_before_reduction": 94, - "predicates_after_reduction": 54, - "reduction_ratio": 0.574468085106383, - "total_parsing_time": 0.0005612373352050781, - "total_reduction_time": 4.4623119831085205, - "contract": "./invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.inv.json" - }, - { - "predicates_before_reduction": 163, - "predicates_after_reduction": 95, - "reduction_ratio": 0.5828220858895705, - "total_parsing_time": 0.0008013248443603516, - "total_reduction_time": 7.675647258758545, - "contract": "./invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.inv.json" - }, - { - "predicates_before_reduction": 282, - "predicates_after_reduction": 159, - "reduction_ratio": 0.5638297872340425, - "total_parsing_time": 0.0011723041534423828, - "total_reduction_time": 14.168088674545288, - "contract": "./invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.inv.json" - }, - { - "predicates_before_reduction": 145, - "predicates_after_reduction": 93, - "reduction_ratio": 0.6413793103448275, - "total_parsing_time": 0.0007197856903076172, - "total_reduction_time": 6.957494020462036, - "contract": "./invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.inv.json" - }, - { - "predicates_before_reduction": 79, - "predicates_after_reduction": 47, - "reduction_ratio": 0.5949367088607594, - "total_parsing_time": 0.0005147457122802734, - "total_reduction_time": 3.806112766265869, - "contract": "./invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.inv.json" - }, - { - "predicates_before_reduction": 111, - "predicates_after_reduction": 67, - "reduction_ratio": 0.6036036036036037, - "total_parsing_time": 0.0005886554718017578, - "total_reduction_time": 5.197048187255859, - "contract": "./invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.inv.json" - }, - { - "predicates_before_reduction": 535, - "predicates_after_reduction": 311, - "reduction_ratio": 0.5813084112149532, - "total_parsing_time": 0.0018889904022216797, - "total_reduction_time": 25.105873584747314, - "contract": "./invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.inv.json" - }, - { - "predicates_before_reduction": 181, - "predicates_after_reduction": 102, - "reduction_ratio": 0.56353591160221, - "total_parsing_time": 0.0008447170257568359, - "total_reduction_time": 8.532665967941284, - "contract": "./invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.inv.json" - }, - { - "predicates_before_reduction": 164, - "predicates_after_reduction": 96, - "reduction_ratio": 0.5853658536585366, - "total_parsing_time": 0.0007402896881103516, - "total_reduction_time": 8.461816787719727, - "contract": "./invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.inv.json" - }, - { - "predicates_before_reduction": 182, - "predicates_after_reduction": 99, - "reduction_ratio": 0.5439560439560439, - "total_parsing_time": 0.0009572505950927734, - "total_reduction_time": 8.861835479736328, - "contract": "./invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.inv.json" - }, - { - "predicates_before_reduction": 160, - "predicates_after_reduction": 93, - "reduction_ratio": 0.58125, - "total_parsing_time": 0.0008347034454345703, - "total_reduction_time": 7.377439498901367, - "contract": "./invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.inv.json" - }, - { - "predicates_before_reduction": 172, - "predicates_after_reduction": 97, - "reduction_ratio": 0.563953488372093, - "total_parsing_time": 0.000843048095703125, - "total_reduction_time": 8.214195966720581, - "contract": "./invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.inv.json" - }, - { - "predicates_before_reduction": 206, - "predicates_after_reduction": 115, - "reduction_ratio": 0.558252427184466, - "total_parsing_time": 0.0009043216705322266, - "total_reduction_time": 9.881560325622559, - "contract": "./invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json" - }, - { - "predicates_before_reduction": 95, - "predicates_after_reduction": 63, - "reduction_ratio": 0.6631578947368421, - "total_parsing_time": 0.0008337497711181641, - "total_reduction_time": 6.636699199676514, - "contract": "./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json" - }, - { - "predicates_before_reduction": 95, - "predicates_after_reduction": 63, - "reduction_ratio": 0.6631578947368421, - "total_parsing_time": 0.0007114410400390625, - "total_reduction_time": 5.690693140029907, - "contract": "./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json" - } -] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/full_experiment2.bash b/use-cases/dynamically-mined-invariant-denoising/full_experiment_erc.bash similarity index 100% rename from use-cases/dynamically-mined-invariant-denoising/full_experiment2.bash rename to use-cases/dynamically-mined-invariant-denoising/full_experiment_erc.bash diff --git a/use-cases/dynamically-mined-invariant-denoising/full_experiment_light_erc.bash b/use-cases/dynamically-mined-invariant-denoising/full_experiment_light_erc.bash new file mode 100755 index 0000000..586e6e0 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/full_experiment_light_erc.bash @@ -0,0 +1,29 @@ +#!/bin/bash + +# Clear the contents of ./sok.json +> ./erc20.json + +# Remove all files in ./output_light/sok and its subdirectories +find ./output_light/erc20 -type f -delete + +# Run the reader.py script with each invariant JSON file + + +python reader.py ./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.inv.json ./output_light/erc20 +python reader.py ./invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json ./output_light/erc20 diff --git a/use-cases/dynamically-mined-invariant-denoising/full_experiment_light_sok.bash b/use-cases/dynamically-mined-invariant-denoising/full_experiment_light_sok.bash new file mode 100755 index 0000000..671deb1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/full_experiment_light_sok.bash @@ -0,0 +1,19 @@ +#!/bin/bash + +# Clear the contents of ./sok.json +> ./sok.json + +# Remove all files in ./output_light/sok and its subdirectories +find ./output_light/sok -type f -delete + +# Run the reader.py script with each invariant JSON file +python reader.py ./invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json ./output_light/sok +python reader.py ./invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json ./output_light/sok +python reader.py ./invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json ./output_light/sok +python reader.py ./invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json ./output_light/sok +python reader.py ./invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json ./output_light/sok +python reader.py ./invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json ./output_light/sok +python reader.py ./invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json ./output_light/sok +python reader.py ./invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json ./output_light/sok +python reader.py ./invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json ./output_light/sok +python reader.py ./invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json ./output_light/sok diff --git a/use-cases/dynamically-mined-invariant-denoising/full_experiment.bash b/use-cases/dynamically-mined-invariant-denoising/full_experiment_sok.bash similarity index 100% rename from use-cases/dynamically-mined-invariant-denoising/full_experiment.bash rename to use-cases/dynamically-mined-invariant-denoising/full_experiment_sok.bash diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20.json new file mode 100644 index 0000000..535d60f --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20.json @@ -0,0 +1,146 @@ +[ + { + "predicates_before_reduction": 95, + "predicates_after_reduction": 81, + "reduction_ratio": 0.8526315789473684, + "total_parsing_time": 0.001191854476928711, + "total_reduction_time": 0.12505745887756348, + "contract": "./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json" + }, + { + "predicates_before_reduction": 78, + "predicates_after_reduction": 64, + "reduction_ratio": 0.8205128205128205, + "total_parsing_time": 0.0018854141235351562, + "total_reduction_time": 0.16460800170898438, + "contract": "./invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json" + }, + { + "predicates_before_reduction": 175, + "predicates_after_reduction": 140, + "reduction_ratio": 0.8, + "total_parsing_time": 0.0013132095336914062, + "total_reduction_time": 0.26000261306762695, + "contract": "./invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json" + }, + { + "predicates_before_reduction": 158, + "predicates_after_reduction": 132, + "reduction_ratio": 0.8354430379746836, + "total_parsing_time": 0.0012907981872558594, + "total_reduction_time": 0.22644281387329102, + "contract": "./invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json" + }, + { + "predicates_before_reduction": 108, + "predicates_after_reduction": 75, + "reduction_ratio": 0.6944444444444444, + "total_parsing_time": 0.001283407211303711, + "total_reduction_time": 0.13232088088989258, + "contract": "./invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json" + }, + { + "predicates_before_reduction": 94, + "predicates_after_reduction": 74, + "reduction_ratio": 0.7872340425531915, + "total_parsing_time": 0.0008051395416259766, + "total_reduction_time": 0.17226290702819824, + "contract": "./invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.inv.json" + }, + { + "predicates_before_reduction": 163, + "predicates_after_reduction": 136, + "reduction_ratio": 0.8343558282208589, + "total_parsing_time": 0.0018343925476074219, + "total_reduction_time": 0.280148983001709, + "contract": "./invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.inv.json" + }, + { + "predicates_before_reduction": 282, + "predicates_after_reduction": 221, + "reduction_ratio": 0.7836879432624113, + "total_parsing_time": 0.0025131702423095703, + "total_reduction_time": 0.47801899909973145, + "contract": "./invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.inv.json" + }, + { + "predicates_before_reduction": 145, + "predicates_after_reduction": 122, + "reduction_ratio": 0.8413793103448276, + "total_parsing_time": 0.0019795894622802734, + "total_reduction_time": 0.3413517475128174, + "contract": "./invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.inv.json" + }, + { + "predicates_before_reduction": 79, + "predicates_after_reduction": 73, + "reduction_ratio": 0.9240506329113924, + "total_parsing_time": 0.001184701919555664, + "total_reduction_time": 0.14716768264770508, + "contract": "./invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.inv.json" + }, + { + "predicates_before_reduction": 111, + "predicates_after_reduction": 89, + "reduction_ratio": 0.8018018018018018, + "total_parsing_time": 0.0010526180267333984, + "total_reduction_time": 0.15877819061279297, + "contract": "./invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.inv.json" + }, + { + "predicates_before_reduction": 535, + "predicates_after_reduction": 405, + "reduction_ratio": 0.7570093457943925, + "total_parsing_time": 0.003393888473510742, + "total_reduction_time": 0.9345815181732178, + "contract": "./invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.inv.json" + }, + { + "predicates_before_reduction": 181, + "predicates_after_reduction": 147, + "reduction_ratio": 0.8121546961325967, + "total_parsing_time": 0.0014164447784423828, + "total_reduction_time": 0.31469225883483887, + "contract": "./invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.inv.json" + }, + { + "predicates_before_reduction": 164, + "predicates_after_reduction": 131, + "reduction_ratio": 0.7987804878048781, + "total_parsing_time": 0.0013322830200195312, + "total_reduction_time": 0.259523868560791, + "contract": "./invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.inv.json" + }, + { + "predicates_before_reduction": 182, + "predicates_after_reduction": 146, + "reduction_ratio": 0.8021978021978022, + "total_parsing_time": 0.0013802051544189453, + "total_reduction_time": 0.2984623908996582, + "contract": "./invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.inv.json" + }, + { + "predicates_before_reduction": 160, + "predicates_after_reduction": 128, + "reduction_ratio": 0.8, + "total_parsing_time": 0.0012373924255371094, + "total_reduction_time": 0.34409618377685547, + "contract": "./invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.inv.json" + }, + { + "predicates_before_reduction": 172, + "predicates_after_reduction": 133, + "reduction_ratio": 0.7732558139534884, + "total_parsing_time": 0.0012662410736083984, + "total_reduction_time": 0.2510871887207031, + "contract": "./invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.inv.json" + }, + { + "predicates_before_reduction": 206, + "predicates_after_reduction": 158, + "reduction_ratio": 0.7669902912621359, + "total_parsing_time": 0.0016143321990966797, + "total_reduction_time": 0.38513708114624023, + "contract": "./invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json" + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651.json new file mode 100644 index 0000000..19e85d4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651.json @@ -0,0 +1,314 @@ +[ + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "disableTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "disableTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseApproval(_spender,_subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseApproval(_spender,_subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unfreeze()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000", + "ori(Sum(balances[...])) one of [5000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000", + "ori(totalSupply_) one of [5000000000000000000000000]", + "ori(unfrozen) == false", + "ori(owner) != 0", + "msg.sender == ori(owner)" + ], + "postconditions": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000", + "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000", + "totalSupply_ one of [5000000000000000000000000]", + "unfrozen == true", + "elem of balances[...] is one of [5000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "msg.sender == owner", + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_", + "unfrozen != ori(unfrozen)", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unfreeze()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(_from,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(_from,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "_value > 0", + "_to != 0", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000", + "ori(Sum(balances[...])) one of [5000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000", + "ori(totalSupply_) one of [5000000000000000000000000]", + "ori(unfrozen) == true", + "ori(owner) != 0" + ], + "postconditions": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000", + "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000", + "totalSupply_ one of [5000000000000000000000000]", + "unfrozen == true", + "elem of balances[...] is one of [5000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_", + "unfrozen == ori(unfrozen)", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "allowTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "allowTransfer(_for)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseApproval(_spender,_addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseApproval(_spender,_addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(_newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(_newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000", + "ori(Sum(balances[...])) one of [5000000000000000000000000]", + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000", + "ori(totalSupply_) one of [5000000000000000000000000]", + "ori(owner) != 0", + "ori(Sum(balances[...])) == ori(totalSupply_)" + ], + "postconditions": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000", + "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000", + "totalSupply_ one of [5000000000000000000000000]", + "unfrozen == true", + "elem of balances[...] is one of [5000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) == ori(totalSupply_)", + "Sum(balances[...]) == totalSupply_", + "ori(Sum(balances[...])) == totalSupply_", + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b.json new file mode 100644 index 0000000..0ff8f1e --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b.json @@ -0,0 +1,279 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_paused) == false", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000", + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "to != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000", + "ori(_totalSupply) one of [10000000000000000000000000000]" + ], + "postconditions": [ + "_paused == false", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000", + "Sum(_balances[...]) one of [10000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "elem of _balances[...] is one of [10000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000", + "_totalSupply one of [10000000000000000000000000000]", + "_paused == ori(_paused)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "_totalSupply == ori(_totalSupply)" + ], + "falsified_preconditions": [ + "value > 0" + ], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000", + "ori(_totalSupply) one of [10000000000000000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000", + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_paused) == false", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000", + "Sum(_balances[...]) one of [10000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_paused == false", + "elem of _balances[...] is one of [10000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000", + "_totalSupply one of [10000000000000000000000000000]", + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "_decimals == ori(_decimals)", + "_paused == ori(_paused)", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) == _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1.json new file mode 100644 index 0000000..5e1be96 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1.json @@ -0,0 +1,236 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000000000000]", + "msg.sender != 0", + "spender != 0", + "ori(Sum(allowed[msg.sender][...])) == 0", + "ori(Sum(allowed[msg.sender][...])) one of [0]", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "ori(Sum(allowed[msg.sender][...])) != tokens", + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])", + "tokens > ori(allowed[msg.sender][spender])", + "tokens != ori(allowed[msg.sender][spender])" + ], + "postconditions": [ + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of balances[...] is one of [1000000000000000000000000000]", + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000", + "Sum(balances[...]) one of [1000000000000000000000000000]", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(Sum(allowed[msg.sender][...])) != allowed[msg.sender][spender]", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] == tokens", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "Sum(allowed[msg.sender][...]) == tokens", + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000000000000]", + "msg.sender != 0", + "to != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]", + "ori(balances[msg.sender]) > 0", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) != tokens", + "ori(balances[to]) != ori(balances[msg.sender])", + "ori(balances[msg.sender]) >= tokens" + ], + "postconditions": [ + "elem of balances[...] is one of [1000000000000000000000000000]", + "balances[to] > 0", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000", + "Sum(balances[...]) one of [1000000000000000000000000000]", + "ori(Sum(balances[...])) != balances[to]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "balances[to] != ori(balances[to])", + "balances[to] >= tokens", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "ori(balances[msg.sender]) <= Sum(balances[...])", + "tokens < Sum(balances[...])", + "tokens != Sum(balances[...])", + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[to]) <= ori(balances[msg.sender])", + "ori(balances[to]) < ori(balances[msg.sender])", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[to]) != tokens", + "ori(balances[msg.sender]) > tokens", + "ori(balances[msg.sender]) != tokens" + ], + "falsified_postconditions": [ + "balances[msg.sender] > 0", + "balances[to] <= ori(balances[msg.sender])", + "balances[to] < ori(balances[msg.sender])", + "balances[to] != ori(balances[msg.sender])", + "balances[to] == tokens", + "balances[to] <= tokens", + "balances[to] <= balances[msg.sender]", + "balances[to] < balances[msg.sender]", + "balances[to] != balances[msg.sender]", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[to]) < balances[msg.sender]", + "ori(balances[to]) != balances[msg.sender]", + "tokens <= balances[msg.sender]", + "tokens < balances[msg.sender]", + "tokens != balances[msg.sender]" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "elem of balances[...] is one of [1000000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000", + "Sum(balances[...]) one of [1000000000000000000000000000]", + "decimals == ori(decimals)", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "_totalSupply == ori(_totalSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8.json new file mode 100644 index 0000000..1a363af --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8.json @@ -0,0 +1,228 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "ori(decimals) == 0", + "ori(decimals) one of [0]", + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "ori(Sum(allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000", + "ori(_totalSupply) one of [10000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000", + "ori(Sum(balances[...])) one of [10000000]", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "msg.sender != 0", + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) != tokens", + "ori(Sum(allowed[msg.sender][...])) <= tokens" + ], + "postconditions": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of balances[...] is one of [10000000]", + "elem of allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]", + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "decimals == 0", + "decimals one of [0]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000", + "Sum(balances[...]) one of [10000000]", + "_totalSupply > 0", + "_totalSupply == 10000000", + "_totalSupply one of [10000000]", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] == tokens", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "Sum(allowed[msg.sender][...]) >= tokens" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) == 0", + "ori(decimals) one of [0]", + "ori(balances[msg.sender]) > 0", + "to != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000", + "ori(_totalSupply) one of [10000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000", + "ori(Sum(balances[...])) one of [10000000]", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "msg.sender != 0", + "ori(balances[msg.sender]) <= ori(Sum(balances[...]))", + "ori(balances[msg.sender]) != ori(balances[to])", + "ori(balances[msg.sender]) >= tokens", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) != tokens" + ], + "postconditions": [ + "elem of balances[...] is one of [10000000]", + "balances[to] > 0", + "decimals == 0", + "decimals one of [0]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000", + "Sum(balances[...]) one of [10000000]", + "_totalSupply > 0", + "_totalSupply == 10000000", + "_totalSupply one of [10000000]", + "balances[to] < ori(Sum(balances[...]))", + "balances[to] != ori(Sum(balances[...]))", + "balances[to] != ori(balances[to])", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])", + "balances[to] >= tokens", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(balances[msg.sender]) <= Sum(balances[...])", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(Sum(balances[...])) != balances[msg.sender]", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "Sum(balances[...]) != tokens", + "Sum(balances[...]) != balances[msg.sender]", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[msg.sender]) >= ori(balances[to])", + "ori(balances[msg.sender]) > ori(balances[to])", + "ori(balances[msg.sender]) > tokens", + "ori(balances[msg.sender]) != tokens", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[to]) != tokens" + ], + "falsified_postconditions": [ + "balances[msg.sender] > 0", + "balances[to] <= ori(balances[msg.sender])", + "balances[to] < ori(balances[msg.sender])", + "balances[to] != ori(balances[msg.sender])", + "balances[to] == tokens", + "balances[to] <= tokens", + "balances[to] <= balances[msg.sender]", + "balances[to] < balances[msg.sender]", + "balances[to] != balances[msg.sender]", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[to]) < balances[msg.sender]", + "ori(balances[to]) != balances[msg.sender]", + "tokens <= balances[msg.sender]", + "tokens < balances[msg.sender]", + "tokens != balances[msg.sender]" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) == 0", + "ori(decimals) one of [0]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000", + "ori(Sum(balances[...])) one of [10000000]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000", + "ori(_totalSupply) one of [10000000]" + ], + "postconditions": [ + "elem of balances[...] is one of [10000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000", + "Sum(balances[...]) one of [10000000]", + "decimals == 0", + "decimals one of [0]", + "_totalSupply > 0", + "_totalSupply == 10000000", + "_totalSupply one of [10000000]", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf.json new file mode 100644 index 0000000..a2f075e --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf.json @@ -0,0 +1,279 @@ +[ + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "ori(_balances[account]) one of [0,200000000,40000000200000000,20000000200000000]", + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]", + "msg.value == 0", + "msg.value one of [0]", + "account != 0", + "amount > 0", + "amount one of [200000000,20000000000000000,200000000000000000000000000]", + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]", + "ori(_balances[account]) <= ori(Sum(_balances[...]))", + "ori(_balances[account]) <= ori(_totalSupply)", + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [200000000]", + "elem of _balances[...] is one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]", + "_balances[account] > 0", + "_balances[account] one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "_totalSupply > 0", + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "_balances[account] <= Sum(_balances[...])", + "_balances[account] != ori(_balances[account])", + "_balances[account] != ori(Sum(_balances[...]))", + "_balances[account] <= _totalSupply", + "_balances[account] != ori(_totalSupply)", + "Sum(_balances[...]) != ori(_balances[account])", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) != ori(_totalSupply)", + "ori(_balances[account]) != _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply", + "_totalSupply != ori(_totalSupply)" + ], + "falsified_preconditions": [ + "ori(_balances[account]) == ori(Sum(_balances[...]))", + "ori(_balances[account]) >= ori(Sum(_balances[...]))", + "ori(_balances[account]) == ori(_totalSupply)", + "ori(_balances[account]) >= ori(_totalSupply)" + ], + "falsified_postconditions": [ + "_balances[account] == Sum(_balances[...])", + "_balances[account] >= Sum(_balances[...])", + "_balances[account] >= ori(Sum(_balances[...]))", + "_balances[account] > ori(Sum(_balances[...]))", + "_balances[account] == _totalSupply", + "_balances[account] >= _totalSupply", + "_balances[account] >= ori(_totalSupply)", + "_balances[account] > ori(_totalSupply)" + ] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_balances[recipient]) one of [0,5000000000000000000,100000000000000000000000,100000000000000000000,200000000000000000000000,5872550000000000000000,200000000000000000000,55000000000000000000]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 400000000040000000200000000", + "ori(Sum(_balances[...])) one of [400000000040000000200000000]", + "msg.value == 0", + "msg.value one of [0]", + "amount > 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 400000000040000000200000000", + "ori(_totalSupply) one of [400000000040000000200000000]", + "recipient != 0", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "postconditions": [ + "elem of _balances[...] is one of [400000000040000000200000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 400000000040000000200000000", + "Sum(_balances[...]) one of [400000000040000000200000000]", + "_totalSupply > 0", + "_totalSupply == 400000000040000000200000000", + "_totalSupply one of [400000000040000000200000000]", + "_balances[recipient] > 0", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])", + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) != _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]", + "_totalSupply == ori(_totalSupply)" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0" + ], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]", + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]", + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [200000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "_totalSupply > 0", + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= _totalSupply", + "_totalSupply >= ori(_totalSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "ori(Sum(_balances[...])) < _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07.json new file mode 100644 index 0000000..a14b8a9 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07.json @@ -0,0 +1,174 @@ +[ + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "_to != 0", + "_value > 0", + "msg.sender != 0", + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000", + "ori(Sum(balanceOf[...])) one of [100000000000000]", + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000", + "ori(totalSupply) one of [100000000000000]", + "ori(balanceOf[msg.sender]) > 0", + "ori(decimals) > 0", + "ori(decimals) == 6", + "ori(decimals) one of [6]", + "ori(balanceOf[_to]) < ori(Sum(balanceOf[...]))", + "ori(balanceOf[_to]) != ori(Sum(balanceOf[...]))", + "_value != ori(Sum(balanceOf[...]))", + "_value <= ori(balanceOf[msg.sender])", + "ori(Sum(balanceOf[...])) >= ori(balanceOf[msg.sender])" + ], + "postconditions": [ + "elem of balanceOf[...] is one of [100000000000000]", + "totalSupply > 0", + "totalSupply == 100000000000000", + "totalSupply one of [100000000000000]", + "balanceOf[_to] > 0", + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000", + "Sum(balanceOf[...]) one of [100000000000000]", + "decimals > 0", + "decimals == 6", + "decimals one of [6]", + "ori(balanceOf[_to]) <= balanceOf[_to]", + "ori(balanceOf[_to]) < Sum(balanceOf[...])", + "ori(balanceOf[_to]) != Sum(balanceOf[...])", + "balanceOf[msg.sender] != _value", + "balanceOf[msg.sender] < Sum(balanceOf[...])", + "balanceOf[msg.sender] != Sum(balanceOf[...])", + "balanceOf[msg.sender] < ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] != ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] <= ori(balanceOf[msg.sender])", + "totalSupply == ori(totalSupply)", + "_value <= balanceOf[_to]", + "_value != Sum(balanceOf[...])", + "balanceOf[_to] < Sum(balanceOf[...])", + "balanceOf[_to] != Sum(balanceOf[...])", + "balanceOf[_to] < ori(Sum(balanceOf[...]))", + "balanceOf[_to] != ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) >= ori(balanceOf[msg.sender])", + "decimals == ori(decimals)" + ], + "falsified_preconditions": [ + "ori(balanceOf[_to]) == 0", + "ori(balanceOf[_to]) <= _value", + "ori(balanceOf[_to]) < _value", + "ori(balanceOf[_to]) != _value", + "ori(balanceOf[_to]) <= ori(balanceOf[msg.sender])", + "ori(balanceOf[_to]) < ori(balanceOf[msg.sender])", + "ori(balanceOf[_to]) != ori(balanceOf[msg.sender])", + "_value < ori(balanceOf[msg.sender])", + "_value != ori(balanceOf[msg.sender])" + ], + "falsified_postconditions": [ + "balanceOf[msg.sender] > 0", + "ori(balanceOf[_to]) <= balanceOf[msg.sender]", + "ori(balanceOf[_to]) < balanceOf[msg.sender]", + "ori(balanceOf[_to]) != balanceOf[msg.sender]", + "ori(balanceOf[_to]) < balanceOf[_to]", + "ori(balanceOf[_to]) != balanceOf[_to]", + "balanceOf[msg.sender] >= _value", + "balanceOf[msg.sender] > _value", + "balanceOf[msg.sender] >= balanceOf[_to]", + "balanceOf[msg.sender] > balanceOf[_to]", + "balanceOf[msg.sender] != balanceOf[_to]", + "balanceOf[msg.sender] < ori(balanceOf[msg.sender])", + "balanceOf[msg.sender] != ori(balanceOf[msg.sender])", + "_value == balanceOf[_to]", + "_value >= balanceOf[_to]", + "balanceOf[_to] <= ori(balanceOf[msg.sender])", + "balanceOf[_to] < ori(balanceOf[msg.sender])", + "balanceOf[_to] != ori(balanceOf[msg.sender])", + "balanceOf[_to] - _value == ori(balanceOf[_to])", + "ori(balanceOf[msg.sender]) - _value == balanceOf[msg.sender]" + ] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000", + "ori(totalSupply) one of [100000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 6", + "ori(decimals) one of [6]", + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000", + "ori(Sum(balanceOf[...])) one of [100000000000000]" + ], + "postconditions": [ + "elem of balanceOf[...] is one of [100000000000000]", + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000", + "Sum(balanceOf[...]) one of [100000000000000]", + "decimals > 0", + "decimals == 6", + "decimals one of [6]", + "totalSupply > 0", + "totalSupply == 100000000000000", + "totalSupply one of [100000000000000]", + "ori(totalSupply) == totalSupply", + "ori(totalSupply) >= totalSupply", + "ori(totalSupply) <= totalSupply", + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))", + "decimals == ori(decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a.json new file mode 100644 index 0000000..167e04c --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a.json @@ -0,0 +1,282 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000", + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]", + "msg.sender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_allowances[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000", + "ori(_totalSupply) one of [4000000000000000000000000000]", + "spender != msg.sender", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])", + "value >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ], + "postconditions": [ + "elem of _balances[...] is one of [4000000000000000000000000000]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000", + "_totalSupply one of [4000000000000000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000", + "Sum(_balances[...]) one of [4000000000000000000000000000]", + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "elem of _allowances[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]", + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "value <= Sum(_allowances[msg.sender][...])", + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))", + "_totalSupply == ori(_totalSupply)", + "_allowances[msg.sender][spender] >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_balances[msg.sender]) > 0", + "amount > 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000", + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]", + "recipient != 0", + "msg.sender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000", + "ori(_totalSupply) one of [4000000000000000000000000000]", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "postconditions": [ + "elem of _balances[...] is one of [4000000000000000000000000000]", + "_balances[recipient] > 0", + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000", + "_totalSupply one of [4000000000000000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000", + "Sum(_balances[...]) one of [4000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) != _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_balances[recipient] < Sum(_balances[...])", + "_balances[recipient] != Sum(_balances[...])", + "_balances[recipient] >= ori(_balances[recipient])", + "_totalSupply == ori(_totalSupply)", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "Sum(_balances[...]) != ori(_balances[recipient])", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0", + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])", + "recipient != msg.sender" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "ori(_balances[msg.sender]) >= _balances[recipient]", + "ori(_balances[msg.sender]) > _balances[recipient]", + "ori(_balances[msg.sender]) != _balances[recipient]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "_balances[recipient] <= _balances[msg.sender]", + "_balances[recipient] < _balances[msg.sender]", + "_balances[recipient] != _balances[msg.sender]", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])", + "_balances[msg.sender] >= ori(_balances[recipient])", + "_balances[msg.sender] > ori(_balances[recipient])", + "_balances[msg.sender] != ori(_balances[recipient])" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000", + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000", + "ori(_totalSupply) one of [4000000000000000000000000000]", + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [4000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000", + "_totalSupply one of [4000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000", + "Sum(_balances[...]) one of [4000000000000000000000000000]", + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_totalSupply == ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54.json new file mode 100644 index 0000000..921b704 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54.json @@ -0,0 +1,407 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_allowed[msg.sender][spender]) == 0", + "ori(_allowed[msg.sender][spender]) one of [0]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "msg.sender != 0", + "ori(Sum(_allowed[msg.sender][...])) == 0", + "ori(Sum(_allowed[msg.sender][...])) one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "spender != 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(_allowed[msg.sender][spender]) != value", + "ori(_allowed[msg.sender][spender]) == ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) >= ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))", + "value > ori(Sum(_allowed[msg.sender][...]))", + "value != ori(Sum(_allowed[msg.sender][...]))" + ], + "postconditions": [ + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_allowed[msg.sender][...]) > 0", + "Sum(_allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(_allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "elem of _balances[...] is one of [993060750000000000000000000000]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_allowed[msg.sender][spender] != ori(_allowed[msg.sender][spender])", + "_allowed[msg.sender][spender] == value", + "_allowed[msg.sender][spender] == Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] >= Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] <= Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] > ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] != ori(Sum(_allowed[msg.sender][...]))", + "_totalSupply == ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "value == Sum(_allowed[msg.sender][...])", + "value >= Sum(_allowed[msg.sender][...])", + "value <= Sum(_allowed[msg.sender][...])", + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "_lastTokenSupply == ori(_lastTokenSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_balances[msg.sender]) > 0", + "value > 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(_balances[to]) one of [0,1485000000000000000000000000,4950000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "to != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_balances[msg.sender]) >= value", + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_balances[to])", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))", + "value != ori(_balances[to])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_totalSupply) > ori(_balances[to])", + "ori(_totalSupply) != ori(_balances[to])", + "ori(Sum(_balances[...])) != ori(_balances[to])" + ], + "postconditions": [ + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [993732500000000000000000000000]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_balances[to] > 0", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply != value", + "_totalSupply != ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]", + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])", + "_burnStopAmount == ori(_burnStopAmount)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]", + "value < Sum(_balances[...])", + "value != Sum(_balances[...])", + "value != _balances[msg.sender]", + "value != _balances[to]", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_totalSupply) > _balances[to]", + "ori(_totalSupply) != _balances[to]", + "Sum(_balances[...]) != _balances[msg.sender]", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) != _balances[to]", + "Sum(_balances[...]) != ori(_balances[to])", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "_balances[msg.sender] != _balances[to]", + "_balances[msg.sender] >= ori(_balances[to])", + "ori(Sum(_balances[...])) != _balances[to]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_balances[to] != ori(_balances[to])", + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(_balances[to]) == 0", + "ori(_balances[msg.sender]) > value", + "ori(_balances[msg.sender]) != value", + "value >= ori(_balances[to])", + "value > ori(_balances[to])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "value <= _balances[msg.sender]", + "value < _balances[msg.sender]", + "value >= _balances[to]", + "value > _balances[to]", + "_balances[msg.sender] >= _balances[to]", + "_balances[msg.sender] > _balances[to]", + "_balances[msg.sender] > ori(_balances[to])", + "_balances[msg.sender] != ori(_balances[to])" + ] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [993732500000000000000000000000]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply <= ori(Sum(_balances[...]))", + "_burnStopAmount == ori(_burnStopAmount)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_totalSupply) >= Sum(_balances[...])", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "_lastTokenSupply == ori(_lastTokenSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8.json new file mode 100644 index 0000000..cdb86d4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8.json @@ -0,0 +1,430 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFrom(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFrom(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(paused) == false", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000", + "ori(_totalSupply) one of [3000000000000000000000000000]", + "recipient != 0", + "amount > 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000", + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]", + "ori(_owner) != 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_balances[msg.sender]) > 0", + "msg.sender != 0", + "ori(_pendingowner) == 0", + "ori(Sum(_locked_balances[...])) == 0", + "ori(Sum(_locked_balances[...])) one of [0]", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))", + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])" + ], + "postconditions": [ + "elem of _locked_balances[...] is one of [0]", + "elem of _locked_balances[...] is one of []", + "Sum(_locked_balances[...]) == 0", + "Sum(_locked_balances[...]) one of [0]", + "_balances[recipient] > 0", + "_owner != 0", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000", + "_totalSupply one of [3000000000000000000000000000]", + "elem of _balances[...] is one of [3000000000000000000000000000]", + "paused == false", + "_pendingowner == 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000", + "Sum(_balances[...]) one of [3000000000000000000000000000]", + "ori(paused) == paused", + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] <= ori(Sum(_balances[...]))", + "_balances[recipient] <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_owner == ori(_owner)", + "_decimals == ori(_decimals)", + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_pendingowner) == _pendingowner" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) <= ori(_balances[msg.sender])" + ], + "falsified_postconditions": [ + "_balances[recipient] <= ori(_balances[msg.sender])", + "ori(_balances[recipient]) <= _balances[msg.sender]" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFromLocked(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFromLocked(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockTokenWhole(addresses)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockTokenWhole(addresses)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unlockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unlockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(paused) == false", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000", + "ori(_totalSupply) one of [3000000000000000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000", + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]", + "ori(_owner) != 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(Sum(_locked_balances[...])) == 0", + "ori(Sum(_locked_balances[...])) one of [0]", + "ori(_pendingowner) == 0", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(Sum(_balances[...])) != ori(Sum(_locked_balances[...]))", + "ori(_owner) != ori(_pendingowner)" + ], + "postconditions": [ + "elem of _locked_balances[...] is one of [0]", + "elem of _locked_balances[...] is one of []", + "Sum(_locked_balances[...]) == 0", + "Sum(_locked_balances[...]) one of [0]", + "_owner != 0", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000", + "Sum(_balances[...]) one of [3000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000", + "_totalSupply one of [3000000000000000000000000000]", + "elem of _balances[...] is one of [3000000000000000000000000000]", + "paused == false", + "_pendingowner == 0", + "ori(paused) == paused", + "Sum(_locked_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) < Sum(_balances[...])", + "Sum(_locked_balances[...]) != Sum(_balances[...])", + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) == _totalSupply", + "_owner == ori(_owner)", + "_owner != _pendingowner", + "_owner != ori(_pendingowner)", + "_decimals == ori(_decimals)", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) != ori(Sum(_locked_balances[...]))", + "ori(_owner) != _pendingowner", + "_pendingowner == ori(_pendingowner)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42.json new file mode 100644 index 0000000..02acc28 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42.json @@ -0,0 +1,286 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000", + "ori(_totalSupply) one of [1000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 5", + "ori(_decimals) one of [5]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000", + "ori(Sum(_balances[...])) one of [1000000000000000]", + "to != 0", + "ori(_paused) == false", + "value > 0", + "msg.sender != 0" + ], + "postconditions": [ + "_decimals > 0", + "_decimals == 5", + "_decimals one of [5]", + "_paused == false", + "elem of _balances[...] is one of [1000000000000000]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000", + "_totalSupply one of [1000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000", + "Sum(_balances[...]) one of [1000000000000000]", + "_decimals == ori(_decimals)", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_paused == ori(_paused)", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_paused) == false", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000", + "ori(_totalSupply) one of [1000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000", + "ori(Sum(_balances[...])) one of [1000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 5", + "ori(_decimals) one of [5]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000", + "_totalSupply one of [1000000000000000]", + "elem of _balances[...] is one of [1000000000000000]", + "_decimals > 0", + "_decimals == 5", + "_decimals one of [5]", + "_paused == false", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000", + "Sum(_balances[...]) one of [1000000000000000]", + "_totalSupply == ori(_totalSupply)", + "_totalSupply == ori(Sum(_balances[...]))", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "ori(_paused) == _paused", + "_decimals == ori(_decimals)", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7.json new file mode 100644 index 0000000..a4c5fd1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7.json @@ -0,0 +1,197 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "destroySmartContract(_to)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "destroySmartContract(_to)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000", + "ori(Sum(balances[...])) one of [7000000000000000000000000]", + "ori(balances[to]) one of [0,124700000000000000000000,374700000000000000000000,437200000000000000000000,499700000000000000000000,749700000000000000000000]", + "to != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000", + "ori(_totalSupply) one of [7000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(balances[msg.sender]) > 0", + "ori(owner) != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "tokens > 0", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) != tokens", + "ori(balances[to]) != ori(balances[msg.sender])", + "ori(balances[to]) != tokens", + "ori(balances[msg.sender]) >= tokens" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000", + "_totalSupply one of [7000000000000000000000000]", + "owner != 0", + "elem of balances[...] is one of [7000000000000000000000000]", + "balances[to] > 0", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000", + "Sum(balances[...]) one of [7000000000000000000000000]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "ori(Sum(balances[...])) != balances[to]", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(balances[to]) != balances[msg.sender]", + "ori(balances[to]) < balances[to]", + "ori(balances[to]) != balances[to]", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "balances[msg.sender] != ori(balances[msg.sender])", + "balances[msg.sender] != balances[to]", + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])", + "decimals == ori(decimals)", + "_totalSupply == ori(_totalSupply)", + "ori(balances[msg.sender]) != balances[to]", + "ori(balances[msg.sender]) <= Sum(balances[...])", + "owner == ori(owner)", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])", + "balances[to] >= tokens", + "Sum(balances[...]) != tokens", + "tokens + ori(balances[to]) == balances[to]", + "tokens + balances[msg.sender] == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[to]) <= ori(balances[msg.sender])", + "ori(balances[to]) < ori(balances[msg.sender])", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[msg.sender]) > tokens", + "ori(balances[msg.sender]) != tokens" + ], + "falsified_postconditions": [ + "balances[msg.sender] > 0", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[to]) < balances[msg.sender]", + "balances[msg.sender] >= balances[to]", + "balances[msg.sender] > balances[to]", + "balances[msg.sender] >= tokens", + "balances[msg.sender] > tokens", + "balances[msg.sender] != tokens", + "ori(balances[msg.sender]) >= balances[to]", + "ori(balances[msg.sender]) > balances[to]", + "balances[to] == tokens", + "balances[to] <= tokens" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000", + "ori(_totalSupply) one of [7000000000000000000000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000", + "ori(Sum(balances[...])) one of [7000000000000000000000000]", + "ori(owner) != 0" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000", + "_totalSupply one of [7000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000", + "Sum(balances[...]) one of [7000000000000000000000000]", + "elem of balances[...] is one of [7000000000000000000000000]", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "_totalSupply == ori(_totalSupply)", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca.json new file mode 100644 index 0000000..0504629 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca.json @@ -0,0 +1,654 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) one of [1500000000000000000000000,720000000000000000000000000]", + "ori(_allowed[msg.sender][spender]) == 0", + "ori(_allowed[msg.sender][spender]) one of [0]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]", + "ori(Sum(_allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]", + "ori(_allowed[msg.sender][spender]) != value", + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))", + "value >= ori(Sum(_allowed[msg.sender][...]))" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_allowed[msg.sender][...]) > 0", + "Sum(_allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]", + "elem of _balances[...] is one of [997200000000000000000000000]", + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount one of [1500000000000000000000000,720000000000000000000000000]", + "elem of _allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]", + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) < _allowed[msg.sender][spender]", + "ori(_allowed[msg.sender][spender]) != _allowed[msg.sender][spender]", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "Sum(_allowed[msg.sender][...]) >= _allowed[msg.sender][spender]", + "Sum(_allowed[msg.sender][...]) >= value", + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] == value", + "_allowed[msg.sender][spender] >= ori(Sum(_allowed[msg.sender][...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_totalSupply == ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addToBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "account != 0", + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 1500000000000000000000000", + "ori(maxTxAmount) one of [1500000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]", + "ori(_isBlackListed[account]) == false", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000000000000000", + "ori(Sum(_balances[...])) one of [1000000000000000000000000000]", + "msg.sender == ori(currentOwner)" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000000000000000", + "Sum(_balances[...]) one of [1000000000000000000000000000]", + "elem of _balances[...] is one of [1000000000000000000000000000]", + "currentOwner != 0", + "_isBlackListed[account] == true", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount == 1500000000000000000000000", + "maxTxAmount one of [1500000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "msg.sender == currentOwner", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_isBlackListed[account] != ori(_isBlackListed[account])", + "_totalSupply == ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addToBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeFromBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeFromBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 300000000000000000000000000", + "ori(maxTxAmount) one of [300000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_balances[to]) == 0", + "ori(_balances[to]) one of [0]", + "ori(_balances[msg.sender]) > 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "value > 0", + "value one of [10000000000000000000000000,3000000000000000000000000,7000000000000000000000000]", + "ori(_totalSupply) > 0", + "msg.value == 0", + "msg.value one of [0]", + "to != 0", + "ori(Sum(_balances[...])) > 0", + "ori(maxTxAmount) > ori(_balances[to])", + "ori(maxTxAmount) != ori(_balances[to])", + "ori(maxTxAmount) < ori(_balances[msg.sender])", + "ori(maxTxAmount) != ori(_balances[msg.sender])", + "ori(maxTxAmount) != value", + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)", + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))", + "msg.sender != to", + "ori(_balances[to]) < ori(_balances[msg.sender])", + "ori(_balances[to]) != ori(_balances[msg.sender])", + "ori(_balances[to]) != value", + "ori(_balances[to]) != ori(_totalSupply)", + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != value", + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_balances[msg.sender] > 0", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [998970000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "_balances[to] > 0", + "_balances[to] one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000]", + "maxTxAmount > 0", + "maxTxAmount == 300000000000000000000000000", + "maxTxAmount one of [300000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_balances[msg.sender] != ori(maxTxAmount)", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] != ori(_balances[to])", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] != _totalSupply", + "_balances[msg.sender] != value", + "_balances[msg.sender] != _balances[to]", + "_balances[msg.sender] != ori(_totalSupply)", + "_balances[msg.sender] != maxTxAmount", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])", + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply", + "ori(maxTxAmount) > _balances[to]", + "ori(maxTxAmount) != _balances[to]", + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) != ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[msg.sender])", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) != value", + "Sum(_balances[...]) != _balances[to]", + "Sum(_balances[...]) != ori(_totalSupply)", + "Sum(_balances[...]) != maxTxAmount", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "ori(_balances[to]) != _totalSupply", + "ori(_balances[to]) < _balances[to]", + "ori(_balances[to]) != _balances[to]", + "ori(_balances[to]) != maxTxAmount", + "ori(_balances[msg.sender]) != _totalSupply", + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]", + "ori(_balances[msg.sender]) != maxTxAmount", + "_totalSupply != value", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]", + "_totalSupply != ori(_totalSupply)", + "_totalSupply != maxTxAmount", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "_burnStopAmount == ori(_burnStopAmount)", + "value > _balances[to]", + "value != _balances[to]", + "value < maxTxAmount", + "value != maxTxAmount", + "_balances[to] != ori(_totalSupply)", + "_balances[to] != maxTxAmount", + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))", + "ori(_totalSupply) != maxTxAmount", + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))", + "value + _balances[msg.sender] == ori(_balances[msg.sender])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMaxTxAmount(theAmount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "theAmount > 0", + "theAmount one of [300000000,720000000,1500000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]", + "msg.sender == ori(currentOwner)" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]", + "elem of _balances[...] is one of [997200000000000000000000000]", + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "ori(maxTxAmount) != maxTxAmount", + "msg.sender == currentOwner", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_totalSupply == ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMaxTxAmount(theAmount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)", + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [998970000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])", + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) != maxTxAmount", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply != maxTxAmount", + "_totalSupply <= ori(Sum(_balances[...]))", + "_burnStopAmount == ori(_burnStopAmount)", + "ori(_totalSupply) != maxTxAmount", + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply == ori(Sum(_balances[...]))", + "_totalSupply >= ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xc382e04099a435439725bb40647e2b32dc136806.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xc382e04099a435439725bb40647e2b32dc136806.json new file mode 100644 index 0000000..5c8e14a --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xc382e04099a435439725bb40647e2b32dc136806.json @@ -0,0 +1,277 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000", + "ori(_totalSupply) one of [100000000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]", + "ori(Sum(_allowances[msg.sender][...])) == 0", + "ori(Sum(_allowances[msg.sender][...])) one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "spender != msg.sender", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])", + "value > ori(Sum(_allowances[msg.sender][...]))", + "value != ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) == ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ], + "postconditions": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]", + "elem of _balances[...] is one of [0,15000000000000000000000000000000,30000000000000000000000000000000,500000000000000000000000000000,200000000000000000000000000000,20000000000000000000000000000000,2605000000000000000000000000000,10000000000000000000000000000,100000000000000000000000000000,10000000000000000000000000000000,25000000000000000000000000000]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000", + "_totalSupply one of [100000000000000000000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000000000000000]", + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])", + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) != ori(_allowances[msg.sender][spender])", + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) == _allowances[msg.sender][spender]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_balances[msg.sender]) > 0", + "recipient != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000", + "ori(_totalSupply) one of [100000000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]", + "amount > 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_balances[recipient]) one of [0,20000000000000000000000000000000]", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_balances[recipient])", + "recipient != msg.sender", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "postconditions": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000", + "_totalSupply one of [100000000000000000000000000000000]", + "_balances[recipient] > 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000000000000000]", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "_balances[msg.sender] != _balances[recipient]", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "_balances[recipient] != ori(_balances[recipient])", + "_balances[recipient] <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0" + ], + "falsified_postconditions": [ + "_balances[msg.sender] >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) >= _balances[recipient]" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000", + "ori(_totalSupply) one of [100000000000000000000000000000000]", + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000", + "_totalSupply one of [100000000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000000000000000]", + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_totalSupply == ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079.json new file mode 100644 index 0000000..460394d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079.json @@ -0,0 +1,336 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_balances[msg.sender]) > 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "to != 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "msg.sender != 0", + "ori(_balances[to]) one of [0,519750000000000000000,247500000000000000000000,7920000000000000000000,2549250000000000000000]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000", + "ori(_lastTokenSupply) one of [100000000000000000000000000]", + "value <= ori(_balances[msg.sender])", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_balances[to])", + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(_totalSupply)", + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000", + "_lastTokenSupply one of [100000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [101004337700000000000000000]", + "_totalSupply != value", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply <= ori(Sum(_balances[...]))", + "basePercent == ori(basePercent)", + "_lastTokenSupply == ori(_lastTokenSupply)", + "value != _balances[msg.sender]", + "value < Sum(_balances[...])", + "value != Sum(_balances[...])", + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[to]", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount", + "_decimals == ori(_decimals)", + "_balances[msg.sender] != _balances[to]", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] != ori(_totalSupply)", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "_balances[to] < Sum(_balances[...])", + "_balances[to] != Sum(_balances[...])", + "_balances[to] >= ori(_balances[to])", + "_balances[to] != ori(_totalSupply)", + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(_balances[to])", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ], + "falsified_preconditions": [ + "value > 0", + "ori(_balances[to]) == 0", + "value < ori(_balances[msg.sender])", + "value != ori(_balances[msg.sender])", + "value >= ori(_balances[to])", + "value > ori(_balances[to])", + "value != ori(_balances[to])", + "ori(_balances[msg.sender]) >= ori(_balances[to])", + "ori(_balances[msg.sender]) > ori(_balances[to])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "_balances[to] > 0", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "value <= _balances[msg.sender]", + "value < _balances[msg.sender]", + "value >= _balances[to]", + "value > _balances[to]", + "value != _balances[to]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "ori(_balances[msg.sender]) >= _balances[to]", + "ori(_balances[msg.sender]) > _balances[to]", + "_balances[msg.sender] >= _balances[to]", + "_balances[msg.sender] > _balances[to]", + "_balances[msg.sender] >= ori(_balances[to])", + "_balances[msg.sender] > ori(_balances[to])", + "_balances[msg.sender] != ori(_balances[to])", + "_balances[to] > ori(_balances[to])", + "_balances[to] != ori(_balances[to])", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000", + "ori(_lastTokenSupply) one of [100000000000000000000000000]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000", + "_lastTokenSupply one of [100000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [101004337700000000000000000]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply <= ori(Sum(_balances[...]))", + "basePercent == ori(basePercent)", + "_lastTokenSupply == ori(_lastTokenSupply)", + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount", + "_decimals == ori(_decimals)", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e.json new file mode 100644 index 0000000..f68ac17 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e.json @@ -0,0 +1,357 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(Sum(_allowances[msg.sender][...])) == 0", + "ori(Sum(_allowances[msg.sender][...])) one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 9", + "ori(_decimals) one of [9]", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "spender != msg.sender", + "ori(Sum(_allowances[msg.sender][...])) != value", + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ], + "postconditions": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000]", + "elem of _balances[...] is one of [100000000000000000000]", + "elem of _balances[...] is one of [1000000000000000,3169849838330000000,39000000000000,12000000000000000,0,420000000000000,123930000000000,30000000000000,330000000000000,60000000000000,438872000000000,80050000000,208080000000000,900000000000000,50000000000,112410000000000,96800000000000000000,10000000,440544000000000,1740000000000000,750000000000000,2104500000000000,135556000000000,1124100000000000,75804000000000,410495670000000,80000000000,50000000000000,210000000000000,270050010000000,119659930000000,150000000000000,36870000000000,90000000000000,1050000000000000,1035000000000000,75000000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000", + "_totalSupply one of [100000000000000000000]", + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 9", + "_decimals one of [9]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] == value", + "_allowances[msg.sender][spender] != ori(_allowances[msg.sender][spender])", + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "amount > 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 9", + "ori(_decimals) one of [9]", + "msg.value == 0", + "msg.value one of [0]", + "recipient != 0", + "ori(_balances[msg.sender]) > 0", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "recipient != msg.sender", + "ori(_balances[msg.sender]) != ori(_balances[recipient])", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000]", + "elem of _balances[...] is one of [100000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000", + "_totalSupply one of [100000000000000000000]", + "_balances[recipient] > 0", + "_decimals > 0", + "_decimals == 9", + "_decimals one of [9]", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] != _balances[recipient]", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "Sum(_balances[...]) >= ori(_balances[msg.sender])", + "Sum(_balances[...]) != ori(_balances[recipient])", + "Sum(_balances[...]) != _balances[recipient]", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]", + "_balances[recipient] < ori(Sum(_balances[...]))", + "_balances[recipient] != ori(Sum(_balances[...]))" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0", + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "_balances[msg.sender] >= ori(_balances[recipient])", + "_balances[msg.sender] > ori(_balances[recipient])", + "_balances[msg.sender] != ori(_balances[recipient])", + "_balances[msg.sender] >= _balances[recipient]", + "_balances[msg.sender] > _balances[recipient]", + "ori(_balances[msg.sender]) >= _balances[recipient]", + "ori(_balances[msg.sender]) > _balances[recipient]", + "ori(_balances[msg.sender]) != _balances[recipient]" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferMinterRole(newMinter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferMinterRole(newMinter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9", + "ori(_decimals) one of [9]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000]", + "elem of _balances[...] is one of [100000000000000000000]", + "_decimals > 0", + "_decimals == 9", + "_decimals one of [9]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000", + "_totalSupply one of [100000000000000000000]", + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) == _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8.json new file mode 100644 index 0000000..e549f46 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8.json @@ -0,0 +1,217 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "tokens > 0", + "tokens == 1214154393080207565488897145207363713379238199016", + "tokens one of [1214154393080207565488897145207363713379238199016]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(allowed[msg.sender][...])) == 0", + "ori(Sum(allowed[msg.sender][...])) one of [0]", + "spender != 0", + "msg.sender != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000", + "ori(_totalSupply) one of [1000000000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 8", + "ori(decimals) one of [8]", + "ori(allowed[msg.sender][spender]) != tokens", + "ori(allowed[msg.sender][spender]) == ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) >= ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))", + "tokens > ori(Sum(allowed[msg.sender][...]))", + "tokens != ori(Sum(allowed[msg.sender][...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000", + "_totalSupply one of [1000000000000000000]", + "elem of balances[...] is one of [1000000000000000000]", + "elem of balances[...] is one of [0,42155608000000,7827168000000,26727712000000,2364184000000,14505336000000,39866984000000,26200000000000,1991093640000000,60000000000,200000000000000,223083670000000,4856418504000000,2886756805000000,733387377300000,466343312000000,89562000000000,614258317000000,115335000000000,293365795000000,55321433000000,10100000000000,808584315377000000,67977665000000,7549993000000,3309113000000,2321935681000000,50633353000000,13500177000000,23370833000000,2100000000000,822900562000000,362332495000000,230490600000000,494315646000000,234663856000000,568993250000000,1056758701000000,955539526000000,2290247800000000,816436753000000,1500000000000000,287186755000000,35912634000000,1475154770000000,8253082000000,4196890000000,210344090000000,2581883922000000,85196714000000,408071641000000,1308507218000000,1365056466000000,907453248000000,253334180000000,1634666760000000,1650101000000000,100000000000000,3552133331000000,2147174090000000,1819394147000000,287238396000000,119538379000000,42432787000000,1905260435000000,1451707355000000,23514979000000,25595051000000,89326155000000,117578331000000,7103883000000,1900128000000,18888800000000,243285700000000,1916403000000,3298409047000000,4212424891000000,9126009837000000,1753730950000000,1498000000000000,814045727000000,1896835000000,1105069134000000,599482190000000,1740028000000,301265220000000,8596628000000,32234460000000,315772404000000,268733620000000,719812020000000,36880755700000000,310833676000000,250440116000000,2160100000000,2609636221000000,3002439449000000,3523832342000000,1600000000000000,2326235055000000,506668360000000,1933196460000000,274876741000000,10000000000,1231918352000000,42995981000000,1876942246000000,1015929560000000,2226634250000000,2454909000000,1967529221000000,252862285000000,5670605000000,355760661000000,3118813000000,562571485000000,71098725000000,100000000000,150144416000000,20100000000000,186156392000000,243145064000000,3077644954000000,1179432137000000,1375765499000000,250245012000000,2500000000000,1379680451000000,1501362421000000,34207198000000,7751278000000,809717142000000,2453660118000000,216910870000000,36701942000000,9379382000000,2443859382000000,3000000000000,511371390000000,2495907929000000,1263531812000000,1691474109000000,1169134166000000,2000000000000,5000000000,571697800000000,3563600000000,47000000000000,2741947060000000,25185204000000,38577000000,1899900000000,1200000000000,1881079000000,40680695000000,59926463000000,218139263000000,2995575000000,37517527000000,4300000000000,856864703000000,5520682479000000,1807288095000000,1857587524000000,9600000000000,263852200000000,4148000000000000,172345459000000,1669293427000000,2344197414700000,3212593467000000,532420717000000,341006648000000,394034232000000,2909613777000000,3520287800000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000", + "Sum(balances[...]) one of [1000000000000000000]", + "elem of allowed[msg.sender][...] is one of [1214154393080207565488897145207363713379238199016]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 1214154393080207565488897145207363713379238199016", + "Sum(allowed[msg.sender][...]) one of [1214154393080207565488897145207363713379238199016]", + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 1214154393080207565488897145207363713379238199016", + "allowed[msg.sender][spender] one of [1214154393080207565488897145207363713379238199016]", + "decimals > 0", + "decimals == 8", + "decimals one of [8]", + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) < allowed[msg.sender][spender]", + "ori(allowed[msg.sender][spender]) != allowed[msg.sender][spender]", + "tokens == Sum(allowed[msg.sender][...])", + "tokens >= Sum(allowed[msg.sender][...])", + "tokens <= Sum(allowed[msg.sender][...])", + "tokens == allowed[msg.sender][spender]", + "tokens >= allowed[msg.sender][spender]", + "tokens <= allowed[msg.sender][spender]", + "_totalSupply == ori(_totalSupply)", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(allowed[msg.sender][...]) == allowed[msg.sender][spender]", + "Sum(allowed[msg.sender][...]) != ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))", + "decimals == ori(decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(balances[msg.sender]) > 0", + "msg.sender != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000", + "ori(_totalSupply) one of [1000000000000000000]", + "to != 0", + "ori(decimals) > 0", + "ori(decimals) == 8", + "ori(decimals) one of [8]", + "tokens <= ori(Sum(balances[...]))", + "tokens <= ori(balances[msg.sender])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000", + "_totalSupply one of [1000000000000000000]", + "elem of balances[...] is one of [1000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000", + "Sum(balances[...]) one of [1000000000000000000]", + "decimals > 0", + "decimals == 8", + "decimals one of [8]", + "tokens <= Sum(balances[...])", + "tokens <= balances[to]", + "_totalSupply == ori(_totalSupply)", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= balances[to]", + "Sum(balances[...]) >= ori(balances[msg.sender])", + "Sum(balances[...]) != ori(balances[to])", + "Sum(balances[...]) != balances[msg.sender]", + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "balances[to] >= ori(balances[to])", + "ori(balances[msg.sender]) >= balances[msg.sender]", + "decimals == ori(decimals)" + ], + "falsified_preconditions": [ + "tokens > 0", + "tokens >= ori(balances[to])", + "tokens > ori(balances[to])", + "tokens != ori(balances[to])", + "ori(balances[msg.sender]) >= ori(balances[to])", + "ori(balances[msg.sender]) > ori(balances[to])", + "ori(balances[msg.sender]) != ori(balances[to])" + ], + "falsified_postconditions": [ + "balances[to] > 0", + "tokens != balances[msg.sender]", + "balances[to] > ori(balances[to])", + "balances[to] != ori(balances[to])", + "balances[to] != balances[msg.sender]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "ori(balances[to]) + tokens == balances[to]", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 8", + "ori(decimals) one of [8]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000", + "ori(_totalSupply) one of [1000000000000000000]" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000", + "_totalSupply one of [1000000000000000000]", + "elem of balances[...] is one of [1000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000", + "Sum(balances[...]) one of [1000000000000000000]", + "decimals > 0", + "decimals == 8", + "decimals one of [8]", + "_totalSupply == ori(_totalSupply)", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c.json new file mode 100644 index 0000000..f4796db --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c.json @@ -0,0 +1,223 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000", + "ori(_totalSupply) one of [250000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000", + "ori(Sum(balances[...])) one of [250000000000000000000000000]", + "ori(Sum(allowed[msg.sender][...])) == 0", + "ori(Sum(allowed[msg.sender][...])) one of [0]", + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "msg.sender != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "tokens > 0", + "tokens == 116143000000000000000000", + "tokens one of [116143000000000000000000]", + "spender != 0", + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) != tokens", + "ori(allowed[msg.sender][spender]) != tokens" + ], + "postconditions": [ + "elem of allowed[msg.sender][...] is one of [116143000000000000000000]", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 116143000000000000000000", + "allowed[msg.sender][spender] one of [116143000000000000000000]", + "elem of balances[...] is one of [250000000000000000000000000]", + "elem of balances[...] is one of [0,100000000000000000000000,249676860000000000000000000,1140000000000000000000,10000000000000000000000,12000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000", + "_totalSupply one of [250000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000", + "Sum(balances[...]) one of [250000000000000000000000000]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 116143000000000000000000", + "Sum(allowed[msg.sender][...]) one of [116143000000000000000000]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "decimals == ori(decimals)", + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] == tokens", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])", + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) == tokens" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000", + "ori(_totalSupply) one of [250000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000", + "ori(Sum(balances[...])) one of [250000000000000000000000000]", + "msg.sender != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "to != 0", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) != tokens", + "ori(balances[to]) != ori(balances[msg.sender])", + "ori(balances[msg.sender]) >= tokens" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "elem of balances[...] is one of [250000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000", + "_totalSupply one of [250000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000", + "Sum(balances[...]) one of [250000000000000000000000000]", + "balances[to] > 0", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(Sum(balances[...])) != balances[to]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "decimals == ori(decimals)", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "ori(balances[to]) <= balances[to]", + "Sum(balances[...]) >= ori(balances[msg.sender])", + "Sum(balances[...]) != balances[to]", + "Sum(balances[...]) != tokens", + "Sum(balances[...]) != balances[msg.sender]", + "ori(balances[msg.sender]) >= balances[msg.sender]", + "balances[to] >= tokens", + "balances[to] != balances[msg.sender]", + "tokens + ori(balances[to]) == balances[to]", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[msg.sender]) > 0", + "tokens > 0", + "ori(balances[to]) <= ori(balances[msg.sender])", + "ori(balances[to]) < ori(balances[msg.sender])", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[to]) != tokens" + ], + "falsified_postconditions": [ + "ori(balances[to]) < balances[to]", + "ori(balances[to]) != balances[to]", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[msg.sender]) >= balances[to]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "balances[to] == tokens", + "balances[to] <= tokens", + "tokens != balances[msg.sender]" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000", + "ori(_totalSupply) one of [250000000000000000000000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000", + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ], + "postconditions": [ + "elem of balances[...] is one of [250000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000", + "_totalSupply one of [250000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000", + "Sum(balances[...]) one of [250000000000000000000000000]", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "_totalSupply == ori(_totalSupply)", + "Sum(balances[...]) == ori(Sum(balances[...]))" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc.json new file mode 100644 index 0000000..ed657bb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc.json @@ -0,0 +1,283 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000", + "ori(_totalSupply) one of [100000000000]", + "ori(Sum(_allowances[msg.sender][...])) == 0", + "ori(Sum(_allowances[msg.sender][...])) one of [0]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000", + "ori(Sum(_balances[...])) one of [100000000000]", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "spender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "value > 0", + "value one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) != value", + "msg.sender != spender", + "ori(_allowances[msg.sender][spender]) != value" + ], + "postconditions": [ + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000]", + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply == 100000000000", + "_totalSupply one of [100000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000", + "Sum(_balances[...]) one of [100000000000]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of _balances[...] is one of [100000000000]", + "elem of _balances[...] is one of [0,100000000000]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_decimals == ori(_decimals)", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] == value", + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])", + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000", + "ori(_totalSupply) one of [100000000000]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000", + "ori(Sum(_balances[...])) one of [100000000000]", + "msg.value == 0", + "msg.value one of [0]", + "amount > 0", + "amount == 100000000000", + "amount one of [100000000000]", + "recipient != 0", + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000", + "ori(_balances[msg.sender]) one of [100000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(_balances[recipient]) == 0", + "ori(_balances[recipient]) one of [0]", + "msg.sender != recipient", + "ori(Sum(_balances[...])) == ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ], + "postconditions": [ + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "_balances[msg.sender] == 0", + "_balances[msg.sender] one of [0]", + "elem of _balances[...] is one of [100000000000]", + "elem of _balances[...] is one of [0,100000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000", + "_totalSupply one of [100000000000]", + "_balances[recipient] > 0", + "_balances[recipient] == 100000000000", + "_balances[recipient] one of [100000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000", + "Sum(_balances[...]) one of [100000000000]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_decimals == ori(_decimals)", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) == _balances[recipient]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_balances[msg.sender] != _balances[recipient]", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] == ori(_balances[recipient])", + "_balances[recipient] == ori(_balances[msg.sender])", + "_balances[recipient] == Sum(_balances[...])", + "_balances[recipient] >= Sum(_balances[...])", + "_balances[recipient] <= Sum(_balances[...])", + "_balances[recipient] != ori(_balances[recipient])", + "ori(_balances[msg.sender]) == Sum(_balances[...])", + "ori(_balances[msg.sender]) >= Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000", + "ori(_totalSupply) one of [100000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000", + "ori(Sum(_balances[...])) one of [100000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000", + "Sum(_balances[...]) one of [100000000000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "_totalSupply > 0", + "_totalSupply == 100000000000", + "_totalSupply one of [100000000000]", + "elem of _balances[...] is one of [100000000000]", + "elem of _balances[...] is one of [0,100000000000]", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "_decimals == ori(_decimals)", + "ori(Sum(_balances[...])) == _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json new file mode 100644 index 0000000..ac1e81f --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json @@ -0,0 +1,486 @@ +[ + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(unfrozen) == false" + ], + "after_preds": [ + "ori(unfrozen) == false" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "msg.sender == ori(owner)" + ], + "after_preds": [ + "msg.sender == ori(owner)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ], + "after_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ], + "after_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "unfrozen == true" + ], + "after_preds": [ + "unfrozen == true" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "msg.sender == owner" + ], + "after_preds": [ + "msg.sender == owner" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ], + "after_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ] + }, + { + "before_preds": [ + "unfrozen != ori(unfrozen)" + ], + "after_preds": [ + "unfrozen != ori(unfrozen)" + ] + }, + { + "before_preds": [ + "ori(owner) == owner" + ], + "after_preds": [ + "ori(owner) == owner" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_value > 0" + ], + "after_preds": [ + "_value > 0" + ] + }, + { + "before_preds": [ + "_to != 0" + ], + "after_preds": [ + "_to != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(unfrozen) == true" + ], + "after_preds": [ + "ori(unfrozen) == true" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ], + "after_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ], + "after_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "unfrozen == true" + ], + "after_preds": [ + "unfrozen == true" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ], + "after_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ] + }, + { + "before_preds": [ + "unfrozen == ori(unfrozen)" + ], + "after_preds": [ + "unfrozen == ori(unfrozen)" + ] + }, + { + "before_preds": [ + "ori(owner) == owner" + ], + "after_preds": [ + "ori(owner) == owner" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ], + "after_preds": [ + "ori(totalSupply_) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ], + "after_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ] + }, + { + "before_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ], + "after_preds": [ + "totalSupply_ one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "unfrozen == true" + ], + "after_preds": [ + "unfrozen == true" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [5000000000000000000000000]" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ], + "after_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ] + }, + { + "before_preds": [ + "ori(owner) == owner" + ], + "after_preds": [ + "ori(owner) == owner" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-kept.json new file mode 100644 index 0000000..43e603f --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-kept.json @@ -0,0 +1,350 @@ +[ + { + "before_preds": [ + "ori(_paused) == false" + ], + "after_preds": [ + "ori(_paused) == false" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_paused == false" + ], + "after_preds": [ + "_paused == false" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [10000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [10000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_paused == ori(_paused)" + ], + "after_preds": [ + "_paused == ori(_paused)" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_paused) == false" + ], + "after_preds": [ + "ori(_paused) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_paused == false" + ], + "after_preds": [ + "_paused == false" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [10000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [10000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_paused == ori(_paused)" + ], + "after_preds": [ + "_paused == ori(_paused)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-kept.json new file mode 100644 index 0000000..d051bf4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-kept.json @@ -0,0 +1,676 @@ +[ + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "tokens > 0" + ], + "after_preds": [ + "tokens > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= tokens" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= tokens" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "balances[to] > 0" + ], + "after_preds": [ + "balances[to] > 0" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "balances[to] >= tokens" + ], + "after_preds": [ + "balances[to] >= tokens" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "after_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x37a15c92e67686aa268df03d4c881a76340907e8-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x37a15c92e67686aa268df03d4c881a76340907e8-kept.json new file mode 100644 index 0000000..b86336c --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x37a15c92e67686aa268df03d4c881a76340907e8-kept.json @@ -0,0 +1,702 @@ +[ + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) == 0" + ], + "after_preds": [ + "ori(decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [0]" + ], + "after_preds": [ + "ori(decimals) one of [0]" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [10000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [10000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= tokens" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= tokens" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [10000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [10000000]" + ] + }, + { + "before_preds": [ + "elem of allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ], + "after_preds": [ + "elem of allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ] + }, + { + "before_preds": [ + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "decimals == 0" + ], + "after_preds": [ + "decimals == 0" + ] + }, + { + "before_preds": [ + "decimals one of [0]" + ], + "after_preds": [ + "decimals one of [0]" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) > 0" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [10000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [10000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [10000000]" + ], + "after_preds": [ + "_totalSupply one of [10000000]" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) >= tokens" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) >= tokens" + ] + }, + { + "before_preds": [ + "ori(decimals) == 0" + ], + "after_preds": [ + "ori(decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [0]" + ], + "after_preds": [ + "ori(decimals) one of [0]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [10000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [10000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "tokens > 0" + ], + "after_preds": [ + "tokens > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "ori(balances[msg.sender]) <= ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) != ori(balances[to])" + ], + "after_preds": [ + "ori(balances[msg.sender]) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= tokens" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= tokens" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [10000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [10000000]" + ] + }, + { + "before_preds": [ + "balances[to] > 0" + ], + "after_preds": [ + "balances[to] > 0" + ] + }, + { + "before_preds": [ + "decimals == 0" + ], + "after_preds": [ + "decimals == 0" + ] + }, + { + "before_preds": [ + "decimals one of [0]" + ], + "after_preds": [ + "decimals one of [0]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [10000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [10000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [10000000]" + ], + "after_preds": [ + "_totalSupply one of [10000000]" + ] + }, + { + "before_preds": [ + "balances[to] >= tokens" + ], + "after_preds": [ + "balances[to] >= tokens" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "after_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(decimals) == 0" + ], + "after_preds": [ + "ori(decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [0]" + ], + "after_preds": [ + "ori(decimals) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [10000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [10000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [10000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [10000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [10000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [10000000]" + ] + }, + { + "before_preds": [ + "decimals == 0" + ], + "after_preds": [ + "decimals == 0" + ] + }, + { + "before_preds": [ + "decimals one of [0]" + ], + "after_preds": [ + "decimals one of [0]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [10000000]" + ], + "after_preds": [ + "_totalSupply one of [10000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-kept.json new file mode 100644 index 0000000..96a5dae --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-kept.json @@ -0,0 +1,410 @@ +[ + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[account]) one of [0,200000000,40000000200000000,20000000200000000]" + ], + "after_preds": [ + "ori(_balances[account]) one of [0,200000000,40000000200000000,20000000200000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "account != 0" + ], + "after_preds": [ + "account != 0" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "amount one of [200000000,20000000000000000,200000000000000000000000000]" + ], + "after_preds": [ + "amount one of [200000000,20000000000000000,200000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]" + ] + }, + { + "before_preds": [ + "ori(_balances[account]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[account]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[account]) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[account]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [200000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [200000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_balances[account] > 0" + ], + "after_preds": [ + "_balances[account] > 0" + ] + }, + { + "before_preds": [ + "_balances[account] one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]" + ], + "after_preds": [ + "_balances[account] one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_balances[account] <= Sum(_balances[...])" + ], + "after_preds": [ + "_balances[account] <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[account] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[account] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[account] <= _totalSupply" + ], + "after_preds": [ + "_balances[account] <= _totalSupply" + ] + }, + { + "before_preds": [ + "_balances[account] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[account] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) one of [0,5000000000000000000,100000000000000000000000,100000000000000000000,200000000000000000000000,5872550000000000000000,200000000000000000000,55000000000000000000]" + ], + "after_preds": [ + "ori(_balances[recipient]) one of [0,5000000000000000000,100000000000000000000000,100000000000000000000,200000000000000000000000,5872550000000000000000,200000000000000000000,55000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 400000000040000000200000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 400000000040000000200000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [400000000040000000200000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 400000000040000000200000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 400000000040000000200000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [400000000040000000200000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [400000000040000000200000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 400000000040000000200000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 400000000040000000200000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [400000000040000000200000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 400000000040000000200000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 400000000040000000200000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [400000000040000000200000000]" + ], + "after_preds": [ + "_totalSupply one of [400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [200000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [200000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) >= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) <= _totalSupply" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply >= ori(_totalSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-kept.json new file mode 100644 index 0000000..e883ed0 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-kept.json @@ -0,0 +1,358 @@ +[ + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "_to != 0" + ], + "after_preds": [ + "_to != 0" + ] + }, + { + "before_preds": [ + "_value > 0" + ], + "after_preds": [ + "_value > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000" + ], + "after_preds": [ + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balanceOf[...])) one of [100000000000000]" + ], + "after_preds": [ + "ori(Sum(balanceOf[...])) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000" + ], + "after_preds": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000" + ] + }, + { + "before_preds": [ + "ori(totalSupply) one of [100000000000000]" + ], + "after_preds": [ + "ori(totalSupply) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "ori(balanceOf[msg.sender]) > 0" + ], + "after_preds": [ + "ori(balanceOf[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 6" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [6]" + ], + "after_preds": [ + "ori(decimals) one of [6]" + ] + }, + { + "before_preds": [ + "_value <= ori(balanceOf[msg.sender])" + ], + "after_preds": [ + "_value <= ori(balanceOf[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(balanceOf[...])) >= ori(balanceOf[msg.sender])" + ], + "after_preds": [ + "ori(Sum(balanceOf[...])) >= ori(balanceOf[msg.sender])" + ] + }, + { + "before_preds": [ + "elem of balanceOf[...] is one of [100000000000000]" + ], + "after_preds": [ + "elem of balanceOf[...] is one of [100000000000000]" + ] + }, + { + "before_preds": [ + "totalSupply > 0", + "totalSupply == 100000000000000" + ], + "after_preds": [ + "totalSupply > 0", + "totalSupply == 100000000000000" + ] + }, + { + "before_preds": [ + "totalSupply one of [100000000000000]" + ], + "after_preds": [ + "totalSupply one of [100000000000000]" + ] + }, + { + "before_preds": [ + "balanceOf[_to] > 0" + ], + "after_preds": [ + "balanceOf[_to] > 0" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000" + ], + "after_preds": [ + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) one of [100000000000000]" + ], + "after_preds": [ + "Sum(balanceOf[...]) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 6" + ], + "after_preds": [ + "decimals > 0", + "decimals == 6" + ] + }, + { + "before_preds": [ + "decimals one of [6]" + ], + "after_preds": [ + "decimals one of [6]" + ] + }, + { + "before_preds": [ + "ori(balanceOf[_to]) <= balanceOf[_to]" + ], + "after_preds": [ + "ori(balanceOf[_to]) <= balanceOf[_to]" + ] + }, + { + "before_preds": [ + "balanceOf[msg.sender] != _value" + ], + "after_preds": [ + "balanceOf[msg.sender] != _value" + ] + }, + { + "before_preds": [ + "balanceOf[msg.sender] <= ori(balanceOf[msg.sender])" + ], + "after_preds": [ + "balanceOf[msg.sender] <= ori(balanceOf[msg.sender])" + ] + }, + { + "before_preds": [ + "_value <= balanceOf[_to]" + ], + "after_preds": [ + "_value <= balanceOf[_to]" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) >= ori(balanceOf[msg.sender])" + ], + "after_preds": [ + "Sum(balanceOf[...]) >= ori(balanceOf[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000" + ], + "after_preds": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000" + ] + }, + { + "before_preds": [ + "ori(totalSupply) one of [100000000000000]" + ], + "after_preds": [ + "ori(totalSupply) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 6" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [6]" + ], + "after_preds": [ + "ori(decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000" + ], + "after_preds": [ + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balanceOf[...])) one of [100000000000000]" + ], + "after_preds": [ + "ori(Sum(balanceOf[...])) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "elem of balanceOf[...] is one of [100000000000000]" + ], + "after_preds": [ + "elem of balanceOf[...] is one of [100000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000" + ], + "after_preds": [ + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) one of [100000000000000]" + ], + "after_preds": [ + "Sum(balanceOf[...]) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 6" + ], + "after_preds": [ + "decimals > 0", + "decimals == 6" + ] + }, + { + "before_preds": [ + "decimals one of [6]" + ], + "after_preds": [ + "decimals one of [6]" + ] + }, + { + "before_preds": [ + "totalSupply > 0", + "totalSupply == 100000000000000" + ], + "after_preds": [ + "totalSupply > 0", + "totalSupply == 100000000000000" + ] + }, + { + "before_preds": [ + "totalSupply one of [100000000000000]" + ], + "after_preds": [ + "totalSupply one of [100000000000000]" + ] + }, + { + "before_preds": [ + "ori(totalSupply) == totalSupply", + "ori(totalSupply) >= totalSupply", + "ori(totalSupply) <= totalSupply" + ], + "after_preds": [ + "ori(totalSupply) == totalSupply", + "ori(totalSupply) >= totalSupply", + "ori(totalSupply) <= totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x6f2a550259532f7429530dcb93d86269629e3f2a-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x6f2a550259532f7429530dcb93d86269629e3f2a-kept.json new file mode 100644 index 0000000..3d486e4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x6f2a550259532f7429530dcb93d86269629e3f2a-kept.json @@ -0,0 +1,706 @@ +[ + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "spender != msg.sender" + ], + "after_preds": [ + "spender != msg.sender" + ] + }, + { + "before_preds": [ + "value >= ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "value >= ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) > 0" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "value <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "value <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]" + ], + "after_preds": [ + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] >= ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "_allowances[msg.sender][spender] >= ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] >= ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x8b68591fe802585a9713bd6ebe75d6c285236c54-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x8b68591fe802585a9713bd6ebe75d6c285236c54-kept.json new file mode 100644 index 0000000..028fd6d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x8b68591fe802585a9713bd6ebe75d6c285236c54-kept.json @@ -0,0 +1,1040 @@ +[ + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowed[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(_allowed[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowed[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_allowed[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) == ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) >= ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) == ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) >= ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) > 0", + "Sum(_allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) > 0", + "Sum(_allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [993060750000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [993060750000000000000000000000]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] == Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] >= Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] <= Sum(_allowed[msg.sender][...])" + ], + "after_preds": [ + "_allowed[msg.sender][spender] == Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] >= Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] <= Sum(_allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "value == Sum(_allowed[msg.sender][...])", + "value >= Sum(_allowed[msg.sender][...])", + "value <= Sum(_allowed[msg.sender][...])" + ], + "after_preds": [ + "value == Sum(_allowed[msg.sender][...])", + "value >= Sum(_allowed[msg.sender][...])", + "value <= Sum(_allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "value > 0" + ], + "after_preds": [ + "value > 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) one of [0,1485000000000000000000000000,4950000000000000000000000000]" + ], + "after_preds": [ + "ori(_balances[to]) one of [0,1485000000000000000000000000,4950000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= value" + ], + "after_preds": [ + "ori(_balances[msg.sender]) >= value" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "value != ori(_balances[to])" + ], + "after_preds": [ + "value != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [993732500000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [993732500000000000000000000000]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[to] > 0" + ], + "after_preds": [ + "_balances[to] > 0" + ] + }, + { + "before_preds": [ + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "value != _balances[msg.sender]" + ], + "after_preds": [ + "value != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "value != _balances[to]" + ], + "after_preds": [ + "value != _balances[to]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != _balances[to]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[to]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= ori(_balances[to])" + ], + "after_preds": [ + "_balances[msg.sender] >= ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [993732500000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [993732500000000000000000000000]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-kept.json new file mode 100644 index 0000000..0f5e65f --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-kept.json @@ -0,0 +1,682 @@ +[ + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(paused) == false" + ], + "after_preds": [ + "ori(paused) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_pendingowner) == 0" + ], + "after_preds": [ + "ori(_pendingowner) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_locked_balances[...])) == 0" + ], + "after_preds": [ + "ori(Sum(_locked_balances[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_locked_balances[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_locked_balances[...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "elem of _locked_balances[...] is one of [0]" + ], + "after_preds": [ + "elem of _locked_balances[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of _locked_balances[...] is one of []" + ], + "after_preds": [ + "elem of _locked_balances[...] is one of []" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) == 0" + ], + "after_preds": [ + "Sum(_locked_balances[...]) == 0" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) one of [0]" + ], + "after_preds": [ + "Sum(_locked_balances[...]) one of [0]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [3000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [3000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "paused == false" + ], + "after_preds": [ + "paused == false" + ] + }, + { + "before_preds": [ + "_pendingowner == 0" + ], + "after_preds": [ + "_pendingowner == 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(paused) == paused" + ], + "after_preds": [ + "ori(paused) == paused" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] >= ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "_balances[recipient] <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[recipient] <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[recipient] <= Sum(_balances[...])" + ], + "after_preds": [ + "_balances[recipient] <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_owner == ori(_owner)" + ], + "after_preds": [ + "_owner == ori(_owner)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_pendingowner) == _pendingowner" + ], + "after_preds": [ + "ori(_pendingowner) == _pendingowner" + ] + }, + { + "before_preds": [ + "ori(paused) == false" + ], + "after_preds": [ + "ori(paused) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(Sum(_locked_balances[...])) == 0" + ], + "after_preds": [ + "ori(Sum(_locked_balances[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_locked_balances[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_locked_balances[...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_pendingowner) == 0" + ], + "after_preds": [ + "ori(_pendingowner) == 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_owner) != ori(_pendingowner)" + ], + "after_preds": [ + "ori(_owner) != ori(_pendingowner)" + ] + }, + { + "before_preds": [ + "elem of _locked_balances[...] is one of [0]" + ], + "after_preds": [ + "elem of _locked_balances[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of _locked_balances[...] is one of []" + ], + "after_preds": [ + "elem of _locked_balances[...] is one of []" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) == 0" + ], + "after_preds": [ + "Sum(_locked_balances[...]) == 0" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) one of [0]" + ], + "after_preds": [ + "Sum(_locked_balances[...]) one of [0]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [3000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [3000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "paused == false" + ], + "after_preds": [ + "paused == false" + ] + }, + { + "before_preds": [ + "_pendingowner == 0" + ], + "after_preds": [ + "_pendingowner == 0" + ] + }, + { + "before_preds": [ + "ori(paused) == paused" + ], + "after_preds": [ + "ori(paused) == paused" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_owner == ori(_owner)" + ], + "after_preds": [ + "_owner == ori(_owner)" + ] + }, + { + "before_preds": [ + "_owner != _pendingowner" + ], + "after_preds": [ + "_owner != _pendingowner" + ] + }, + { + "before_preds": [ + "_owner != ori(_pendingowner)" + ], + "after_preds": [ + "_owner != ori(_pendingowner)" + ] + }, + { + "before_preds": [ + "ori(_owner) != _pendingowner" + ], + "after_preds": [ + "ori(_owner) != _pendingowner" + ] + }, + { + "before_preds": [ + "_pendingowner == ori(_pendingowner)" + ], + "after_preds": [ + "_pendingowner == ori(_pendingowner)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-kept.json new file mode 100644 index 0000000..a3c701d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-kept.json @@ -0,0 +1,406 @@ +[ + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 5" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 5" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [5]" + ], + "after_preds": [ + "ori(_decimals) one of [5]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(_paused) == false" + ], + "after_preds": [ + "ori(_paused) == false" + ] + }, + { + "before_preds": [ + "value > 0" + ], + "after_preds": [ + "value > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 5" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 5" + ] + }, + { + "before_preds": [ + "_decimals one of [5]" + ], + "after_preds": [ + "_decimals one of [5]" + ] + }, + { + "before_preds": [ + "_paused == false" + ], + "after_preds": [ + "_paused == false" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "_paused == ori(_paused)" + ], + "after_preds": [ + "_paused == ori(_paused)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_paused) == false" + ], + "after_preds": [ + "ori(_paused) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 5" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 5" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [5]" + ], + "after_preds": [ + "ori(_decimals) one of [5]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 5" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 5" + ] + }, + { + "before_preds": [ + "_decimals one of [5]" + ], + "after_preds": [ + "_decimals one of [5]" + ] + }, + { + "before_preds": [ + "_paused == false" + ], + "after_preds": [ + "_paused == false" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(Sum(_balances[...]))", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply == ori(Sum(_balances[...]))", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_paused) == _paused" + ], + "after_preds": [ + "ori(_paused) == _paused" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xb2923909b5d8bbe01505121f15a4503b6617dae7-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xb2923909b5d8bbe01505121f15a4503b6617dae7-kept.json new file mode 100644 index 0000000..41dc4da --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xb2923909b5d8bbe01505121f15a4503b6617dae7-kept.json @@ -0,0 +1,470 @@ +[ + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [7000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(balances[to]) one of [0,124700000000000000000000,374700000000000000000000,437200000000000000000000,499700000000000000000000,749700000000000000000000]" + ], + "after_preds": [ + "ori(balances[to]) one of [0,124700000000000000000000,374700000000000000000000,437200000000000000000000,499700000000000000000000,749700000000000000000000]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [7000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "tokens > 0" + ], + "after_preds": [ + "tokens > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) != tokens" + ], + "after_preds": [ + "ori(balances[to]) != tokens" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= tokens" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= tokens" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [7000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [7000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "balances[to] > 0" + ], + "after_preds": [ + "balances[to] > 0" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [7000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) != balances[msg.sender]" + ], + "after_preds": [ + "ori(balances[to]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "balances[msg.sender] != balances[to]" + ], + "after_preds": [ + "balances[msg.sender] != balances[to]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) != balances[to]" + ], + "after_preds": [ + "ori(balances[msg.sender]) != balances[to]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "owner == ori(owner)" + ], + "after_preds": [ + "owner == ori(owner)" + ] + }, + { + "before_preds": [ + "balances[to] >= tokens" + ], + "after_preds": [ + "balances[to] >= tokens" + ] + }, + { + "before_preds": [ + "tokens + ori(balances[to]) == balances[to]" + ], + "after_preds": [ + "tokens + ori(balances[to]) == balances[to]" + ] + }, + { + "before_preds": [ + "tokens + balances[msg.sender] == ori(balances[msg.sender])" + ], + "after_preds": [ + "tokens + balances[msg.sender] == ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [7000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [7000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [7000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [7000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [7000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(owner) == owner" + ], + "after_preds": [ + "ori(owner) == owner" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-kept.json new file mode 100644 index 0000000..ee7bb10 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-kept.json @@ -0,0 +1,1966 @@ +[ + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) > 0" + ], + "after_preds": [ + "ori(maxTxAmount) > 0" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(currentOwner) != 0" + ], + "after_preds": [ + "ori(currentOwner) != 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "ori(Sum(_allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "value >= ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "value >= ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) > 0" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [997200000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [997200000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "currentOwner != 0" + ], + "after_preds": [ + "currentOwner != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "maxTxAmount > 0" + ], + "after_preds": [ + "maxTxAmount > 0" + ] + }, + { + "before_preds": [ + "maxTxAmount one of [1500000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "maxTxAmount one of [1500000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ], + "after_preds": [ + "elem of _allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ] + }, + { + "before_preds": [ + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ], + "after_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) >= _allowed[msg.sender][spender]" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) >= _allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) >= value" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) >= value" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] >= ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "_allowed[msg.sender][spender] >= ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(currentOwner) == currentOwner" + ], + "after_preds": [ + "ori(currentOwner) == currentOwner" + ] + }, + { + "before_preds": [ + "account != 0" + ], + "after_preds": [ + "account != 0" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 1500000000000000000000000" + ], + "after_preds": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 1500000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000]" + ], + "after_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(currentOwner) != 0" + ], + "after_preds": [ + "ori(currentOwner) != 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_isBlackListed[account]) == false" + ], + "after_preds": [ + "ori(_isBlackListed[account]) == false" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender == ori(currentOwner)" + ], + "after_preds": [ + "msg.sender == ori(currentOwner)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "currentOwner != 0" + ], + "after_preds": [ + "currentOwner != 0" + ] + }, + { + "before_preds": [ + "_isBlackListed[account] == true" + ], + "after_preds": [ + "_isBlackListed[account] == true" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "maxTxAmount > 0", + "maxTxAmount == 1500000000000000000000000" + ], + "after_preds": [ + "maxTxAmount > 0", + "maxTxAmount == 1500000000000000000000000" + ] + }, + { + "before_preds": [ + "maxTxAmount one of [1500000000000000000000000]" + ], + "after_preds": [ + "maxTxAmount one of [1500000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ], + "after_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ] + }, + { + "before_preds": [ + "msg.sender == currentOwner" + ], + "after_preds": [ + "msg.sender == currentOwner" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(currentOwner) == currentOwner" + ], + "after_preds": [ + "ori(currentOwner) == currentOwner" + ] + }, + { + "before_preds": [ + "_isBlackListed[account] != ori(_isBlackListed[account])" + ], + "after_preds": [ + "_isBlackListed[account] != ori(_isBlackListed[account])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 300000000000000000000000000" + ], + "after_preds": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 300000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) one of [300000000000000000000000000]" + ], + "after_preds": [ + "ori(maxTxAmount) one of [300000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(currentOwner) != 0" + ], + "after_preds": [ + "ori(currentOwner) != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) == 0" + ], + "after_preds": [ + "ori(_balances[to]) == 0" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) one of [0]" + ], + "after_preds": [ + "ori(_balances[to]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "value > 0" + ], + "after_preds": [ + "value > 0" + ] + }, + { + "before_preds": [ + "value one of [10000000000000000000000000,3000000000000000000000000,7000000000000000000000000]" + ], + "after_preds": [ + "value one of [10000000000000000000000000,3000000000000000000000000,7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != to" + ], + "after_preds": [ + "msg.sender != to" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0" + ], + "after_preds": [ + "_balances[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [998970000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [998970000000000000000000000]" + ] + }, + { + "before_preds": [ + "currentOwner != 0" + ], + "after_preds": [ + "currentOwner != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "_balances[to] > 0" + ], + "after_preds": [ + "_balances[to] > 0" + ] + }, + { + "before_preds": [ + "_balances[to] one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000]" + ], + "after_preds": [ + "_balances[to] one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000]" + ] + }, + { + "before_preds": [ + "maxTxAmount > 0", + "maxTxAmount == 300000000000000000000000000" + ], + "after_preds": [ + "maxTxAmount > 0", + "maxTxAmount == 300000000000000000000000000" + ] + }, + { + "before_preds": [ + "maxTxAmount one of [300000000000000000000000000]" + ], + "after_preds": [ + "maxTxAmount one of [300000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ], + "after_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(currentOwner) == currentOwner" + ], + "after_preds": [ + "ori(currentOwner) == currentOwner" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != _totalSupply" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != _totalSupply" + ] + }, + { + "before_preds": [ + "value + _balances[msg.sender] == ori(_balances[msg.sender])" + ], + "after_preds": [ + "value + _balances[msg.sender] == ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) > 0" + ], + "after_preds": [ + "ori(maxTxAmount) > 0" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000]" + ], + "after_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "theAmount > 0" + ], + "after_preds": [ + "theAmount > 0" + ] + }, + { + "before_preds": [ + "theAmount one of [300000000,720000000,1500000]" + ], + "after_preds": [ + "theAmount one of [300000000,720000000,1500000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(currentOwner) != 0" + ], + "after_preds": [ + "ori(currentOwner) != 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender == ori(currentOwner)" + ], + "after_preds": [ + "msg.sender == ori(currentOwner)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [997200000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [997200000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "currentOwner != 0" + ], + "after_preds": [ + "currentOwner != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "maxTxAmount > 0" + ], + "after_preds": [ + "maxTxAmount > 0" + ] + }, + { + "before_preds": [ + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) != maxTxAmount" + ], + "after_preds": [ + "ori(maxTxAmount) != maxTxAmount" + ] + }, + { + "before_preds": [ + "msg.sender == currentOwner" + ], + "after_preds": [ + "msg.sender == currentOwner" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(currentOwner) == currentOwner" + ], + "after_preds": [ + "ori(currentOwner) == currentOwner" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) > 0" + ], + "after_preds": [ + "ori(maxTxAmount) > 0" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(currentOwner) != 0" + ], + "after_preds": [ + "ori(currentOwner) != 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [998970000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [998970000000000000000000000]" + ] + }, + { + "before_preds": [ + "currentOwner != 0" + ], + "after_preds": [ + "currentOwner != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "maxTxAmount > 0" + ], + "after_preds": [ + "maxTxAmount > 0" + ] + }, + { + "before_preds": [ + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(currentOwner) == currentOwner" + ], + "after_preds": [ + "ori(currentOwner) == currentOwner" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xc382e04099a435439725bb40647e2b32dc136806-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xc382e04099a435439725bb40647e2b32dc136806-kept.json new file mode 100644 index 0000000..ab30ead --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xc382e04099a435439725bb40647e2b32dc136806-kept.json @@ -0,0 +1,724 @@ +[ + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "spender != msg.sender" + ], + "after_preds": [ + "spender != msg.sender" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) == ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) == ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,15000000000000000000000000000000,30000000000000000000000000000000,500000000000000000000000000000,200000000000000000000000000000,20000000000000000000000000000000,2605000000000000000000000000000,10000000000000000000000000000,100000000000000000000000000000,10000000000000000000000000000000,25000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,15000000000000000000000000000000,30000000000000000000000000000000,500000000000000000000000000000,200000000000000000000000000000,20000000000000000000000000000000,2605000000000000000000000000000,10000000000000000000000000000,100000000000000000000000000000,10000000000000000000000000000000,25000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]" + ], + "after_preds": [ + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) one of [0,20000000000000000000000000000000]" + ], + "after_preds": [ + "ori(_balances[recipient]) one of [0,20000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "recipient != msg.sender" + ], + "after_preds": [ + "recipient != msg.sender" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != _balances[recipient]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[recipient]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[recipient] <= Sum(_balances[...])" + ], + "after_preds": [ + "_balances[recipient] <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-kept.json new file mode 100644 index 0000000..337109f --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-kept.json @@ -0,0 +1,642 @@ +[ + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) one of [0,519750000000000000000,247500000000000000000000,7920000000000000000000,2549250000000000000000]" + ], + "after_preds": [ + "ori(_balances[to]) one of [0,519750000000000000000,247500000000000000000000,7920000000000000000000,2549250000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [100000000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [100000000000000000000000000]" + ] + }, + { + "before_preds": [ + "value <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "value <= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[to])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [100000000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [100000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [101004337700000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [101004337700000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "value != _balances[msg.sender]" + ], + "after_preds": [ + "value != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != _balances[to]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != _balances[to]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount" + ], + "after_preds": [ + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != _balances[to]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[to]" + ] + }, + { + "before_preds": [ + "_balances[to] >= ori(_balances[to])" + ], + "after_preds": [ + "_balances[to] >= ori(_balances[to])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [100000000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [100000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [100000000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [100000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [101004337700000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [101004337700000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount" + ], + "after_preds": [ + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-kept.json new file mode 100644 index 0000000..f73fadb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-kept.json @@ -0,0 +1,696 @@ +[ + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [9]" + ], + "after_preds": [ + "ori(_decimals) one of [9]" + ] + }, + { + "before_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "spender != msg.sender" + ], + "after_preds": [ + "spender != msg.sender" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1000000000000000,3169849838330000000,39000000000000,12000000000000000,0,420000000000000,123930000000000,30000000000000,330000000000000,60000000000000,438872000000000,80050000000,208080000000000,900000000000000,50000000000,112410000000000,96800000000000000000,10000000,440544000000000,1740000000000000,750000000000000,2104500000000000,135556000000000,1124100000000000,75804000000000,410495670000000,80000000000,50000000000000,210000000000000,270050010000000,119659930000000,150000000000000,36870000000000,90000000000000,1050000000000000,1035000000000000,75000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1000000000000000,3169849838330000000,39000000000000,12000000000000000,0,420000000000000,123930000000000,30000000000000,330000000000000,60000000000000,438872000000000,80050000000,208080000000000,900000000000000,50000000000,112410000000000,96800000000000000000,10000000,440544000000000,1740000000000000,750000000000000,2104500000000000,135556000000000,1124100000000000,75804000000000,410495670000000,80000000000,50000000000000,210000000000000,270050010000000,119659930000000,150000000000000,36870000000000,90000000000000,1050000000000000,1035000000000000,75000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 9" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 9" + ] + }, + { + "before_preds": [ + "_decimals one of [9]" + ], + "after_preds": [ + "_decimals one of [9]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [9]" + ], + "after_preds": [ + "ori(_decimals) one of [9]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "recipient != msg.sender" + ], + "after_preds": [ + "recipient != msg.sender" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 9" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 9" + ] + }, + { + "before_preds": [ + "_decimals one of [9]" + ], + "after_preds": [ + "_decimals one of [9]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != _balances[recipient]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[recipient]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "Sum(_balances[...]) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [9]" + ], + "after_preds": [ + "ori(_decimals) one of [9]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 9" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 9" + ] + }, + { + "before_preds": [ + "_decimals one of [9]" + ], + "after_preds": [ + "_decimals one of [9]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-kept.json new file mode 100644 index 0000000..aa0786d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-kept.json @@ -0,0 +1,664 @@ +[ + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "tokens > 0", + "tokens == 1214154393080207565488897145207363713379238199016" + ], + "after_preds": [ + "tokens > 0", + "tokens == 1214154393080207565488897145207363713379238199016" + ] + }, + { + "before_preds": [ + "tokens one of [1214154393080207565488897145207363713379238199016]" + ], + "after_preds": [ + "tokens one of [1214154393080207565488897145207363713379238199016]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [8]" + ], + "after_preds": [ + "ori(decimals) one of [8]" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) == ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) >= ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) == ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) >= ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [0,42155608000000,7827168000000,26727712000000,2364184000000,14505336000000,39866984000000,26200000000000,1991093640000000,60000000000,200000000000000,223083670000000,4856418504000000,2886756805000000,733387377300000,466343312000000,89562000000000,614258317000000,115335000000000,293365795000000,55321433000000,10100000000000,808584315377000000,67977665000000,7549993000000,3309113000000,2321935681000000,50633353000000,13500177000000,23370833000000,2100000000000,822900562000000,362332495000000,230490600000000,494315646000000,234663856000000,568993250000000,1056758701000000,955539526000000,2290247800000000,816436753000000,1500000000000000,287186755000000,35912634000000,1475154770000000,8253082000000,4196890000000,210344090000000,2581883922000000,85196714000000,408071641000000,1308507218000000,1365056466000000,907453248000000,253334180000000,1634666760000000,1650101000000000,100000000000000,3552133331000000,2147174090000000,1819394147000000,287238396000000,119538379000000,42432787000000,1905260435000000,1451707355000000,23514979000000,25595051000000,89326155000000,117578331000000,7103883000000,1900128000000,18888800000000,243285700000000,1916403000000,3298409047000000,4212424891000000,9126009837000000,1753730950000000,1498000000000000,814045727000000,1896835000000,1105069134000000,599482190000000,1740028000000,301265220000000,8596628000000,32234460000000,315772404000000,268733620000000,719812020000000,36880755700000000,310833676000000,250440116000000,2160100000000,2609636221000000,3002439449000000,3523832342000000,1600000000000000,2326235055000000,506668360000000,1933196460000000,274876741000000,10000000000,1231918352000000,42995981000000,1876942246000000,1015929560000000,2226634250000000,2454909000000,1967529221000000,252862285000000,5670605000000,355760661000000,3118813000000,562571485000000,71098725000000,100000000000,150144416000000,20100000000000,186156392000000,243145064000000,3077644954000000,1179432137000000,1375765499000000,250245012000000,2500000000000,1379680451000000,1501362421000000,34207198000000,7751278000000,809717142000000,2453660118000000,216910870000000,36701942000000,9379382000000,2443859382000000,3000000000000,511371390000000,2495907929000000,1263531812000000,1691474109000000,1169134166000000,2000000000000,5000000000,571697800000000,3563600000000,47000000000000,2741947060000000,25185204000000,38577000000,1899900000000,1200000000000,1881079000000,40680695000000,59926463000000,218139263000000,2995575000000,37517527000000,4300000000000,856864703000000,5520682479000000,1807288095000000,1857587524000000,9600000000000,263852200000000,4148000000000000,172345459000000,1669293427000000,2344197414700000,3212593467000000,532420717000000,341006648000000,394034232000000,2909613777000000,3520287800000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [0,42155608000000,7827168000000,26727712000000,2364184000000,14505336000000,39866984000000,26200000000000,1991093640000000,60000000000,200000000000000,223083670000000,4856418504000000,2886756805000000,733387377300000,466343312000000,89562000000000,614258317000000,115335000000000,293365795000000,55321433000000,10100000000000,808584315377000000,67977665000000,7549993000000,3309113000000,2321935681000000,50633353000000,13500177000000,23370833000000,2100000000000,822900562000000,362332495000000,230490600000000,494315646000000,234663856000000,568993250000000,1056758701000000,955539526000000,2290247800000000,816436753000000,1500000000000000,287186755000000,35912634000000,1475154770000000,8253082000000,4196890000000,210344090000000,2581883922000000,85196714000000,408071641000000,1308507218000000,1365056466000000,907453248000000,253334180000000,1634666760000000,1650101000000000,100000000000000,3552133331000000,2147174090000000,1819394147000000,287238396000000,119538379000000,42432787000000,1905260435000000,1451707355000000,23514979000000,25595051000000,89326155000000,117578331000000,7103883000000,1900128000000,18888800000000,243285700000000,1916403000000,3298409047000000,4212424891000000,9126009837000000,1753730950000000,1498000000000000,814045727000000,1896835000000,1105069134000000,599482190000000,1740028000000,301265220000000,8596628000000,32234460000000,315772404000000,268733620000000,719812020000000,36880755700000000,310833676000000,250440116000000,2160100000000,2609636221000000,3002439449000000,3523832342000000,1600000000000000,2326235055000000,506668360000000,1933196460000000,274876741000000,10000000000,1231918352000000,42995981000000,1876942246000000,1015929560000000,2226634250000000,2454909000000,1967529221000000,252862285000000,5670605000000,355760661000000,3118813000000,562571485000000,71098725000000,100000000000,150144416000000,20100000000000,186156392000000,243145064000000,3077644954000000,1179432137000000,1375765499000000,250245012000000,2500000000000,1379680451000000,1501362421000000,34207198000000,7751278000000,809717142000000,2453660118000000,216910870000000,36701942000000,9379382000000,2443859382000000,3000000000000,511371390000000,2495907929000000,1263531812000000,1691474109000000,1169134166000000,2000000000000,5000000000,571697800000000,3563600000000,47000000000000,2741947060000000,25185204000000,38577000000,1899900000000,1200000000000,1881079000000,40680695000000,59926463000000,218139263000000,2995575000000,37517527000000,4300000000000,856864703000000,5520682479000000,1807288095000000,1857587524000000,9600000000000,263852200000000,4148000000000000,172345459000000,1669293427000000,2344197414700000,3212593467000000,532420717000000,341006648000000,394034232000000,2909613777000000,3520287800000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of allowed[msg.sender][...] is one of [1214154393080207565488897145207363713379238199016]" + ], + "after_preds": [ + "elem of allowed[msg.sender][...] is one of [1214154393080207565488897145207363713379238199016]" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 1214154393080207565488897145207363713379238199016" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 1214154393080207565488897145207363713379238199016" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) one of [1214154393080207565488897145207363713379238199016]" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) one of [1214154393080207565488897145207363713379238199016]" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 1214154393080207565488897145207363713379238199016" + ], + "after_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 1214154393080207565488897145207363713379238199016" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] one of [1214154393080207565488897145207363713379238199016]" + ], + "after_preds": [ + "allowed[msg.sender][spender] one of [1214154393080207565488897145207363713379238199016]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 8" + ], + "after_preds": [ + "decimals > 0", + "decimals == 8" + ] + }, + { + "before_preds": [ + "decimals one of [8]" + ], + "after_preds": [ + "decimals one of [8]" + ] + }, + { + "before_preds": [ + "tokens == Sum(allowed[msg.sender][...])", + "tokens >= Sum(allowed[msg.sender][...])", + "tokens <= Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "tokens == Sum(allowed[msg.sender][...])", + "tokens >= Sum(allowed[msg.sender][...])", + "tokens <= Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "tokens == allowed[msg.sender][spender]", + "tokens >= allowed[msg.sender][spender]", + "tokens <= allowed[msg.sender][spender]" + ], + "after_preds": [ + "tokens == allowed[msg.sender][spender]", + "tokens >= allowed[msg.sender][spender]", + "tokens <= allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [8]" + ], + "after_preds": [ + "ori(decimals) one of [8]" + ] + }, + { + "before_preds": [ + "tokens <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "tokens <= ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "tokens <= ori(balances[msg.sender])" + ], + "after_preds": [ + "tokens <= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 8" + ], + "after_preds": [ + "decimals > 0", + "decimals == 8" + ] + }, + { + "before_preds": [ + "decimals one of [8]" + ], + "after_preds": [ + "decimals one of [8]" + ] + }, + { + "before_preds": [ + "tokens <= Sum(balances[...])" + ], + "after_preds": [ + "tokens <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "tokens <= balances[to]" + ], + "after_preds": [ + "tokens <= balances[to]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= balances[to]" + ], + "after_preds": [ + "Sum(balances[...]) >= balances[to]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "Sum(balances[...]) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[to]" + ], + "after_preds": [ + "ori(Sum(balances[...])) >= balances[to]" + ] + }, + { + "before_preds": [ + "balances[to] >= ori(balances[to])" + ], + "after_preds": [ + "balances[to] >= ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [8]" + ], + "after_preds": [ + "ori(decimals) one of [8]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 8" + ], + "after_preds": [ + "decimals > 0", + "decimals == 8" + ] + }, + { + "before_preds": [ + "decimals one of [8]" + ], + "after_preds": [ + "decimals one of [8]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xeeb690a0c9958e5375eda5694e754b125a6c972c-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xeeb690a0c9958e5375eda5694e754b125a6c972c-kept.json new file mode 100644 index 0000000..76227fd --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xeeb690a0c9958e5375eda5694e754b125a6c972c-kept.json @@ -0,0 +1,676 @@ +[ + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "tokens > 0", + "tokens == 116143000000000000000000" + ], + "after_preds": [ + "tokens > 0", + "tokens == 116143000000000000000000" + ] + }, + { + "before_preds": [ + "tokens one of [116143000000000000000000]" + ], + "after_preds": [ + "tokens one of [116143000000000000000000]" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "elem of allowed[msg.sender][...] is one of [116143000000000000000000]" + ], + "after_preds": [ + "elem of allowed[msg.sender][...] is one of [116143000000000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 116143000000000000000000" + ], + "after_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 116143000000000000000000" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] one of [116143000000000000000000]" + ], + "after_preds": [ + "allowed[msg.sender][spender] one of [116143000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [0,100000000000000000000000,249676860000000000000000000,1140000000000000000000,10000000000000000000000,12000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [0,100000000000000000000000,249676860000000000000000000,1140000000000000000000,10000000000000000000000,12000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 116143000000000000000000" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 116143000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) one of [116143000000000000000000]" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) one of [116143000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= tokens" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= tokens" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "balances[to] > 0" + ], + "after_preds": [ + "balances[to] > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= balances[to]" + ], + "after_preds": [ + "ori(balances[to]) <= balances[to]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "Sum(balances[...]) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]" + ] + }, + { + "before_preds": [ + "balances[to] >= tokens" + ], + "after_preds": [ + "balances[to] >= tokens" + ] + }, + { + "before_preds": [ + "balances[to] != balances[msg.sender]" + ], + "after_preds": [ + "balances[to] != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "tokens + ori(balances[to]) == balances[to]" + ], + "after_preds": [ + "tokens + ori(balances[to]) == balances[to]" + ] + }, + { + "before_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "after_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-kept.json new file mode 100644 index 0000000..7ca24a5 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/kept/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-kept.json @@ -0,0 +1,768 @@ +[ + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "value > 0" + ], + "after_preds": [ + "value > 0" + ] + }, + { + "before_preds": [ + "value one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "msg.sender != spender" + ], + "after_preds": [ + "msg.sender != spender" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] > 0" + ], + "after_preds": [ + "_allowances[msg.sender][spender] > 0" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowances[msg.sender][spender] one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) > 0" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "amount > 0", + "amount == 100000000000" + ], + "after_preds": [ + "amount > 0", + "amount == 100000000000" + ] + }, + { + "before_preds": [ + "amount one of [100000000000]" + ], + "after_preds": [ + "amount one of [100000000000]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [100000000000]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) == 0" + ], + "after_preds": [ + "ori(_balances[recipient]) == 0" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) one of [0]" + ], + "after_preds": [ + "ori(_balances[recipient]) one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != recipient" + ], + "after_preds": [ + "msg.sender != recipient" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] == 0" + ], + "after_preds": [ + "_balances[msg.sender] == 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [0]" + ], + "after_preds": [ + "_balances[msg.sender] one of [0]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0", + "_balances[recipient] == 100000000000" + ], + "after_preds": [ + "_balances[recipient] > 0", + "_balances[recipient] == 100000000000" + ] + }, + { + "before_preds": [ + "_balances[recipient] one of [100000000000]" + ], + "after_preds": [ + "_balances[recipient] one of [100000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[recipient] == Sum(_balances[...])", + "_balances[recipient] >= Sum(_balances[...])", + "_balances[recipient] <= Sum(_balances[...])" + ], + "after_preds": [ + "_balances[recipient] == Sum(_balances[...])", + "_balances[recipient] >= Sum(_balances[...])", + "_balances[recipient] <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) == Sum(_balances[...])", + "ori(_balances[msg.sender]) >= Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) == Sum(_balances[...])", + "ori(_balances[msg.sender]) >= Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json new file mode 100644 index 0000000..d4ac78e --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json @@ -0,0 +1,72 @@ +[ + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == ori(totalSupply_)", + "ori(Sum(balances[...])) >= ori(totalSupply_)", + "ori(Sum(balances[...])) <= ori(totalSupply_)" + ], + "after_preds": [ + "ori(Sum(balances[...])) == ori(totalSupply_)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(totalSupply_)", + "Sum(balances[...]) >= ori(totalSupply_)", + "Sum(balances[...]) <= ori(totalSupply_)" + ], + "after_preds": [ + "Sum(balances[...]) == ori(totalSupply_)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == totalSupply_", + "Sum(balances[...]) >= totalSupply_", + "Sum(balances[...]) <= totalSupply_" + ], + "after_preds": [ + "Sum(balances[...]) == totalSupply_" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == totalSupply_", + "ori(Sum(balances[...])) >= totalSupply_", + "ori(Sum(balances[...])) <= totalSupply_" + ], + "after_preds": [ + "ori(Sum(balances[...])) == totalSupply_" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-removed.json new file mode 100644 index 0000000..10fab79 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-removed.json @@ -0,0 +1,72 @@ +[ + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-removed.json new file mode 100644 index 0000000..906f7c5 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-removed.json @@ -0,0 +1,219 @@ +[ + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= tokens", + "ori(Sum(allowed[msg.sender][...])) < tokens", + "ori(Sum(allowed[msg.sender][...])) != tokens" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) != tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) >= ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) <= ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "tokens >= ori(allowed[msg.sender][spender])", + "tokens > ori(allowed[msg.sender][spender])", + "tokens != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "tokens > ori(allowed[msg.sender][spender])", + "tokens != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= allowed[msg.sender][spender]", + "ori(Sum(allowed[msg.sender][...])) < allowed[msg.sender][spender]", + "ori(Sum(allowed[msg.sender][...])) != allowed[msg.sender][spender]" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) != allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] == tokens", + "allowed[msg.sender][spender] >= tokens", + "allowed[msg.sender][spender] <= tokens" + ], + "after_preds": [ + "allowed[msg.sender][spender] == tokens" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] > ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) == tokens", + "Sum(allowed[msg.sender][...]) >= tokens", + "Sum(allowed[msg.sender][...]) <= tokens" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) == tokens" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) >= ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) > ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "after_preds": [ + "ori(Sum(balances[...])) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens" + ], + "after_preds": [ + "ori(Sum(balances[...])) != tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) > balances[to]", + "ori(Sum(balances[...])) != balances[to]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[to]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "balances[to] >= ori(balances[to])", + "balances[to] > ori(balances[to])", + "balances[to] != ori(balances[to])" + ], + "after_preds": [ + "balances[to] != ori(balances[to])" + ] + }, + { + "before_preds": [ + "balances[to] <= Sum(balances[...])", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ], + "after_preds": [ + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]" + ], + "after_preds": [ + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "tokens <= Sum(balances[...])", + "tokens < Sum(balances[...])", + "tokens != Sum(balances[...])" + ], + "after_preds": [ + "tokens < Sum(balances[...])", + "tokens != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "balances[msg.sender] <= Sum(balances[...])", + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])" + ], + "after_preds": [ + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x37a15c92e67686aa268df03d4c881a76340907e8-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x37a15c92e67686aa268df03d4c881a76340907e8-removed.json new file mode 100644 index 0000000..ac87210 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x37a15c92e67686aa268df03d4c881a76340907e8-removed.json @@ -0,0 +1,168 @@ +[ + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= tokens", + "ori(allowed[msg.sender][spender]) < tokens", + "ori(allowed[msg.sender][spender]) != tokens" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) != tokens" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] > ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] == tokens", + "allowed[msg.sender][spender] >= tokens", + "allowed[msg.sender][spender] <= tokens" + ], + "after_preds": [ + "allowed[msg.sender][spender] == tokens" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "after_preds": [ + "ori(Sum(balances[...])) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens" + ], + "after_preds": [ + "ori(Sum(balances[...])) != tokens" + ] + }, + { + "before_preds": [ + "balances[to] <= ori(Sum(balances[...]))", + "balances[to] < ori(Sum(balances[...]))", + "balances[to] != ori(Sum(balances[...]))" + ], + "after_preds": [ + "balances[to] < ori(Sum(balances[...]))", + "balances[to] != ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "balances[to] >= ori(balances[to])", + "balances[to] > ori(balances[to])", + "balances[to] != ori(balances[to])" + ], + "after_preds": [ + "balances[to] != ori(balances[to])" + ] + }, + { + "before_preds": [ + "balances[to] <= Sum(balances[...])", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ], + "after_preds": [ + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]" + ], + "after_preds": [ + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= tokens", + "Sum(balances[...]) > tokens", + "Sum(balances[...]) != tokens" + ], + "after_preds": [ + "Sum(balances[...]) != tokens" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= balances[msg.sender]", + "Sum(balances[...]) > balances[msg.sender]", + "Sum(balances[...]) != balances[msg.sender]" + ], + "after_preds": [ + "Sum(balances[...]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-removed.json new file mode 100644 index 0000000..114992b --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-removed.json @@ -0,0 +1,185 @@ +[ + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[account] >= ori(_balances[account])", + "_balances[account] > ori(_balances[account])", + "_balances[account] != ori(_balances[account])" + ], + "after_preds": [ + "_balances[account] != ori(_balances[account])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[account])", + "Sum(_balances[...]) > ori(_balances[account])", + "Sum(_balances[...]) != ori(_balances[account])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[account])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) > ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[account]) <= _totalSupply", + "ori(_balances[account]) < _totalSupply", + "ori(_balances[account]) != _totalSupply" + ], + "after_preds": [ + "ori(_balances[account]) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= _totalSupply", + "ori(Sum(_balances[...])) < _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _totalSupply" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= _balances[recipient]", + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]" + ], + "after_preds": [ + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-removed.json new file mode 100644 index 0000000..6c21512 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-removed.json @@ -0,0 +1,138 @@ +[ + { + "before_preds": [ + "ori(balanceOf[_to]) <= ori(Sum(balanceOf[...]))", + "ori(balanceOf[_to]) < ori(Sum(balanceOf[...]))", + "ori(balanceOf[_to]) != ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "ori(balanceOf[_to]) < ori(Sum(balanceOf[...]))", + "ori(balanceOf[_to]) != ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "_value <= ori(Sum(balanceOf[...]))", + "_value < ori(Sum(balanceOf[...]))", + "_value != ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "_value != ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "ori(balanceOf[_to]) <= Sum(balanceOf[...])", + "ori(balanceOf[_to]) < Sum(balanceOf[...])", + "ori(balanceOf[_to]) != Sum(balanceOf[...])" + ], + "after_preds": [ + "ori(balanceOf[_to]) < Sum(balanceOf[...])", + "ori(balanceOf[_to]) != Sum(balanceOf[...])" + ] + }, + { + "before_preds": [ + "balanceOf[msg.sender] <= Sum(balanceOf[...])", + "balanceOf[msg.sender] < Sum(balanceOf[...])", + "balanceOf[msg.sender] != Sum(balanceOf[...])" + ], + "after_preds": [ + "balanceOf[msg.sender] < Sum(balanceOf[...])", + "balanceOf[msg.sender] != Sum(balanceOf[...])" + ] + }, + { + "before_preds": [ + "balanceOf[msg.sender] <= ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] < ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] != ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "balanceOf[msg.sender] < ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] != ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "totalSupply == ori(totalSupply)", + "totalSupply >= ori(totalSupply)", + "totalSupply <= ori(totalSupply)" + ], + "after_preds": [ + "totalSupply == ori(totalSupply)" + ] + }, + { + "before_preds": [ + "_value <= Sum(balanceOf[...])", + "_value < Sum(balanceOf[...])", + "_value != Sum(balanceOf[...])" + ], + "after_preds": [ + "_value != Sum(balanceOf[...])" + ] + }, + { + "before_preds": [ + "balanceOf[_to] <= Sum(balanceOf[...])", + "balanceOf[_to] < Sum(balanceOf[...])", + "balanceOf[_to] != Sum(balanceOf[...])" + ], + "after_preds": [ + "balanceOf[_to] < Sum(balanceOf[...])", + "balanceOf[_to] != Sum(balanceOf[...])" + ] + }, + { + "before_preds": [ + "balanceOf[_to] <= ori(Sum(balanceOf[...]))", + "balanceOf[_to] < ori(Sum(balanceOf[...]))", + "balanceOf[_to] != ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "balanceOf[_to] < ori(Sum(balanceOf[...]))", + "balanceOf[_to] != ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) >= ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) <= ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) >= ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) <= ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x6f2a550259532f7429530dcb93d86269629e3f2a-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x6f2a550259532f7429530dcb93d86269629e3f2a-removed.json new file mode 100644 index 0000000..0c7f06b --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x6f2a550259532f7429530dcb93d86269629e3f2a-removed.json @@ -0,0 +1,167 @@ +[ + { + "before_preds": [ + "value >= ori(_allowances[msg.sender][spender])", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) >= ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) > ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_balances[recipient] <= Sum(_balances[...])", + "_balances[recipient] < Sum(_balances[...])", + "_balances[recipient] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[recipient] < Sum(_balances[...])", + "_balances[recipient] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x8b68591fe802585a9713bd6ebe75d6c285236c54-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x8b68591fe802585a9713bd6ebe75d6c285236c54-removed.json new file mode 100644 index 0000000..d95ce82 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x8b68591fe802585a9713bd6ebe75d6c285236c54-removed.json @@ -0,0 +1,409 @@ +[ + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= value", + "ori(_allowed[msg.sender][spender]) < value", + "ori(_allowed[msg.sender][spender]) != value" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) != value" + ] + }, + { + "before_preds": [ + "value >= ori(Sum(_allowed[msg.sender][...]))", + "value > ori(Sum(_allowed[msg.sender][...]))", + "value != ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "value > ori(Sum(_allowed[msg.sender][...]))", + "value != ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] >= ori(_allowed[msg.sender][spender])", + "_allowed[msg.sender][spender] > ori(_allowed[msg.sender][spender])", + "_allowed[msg.sender][spender] != ori(_allowed[msg.sender][spender])" + ], + "after_preds": [ + "_allowed[msg.sender][spender] != ori(_allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] == value", + "_allowed[msg.sender][spender] >= value", + "_allowed[msg.sender][spender] <= value" + ], + "after_preds": [ + "_allowed[msg.sender][spender] == value" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] >= ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] > ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] != ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "_allowed[msg.sender][spender] > ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] != ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) >= ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) > ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= ori(_balances[to])", + "ori(_balances[msg.sender]) > ori(_balances[to])", + "ori(_balances[msg.sender]) != ori(_balances[to])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "value <= ori(_totalSupply)", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ], + "after_preds": [ + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "value <= ori(Sum(_balances[...]))", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[to])", + "ori(_totalSupply) > ori(_balances[to])", + "ori(_totalSupply) != ori(_balances[to])" + ], + "after_preds": [ + "ori(_totalSupply) > ori(_balances[to])", + "ori(_totalSupply) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[to])", + "ori(Sum(_balances[...])) > ori(_balances[to])", + "ori(Sum(_balances[...])) != ori(_balances[to])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_totalSupply >= value", + "_totalSupply > value", + "_totalSupply != value" + ], + "after_preds": [ + "_totalSupply != value" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[to]", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ], + "after_preds": [ + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[to])", + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[to]", + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]" + ] + }, + { + "before_preds": [ + "value <= Sum(_balances[...])", + "value < Sum(_balances[...])", + "value != Sum(_balances[...])" + ], + "after_preds": [ + "value < Sum(_balances[...])", + "value != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _balances[to]", + "ori(_totalSupply) > _balances[to]", + "ori(_totalSupply) != _balances[to]" + ], + "after_preds": [ + "ori(_totalSupply) > _balances[to]", + "ori(_totalSupply) != _balances[to]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) != _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[to]", + "Sum(_balances[...]) > _balances[to]", + "Sum(_balances[...]) != _balances[to]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[to]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[to])", + "Sum(_balances[...]) > ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[to])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[to]", + "ori(Sum(_balances[...])) > _balances[to]", + "ori(Sum(_balances[...])) != _balances[to]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[to]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "_balances[to] >= ori(_balances[to])", + "_balances[to] > ori(_balances[to])", + "_balances[to] != ori(_balances[to])" + ], + "after_preds": [ + "_balances[to] != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-removed.json new file mode 100644 index 0000000..f08cc07 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-removed.json @@ -0,0 +1,147 @@ +[ + { + "before_preds": [ + "ori(_balances[recipient]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) >= ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) <= ori(Sum(_locked_balances[...]))" + ], + "after_preds": [ + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(Sum(_locked_balances[...]))", + "ori(Sum(_balances[...])) > ori(Sum(_locked_balances[...]))", + "ori(Sum(_balances[...])) != ori(Sum(_locked_balances[...]))" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(Sum(_locked_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_locked_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) <= Sum(_balances[...])", + "Sum(_locked_balances[...]) < Sum(_balances[...])", + "Sum(_locked_balances[...]) != Sum(_balances[...])" + ], + "after_preds": [ + "Sum(_locked_balances[...]) < Sum(_balances[...])", + "Sum(_locked_balances[...]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) >= ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) <= ori(Sum(_locked_balances[...]))" + ], + "after_preds": [ + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_locked_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_locked_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_locked_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_locked_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-removed.json new file mode 100644 index 0000000..4154b27 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-removed.json @@ -0,0 +1,32 @@ +[ + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xb2923909b5d8bbe01505121f15a4503b6617dae7-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xb2923909b5d8bbe01505121f15a4503b6617dae7-removed.json new file mode 100644 index 0000000..911d3c1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xb2923909b5d8bbe01505121f15a4503b6617dae7-removed.json @@ -0,0 +1,136 @@ +[ + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "after_preds": [ + "ori(Sum(balances[...])) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens" + ], + "after_preds": [ + "ori(Sum(balances[...])) != tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) > balances[to]", + "ori(Sum(balances[...])) != balances[to]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[to]" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= balances[to]", + "ori(balances[to]) < balances[to]", + "ori(balances[to]) != balances[to]" + ], + "after_preds": [ + "ori(balances[to]) < balances[to]", + "ori(balances[to]) != balances[to]" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "balances[msg.sender] <= ori(balances[msg.sender])", + "balances[msg.sender] < ori(balances[msg.sender])", + "balances[msg.sender] != ori(balances[msg.sender])" + ], + "after_preds": [ + "balances[msg.sender] != ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "balances[msg.sender] <= Sum(balances[...])", + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])" + ], + "after_preds": [ + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "balances[to] <= Sum(balances[...])", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ], + "after_preds": [ + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= tokens", + "Sum(balances[...]) > tokens", + "Sum(balances[...]) != tokens" + ], + "after_preds": [ + "Sum(balances[...]) != tokens" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-removed.json new file mode 100644 index 0000000..1e7a116 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-removed.json @@ -0,0 +1,820 @@ +[ + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= value", + "ori(_allowed[msg.sender][spender]) < value", + "ori(_allowed[msg.sender][spender]) != value" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) != value" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= _allowed[msg.sender][spender]", + "ori(_allowed[msg.sender][spender]) < _allowed[msg.sender][spender]", + "ori(_allowed[msg.sender][spender]) != _allowed[msg.sender][spender]" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) < _allowed[msg.sender][spender]", + "ori(_allowed[msg.sender][spender]) != _allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) >= ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) > ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] == value", + "_allowed[msg.sender][spender] >= value", + "_allowed[msg.sender][spender] <= value" + ], + "after_preds": [ + "_allowed[msg.sender][spender] == value" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) >= ori(_balances[to])", + "ori(maxTxAmount) > ori(_balances[to])", + "ori(maxTxAmount) != ori(_balances[to])" + ], + "after_preds": [ + "ori(maxTxAmount) > ori(_balances[to])", + "ori(maxTxAmount) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= ori(_balances[msg.sender])", + "ori(maxTxAmount) < ori(_balances[msg.sender])", + "ori(maxTxAmount) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(maxTxAmount) < ori(_balances[msg.sender])", + "ori(maxTxAmount) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) >= value", + "ori(maxTxAmount) > value", + "ori(maxTxAmount) != value" + ], + "after_preds": [ + "ori(maxTxAmount) != value" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= ori(_totalSupply)", + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= ori(Sum(_balances[...]))", + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= ori(_balances[msg.sender])", + "ori(_balances[to]) < ori(_balances[msg.sender])", + "ori(_balances[to]) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_balances[to]) < ori(_balances[msg.sender])", + "ori(_balances[to]) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= value", + "ori(_balances[to]) < value", + "ori(_balances[to]) != value" + ], + "after_preds": [ + "ori(_balances[to]) != value" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= ori(_totalSupply)", + "ori(_balances[to]) < ori(_totalSupply)", + "ori(_balances[to]) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[to]) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= ori(Sum(_balances[...]))", + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= value", + "ori(_balances[msg.sender]) > value", + "ori(_balances[msg.sender]) != value" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != value" + ] + }, + { + "before_preds": [ + "value <= ori(_totalSupply)", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ], + "after_preds": [ + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "value <= ori(Sum(_balances[...]))", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= ori(maxTxAmount)", + "_balances[msg.sender] > ori(maxTxAmount)", + "_balances[msg.sender] != ori(maxTxAmount)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(maxTxAmount)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= ori(_balances[to])", + "_balances[msg.sender] > ori(_balances[to])", + "_balances[msg.sender] != ori(_balances[to])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= _totalSupply", + "_balances[msg.sender] < _totalSupply", + "_balances[msg.sender] != _totalSupply" + ], + "after_preds": [ + "_balances[msg.sender] != _totalSupply" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= value", + "_balances[msg.sender] > value", + "_balances[msg.sender] != value" + ], + "after_preds": [ + "_balances[msg.sender] != value" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= _balances[to]", + "_balances[msg.sender] > _balances[to]", + "_balances[msg.sender] != _balances[to]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[to]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_totalSupply)", + "_balances[msg.sender] < ori(_totalSupply)", + "_balances[msg.sender] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= maxTxAmount", + "_balances[msg.sender] > maxTxAmount", + "_balances[msg.sender] != maxTxAmount" + ], + "after_preds": [ + "_balances[msg.sender] != maxTxAmount" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= Sum(_balances[...])", + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= _totalSupply", + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply" + ], + "after_preds": [ + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) >= _balances[to]", + "ori(maxTxAmount) > _balances[to]", + "ori(maxTxAmount) != _balances[to]" + ], + "after_preds": [ + "ori(maxTxAmount) > _balances[to]", + "ori(maxTxAmount) != _balances[to]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[to])", + "Sum(_balances[...]) > ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[to])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= value", + "Sum(_balances[...]) > value", + "Sum(_balances[...]) != value" + ], + "after_preds": [ + "Sum(_balances[...]) != value" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[to]", + "Sum(_balances[...]) > _balances[to]", + "Sum(_balances[...]) != _balances[to]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[to]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= maxTxAmount", + "Sum(_balances[...]) > maxTxAmount", + "Sum(_balances[...]) != maxTxAmount" + ], + "after_preds": [ + "Sum(_balances[...]) != maxTxAmount" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= _totalSupply", + "ori(_balances[to]) < _totalSupply", + "ori(_balances[to]) != _totalSupply" + ], + "after_preds": [ + "ori(_balances[to]) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= _balances[to]", + "ori(_balances[to]) < _balances[to]", + "ori(_balances[to]) != _balances[to]" + ], + "after_preds": [ + "ori(_balances[to]) < _balances[to]", + "ori(_balances[to]) != _balances[to]" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= maxTxAmount", + "ori(_balances[to]) < maxTxAmount", + "ori(_balances[to]) != maxTxAmount" + ], + "after_preds": [ + "ori(_balances[to]) != maxTxAmount" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[to]", + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= maxTxAmount", + "ori(_balances[msg.sender]) > maxTxAmount", + "ori(_balances[msg.sender]) != maxTxAmount" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != maxTxAmount" + ] + }, + { + "before_preds": [ + "_totalSupply >= value", + "_totalSupply > value", + "_totalSupply != value" + ], + "after_preds": [ + "_totalSupply != value" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[to]", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ], + "after_preds": [ + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= maxTxAmount", + "_totalSupply > maxTxAmount", + "_totalSupply != maxTxAmount" + ], + "after_preds": [ + "_totalSupply != maxTxAmount" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "value >= _balances[to]", + "value > _balances[to]", + "value != _balances[to]" + ], + "after_preds": [ + "value > _balances[to]", + "value != _balances[to]" + ] + }, + { + "before_preds": [ + "value <= maxTxAmount", + "value < maxTxAmount", + "value != maxTxAmount" + ], + "after_preds": [ + "value < maxTxAmount", + "value != maxTxAmount" + ] + }, + { + "before_preds": [ + "_balances[to] <= ori(_totalSupply)", + "_balances[to] < ori(_totalSupply)", + "_balances[to] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[to] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[to] <= maxTxAmount", + "_balances[to] < maxTxAmount", + "_balances[to] != maxTxAmount" + ], + "after_preds": [ + "_balances[to] != maxTxAmount" + ] + }, + { + "before_preds": [ + "_balances[to] <= ori(Sum(_balances[...]))", + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= maxTxAmount", + "ori(_totalSupply) > maxTxAmount", + "ori(_totalSupply) != maxTxAmount" + ], + "after_preds": [ + "ori(_totalSupply) != maxTxAmount" + ] + }, + { + "before_preds": [ + "maxTxAmount <= ori(Sum(_balances[...]))", + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= ori(_totalSupply)", + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= ori(Sum(_balances[...]))", + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= Sum(_balances[...])", + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= _totalSupply", + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply" + ], + "after_preds": [ + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= maxTxAmount", + "Sum(_balances[...]) > maxTxAmount", + "Sum(_balances[...]) != maxTxAmount" + ], + "after_preds": [ + "Sum(_balances[...]) != maxTxAmount" + ] + }, + { + "before_preds": [ + "_totalSupply >= maxTxAmount", + "_totalSupply > maxTxAmount", + "_totalSupply != maxTxAmount" + ], + "after_preds": [ + "_totalSupply != maxTxAmount" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= maxTxAmount", + "ori(_totalSupply) > maxTxAmount", + "ori(_totalSupply) != maxTxAmount" + ], + "after_preds": [ + "ori(_totalSupply) != maxTxAmount" + ] + }, + { + "before_preds": [ + "maxTxAmount <= ori(Sum(_balances[...]))", + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xc382e04099a435439725bb40647e2b32dc136806-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xc382e04099a435439725bb40647e2b32dc136806-removed.json new file mode 100644 index 0000000..96d35dd --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xc382e04099a435439725bb40647e2b32dc136806-removed.json @@ -0,0 +1,208 @@ +[ + { + "before_preds": [ + "value >= ori(_allowances[msg.sender][spender])", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "value >= ori(Sum(_allowances[msg.sender][...]))", + "value > ori(Sum(_allowances[msg.sender][...]))", + "value != ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "value > ori(Sum(_allowances[msg.sender][...]))", + "value != ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) >= ori(_allowances[msg.sender][spender])", + "Sum(_allowances[msg.sender][...]) > ori(_allowances[msg.sender][spender])", + "Sum(_allowances[msg.sender][...]) != ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) != ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) >= ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) > ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) == _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) <= _allowances[msg.sender][spender]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) == _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-removed.json new file mode 100644 index 0000000..ccc3895 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-removed.json @@ -0,0 +1,233 @@ +[ + { + "before_preds": [ + "value <= ori(_totalSupply)", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ], + "after_preds": [ + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "value <= ori(Sum(_balances[...]))", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= ori(_totalSupply)", + "ori(_balances[to]) < ori(_totalSupply)", + "ori(_balances[to]) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[to]) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= ori(Sum(_balances[...]))", + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply >= value", + "_totalSupply > value", + "_totalSupply != value" + ], + "after_preds": [ + "_totalSupply != value" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[to]", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ], + "after_preds": [ + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[to])", + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "basePercent == ori(basePercent)", + "basePercent >= ori(basePercent)", + "basePercent <= ori(basePercent)" + ], + "after_preds": [ + "basePercent == ori(basePercent)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "value <= Sum(_balances[...])", + "value < Sum(_balances[...])", + "value != Sum(_balances[...])" + ], + "after_preds": [ + "value < Sum(_balances[...])", + "value != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_totalSupply)", + "_balances[msg.sender] < ori(_totalSupply)", + "_balances[msg.sender] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[to] <= Sum(_balances[...])", + "_balances[to] < Sum(_balances[...])", + "_balances[to] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[to] < Sum(_balances[...])", + "_balances[to] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[to] <= ori(_totalSupply)", + "_balances[to] < ori(_totalSupply)", + "_balances[to] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[to] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[to] <= ori(Sum(_balances[...]))", + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[to])", + "Sum(_balances[...]) > ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[to])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "basePercent == ori(basePercent)", + "basePercent >= ori(basePercent)", + "basePercent <= ori(basePercent)" + ], + "after_preds": [ + "basePercent == ori(basePercent)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-removed.json new file mode 100644 index 0000000..744fa8c --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-removed.json @@ -0,0 +1,230 @@ +[ + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= value", + "ori(Sum(_allowances[msg.sender][...])) < value", + "ori(Sum(_allowances[msg.sender][...])) != value" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) != value" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) >= ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) <= ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "value >= ori(_allowances[msg.sender][spender])", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] == value", + "_allowances[msg.sender][spender] >= value", + "_allowances[msg.sender][spender] <= value" + ], + "after_preds": [ + "_allowances[msg.sender][spender] == value" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] >= ori(_allowances[msg.sender][spender])", + "_allowances[msg.sender][spender] > ori(_allowances[msg.sender][spender])", + "_allowances[msg.sender][spender] != ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "_allowances[msg.sender][spender] != ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= _balances[recipient]", + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]" + ], + "after_preds": [ + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "_balances[recipient] <= ori(Sum(_balances[...]))", + "_balances[recipient] < ori(Sum(_balances[...]))", + "_balances[recipient] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[recipient] < ori(Sum(_balances[...]))", + "_balances[recipient] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-removed.json new file mode 100644 index 0000000..a40fac1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-removed.json @@ -0,0 +1,186 @@ +[ + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= tokens", + "ori(allowed[msg.sender][spender]) < tokens", + "ori(allowed[msg.sender][spender]) != tokens" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) != tokens" + ] + }, + { + "before_preds": [ + "tokens >= ori(Sum(allowed[msg.sender][...]))", + "tokens > ori(Sum(allowed[msg.sender][...]))", + "tokens != ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "tokens > ori(Sum(allowed[msg.sender][...]))", + "tokens != ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= allowed[msg.sender][spender]", + "ori(allowed[msg.sender][spender]) < allowed[msg.sender][spender]", + "ori(allowed[msg.sender][spender]) != allowed[msg.sender][spender]" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) < allowed[msg.sender][spender]", + "ori(allowed[msg.sender][spender]) != allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) == allowed[msg.sender][spender]", + "Sum(allowed[msg.sender][...]) >= allowed[msg.sender][spender]", + "Sum(allowed[msg.sender][...]) <= allowed[msg.sender][spender]" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) == allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) >= ori(Sum(allowed[msg.sender][...]))", + "Sum(allowed[msg.sender][...]) > ori(Sum(allowed[msg.sender][...]))", + "Sum(allowed[msg.sender][...]) != ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) != ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "after_preds": [ + "ori(Sum(balances[...])) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= ori(balances[to])", + "Sum(balances[...]) > ori(balances[to])", + "Sum(balances[...]) != ori(balances[to])" + ], + "after_preds": [ + "Sum(balances[...]) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= balances[msg.sender]", + "Sum(balances[...]) > balances[msg.sender]", + "Sum(balances[...]) != balances[msg.sender]" + ], + "after_preds": [ + "Sum(balances[...]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xeeb690a0c9958e5375eda5694e754b125a6c972c-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xeeb690a0c9958e5375eda5694e754b125a6c972c-removed.json new file mode 100644 index 0000000..5d2964d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xeeb690a0c9958e5375eda5694e754b125a6c972c-removed.json @@ -0,0 +1,215 @@ +[ + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) >= ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) <= ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= tokens", + "ori(Sum(allowed[msg.sender][...])) < tokens", + "ori(Sum(allowed[msg.sender][...])) != tokens" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) != tokens" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= tokens", + "ori(allowed[msg.sender][spender]) < tokens", + "ori(allowed[msg.sender][spender]) != tokens" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) != tokens" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] > ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] == tokens", + "allowed[msg.sender][spender] >= tokens", + "allowed[msg.sender][spender] <= tokens" + ], + "after_preds": [ + "allowed[msg.sender][spender] == tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) >= ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) > ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) == tokens", + "Sum(allowed[msg.sender][...]) >= tokens", + "Sum(allowed[msg.sender][...]) <= tokens" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) == tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "after_preds": [ + "ori(Sum(balances[...])) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens" + ], + "after_preds": [ + "ori(Sum(balances[...])) != tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) > balances[to]", + "ori(Sum(balances[...])) != balances[to]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[to]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= balances[to]", + "Sum(balances[...]) > balances[to]", + "Sum(balances[...]) != balances[to]" + ], + "after_preds": [ + "Sum(balances[...]) != balances[to]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= tokens", + "Sum(balances[...]) > tokens", + "Sum(balances[...]) != tokens" + ], + "after_preds": [ + "Sum(balances[...]) != tokens" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= balances[msg.sender]", + "Sum(balances[...]) > balances[msg.sender]", + "Sum(balances[...]) != balances[msg.sender]" + ], + "after_preds": [ + "Sum(balances[...]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-removed.json new file mode 100644 index 0000000..3641fa4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20/removed/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-removed.json @@ -0,0 +1,266 @@ +[ + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) >= ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) <= ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= value", + "ori(Sum(_allowances[msg.sender][...])) < value", + "ori(Sum(_allowances[msg.sender][...])) != value" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) != value" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= value", + "ori(_allowances[msg.sender][spender]) < value", + "ori(_allowances[msg.sender][spender]) != value" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) != value" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] == value", + "_allowances[msg.sender][spender] >= value", + "_allowances[msg.sender][spender] <= value" + ], + "after_preds": [ + "_allowances[msg.sender][spender] == value" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _balances[recipient]", + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) <= _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _balances[recipient]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= _balances[recipient]", + "_balances[msg.sender] < _balances[recipient]", + "_balances[msg.sender] != _balances[recipient]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[recipient]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] == ori(_balances[recipient])", + "_balances[msg.sender] >= ori(_balances[recipient])", + "_balances[msg.sender] <= ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[msg.sender] == ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "_balances[recipient] == ori(_balances[msg.sender])", + "_balances[recipient] >= ori(_balances[msg.sender])", + "_balances[recipient] <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[recipient] == ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok.json new file mode 100644 index 0000000..3feba67 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok.json @@ -0,0 +1,82 @@ +[ + { + "predicates_before_reduction": 1491, + "predicates_after_reduction": 1193, + "reduction_ratio": 0.8001341381623072, + "total_parsing_time": 0.006921529769897461, + "total_reduction_time": 4.462685585021973, + "contract": "./invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json" + }, + { + "predicates_before_reduction": 88, + "predicates_after_reduction": 80, + "reduction_ratio": 0.9090909090909091, + "total_parsing_time": 0.0011990070343017578, + "total_reduction_time": 0.09661340713500977, + "contract": "./invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json" + }, + { + "predicates_before_reduction": 45, + "predicates_after_reduction": 41, + "reduction_ratio": 0.9111111111111111, + "total_parsing_time": 0.0004994869232177734, + "total_reduction_time": 0.05982851982116699, + "contract": "./invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json" + }, + { + "predicates_before_reduction": 708, + "predicates_after_reduction": 554, + "reduction_ratio": 0.7824858757062146, + "total_parsing_time": 0.0035622119903564453, + "total_reduction_time": 1.349210500717163, + "contract": "./invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json" + }, + { + "predicates_before_reduction": 141, + "predicates_after_reduction": 141, + "reduction_ratio": 1.0, + "total_parsing_time": 0.001338958740234375, + "total_reduction_time": 0.23883652687072754, + "contract": "./invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json" + }, + { + "predicates_before_reduction": 39, + "predicates_after_reduction": 39, + "reduction_ratio": 1.0, + "total_parsing_time": 0.0003991127014160156, + "total_reduction_time": 0.044595956802368164, + "contract": "./invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json" + }, + { + "predicates_before_reduction": 330, + "predicates_after_reduction": 316, + "reduction_ratio": 0.9575757575757575, + "total_parsing_time": 0.00339508056640625, + "total_reduction_time": 0.82120680809021, + "contract": "./invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json" + }, + { + "predicates_before_reduction": 299, + "predicates_after_reduction": 254, + "reduction_ratio": 0.8494983277591973, + "total_parsing_time": 0.0019974708557128906, + "total_reduction_time": 0.5158243179321289, + "contract": "./invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json" + }, + { + "predicates_before_reduction": 468, + "predicates_after_reduction": 413, + "reduction_ratio": 0.8824786324786325, + "total_parsing_time": 0.002871990203857422, + "total_reduction_time": 0.9035501480102539, + "contract": "./invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json" + }, + { + "predicates_before_reduction": 56, + "predicates_after_reduction": 56, + "reduction_ratio": 1.0, + "total_parsing_time": 0.0005207061767578125, + "total_reduction_time": 0.0667576789855957, + "contract": "./invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json" + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json new file mode 100644 index 0000000..affd560 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json @@ -0,0 +1,92 @@ +[ + { + "func": "cache(size)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "cache(size)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "update()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Q112) == 0", + "ori(Q112) one of [0]", + "ori(e10) == 0", + "ori(e10) one of [0]", + "ori(length) == 0", + "ori(length) one of [0]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0" + ], + "postconditions": [ + "Q112 == 0", + "Q112 one of [0]", + "e10 == 0", + "e10 one of [0]", + "length == 0", + "length one of [0]", + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112", + "e10 == ori(e10)", + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "update()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Q112) == 0", + "ori(Q112) one of [0]", + "ori(e10) == 0", + "ori(e10) one of [0]", + "ori(length) == 0", + "ori(length) one of [0]" + ], + "postconditions": [ + "Q112 == 0", + "Q112 one of [0]", + "e10 == 0", + "e10 one of [0]", + "length == 0", + "length one of [0]", + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112", + "e10 == ori(e10)", + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json new file mode 100644 index 0000000..079a446 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json @@ -0,0 +1,1569 @@ +[ + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "amount > 0", + "amount == 79228162514000000000000000000", + "amount one of [79228162514000000000000000000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "spender != 0", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(_totalSupply) > 0", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [860260929152]", + "_totalSupply > 0", + "Sum(userDepoistTime[...]) > 0", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [51597976325]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "_amount > 0", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(userDepoistTime[msg.sender]) one of [0,1611890956,1612413709,1612672271,1612709011,1612516662]", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(_balances[msg.sender]) one of [0,494036168419,501354600,72,9986072971,9975667988]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(Sum(_balances[...])) != ori(earnLowerlimit)", + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(earnLowerlimit) > ori(_balances[msg.sender])", + "ori(earnLowerlimit) != ori(_balances[msg.sender])", + "ori(earnLowerlimit) > ori(_totalSupply)", + "ori(earnLowerlimit) != ori(_totalSupply)", + "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))", + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [860260929152]", + "_balances[msg.sender] > 0", + "_totalSupply > 0", + "Sum(userDepoistTime[...]) > 0", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [51597976325]", + "RestrictContractCall == true", + "userDepoistTime[msg.sender] > 0", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(earnLowerlimit)", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) != ori(_balances[msg.sender])", + "Sum(_balances[...]) != earnLowerlimit", + "Sum(_balances[...]) != ori(_totalSupply)", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) != _totalSupply", + "ori(Sum(_balances[...])) != earnLowerlimit", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) != _balances[msg.sender]", + "ori(earnLowerlimit) != _totalSupply", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) < userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) != userDepoistTime[msg.sender]", + "fee3 == ori(fee3)", + "ori(governance) == governance", + "ori(controller) == controller", + "_balances[msg.sender] <= _totalSupply", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] != earnLowerlimit", + "_balances[msg.sender] != ori(_totalSupply)", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply != earnLowerlimit", + "_totalSupply != ori(_totalSupply)", + "ori(_balances[msg.sender]) != earnLowerlimit", + "Sum(userDepoistTime[...]) != ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= userDepoistTime[msg.sender]", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)", + "_decimals == ori(_decimals)", + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "ori(Sum(userDepoistTime[...])) <= userDepoistTime[msg.sender]", + "ori(Sum(userDepoistTime[...])) < userDepoistTime[msg.sender]" + ] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [82641458184]", + "_totalSupply > 0", + "_totalSupply one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [37084585504]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setEarnLowerlimit(_earnLowerlimit)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [50815436600,82641458184]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "_earnLowerlimit > 0", + "_earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) == 5", + "ori(fee1) one of [5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [3224014173,1611989982]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [50815436600,82641458184]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(earnLowerlimit) < _earnLowerlimit", + "ori(earnLowerlimit) != _earnLowerlimit", + "msg.sender == ori(governance)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [50815436600,82641458184]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [50815436600]", + "elem of _balances[...] is one of [50815436600,31826021500,84]", + "_totalSupply > 0", + "_totalSupply one of [50815436600,82641458184]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [3224014173,1611989982]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 == 5", + "fee1 one of [5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [3224014173]", + "elem of userDepoistTime[...] is one of [1611989982,1612024191]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) < earnLowerlimit", + "ori(earnLowerlimit) != earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "msg.sender == governance", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_earnLowerlimit == earnLowerlimit", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setEarnLowerlimit(_earnLowerlimit)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeAddress(fadd)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeAddress(fadd)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeRatio(fees)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1310289998969", + "ori(Sum(_balances[...])) one of [1310289998969]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) == 5", + "ori(fee1) one of [5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 41922035526", + "ori(Sum(userDepoistTime[...])) one of [41922035526]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1310289998969", + "ori(_totalSupply) one of [1310289998969]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)", + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)", + "ori(fee2) != ori(fee3)", + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)", + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)", + "msg.sender == ori(timelock)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1310289998969", + "Sum(_balances[...]) one of [1310289998969]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [1310289998969]", + "elem of _balances[...] is one of [0,4,6,9,17,23,26,29,36,43,47,73,75,1300417580500,84,88,92,93,97,98,9872417260]", + "_totalSupply > 0", + "_totalSupply == 1310289998969", + "_totalSupply one of [1310289998969]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 41922035526", + "Sum(userDepoistTime[...]) one of [41922035526]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 == 10", + "fee1 one of [10]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [41922035526]", + "elem of userDepoistTime[...] is one of [1612433282,1612411910,1612393607,1612411674,1612422047,1612497702,1612414375,1612493096,1612411957,1612410556,1612413117,1612399811,1612435272,1612419407,1612421072,1612459224,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612444665,1612414461,1612024191]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(feeMax) > fee3", + "ori(feeMax) != fee3", + "ori(feeMax) > fee2", + "ori(feeMax) != fee2", + "ori(feeMax) > fee1", + "ori(feeMax) != fee1", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) != fee3", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(fee2) < fee1", + "ori(fee2) != fee1", + "ori(fee2) != feeMax", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(fee3) < fee2", + "ori(fee3) != fee2", + "ori(fee3) < fee1", + "ori(fee3) != fee1", + "ori(fee3) != feeMax", + "fee3 < fee2", + "fee3 != fee2", + "fee3 < fee1", + "fee3 != fee1", + "fee3 != feeMax", + "fee3 < ori(fee1)", + "fee3 != ori(fee1)", + "msg.sender == timelock", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee2 < fee1", + "fee2 != fee1", + "fee2 != feeMax", + "fee2 < ori(fee1)", + "fee2 != ori(fee1)", + "fee1 != feeMax", + "fee1 != ori(fee1)", + "feeMax > ori(fee1)", + "feeMax != ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setFeeRatio(fees)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 851093071954", + "ori(Sum(_balances[...])) one of [851093071954]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "_governance != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) == 5", + "ori(fee1) one of [5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 32247272285", + "ori(Sum(userDepoistTime[...])) one of [32247272285]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 851093071954", + "ori(_totalSupply) one of [851093071954]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "_governance != msg.sender", + "_governance != ori(governance)", + "msg.sender == ori(governance)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 851093071954", + "Sum(_balances[...]) one of [851093071954]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [851093071954]", + "elem of _balances[...] is one of [0,4,6,9,18,23,26,29,36,73,75,77,84,115213479893,88,92,93,97,1373058547,734506532600]", + "_totalSupply > 0", + "_totalSupply == 851093071954", + "_totalSupply one of [851093071954]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 32247272285", + "Sum(userDepoistTime[...]) one of [32247272285]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 == 5", + "fee1 one of [5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [32247272285]", + "elem of userDepoistTime[...] is one of [1612411910,1612393607,1612411674,1612422047,1612414375,1612411957,1612410556,1612413117,1612399811,1612419407,1612421072,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612414461,1612024191]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "_governance == governance", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "msg.sender != governance", + "ori(governance) != governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setRestrictContractCall(enabled)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setRestrictContractCall(enabled)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimeLock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimeLock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "amount > 0", + "amount one of [4673850400,19974784100,120385957800,499026405900,31826021500]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(_balances[recipient]) > 0", + "ori(_balances[recipient]) one of [36,77,18,84,88]", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "recipient != 0", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [38697044728,53210802285,43534554260,3224014173]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "_balances[recipient] > 0", + "_balances[recipient] one of [499026405988,120385957836,4673850477,31826021584,19974784118]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [1003539015686]", + "_totalSupply > 0", + "_totalSupply one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [38697044728,53210802285,43534554260,3224014173]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [38697044728]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) != _balances[recipient]", + "Sum(_balances[...]) != ori(_balances[recipient])", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(Sum(_balances[...])) != _balances[recipient]", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "_balances[recipient] != ori(_balances[recipient])", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "amount > 0", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(RestrictContractCall) == true", + "ori(Sum(_balances[...])) > 0", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(Sum(_allowances[sender][...])) > 0", + "ori(Sum(_allowances[sender][...])) one of [79228162513999999970070829900,79228162513999999968173978500,79228162514000000000000000000]", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "sender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "recipient != 0", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(_totalSupply) > 0", + "ori(_balances[sender]) > 0", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "amount < ori(Sum(_allowances[sender][...]))", + "amount != ori(Sum(_allowances[sender][...]))", + "ori(Sum(_balances[...])) != ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[sender])", + "ori(_balances[recipient]) != ori(_balances[sender])", + "sender != recipient" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_allowances[sender][...]) > 0", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "_balances[recipient] > 0", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [860260929152]", + "_totalSupply > 0", + "Sum(userDepoistTime[...]) > 0", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "elem of _allowances[sender][...] is one of [79228162513999999968173978500]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [51597976325]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) != _balances[sender]", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) != _balances[recipient]", + "Sum(_balances[...]) != ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[sender])", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "_balances[sender] < ori(Sum(_balances[...]))", + "_balances[sender] != ori(Sum(_balances[...]))", + "_balances[sender] < _balances[recipient]", + "_balances[sender] != _balances[recipient]", + "_balances[sender] != ori(_balances[recipient])", + "_balances[sender] != ori(_balances[sender])", + "amount < Sum(_allowances[sender][...])", + "amount != Sum(_allowances[sender][...])", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "Sum(_allowances[sender][...]) != ori(Sum(_allowances[sender][...]))", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(Sum(_balances[...])) != _balances[recipient]", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "_balances[recipient] != ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[sender])", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(governance) == governance", + "ori(controller) == controller", + "_totalSupply == ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) <= ori(_balances[sender])", + "ori(_balances[recipient]) < ori(_balances[sender])" + ], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000", + "ori(earnLowerlimit) one of [1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(userDepoistTime[msg.sender]) > 0", + "ori(userDepoistTime[msg.sender]) one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "msg.sender != 0", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) one of [499026405988,120385957836,4673850477,31826021584,19974784118,262979296856]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) one of [38697044728,43534554260,53210802285,33859705567]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(Sum(_balances[...])) != ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))", + "ori(userDepoistTime[msg.sender]) != ori(Sum(userDepoistTime[...]))", + "ori(_balances[msg.sender]) != ori(_totalSupply)" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]", + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [1408314583361]", + "_balances[msg.sender] == 0", + "_balances[msg.sender] one of [0]", + "_totalSupply > 0", + "_totalSupply one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]", + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) one of [38697044728,43534554260,53210802285,33859705567]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000", + "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [38697044728]", + "RestrictContractCall == true", + "userDepoistTime[msg.sender] > 0", + "userDepoistTime[msg.sender] one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) != _balances[msg.sender]", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) != ori(_balances[msg.sender])", + "Sum(_balances[...]) != ori(_totalSupply)", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) != _totalSupply", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) >= userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]", + "fee3 == ori(fee3)", + "ori(governance) == governance", + "ori(controller) == controller", + "_balances[msg.sender] != _totalSupply", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_totalSupply)", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply != ori(_totalSupply)", + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) != userDepoistTime[msg.sender]", + "timelock == ori(timelock)", + "fee1 == ori(fee1)", + "_decimals == ori(_decimals)", + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000", + "ori(feeMax) one of [1000]", + "ori(fee2) > 0", + "ori(fee2) == 3", + "ori(fee2) one of [3]", + "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "ori(feeAddress) != 0", + "ori(fee3) > 0", + "ori(fee3) == 1", + "ori(fee3) one of [1]", + "ori(governance) != 0", + "ori(token) != 0", + "ori(controller) != 0", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(timelock) != 0", + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60", + "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", + "ori(fee1) one of [10,5]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)", + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)", + "ori(fee2) != ori(fee3)", + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)", + "ori(Sum(_balances[...])) != ori(earnLowerlimit)", + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(earnLowerlimit) != ori(_totalSupply)", + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" + ], + "postconditions": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60", + "depositWithdrawInterval one of [60]", + "min > 0", + "min == 9500", + "min one of [9500]", + "token != 0", + "fee3 > 0", + "fee3 == 1", + "fee3 one of [1]", + "elem of _balances[...] is one of [0]", + "timelock != 0", + "fee2 > 0", + "fee2 == 3", + "fee2 one of [3]", + "fee1 > 0", + "fee1 one of [10,5]", + "controller != 0", + "earnLowerlimit > 0", + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", + "feeMax == 1000", + "feeMax one of [1000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of userDepoistTime[...] is one of [0]", + "RestrictContractCall == true", + "feeAddress != 0", + "governance != 0", + "Sum(_balances[...]) != ori(earnLowerlimit)", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) != earnLowerlimit", + "ori(feeMax) > fee3", + "ori(feeMax) != fee3", + "ori(feeMax) > fee2", + "ori(feeMax) != fee2", + "ori(feeMax) > fee1", + "ori(feeMax) != fee1", + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) != fee3", + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(fee2) < fee1", + "ori(fee2) != fee1", + "ori(fee2) != feeMax", + "ori(Sum(_balances[...])) != earnLowerlimit", + "ori(RestrictContractCall) == RestrictContractCall", + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "ori(earnLowerlimit) != _totalSupply", + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(feeAddress) == feeAddress", + "min == ori(min)", + "token == ori(token)", + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", + "ori(fee3) < fee2", + "ori(fee3) != fee2", + "ori(fee3) < fee1", + "ori(fee3) != fee1", + "ori(fee3) != feeMax", + "fee3 < fee2", + "fee3 != fee2", + "fee3 < fee1", + "fee3 != fee1", + "fee3 != feeMax", + "fee3 < ori(fee1)", + "fee3 != ori(fee1)", + "ori(controller) == controller", + "_totalSupply != earnLowerlimit", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "timelock == ori(timelock)", + "fee2 < fee1", + "fee2 != fee1", + "fee2 != feeMax", + "fee2 < ori(fee1)", + "fee2 != ori(fee1)", + "fee1 != feeMax", + "fee1 >= ori(fee1)", + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)", + "feeMax > ori(fee1)", + "feeMax != ori(fee1)", + "_decimals == ori(_decimals)" + ], + "falsified_preconditions": [ + "ori(Sum(_balances[...])) <= ori(earnLowerlimit)", + "ori(Sum(_balances[...])) < ori(earnLowerlimit)", + "ori(earnLowerlimit) >= ori(_totalSupply)", + "ori(earnLowerlimit) > ori(_totalSupply)" + ], + "falsified_postconditions": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= _totalSupply", + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(governance) == governance", + "_totalSupply >= ori(_totalSupply)", + "fee1 == ori(fee1)", + "fee1 <= ori(fee1)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f.json new file mode 100644 index 0000000..423c987 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f.json @@ -0,0 +1,72 @@ +[ + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(sushi) != 0", + "ori(factory) != 0", + "msg.sender != 0", + "ori(weth) != 0", + "token0 != 0", + "ori(bar) != 0", + "token1 != 0", + "ori(sushi) != ori(weth)", + "ori(sushi) != token0" + ], + "postconditions": [ + "weth != 0", + "sushi != 0", + "bar != 0", + "factory != 0", + "ori(sushi) != weth", + "ori(sushi) == sushi", + "ori(factory) == factory", + "ori(weth) == weth", + "ori(weth) != sushi", + "weth != sushi", + "token0 != sushi", + "bar == ori(bar)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(sushi) != 0", + "ori(factory) != 0", + "ori(weth) != 0", + "ori(bar) != 0", + "ori(sushi) != ori(weth)" + ], + "postconditions": [ + "weth != 0", + "sushi != 0", + "bar != 0", + "factory != 0", + "ori(sushi) != weth", + "ori(sushi) == sushi", + "ori(factory) == factory", + "ori(weth) == weth", + "ori(weth) != sushi", + "weth != sushi", + "bar == ori(bar)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json new file mode 100644 index 0000000..ee3d9de --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json @@ -0,0 +1,970 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_owner) != 0", + "msg.sender != 0", + "ori(lastAccrueTime) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "msg.value > 0", + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) >= ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(_totalSupply) >= ori(reservePool)", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_totalSupply) != ori(_guardCounter)", + "ori(reservePool) <= ori(Sum(_balances[...]))", + "ori(reservePool) != ori(_guardCounter)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_guardCounter)", + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "_totalSupply > 0", + "_balances[msg.sender] > 0", + "elem of _balances[...] is one of [10000000000000000000]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(glbDebtVal) != _totalSupply", + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) != _balances[msg.sender]", + "ori(glbDebtVal) != Sum(_balances[...])", + "ori(glbDebtVal) != _guardCounter", + "ori(glbDebtVal) <= glbDebtVal", + "ori(_owner) == _owner", + "ori(_totalSupply) < _totalSupply", + "ori(_totalSupply) != _totalSupply", + "ori(_totalSupply) >= reservePool", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) != _guardCounter", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply", + "ori(reservePool) <= reservePool", + "ori(reservePool) != _balances[msg.sender]", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])", + "ori(reservePool) != _guardCounter", + "ori(reservePool) <= glbDebtVal", + "lastAccrueTime >= ori(lastAccrueTime)", + "glbDebtShare == ori(glbDebtShare)", + "_totalSupply != reservePool", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)", + "_totalSupply != glbDebtVal", + "reservePool <= ori(Sum(_balances[...]))", + "reservePool != _balances[msg.sender]", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])", + "reservePool != _guardCounter", + "reservePool != ori(_guardCounter)", + "reservePool <= glbDebtVal", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) != _guardCounter", + "ori(_balances[msg.sender]) <= glbDebtVal", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) < Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])", + "ori(Sum(_balances[...])) != _guardCounter", + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] != _guardCounter", + "_balances[msg.sender] != ori(_guardCounter)", + "_balances[msg.sender] != glbDebtVal", + "Sum(_balances[...]) != _guardCounter", + "Sum(_balances[...]) != ori(_guardCounter)", + "Sum(_balances[...]) != glbDebtVal", + "nextPositionID == ori(nextPositionID)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter != ori(_guardCounter)", + "_guardCounter != glbDebtVal", + "config == ori(config)", + "ori(_guardCounter) != glbDebtVal" + ], + "falsified_preconditions": [ + "ori(_balances[msg.sender]) == 0", + "ori(glbDebtVal) <= ori(_totalSupply)", + "ori(glbDebtVal) <= ori(Sum(_balances[...]))", + "ori(reservePool) >= ori(_balances[msg.sender])", + "ori(_balances[msg.sender]) <= ori(_guardCounter)", + "ori(_balances[msg.sender]) < ori(_guardCounter)" + ], + "falsified_postconditions": [ + "ori(glbDebtVal) <= _totalSupply", + "ori(glbDebtVal) < _totalSupply", + "ori(glbDebtVal) <= Sum(_balances[...])", + "ori(glbDebtVal) < Sum(_balances[...])", + "ori(_totalSupply) >= glbDebtVal", + "ori(reservePool) <= _balances[msg.sender]", + "ori(reservePool) < _balances[msg.sender]", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)", + "_totalSupply >= glbDebtVal", + "_totalSupply > glbDebtVal", + "reservePool >= ori(_balances[msg.sender])", + "reservePool <= _balances[msg.sender]", + "reservePool < _balances[msg.sender]", + "ori(_balances[msg.sender]) <= _guardCounter", + "ori(_balances[msg.sender]) < _guardCounter", + "ori(Sum(_balances[...])) >= glbDebtVal", + "Sum(_balances[...]) >= glbDebtVal", + "Sum(_balances[...]) > glbDebtVal" + ] + }, + { + "func": "deposit()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "kill(id)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "kill(id)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "recover(token,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "recover(token,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "reduceReserve(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "reduceReserve(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "updateConfig(_config)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(glbDebtVal) > 0", + "ori(glbDebtVal) == 14854681992016139228071", + "ori(glbDebtVal) one of [14854681992016139228071]", + "ori(_owner) != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 20424063187886226982599", + "ori(_totalSupply) one of [20424063187886226982599]", + "ori(reservePool) > 0", + "ori(reservePool) == 148922433659474232", + "ori(reservePool) one of [148922433659474232]", + "msg.sender != 0", + "ori(lastAccrueTime) > 0", + "ori(lastAccrueTime) == 1602231144", + "ori(lastAccrueTime) one of [1602231144]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 20424063187886226982599", + "ori(Sum(_balances[...])) one of [20424063187886226982599]", + "_config != 0", + "ori(nextPositionID) > 0", + "ori(nextPositionID) == 198", + "ori(nextPositionID) one of [198]", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "ori(_guardCounter) == 376", + "ori(_guardCounter) one of [376]", + "ori(glbDebtShare) > 0", + "ori(glbDebtShare) == 14846441340661167278357", + "ori(glbDebtShare) one of [14846441340661167278357]", + "msg.value == 0", + "msg.value one of [0]", + "_config != ori(config)" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "lastAccrueTime == 1602231144", + "lastAccrueTime one of [1602231144]", + "glbDebtShare > 0", + "glbDebtShare == 14846441340661167278357", + "glbDebtShare one of [14846441340661167278357]", + "_totalSupply > 0", + "_totalSupply == 20424063187886226982599", + "_totalSupply one of [20424063187886226982599]", + "reservePool > 0", + "reservePool == 148922433659474232", + "reservePool one of [148922433659474232]", + "elem of _balances[...] is one of [20424063187886226982599]", + "elem of _balances[...] is one of [0,207595542558178816,2499288059837974695884,4999207308361928720,76989635665897056757,2099694672502978261129,2499278042403573792,23994090941122685480,348905267647927528350,4057048061363058246,19994236218049902145,12008096684355041865,3498972866121430093,399952049758648104376,379892644249751734723,7331074273148906603,499926721158544918445,28995014649187331200,155534040163110543,3419055614113489263301,199945786064955255869,99984922215138066540,11940731249496242,9998648791479301808,99997986090636984,4999319919409024702,75278599312019471008,20004274794429721786,22994220695367180988,3998913359845597384,9497882822697579207,1849753685077835228080,1499693766495532245,9998132539448897243,2999161464973501151,122963923838163536554,9998602921031189222,249933540782134667412,8748256010480108303,199870887498978286782,74979877460347423478,2999622873234109207,74989718060626759416,1999465504916710427064,499908735865805608,1241962116152060713,401109492287907629,73980033536100457236,29886166173581944622,359442063782612289,39988232675288000305,999713726897813322,953321242468317018,22006669614395381074,330342581938126080214,401583241182296934,1999553099697343335,4998650914601382245,899807013883311181285,349967173402743561941,4999141914029901165,999808531376531825,19996452589694343531,2999199985428679028,100983359711349393234,86984751696672373087,299941269738273242381,2999577045009891728,2099550583177882008,156757421593122201,18497345372475515793,2999475445556411802,99980055585089435,282421952098266234655,99985734138462998901,499892501497066034892,37108231016789653399,7997832369182641578,1427667316733088179,2199682035744654782,499855855955010505,9997205556608119756,19994928949477146578,4018969067458326495,19995027751107133405,1999420721406120521858,177960697518442657180,39994654851654382555,999861461461553649,99985182676534263,1999560000545579004,29998406400582478834]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 20424063187886226982599", + "Sum(_balances[...]) one of [20424063187886226982599]", + "nextPositionID > 0", + "nextPositionID == 198", + "nextPositionID one of [198]", + "_guardCounter > 0", + "_guardCounter == 376", + "_guardCounter one of [376]", + "config != 0", + "glbDebtVal > 0", + "glbDebtVal == 14854681992016139228071", + "glbDebtVal one of [14854681992016139228071]", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(glbDebtVal) == glbDebtVal", + "ori(glbDebtVal) >= glbDebtVal", + "ori(glbDebtVal) <= glbDebtVal", + "ori(_owner) == _owner", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(reservePool) == reservePool", + "ori(reservePool) >= reservePool", + "ori(reservePool) <= reservePool", + "lastAccrueTime == ori(lastAccrueTime)", + "glbDebtShare == ori(glbDebtShare)", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_config == config", + "nextPositionID == ori(nextPositionID)", + "_guardCounter == ori(_guardCounter)", + "config != ori(config)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "updateConfig(_config)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(share)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(glbDebtVal) > 0", + "ori(_owner) != 0", + "ori(_totalSupply) > 0", + "ori(reservePool) > 0", + "msg.sender != 0", + "share > 0", + "ori(lastAccrueTime) > 0", + "ori(_balances[msg.sender]) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "ori(glbDebtShare) > 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(glbDebtVal) != ori(_totalSupply)", + "ori(glbDebtVal) != ori(reservePool)", + "ori(glbDebtVal) > ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(Sum(_balances[...]))", + "ori(glbDebtVal) > ori(_guardCounter)", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(_totalSupply) != ori(reservePool)", + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_totalSupply) > ori(_guardCounter)", + "ori(_totalSupply) != ori(_guardCounter)", + "ori(reservePool) != ori(_balances[msg.sender])", + "ori(reservePool) < ori(Sum(_balances[...]))", + "ori(reservePool) != ori(Sum(_balances[...]))", + "ori(reservePool) > ori(_guardCounter)", + "ori(reservePool) != ori(_guardCounter)", + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_guardCounter)", + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "glbDebtShare > 0", + "_totalSupply > 0", + "reservePool > 0", + "_balances[msg.sender] one of [0,999710360703060260929,65205495417134526340]", + "elem of _balances[...] is one of [20424063187886226982599]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "glbDebtVal > 0", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(glbDebtVal) != _totalSupply", + "ori(glbDebtVal) != reservePool", + "ori(glbDebtVal) > _balances[msg.sender]", + "ori(glbDebtVal) != _balances[msg.sender]", + "ori(glbDebtVal) != Sum(_balances[...])", + "ori(glbDebtVal) > _guardCounter", + "ori(glbDebtVal) != _guardCounter", + "ori(glbDebtVal) < glbDebtVal", + "ori(glbDebtVal) != glbDebtVal", + "ori(_owner) == _owner", + "ori(_totalSupply) > _totalSupply", + "ori(_totalSupply) != _totalSupply", + "ori(_totalSupply) != reservePool", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) > _guardCounter", + "ori(_totalSupply) != _guardCounter", + "ori(_totalSupply) != glbDebtVal", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply", + "ori(reservePool) < reservePool", + "ori(reservePool) != reservePool", + "ori(reservePool) != _balances[msg.sender]", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])", + "ori(reservePool) > _guardCounter", + "ori(reservePool) != _guardCounter", + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal", + "lastAccrueTime != ori(lastAccrueTime)", + "glbDebtShare == ori(glbDebtShare)", + "_totalSupply != reservePool", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)", + "_totalSupply != glbDebtVal", + "reservePool != ori(_balances[msg.sender])", + "reservePool < ori(Sum(_balances[...]))", + "reservePool != ori(Sum(_balances[...]))", + "reservePool != _balances[msg.sender]", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])", + "reservePool > _guardCounter", + "reservePool != _guardCounter", + "reservePool > ori(_guardCounter)", + "reservePool != ori(_guardCounter)", + "reservePool < glbDebtVal", + "reservePool != glbDebtVal", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) != _guardCounter", + "ori(_balances[msg.sender]) != glbDebtVal", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) > Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])", + "ori(Sum(_balances[...])) != _guardCounter", + "ori(Sum(_balances[...])) != glbDebtVal", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] != _guardCounter", + "_balances[msg.sender] != ori(_guardCounter)", + "_balances[msg.sender] != glbDebtVal", + "Sum(_balances[...]) != _guardCounter", + "Sum(_balances[...]) != ori(_guardCounter)", + "Sum(_balances[...]) != glbDebtVal", + "nextPositionID == ori(nextPositionID)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter != ori(_guardCounter)", + "_guardCounter != glbDebtVal", + "config == ori(config)", + "ori(_guardCounter) != glbDebtVal" + ], + "falsified_preconditions": [ + "ori(glbDebtVal) <= ori(_totalSupply)", + "ori(glbDebtVal) < ori(_totalSupply)", + "ori(glbDebtVal) <= ori(Sum(_balances[...]))", + "ori(glbDebtVal) < ori(Sum(_balances[...]))", + "ori(reservePool) <= ori(_balances[msg.sender])", + "ori(reservePool) < ori(_balances[msg.sender])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] == 0", + "ori(glbDebtVal) <= _totalSupply", + "ori(glbDebtVal) < _totalSupply", + "ori(glbDebtVal) <= Sum(_balances[...])", + "ori(glbDebtVal) < Sum(_balances[...])", + "ori(_totalSupply) >= glbDebtVal", + "ori(_totalSupply) > glbDebtVal", + "ori(reservePool) >= _balances[msg.sender]", + "ori(reservePool) > _balances[msg.sender]", + "_totalSupply >= glbDebtVal", + "_totalSupply > glbDebtVal", + "reservePool <= ori(_balances[msg.sender])", + "reservePool < ori(_balances[msg.sender])", + "reservePool >= _balances[msg.sender]", + "reservePool > _balances[msg.sender]", + "ori(Sum(_balances[...])) >= glbDebtVal", + "ori(Sum(_balances[...])) > glbDebtVal", + "_balances[msg.sender] <= _guardCounter", + "_balances[msg.sender] < _guardCounter", + "_balances[msg.sender] <= ori(_guardCounter)", + "_balances[msg.sender] < ori(_guardCounter)", + "Sum(_balances[...]) >= glbDebtVal", + "Sum(_balances[...]) > glbDebtVal" + ] + }, + { + "func": "withdraw(share)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawReserve(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawReserve(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "work(id,goblin,loan,maxReturn,data)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_owner) != 0", + "maxReturn one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "goblin != 0", + "msg.sender != 0", + "ori(lastAccrueTime) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "data != \"\"", + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) >= id", + "ori(glbDebtVal) != ori(nextPositionID)", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(glbDebtVal) >= ori(glbDebtShare)", + "ori(reservePool) >= id", + "ori(reservePool) != loan", + "ori(reservePool) != ori(nextPositionID)", + "ori(reservePool) != ori(_guardCounter)", + "ori(reservePool) <= ori(glbDebtShare)", + "goblin != msg.sender", + "id != ori(nextPositionID)", + "id < ori(_guardCounter)", + "id != ori(_guardCounter)", + "id <= ori(glbDebtShare)", + "loan != ori(nextPositionID)", + "loan != ori(_guardCounter)", + "ori(nextPositionID) < ori(_guardCounter)", + "ori(nextPositionID) != ori(_guardCounter)", + "ori(nextPositionID) != ori(glbDebtShare)", + "ori(_guardCounter) != ori(glbDebtShare)" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "glbDebtShare > 0", + "_totalSupply > 0", + "elem of _balances[...] is one of [10000000000000000000]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "glbDebtVal > 0", + "positions[id].goblin == ori(positions[id].goblin)", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(glbDebtVal) != glbDebtShare", + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) != nextPositionID", + "ori(glbDebtVal) != _guardCounter", + "ori(_owner) == _owner", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(reservePool) < glbDebtShare", + "ori(reservePool) != glbDebtShare", + "ori(reservePool) <= reservePool", + "ori(reservePool) != nextPositionID", + "ori(reservePool) != _guardCounter", + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal", + "lastAccrueTime >= ori(lastAccrueTime)", + "positions[id].debtShare <= ori(positions[id].debtShare)", + "id < glbDebtShare", + "id != glbDebtShare", + "id <= reservePool", + "id != nextPositionID", + "id < _guardCounter", + "id != _guardCounter", + "id < glbDebtVal", + "id != glbDebtVal", + "glbDebtShare != reservePool", + "glbDebtShare >= loan", + "glbDebtShare != nextPositionID", + "glbDebtShare > _guardCounter", + "glbDebtShare != _guardCounter", + "glbDebtShare != ori(nextPositionID)", + "glbDebtShare > ori(_guardCounter)", + "glbDebtShare != ori(_guardCounter)", + "glbDebtShare <= glbDebtVal", + "reservePool != loan", + "reservePool != nextPositionID", + "reservePool != _guardCounter", + "reservePool != ori(nextPositionID)", + "reservePool != ori(_guardCounter)", + "reservePool <= ori(glbDebtShare)", + "reservePool < glbDebtVal", + "reservePool != glbDebtVal", + "ori(positions[id].owner) == positions[id].owner", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "loan != nextPositionID", + "loan != _guardCounter", + "loan <= glbDebtVal", + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(_guardCounter)", + "nextPositionID != ori(glbDebtShare)", + "nextPositionID < glbDebtVal", + "nextPositionID != glbDebtVal", + "_guardCounter != ori(nextPositionID)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter != ori(_guardCounter)", + "_guardCounter != ori(glbDebtShare)", + "_guardCounter != glbDebtVal", + "config == ori(config)", + "ori(nextPositionID) < glbDebtVal", + "ori(nextPositionID) != glbDebtVal", + "ori(_guardCounter) != glbDebtVal", + "ori(glbDebtShare) != glbDebtVal" + ], + "falsified_preconditions": [ + "maxReturn == 0", + "ori(positions[id].goblin) == 0", + "id == 0", + "ori(positions[id].debtShare) == 0", + "ori(positions[id].owner) == 0", + "msg.value > 0", + "id <= loan" + ], + "falsified_postconditions": [ + "positions[id].goblin == 0", + "positions[id].debtShare == 0", + "positions[id].owner == 0", + "ori(glbDebtVal) <= glbDebtVal", + "ori(glbDebtVal) < glbDebtVal", + "ori(glbDebtVal) != glbDebtVal", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)", + "positions[id].debtShare == ori(positions[id].debtShare)", + "positions[id].debtShare >= ori(positions[id].debtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "nextPositionID == ori(nextPositionID) + 1", + "nextPositionID > ori(nextPositionID)", + "nextPositionID != ori(nextPositionID)", + "ori(glbDebtShare) <= glbDebtVal", + "ori(glbDebtShare) < glbDebtVal" + ] + }, + { + "func": "work(id,goblin,loan,maxReturn,data)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_owner) != 0", + "ori(lastAccrueTime) > 0", + "ori(nextPositionID) > 0", + "ori(config) != 0", + "ori(_guardCounter) > 0", + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) != ori(nextPositionID)", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(glbDebtVal) >= ori(glbDebtShare)", + "ori(_totalSupply) >= ori(reservePool)", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_totalSupply) != ori(_guardCounter)", + "ori(reservePool) <= ori(Sum(_balances[...]))", + "ori(reservePool) != ori(nextPositionID)", + "ori(reservePool) != ori(_guardCounter)", + "ori(reservePool) <= ori(glbDebtShare)", + "ori(Sum(_balances[...])) != ori(_guardCounter)", + "ori(nextPositionID) <= ori(_guardCounter)", + "ori(nextPositionID) != ori(glbDebtShare)", + "ori(_guardCounter) != ori(glbDebtShare)" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_owner != 0", + "lastAccrueTime > 0", + "_totalSupply > 0", + "elem of _balances[...] is one of [10000000000000000000]", + "Sum(_balances[...]) > 0", + "nextPositionID > 0", + "_guardCounter > 0", + "config != 0", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(glbDebtVal) != _totalSupply", + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) != Sum(_balances[...])", + "ori(glbDebtVal) != nextPositionID", + "ori(glbDebtVal) != _guardCounter", + "ori(_owner) == _owner", + "ori(_totalSupply) >= reservePool", + "ori(_totalSupply) != _guardCounter", + "ori(reservePool) <= glbDebtShare", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply", + "ori(reservePool) <= reservePool", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])", + "ori(reservePool) != nextPositionID", + "ori(reservePool) != _guardCounter", + "ori(reservePool) <= glbDebtVal", + "lastAccrueTime >= ori(lastAccrueTime)", + "glbDebtShare >= reservePool", + "glbDebtShare != nextPositionID", + "glbDebtShare != _guardCounter", + "glbDebtShare != ori(nextPositionID)", + "glbDebtShare != ori(_guardCounter)", + "glbDebtShare <= glbDebtVal", + "_totalSupply != reservePool", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)", + "_totalSupply != glbDebtVal", + "reservePool <= ori(Sum(_balances[...]))", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])", + "reservePool != nextPositionID", + "reservePool != _guardCounter", + "reservePool != ori(nextPositionID)", + "reservePool != ori(_guardCounter)", + "reservePool <= ori(glbDebtShare)", + "reservePool <= glbDebtVal", + "ori(Sum(_balances[...])) != _guardCounter", + "Sum(_balances[...]) != _guardCounter", + "Sum(_balances[...]) != ori(_guardCounter)", + "Sum(_balances[...]) != glbDebtVal", + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(_guardCounter)", + "nextPositionID != ori(glbDebtShare)", + "nextPositionID != glbDebtVal", + "_guardCounter != ori(nextPositionID)", + "_guardCounter >= ori(_guardCounter)", + "_guardCounter != ori(glbDebtShare)", + "_guardCounter != glbDebtVal", + "ori(nextPositionID) != glbDebtVal", + "ori(_guardCounter) != glbDebtVal" + ], + "falsified_preconditions": [ + "ori(reservePool) == 0", + "ori(glbDebtVal) <= ori(_totalSupply)", + "ori(glbDebtVal) <= ori(Sum(_balances[...]))", + "ori(glbDebtVal) == ori(glbDebtShare)", + "ori(glbDebtVal) <= ori(glbDebtShare)", + "ori(reservePool) <= ori(nextPositionID)", + "ori(reservePool) < ori(nextPositionID)", + "ori(reservePool) <= ori(_guardCounter)", + "ori(reservePool) < ori(_guardCounter)" + ], + "falsified_postconditions": [ + "ori(glbDebtVal) <= glbDebtShare", + "ori(glbDebtVal) <= _totalSupply", + "ori(glbDebtVal) < _totalSupply", + "ori(glbDebtVal) <= Sum(_balances[...])", + "ori(glbDebtVal) < Sum(_balances[...])", + "ori(glbDebtVal) <= glbDebtVal", + "ori(_totalSupply) <= _totalSupply", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) >= glbDebtVal", + "ori(reservePool) <= nextPositionID", + "ori(reservePool) < nextPositionID", + "ori(reservePool) <= _guardCounter", + "ori(reservePool) < _guardCounter", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)", + "glbDebtShare >= ori(glbDebtShare)", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply >= glbDebtVal", + "_totalSupply > glbDebtVal", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) >= glbDebtVal", + "Sum(_balances[...]) >= glbDebtVal", + "Sum(_balances[...]) > glbDebtVal", + "nextPositionID == _guardCounter - 1", + "nextPositionID == ori(_guardCounter)", + "nextPositionID >= ori(_guardCounter)", + "_guardCounter == ori(_guardCounter) + 1", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)", + "config == ori(config)", + "ori(glbDebtShare) <= glbDebtVal" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json new file mode 100644 index 0000000..ad3acfd --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json @@ -0,0 +1,722 @@ +[ + { + "func": "approveJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "_converter != 0", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "ori(approvedJarConverters[_converter]) == false", + "ori(governance) == msg.sender" + ], + "postconditions": [ + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "approvedJarConverters[_converter] == true", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance == ori(governance)", + "governance == msg.sender", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist == ori(strategist)", + "approvedJarConverters[_converter] != ori(approvedJarConverters[_converter])", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approveJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approveStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_strategy != 0", + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(approvedStrategies[_token][_strategy]) == false", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_token != 0", + "ori(timelock) == msg.sender" + ], + "postconditions": [ + "approvedStrategies[_token][_strategy] == true", + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "approvedStrategies[_token][_strategy] != ori(approvedStrategies[_token][_strategy])", + "governance == ori(governance)", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist == ori(strategist)", + "ori(timelock) == timelock", + "msg.sender == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approveStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseStrategyTokenGetStuck(_strategy,_token)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseStrategyTokenGetStuck(_strategy,_token)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseTokensGetStuck(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "inCaseTokensGetStuck(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeJarConverter(_converter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "revokeStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setConvenienceFee(_convenienceFee)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setConvenienceFee(_convenienceFee)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setDevFund(_devfund)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setDevFund(_devfund)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_governance != 0", + "ori(governance) == msg.sender", + "ori(governance) != _governance", + "msg.sender != _governance" + ], + "postconditions": [ + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance != ori(governance)", + "governance != msg.sender", + "governance == _governance", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist == ori(strategist)", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setJar(_token,_jar)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(jars[_token]) == 0", + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "_jar != 0", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_token != 0", + "ori(jars[_token]) != _jar", + "ori(governance) != ori(strategist)", + "ori(governance) == msg.sender", + "ori(strategist) != msg.sender" + ], + "postconditions": [ + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "jars[_token] != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "ori(jars[_token]) != jars[_token]", + "governance != strategist", + "governance == ori(governance)", + "governance != ori(strategist)", + "governance == msg.sender", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "_jar == jars[_token]", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist != ori(governance)", + "strategist == ori(strategist)", + "strategist != msg.sender", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setJar(_token,_jar)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setOneSplit(_onesplit)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setOneSplit(_onesplit)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setSplit(_split)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setSplit(_split)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategist(_strategist)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategist(_strategist)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_strategy != 0", + "ori(devfund) != 0", + "ori(strategies[_token]) == 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(approvedStrategies[_token][_strategy]) == true", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_token != 0", + "_strategy != ori(strategies[_token])", + "ori(governance) != ori(strategist)", + "ori(governance) == msg.sender", + "ori(strategist) != msg.sender" + ], + "postconditions": [ + "approvedStrategies[_token][_strategy] == true", + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategies[_token] != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "_strategy == strategies[_token]", + "approvedStrategies[_token][_strategy] == ori(approvedStrategies[_token][_strategy])", + "governance != strategist", + "governance == ori(governance)", + "governance != ori(strategist)", + "governance == msg.sender", + "split == ori(split)", + "ori(devfund) == devfund", + "ori(strategies[_token]) != strategies[_token]", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist != ori(governance)", + "strategist == ori(strategist)", + "strategist != msg.sender", + "ori(timelock) == timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setStrategy(_token,_strategy)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimelock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "msg.value == 0", + "msg.value one of [0]", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "msg.sender != 0", + "_timelock != 0", + "ori(timelock) == msg.sender", + "ori(timelock) != _timelock", + "msg.sender != _timelock" + ], + "postconditions": [ + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance == ori(governance)", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist == ori(strategist)", + "ori(timelock) != timelock", + "msg.sender != timelock", + "timelock == _timelock" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTimelock(_timelock)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTreasury(_treasury)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setTreasury(_treasury)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapExactJarForJar(_fromJar,_toJar,_fromJarAmount,_toJarMinAmount,_targets,_data)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapExactJarForJar(_fromJar,_toJar,_fromJarAmount,_toJarMinAmount,_targets,_data)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_token,_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll(_token)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll(_token)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "yearn(_strategy,_token,parts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "yearn(_strategy,_token,parts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(devfund) != 0", + "ori(split) > 0", + "ori(split) == 500", + "ori(split) one of [500]", + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100", + "ori(convenienceFee) one of [100]", + "ori(governance) != 0", + "ori(treasury) != 0", + "ori(strategist) != 0", + "ori(onesplit) != 0", + "ori(timelock) != 0", + "ori(governance) != ori(strategist)" + ], + "postconditions": [ + "governance != 0", + "split > 0", + "split == 500", + "split one of [500]", + "onesplit != 0", + "treasury != 0", + "strategist != 0", + "devfund != 0", + "convenienceFee > 0", + "convenienceFee == 100", + "convenienceFee one of [100]", + "timelock != 0", + "governance != strategist", + "governance != ori(strategist)", + "split == ori(split)", + "ori(devfund) == devfund", + "onesplit == ori(onesplit)", + "treasury == ori(treasury)", + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", + "strategist != ori(governance)", + "strategist == ori(strategist)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "governance == ori(governance)", + "ori(timelock) == timelock" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json new file mode 100644 index 0000000..1cf2310 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json @@ -0,0 +1,549 @@ +[ + { + "func": "anySwapFeeTo(token,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapFeeTo(token,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,tokens,to,amounts,fromChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,tokens,to,amounts,fromChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapIn(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInAuto(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "to != 0", + "token != 0", + "amount > 0", + "fromChainID > 0", + "fromChainID one of [56,137,250]", + "txs != \"\"", + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]", + "msg.sender != 0" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInAuto(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForNative(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForNative(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForTokens(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInExactTokensForTokens(txs,amountIn,amountOutMin,path,to,deadline,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInUnderlying(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapInUnderlying(txs,token,to,amount,fromChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "to != 0", + "token != 0", + "toChainID > 0", + "toChainID == 56", + "toChainID one of [56]", + "amount > 0", + "amount == 390000000000", + "amount one of [390000000000]", + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]", + "msg.sender != 0" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(tokens,to,amounts,toChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOut(tokens,to,amounts,toChainIDs)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNative(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNative(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForNativeUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokens(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokens(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlying(amountIn,amountOutMin,path,to,deadline,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutExactTokensForTokensUnderlyingWithTransferPermit(from,amountIn,amountOutMin,path,to,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlying(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "to != 0", + "token != 0", + "toChainID > 0", + "toChainID one of [56,137,250]", + "amount > 0", + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]", + "msg.sender != 0" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlying(token,to,amount,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithTransferPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "anySwapOutUnderlyingWithTransferPermit(from,token,to,amount,deadline,v,r,s,toChainID)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeMPC(newMPC)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeMPC(newMPC)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeVault(token,newVault)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "changeVault(token,newVault)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountIn(amountOut,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountIn(amountOut,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountOut(amountIn,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "getAmountOut(amountIn,reserveIn,reserveOut)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "quote(amountA,reserveA,reserveB)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "quote(amountA,reserveA,reserveB)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_oldMPC) == 0", + "ori(_newMPC) != 0", + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046", + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "postconditions": [ + "_newMPC != 0", + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046", + "_newMPCEffectiveTime one of [1624013046]", + "_oldMPC == 0", + "_newMPC == ori(_newMPC)", + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "ori(_oldMPC) == _oldMPC" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json new file mode 100644 index 0000000..5fdb5f1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json @@ -0,0 +1,444 @@ +[ + { + "func": "removeAlerter(alerter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeAlerter(alerter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "tradeWithHint(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId,hint)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "tradeWithHint(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId,hint)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToEther(token,srcAmount,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToEther(token,srcAmount,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawToken(token,amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) > 0", + "ori(Sum(decimals[...])) == 81", + "ori(Sum(decimals[...])) one of [81]", + "ori(pendingAdmin) != 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "sendTo != 0", + "token != 0", + "ori(admin) != 0", + "amount > 0", + "amount == 40963957051", + "amount one of [40963957051]", + "msg.sender == ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [81]", + "elem of decimals[...] is one of [9,18]", + "pendingAdmin != 0", + "admin != 0", + "Sum(decimals[...]) > 0", + "Sum(decimals[...]) == 81", + "Sum(decimals[...]) one of [81]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "ori(pendingAdmin) == pendingAdmin", + "msg.sender == admin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawToken(token,amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addAlerter(newAlerter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addAlerter(newAlerter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToToken(src,srcAmount,dest,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapTokenToToken(src,srcAmount,dest,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdmin(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(Sum(decimals[...])) one of [0]", + "ori(pendingAdmin) == 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "newAdmin != 0", + "ori(admin) != 0", + "ori(pendingAdmin) != newAdmin", + "msg.sender == ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of []", + "pendingAdmin != 0", + "admin != 0", + "Sum(decimals[...]) == 0", + "Sum(decimals[...]) one of [0]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "ori(pendingAdmin) != pendingAdmin", + "msg.sender == admin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "newAdmin == pendingAdmin", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdmin(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimAdmin()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimAdmin()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapEtherToToken(token,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "swapEtherToToken(token,minConversionRate)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdminQuickly(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(Sum(decimals[...])) one of [0]", + "ori(pendingAdmin) == 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "newAdmin != 0", + "ori(admin) != 0", + "msg.sender != newAdmin", + "msg.sender == ori(admin)", + "newAdmin != ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of []", + "pendingAdmin == 0", + "admin != 0", + "Sum(decimals[...]) == 0", + "Sum(decimals[...]) one of [0]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "ori(pendingAdmin) == pendingAdmin", + "msg.sender != admin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "newAdmin == admin", + "ori(admin) != admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferAdminQuickly(newAdmin)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addOperator(newOperator)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addOperator(newOperator)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setKyberNetworkContract(_kyberNetworkContract)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(Sum(decimals[...])) one of [0]", + "_kyberNetworkContract != 0", + "ori(pendingAdmin) == 0", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(kyberNetworkContract) == 0", + "ori(admin) != 0", + "_kyberNetworkContract != ori(kyberNetworkContract)", + "msg.sender == ori(admin)" + ], + "postconditions": [ + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of []", + "pendingAdmin == 0", + "admin != 0", + "Sum(decimals[...]) == 0", + "Sum(decimals[...]) one of [0]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "_kyberNetworkContract == kyberNetworkContract", + "ori(pendingAdmin) == pendingAdmin", + "msg.sender == admin", + "ori(kyberNetworkContract) != kyberNetworkContract", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setKyberNetworkContract(_kyberNetworkContract)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeOperator(operator)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeOperator(operator)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "trade(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "minConversionRate > 0", + "destAddress != 0", + "ori(pendingAdmin) != 0", + "msg.sender != 0", + "ori(kyberNetworkContract) != 0", + "maxDestAmount > 0", + "maxDestAmount one of [57896044618658097711785492504343953926634992332820282019728792003956564819968,1606938044258990300000000000000000000000000000000000000000000]", + "dest != 0", + "src != 0", + "srcAmount > 0", + "ori(admin) != 0", + "walletId != 0" + ], + "postconditions": [ + "elem of decimals[...] is one of [161]", + "elem of decimals[...] is one of [8,9,18,12]", + "pendingAdmin != 0", + "admin != 0", + "Sum(decimals[...]) > 0", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "ori(pendingAdmin) == pendingAdmin", + "ori(kyberNetworkContract) == kyberNetworkContract", + "ori(admin) == admin" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "ori(Sum(decimals[...])) < Sum(decimals[...])", + "ori(Sum(decimals[...])) != Sum(decimals[...])" + ] + }, + { + "func": "trade(src,srcAmount,dest,destAddress,maxDestAmount,minConversionRate,walletId)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawEther(amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawEther(amount,sendTo)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(admin) != 0", + "ori(admin) != ori(pendingAdmin)" + ], + "postconditions": [ + "admin != 0", + "elem of decimals[...] is one of [0]", + "elem of decimals[...] is one of [8,9,18,12]", + "kyberNetworkContract != 0", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", + "pendingAdmin != ori(admin)", + "pendingAdmin != admin", + "admin != ori(pendingAdmin)" + ], + "falsified_preconditions": [ + "ori(Sum(decimals[...])) == 0", + "ori(pendingAdmin) == 0" + ], + "falsified_postconditions": [ + "Sum(decimals[...]) == 0", + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json new file mode 100644 index 0000000..a47671d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json @@ -0,0 +1,471 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "spender != 0", + "ori(Sum(_allowedFragments[msg.sender][...])) == 0", + "ori(Sum(_allowedFragments[msg.sender][...])) one of [0]", + "msg.sender != 0", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_allowedFragments[msg.sender][spender]) == 0", + "ori(_allowedFragments[msg.sender][spender]) one of [0]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000", + "ori(_totalSupply) one of [60000000000000]", + "ori(initialized) == true", + "msg.value == 0", + "msg.value one of [0]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733", + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]", + "ori(_owner) == 0", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "value > 0", + "value one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(Sum(_allowedFragments[msg.sender][...])) == ori(_allowedFragments[msg.sender][spender])", + "ori(Sum(_allowedFragments[msg.sender][...])) != value", + "ori(_allowedFragments[msg.sender][spender]) != value" + ], + "postconditions": [ + "_allowedFragments[msg.sender][spender] > 0", + "_allowedFragments[msg.sender][spender] one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "initializing == false", + "_totalSupply > 0", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "Sum(_allowedFragments[msg.sender][...]) > 0", + "Sum(_allowedFragments[msg.sender][...]) one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000]", + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(initializing) == initializing", + "_allowedFragments[msg.sender][spender] > ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] != ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] >= Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] <= Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] != ori(_allowedFragments[msg.sender][spender])", + "_allowedFragments[msg.sender][spender] == value", + "ori(Sum(_allowedFragments[msg.sender][...])) < Sum(_allowedFragments[msg.sender][...])", + "ori(Sum(_allowedFragments[msg.sender][...])) != Sum(_allowedFragments[msg.sender][...])", + "_totalSupply == ori(_totalSupply)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "Sum(_allowedFragments[msg.sender][...]) != ori(_allowedFragments[msg.sender][spender])", + "Sum(_allowedFragments[msg.sender][...]) == value", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "_gonsPerFragment == ori(_gonsPerFragment)", + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))", + "ori(initialized) == initialized", + "_decimals == ori(_decimals)", + "ori(_owner) == _owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(name,symbol,decimals)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(name,symbol,decimals)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "rebase(epoch,supplyDelta)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "rebase(epoch,supplyDelta)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMonetaryPolicy(monetaryPolicy_)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "msg.sender != 0", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000", + "ori(_totalSupply) one of [60000000000000]", + "ori(initialized) == true", + "msg.value == 0", + "msg.value one of [0]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733", + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]", + "ori(_owner) == 0", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "monetaryPolicy_ != 0", + "ori(monetaryPolicy) != monetaryPolicy_" + ], + "postconditions": [ + "initializing == false", + "_totalSupply > 0", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "ori(initializing) == initializing", + "_totalSupply == ori(_totalSupply)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "monetaryPolicy != monetaryPolicy_", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "_gonsPerFragment == ori(_gonsPerFragment)", + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))", + "ori(initialized) == initialized", + "_decimals == ori(_decimals)", + "ori(_owner) == _owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMonetaryPolicy(monetaryPolicy_)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(owner_)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "msg.sender != 0", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_totalSupply) == 0", + "ori(_totalSupply) one of [0]", + "ori(initialized) == false", + "msg.value == 0", + "msg.value one of [0]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) == 0", + "ori(Sum(_gonBalances[...])) one of [0]", + "ori(_gonsPerFragment) == 0", + "ori(_gonsPerFragment) one of [0]", + "ori(_owner) == 0", + "ori(_gonBalances[owner_]) == 0", + "ori(_gonBalances[owner_]) one of [0]", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "owner_ != 0", + "ori(initializing) == ori(tokenPausedDeprecated)", + "ori(initializing) == ori(initialized)", + "ori(tokenPausedDeprecated) == ori(initialized)", + "ori(Sum(_gonBalances[...])) == ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) >= ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) <= ori(_gonBalances[owner_])" + ], + "postconditions": [ + "initializing == false", + "_totalSupply > 0", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "_gonBalances[owner_] > 0", + "_gonBalances[owner_] == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "_gonBalances[owner_] one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(initializing) == initializing", + "ori(initializing) == tokenPausedDeprecated", + "ori(initializing) != initialized", + "initializing == ori(tokenPausedDeprecated)", + "initializing == tokenPausedDeprecated", + "initializing == ori(initialized)", + "initializing != initialized", + "_totalSupply != ori(_totalSupply)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "ori(tokenPausedDeprecated) != initialized", + "_gonsPerFragment != ori(_gonsPerFragment)", + "tokenPausedDeprecated == ori(initialized)", + "tokenPausedDeprecated != initialized", + "Sum(_gonBalances[...]) != ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) >= ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) > ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) != ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) == _gonBalances[owner_]", + "Sum(_gonBalances[...]) >= _gonBalances[owner_]", + "Sum(_gonBalances[...]) <= _gonBalances[owner_]", + "ori(initialized) != initialized", + "_decimals == ori(_decimals)", + "ori(Sum(_gonBalances[...])) <= _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) < _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) != _gonBalances[owner_]", + "ori(_owner) == _owner", + "ori(_gonBalances[owner_]) <= _gonBalances[owner_]", + "ori(_gonBalances[owner_]) < _gonBalances[owner_]", + "ori(_gonBalances[owner_]) != _gonBalances[owner_]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "initialize(owner_)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(initializing) == false", + "ori(tokenPausedDeprecated) == false", + "ori(rebasePausedDeprecated) == false", + "ori(_totalSupply) one of [0,60000000000000]", + "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) one of [0,115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(_gonsPerFragment) one of [0,1929868153955269923726183083478131797554499744427342733990959733]", + "ori(_owner) == 0", + "ori(_decimals) == 0", + "ori(_decimals) one of [0]", + "ori(initializing) == ori(tokenPausedDeprecated)", + "ori(_totalSupply) <= ori(_gonsPerFragment)" + ], + "postconditions": [ + "initializing == false", + "_totalSupply > 0", + "_totalSupply == 60000000000000", + "_totalSupply one of [60000000000000]", + "rebasePausedDeprecated == false", + "monetaryPolicy == 0", + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", + "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_decimals == 0", + "_decimals one of [0]", + "initialized == true", + "_owner == 0", + "ori(initializing) == initializing", + "ori(initializing) == tokenPausedDeprecated", + "ori(initializing) != initialized", + "initializing == ori(tokenPausedDeprecated)", + "initializing == tokenPausedDeprecated", + "initializing != initialized", + "_totalSupply < _gonsPerFragment", + "_totalSupply != _gonsPerFragment", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply != ori(_gonsPerFragment)", + "rebasePausedDeprecated == ori(rebasePausedDeprecated)", + "monetaryPolicy == ori(monetaryPolicy)", + "ori(tokenPausedDeprecated) == tokenPausedDeprecated", + "ori(tokenPausedDeprecated) != initialized", + "_gonsPerFragment != ori(_totalSupply)", + "_gonsPerFragment >= ori(_gonsPerFragment)", + "tokenPausedDeprecated != initialized", + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "_decimals == ori(_decimals)", + "ori(_owner) == _owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json new file mode 100644 index 0000000..7f146f1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json @@ -0,0 +1,692 @@ +[ + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]", + "ori(_balances[msg.sender]) == 0", + "ori(_balances[msg.sender]) one of [0]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "_amount > 0", + "_amount one of [500000000000000000000,13105133700000000000000,100000000000000000000,103970700000000000000]", + "ori(Sum(_balances[...])) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] > 0", + "_balances[msg.sender] one of [13082359060001746878663,103789481789261074604,100000000000000000000,499130119572851959406]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [142345985557645870700604]", + "_totalSupply != ori(_totalSupply)", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance == ori(governance)", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "deposit(_amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_balances[msg.sender]) one of [0,90000000000000000000]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "token != 0", + "Sum(_balances[...]) > 0", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] > 0", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [134406668607338084218100]", + "_totalSupply != ori(_totalSupply)", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance == ori(governance)", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "depositAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "elem of _balances[...] is one of [100000000000000000000]", + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,193288114234845046898,15113130871002806453838,100000000000000000000,7682645945411942583280,9999286966540985221802,58078098074825682085113]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "_totalSupply == ori(_totalSupply)", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance == ori(governance)", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "earn()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "harvest(reserve,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "harvest(reserve,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setController(_controller)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_governance != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 142449775039435131775208", + "ori(_totalSupply) one of [142449775039435131775208]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 142449775039435131775208", + "ori(Sum(_balances[...])) one of [142449775039435131775208]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "_governance != ori(governance)", + "_governance != msg.sender", + "ori(governance) == msg.sender" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 142449775039435131775208", + "_totalSupply one of [142449775039435131775208]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 142449775039435131775208", + "Sum(_balances[...]) one of [142449775039435131775208]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "elem of _balances[...] is one of [142449775039435131775208]", + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,0,193288114234845046898,499130119572851959406,15113130871002806453838,2887782269888984921831,28891975855582153400605,13082359060001746878663,7682645945411942583280,194232561057094695264,103789481789261074604,9999286966540985221802,58078098074825682085113]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "_governance == governance", + "_totalSupply == ori(_totalSupply)", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance != ori(governance)", + "governance != msg.sender", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setGovernance(_governance)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMin(_min)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "_shares > 0", + "_shares == 10000000000000000000", + "_shares one of [10000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000000000000", + "ori(_balances[msg.sender]) one of [100000000000000000000]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) == ori(_balances[msg.sender])", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) <= ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 90000000000000000000", + "_totalSupply one of [90000000000000000000]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 90000000000000000000", + "Sum(_balances[...]) one of [90000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] > 0", + "_balances[msg.sender] == 90000000000000000000", + "_balances[msg.sender] one of [90000000000000000000]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [90000000000000000000]", + "_totalSupply != ori(_totalSupply)", + "_totalSupply < ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply == _balances[msg.sender]", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply <= _balances[msg.sender]", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_balances[msg.sender]) > Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "Sum(_balances[...]) == _balances[msg.sender]", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance == ori(governance)", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdraw(_shares)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [128942301002958992697573,134406668607338084218100]", + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) one of [5464367604379091520527,29264013041526968930907]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [128942301002958992697573,134406668607338084218100]", + "ori(governance) != 0", + "msg.sender != 0", + "ori(controller) != 0", + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply one of [128942301002958992697573,99678287961432023766666]", + "token != 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [128942301002958992697573,99678287961432023766666]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "_balances[msg.sender] == 0", + "_balances[msg.sender] one of [0]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "elem of _balances[...] is one of [128942301002958992697573]", + "_totalSupply != ori(_totalSupply)", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "Sum(_balances[...]) != _balances[msg.sender]", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "governance == ori(governance)", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "withdrawAll()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(min) > 0", + "ori(min) == 9500", + "ori(min) one of [9500]", + "ori(token) != 0", + "ori(governance) != 0", + "ori(controller) != 0", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "token != 0", + "Sum(_balances[...]) > 0", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "governance != 0", + "elem of _balances[...] is one of [141846855438073018741198]", + "controller != 0", + "min > 0", + "min == 9500", + "min one of [9500]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "token == ori(token)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", + "controller == ori(controller)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "governance == ori(governance)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50.json new file mode 100644 index 0000000..26e7fcb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50.json @@ -0,0 +1,163 @@ +[ + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_bridges[ori(weth)]) == 0", + "token0 != 0", + "ori(owner) != 0", + "token1 != 0", + "ori(_bridges[weth]) == 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(pendingOwner) == 0", + "msg.sender != 0", + "ori(_bridges[ori(weth)]) == ori(_bridges[weth])", + "token0 != token1" + ], + "postconditions": [ + "owner != 0", + "_bridges[ori(weth)] == 0", + "_bridges[weth] == 0", + "pendingOwner == 0", + "owner == ori(owner)", + "_bridges[ori(weth)] == ori(_bridges[ori(weth)])", + "_bridges[ori(weth)] == _bridges[weth]", + "_bridges[ori(weth)] == ori(_bridges[weth])", + "ori(_bridges[ori(weth)]) == _bridges[weth]", + "_bridges[weth] == ori(_bridges[weth])", + "pendingOwner == ori(pendingOwner)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convert(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convertMultiple(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "convertMultiple(token0,token1)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setBridge(token,bridge)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setBridge(token,bridge)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner,direct,renounce)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "newOwner != 0", + "renounce == false", + "direct == true", + "ori(owner) != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(pendingOwner) == 0", + "msg.sender != 0", + "newOwner != ori(owner)", + "newOwner != ori(pendingOwner)", + "newOwner != msg.sender", + "ori(owner) != ori(pendingOwner)", + "ori(owner) == msg.sender", + "ori(pendingOwner) != msg.sender" + ], + "postconditions": [ + "owner != 0", + "pendingOwner == 0", + "newOwner == owner", + "newOwner != pendingOwner", + "owner != ori(owner)", + "owner != pendingOwner", + "owner != ori(pendingOwner)", + "owner != msg.sender", + "ori(owner) != pendingOwner", + "pendingOwner == ori(pendingOwner)", + "pendingOwner != msg.sender" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner,direct,renounce)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(owner) != 0", + "ori(pendingOwner) == 0", + "ori(owner) != ori(pendingOwner)" + ], + "postconditions": [ + "owner != 0", + "pendingOwner == 0", + "owner != pendingOwner", + "owner != ori(pendingOwner)", + "ori(owner) != pendingOwner", + "pendingOwner == ori(pendingOwner)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json new file mode 100644 index 0000000..f25f26f --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json @@ -0,0 +1,266 @@ +[ + { + "before_preds": [ + "ori(Q112) == 0" + ], + "after_preds": [ + "ori(Q112) == 0" + ] + }, + { + "before_preds": [ + "ori(Q112) one of [0]" + ], + "after_preds": [ + "ori(Q112) one of [0]" + ] + }, + { + "before_preds": [ + "ori(e10) == 0" + ], + "after_preds": [ + "ori(e10) == 0" + ] + }, + { + "before_preds": [ + "ori(e10) one of [0]" + ], + "after_preds": [ + "ori(e10) one of [0]" + ] + }, + { + "before_preds": [ + "ori(length) == 0" + ], + "after_preds": [ + "ori(length) == 0" + ] + }, + { + "before_preds": [ + "ori(length) one of [0]" + ], + "after_preds": [ + "ori(length) one of [0]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "Q112 == 0" + ], + "after_preds": [ + "Q112 == 0" + ] + }, + { + "before_preds": [ + "Q112 one of [0]" + ], + "after_preds": [ + "Q112 one of [0]" + ] + }, + { + "before_preds": [ + "e10 == 0" + ], + "after_preds": [ + "e10 == 0" + ] + }, + { + "before_preds": [ + "e10 one of [0]" + ], + "after_preds": [ + "e10 one of [0]" + ] + }, + { + "before_preds": [ + "length == 0" + ], + "after_preds": [ + "length == 0" + ] + }, + { + "before_preds": [ + "length one of [0]" + ], + "after_preds": [ + "length one of [0]" + ] + }, + { + "before_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ], + "after_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ] + }, + { + "before_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "after_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ] + }, + { + "before_preds": [ + "ori(Q112) == 0" + ], + "after_preds": [ + "ori(Q112) == 0" + ] + }, + { + "before_preds": [ + "ori(Q112) one of [0]" + ], + "after_preds": [ + "ori(Q112) one of [0]" + ] + }, + { + "before_preds": [ + "ori(e10) == 0" + ], + "after_preds": [ + "ori(e10) == 0" + ] + }, + { + "before_preds": [ + "ori(e10) one of [0]" + ], + "after_preds": [ + "ori(e10) one of [0]" + ] + }, + { + "before_preds": [ + "ori(length) == 0" + ], + "after_preds": [ + "ori(length) == 0" + ] + }, + { + "before_preds": [ + "ori(length) one of [0]" + ], + "after_preds": [ + "ori(length) one of [0]" + ] + }, + { + "before_preds": [ + "Q112 == 0" + ], + "after_preds": [ + "Q112 == 0" + ] + }, + { + "before_preds": [ + "Q112 one of [0]" + ], + "after_preds": [ + "Q112 one of [0]" + ] + }, + { + "before_preds": [ + "e10 == 0" + ], + "after_preds": [ + "e10 == 0" + ] + }, + { + "before_preds": [ + "e10 one of [0]" + ], + "after_preds": [ + "e10 one of [0]" + ] + }, + { + "before_preds": [ + "length == 0" + ], + "after_preds": [ + "length == 0" + ] + }, + { + "before_preds": [ + "length one of [0]" + ], + "after_preds": [ + "length one of [0]" + ] + }, + { + "before_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ], + "after_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ] + }, + { + "before_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "after_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json new file mode 100644 index 0000000..44876d2 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json @@ -0,0 +1,6428 @@ +[ + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "amount > 0", + "amount == 79228162514000000000000000000" + ], + "after_preds": [ + "amount > 0", + "amount == 79228162514000000000000000000" + ] + }, + { + "before_preds": [ + "amount one of [79228162514000000000000000000]" + ], + "after_preds": [ + "amount one of [79228162514000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [860260929152]" + ], + "after_preds": [ + "elem of _balances[...] is one of [860260929152]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "_amount > 0" + ], + "after_preds": [ + "_amount > 0" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) one of [0,1611890956,1612413709,1612672271,1612709011,1612516662]" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) one of [0,1611890956,1612413709,1612672271,1612709011,1612516662]" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [0,494036168419,501354600,72,9986072971,9975667988]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [0,494036168419,501354600,72,9986072971,9975667988]" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [860260929152]" + ], + "after_preds": [ + "elem of _balances[...] is one of [860260929152]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0" + ], + "after_preds": [ + "_balances[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "userDepoistTime[msg.sender] > 0" + ], + "after_preds": [ + "userDepoistTime[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != ori(earnLowerlimit)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(earnLowerlimit)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != earnLowerlimit" + ], + "after_preds": [ + "Sum(_balances[...]) != earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(earnLowerlimit) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) != _totalSupply" + ], + "after_preds": [ + "ori(earnLowerlimit) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= _totalSupply" + ], + "after_preds": [ + "_balances[msg.sender] <= _totalSupply" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != earnLowerlimit" + ], + "after_preds": [ + "_balances[msg.sender] != earnLowerlimit" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply != earnLowerlimit" + ], + "after_preds": [ + "_totalSupply != earnLowerlimit" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) >= userDepoistTime[msg.sender]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) >= userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ], + "after_preds": [ + "ori(_totalSupply) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [82641458184]" + ], + "after_preds": [ + "elem of _balances[...] is one of [82641458184]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ], + "after_preds": [ + "_totalSupply one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [37084585504]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [37084585504]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [50815436600,82641458184]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [50815436600,82641458184]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "_earnLowerlimit > 0" + ], + "after_preds": [ + "_earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "_earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "_earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ], + "after_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [5]" + ], + "after_preds": [ + "ori(fee1) one of [5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [3224014173,1611989982]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [3224014173,1611989982]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [50815436600,82641458184]" + ], + "after_preds": [ + "ori(_totalSupply) one of [50815436600,82641458184]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "msg.sender == ori(governance)" + ], + "after_preds": [ + "msg.sender == ori(governance)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [50815436600,82641458184]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [50815436600,82641458184]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [50815436600]" + ], + "after_preds": [ + "elem of _balances[...] is one of [50815436600]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [50815436600,31826021500,84]" + ], + "after_preds": [ + "elem of _balances[...] is one of [50815436600,31826021500,84]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [50815436600,82641458184]" + ], + "after_preds": [ + "_totalSupply one of [50815436600,82641458184]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [3224014173,1611989982]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [3224014173,1611989982]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0", + "fee1 == 5" + ], + "after_preds": [ + "fee1 > 0", + "fee1 == 5" + ] + }, + { + "before_preds": [ + "fee1 one of [5]" + ], + "after_preds": [ + "fee1 one of [5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [3224014173]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [3224014173]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [1611989982,1612024191]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [1611989982,1612024191]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, + { + "before_preds": [ + "msg.sender == governance" + ], + "after_preds": [ + "msg.sender == governance" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1310289998969" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1310289998969" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1310289998969]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1310289998969]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ], + "after_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [5]" + ], + "after_preds": [ + "ori(fee1) one of [5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 41922035526" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 41922035526" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [41922035526]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [41922035526]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1310289998969" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1310289998969" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1310289998969]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1310289998969]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "msg.sender == ori(timelock)" + ], + "after_preds": [ + "msg.sender == ori(timelock)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1310289998969" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1310289998969" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1310289998969]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1310289998969]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1310289998969]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1310289998969]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,4,6,9,17,23,26,29,36,43,47,73,75,1300417580500,84,88,92,93,97,98,9872417260]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,4,6,9,17,23,26,29,36,43,47,73,75,1300417580500,84,88,92,93,97,98,9872417260]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1310289998969" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1310289998969" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1310289998969]" + ], + "after_preds": [ + "_totalSupply one of [1310289998969]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 41922035526" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 41922035526" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [41922035526]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [41922035526]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0", + "fee1 == 10" + ], + "after_preds": [ + "fee1 > 0", + "fee1 == 10" + ] + }, + { + "before_preds": [ + "fee1 one of [10]" + ], + "after_preds": [ + "fee1 one of [10]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [41922035526]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [41922035526]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [1612433282,1612411910,1612393607,1612411674,1612422047,1612497702,1612414375,1612493096,1612411957,1612410556,1612413117,1612399811,1612435272,1612419407,1612421072,1612459224,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612444665,1612414461,1612024191]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [1612433282,1612411910,1612393607,1612411674,1612422047,1612497702,1612414375,1612493096,1612411957,1612410556,1612413117,1612399811,1612435272,1612419407,1612421072,1612459224,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612444665,1612414461,1612024191]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, + { + "before_preds": [ + "msg.sender == timelock" + ], + "after_preds": [ + "msg.sender == timelock" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 851093071954" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 851093071954" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [851093071954]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [851093071954]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "_governance != 0" + ], + "after_preds": [ + "_governance != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ], + "after_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [5]" + ], + "after_preds": [ + "ori(fee1) one of [5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 32247272285" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 32247272285" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [32247272285]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [32247272285]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 851093071954" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 851093071954" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [851093071954]" + ], + "after_preds": [ + "ori(_totalSupply) one of [851093071954]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "_governance != msg.sender" + ], + "after_preds": [ + "_governance != msg.sender" + ] + }, + { + "before_preds": [ + "_governance != ori(governance)" + ], + "after_preds": [ + "_governance != ori(governance)" + ] + }, + { + "before_preds": [ + "msg.sender == ori(governance)" + ], + "after_preds": [ + "msg.sender == ori(governance)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 851093071954" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 851093071954" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [851093071954]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [851093071954]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [851093071954]" + ], + "after_preds": [ + "elem of _balances[...] is one of [851093071954]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,4,6,9,18,23,26,29,36,73,75,77,84,115213479893,88,92,93,97,1373058547,734506532600]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,4,6,9,18,23,26,29,36,73,75,77,84,115213479893,88,92,93,97,1373058547,734506532600]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 851093071954" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 851093071954" + ] + }, + { + "before_preds": [ + "_totalSupply one of [851093071954]" + ], + "after_preds": [ + "_totalSupply one of [851093071954]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 32247272285" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 32247272285" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [32247272285]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [32247272285]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0", + "fee1 == 5" + ], + "after_preds": [ + "fee1 > 0", + "fee1 == 5" + ] + }, + { + "before_preds": [ + "fee1 one of [5]" + ], + "after_preds": [ + "fee1 one of [5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [32247272285]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [32247272285]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [1612411910,1612393607,1612411674,1612422047,1612414375,1612411957,1612410556,1612413117,1612399811,1612419407,1612421072,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612414461,1612024191]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [1612411910,1612393607,1612411674,1612422047,1612414375,1612411957,1612410556,1612413117,1612399811,1612419407,1612421072,1611989982,1612363871,1612399975,1612358764,1612364141,1612418803,1612408564,1612414461,1612024191]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "_governance == governance" + ], + "after_preds": [ + "_governance == governance" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, + { + "before_preds": [ + "msg.sender != governance" + ], + "after_preds": [ + "msg.sender != governance" + ] + }, + { + "before_preds": [ + "ori(governance) != governance" + ], + "after_preds": [ + "ori(governance) != governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "amount one of [4673850400,19974784100,120385957800,499026405900,31826021500]" + ], + "after_preds": [ + "amount one of [4673850400,19974784100,120385957800,499026405900,31826021500]" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) > 0" + ], + "after_preds": [ + "ori(_balances[recipient]) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) one of [36,77,18,84,88]" + ], + "after_preds": [ + "ori(_balances[recipient]) one of [36,77,18,84,88]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [38697044728,53210802285,43534554260,3224014173]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [38697044728,53210802285,43534554260,3224014173]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "_balances[recipient] one of [499026405988,120385957836,4673850477,31826021584,19974784118]" + ], + "after_preds": [ + "_balances[recipient] one of [499026405988,120385957836,4673850477,31826021584,19974784118]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1003539015686]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1003539015686]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "_totalSupply one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [38697044728,53210802285,43534554260,3224014173]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [38697044728,53210802285,43534554260,3224014173]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [38697044728]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [38697044728]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[sender][...])) > 0" + ], + "after_preds": [ + "ori(Sum(_allowances[sender][...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[sender][...])) one of [79228162513999999970070829900,79228162513999999968173978500,79228162514000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_allowances[sender][...])) one of [79228162513999999970070829900,79228162513999999968173978500,79228162514000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "sender != 0" + ], + "after_preds": [ + "sender != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[sender]) > 0" + ], + "after_preds": [ + "ori(_balances[sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) != ori(_balances[sender])" + ], + "after_preds": [ + "ori(_balances[recipient]) != ori(_balances[sender])" + ] + }, + { + "before_preds": [ + "sender != recipient" + ], + "after_preds": [ + "sender != recipient" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_allowances[sender][...]) > 0" + ], + "after_preds": [ + "Sum(_allowances[sender][...]) > 0" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [860260929152]" + ], + "after_preds": [ + "elem of _balances[...] is one of [860260929152]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "elem of _allowances[sender][...] is one of [79228162513999999968173978500]" + ], + "after_preds": [ + "elem of _allowances[sender][...] is one of [79228162513999999968173978500]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [51597976325]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "_balances[sender] != ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[sender] != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "_balances[recipient] != ori(_balances[sender])" + ], + "after_preds": [ + "_balances[recipient] != ori(_balances[sender])" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) > 0" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [499026405988,120385957836,4673850477,31826021584,19974784118,262979296856]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [499026405988,120385957836,4673850477,31826021584,19974784118,262979296856]" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) one of [38697044728,43534554260,53210802285,33859705567]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) one of [38697044728,43534554260,53210802285,33859705567]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1408314583361]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1408314583361]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] == 0" + ], + "after_preds": [ + "_balances[msg.sender] == 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [0]" + ], + "after_preds": [ + "_balances[msg.sender] one of [0]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]" + ], + "after_preds": [ + "_totalSupply one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) one of [38697044728,43534554260,53210802285,33859705567]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) one of [38697044728,43534554260,53210802285,33859705567]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [38697044728]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [38697044728]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "userDepoistTime[msg.sender] > 0" + ], + "after_preds": [ + "userDepoistTime[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "userDepoistTime[msg.sender] one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]" + ], + "after_preds": [ + "userDepoistTime[msg.sender] one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) >= userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) >= userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(governance) == governance" + ], + "after_preds": [ + "ori(governance) == governance" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, + { + "before_preds": [ + "ori(feeMax) one of [1000]" + ], + "after_preds": [ + "ori(feeMax) one of [1000]" + ] + }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, + { + "before_preds": [ + "ori(fee2) one of [3]" + ], + "after_preds": [ + "ori(fee2) one of [3]" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == true" + ], + "after_preds": [ + "ori(RestrictContractCall) == true" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(feeAddress) != 0" + ], + "after_preds": [ + "ori(feeAddress) != 0" + ] + }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, + { + "before_preds": [ + "ori(fee3) one of [1]" + ], + "after_preds": [ + "ori(fee3) one of [1]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0" + ], + "after_preds": [ + "ori(fee1) > 0" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [10,5]" + ], + "after_preds": [ + "ori(fee1) one of [10,5]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != ori(earnLowerlimit)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(earnLowerlimit)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(earnLowerlimit) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" + ], + "after_preds": [ + "depositWithdrawInterval one of [60]" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, + { + "before_preds": [ + "fee3 one of [1]" + ], + "after_preds": [ + "fee3 one of [1]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, + { + "before_preds": [ + "fee2 one of [3]" + ], + "after_preds": [ + "fee2 one of [3]" + ] + }, + { + "before_preds": [ + "fee1 > 0" + ], + "after_preds": [ + "fee1 > 0" + ] + }, + { + "before_preds": [ + "fee1 one of [10,5]" + ], + "after_preds": [ + "fee1 one of [10,5]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit > 0" + ], + "after_preds": [ + "earnLowerlimit > 0" + ] + }, + { + "before_preds": [ + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ], + "after_preds": [ + "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]" + ] + }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, + { + "before_preds": [ + "feeMax one of [1000]" + ], + "after_preds": [ + "feeMax one of [1000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of userDepoistTime[...] is one of [0]" + ], + "after_preds": [ + "elem of userDepoistTime[...] is one of [0]" + ] + }, + { + "before_preds": [ + "RestrictContractCall == true" + ], + "after_preds": [ + "RestrictContractCall == true" + ] + }, + { + "before_preds": [ + "feeAddress != 0" + ], + "after_preds": [ + "feeAddress != 0" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != ori(earnLowerlimit)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(earnLowerlimit)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != earnLowerlimit" + ], + "after_preds": [ + "Sum(_balances[...]) != earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, + { + "before_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ], + "after_preds": [ + "ori(RestrictContractCall) == RestrictContractCall" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) != _totalSupply" + ], + "after_preds": [ + "ori(earnLowerlimit) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, + { + "before_preds": [ + "ori(feeAddress) == feeAddress" + ], + "after_preds": [ + "ori(feeAddress) == feeAddress" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, + { + "before_preds": [ + "ori(controller) == controller" + ], + "after_preds": [ + "ori(controller) == controller" + ] + }, + { + "before_preds": [ + "_totalSupply != earnLowerlimit" + ], + "after_preds": [ + "_totalSupply != earnLowerlimit" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "timelock == ori(timelock)" + ], + "after_preds": [ + "timelock == ori(timelock)" + ] + }, + { + "before_preds": [ + "fee1 >= ori(fee1)" + ], + "after_preds": [ + "fee1 >= ori(fee1)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6684977bbed67e101bb80fc07fccfba655c0a64f-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6684977bbed67e101bb80fc07fccfba655c0a64f-kept.json new file mode 100644 index 0000000..cad3ee1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6684977bbed67e101bb80fc07fccfba655c0a64f-kept.json @@ -0,0 +1,314 @@ +[ + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(sushi) != 0" + ], + "after_preds": [ + "ori(sushi) != 0" + ] + }, + { + "before_preds": [ + "ori(factory) != 0" + ], + "after_preds": [ + "ori(factory) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(weth) != 0" + ], + "after_preds": [ + "ori(weth) != 0" + ] + }, + { + "before_preds": [ + "token0 != 0" + ], + "after_preds": [ + "token0 != 0" + ] + }, + { + "before_preds": [ + "ori(bar) != 0" + ], + "after_preds": [ + "ori(bar) != 0" + ] + }, + { + "before_preds": [ + "token1 != 0" + ], + "after_preds": [ + "token1 != 0" + ] + }, + { + "before_preds": [ + "ori(sushi) != ori(weth)" + ], + "after_preds": [ + "ori(sushi) != ori(weth)" + ] + }, + { + "before_preds": [ + "ori(sushi) != token0" + ], + "after_preds": [ + "ori(sushi) != token0" + ] + }, + { + "before_preds": [ + "weth != 0" + ], + "after_preds": [ + "weth != 0" + ] + }, + { + "before_preds": [ + "sushi != 0" + ], + "after_preds": [ + "sushi != 0" + ] + }, + { + "before_preds": [ + "bar != 0" + ], + "after_preds": [ + "bar != 0" + ] + }, + { + "before_preds": [ + "factory != 0" + ], + "after_preds": [ + "factory != 0" + ] + }, + { + "before_preds": [ + "ori(sushi) != weth" + ], + "after_preds": [ + "ori(sushi) != weth" + ] + }, + { + "before_preds": [ + "ori(sushi) == sushi" + ], + "after_preds": [ + "ori(sushi) == sushi" + ] + }, + { + "before_preds": [ + "ori(factory) == factory" + ], + "after_preds": [ + "ori(factory) == factory" + ] + }, + { + "before_preds": [ + "ori(weth) == weth" + ], + "after_preds": [ + "ori(weth) == weth" + ] + }, + { + "before_preds": [ + "ori(weth) != sushi" + ], + "after_preds": [ + "ori(weth) != sushi" + ] + }, + { + "before_preds": [ + "weth != sushi" + ], + "after_preds": [ + "weth != sushi" + ] + }, + { + "before_preds": [ + "token0 != sushi" + ], + "after_preds": [ + "token0 != sushi" + ] + }, + { + "before_preds": [ + "bar == ori(bar)" + ], + "after_preds": [ + "bar == ori(bar)" + ] + }, + { + "before_preds": [ + "ori(sushi) != 0" + ], + "after_preds": [ + "ori(sushi) != 0" + ] + }, + { + "before_preds": [ + "ori(factory) != 0" + ], + "after_preds": [ + "ori(factory) != 0" + ] + }, + { + "before_preds": [ + "ori(weth) != 0" + ], + "after_preds": [ + "ori(weth) != 0" + ] + }, + { + "before_preds": [ + "ori(bar) != 0" + ], + "after_preds": [ + "ori(bar) != 0" + ] + }, + { + "before_preds": [ + "ori(sushi) != ori(weth)" + ], + "after_preds": [ + "ori(sushi) != ori(weth)" + ] + }, + { + "before_preds": [ + "weth != 0" + ], + "after_preds": [ + "weth != 0" + ] + }, + { + "before_preds": [ + "sushi != 0" + ], + "after_preds": [ + "sushi != 0" + ] + }, + { + "before_preds": [ + "bar != 0" + ], + "after_preds": [ + "bar != 0" + ] + }, + { + "before_preds": [ + "factory != 0" + ], + "after_preds": [ + "factory != 0" + ] + }, + { + "before_preds": [ + "ori(sushi) != weth" + ], + "after_preds": [ + "ori(sushi) != weth" + ] + }, + { + "before_preds": [ + "ori(sushi) == sushi" + ], + "after_preds": [ + "ori(sushi) == sushi" + ] + }, + { + "before_preds": [ + "ori(factory) == factory" + ], + "after_preds": [ + "ori(factory) == factory" + ] + }, + { + "before_preds": [ + "ori(weth) == weth" + ], + "after_preds": [ + "ori(weth) == weth" + ] + }, + { + "before_preds": [ + "ori(weth) != sushi" + ], + "after_preds": [ + "ori(weth) != sushi" + ] + }, + { + "before_preds": [ + "weth != sushi" + ], + "after_preds": [ + "weth != sushi" + ] + }, + { + "before_preds": [ + "bar == ori(bar)" + ], + "after_preds": [ + "bar == ori(bar)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json new file mode 100644 index 0000000..f9e0026 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json @@ -0,0 +1,2690 @@ +[ + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) > 0" + ], + "after_preds": [ + "ori(lastAccrueTime) > 0" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) > 0" + ], + "after_preds": [ + "ori(nextPositionID) > 0" + ] + }, + { + "before_preds": [ + "ori(config) != 0" + ], + "after_preds": [ + "ori(config) != 0" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) > 0" + ], + "after_preds": [ + "ori(_guardCounter) > 0" + ] + }, + { + "before_preds": [ + "msg.value > 0" + ], + "after_preds": [ + "msg.value > 0" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(reservePool)" + ], + "after_preds": [ + "ori(_totalSupply) >= ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(_totalSupply) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "lastAccrueTime > 0" + ], + "after_preds": [ + "lastAccrueTime > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0" + ], + "after_preds": [ + "_balances[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "nextPositionID > 0" + ], + "after_preds": [ + "nextPositionID > 0" + ] + }, + { + "before_preds": [ + "_guardCounter > 0" + ], + "after_preds": [ + "_guardCounter > 0" + ] + }, + { + "before_preds": [ + "config != 0" + ], + "after_preds": [ + "config != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _totalSupply" + ], + "after_preds": [ + "ori(glbDebtVal) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= reservePool" + ], + "after_preds": [ + "ori(glbDebtVal) >= reservePool" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(glbDebtVal) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _guardCounter" + ], + "after_preds": [ + "ori(glbDebtVal) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) <= glbDebtVal" + ], + "after_preds": [ + "ori(glbDebtVal) <= glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= reservePool" + ], + "after_preds": [ + "ori(_totalSupply) >= reservePool" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != _guardCounter" + ], + "after_preds": [ + "ori(_totalSupply) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= reservePool" + ], + "after_preds": [ + "ori(reservePool) <= reservePool" + ] + }, + { + "before_preds": [ + "ori(reservePool) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(reservePool) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(reservePool) != _guardCounter" + ], + "after_preds": [ + "ori(reservePool) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtVal" + ], + "after_preds": [ + "ori(reservePool) <= glbDebtVal" + ] + }, + { + "before_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ], + "after_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply != glbDebtVal" + ], + "after_preds": [ + "_totalSupply != glbDebtVal" + ] + }, + { + "before_preds": [ + "reservePool <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "reservePool <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "reservePool != _balances[msg.sender]" + ], + "after_preds": [ + "reservePool != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "reservePool != _guardCounter" + ], + "after_preds": [ + "reservePool != _guardCounter" + ] + }, + { + "before_preds": [ + "reservePool != ori(_guardCounter)" + ], + "after_preds": [ + "reservePool != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= glbDebtVal" + ], + "after_preds": [ + "reservePool <= glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != _guardCounter" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= glbDebtVal" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != _guardCounter" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _guardCounter" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != glbDebtVal" + ], + "after_preds": [ + "_balances[msg.sender] != glbDebtVal" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ], + "after_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ] + }, + { + "before_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ], + "after_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ] + }, + { + "before_preds": [ + "_guardCounter != glbDebtVal" + ], + "after_preds": [ + "_guardCounter != glbDebtVal" + ] + }, + { + "before_preds": [ + "config == ori(config)" + ], + "after_preds": [ + "config == ori(config)" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) != glbDebtVal" + ], + "after_preds": [ + "ori(_guardCounter) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) > 0", + "ori(glbDebtVal) == 14854681992016139228071" + ], + "after_preds": [ + "ori(glbDebtVal) > 0", + "ori(glbDebtVal) == 14854681992016139228071" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) one of [14854681992016139228071]" + ], + "after_preds": [ + "ori(glbDebtVal) one of [14854681992016139228071]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 20424063187886226982599" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 20424063187886226982599" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [20424063187886226982599]" + ], + "after_preds": [ + "ori(_totalSupply) one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "ori(reservePool) > 0", + "ori(reservePool) == 148922433659474232" + ], + "after_preds": [ + "ori(reservePool) > 0", + "ori(reservePool) == 148922433659474232" + ] + }, + { + "before_preds": [ + "ori(reservePool) one of [148922433659474232]" + ], + "after_preds": [ + "ori(reservePool) one of [148922433659474232]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) > 0", + "ori(lastAccrueTime) == 1602231144" + ], + "after_preds": [ + "ori(lastAccrueTime) > 0", + "ori(lastAccrueTime) == 1602231144" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) one of [1602231144]" + ], + "after_preds": [ + "ori(lastAccrueTime) one of [1602231144]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 20424063187886226982599" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 20424063187886226982599" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [20424063187886226982599]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "_config != 0" + ], + "after_preds": [ + "_config != 0" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) > 0", + "ori(nextPositionID) == 198" + ], + "after_preds": [ + "ori(nextPositionID) > 0", + "ori(nextPositionID) == 198" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) one of [198]" + ], + "after_preds": [ + "ori(nextPositionID) one of [198]" + ] + }, + { + "before_preds": [ + "ori(config) != 0" + ], + "after_preds": [ + "ori(config) != 0" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) > 0", + "ori(_guardCounter) == 376" + ], + "after_preds": [ + "ori(_guardCounter) > 0", + "ori(_guardCounter) == 376" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) one of [376]" + ], + "after_preds": [ + "ori(_guardCounter) one of [376]" + ] + }, + { + "before_preds": [ + "ori(glbDebtShare) > 0", + "ori(glbDebtShare) == 14846441340661167278357" + ], + "after_preds": [ + "ori(glbDebtShare) > 0", + "ori(glbDebtShare) == 14846441340661167278357" + ] + }, + { + "before_preds": [ + "ori(glbDebtShare) one of [14846441340661167278357]" + ], + "after_preds": [ + "ori(glbDebtShare) one of [14846441340661167278357]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "_config != ori(config)" + ], + "after_preds": [ + "_config != ori(config)" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "lastAccrueTime > 0", + "lastAccrueTime == 1602231144" + ], + "after_preds": [ + "lastAccrueTime > 0", + "lastAccrueTime == 1602231144" + ] + }, + { + "before_preds": [ + "lastAccrueTime one of [1602231144]" + ], + "after_preds": [ + "lastAccrueTime one of [1602231144]" + ] + }, + { + "before_preds": [ + "glbDebtShare > 0", + "glbDebtShare == 14846441340661167278357" + ], + "after_preds": [ + "glbDebtShare > 0", + "glbDebtShare == 14846441340661167278357" + ] + }, + { + "before_preds": [ + "glbDebtShare one of [14846441340661167278357]" + ], + "after_preds": [ + "glbDebtShare one of [14846441340661167278357]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 20424063187886226982599" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 20424063187886226982599" + ] + }, + { + "before_preds": [ + "_totalSupply one of [20424063187886226982599]" + ], + "after_preds": [ + "_totalSupply one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "reservePool > 0", + "reservePool == 148922433659474232" + ], + "after_preds": [ + "reservePool > 0", + "reservePool == 148922433659474232" + ] + }, + { + "before_preds": [ + "reservePool one of [148922433659474232]" + ], + "after_preds": [ + "reservePool one of [148922433659474232]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [20424063187886226982599]" + ], + "after_preds": [ + "elem of _balances[...] is one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,207595542558178816,2499288059837974695884,4999207308361928720,76989635665897056757,2099694672502978261129,2499278042403573792,23994090941122685480,348905267647927528350,4057048061363058246,19994236218049902145,12008096684355041865,3498972866121430093,399952049758648104376,379892644249751734723,7331074273148906603,499926721158544918445,28995014649187331200,155534040163110543,3419055614113489263301,199945786064955255869,99984922215138066540,11940731249496242,9998648791479301808,99997986090636984,4999319919409024702,75278599312019471008,20004274794429721786,22994220695367180988,3998913359845597384,9497882822697579207,1849753685077835228080,1499693766495532245,9998132539448897243,2999161464973501151,122963923838163536554,9998602921031189222,249933540782134667412,8748256010480108303,199870887498978286782,74979877460347423478,2999622873234109207,74989718060626759416,1999465504916710427064,499908735865805608,1241962116152060713,401109492287907629,73980033536100457236,29886166173581944622,359442063782612289,39988232675288000305,999713726897813322,953321242468317018,22006669614395381074,330342581938126080214,401583241182296934,1999553099697343335,4998650914601382245,899807013883311181285,349967173402743561941,4999141914029901165,999808531376531825,19996452589694343531,2999199985428679028,100983359711349393234,86984751696672373087,299941269738273242381,2999577045009891728,2099550583177882008,156757421593122201,18497345372475515793,2999475445556411802,99980055585089435,282421952098266234655,99985734138462998901,499892501497066034892,37108231016789653399,7997832369182641578,1427667316733088179,2199682035744654782,499855855955010505,9997205556608119756,19994928949477146578,4018969067458326495,19995027751107133405,1999420721406120521858,177960697518442657180,39994654851654382555,999861461461553649,99985182676534263,1999560000545579004,29998406400582478834]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,207595542558178816,2499288059837974695884,4999207308361928720,76989635665897056757,2099694672502978261129,2499278042403573792,23994090941122685480,348905267647927528350,4057048061363058246,19994236218049902145,12008096684355041865,3498972866121430093,399952049758648104376,379892644249751734723,7331074273148906603,499926721158544918445,28995014649187331200,155534040163110543,3419055614113489263301,199945786064955255869,99984922215138066540,11940731249496242,9998648791479301808,99997986090636984,4999319919409024702,75278599312019471008,20004274794429721786,22994220695367180988,3998913359845597384,9497882822697579207,1849753685077835228080,1499693766495532245,9998132539448897243,2999161464973501151,122963923838163536554,9998602921031189222,249933540782134667412,8748256010480108303,199870887498978286782,74979877460347423478,2999622873234109207,74989718060626759416,1999465504916710427064,499908735865805608,1241962116152060713,401109492287907629,73980033536100457236,29886166173581944622,359442063782612289,39988232675288000305,999713726897813322,953321242468317018,22006669614395381074,330342581938126080214,401583241182296934,1999553099697343335,4998650914601382245,899807013883311181285,349967173402743561941,4999141914029901165,999808531376531825,19996452589694343531,2999199985428679028,100983359711349393234,86984751696672373087,299941269738273242381,2999577045009891728,2099550583177882008,156757421593122201,18497345372475515793,2999475445556411802,99980055585089435,282421952098266234655,99985734138462998901,499892501497066034892,37108231016789653399,7997832369182641578,1427667316733088179,2199682035744654782,499855855955010505,9997205556608119756,19994928949477146578,4018969067458326495,19995027751107133405,1999420721406120521858,177960697518442657180,39994654851654382555,999861461461553649,99985182676534263,1999560000545579004,29998406400582478834]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 20424063187886226982599" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 20424063187886226982599" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [20424063187886226982599]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "nextPositionID > 0", + "nextPositionID == 198" + ], + "after_preds": [ + "nextPositionID > 0", + "nextPositionID == 198" + ] + }, + { + "before_preds": [ + "nextPositionID one of [198]" + ], + "after_preds": [ + "nextPositionID one of [198]" + ] + }, + { + "before_preds": [ + "_guardCounter > 0", + "_guardCounter == 376" + ], + "after_preds": [ + "_guardCounter > 0", + "_guardCounter == 376" + ] + }, + { + "before_preds": [ + "_guardCounter one of [376]" + ], + "after_preds": [ + "_guardCounter one of [376]" + ] + }, + { + "before_preds": [ + "config != 0" + ], + "after_preds": [ + "config != 0" + ] + }, + { + "before_preds": [ + "glbDebtVal > 0", + "glbDebtVal == 14854681992016139228071" + ], + "after_preds": [ + "glbDebtVal > 0", + "glbDebtVal == 14854681992016139228071" + ] + }, + { + "before_preds": [ + "glbDebtVal one of [14854681992016139228071]" + ], + "after_preds": [ + "glbDebtVal one of [14854681992016139228071]" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) == glbDebtVal", + "ori(glbDebtVal) >= glbDebtVal", + "ori(glbDebtVal) <= glbDebtVal" + ], + "after_preds": [ + "ori(glbDebtVal) == glbDebtVal", + "ori(glbDebtVal) >= glbDebtVal", + "ori(glbDebtVal) <= glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(reservePool) == reservePool", + "ori(reservePool) >= reservePool", + "ori(reservePool) <= reservePool" + ], + "after_preds": [ + "ori(reservePool) == reservePool", + "ori(reservePool) >= reservePool", + "ori(reservePool) <= reservePool" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_config == config" + ], + "after_preds": [ + "_config == config" + ] + }, + { + "before_preds": [ + "config != ori(config)" + ], + "after_preds": [ + "config != ori(config)" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) > 0" + ], + "after_preds": [ + "ori(glbDebtVal) > 0" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(reservePool) > 0" + ], + "after_preds": [ + "ori(reservePool) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "share > 0" + ], + "after_preds": [ + "share > 0" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) > 0" + ], + "after_preds": [ + "ori(lastAccrueTime) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) > 0" + ], + "after_preds": [ + "ori(nextPositionID) > 0" + ] + }, + { + "before_preds": [ + "ori(config) != 0" + ], + "after_preds": [ + "ori(config) != 0" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) > 0" + ], + "after_preds": [ + "ori(_guardCounter) > 0" + ] + }, + { + "before_preds": [ + "ori(glbDebtShare) > 0" + ], + "after_preds": [ + "ori(glbDebtShare) > 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(reservePool) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "lastAccrueTime > 0" + ], + "after_preds": [ + "lastAccrueTime > 0" + ] + }, + { + "before_preds": [ + "glbDebtShare > 0" + ], + "after_preds": [ + "glbDebtShare > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "reservePool > 0" + ], + "after_preds": [ + "reservePool > 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [0,999710360703060260929,65205495417134526340]" + ], + "after_preds": [ + "_balances[msg.sender] one of [0,999710360703060260929,65205495417134526340]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [20424063187886226982599]" + ], + "after_preds": [ + "elem of _balances[...] is one of [20424063187886226982599]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "nextPositionID > 0" + ], + "after_preds": [ + "nextPositionID > 0" + ] + }, + { + "before_preds": [ + "_guardCounter > 0" + ], + "after_preds": [ + "_guardCounter > 0" + ] + }, + { + "before_preds": [ + "config != 0" + ], + "after_preds": [ + "config != 0" + ] + }, + { + "before_preds": [ + "glbDebtVal > 0" + ], + "after_preds": [ + "glbDebtVal > 0" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _totalSupply" + ], + "after_preds": [ + "ori(glbDebtVal) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != glbDebtVal" + ], + "after_preds": [ + "ori(_totalSupply) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(reservePool) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(reservePool) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply != glbDebtVal" + ], + "after_preds": [ + "_totalSupply != glbDebtVal" + ] + }, + { + "before_preds": [ + "reservePool != ori(_balances[msg.sender])" + ], + "after_preds": [ + "reservePool != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "reservePool != _balances[msg.sender]" + ], + "after_preds": [ + "reservePool != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != glbDebtVal" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != glbDebtVal" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != _guardCounter" + ], + "after_preds": [ + "_balances[msg.sender] != _guardCounter" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != ori(_guardCounter)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ], + "after_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ] + }, + { + "before_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ], + "after_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ] + }, + { + "before_preds": [ + "config == ori(config)" + ], + "after_preds": [ + "config == ori(config)" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "maxReturn one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "maxReturn one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "goblin != 0" + ], + "after_preds": [ + "goblin != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) > 0" + ], + "after_preds": [ + "ori(lastAccrueTime) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) > 0" + ], + "after_preds": [ + "ori(nextPositionID) > 0" + ] + }, + { + "before_preds": [ + "ori(config) != 0" + ], + "after_preds": [ + "ori(config) != 0" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) > 0" + ], + "after_preds": [ + "ori(_guardCounter) > 0" + ] + }, + { + "before_preds": [ + "data != \"\"" + ], + "after_preds": [ + "data != \"\"" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= id" + ], + "after_preds": [ + "ori(glbDebtVal) >= id" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(nextPositionID)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(glbDebtShare)" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(reservePool) >= id" + ], + "after_preds": [ + "ori(reservePool) >= id" + ] + }, + { + "before_preds": [ + "ori(reservePool) != loan" + ], + "after_preds": [ + "ori(reservePool) != loan" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(nextPositionID)" + ], + "after_preds": [ + "ori(reservePool) != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= ori(glbDebtShare)" + ], + "after_preds": [ + "ori(reservePool) <= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "goblin != msg.sender" + ], + "after_preds": [ + "goblin != msg.sender" + ] + }, + { + "before_preds": [ + "id <= ori(glbDebtShare)" + ], + "after_preds": [ + "id <= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "loan != ori(nextPositionID)" + ], + "after_preds": [ + "loan != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "loan != ori(_guardCounter)" + ], + "after_preds": [ + "loan != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) != ori(glbDebtShare)" + ], + "after_preds": [ + "ori(nextPositionID) != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) != ori(glbDebtShare)" + ], + "after_preds": [ + "ori(_guardCounter) != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "lastAccrueTime > 0" + ], + "after_preds": [ + "lastAccrueTime > 0" + ] + }, + { + "before_preds": [ + "glbDebtShare > 0" + ], + "after_preds": [ + "glbDebtShare > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "nextPositionID > 0" + ], + "after_preds": [ + "nextPositionID > 0" + ] + }, + { + "before_preds": [ + "_guardCounter > 0" + ], + "after_preds": [ + "_guardCounter > 0" + ] + }, + { + "before_preds": [ + "config != 0" + ], + "after_preds": [ + "config != 0" + ] + }, + { + "before_preds": [ + "glbDebtVal > 0" + ], + "after_preds": [ + "glbDebtVal > 0" + ] + }, + { + "before_preds": [ + "positions[id].goblin == ori(positions[id].goblin)" + ], + "after_preds": [ + "positions[id].goblin == ori(positions[id].goblin)" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != glbDebtShare" + ], + "after_preds": [ + "ori(glbDebtVal) != glbDebtShare" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= reservePool" + ], + "after_preds": [ + "ori(glbDebtVal) >= reservePool" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != nextPositionID" + ], + "after_preds": [ + "ori(glbDebtVal) != nextPositionID" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _guardCounter" + ], + "after_preds": [ + "ori(glbDebtVal) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= reservePool" + ], + "after_preds": [ + "ori(reservePool) <= reservePool" + ] + }, + { + "before_preds": [ + "ori(reservePool) != nextPositionID" + ], + "after_preds": [ + "ori(reservePool) != nextPositionID" + ] + }, + { + "before_preds": [ + "ori(reservePool) != _guardCounter" + ], + "after_preds": [ + "ori(reservePool) != _guardCounter" + ] + }, + { + "before_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ], + "after_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ] + }, + { + "before_preds": [ + "positions[id].debtShare <= ori(positions[id].debtShare)" + ], + "after_preds": [ + "positions[id].debtShare <= ori(positions[id].debtShare)" + ] + }, + { + "before_preds": [ + "id <= reservePool" + ], + "after_preds": [ + "id <= reservePool" + ] + }, + { + "before_preds": [ + "glbDebtShare >= loan" + ], + "after_preds": [ + "glbDebtShare >= loan" + ] + }, + { + "before_preds": [ + "glbDebtShare <= glbDebtVal" + ], + "after_preds": [ + "glbDebtShare <= glbDebtVal" + ] + }, + { + "before_preds": [ + "reservePool != loan" + ], + "after_preds": [ + "reservePool != loan" + ] + }, + { + "before_preds": [ + "reservePool != nextPositionID" + ], + "after_preds": [ + "reservePool != nextPositionID" + ] + }, + { + "before_preds": [ + "reservePool != _guardCounter" + ], + "after_preds": [ + "reservePool != _guardCounter" + ] + }, + { + "before_preds": [ + "reservePool != ori(nextPositionID)" + ], + "after_preds": [ + "reservePool != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "reservePool != ori(_guardCounter)" + ], + "after_preds": [ + "reservePool != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= ori(glbDebtShare)" + ], + "after_preds": [ + "reservePool <= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(positions[id].owner) == positions[id].owner" + ], + "after_preds": [ + "ori(positions[id].owner) == positions[id].owner" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "loan != nextPositionID" + ], + "after_preds": [ + "loan != nextPositionID" + ] + }, + { + "before_preds": [ + "loan != _guardCounter" + ], + "after_preds": [ + "loan != _guardCounter" + ] + }, + { + "before_preds": [ + "loan <= glbDebtVal" + ], + "after_preds": [ + "loan <= glbDebtVal" + ] + }, + { + "before_preds": [ + "nextPositionID >= ori(nextPositionID)" + ], + "after_preds": [ + "nextPositionID >= ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "nextPositionID <= ori(_guardCounter)" + ], + "after_preds": [ + "nextPositionID <= ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "nextPositionID != ori(glbDebtShare)" + ], + "after_preds": [ + "nextPositionID != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ], + "after_preds": [ + "_guardCounter == ori(_guardCounter) + 1" + ] + }, + { + "before_preds": [ + "_guardCounter != ori(glbDebtShare)" + ], + "after_preds": [ + "_guardCounter != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "config == ori(config)" + ], + "after_preds": [ + "config == ori(config)" + ] + }, + { + "before_preds": [ + "ori(glbDebtShare) != glbDebtVal" + ], + "after_preds": [ + "ori(glbDebtShare) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "ori(lastAccrueTime) > 0" + ], + "after_preds": [ + "ori(lastAccrueTime) > 0" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) > 0" + ], + "after_preds": [ + "ori(nextPositionID) > 0" + ] + }, + { + "before_preds": [ + "ori(config) != 0" + ], + "after_preds": [ + "ori(config) != 0" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) > 0" + ], + "after_preds": [ + "ori(_guardCounter) > 0" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(nextPositionID)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(glbDebtShare)" + ], + "after_preds": [ + "ori(glbDebtVal) >= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(reservePool)" + ], + "after_preds": [ + "ori(_totalSupply) >= ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(_totalSupply) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(nextPositionID)" + ], + "after_preds": [ + "ori(reservePool) != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(reservePool) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= ori(glbDebtShare)" + ], + "after_preds": [ + "ori(reservePool) <= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) <= ori(_guardCounter)" + ], + "after_preds": [ + "ori(nextPositionID) <= ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) != ori(glbDebtShare)" + ], + "after_preds": [ + "ori(nextPositionID) != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) != ori(glbDebtShare)" + ], + "after_preds": [ + "ori(_guardCounter) != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "lastAccrueTime > 0" + ], + "after_preds": [ + "lastAccrueTime > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [10000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "nextPositionID > 0" + ], + "after_preds": [ + "nextPositionID > 0" + ] + }, + { + "before_preds": [ + "_guardCounter > 0" + ], + "after_preds": [ + "_guardCounter > 0" + ] + }, + { + "before_preds": [ + "config != 0" + ], + "after_preds": [ + "config != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _totalSupply" + ], + "after_preds": [ + "ori(glbDebtVal) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= reservePool" + ], + "after_preds": [ + "ori(glbDebtVal) >= reservePool" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(glbDebtVal) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != nextPositionID" + ], + "after_preds": [ + "ori(glbDebtVal) != nextPositionID" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) != _guardCounter" + ], + "after_preds": [ + "ori(glbDebtVal) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= reservePool" + ], + "after_preds": [ + "ori(_totalSupply) >= reservePool" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != _guardCounter" + ], + "after_preds": [ + "ori(_totalSupply) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtShare" + ], + "after_preds": [ + "ori(reservePool) <= glbDebtShare" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= reservePool" + ], + "after_preds": [ + "ori(reservePool) <= reservePool" + ] + }, + { + "before_preds": [ + "ori(reservePool) != nextPositionID" + ], + "after_preds": [ + "ori(reservePool) != nextPositionID" + ] + }, + { + "before_preds": [ + "ori(reservePool) != _guardCounter" + ], + "after_preds": [ + "ori(reservePool) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtVal" + ], + "after_preds": [ + "ori(reservePool) <= glbDebtVal" + ] + }, + { + "before_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ], + "after_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)" + ] + }, + { + "before_preds": [ + "glbDebtShare >= reservePool" + ], + "after_preds": [ + "glbDebtShare >= reservePool" + ] + }, + { + "before_preds": [ + "glbDebtShare != nextPositionID" + ], + "after_preds": [ + "glbDebtShare != nextPositionID" + ] + }, + { + "before_preds": [ + "glbDebtShare != _guardCounter" + ], + "after_preds": [ + "glbDebtShare != _guardCounter" + ] + }, + { + "before_preds": [ + "glbDebtShare != ori(nextPositionID)" + ], + "after_preds": [ + "glbDebtShare != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "glbDebtShare != ori(_guardCounter)" + ], + "after_preds": [ + "glbDebtShare != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "glbDebtShare <= glbDebtVal" + ], + "after_preds": [ + "glbDebtShare <= glbDebtVal" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply != glbDebtVal" + ], + "after_preds": [ + "_totalSupply != glbDebtVal" + ] + }, + { + "before_preds": [ + "reservePool <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "reservePool <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "reservePool != nextPositionID" + ], + "after_preds": [ + "reservePool != nextPositionID" + ] + }, + { + "before_preds": [ + "reservePool != _guardCounter" + ], + "after_preds": [ + "reservePool != _guardCounter" + ] + }, + { + "before_preds": [ + "reservePool != ori(nextPositionID)" + ], + "after_preds": [ + "reservePool != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "reservePool != ori(_guardCounter)" + ], + "after_preds": [ + "reservePool != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= ori(glbDebtShare)" + ], + "after_preds": [ + "reservePool <= ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "reservePool <= glbDebtVal" + ], + "after_preds": [ + "reservePool <= glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) != _guardCounter" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _guardCounter" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ], + "after_preds": [ + "Sum(_balances[...]) != glbDebtVal" + ] + }, + { + "before_preds": [ + "nextPositionID >= ori(nextPositionID)" + ], + "after_preds": [ + "nextPositionID >= ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "nextPositionID <= ori(_guardCounter)" + ], + "after_preds": [ + "nextPositionID <= ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "nextPositionID != ori(glbDebtShare)" + ], + "after_preds": [ + "nextPositionID != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "nextPositionID != glbDebtVal" + ], + "after_preds": [ + "nextPositionID != glbDebtVal" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(_guardCounter)" + ], + "after_preds": [ + "_guardCounter >= ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "_guardCounter != ori(glbDebtShare)" + ], + "after_preds": [ + "_guardCounter != ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "_guardCounter != glbDebtVal" + ], + "after_preds": [ + "_guardCounter != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) != glbDebtVal" + ], + "after_preds": [ + "ori(nextPositionID) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) != glbDebtVal" + ], + "after_preds": [ + "ori(_guardCounter) != glbDebtVal" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json new file mode 100644 index 0000000..ecf9968 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json @@ -0,0 +1,2222 @@ +[ + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "_converter != 0" + ], + "after_preds": [ + "_converter != 0" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(approvedJarConverters[_converter]) == false" + ], + "after_preds": [ + "ori(approvedJarConverters[_converter]) == false" + ] + }, + { + "before_preds": [ + "ori(governance) == msg.sender" + ], + "after_preds": [ + "ori(governance) == msg.sender" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "approvedJarConverters[_converter] == true" + ], + "after_preds": [ + "approvedJarConverters[_converter] == true" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "governance == msg.sender" + ], + "after_preds": [ + "governance == msg.sender" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "approvedJarConverters[_converter] != ori(approvedJarConverters[_converter])" + ], + "after_preds": [ + "approvedJarConverters[_converter] != ori(approvedJarConverters[_converter])" + ] + }, + { + "before_preds": [ + "ori(timelock) == timelock" + ], + "after_preds": [ + "ori(timelock) == timelock" + ] + }, + { + "before_preds": [ + "_strategy != 0" + ], + "after_preds": [ + "_strategy != 0" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(approvedStrategies[_token][_strategy]) == false" + ], + "after_preds": [ + "ori(approvedStrategies[_token][_strategy]) == false" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_token != 0" + ], + "after_preds": [ + "_token != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) == msg.sender" + ], + "after_preds": [ + "ori(timelock) == msg.sender" + ] + }, + { + "before_preds": [ + "approvedStrategies[_token][_strategy] == true" + ], + "after_preds": [ + "approvedStrategies[_token][_strategy] == true" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "approvedStrategies[_token][_strategy] != ori(approvedStrategies[_token][_strategy])" + ], + "after_preds": [ + "approvedStrategies[_token][_strategy] != ori(approvedStrategies[_token][_strategy])" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(timelock) == timelock" + ], + "after_preds": [ + "ori(timelock) == timelock" + ] + }, + { + "before_preds": [ + "msg.sender == timelock" + ], + "after_preds": [ + "msg.sender == timelock" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_governance != 0" + ], + "after_preds": [ + "_governance != 0" + ] + }, + { + "before_preds": [ + "ori(governance) == msg.sender" + ], + "after_preds": [ + "ori(governance) == msg.sender" + ] + }, + { + "before_preds": [ + "ori(governance) != _governance" + ], + "after_preds": [ + "ori(governance) != _governance" + ] + }, + { + "before_preds": [ + "msg.sender != _governance" + ], + "after_preds": [ + "msg.sender != _governance" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "governance != ori(governance)" + ], + "after_preds": [ + "governance != ori(governance)" + ] + }, + { + "before_preds": [ + "governance != msg.sender" + ], + "after_preds": [ + "governance != msg.sender" + ] + }, + { + "before_preds": [ + "governance == _governance" + ], + "after_preds": [ + "governance == _governance" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(timelock) == timelock" + ], + "after_preds": [ + "ori(timelock) == timelock" + ] + }, + { + "before_preds": [ + "ori(jars[_token]) == 0" + ], + "after_preds": [ + "ori(jars[_token]) == 0" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "_jar != 0" + ], + "after_preds": [ + "_jar != 0" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_token != 0" + ], + "after_preds": [ + "_token != 0" + ] + }, + { + "before_preds": [ + "ori(jars[_token]) != _jar" + ], + "after_preds": [ + "ori(jars[_token]) != _jar" + ] + }, + { + "before_preds": [ + "ori(governance) != ori(strategist)" + ], + "after_preds": [ + "ori(governance) != ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(governance) == msg.sender" + ], + "after_preds": [ + "ori(governance) == msg.sender" + ] + }, + { + "before_preds": [ + "ori(strategist) != msg.sender" + ], + "after_preds": [ + "ori(strategist) != msg.sender" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "jars[_token] != 0" + ], + "after_preds": [ + "jars[_token] != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "ori(jars[_token]) != jars[_token]" + ], + "after_preds": [ + "ori(jars[_token]) != jars[_token]" + ] + }, + { + "before_preds": [ + "governance != strategist" + ], + "after_preds": [ + "governance != strategist" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "governance != ori(strategist)" + ], + "after_preds": [ + "governance != ori(strategist)" + ] + }, + { + "before_preds": [ + "governance == msg.sender" + ], + "after_preds": [ + "governance == msg.sender" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "_jar == jars[_token]" + ], + "after_preds": [ + "_jar == jars[_token]" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, + { + "before_preds": [ + "strategist != ori(governance)" + ], + "after_preds": [ + "strategist != ori(governance)" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "strategist != msg.sender" + ], + "after_preds": [ + "strategist != msg.sender" + ] + }, + { + "before_preds": [ + "ori(timelock) == timelock" + ], + "after_preds": [ + "ori(timelock) == timelock" + ] + }, + { + "before_preds": [ + "_strategy != 0" + ], + "after_preds": [ + "_strategy != 0" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(strategies[_token]) == 0" + ], + "after_preds": [ + "ori(strategies[_token]) == 0" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(approvedStrategies[_token][_strategy]) == true" + ], + "after_preds": [ + "ori(approvedStrategies[_token][_strategy]) == true" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_token != 0" + ], + "after_preds": [ + "_token != 0" + ] + }, + { + "before_preds": [ + "_strategy != ori(strategies[_token])" + ], + "after_preds": [ + "_strategy != ori(strategies[_token])" + ] + }, + { + "before_preds": [ + "ori(governance) != ori(strategist)" + ], + "after_preds": [ + "ori(governance) != ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(governance) == msg.sender" + ], + "after_preds": [ + "ori(governance) == msg.sender" + ] + }, + { + "before_preds": [ + "ori(strategist) != msg.sender" + ], + "after_preds": [ + "ori(strategist) != msg.sender" + ] + }, + { + "before_preds": [ + "approvedStrategies[_token][_strategy] == true" + ], + "after_preds": [ + "approvedStrategies[_token][_strategy] == true" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategies[_token] != 0" + ], + "after_preds": [ + "strategies[_token] != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "_strategy == strategies[_token]" + ], + "after_preds": [ + "_strategy == strategies[_token]" + ] + }, + { + "before_preds": [ + "approvedStrategies[_token][_strategy] == ori(approvedStrategies[_token][_strategy])" + ], + "after_preds": [ + "approvedStrategies[_token][_strategy] == ori(approvedStrategies[_token][_strategy])" + ] + }, + { + "before_preds": [ + "governance != strategist" + ], + "after_preds": [ + "governance != strategist" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "governance != ori(strategist)" + ], + "after_preds": [ + "governance != ori(strategist)" + ] + }, + { + "before_preds": [ + "governance == msg.sender" + ], + "after_preds": [ + "governance == msg.sender" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "ori(strategies[_token]) != strategies[_token]" + ], + "after_preds": [ + "ori(strategies[_token]) != strategies[_token]" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, + { + "before_preds": [ + "strategist != ori(governance)" + ], + "after_preds": [ + "strategist != ori(governance)" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "strategist != msg.sender" + ], + "after_preds": [ + "strategist != msg.sender" + ] + }, + { + "before_preds": [ + "ori(timelock) == timelock" + ], + "after_preds": [ + "ori(timelock) == timelock" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_timelock != 0" + ], + "after_preds": [ + "_timelock != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) == msg.sender" + ], + "after_preds": [ + "ori(timelock) == msg.sender" + ] + }, + { + "before_preds": [ + "ori(timelock) != _timelock" + ], + "after_preds": [ + "ori(timelock) != _timelock" + ] + }, + { + "before_preds": [ + "msg.sender != _timelock" + ], + "after_preds": [ + "msg.sender != _timelock" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(timelock) != timelock" + ], + "after_preds": [ + "ori(timelock) != timelock" + ] + }, + { + "before_preds": [ + "msg.sender != timelock" + ], + "after_preds": [ + "msg.sender != timelock" + ] + }, + { + "before_preds": [ + "timelock == _timelock" + ], + "after_preds": [ + "timelock == _timelock" + ] + }, + { + "before_preds": [ + "ori(devfund) != 0" + ], + "after_preds": [ + "ori(devfund) != 0" + ] + }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, + { + "before_preds": [ + "ori(split) one of [500]" + ], + "after_preds": [ + "ori(split) one of [500]" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) one of [100]" + ], + "after_preds": [ + "ori(convenienceFee) one of [100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(treasury) != 0" + ], + "after_preds": [ + "ori(treasury) != 0" + ] + }, + { + "before_preds": [ + "ori(strategist) != 0" + ], + "after_preds": [ + "ori(strategist) != 0" + ] + }, + { + "before_preds": [ + "ori(onesplit) != 0" + ], + "after_preds": [ + "ori(onesplit) != 0" + ] + }, + { + "before_preds": [ + "ori(timelock) != 0" + ], + "after_preds": [ + "ori(timelock) != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != ori(strategist)" + ], + "after_preds": [ + "ori(governance) != ori(strategist)" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, + { + "before_preds": [ + "split one of [500]" + ], + "after_preds": [ + "split one of [500]" + ] + }, + { + "before_preds": [ + "onesplit != 0" + ], + "after_preds": [ + "onesplit != 0" + ] + }, + { + "before_preds": [ + "treasury != 0" + ], + "after_preds": [ + "treasury != 0" + ] + }, + { + "before_preds": [ + "strategist != 0" + ], + "after_preds": [ + "strategist != 0" + ] + }, + { + "before_preds": [ + "devfund != 0" + ], + "after_preds": [ + "devfund != 0" + ] + }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, + { + "before_preds": [ + "convenienceFee one of [100]" + ], + "after_preds": [ + "convenienceFee one of [100]" + ] + }, + { + "before_preds": [ + "timelock != 0" + ], + "after_preds": [ + "timelock != 0" + ] + }, + { + "before_preds": [ + "governance != strategist" + ], + "after_preds": [ + "governance != strategist" + ] + }, + { + "before_preds": [ + "governance != ori(strategist)" + ], + "after_preds": [ + "governance != ori(strategist)" + ] + }, + { + "before_preds": [ + "ori(devfund) == devfund" + ], + "after_preds": [ + "ori(devfund) == devfund" + ] + }, + { + "before_preds": [ + "onesplit == ori(onesplit)" + ], + "after_preds": [ + "onesplit == ori(onesplit)" + ] + }, + { + "before_preds": [ + "treasury == ori(treasury)" + ], + "after_preds": [ + "treasury == ori(treasury)" + ] + }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, + { + "before_preds": [ + "strategist != ori(governance)" + ], + "after_preds": [ + "strategist != ori(governance)" + ] + }, + { + "before_preds": [ + "strategist == ori(strategist)" + ], + "after_preds": [ + "strategist == ori(strategist)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json new file mode 100644 index 0000000..8b97a14 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json @@ -0,0 +1,550 @@ +[ + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "fromChainID > 0" + ], + "after_preds": [ + "fromChainID > 0" + ] + }, + { + "before_preds": [ + "fromChainID one of [56,137,250]" + ], + "after_preds": [ + "fromChainID one of [56,137,250]" + ] + }, + { + "before_preds": [ + "txs != \"\"" + ], + "after_preds": [ + "txs != \"\"" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == 0" + ], + "after_preds": [ + "ori(_oldMPC) == 0" + ] + }, + { + "before_preds": [ + "ori(_newMPC) != 0" + ], + "after_preds": [ + "ori(_newMPC) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_newMPC != 0" + ], + "after_preds": [ + "_newMPC != 0" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "after_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ] + }, + { + "before_preds": [ + "_oldMPC == 0" + ], + "after_preds": [ + "_oldMPC == 0" + ] + }, + { + "before_preds": [ + "_newMPC == ori(_newMPC)" + ], + "after_preds": [ + "_newMPC == ori(_newMPC)" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == _oldMPC" + ], + "after_preds": [ + "ori(_oldMPC) == _oldMPC" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "toChainID > 0", + "toChainID == 56" + ], + "after_preds": [ + "toChainID > 0", + "toChainID == 56" + ] + }, + { + "before_preds": [ + "toChainID one of [56]" + ], + "after_preds": [ + "toChainID one of [56]" + ] + }, + { + "before_preds": [ + "amount > 0", + "amount == 390000000000" + ], + "after_preds": [ + "amount > 0", + "amount == 390000000000" + ] + }, + { + "before_preds": [ + "amount one of [390000000000]" + ], + "after_preds": [ + "amount one of [390000000000]" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == 0" + ], + "after_preds": [ + "ori(_oldMPC) == 0" + ] + }, + { + "before_preds": [ + "ori(_newMPC) != 0" + ], + "after_preds": [ + "ori(_newMPC) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_newMPC != 0" + ], + "after_preds": [ + "_newMPC != 0" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "after_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ] + }, + { + "before_preds": [ + "_oldMPC == 0" + ], + "after_preds": [ + "_oldMPC == 0" + ] + }, + { + "before_preds": [ + "_newMPC == ori(_newMPC)" + ], + "after_preds": [ + "_newMPC == ori(_newMPC)" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == _oldMPC" + ], + "after_preds": [ + "ori(_oldMPC) == _oldMPC" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "toChainID > 0" + ], + "after_preds": [ + "toChainID > 0" + ] + }, + { + "before_preds": [ + "toChainID one of [56,137,250]" + ], + "after_preds": [ + "toChainID one of [56,137,250]" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == 0" + ], + "after_preds": [ + "ori(_oldMPC) == 0" + ] + }, + { + "before_preds": [ + "ori(_newMPC) != 0" + ], + "after_preds": [ + "ori(_newMPC) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_newMPC != 0" + ], + "after_preds": [ + "_newMPC != 0" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "after_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ] + }, + { + "before_preds": [ + "_oldMPC == 0" + ], + "after_preds": [ + "_oldMPC == 0" + ] + }, + { + "before_preds": [ + "_newMPC == ori(_newMPC)" + ], + "after_preds": [ + "_newMPC == ori(_newMPC)" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == _oldMPC" + ], + "after_preds": [ + "ori(_oldMPC) == _oldMPC" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == 0" + ], + "after_preds": [ + "ori(_oldMPC) == 0" + ] + }, + { + "before_preds": [ + "ori(_newMPC) != 0" + ], + "after_preds": [ + "ori(_newMPC) != 0" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) one of [1624013046]" + ] + }, + { + "before_preds": [ + "_newMPC != 0" + ], + "after_preds": [ + "_newMPC != 0" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ], + "after_preds": [ + "_newMPCEffectiveTime one of [1624013046]" + ] + }, + { + "before_preds": [ + "_oldMPC == 0" + ], + "after_preds": [ + "_oldMPC == 0" + ] + }, + { + "before_preds": [ + "_newMPC == ori(_newMPC)" + ], + "after_preds": [ + "_newMPC == ori(_newMPC)" + ] + }, + { + "before_preds": [ + "ori(_oldMPC) == _oldMPC" + ], + "after_preds": [ + "ori(_oldMPC) == _oldMPC" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json new file mode 100644 index 0000000..96bafac --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json @@ -0,0 +1,1064 @@ +[ + { + "before_preds": [ + "ori(Sum(decimals[...])) > 0", + "ori(Sum(decimals[...])) == 81" + ], + "after_preds": [ + "ori(Sum(decimals[...])) > 0", + "ori(Sum(decimals[...])) == 81" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) one of [81]" + ], + "after_preds": [ + "ori(Sum(decimals[...])) one of [81]" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) != 0" + ], + "after_preds": [ + "ori(pendingAdmin) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) != 0" + ], + "after_preds": [ + "ori(kyberNetworkContract) != 0" + ] + }, + { + "before_preds": [ + "sendTo != 0" + ], + "after_preds": [ + "sendTo != 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "amount > 0", + "amount == 40963957051" + ], + "after_preds": [ + "amount > 0", + "amount == 40963957051" + ] + }, + { + "before_preds": [ + "amount one of [40963957051]" + ], + "after_preds": [ + "amount one of [40963957051]" + ] + }, + { + "before_preds": [ + "msg.sender == ori(admin)" + ], + "after_preds": [ + "msg.sender == ori(admin)" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [81]" + ], + "after_preds": [ + "elem of decimals[...] is one of [81]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [9,18]" + ], + "after_preds": [ + "elem of decimals[...] is one of [9,18]" + ] + }, + { + "before_preds": [ + "pendingAdmin != 0" + ], + "after_preds": [ + "pendingAdmin != 0" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) > 0", + "Sum(decimals[...]) == 81" + ], + "after_preds": [ + "Sum(decimals[...]) > 0", + "Sum(decimals[...]) == 81" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) one of [81]" + ], + "after_preds": [ + "Sum(decimals[...]) one of [81]" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ] + }, + { + "before_preds": [ + "msg.sender == admin" + ], + "after_preds": [ + "msg.sender == admin" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ], + "after_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ] + }, + { + "before_preds": [ + "ori(admin) == admin" + ], + "after_preds": [ + "ori(admin) == admin" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == 0" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == 0" + ], + "after_preds": [ + "ori(pendingAdmin) == 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) != 0" + ], + "after_preds": [ + "ori(kyberNetworkContract) != 0" + ] + }, + { + "before_preds": [ + "newAdmin != 0" + ], + "after_preds": [ + "newAdmin != 0" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) != newAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) != newAdmin" + ] + }, + { + "before_preds": [ + "msg.sender == ori(admin)" + ], + "after_preds": [ + "msg.sender == ori(admin)" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [0]" + ], + "after_preds": [ + "elem of decimals[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of []" + ], + "after_preds": [ + "elem of decimals[...] is one of []" + ] + }, + { + "before_preds": [ + "pendingAdmin != 0" + ], + "after_preds": [ + "pendingAdmin != 0" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) == 0" + ], + "after_preds": [ + "Sum(decimals[...]) == 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) one of [0]" + ], + "after_preds": [ + "Sum(decimals[...]) one of [0]" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) != pendingAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) != pendingAdmin" + ] + }, + { + "before_preds": [ + "msg.sender == admin" + ], + "after_preds": [ + "msg.sender == admin" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ], + "after_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ] + }, + { + "before_preds": [ + "newAdmin == pendingAdmin" + ], + "after_preds": [ + "newAdmin == pendingAdmin" + ] + }, + { + "before_preds": [ + "ori(admin) == admin" + ], + "after_preds": [ + "ori(admin) == admin" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == 0" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == 0" + ], + "after_preds": [ + "ori(pendingAdmin) == 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) != 0" + ], + "after_preds": [ + "ori(kyberNetworkContract) != 0" + ] + }, + { + "before_preds": [ + "newAdmin != 0" + ], + "after_preds": [ + "newAdmin != 0" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != newAdmin" + ], + "after_preds": [ + "msg.sender != newAdmin" + ] + }, + { + "before_preds": [ + "msg.sender == ori(admin)" + ], + "after_preds": [ + "msg.sender == ori(admin)" + ] + }, + { + "before_preds": [ + "newAdmin != ori(admin)" + ], + "after_preds": [ + "newAdmin != ori(admin)" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [0]" + ], + "after_preds": [ + "elem of decimals[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of []" + ], + "after_preds": [ + "elem of decimals[...] is one of []" + ] + }, + { + "before_preds": [ + "pendingAdmin == 0" + ], + "after_preds": [ + "pendingAdmin == 0" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) == 0" + ], + "after_preds": [ + "Sum(decimals[...]) == 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) one of [0]" + ], + "after_preds": [ + "Sum(decimals[...]) one of [0]" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ] + }, + { + "before_preds": [ + "msg.sender != admin" + ], + "after_preds": [ + "msg.sender != admin" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ], + "after_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ] + }, + { + "before_preds": [ + "newAdmin == admin" + ], + "after_preds": [ + "newAdmin == admin" + ] + }, + { + "before_preds": [ + "ori(admin) != admin" + ], + "after_preds": [ + "ori(admin) != admin" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == 0" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(decimals[...])) one of [0]" + ] + }, + { + "before_preds": [ + "_kyberNetworkContract != 0" + ], + "after_preds": [ + "_kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == 0" + ], + "after_preds": [ + "ori(pendingAdmin) == 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) == 0" + ], + "after_preds": [ + "ori(kyberNetworkContract) == 0" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "_kyberNetworkContract != ori(kyberNetworkContract)" + ], + "after_preds": [ + "_kyberNetworkContract != ori(kyberNetworkContract)" + ] + }, + { + "before_preds": [ + "msg.sender == ori(admin)" + ], + "after_preds": [ + "msg.sender == ori(admin)" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [0]" + ], + "after_preds": [ + "elem of decimals[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of []" + ], + "after_preds": [ + "elem of decimals[...] is one of []" + ] + }, + { + "before_preds": [ + "pendingAdmin == 0" + ], + "after_preds": [ + "pendingAdmin == 0" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) == 0" + ], + "after_preds": [ + "Sum(decimals[...]) == 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) one of [0]" + ], + "after_preds": [ + "Sum(decimals[...]) one of [0]" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, + { + "before_preds": [ + "_kyberNetworkContract == kyberNetworkContract" + ], + "after_preds": [ + "_kyberNetworkContract == kyberNetworkContract" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ] + }, + { + "before_preds": [ + "msg.sender == admin" + ], + "after_preds": [ + "msg.sender == admin" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) != kyberNetworkContract" + ], + "after_preds": [ + "ori(kyberNetworkContract) != kyberNetworkContract" + ] + }, + { + "before_preds": [ + "ori(admin) == admin" + ], + "after_preds": [ + "ori(admin) == admin" + ] + }, + { + "before_preds": [ + "minConversionRate > 0" + ], + "after_preds": [ + "minConversionRate > 0" + ] + }, + { + "before_preds": [ + "destAddress != 0" + ], + "after_preds": [ + "destAddress != 0" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) != 0" + ], + "after_preds": [ + "ori(pendingAdmin) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) != 0" + ], + "after_preds": [ + "ori(kyberNetworkContract) != 0" + ] + }, + { + "before_preds": [ + "maxDestAmount > 0" + ], + "after_preds": [ + "maxDestAmount > 0" + ] + }, + { + "before_preds": [ + "maxDestAmount one of [57896044618658097711785492504343953926634992332820282019728792003956564819968,1606938044258990300000000000000000000000000000000000000000000]" + ], + "after_preds": [ + "maxDestAmount one of [57896044618658097711785492504343953926634992332820282019728792003956564819968,1606938044258990300000000000000000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "dest != 0" + ], + "after_preds": [ + "dest != 0" + ] + }, + { + "before_preds": [ + "src != 0" + ], + "after_preds": [ + "src != 0" + ] + }, + { + "before_preds": [ + "srcAmount > 0" + ], + "after_preds": [ + "srcAmount > 0" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "walletId != 0" + ], + "after_preds": [ + "walletId != 0" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [161]" + ], + "after_preds": [ + "elem of decimals[...] is one of [161]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [8,9,18,12]" + ], + "after_preds": [ + "elem of decimals[...] is one of [8,9,18,12]" + ] + }, + { + "before_preds": [ + "pendingAdmin != 0" + ], + "after_preds": [ + "pendingAdmin != 0" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "Sum(decimals[...]) > 0" + ], + "after_preds": [ + "Sum(decimals[...]) > 0" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, + { + "before_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ], + "after_preds": [ + "ori(pendingAdmin) == pendingAdmin" + ] + }, + { + "before_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ], + "after_preds": [ + "ori(kyberNetworkContract) == kyberNetworkContract" + ] + }, + { + "before_preds": [ + "ori(admin) == admin" + ], + "after_preds": [ + "ori(admin) == admin" + ] + }, + { + "before_preds": [ + "ori(admin) != 0" + ], + "after_preds": [ + "ori(admin) != 0" + ] + }, + { + "before_preds": [ + "ori(admin) != ori(pendingAdmin)" + ], + "after_preds": [ + "ori(admin) != ori(pendingAdmin)" + ] + }, + { + "before_preds": [ + "admin != 0" + ], + "after_preds": [ + "admin != 0" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [0]" + ], + "after_preds": [ + "elem of decimals[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of decimals[...] is one of [8,9,18,12]" + ], + "after_preds": [ + "elem of decimals[...] is one of [8,9,18,12]" + ] + }, + { + "before_preds": [ + "kyberNetworkContract != 0" + ], + "after_preds": [ + "kyberNetworkContract != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, + { + "before_preds": [ + "pendingAdmin != ori(admin)" + ], + "after_preds": [ + "pendingAdmin != ori(admin)" + ] + }, + { + "before_preds": [ + "pendingAdmin != admin" + ], + "after_preds": [ + "pendingAdmin != admin" + ] + }, + { + "before_preds": [ + "admin != ori(pendingAdmin)" + ], + "after_preds": [ + "admin != ori(pendingAdmin)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json new file mode 100644 index 0000000..3964edc --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json @@ -0,0 +1,1632 @@ +[ + { + "before_preds": [ + "ori(initializing) == false" + ], + "after_preds": [ + "ori(initializing) == false" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == false" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(rebasePausedDeprecated) == false" + ], + "after_preds": [ + "ori(rebasePausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(_allowedFragments[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowedFragments[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowedFragments[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowedFragments[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [60000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [60000000000000]" + ] + }, + { + "before_preds": [ + "ori(initialized) == true" + ], + "after_preds": [ + "ori(initialized) == true" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(monetaryPolicy) == 0" + ], + "after_preds": [ + "ori(monetaryPolicy) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "ori(_owner) == 0" + ], + "after_preds": [ + "ori(_owner) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) == 0" + ], + "after_preds": [ + "ori(_decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [0]" + ], + "after_preds": [ + "ori(_decimals) one of [0]" + ] + }, + { + "before_preds": [ + "value > 0" + ], + "after_preds": [ + "value > 0" + ] + }, + { + "before_preds": [ + "value one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] > 0" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] > 0" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "initializing == false" + ], + "after_preds": [ + "initializing == false" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [60000000000000]" + ], + "after_preds": [ + "_totalSupply one of [60000000000000]" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == false" + ], + "after_preds": [ + "rebasePausedDeprecated == false" + ] + }, + { + "before_preds": [ + "monetaryPolicy == 0" + ], + "after_preds": [ + "monetaryPolicy == 0" + ] + }, + { + "before_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_allowedFragments[msg.sender][...]) > 0" + ], + "after_preds": [ + "Sum(_allowedFragments[msg.sender][...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_allowedFragments[msg.sender][...]) one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowedFragments[msg.sender][...]) one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated == false" + ], + "after_preds": [ + "tokenPausedDeprecated == false" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_decimals == 0" + ], + "after_preds": [ + "_decimals == 0" + ] + }, + { + "before_preds": [ + "_decimals one of [0]" + ], + "after_preds": [ + "_decimals one of [0]" + ] + }, + { + "before_preds": [ + "initialized == true" + ], + "after_preds": [ + "initialized == true" + ] + }, + { + "before_preds": [ + "_owner == 0" + ], + "after_preds": [ + "_owner == 0" + ] + }, + { + "before_preds": [ + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000]" + ], + "after_preds": [ + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000]" + ] + }, + { + "before_preds": [ + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowedFragments[msg.sender][...] is one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(initializing) == initializing" + ], + "after_preds": [ + "ori(initializing) == initializing" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] >= Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] <= Sum(_allowedFragments[msg.sender][...])" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] >= Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] <= Sum(_allowedFragments[msg.sender][...])" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ], + "after_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ] + }, + { + "before_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ], + "after_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(initialized) == initialized" + ], + "after_preds": [ + "ori(initialized) == initialized" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(initializing) == false" + ], + "after_preds": [ + "ori(initializing) == false" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == false" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(rebasePausedDeprecated) == false" + ], + "after_preds": [ + "ori(rebasePausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [60000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [60000000000000]" + ] + }, + { + "before_preds": [ + "ori(initialized) == true" + ], + "after_preds": [ + "ori(initialized) == true" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(monetaryPolicy) == 0" + ], + "after_preds": [ + "ori(monetaryPolicy) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "ori(_owner) == 0" + ], + "after_preds": [ + "ori(_owner) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) == 0" + ], + "after_preds": [ + "ori(_decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [0]" + ], + "after_preds": [ + "ori(_decimals) one of [0]" + ] + }, + { + "before_preds": [ + "monetaryPolicy_ != 0" + ], + "after_preds": [ + "monetaryPolicy_ != 0" + ] + }, + { + "before_preds": [ + "ori(monetaryPolicy) != monetaryPolicy_" + ], + "after_preds": [ + "ori(monetaryPolicy) != monetaryPolicy_" + ] + }, + { + "before_preds": [ + "initializing == false" + ], + "after_preds": [ + "initializing == false" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [60000000000000]" + ], + "after_preds": [ + "_totalSupply one of [60000000000000]" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == false" + ], + "after_preds": [ + "rebasePausedDeprecated == false" + ] + }, + { + "before_preds": [ + "monetaryPolicy == 0" + ], + "after_preds": [ + "monetaryPolicy == 0" + ] + }, + { + "before_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated == false" + ], + "after_preds": [ + "tokenPausedDeprecated == false" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_decimals == 0" + ], + "after_preds": [ + "_decimals == 0" + ] + }, + { + "before_preds": [ + "_decimals one of [0]" + ], + "after_preds": [ + "_decimals one of [0]" + ] + }, + { + "before_preds": [ + "initialized == true" + ], + "after_preds": [ + "initialized == true" + ] + }, + { + "before_preds": [ + "_owner == 0" + ], + "after_preds": [ + "_owner == 0" + ] + }, + { + "before_preds": [ + "ori(initializing) == initializing" + ], + "after_preds": [ + "ori(initializing) == initializing" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ], + "after_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ] + }, + { + "before_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ], + "after_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ] + }, + { + "before_preds": [ + "monetaryPolicy != monetaryPolicy_" + ], + "after_preds": [ + "monetaryPolicy != monetaryPolicy_" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(initialized) == initialized" + ], + "after_preds": [ + "ori(initialized) == initialized" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(initializing) == false" + ], + "after_preds": [ + "ori(initializing) == false" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == false" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(rebasePausedDeprecated) == false" + ], + "after_preds": [ + "ori(rebasePausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == 0" + ], + "after_preds": [ + "ori(_totalSupply) == 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [0]" + ], + "after_preds": [ + "ori(_totalSupply) one of [0]" + ] + }, + { + "before_preds": [ + "ori(initialized) == false" + ], + "after_preds": [ + "ori(initialized) == false" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(monetaryPolicy) == 0" + ], + "after_preds": [ + "ori(monetaryPolicy) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) == 0" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) == 0" + ], + "after_preds": [ + "ori(_gonsPerFragment) == 0" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) one of [0]" + ], + "after_preds": [ + "ori(_gonsPerFragment) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_owner) == 0" + ], + "after_preds": [ + "ori(_owner) == 0" + ] + }, + { + "before_preds": [ + "ori(_gonBalances[owner_]) == 0" + ], + "after_preds": [ + "ori(_gonBalances[owner_]) == 0" + ] + }, + { + "before_preds": [ + "ori(_gonBalances[owner_]) one of [0]" + ], + "after_preds": [ + "ori(_gonBalances[owner_]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) == 0" + ], + "after_preds": [ + "ori(_decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [0]" + ], + "after_preds": [ + "ori(_decimals) one of [0]" + ] + }, + { + "before_preds": [ + "owner_ != 0" + ], + "after_preds": [ + "owner_ != 0" + ] + }, + { + "before_preds": [ + "ori(initializing) == ori(tokenPausedDeprecated)" + ], + "after_preds": [ + "ori(initializing) == ori(tokenPausedDeprecated)" + ] + }, + { + "before_preds": [ + "ori(initializing) == ori(initialized)" + ], + "after_preds": [ + "ori(initializing) == ori(initialized)" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == ori(initialized)" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == ori(initialized)" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) == ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) >= ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) <= ori(_gonBalances[owner_])" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) == ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) >= ori(_gonBalances[owner_])", + "ori(Sum(_gonBalances[...])) <= ori(_gonBalances[owner_])" + ] + }, + { + "before_preds": [ + "initializing == false" + ], + "after_preds": [ + "initializing == false" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [60000000000000]" + ], + "after_preds": [ + "_totalSupply one of [60000000000000]" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == false" + ], + "after_preds": [ + "rebasePausedDeprecated == false" + ] + }, + { + "before_preds": [ + "monetaryPolicy == 0" + ], + "after_preds": [ + "monetaryPolicy == 0" + ] + }, + { + "before_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated == false" + ], + "after_preds": [ + "tokenPausedDeprecated == false" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_decimals == 0" + ], + "after_preds": [ + "_decimals == 0" + ] + }, + { + "before_preds": [ + "_decimals one of [0]" + ], + "after_preds": [ + "_decimals one of [0]" + ] + }, + { + "before_preds": [ + "initialized == true" + ], + "after_preds": [ + "initialized == true" + ] + }, + { + "before_preds": [ + "_owner == 0" + ], + "after_preds": [ + "_owner == 0" + ] + }, + { + "before_preds": [ + "_gonBalances[owner_] > 0", + "_gonBalances[owner_] == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "_gonBalances[owner_] > 0", + "_gonBalances[owner_] == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "_gonBalances[owner_] one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "_gonBalances[owner_] one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "ori(initializing) == initializing" + ], + "after_preds": [ + "ori(initializing) == initializing" + ] + }, + { + "before_preds": [ + "ori(initializing) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(initializing) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(initializing) != initialized" + ], + "after_preds": [ + "ori(initializing) != initialized" + ] + }, + { + "before_preds": [ + "initializing == ori(tokenPausedDeprecated)" + ], + "after_preds": [ + "initializing == ori(tokenPausedDeprecated)" + ] + }, + { + "before_preds": [ + "initializing == tokenPausedDeprecated" + ], + "after_preds": [ + "initializing == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "initializing == ori(initialized)" + ], + "after_preds": [ + "initializing == ori(initialized)" + ] + }, + { + "before_preds": [ + "initializing != initialized" + ], + "after_preds": [ + "initializing != initialized" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ], + "after_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ] + }, + { + "before_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ], + "after_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) != initialized" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) != initialized" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated == ori(initialized)" + ], + "after_preds": [ + "tokenPausedDeprecated == ori(initialized)" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated != initialized" + ], + "after_preds": [ + "tokenPausedDeprecated != initialized" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) >= ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) > ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) != ori(_gonBalances[owner_])" + ], + "after_preds": [ + "Sum(_gonBalances[...]) >= ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) > ori(_gonBalances[owner_])", + "Sum(_gonBalances[...]) != ori(_gonBalances[owner_])" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) == _gonBalances[owner_]", + "Sum(_gonBalances[...]) >= _gonBalances[owner_]", + "Sum(_gonBalances[...]) <= _gonBalances[owner_]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == _gonBalances[owner_]", + "Sum(_gonBalances[...]) >= _gonBalances[owner_]", + "Sum(_gonBalances[...]) <= _gonBalances[owner_]" + ] + }, + { + "before_preds": [ + "ori(initialized) != initialized" + ], + "after_preds": [ + "ori(initialized) != initialized" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) <= _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) < _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) != _gonBalances[owner_]" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) <= _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) < _gonBalances[owner_]", + "ori(Sum(_gonBalances[...])) != _gonBalances[owner_]" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + }, + { + "before_preds": [ + "ori(_gonBalances[owner_]) <= _gonBalances[owner_]", + "ori(_gonBalances[owner_]) < _gonBalances[owner_]", + "ori(_gonBalances[owner_]) != _gonBalances[owner_]" + ], + "after_preds": [ + "ori(_gonBalances[owner_]) <= _gonBalances[owner_]", + "ori(_gonBalances[owner_]) < _gonBalances[owner_]", + "ori(_gonBalances[owner_]) != _gonBalances[owner_]" + ] + }, + { + "before_preds": [ + "ori(initializing) == false" + ], + "after_preds": [ + "ori(initializing) == false" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == false" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(rebasePausedDeprecated) == false" + ], + "after_preds": [ + "ori(rebasePausedDeprecated) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [0,60000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [0,60000000000000]" + ] + }, + { + "before_preds": [ + "ori(monetaryPolicy) == 0" + ], + "after_preds": [ + "ori(monetaryPolicy) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) one of [0,115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) one of [0,115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "ori(_gonsPerFragment) one of [0,1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "ori(_gonsPerFragment) one of [0,1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "ori(_owner) == 0" + ], + "after_preds": [ + "ori(_owner) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) == 0" + ], + "after_preds": [ + "ori(_decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [0]" + ], + "after_preds": [ + "ori(_decimals) one of [0]" + ] + }, + { + "before_preds": [ + "ori(initializing) == ori(tokenPausedDeprecated)" + ], + "after_preds": [ + "ori(initializing) == ori(tokenPausedDeprecated)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) <= ori(_gonsPerFragment)" + ], + "after_preds": [ + "ori(_totalSupply) <= ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "initializing == false" + ], + "after_preds": [ + "initializing == false" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [60000000000000]" + ], + "after_preds": [ + "_totalSupply one of [60000000000000]" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == false" + ], + "after_preds": [ + "rebasePausedDeprecated == false" + ] + }, + { + "before_preds": [ + "monetaryPolicy == 0" + ], + "after_preds": [ + "monetaryPolicy == 0" + ] + }, + { + "before_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, + { + "before_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ], + "after_preds": [ + "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated == false" + ], + "after_preds": [ + "tokenPausedDeprecated == false" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ], + "after_preds": [ + "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" + ] + }, + { + "before_preds": [ + "_decimals == 0" + ], + "after_preds": [ + "_decimals == 0" + ] + }, + { + "before_preds": [ + "_decimals one of [0]" + ], + "after_preds": [ + "_decimals one of [0]" + ] + }, + { + "before_preds": [ + "initialized == true" + ], + "after_preds": [ + "initialized == true" + ] + }, + { + "before_preds": [ + "_owner == 0" + ], + "after_preds": [ + "_owner == 0" + ] + }, + { + "before_preds": [ + "ori(initializing) == initializing" + ], + "after_preds": [ + "ori(initializing) == initializing" + ] + }, + { + "before_preds": [ + "ori(initializing) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(initializing) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(initializing) != initialized" + ], + "after_preds": [ + "ori(initializing) != initialized" + ] + }, + { + "before_preds": [ + "initializing == ori(tokenPausedDeprecated)" + ], + "after_preds": [ + "initializing == ori(tokenPausedDeprecated)" + ] + }, + { + "before_preds": [ + "initializing == tokenPausedDeprecated" + ], + "after_preds": [ + "initializing == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "initializing != initialized" + ], + "after_preds": [ + "initializing != initialized" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply >= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply != ori(_gonsPerFragment)" + ], + "after_preds": [ + "_totalSupply != ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ], + "after_preds": [ + "rebasePausedDeprecated == ori(rebasePausedDeprecated)" + ] + }, + { + "before_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ], + "after_preds": [ + "monetaryPolicy == ori(monetaryPolicy)" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) == tokenPausedDeprecated" + ] + }, + { + "before_preds": [ + "ori(tokenPausedDeprecated) != initialized" + ], + "after_preds": [ + "ori(tokenPausedDeprecated) != initialized" + ] + }, + { + "before_preds": [ + "_gonsPerFragment >= ori(_gonsPerFragment)" + ], + "after_preds": [ + "_gonsPerFragment >= ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "tokenPausedDeprecated != initialized" + ], + "after_preds": [ + "tokenPausedDeprecated != initialized" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))" + ], + "after_preds": [ + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))" + ] + }, + { + "before_preds": [ + "ori(_owner) == _owner" + ], + "after_preds": [ + "ori(_owner) == _owner" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json new file mode 100644 index 0000000..2e7b0b6 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json @@ -0,0 +1,2204 @@ +[ + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]" + ], + "after_preds": [ + "ori(_totalSupply) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) == 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [0]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "_amount > 0" + ], + "after_preds": [ + "_amount > 0" + ] + }, + { + "before_preds": [ + "_amount one of [500000000000000000000,13105133700000000000000,100000000000000000000,103970700000000000000]" + ], + "after_preds": [ + "_amount one of [500000000000000000000,13105133700000000000000,100000000000000000000,103970700000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]" + ], + "after_preds": [ + "_totalSupply one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0" + ], + "after_preds": [ + "_balances[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [13082359060001746878663,103789481789261074604,100000000000000000000,499130119572851959406]" + ], + "after_preds": [ + "_balances[msg.sender] one of [13082359060001746878663,103789481789261074604,100000000000000000000,499130119572851959406]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [142345985557645870700604]" + ], + "after_preds": [ + "elem of _balances[...] is one of [142345985557645870700604]" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [0,90000000000000000000]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [0,90000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0" + ], + "after_preds": [ + "_balances[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [134406668607338084218100]" + ], + "after_preds": [ + "elem of _balances[...] is one of [134406668607338084218100]" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,193288114234845046898,15113130871002806453838,100000000000000000000,7682645945411942583280,9999286966540985221802,58078098074825682085113]" + ], + "after_preds": [ + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,193288114234845046898,15113130871002806453838,100000000000000000000,7682645945411942583280,9999286966540985221802,58078098074825682085113]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "_governance != 0" + ], + "after_preds": [ + "_governance != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 142449775039435131775208" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 142449775039435131775208" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [142449775039435131775208]" + ], + "after_preds": [ + "ori(_totalSupply) one of [142449775039435131775208]" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 142449775039435131775208" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 142449775039435131775208" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [142449775039435131775208]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [142449775039435131775208]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "_governance != ori(governance)" + ], + "after_preds": [ + "_governance != ori(governance)" + ] + }, + { + "before_preds": [ + "_governance != msg.sender" + ], + "after_preds": [ + "_governance != msg.sender" + ] + }, + { + "before_preds": [ + "ori(governance) == msg.sender" + ], + "after_preds": [ + "ori(governance) == msg.sender" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 142449775039435131775208" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 142449775039435131775208" + ] + }, + { + "before_preds": [ + "_totalSupply one of [142449775039435131775208]" + ], + "after_preds": [ + "_totalSupply one of [142449775039435131775208]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 142449775039435131775208" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 142449775039435131775208" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [142449775039435131775208]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [142449775039435131775208]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [142449775039435131775208]" + ], + "after_preds": [ + "elem of _balances[...] is one of [142449775039435131775208]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,0,193288114234845046898,499130119572851959406,15113130871002806453838,2887782269888984921831,28891975855582153400605,13082359060001746878663,7682645945411942583280,194232561057094695264,103789481789261074604,9999286966540985221802,58078098074825682085113]" + ], + "after_preds": [ + "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,0,193288114234845046898,499130119572851959406,15113130871002806453838,2887782269888984921831,28891975855582153400605,13082359060001746878663,7682645945411942583280,194232561057094695264,103789481789261074604,9999286966540985221802,58078098074825682085113]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "_governance == governance" + ], + "after_preds": [ + "_governance == governance" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, + { + "before_preds": [ + "governance != ori(governance)" + ], + "after_preds": [ + "governance != ori(governance)" + ] + }, + { + "before_preds": [ + "governance != msg.sender" + ], + "after_preds": [ + "governance != msg.sender" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "_shares > 0", + "_shares == 10000000000000000000" + ], + "after_preds": [ + "_shares > 0", + "_shares == 10000000000000000000" + ] + }, + { + "before_preds": [ + "_shares one of [10000000000000000000]" + ], + "after_preds": [ + "_shares one of [10000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000000000000" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(_balances[msg.sender])", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) == ori(_balances[msg.sender])", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) <= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 90000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 90000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [90000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [90000000000000000000]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 90000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 90000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [90000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [90000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0", + "_balances[msg.sender] == 90000000000000000000" + ], + "after_preds": [ + "_balances[msg.sender] > 0", + "_balances[msg.sender] == 90000000000000000000" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [90000000000000000000]" + ], + "after_preds": [ + "_balances[msg.sender] one of [90000000000000000000]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [90000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [90000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply == _balances[msg.sender]", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply <= _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply == _balances[msg.sender]", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply <= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [128942301002958992697573,134406668607338084218100]" + ], + "after_preds": [ + "ori(_totalSupply) one of [128942301002958992697573,134406668607338084218100]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [5464367604379091520527,29264013041526968930907]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [5464367604379091520527,29264013041526968930907]" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [128942301002958992697573,134406668607338084218100]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [128942301002958992697573,134406668607338084218100]" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [128942301002958992697573,99678287961432023766666]" + ], + "after_preds": [ + "_totalSupply one of [128942301002958992697573,99678287961432023766666]" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [128942301002958992697573,99678287961432023766666]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [128942301002958992697573,99678287961432023766666]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] == 0" + ], + "after_preds": [ + "_balances[msg.sender] == 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [0]" + ], + "after_preds": [ + "_balances[msg.sender] one of [0]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [128942301002958992697573]" + ], + "after_preds": [ + "elem of _balances[...] is one of [128942301002958992697573]" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, + { + "before_preds": [ + "governance == ori(governance)" + ], + "after_preds": [ + "governance == ori(governance)" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, + { + "before_preds": [ + "ori(min) one of [9500]" + ], + "after_preds": [ + "ori(min) one of [9500]" + ] + }, + { + "before_preds": [ + "ori(token) != 0" + ], + "after_preds": [ + "ori(token) != 0" + ] + }, + { + "before_preds": [ + "ori(governance) != 0" + ], + "after_preds": [ + "ori(governance) != 0" + ] + }, + { + "before_preds": [ + "ori(controller) != 0" + ], + "after_preds": [ + "ori(controller) != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "token != 0" + ], + "after_preds": [ + "token != 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "governance != 0" + ], + "after_preds": [ + "governance != 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [141846855438073018741198]" + ], + "after_preds": [ + "elem of _balances[...] is one of [141846855438073018741198]" + ] + }, + { + "before_preds": [ + "controller != 0" + ], + "after_preds": [ + "controller != 0" + ] + }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, + { + "before_preds": [ + "min one of [9500]" + ], + "after_preds": [ + "min one of [9500]" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "token == ori(token)" + ], + "after_preds": [ + "token == ori(token)" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, + { + "before_preds": [ + "controller == ori(controller)" + ], + "after_preds": [ + "controller == ori(controller)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-kept.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-kept.json new file mode 100644 index 0000000..c0d33c8 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/kept/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-kept.json @@ -0,0 +1,450 @@ +[ + { + "before_preds": [ + "ori(_bridges[ori(weth)]) == 0" + ], + "after_preds": [ + "ori(_bridges[ori(weth)]) == 0" + ] + }, + { + "before_preds": [ + "token0 != 0" + ], + "after_preds": [ + "token0 != 0" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "token1 != 0" + ], + "after_preds": [ + "token1 != 0" + ] + }, + { + "before_preds": [ + "ori(_bridges[weth]) == 0" + ], + "after_preds": [ + "ori(_bridges[weth]) == 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(pendingOwner) == 0" + ], + "after_preds": [ + "ori(pendingOwner) == 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_bridges[ori(weth)]) == ori(_bridges[weth])" + ], + "after_preds": [ + "ori(_bridges[ori(weth)]) == ori(_bridges[weth])" + ] + }, + { + "before_preds": [ + "token0 != token1" + ], + "after_preds": [ + "token0 != token1" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "_bridges[ori(weth)] == 0" + ], + "after_preds": [ + "_bridges[ori(weth)] == 0" + ] + }, + { + "before_preds": [ + "_bridges[weth] == 0" + ], + "after_preds": [ + "_bridges[weth] == 0" + ] + }, + { + "before_preds": [ + "pendingOwner == 0" + ], + "after_preds": [ + "pendingOwner == 0" + ] + }, + { + "before_preds": [ + "owner == ori(owner)" + ], + "after_preds": [ + "owner == ori(owner)" + ] + }, + { + "before_preds": [ + "_bridges[ori(weth)] == ori(_bridges[ori(weth)])" + ], + "after_preds": [ + "_bridges[ori(weth)] == ori(_bridges[ori(weth)])" + ] + }, + { + "before_preds": [ + "_bridges[ori(weth)] == _bridges[weth]" + ], + "after_preds": [ + "_bridges[ori(weth)] == _bridges[weth]" + ] + }, + { + "before_preds": [ + "_bridges[ori(weth)] == ori(_bridges[weth])" + ], + "after_preds": [ + "_bridges[ori(weth)] == ori(_bridges[weth])" + ] + }, + { + "before_preds": [ + "ori(_bridges[ori(weth)]) == _bridges[weth]" + ], + "after_preds": [ + "ori(_bridges[ori(weth)]) == _bridges[weth]" + ] + }, + { + "before_preds": [ + "_bridges[weth] == ori(_bridges[weth])" + ], + "after_preds": [ + "_bridges[weth] == ori(_bridges[weth])" + ] + }, + { + "before_preds": [ + "pendingOwner == ori(pendingOwner)" + ], + "after_preds": [ + "pendingOwner == ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "newOwner != 0" + ], + "after_preds": [ + "newOwner != 0" + ] + }, + { + "before_preds": [ + "renounce == false" + ], + "after_preds": [ + "renounce == false" + ] + }, + { + "before_preds": [ + "direct == true" + ], + "after_preds": [ + "direct == true" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(pendingOwner) == 0" + ], + "after_preds": [ + "ori(pendingOwner) == 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "newOwner != ori(owner)" + ], + "after_preds": [ + "newOwner != ori(owner)" + ] + }, + { + "before_preds": [ + "newOwner != ori(pendingOwner)" + ], + "after_preds": [ + "newOwner != ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "newOwner != msg.sender" + ], + "after_preds": [ + "newOwner != msg.sender" + ] + }, + { + "before_preds": [ + "ori(owner) != ori(pendingOwner)" + ], + "after_preds": [ + "ori(owner) != ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "ori(owner) == msg.sender" + ], + "after_preds": [ + "ori(owner) == msg.sender" + ] + }, + { + "before_preds": [ + "ori(pendingOwner) != msg.sender" + ], + "after_preds": [ + "ori(pendingOwner) != msg.sender" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "pendingOwner == 0" + ], + "after_preds": [ + "pendingOwner == 0" + ] + }, + { + "before_preds": [ + "newOwner == owner" + ], + "after_preds": [ + "newOwner == owner" + ] + }, + { + "before_preds": [ + "newOwner != pendingOwner" + ], + "after_preds": [ + "newOwner != pendingOwner" + ] + }, + { + "before_preds": [ + "owner != ori(owner)" + ], + "after_preds": [ + "owner != ori(owner)" + ] + }, + { + "before_preds": [ + "owner != pendingOwner" + ], + "after_preds": [ + "owner != pendingOwner" + ] + }, + { + "before_preds": [ + "owner != ori(pendingOwner)" + ], + "after_preds": [ + "owner != ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "owner != msg.sender" + ], + "after_preds": [ + "owner != msg.sender" + ] + }, + { + "before_preds": [ + "ori(owner) != pendingOwner" + ], + "after_preds": [ + "ori(owner) != pendingOwner" + ] + }, + { + "before_preds": [ + "pendingOwner == ori(pendingOwner)" + ], + "after_preds": [ + "pendingOwner == ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "pendingOwner != msg.sender" + ], + "after_preds": [ + "pendingOwner != msg.sender" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "ori(pendingOwner) == 0" + ], + "after_preds": [ + "ori(pendingOwner) == 0" + ] + }, + { + "before_preds": [ + "ori(owner) != ori(pendingOwner)" + ], + "after_preds": [ + "ori(owner) != ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "pendingOwner == 0" + ], + "after_preds": [ + "pendingOwner == 0" + ] + }, + { + "before_preds": [ + "owner != pendingOwner" + ], + "after_preds": [ + "owner != pendingOwner" + ] + }, + { + "before_preds": [ + "owner != ori(pendingOwner)" + ], + "after_preds": [ + "owner != ori(pendingOwner)" + ] + }, + { + "before_preds": [ + "ori(owner) != pendingOwner" + ], + "after_preds": [ + "ori(owner) != pendingOwner" + ] + }, + { + "before_preds": [ + "pendingOwner == ori(pendingOwner)" + ], + "after_preds": [ + "pendingOwner == ori(pendingOwner)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json new file mode 100644 index 0000000..e27e1de --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json @@ -0,0 +1,22 @@ +[ + { + "before_preds": [ + "e10 == ori(e10)", + "e10 >= ori(e10)", + "e10 <= ori(e10)" + ], + "after_preds": [ + "e10 == ori(e10)" + ] + }, + { + "before_preds": [ + "e10 == ori(e10)", + "e10 >= ori(e10)", + "e10 <= ori(e10)" + ], + "after_preds": [ + "e10 == ori(e10)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json new file mode 100644 index 0000000..3f1f0da --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json @@ -0,0 +1,1792 @@ +[ + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= ori(earnLowerlimit)", + "ori(Sum(_balances[...])) < ori(earnLowerlimit)", + "ori(Sum(_balances[...])) != ori(earnLowerlimit)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(earnLowerlimit)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) >= ori(_balances[msg.sender])", + "ori(earnLowerlimit) > ori(_balances[msg.sender])", + "ori(earnLowerlimit) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(earnLowerlimit) > ori(_balances[msg.sender])", + "ori(earnLowerlimit) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) >= ori(_totalSupply)", + "ori(earnLowerlimit) > ori(_totalSupply)", + "ori(earnLowerlimit) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(earnLowerlimit) > ori(_totalSupply)", + "ori(earnLowerlimit) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[msg.sender])", + "Sum(_balances[...]) > ori(_balances[msg.sender])", + "Sum(_balances[...]) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) > ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= _totalSupply", + "ori(Sum(_balances[...])) < _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= earnLowerlimit", + "ori(Sum(_balances[...])) < earnLowerlimit", + "ori(Sum(_balances[...])) != earnLowerlimit" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != earnLowerlimit" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) <= Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) < userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) != userDepoistTime[msg.sender]" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) < userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) != userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "fee3 == ori(fee3)", + "fee3 >= ori(fee3)", + "fee3 <= ori(fee3)" + ], + "after_preds": [ + "fee3 == ori(fee3)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= ori(_balances[msg.sender])", + "_balances[msg.sender] > ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= earnLowerlimit", + "ori(_balances[msg.sender]) < earnLowerlimit", + "ori(_balances[msg.sender]) != earnLowerlimit" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != earnLowerlimit" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) > ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) != ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) != ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "earnLowerlimit >= ori(_totalSupply)", + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)" + ], + "after_preds": [ + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) <= _earnLowerlimit", + "ori(earnLowerlimit) < _earnLowerlimit", + "ori(earnLowerlimit) != _earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) < _earnLowerlimit", + "ori(earnLowerlimit) != _earnLowerlimit" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(earnLowerlimit) < earnLowerlimit", + "ori(earnLowerlimit) != earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) < earnLowerlimit", + "ori(earnLowerlimit) != earnLowerlimit" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_earnLowerlimit == earnLowerlimit", + "_earnLowerlimit >= earnLowerlimit", + "_earnLowerlimit <= earnLowerlimit" + ], + "after_preds": [ + "_earnLowerlimit == earnLowerlimit" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee2)", + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee3)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee1)", + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)" + ] + }, + { + "before_preds": [ + "ori(fee2) >= ori(fee3)", + "ori(fee2) > ori(fee3)", + "ori(fee2) != ori(fee3)" + ], + "after_preds": [ + "ori(fee2) != ori(fee3)" + ] + }, + { + "before_preds": [ + "ori(fee2) <= ori(fee1)", + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)" + ], + "after_preds": [ + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)" + ] + }, + { + "before_preds": [ + "ori(fee3) <= ori(fee1)", + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" + ], + "after_preds": [ + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee3", + "ori(feeMax) > fee3", + "ori(feeMax) != fee3" + ], + "after_preds": [ + "ori(feeMax) > fee3", + "ori(feeMax) != fee3" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee2", + "ori(feeMax) > fee2", + "ori(feeMax) != fee2" + ], + "after_preds": [ + "ori(feeMax) > fee2", + "ori(feeMax) != fee2" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee1", + "ori(feeMax) > fee1", + "ori(feeMax) != fee1" + ], + "after_preds": [ + "ori(feeMax) > fee1", + "ori(feeMax) != fee1" + ] + }, + { + "before_preds": [ + "ori(fee2) >= fee3", + "ori(fee2) > fee3", + "ori(fee2) != fee3" + ], + "after_preds": [ + "ori(fee2) != fee3" + ] + }, + { + "before_preds": [ + "ori(fee2) <= fee1", + "ori(fee2) < fee1", + "ori(fee2) != fee1" + ], + "after_preds": [ + "ori(fee2) < fee1", + "ori(fee2) != fee1" + ] + }, + { + "before_preds": [ + "ori(fee2) <= feeMax", + "ori(fee2) < feeMax", + "ori(fee2) != feeMax" + ], + "after_preds": [ + "ori(fee2) != feeMax" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(fee3) <= fee2", + "ori(fee3) < fee2", + "ori(fee3) != fee2" + ], + "after_preds": [ + "ori(fee3) < fee2", + "ori(fee3) != fee2" + ] + }, + { + "before_preds": [ + "ori(fee3) <= fee1", + "ori(fee3) < fee1", + "ori(fee3) != fee1" + ], + "after_preds": [ + "ori(fee3) < fee1", + "ori(fee3) != fee1" + ] + }, + { + "before_preds": [ + "ori(fee3) <= feeMax", + "ori(fee3) < feeMax", + "ori(fee3) != feeMax" + ], + "after_preds": [ + "ori(fee3) != feeMax" + ] + }, + { + "before_preds": [ + "fee3 <= fee2", + "fee3 < fee2", + "fee3 != fee2" + ], + "after_preds": [ + "fee3 < fee2", + "fee3 != fee2" + ] + }, + { + "before_preds": [ + "fee3 <= fee1", + "fee3 < fee1", + "fee3 != fee1" + ], + "after_preds": [ + "fee3 < fee1", + "fee3 != fee1" + ] + }, + { + "before_preds": [ + "fee3 <= feeMax", + "fee3 < feeMax", + "fee3 != feeMax" + ], + "after_preds": [ + "fee3 != feeMax" + ] + }, + { + "before_preds": [ + "fee3 <= ori(fee1)", + "fee3 < ori(fee1)", + "fee3 != ori(fee1)" + ], + "after_preds": [ + "fee3 < ori(fee1)", + "fee3 != ori(fee1)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee2 <= fee1", + "fee2 < fee1", + "fee2 != fee1" + ], + "after_preds": [ + "fee2 < fee1", + "fee2 != fee1" + ] + }, + { + "before_preds": [ + "fee2 <= feeMax", + "fee2 < feeMax", + "fee2 != feeMax" + ], + "after_preds": [ + "fee2 != feeMax" + ] + }, + { + "before_preds": [ + "fee2 <= ori(fee1)", + "fee2 < ori(fee1)", + "fee2 != ori(fee1)" + ], + "after_preds": [ + "fee2 < ori(fee1)", + "fee2 != ori(fee1)" + ] + }, + { + "before_preds": [ + "fee1 <= feeMax", + "fee1 < feeMax", + "fee1 != feeMax" + ], + "after_preds": [ + "fee1 != feeMax" + ] + }, + { + "before_preds": [ + "fee1 >= ori(fee1)", + "fee1 > ori(fee1)", + "fee1 != ori(fee1)" + ], + "after_preds": [ + "fee1 != ori(fee1)" + ] + }, + { + "before_preds": [ + "feeMax >= ori(fee1)", + "feeMax > ori(fee1)", + "feeMax != ori(fee1)" + ], + "after_preds": [ + "feeMax > ori(fee1)", + "feeMax != ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "amount <= ori(Sum(_allowances[sender][...]))", + "amount < ori(Sum(_allowances[sender][...]))", + "amount != ori(Sum(_allowances[sender][...]))" + ], + "after_preds": [ + "amount < ori(Sum(_allowances[sender][...]))", + "amount != ori(Sum(_allowances[sender][...]))" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[sender])", + "ori(Sum(_balances[...])) > ori(_balances[sender])", + "ori(Sum(_balances[...])) != ori(_balances[sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[sender])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[sender]", + "Sum(_balances[...]) > _balances[sender]", + "Sum(_balances[...]) != _balances[sender]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[sender])", + "Sum(_balances[...]) > ori(_balances[sender])", + "Sum(_balances[...]) != ori(_balances[sender])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[sender])" + ] + }, + { + "before_preds": [ + "_balances[sender] <= ori(Sum(_balances[...]))", + "_balances[sender] < ori(Sum(_balances[...]))", + "_balances[sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[sender] < ori(Sum(_balances[...]))", + "_balances[sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[sender] <= _balances[recipient]", + "_balances[sender] < _balances[recipient]", + "_balances[sender] != _balances[recipient]" + ], + "after_preds": [ + "_balances[sender] < _balances[recipient]", + "_balances[sender] != _balances[recipient]" + ] + }, + { + "before_preds": [ + "_balances[sender] <= ori(_balances[sender])", + "_balances[sender] < ori(_balances[sender])", + "_balances[sender] != ori(_balances[sender])" + ], + "after_preds": [ + "_balances[sender] != ori(_balances[sender])" + ] + }, + { + "before_preds": [ + "amount <= Sum(_allowances[sender][...])", + "amount < Sum(_allowances[sender][...])", + "amount != Sum(_allowances[sender][...])" + ], + "after_preds": [ + "amount < Sum(_allowances[sender][...])", + "amount != Sum(_allowances[sender][...])" + ] + }, + { + "before_preds": [ + "Sum(_allowances[sender][...]) <= ori(Sum(_allowances[sender][...]))", + "Sum(_allowances[sender][...]) < ori(Sum(_allowances[sender][...]))", + "Sum(_allowances[sender][...]) != ori(Sum(_allowances[sender][...]))" + ], + "after_preds": [ + "Sum(_allowances[sender][...]) != ori(Sum(_allowances[sender][...]))" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) > ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))", + "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))", + "ori(userDepoistTime[msg.sender]) != ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))", + "ori(userDepoistTime[msg.sender]) != ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) < ori(_totalSupply)", + "ori(_balances[msg.sender]) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) != _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[msg.sender])", + "Sum(_balances[...]) > ori(_balances[msg.sender])", + "Sum(_balances[...]) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) > _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _totalSupply" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) <= Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])" + ] + }, + { + "before_preds": [ + "fee3 == ori(fee3)", + "fee3 >= ori(fee3)", + "fee3 <= ori(fee3)" + ], + "after_preds": [ + "fee3 == ori(fee3)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= _totalSupply", + "_balances[msg.sender] < _totalSupply", + "_balances[msg.sender] != _totalSupply" + ], + "after_preds": [ + "_balances[msg.sender] != _totalSupply" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_totalSupply)", + "_balances[msg.sender] < ori(_totalSupply)", + "_balances[msg.sender] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" + ] + }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) >= userDepoistTime[msg.sender]", + "Sum(userDepoistTime[...]) > userDepoistTime[msg.sender]", + "Sum(userDepoistTime[...]) != userDepoistTime[msg.sender]" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) != userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" + ], + "after_preds": [ + "fee1 == ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) >= userDepoistTime[msg.sender]", + "ori(Sum(userDepoistTime[...])) > userDepoistTime[msg.sender]", + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee2)", + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee3)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= ori(fee1)", + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)" + ], + "after_preds": [ + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)" + ] + }, + { + "before_preds": [ + "ori(fee2) >= ori(fee3)", + "ori(fee2) > ori(fee3)", + "ori(fee2) != ori(fee3)" + ], + "after_preds": [ + "ori(fee2) != ori(fee3)" + ] + }, + { + "before_preds": [ + "ori(fee2) <= ori(fee1)", + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)" + ], + "after_preds": [ + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(fee3) <= ori(fee1)", + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" + ], + "after_preds": [ + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee3", + "ori(feeMax) > fee3", + "ori(feeMax) != fee3" + ], + "after_preds": [ + "ori(feeMax) > fee3", + "ori(feeMax) != fee3" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee2", + "ori(feeMax) > fee2", + "ori(feeMax) != fee2" + ], + "after_preds": [ + "ori(feeMax) > fee2", + "ori(feeMax) != fee2" + ] + }, + { + "before_preds": [ + "ori(feeMax) >= fee1", + "ori(feeMax) > fee1", + "ori(feeMax) != fee1" + ], + "after_preds": [ + "ori(feeMax) > fee1", + "ori(feeMax) != fee1" + ] + }, + { + "before_preds": [ + "ori(fee2) >= fee3", + "ori(fee2) > fee3", + "ori(fee2) != fee3" + ], + "after_preds": [ + "ori(fee2) != fee3" + ] + }, + { + "before_preds": [ + "ori(fee2) <= fee1", + "ori(fee2) < fee1", + "ori(fee2) != fee1" + ], + "after_preds": [ + "ori(fee2) < fee1", + "ori(fee2) != fee1" + ] + }, + { + "before_preds": [ + "ori(fee2) <= feeMax", + "ori(fee2) < feeMax", + "ori(fee2) != feeMax" + ], + "after_preds": [ + "ori(fee2) != feeMax" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= earnLowerlimit", + "ori(Sum(_balances[...])) < earnLowerlimit", + "ori(Sum(_balances[...])) != earnLowerlimit" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != earnLowerlimit" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" + ], + "after_preds": [ + "depositWithdrawInterval == ori(depositWithdrawInterval)" + ] + }, + { + "before_preds": [ + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" + ], + "after_preds": [ + "min == ori(min)" + ] + }, + { + "before_preds": [ + "ori(fee3) <= fee2", + "ori(fee3) < fee2", + "ori(fee3) != fee2" + ], + "after_preds": [ + "ori(fee3) < fee2", + "ori(fee3) != fee2" + ] + }, + { + "before_preds": [ + "ori(fee3) <= fee1", + "ori(fee3) < fee1", + "ori(fee3) != fee1" + ], + "after_preds": [ + "ori(fee3) < fee1", + "ori(fee3) != fee1" + ] + }, + { + "before_preds": [ + "ori(fee3) <= feeMax", + "ori(fee3) < feeMax", + "ori(fee3) != feeMax" + ], + "after_preds": [ + "ori(fee3) != feeMax" + ] + }, + { + "before_preds": [ + "fee3 <= fee2", + "fee3 < fee2", + "fee3 != fee2" + ], + "after_preds": [ + "fee3 < fee2", + "fee3 != fee2" + ] + }, + { + "before_preds": [ + "fee3 <= fee1", + "fee3 < fee1", + "fee3 != fee1" + ], + "after_preds": [ + "fee3 < fee1", + "fee3 != fee1" + ] + }, + { + "before_preds": [ + "fee3 <= feeMax", + "fee3 < feeMax", + "fee3 != feeMax" + ], + "after_preds": [ + "fee3 != feeMax" + ] + }, + { + "before_preds": [ + "fee3 <= ori(fee1)", + "fee3 < ori(fee1)", + "fee3 != ori(fee1)" + ], + "after_preds": [ + "fee3 < ori(fee1)", + "fee3 != ori(fee1)" + ] + }, + { + "before_preds": [ + "fee2 <= fee1", + "fee2 < fee1", + "fee2 != fee1" + ], + "after_preds": [ + "fee2 < fee1", + "fee2 != fee1" + ] + }, + { + "before_preds": [ + "fee2 <= feeMax", + "fee2 < feeMax", + "fee2 != feeMax" + ], + "after_preds": [ + "fee2 != feeMax" + ] + }, + { + "before_preds": [ + "fee2 <= ori(fee1)", + "fee2 < ori(fee1)", + "fee2 != ori(fee1)" + ], + "after_preds": [ + "fee2 < ori(fee1)", + "fee2 != ori(fee1)" + ] + }, + { + "before_preds": [ + "fee1 <= feeMax", + "fee1 < feeMax", + "fee1 != feeMax" + ], + "after_preds": [ + "fee1 != feeMax" + ] + }, + { + "before_preds": [ + "earnLowerlimit >= ori(_totalSupply)", + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)" + ], + "after_preds": [ + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "feeMax >= ori(fee1)", + "feeMax > ori(fee1)", + "feeMax != ori(fee1)" + ], + "after_preds": [ + "feeMax > ori(fee1)", + "feeMax != ori(fee1)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json new file mode 100644 index 0000000..ffd3c32 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json @@ -0,0 +1,1156 @@ +[ + { + "before_preds": [ + "ori(_totalSupply) <= _totalSupply", + "ori(_totalSupply) < _totalSupply", + "ori(_totalSupply) != _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) < _totalSupply", + "ori(_totalSupply) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= _totalSupply", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" + ], + "after_preds": [ + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= Sum(_balances[...])", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "glbDebtShare == ori(glbDebtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "glbDebtShare <= ori(glbDebtShare)" + ], + "after_preds": [ + "glbDebtShare == ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "_totalSupply >= reservePool", + "_totalSupply > reservePool", + "_totalSupply != reservePool" + ], + "after_preds": [ + "_totalSupply != reservePool" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply >= _guardCounter", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" + ], + "after_preds": [ + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_guardCounter)", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" + ], + "after_preds": [ + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= Sum(_balances[...])", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" + ], + "after_preds": [ + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= _balances[msg.sender]", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) < Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) < Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= _guardCounter", + "_balances[msg.sender] > _guardCounter", + "_balances[msg.sender] != _guardCounter" + ], + "after_preds": [ + "_balances[msg.sender] != _guardCounter" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= ori(_guardCounter)", + "_balances[msg.sender] > ori(_guardCounter)", + "_balances[msg.sender] != ori(_guardCounter)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _guardCounter", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) != _guardCounter" + ], + "after_preds": [ + "Sum(_balances[...]) != _guardCounter" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_guardCounter)", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != ori(_guardCounter)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "nextPositionID == ori(nextPositionID)", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(nextPositionID)" + ], + "after_preds": [ + "nextPositionID == ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(_guardCounter)", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)" + ], + "after_preds": [ + "_guardCounter != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "lastAccrueTime == ori(lastAccrueTime)", + "lastAccrueTime >= ori(lastAccrueTime)", + "lastAccrueTime <= ori(lastAccrueTime)" + ], + "after_preds": [ + "lastAccrueTime == ori(lastAccrueTime)" + ] + }, + { + "before_preds": [ + "glbDebtShare == ori(glbDebtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "glbDebtShare <= ori(glbDebtShare)" + ], + "after_preds": [ + "glbDebtShare == ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "nextPositionID == ori(nextPositionID)", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(nextPositionID)" + ], + "after_preds": [ + "nextPositionID == ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "_guardCounter == ori(_guardCounter)", + "_guardCounter >= ori(_guardCounter)", + "_guardCounter <= ori(_guardCounter)" + ], + "after_preds": [ + "_guardCounter == ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(reservePool)", + "ori(glbDebtVal) > ori(reservePool)", + "ori(glbDebtVal) != ori(reservePool)" + ], + "after_preds": [ + "ori(glbDebtVal) != ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(_balances[msg.sender])", + "ori(glbDebtVal) > ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(glbDebtVal) > ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= ori(_guardCounter)", + "ori(glbDebtVal) > ori(_guardCounter)", + "ori(glbDebtVal) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(glbDebtVal) > ori(_guardCounter)", + "ori(glbDebtVal) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(reservePool)", + "ori(_totalSupply) > ori(reservePool)", + "ori(_totalSupply) != ori(reservePool)" + ], + "after_preds": [ + "ori(_totalSupply) != ori(reservePool)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_guardCounter)", + "ori(_totalSupply) > ori(_guardCounter)", + "ori(_totalSupply) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(_totalSupply) > ori(_guardCounter)", + "ori(_totalSupply) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= ori(Sum(_balances[...]))", + "ori(reservePool) < ori(Sum(_balances[...]))", + "ori(reservePool) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(reservePool) < ori(Sum(_balances[...]))", + "ori(reservePool) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(reservePool) >= ori(_guardCounter)", + "ori(reservePool) > ori(_guardCounter)", + "ori(reservePool) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(reservePool) > ori(_guardCounter)", + "ori(reservePool) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= ori(_guardCounter)", + "ori(_balances[msg.sender]) > ori(_guardCounter)", + "ori(_balances[msg.sender]) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_guardCounter)", + "ori(Sum(_balances[...])) > ori(_guardCounter)", + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= reservePool", + "ori(glbDebtVal) > reservePool", + "ori(glbDebtVal) != reservePool" + ], + "after_preds": [ + "ori(glbDebtVal) != reservePool" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= _balances[msg.sender]", + "ori(glbDebtVal) > _balances[msg.sender]", + "ori(glbDebtVal) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(glbDebtVal) > _balances[msg.sender]", + "ori(glbDebtVal) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) >= _guardCounter", + "ori(glbDebtVal) > _guardCounter", + "ori(glbDebtVal) != _guardCounter" + ], + "after_preds": [ + "ori(glbDebtVal) > _guardCounter", + "ori(glbDebtVal) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) <= glbDebtVal", + "ori(glbDebtVal) < glbDebtVal", + "ori(glbDebtVal) != glbDebtVal" + ], + "after_preds": [ + "ori(glbDebtVal) < glbDebtVal", + "ori(glbDebtVal) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) > _totalSupply", + "ori(_totalSupply) != _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) > _totalSupply", + "ori(_totalSupply) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= reservePool", + "ori(_totalSupply) > reservePool", + "ori(_totalSupply) != reservePool" + ], + "after_preds": [ + "ori(_totalSupply) != reservePool" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _guardCounter", + "ori(_totalSupply) > _guardCounter", + "ori(_totalSupply) != _guardCounter" + ], + "after_preds": [ + "ori(_totalSupply) > _guardCounter", + "ori(_totalSupply) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= _totalSupply", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" + ], + "after_preds": [ + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= reservePool", + "ori(reservePool) < reservePool", + "ori(reservePool) != reservePool" + ], + "after_preds": [ + "ori(reservePool) < reservePool", + "ori(reservePool) != reservePool" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= Sum(_balances[...])", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(reservePool) >= _guardCounter", + "ori(reservePool) > _guardCounter", + "ori(reservePool) != _guardCounter" + ], + "after_preds": [ + "ori(reservePool) > _guardCounter", + "ori(reservePool) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtVal", + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal" + ], + "after_preds": [ + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal" + ] + }, + { + "before_preds": [ + "lastAccrueTime >= ori(lastAccrueTime)", + "lastAccrueTime > ori(lastAccrueTime)", + "lastAccrueTime != ori(lastAccrueTime)" + ], + "after_preds": [ + "lastAccrueTime != ori(lastAccrueTime)" + ] + }, + { + "before_preds": [ + "glbDebtShare == ori(glbDebtShare)", + "glbDebtShare >= ori(glbDebtShare)", + "glbDebtShare <= ori(glbDebtShare)" + ], + "after_preds": [ + "glbDebtShare == ori(glbDebtShare)" + ] + }, + { + "before_preds": [ + "_totalSupply >= reservePool", + "_totalSupply > reservePool", + "_totalSupply != reservePool" + ], + "after_preds": [ + "_totalSupply != reservePool" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply >= _guardCounter", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" + ], + "after_preds": [ + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_guardCounter)", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" + ], + "after_preds": [ + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= ori(Sum(_balances[...]))", + "reservePool < ori(Sum(_balances[...]))", + "reservePool != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "reservePool < ori(Sum(_balances[...]))", + "reservePool != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "reservePool <= Sum(_balances[...])", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" + ], + "after_preds": [ + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "reservePool >= _guardCounter", + "reservePool > _guardCounter", + "reservePool != _guardCounter" + ], + "after_preds": [ + "reservePool > _guardCounter", + "reservePool != _guardCounter" + ] + }, + { + "before_preds": [ + "reservePool >= ori(_guardCounter)", + "reservePool > ori(_guardCounter)", + "reservePool != ori(_guardCounter)" + ], + "after_preds": [ + "reservePool > ori(_guardCounter)", + "reservePool != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= glbDebtVal", + "reservePool < glbDebtVal", + "reservePool != glbDebtVal" + ], + "after_preds": [ + "reservePool < glbDebtVal", + "reservePool != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _guardCounter", + "ori(_balances[msg.sender]) > _guardCounter", + "ori(_balances[msg.sender]) != _guardCounter" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != _guardCounter" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= glbDebtVal", + "ori(_balances[msg.sender]) < glbDebtVal", + "ori(_balances[msg.sender]) != glbDebtVal" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) > Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _guardCounter", + "ori(Sum(_balances[...])) > _guardCounter", + "ori(Sum(_balances[...])) != _guardCounter" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _guardCounter" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= glbDebtVal", + "_balances[msg.sender] < glbDebtVal", + "_balances[msg.sender] != glbDebtVal" + ], + "after_preds": [ + "_balances[msg.sender] != glbDebtVal" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _guardCounter", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) != _guardCounter" + ], + "after_preds": [ + "Sum(_balances[...]) != _guardCounter" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_guardCounter)", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != ori(_guardCounter)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "nextPositionID == ori(nextPositionID)", + "nextPositionID >= ori(nextPositionID)", + "nextPositionID <= ori(nextPositionID)" + ], + "after_preds": [ + "nextPositionID == ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(_guardCounter)", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)" + ], + "after_preds": [ + "_guardCounter != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "_guardCounter <= glbDebtVal", + "_guardCounter < glbDebtVal", + "_guardCounter != glbDebtVal" + ], + "after_preds": [ + "_guardCounter != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) <= glbDebtVal", + "ori(_guardCounter) < glbDebtVal", + "ori(_guardCounter) != glbDebtVal" + ], + "after_preds": [ + "ori(_guardCounter) != glbDebtVal" + ] + }, + { + "before_preds": [ + "id <= ori(nextPositionID)", + "id < ori(nextPositionID)", + "id != ori(nextPositionID)" + ], + "after_preds": [ + "id != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "id <= ori(_guardCounter)", + "id < ori(_guardCounter)", + "id != ori(_guardCounter)" + ], + "after_preds": [ + "id < ori(_guardCounter)", + "id != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) <= ori(_guardCounter)", + "ori(nextPositionID) < ori(_guardCounter)", + "ori(nextPositionID) != ori(_guardCounter)" + ], + "after_preds": [ + "ori(nextPositionID) < ori(_guardCounter)", + "ori(nextPositionID) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtShare", + "ori(reservePool) < glbDebtShare", + "ori(reservePool) != glbDebtShare" + ], + "after_preds": [ + "ori(reservePool) < glbDebtShare", + "ori(reservePool) != glbDebtShare" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= glbDebtVal", + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal" + ], + "after_preds": [ + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal" + ] + }, + { + "before_preds": [ + "id <= glbDebtShare", + "id < glbDebtShare", + "id != glbDebtShare" + ], + "after_preds": [ + "id < glbDebtShare", + "id != glbDebtShare" + ] + }, + { + "before_preds": [ + "id <= nextPositionID", + "id < nextPositionID", + "id != nextPositionID" + ], + "after_preds": [ + "id != nextPositionID" + ] + }, + { + "before_preds": [ + "id <= _guardCounter", + "id < _guardCounter", + "id != _guardCounter" + ], + "after_preds": [ + "id < _guardCounter", + "id != _guardCounter" + ] + }, + { + "before_preds": [ + "id <= glbDebtVal", + "id < glbDebtVal", + "id != glbDebtVal" + ], + "after_preds": [ + "id < glbDebtVal", + "id != glbDebtVal" + ] + }, + { + "before_preds": [ + "glbDebtShare >= reservePool", + "glbDebtShare > reservePool", + "glbDebtShare != reservePool" + ], + "after_preds": [ + "glbDebtShare != reservePool" + ] + }, + { + "before_preds": [ + "glbDebtShare >= nextPositionID", + "glbDebtShare > nextPositionID", + "glbDebtShare != nextPositionID" + ], + "after_preds": [ + "glbDebtShare != nextPositionID" + ] + }, + { + "before_preds": [ + "glbDebtShare >= _guardCounter", + "glbDebtShare > _guardCounter", + "glbDebtShare != _guardCounter" + ], + "after_preds": [ + "glbDebtShare > _guardCounter", + "glbDebtShare != _guardCounter" + ] + }, + { + "before_preds": [ + "glbDebtShare >= ori(nextPositionID)", + "glbDebtShare > ori(nextPositionID)", + "glbDebtShare != ori(nextPositionID)" + ], + "after_preds": [ + "glbDebtShare != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "glbDebtShare >= ori(_guardCounter)", + "glbDebtShare > ori(_guardCounter)", + "glbDebtShare != ori(_guardCounter)" + ], + "after_preds": [ + "glbDebtShare > ori(_guardCounter)", + "glbDebtShare != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= glbDebtVal", + "reservePool < glbDebtVal", + "reservePool != glbDebtVal" + ], + "after_preds": [ + "reservePool < glbDebtVal", + "reservePool != glbDebtVal" + ] + }, + { + "before_preds": [ + "nextPositionID <= _guardCounter", + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter" + ], + "after_preds": [ + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter" + ] + }, + { + "before_preds": [ + "nextPositionID <= glbDebtVal", + "nextPositionID < glbDebtVal", + "nextPositionID != glbDebtVal" + ], + "after_preds": [ + "nextPositionID < glbDebtVal", + "nextPositionID != glbDebtVal" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(nextPositionID)", + "_guardCounter > ori(nextPositionID)", + "_guardCounter != ori(nextPositionID)" + ], + "after_preds": [ + "_guardCounter != ori(nextPositionID)" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(_guardCounter)", + "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)" + ], + "after_preds": [ + "_guardCounter != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "_guardCounter <= glbDebtVal", + "_guardCounter < glbDebtVal", + "_guardCounter != glbDebtVal" + ], + "after_preds": [ + "_guardCounter != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(nextPositionID) <= glbDebtVal", + "ori(nextPositionID) < glbDebtVal", + "ori(nextPositionID) != glbDebtVal" + ], + "after_preds": [ + "ori(nextPositionID) < glbDebtVal", + "ori(nextPositionID) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(_guardCounter) <= glbDebtVal", + "ori(_guardCounter) < glbDebtVal", + "ori(_guardCounter) != glbDebtVal" + ], + "after_preds": [ + "ori(_guardCounter) != glbDebtVal" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= _totalSupply", + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" + ], + "after_preds": [ + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(reservePool) <= Sum(_balances[...])", + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply >= reservePool", + "_totalSupply > reservePool", + "_totalSupply != reservePool" + ], + "after_preds": [ + "_totalSupply != reservePool" + ] + }, + { + "before_preds": [ + "_totalSupply >= _guardCounter", + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" + ], + "after_preds": [ + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_guardCounter)", + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" + ], + "after_preds": [ + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "reservePool <= Sum(_balances[...])", + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" + ], + "after_preds": [ + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _guardCounter", + "Sum(_balances[...]) > _guardCounter", + "Sum(_balances[...]) != _guardCounter" + ], + "after_preds": [ + "Sum(_balances[...]) != _guardCounter" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_guardCounter)", + "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != ori(_guardCounter)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_guardCounter)" + ] + }, + { + "before_preds": [ + "nextPositionID <= _guardCounter", + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter" + ], + "after_preds": [ + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter" + ] + }, + { + "before_preds": [ + "_guardCounter >= ori(nextPositionID)", + "_guardCounter > ori(nextPositionID)", + "_guardCounter != ori(nextPositionID)" + ], + "after_preds": [ + "_guardCounter != ori(nextPositionID)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json new file mode 100644 index 0000000..a5b82eb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json @@ -0,0 +1,72 @@ +[ + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + }, + { + "before_preds": [ + "split == ori(split)", + "split >= ori(split)", + "split <= ori(split)" + ], + "after_preds": [ + "split == ori(split)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json new file mode 100644 index 0000000..6852d59 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json @@ -0,0 +1,42 @@ +[ + { + "before_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)" + ], + "after_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)" + ], + "after_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)" + ], + "after_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)" + ] + }, + { + "before_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime >= ori(_newMPCEffectiveTime)", + "_newMPCEffectiveTime <= ori(_newMPCEffectiveTime)" + ], + "after_preds": [ + "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json new file mode 100644 index 0000000..67e16fd --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json @@ -0,0 +1,245 @@ +[ + { + "before_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) == ori(_allowedFragments[msg.sender][spender])", + "ori(Sum(_allowedFragments[msg.sender][...])) >= ori(_allowedFragments[msg.sender][spender])", + "ori(Sum(_allowedFragments[msg.sender][...])) <= ori(_allowedFragments[msg.sender][spender])" + ], + "after_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) == ori(_allowedFragments[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) <= value", + "ori(Sum(_allowedFragments[msg.sender][...])) < value", + "ori(Sum(_allowedFragments[msg.sender][...])) != value" + ], + "after_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) != value" + ] + }, + { + "before_preds": [ + "ori(_allowedFragments[msg.sender][spender]) <= value", + "ori(_allowedFragments[msg.sender][spender]) < value", + "ori(_allowedFragments[msg.sender][spender]) != value" + ], + "after_preds": [ + "ori(_allowedFragments[msg.sender][spender]) != value" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] >= ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] > ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] != ori(Sum(_allowedFragments[msg.sender][...]))" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] > ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] != ori(Sum(_allowedFragments[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] >= ori(_allowedFragments[msg.sender][spender])", + "_allowedFragments[msg.sender][spender] > ori(_allowedFragments[msg.sender][spender])", + "_allowedFragments[msg.sender][spender] != ori(_allowedFragments[msg.sender][spender])" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] != ori(_allowedFragments[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] == value", + "_allowedFragments[msg.sender][spender] >= value", + "_allowedFragments[msg.sender][spender] <= value" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] == value" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) <= Sum(_allowedFragments[msg.sender][...])", + "ori(Sum(_allowedFragments[msg.sender][...])) < Sum(_allowedFragments[msg.sender][...])", + "ori(Sum(_allowedFragments[msg.sender][...])) != Sum(_allowedFragments[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(_allowedFragments[msg.sender][...])) < Sum(_allowedFragments[msg.sender][...])", + "ori(Sum(_allowedFragments[msg.sender][...])) != Sum(_allowedFragments[msg.sender][...])" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_allowedFragments[msg.sender][...]) >= ori(_allowedFragments[msg.sender][spender])", + "Sum(_allowedFragments[msg.sender][...]) > ori(_allowedFragments[msg.sender][spender])", + "Sum(_allowedFragments[msg.sender][...]) != ori(_allowedFragments[msg.sender][spender])" + ], + "after_preds": [ + "Sum(_allowedFragments[msg.sender][...]) != ori(_allowedFragments[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "Sum(_allowedFragments[msg.sender][...]) == value", + "Sum(_allowedFragments[msg.sender][...]) >= value", + "Sum(_allowedFragments[msg.sender][...]) <= value" + ], + "after_preds": [ + "Sum(_allowedFragments[msg.sender][...]) == value" + ] + }, + { + "before_preds": [ + "_gonsPerFragment == ori(_gonsPerFragment)", + "_gonsPerFragment >= ori(_gonsPerFragment)", + "_gonsPerFragment <= ori(_gonsPerFragment)" + ], + "after_preds": [ + "_gonsPerFragment == ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) <= ori(Sum(_gonBalances[...]))" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_gonsPerFragment == ori(_gonsPerFragment)", + "_gonsPerFragment >= ori(_gonsPerFragment)", + "_gonsPerFragment <= ori(_gonsPerFragment)" + ], + "after_preds": [ + "_gonsPerFragment == ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) <= ori(Sum(_gonBalances[...]))" + ], + "after_preds": [ + "Sum(_gonBalances[...]) == ori(Sum(_gonBalances[...]))" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_gonsPerFragment >= ori(_gonsPerFragment)", + "_gonsPerFragment > ori(_gonsPerFragment)", + "_gonsPerFragment != ori(_gonsPerFragment)" + ], + "after_preds": [ + "_gonsPerFragment != ori(_gonsPerFragment)" + ] + }, + { + "before_preds": [ + "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) > ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) != ori(Sum(_gonBalances[...]))" + ], + "after_preds": [ + "Sum(_gonBalances[...]) != ori(Sum(_gonBalances[...]))" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply <= _gonsPerFragment", + "_totalSupply < _gonsPerFragment", + "_totalSupply != _gonsPerFragment" + ], + "after_preds": [ + "_totalSupply < _gonsPerFragment", + "_totalSupply != _gonsPerFragment" + ] + }, + { + "before_preds": [ + "_gonsPerFragment >= ori(_totalSupply)", + "_gonsPerFragment > ori(_totalSupply)", + "_gonsPerFragment != ori(_totalSupply)" + ], + "after_preds": [ + "_gonsPerFragment != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json new file mode 100644 index 0000000..5d31f91 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json @@ -0,0 +1,439 @@ +[ + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= _balances[msg.sender]", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= _balances[msg.sender]", + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_balances[msg.sender])", + "_totalSupply < ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply < ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= Sum(_balances[...])", + "ori(_balances[msg.sender]) > Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _balances[msg.sender]", + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) <= _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) == _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[msg.sender])", + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) != _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/reader.py b/use-cases/dynamically-mined-invariant-denoising/reader.py index 73b242a..6489fb7 100644 --- a/use-cases/dynamically-mined-invariant-denoising/reader.py +++ b/use-cases/dynamically-mined-invariant-denoising/reader.py @@ -12,7 +12,7 @@ import os -comparator = cp.Comparator() +comparator = cp_light.ComparatorRulesOnly() output_folder = "" def parse_daikon_list(predicates: list): diff --git a/use-cases/dynamically-mined-invariant-denoising/sok.json b/use-cases/dynamically-mined-invariant-denoising/sok.json index 9e7b020..e69de29 100644 --- a/use-cases/dynamically-mined-invariant-denoising/sok.json +++ b/use-cases/dynamically-mined-invariant-denoising/sok.json @@ -1,82 +0,0 @@ -[ - { - "predicates_before_reduction": 1491, - "predicates_after_reduction": 922, - "reduction_ratio": 0.6183769282360831, - "total_parsing_time": 0.00718235969543457, - "total_reduction_time": 113.1889967918396, - "contract": "./invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json" - }, - { - "predicates_before_reduction": 88, - "predicates_after_reduction": 70, - "reduction_ratio": 0.7954545454545454, - "total_parsing_time": 0.0009465217590332031, - "total_reduction_time": 3.193233013153076, - "contract": "./invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json" - }, - { - "predicates_before_reduction": 45, - "predicates_after_reduction": 33, - "reduction_ratio": 0.7333333333333333, - "total_parsing_time": 0.0005981922149658203, - "total_reduction_time": 2.453716278076172, - "contract": "./invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json" - }, - { - "predicates_before_reduction": 708, - "predicates_after_reduction": 430, - "reduction_ratio": 0.6073446327683616, - "total_parsing_time": 0.004693269729614258, - "total_reduction_time": 71.69141364097595, - "contract": "./invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json" - }, - { - "predicates_before_reduction": 141, - "predicates_after_reduction": 130, - "reduction_ratio": 0.9219858156028369, - "total_parsing_time": 0.0011169910430908203, - "total_reduction_time": 6.443445444107056, - "contract": "./invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json" - }, - { - "predicates_before_reduction": 39, - "predicates_after_reduction": 39, - "reduction_ratio": 1.0, - "total_parsing_time": 0.0003592967987060547, - "total_reduction_time": 2.2742459774017334, - "contract": "./invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json" - }, - { - "predicates_before_reduction": 330, - "predicates_after_reduction": 274, - "reduction_ratio": 0.8303030303030303, - "total_parsing_time": 0.002045869827270508, - "total_reduction_time": 17.68912625312805, - "contract": "./invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json" - }, - { - "predicates_before_reduction": 299, - "predicates_after_reduction": 231, - "reduction_ratio": 0.7725752508361204, - "total_parsing_time": 0.0018007755279541016, - "total_reduction_time": 22.529717206954956, - "contract": "./invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json" - }, - { - "predicates_before_reduction": 468, - "predicates_after_reduction": 293, - "reduction_ratio": 0.6260683760683761, - "total_parsing_time": 0.0034198760986328125, - "total_reduction_time": 36.94824767112732, - "contract": "./invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json" - }, - { - "predicates_before_reduction": 56, - "predicates_after_reduction": 56, - "reduction_ratio": 1.0, - "total_parsing_time": 0.00047969818115234375, - "total_reduction_time": 3.274705648422241, - "contract": "./invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json" - } -] \ No newline at end of file From 0ecca2a9bde8355c95158e6c6e7f3d2bf8c9d2fb Mon Sep 17 00:00:00 2001 From: Mojtaba Eshghie Date: Sat, 16 Aug 2025 11:01:30 +0200 Subject: [PATCH 4/7] Feature #67: Debugged the previous pipeline problem (which did not store the experiment runtime information, fixed it, and ran it once more to include the information. --- .../analysis_light.ipynb | 525 ++++++++++++++++++ .../output_light/erc20.json | 144 +++++ .../output_light/sok.json | 80 +++ .../reader.py | 105 ++-- 4 files changed, 802 insertions(+), 52 deletions(-) create mode 100644 use-cases/dynamically-mined-invariant-denoising/analysis_light.ipynb diff --git a/use-cases/dynamically-mined-invariant-denoising/analysis_light.ipynb b/use-cases/dynamically-mined-invariant-denoising/analysis_light.ipynb new file mode 100644 index 0000000..06095e2 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/analysis_light.ipynb @@ -0,0 +1,525 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/mojtabaeshghie/opt/anaconda3/lib/python3.8/site-packages/pandas/core/computation/expressions.py:20: UserWarning: Pandas requires version '2.7.3' or newer of 'numexpr' (version '2.7.1' currently installed).\n", + " from pandas.core.computation.check import NUMEXPR_INSTALLED\n" + ] + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "def label_selector(file_path:str):\n", + " if file_path == 'erc20':\n", + " return \"ERC20\"\n", + " else:\n", + " return \"SoK\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: 'erc20'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 68\u001b[0m\n\u001b[1;32m 64\u001b[0m plt\u001b[38;5;241m.\u001b[39mclf()\n\u001b[1;32m 67\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;18m__name__\u001b[39m \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m__main__\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m---> 68\u001b[0m \u001b[43mRQ1\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43merc20\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;66;03m# print(\"_______________________________________________________________\")\u001b[39;00m\n\u001b[1;32m 70\u001b[0m RQ1(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msok\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "Cell \u001b[0;32mIn[3], line 4\u001b[0m, in \u001b[0;36mRQ1\u001b[0;34m(file_path)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mRQ1\u001b[39m(file_path):\n\u001b[1;32m 2\u001b[0m \n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# Load data from JSON file\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mfile_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m 5\u001b[0m data \u001b[38;5;241m=\u001b[39m json\u001b[38;5;241m.\u001b[39mload(f)\n\u001b[1;32m 7\u001b[0m \u001b[38;5;66;03m# Flatten nested JSON structure\u001b[39;00m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/IPython/core/interactiveshell.py:282\u001b[0m, in \u001b[0;36m_modified_open\u001b[0;34m(file, *args, **kwargs)\u001b[0m\n\u001b[1;32m 275\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m file \u001b[38;5;129;01min\u001b[39;00m {\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m}:\n\u001b[1;32m 276\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 277\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIPython won\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt let you open fd=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfile\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m by default \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 278\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mas it is likely to crash IPython. If you know what you are doing, \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 279\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124myou can use builtins\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m open.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 280\u001b[0m )\n\u001b[0;32m--> 282\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mio_open\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'erc20'" + ] + } + ], + "source": [ + "def RQ1(file_path):\n", + "\n", + " # Load data from JSON file\n", + " with open(file_path, 'r') as f:\n", + " data = json.load(f)\n", + "\n", + " # Flatten nested JSON structure\n", + " flat_data = []\n", + " for item in data:\n", + " if isinstance(item, list): # Handle list of lists\n", + " flat_data.extend(item)\n", + " else:\n", + " flat_data.append(item)\n", + "\n", + " # Convert to DataFrame\n", + " df = pd.DataFrame(flat_data)\n", + "\n", + " # Calculate total and average times\n", + " total_parsing_time = df['total_parsing_time'].sum()\n", + " total_reduction_time = df['total_reduction_time'].sum()\n", + " average_parsing_time = df['total_parsing_time'].mean()\n", + " average_reduction_time = df['total_reduction_time'].mean()\n", + " average_reduction_ratio = round(df['reduction_ratio'].mean(),2)\n", + " predicates_removed = df[\"predicates_before_reduction\"].sum() - df[\"predicates_after_reduction\"].sum()\n", + " average_predicates_removed = predicates_removed / len(df)\n", + "\n", + " # Print calculated values\n", + " print(f\"Total Parsing Time: {total_parsing_time}\")\n", + " print(f\"Total Reduction Time: {total_reduction_time}\")\n", + " print(f\"Average Parsing Time: {average_parsing_time}\")\n", + " print(f\"Average Reduction Time: {average_reduction_time}\")\n", + " print(f\"Average Reduction Ratio: {average_reduction_ratio}\")\n", + " print(f\"Average predicates removed: {average_predicates_removed}\")\n", + " print(f\"Total predicates removed: {predicates_removed}\")\n", + "\n", + " # Generate histogram for reduction ratio with custom ticks and no grid\n", + " num_bins = 4\n", + " counts, bins, patches = plt.hist(df['reduction_ratio'], bins=num_bins, edgecolor='black', alpha=0.8, align='mid')\n", + "\n", + " # Set the x-ticks to be at the center of each bin\n", + " bin_centers = 0.5 * (bins[1:] + bins[:-1])\n", + " plt.xticks(bin_centers, [f\"{center:.2f}\" for center in bin_centers])\n", + "\n", + "\n", + "\n", + " # Set the x-ticks to be at the center of each bin, with 0.65 instead of 0.66\n", + " bin_centers = 0.5 * (bins[1:] + bins[:-1])\n", + " custom_ticks = [f\"{center:.2f}\" for center in bin_centers]\n", + " if file_path == 'sok':\n", + " custom_ticks[0] = '0.65' # Change the first tick to 0.65\n", + "\n", + " plt.xticks(bin_centers, custom_ticks)\n", + "\n", + " # Set labels and title\n", + " plt.xlabel('Reduction Ratio', fontsize=14)\n", + " plt.ylabel('Frequency' ,fontsize=14)\n", + " # plt.title(f'Histogram of Reduction Ratios {label_selector(file_path)} for Smart Contract', fontsize=16)\n", + "\n", + " # Turn off the grid\n", + " plt.grid(False)\n", + "\n", + " # Save and show the plot\n", + " plt.savefig(f'reduction_ratio_histogram_{file_path}.pdf', format='pdf', dpi=300)\n", + " plt.clf()\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " RQ1(\"erc20\")\n", + " # print(\"_______________________________________________________________\")\n", + " RQ1(\"sok\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "ename": "JSONDecodeError", + "evalue": "Expecting value: line 1 column 1 (char 0)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[4], line 8\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# Load data from JSON files\u001b[39;00m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124merc20.json\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[0;32m----> 8\u001b[0m erc20_data \u001b[38;5;241m=\u001b[39m \u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msok.json\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m 10\u001b[0m sok_data \u001b[38;5;241m=\u001b[39m json\u001b[38;5;241m.\u001b[39mload(f)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/__init__.py:293\u001b[0m, in \u001b[0;36mload\u001b[0;34m(fp, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload\u001b[39m(fp, \u001b[38;5;241m*\u001b[39m, \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, object_hook\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, parse_float\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 275\u001b[0m parse_int\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, parse_constant\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, object_pairs_hook\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw):\n\u001b[1;32m 276\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Deserialize ``fp`` (a ``.read()``-supporting file-like object containing\u001b[39;00m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;124;03m a JSON document) to a Python object.\u001b[39;00m\n\u001b[1;32m 278\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;124;03m kwarg; otherwise ``JSONDecoder`` is used.\u001b[39;00m\n\u001b[1;32m 292\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 293\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 294\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobject_hook\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobject_hook\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 295\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_float\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_float\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparse_int\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_int\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 296\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_constant\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_constant\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobject_pairs_hook\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobject_pairs_hook\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/__init__.py:357\u001b[0m, in \u001b[0;36mloads\u001b[0;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 352\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m kw[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mencoding\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 355\u001b[0m parse_int \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m parse_float \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 356\u001b[0m parse_constant \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_pairs_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kw):\n\u001b[0;32m--> 357\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_default_decoder\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 359\u001b[0m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;241m=\u001b[39m JSONDecoder\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/decoder.py:337\u001b[0m, in \u001b[0;36mJSONDecoder.decode\u001b[0;34m(self, s, _w)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecode\u001b[39m(\u001b[38;5;28mself\u001b[39m, s, _w\u001b[38;5;241m=\u001b[39mWHITESPACE\u001b[38;5;241m.\u001b[39mmatch):\n\u001b[1;32m 333\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Return the Python representation of ``s`` (a ``str`` instance\u001b[39;00m\n\u001b[1;32m 334\u001b[0m \u001b[38;5;124;03m containing a JSON document).\u001b[39;00m\n\u001b[1;32m 335\u001b[0m \n\u001b[1;32m 336\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 337\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraw_decode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43midx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_w\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mend\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 338\u001b[0m end \u001b[38;5;241m=\u001b[39m _w(s, end)\u001b[38;5;241m.\u001b[39mend()\n\u001b[1;32m 339\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m end \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(s):\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/decoder.py:355\u001b[0m, in \u001b[0;36mJSONDecoder.raw_decode\u001b[0;34m(self, s, idx)\u001b[0m\n\u001b[1;32m 353\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscan_once(s, idx)\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m--> 355\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m JSONDecodeError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpecting value\u001b[39m\u001b[38;5;124m\"\u001b[39m, s, err\u001b[38;5;241m.\u001b[39mvalue) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28mNone\u001b[39m\n\u001b[1;32m 356\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj, end\n", + "\u001b[0;31mJSONDecodeError\u001b[0m: Expecting value: line 1 column 1 (char 0)" + ] + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load data from JSON files\n", + "with open('erc20.json', 'r') as f:\n", + " erc20_data = json.load(f)\n", + "with open('sok.json', 'r') as f:\n", + " sok_data = json.load(f)\n", + "\n", + "# Convert JSON data into DataFrames and add a column to indicate the dataset source\n", + "erc20_df = pd.DataFrame(erc20_data)\n", + "erc20_df['Dataset'] = 'ERC20'\n", + "sok_df = pd.DataFrame(sok_data)\n", + "sok_df['Dataset'] = 'SoK'\n", + "\n", + "# Combine the two DataFrames into one\n", + "df = pd.concat([erc20_df, sok_df], ignore_index=True)\n", + "\n", + "# Set up the plot aesthetics\n", + "sns.set(style=\"whitegrid\")\n", + "plt.figure(figsize=(8, 6))\n", + "\n", + "# Create a boxplot to show distribution and a swarmplot for individual points\n", + "ax = sns.boxplot(x='Dataset', y='reduction_ratio', data=df, width=0.5, palette=\"Set2\")\n", + "sns.swarmplot(x='Dataset', y='reduction_ratio', data=df, color='0.25', size=8)\n", + "\n", + "# Set y-axis limits and labels\n", + "plt.ylim(0.5, 1.05)\n", + "plt.ylabel(\"Reduction Ratio (After / Before)\")\n", + "plt.title(\"Comparison of Invariant Reduction Ratios\")\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig(\"combined_reduction_ratios.png\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAJICAYAAADxUwLTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACQmklEQVR4nOzdd3wT9R8G8OfSpnsPuqDQAqWMtswCsspG9hAFlSVIZQgyZAqCgAMQkaGAgICAyFAUUdnjJxssu2VTKC3deyVN7vdHSSC0haRNm5Q+79erL+3d5fJJSNt77rsEURRFEBERERERaUFi6AKIiIiIiKj8YIAgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFEVAFUlDVDK8rrNCS+x0TEAEFUAleuXMHHH3+MkJAQBAYGokOHDpg1axYePnxo6NL0Zvny5ahVq5ahy9DJ6dOn0blzZ9SrVw8jRowo9BhjfF3t2rXDtGnT9H7eW7duYeDAgS885syZM6hVq1aBr3r16qF169aYMmUK4uPj9VLPoEGDMGjQIL2cSyUtLQ1TpkzB+fPnS/V5Xmb9+vWYPHkygMLfU39/fzRs2BADBgzA4cOHy7Q2fdDms1TWVD/Lz3/Vr18fnTt3xjfffIO8vDxDl1kmoqKiUKtWLfz6668AgLt376Jdu3ZIS0szcGX0qjE1dAFE5dWWLVvw+eefo2nTppg0aRIqVaqEyMhIrFu3Dvv378fGjRvh7+9v6DJLrH///mjVqpWhy9DJwoULoVQqsWbNGjg7Oxu6HK2tWLECNjY2ej/vP//8g7CwMK2OnT17NurWrav+PjMzExcuXMCaNWtw79497NixQ+/16UN4eDh+//139OvXT73t008/LdMa7ty5g9WrV+OPP/7Q2P7seyqKIlJTU7F+/XqMHj0aq1evRps2bcq0zpLQ5bNU1n755ReN75OTk/Hnn39i1apVyMvLw8cff2ygygzH19cX7du3x/z587Fw4UJDl0OvEAYIomK4cOECFixYgHfeeQczZ85Ub2/atCk6dOiA3r17Y8aMGeq7QOWZu7s73N3dDV2GTlJSUtCkSRO89tprhi5FJ3Xq1DF0CahRowbq16+vsa1FixaQyWT44YcfcPv2bdSoUcMwxemorOtctGgRunfvDjc3twJ1PP+eNm7cGCEhIdi0aVO5ChDG7Pn3GADatm2LqKgo/PrrrxUyQADAyJEjERISgiFDhmjcHCAqCXZhIiqGdevWwdbWFhMnTiywz8nJCdOmTUP79u2RlZUFAFAoFNiyZQt69OiBwMBAhISEYPHixcjNzVU/btq0aRg+fDh++eUXdOjQAYGBgRgwYADu3buHI0eOoEePHggKCkL//v0RHh6u8bhBgwZh586daNu2LRo0aIAhQ4YgIiJCo65z585h+PDhaNKkCerVq4d27dph+fLlUCqVAJ42ff/444/o0qULgoKCsGvXrgJdfR48eIAPPvgATZs2RVBQEN566y0cO3ZM47muXLmC4cOHo2nTpmjYsCE++OAD3Lp1S71f1bXj1KlTeO+99xAUFIQWLVpg0aJFUCgUL3zv79+/j3HjxqFFixaoX78+Bg0ahAsXLmi8hkePHmH37t2oVasWzpw588Lzqfz666+oU6cOLl26hLfeegsBAQFo27Yt1q1bpz6mc+fOGDduXIHH9urVC6NGjQKQ/2+9Zs0adO/eHYGBgahfvz4GDBiA06dPq49fvnw5OnbsiBUrViA4OBgtW7ZEampqgS5MUVFRmDJlClq2bIm6deuiefPmmDJlCpKTk9XHtGvXDsuWLcNXX32F1157DYGBgRg+fDju37+vfq4VK1YAAGrVqoXly5dr9X48z87ODgAgCIJ6282bNxEaGoqGDRuiYcOGGDNmTIHue9HR0Rg7diwaNWqEFi1a4Mcffyxw7sLqKqyL2bFjxzBgwADUr18fLVu2xOzZs5GWloYzZ85g8ODBAIDBgweruy0934UpNzcXK1euRJcuXRAQEIBOnTphzZo16p8B1WNmzpyJNWvWICQkBAEBARgwYAAuX778wvfn5s2bOHr0KLp37/7C41RsbGzg4+OD6Oho9baUlBTMnj0br732GgICAvDmm2/i1KlTBd6rFStWoG/fvggMDFT/2969exdjx45FcHAwmjRpgtDQUNy5c0fjtS9cuBBt2rRBvXr10KNHD/z1118a5y7uZykpKQlz585F27ZtUa9ePQQHB2PMmDGIiorSOP+6devQvn179e+2w4cPF/gZ1eYzpSsbGxuNzy0AHDx4EH379kVAQABatGiB+fPnq39fq15rly5dcODAAXTv3h0BAQHo1asXwsLCcPHiRfTv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IiIiIio5g3dhio2NxaeffoozZ84UWDBl+/btkEql+Oyzz2Bqaorq1asjMjISa9asQb9+/SCTybB+/XpMnjwZISEhAIBvvvkGrVq1wv79+9G9e/eyf0FERERERK8wg7dAXLt2DVKpFH/88UeB1UTPnz+P4OBgjRUomzVrhvv37yMhIQERERHIzMzUWE3Xzs4OderUwblz58rsNRARERERVRQGb4Fo164d2rVrV+i+x48fF5g3uVKlSgCAmJgY9cqKz04LpzpGtU9XYWFhEEXxhYv2EBERERG9SuRyOQRBQIMGDV56rMEDxIvk5OTAzMxMY5u5uTkAIDc3V72qa2HHpKamFus5RVGEKIocQ0FEREREVAijDhAWFhYFLuRzc3MB5K9cqVpRUSaTaayumJubC0tLy2I9p1QqhSiKqFGjRjGrJiIiIiIqX27fvg1BELQ61qgDhLu7O+Li4jS2qb53c3NDXl6eepu3t7fGMbVq1Sr28wqCACsrq2I/noiIiIioPNE2PABGMIj6RZo0aYILFy5AoVCot50+fRo+Pj5wdnaGv78/bGxscObMGfX+tLQ0XL9+HU2aNDFEyURERERErzSjDhD9+vVDRkYGZs6cidu3b+PXX3/Fhg0b1CtXmpmZ4d1338XixYtx6NAhREREYMKECXB3d0enTp0MXD0RERER0avHqLswOTs7Y+3atViwYAH69OkDV1dXTJkyBX369FEfM27cOOTl5eGTTz5BTk4OmjRpgnXr1nEWJSIiIiKiUiCIoigaughjcuXKFQBAQECAgSshIiIiIiobulwDG3UXJiIiIiIiMi4MEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtlYsAkZeXh2+//RZt27ZFgwYN8M477+DixYvq/eHh4Xj33XdRv359tGvXDps2bTJcsUREREREr7ByESC+//577NixA/PmzcPu3bvh4+ODESNGIC4uDsnJyRg2bBi8vb2xa9cujBkzBosXL8auXbsMXTYRERER0SvH1NAFaOPgwYPo3r07WrZsCQCYNm0aduzYgYsXL+LevXuQSqX47LPPYGpqiurVqyMyMhJr1qxBv379DFw5EREREdGrpVy0QDg7O+PIkSOIioqCQqHAL7/8AjMzM/j7++P8+fMIDg6GqenTLNSsWTPcv38fCQkJBqyaiIiIiOjVUy5aIGbOnInx48ejffv2MDExgUQiwfLly+Ht7Y3Hjx/Dz89P4/hKlSoBAGJiYuDi4mKIkomIiIiIXknlIkDcvn0btra2WLlyJdzc3LBjxw5MnjwZmzdvRk5ODszMzDSONzc3BwDk5uYW6/lEUURWVlaJ6yYiIiIiKg9EUYQgCFoda/QBIiYmBpMmTcKGDRvQuHFjAEBAQABu376N5cuXw8LCAjKZTOMxquBgZWVV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FSB+//13fP3114iPj4cgCNixYweWL18OqVSKr7/+GmZmZvquk4iIiIiIjIDOszD99ddfmDp1Kpo1a4YlS5ZAqVQCADp27Ihjx47hu+++03uRRERERERkHHRugVi1ahUGDBiAOXPmQKFQqLf369cPSUlJ2L59Oz766CN91khEREREREZC5xaIe/fuoWPHjoXuCwoKQmxsbImLIiIiIiIi46RzgHB2dsadO3cK3Xfnzh04OzuXuCgiIiIiIjJOOgeIrl27YtmyZfjnn38gk8kAAIIg4OrVq/juu+/QpUsXvRdJRERERETGQecxEB999BFu3ryJjz76CBJJfv4YNGgQsrKy0LhxY4wfP17vRRIRERERkXHQOUCYmZlh7dq1OHHiBE6fPo2UlBTY2toiODgYbdq0gSAIpVEnEREREREZAZ0DxMGDBxESEoIWLVqgRYsWpVETEREREREZKZ0DxNixY+Hg4ICuXbuiV69eCAoKKo26iIiIiIjICOk8iPq3335Dv379cPToUQwYMACdO3fGypUr8fDhw9Koj4iIiIiIjIggiqJY3AdfuHABe/fuxb59+5CUlIT69eujV69eGDBggD5rLFNXrlwBAAQEBBi4EiIiIiKisqHLNXCJAoRKRkYGli5dip9//hlKpRLh4eElPaXBMEAQERERUUWjyzWwzmMgVGQyGY4cOYK9e/fi2LFjUCqVaNu2LXr16lXcUxIRERERkZHTOUAcO3YMe/fuxaFDh5CZmYn69etj2rRp6Nq1K+zt7UujRiIiIiIiMhI6B4jQ0FB4e3tj2LBh6NmzJ7y9vUujLiIiIiIiMkI6B4iff/4ZDRo0KI1aiIiIiIjIyOkcIBo0aACZTIZdu3bh7NmzSEtLg6OjIxo3bozevXvDwsKiNOokIiIiIiIjoHOASEtLw+DBgxEREQFPT0+4urri3r17+PPPP7FlyxZs3boVtra2pVErEREREREZmM4LyX399dd4/PgxNm/ejMOHD+OXX37B4cOHsXnzZiQmJuLbb78tjTqJiIiIiMgI6BwgDh06hI8++giNGzfW2N64cWOMGzcO+/fv11txRERERERkXHQOEJmZmahSpUqh+6pUqYKUlJSS1kREREREREZK5wDh6+uLI0eOFLrvyJEjqFq1aomLIiIiIiIi46TzIOrhw4dj0qRJUCgU6NatG1xcXJCQkIA///wT27dvx6effloadRIRERERkRHQOUB07doV9+/fx6pVq7Bt2zYAgCiKMDMzw+jRo/HWW2/pvUgiIiIiIjIOgiiKYnEemJaWhrCwMKSlpcHe3h5BQUGwt7fXd31l7sqVKwCAgIAAA1dCRERERFQ2dLkG1rkFQsXOzg5t2rQp7sOJiIiIiKgc0jlAREdH47PPPsN///2H9PT0AvsFQcD169f1UhwRERERERkXnQPEzJkzcfHiRfTr1w8ODg6lUBIRERERERkrnQPExYsXMX/+fHTr1q006iEiIiIiIiOm8zoQrq6usLS0LI1aiIiIiIjIyOkcIEJDQ7F8+XI8evSoNOohIiIiIiIjpnMXppCQEKxduxYdOnSAo6NjgdYIQRBw8OBBvRVIRERERETGQ+cAMX36dDx8+BAtW7aEi4tLadRERERERERGSucAcfbsWXz66afo379/adRDRERERERGTOcxEHZ2dvDw8CiNWoiIiIiIyMjpHCAGDhyINWvWICMjozTqISIiIiIiI6ZzF6aYmBhcu3YNLVu2hK+vL2xsbDT2C4KAjRs36q1AIiIiIiIyHjoHiHv37qFOnTrq70VR1Nj//PdERERERPTq0DlA/PTTT6VRBxERERERlQM6BwiV1NRUnD9/HnFxcejcuTNSUlLg4+MDQRD0WR8RERERERmRYgWI77//HqtXr0ZOTg4EQUBgYCCWLl2K5ORkrF+/HnZ2dvquk4iIiIiIjIDOszBt3rwZy5cvx7Bhw7B9+3b1mId3330XDx8+xLfffqv3IomIiIiIyDjoHCB++uknjBw5EuPHj0fdunXV29u0aYOPPvoIhw8f1muBRERERERkPHQOENHR0QgODi50n6+vLxISEkpcFBERERERGSedA4SHhwfCwsIK3Xf16lWuUk1ERERE9ArTOUC88cYbWLVqFdatW4f79+8DALKysrBv3z6sXr0affr00XeNAIDdu3eja9euCAgIQLdu3fD333+r90VFRSE0NBQNGzZEy5YtsXTpUigUilKpg4iIiIioItN5Fqb3338fUVFRWLx4MRYvXgwAGDx4MACgR48eCA0N1W+FAH7//XfMnDkTM2bMQKtWrbB3715MnDgR7u7uqFevHoYPH45q1aph27ZtePDgAWbOnAmJRIJx48bpvRYiIiIioopMEIu5dPT9+/dx+vRppKSkwNbWFk2aNIGfn5++64Moimjfvj06d+6MqVOnqrcPHz4cwcHB8PLywvTp0/Hvv//C3t4eAPDLL79g4cKFOHXqFMzMzHR6vitXrgAAAgIC9PciiIiIiIiMmC7XwMVeSK5atWqoVq2axjZRFLF161a88847xT1tAffu3cOjR4/Qo0cPje3r1q0DAMyZMwd169ZVhwcAaNasGTIyMhAeHo6goCC91UJEREREVNFpPQbi+PHjmDBhAiZOnIhjx44V2H/+/Hn06dMH8+fP12uB9+7dA5A/zmL48OFo3rw5+vfvr54u9vHjx3B3d9d4TKVKlQAAMTExeq2FiIiIiKii06oF4o8//sCUKVMglUphZmaGv//+G8uWLUPHjh2RkpKC+fPnY+/evTAxMcGwYcP0WmBGRgYAYOrUqRg7diwmT56Mffv2YfTo0fjxxx+Rk5NTYOVrc3NzAEBubm6xnlMURWRlZZWscCIiIiKickIURQiCoNWxWgWIjRs3IigoCOvWrYOZmRmmT5+OlStXombNmhg2bBhiYmLQqlUrzJgxAz4+PiUq/nlSqRRA/pgH1QxPtWvXxvXr1/Hjjz/CwsICMplM4zGq4GBlZVWs55TL5QgPDy9B1URERERE5Yu2Y4e1ChD379/HvHnzYGNjAwAYO3YsunbtitGjR0Mmk+Hbb79F586di1/tC7i5uQFAgQHaNWrUwNGjRxEcHIybN29q7IuLi9N4rK6kUilq1KhRrMcSEREREZU3t2/f1vpYrQJEVlaWxgJxXl5eEEURpqam+OOPP+Ds7Kx7lVqqW7curK2tcenSJTRu3Fi9/ebNm/D29kaTJk2we/duZGRkqAPO6dOnYW1tDX9//2I9pyAIxW69ICIiIiIqb7TtvgRoOYhaFEWYmJiov1f9/4QJE0o1PACAhYUFRowYgZUrV+LPP//EgwcP8P333+PEiRMYNmwYOnToAFdXV3z00UeIiIjAwYMHsWTJErz33ns6T+FKREREREQvVuxpXIGnsx2VttGjR8PS0hLffPMNYmNjUb16dSxfvhxNmzYFAKxduxZz587Fm2++CXt7e7z99tsYPXp0mdRGRERERFSRlChA6NLUUVLDhg0rcoanqlWrYv369WVWCxERERFRRaV1gJgzZ456jIFq8epZs2bB2tpa4zhBELBx40Y9lkhERERERMZCqwDRpEkTAE+DQ1HbCvueiIiIiIheHVoFiJ9++qm06yAiIiIionJAq1mYiIiIiIiIAAYIIiIiIiLSAQMEERERERFpjQGCiIiIiIi0xgBBRERERERaK9ZCcg8fPoRMJkP16tWRnp6OpUuX4tGjR+jSpQt69+6t5xKJiIiIiMhY6NwCcezYMbz++uvYuXMnAGD27NnYtm0bYmNjMX36dOzYsUPvRRIRERERkXHQOUB8//33aNmyJcaMGYO0tDQcOHAAI0eOxG+//YaRI0di06ZNpVEnEREREREZAZ0DREREBIYMGQIbGxscP34cCoUCnTt3BgC0aNECkZGRei+SiIiIiIiMg84BwtzcHHl5eQCAf//9F87OzvD39wcAJCQkwM7OTr8VEhERERGR0dB5EHXDhg2xfv16pKWlYd++fejTpw8A4OrVq1ixYgUaNmyo9yKJiIiIiMg46NwCMWPGDDx+/BiTJk2Cl5cXRo0aBQAIDQ1Fbm4uJk+erPciiYiIiIjIOOjcAlGlShX89ddfSExMhIuLi3r7ypUrUadOHZiZmem1QCIiIiIiMh46t0AMHjwYd+/e1QgPAFC/fn3cvXsXPXr00FtxRERERERkXLRqgTh//jxEUQQAnD17FufOnUNSUlKB444cOYKHDx/qt0IiIiIiIjIaWgWIHTt24Pfff4cgCBAEAXPnzi1wjCpgdO/eXb8VEhERERGR0dAqQHzyySfo168fRFHEkCFDMHv2bNSoUUPjGIlEAjs7O9SsWbNUCiUiIiIiIsPTKkDY2toiODgYALBp0ybUqVMHNjY2pVoYEREREREZH51nYQoODkZ6ejoOHDiArKwsddelZ/Xu3VsftRERERERkZHROUD873//w7hx45CTk1NoeBAEgQGCiIiIiOgVpXOA+Prrr+Hr64vp06fDzc0NEonOM8ESEREREVE5pXOAuHPnDr777js0bty4NOohIiIiIiIjpnPzgaenJzIyMkqjFiIiIiIiMnI6B4jQ0FCsXLkSUVFRpVEPEREREREZMZ27MO3ZswexsbHo2LEjnJycYGFhobFfEAQcPHhQbwUSEREREZHx0DlAuLu7w93dvTRqISIiIiIiI6dzgPjiiy9Kow4iIiIiIioHdA4QKomJiZDJZOq1IJRKJbKzs3H+/HkMHDhQbwUSEREREZHx0DlAREREYPLkybhz506h+wVBYIAgIiIiInpF6RwgFi5ciNTUVEydOhVHjhyBmZkZ2rZti+PHj+P48ePYtGlTadRJRERERERGQOdpXC9duoTx48dj6NCh6Nq1K7Kzs/H2229j1apV6NChA3766afSqJOIiIiIiIyAzgFCJpOhWrVqAIBq1aohIiJCva9v3764ePGivmojIiIiIiIjU6yVqB8+fAggP0BkZGSoF5UzMzNDamqqfiskIiIiIiKjoXOA6NSpE77++mvs27cPbm5u8PX1xdKlS3Hjxg2sX78eVapUKY06iYiIiIjICOgcIMaOHYuGDRti586dAIDp06fjwIED6N27N06fPo0PP/xQ70USEREREZFxEETVQg46ksvlkEqlAIAHDx7g2rVrqFu3Lry9vfVaYFm7cuUKACAgIMDAlRARERERlQ1droGLvZCcKjwAgLe3d7kPDkRERERE9HJaBYj27dtj5cqV8Pf3R7t27SAIQpHHCoKAgwcP6q1AIiIiIiIyHloFiODgYFhbW6v//0UBgoiIiIiIXl1aBYgvvvhC/f+9evVCgwYNYGFhUWpFERERERGRcdJ5FqYPP/wQ+/fvL41aiIiIiIjIyOkcIOzs7Nj6QERERERUQek8C1NoaCjmz5+Pe/fuwd/fH1ZWVgWOadKkiV6KIyIiIiIi46LzOhD+/v6aJ3hmQLUoihAEAeHh4fqpzgC4DgQRERERVTSlug7Epk2bdK+IiIiIiIheCToHiODg4NKog4iIiIiIyoFirUR9+fJlnDlzBjKZDKoeUKIoIisrCxcuXMD27dv1WiQRERERERkHnQPEli1bMH/+fBQ2dEIikaBly5Z6KYyIiIiIiIyPztO4bt68Ga1bt8aZM2fw3nvv4c0338TFixfx7bffwtzcHD179iyNOomIiIiIyAjoHCCioqLw9ttvw97eHvXq1cOFCxdgYWGBzp07Y+TIkRxkTURERET0CtM5QEilUvVCclWrVkVkZCTkcjkAoFGjRrh//75eCyQiIiIiIuOhc4CoXbs2jhw5AgDw8fGBUqnEpUuXAACPHz/Wb3VERERERGRUdB5EPWzYMIwdOxZpaWn4/PPP0b59e0yZMgWdOnXCnj170KhRo9Kok4iIiIiIjIDOLRAdOnTAqlWrUL16dQDAZ599hmrVqmHbtm3w9fXF7Nmz9V4kEREREREZB0EsbD7WF1AoFDAxMSmtegxOl2W8iYiIiIheBbpcA+vcAtGyZUvMnz9f/SRERERERFRx6Bwgunfvjn379uHNN99Ely5dsGrVKjx69Kg0aiMiIiIiIiOjcxcmABBFEadPn8bevXtx4MABpKeno2HDhujVqxe6dOkCW1vb0qi1TLALExERERFVNLpcAxcrQDxLLpfjxIkT2Lt3L/7++2+Ympri4sWLJTmlQTFAEOV7/PgxDhw4gMePH8Pd3R0dO3aEu7u7ocsiIiKiUqDLNbDO07g+Ky8vD//++y/+/vtvHD9+HADQvHnzkpySiIzAoUOHsHz5ciiVSvW2X3/9FWPHjkX79u0NWBkREREZms4B4vnuS6mpqQgMDMS4cePQtWtXODo6lkadRKQFVYOiIAjFPsfjx48LhAcgfwa2FStWoG7dukW2RLDVgoiI6NWnc4Bo1aoVEhMT4enpibfffhu9evVCtWrVSqE0osJlZmYiOjoaMTExyM3NNXQ5RkMURfz1118AgK5duxY7RJw6dapAeFBRKBRYs2ZNoS2N4eHhOHToEJ7tFblr1y60a9cOtWvXLlYt+mZubg5PT094eHjA2tra0OUQERGVSzqPgZg9ezZ69uyJxo0bl1ZNBsUxEMZBqVQiMTER0dHR6q+YmBhER0cjJSXF0OW90nJycpCXl1fkflNTU1hYWGhsUyqVyMrKKvIxVlZWkEh0nvStVDk4OKjDhKenp/rL2dnZ6GolIiIqbaU6BuKzzz7TvSKiIuTm5qqDwbNBISYmBjKZrMjHSazMYWpnDYmZtAyrNW6iUkRuVBwAwLxyJQiS4rVAKOISkZeQUuR+qYMNLCo5a2zLjEsEXhAgRCuzAo8xBGWuHHlpmVBm5yIlJQUpKSm4fv26xjFmZmYFQoUqaJiZmRmociIiIuOhc4DIycnB999/jyNHjiA7O7tAVwdBEHDw4EG9FUivhrS0NERHR+PRo0caYSEhIQFFNoJJBJjaWsPU3homdvn/NbWzhqmdDSRmJRr//0pSyvMQuy3/Z8+hZSAk0uK9RzZpmbj/8z+AspB/F4kAt87NIbXT7P6Tc+AM8ILQYeJgC8c2DYpVT2lQyvKQl5aBvLRM5KVmQvHkv3npmZDJZIiMjERkZKTGYwRBgIuLi0ao8PLygqenJ+zs7Az0SoiIiMqezlcYCxYswM6dOxEcHIzatWuzqZ/URFFEUlISHj16pP6Kjo5GVFQUMjIyinycYCbNDwf2NvkB4UlQMLGxhPAKfr7kaZlIDb8HeVompHbWsK/tU+CC3JCkdtZwa9MIsccuaIYIiQC3kMaF1vqy+o3p9QGAxMwUZi4OMHNx0NguKpVQZGSrg0Ve6tOQIcrkiI+PR3x8PC5duqTxOFtbW3h5eakDReXKleHl5QVHR8cSDWgnIiIyRjoHiP3792PChAkYOXJkadRD5YAqKERFRSEqKgqPHj1S/zc7O7vIx5lYW+SHBPv8VgRVy4LEwqzCXGSlRdxH7NELwDOtLskXb8CtTSPY+VczXGHPsfOvBktPV62Djn1tHyRfvFFkq4V9bZ9Srlg/BInkSSuXNVD56XZRFKHMkSEvLRMKjWCRAUVmDtLT0xEREYGIiAiN81laWsLLy0sdKKpUqYLKlSszWBARUbmmc4CQy+UIDAwsjVrICGVmZuLhw4d4+PAhHjx4gKioKDx8+LDoAbOCABNbK0gdVK0JzwSFYnapeVXI0zILhAcAgFJE7LELsPR0Nao79VI7a7g0raf1sbq2WpQngiDAxNIcJpbmgJuTxj6lPE/dBUqemqFuuVCkZyE7Oxu3b9/G7du3NR5jZWWlDhPe3t6oUqUKvL29YWVlVZYvi4iIqFh0vqJr2bIljh8/jmbNmpVGPWQgoigiLi4OkZGRuH//Ph48eIAHDx4gISGh8Ac8GxQcbGDqYJvfsmBrDcHk1et2pA/JF28WDA8qShGp4fe0vmA3lBd1v9K11eJVIZGaQuJsD6mzPSyf2S4qlMhLz0ReSkZ+i0VKBuQp+cEiKysLN27cwI0bNzTO5eLiAm9vb1StWlX9ValSJbZWEBGRUdE5QHTt2hWffvopkpKSEBQUBEtLywLH9O7dWx+1USkRRRGPHz/GvXv31F/3798vslXBxNoiPyA42EDqaJv//3YMCrpIi7iP1Gt3XniMPC2z2OcX8xRIOXlF/X3KyStwbBEIwdSk2Od8njbdr3RptXjVCSYSSB1sIXWw1dguKpTPBIr0/P8mp0OZlYOEhAQkJCTgv//+Ux9vZWWFatWqwcfHBz4+PvD19YWbmxtDBRERGYzO60D4+/u/+ISCgPDw8BIVZUiv4joQGRkZuH37Nm7duoXbt2/jzp07hYcFiQBTB1tIHW0hdbKDqWP+xY/EnFOlloQ8LRP3t/5TdOvDE44N/Yt98Z18/CJyIh9rbLOo6g7H1vWLdb7nvfA1SARUG9jllW9pKG3KXHl+oEhOhzwpDfLkdOSlpBc6rsTa2hrVq1dH9erVUbNmTdSsWZML4xERUYmU6joQhw4d0r0iKlOque1VgzqjoqIKHiSRQOpkC6mzPaROdvmBwcHmlZz1yNBSw++9NDwAKPZAY1GhQM6T9R+elRMVB1GhgGBS8laIF76GctL9ythJzKUwd3OC+TNjLFStFfKkNMgT0yBPSoU8KR2ZmZm4fPkyLl++rD62cuXK8Pf3R+3atVGnTh3Y29sb4mUQEVEFoHOA8PLyKo06qATkcjkiIiJw8eJFXLlypdDAYGJrBTNXB0hdHGDmYg9TR1uGhTKiTdck80pOxb6Dr8jOBRTKQnYoocjOhalNyQfmvuw1lKT7FRVNMJGoAz5q5G8TlUrkJadDlpAKeUIKZPEpUKRnqWdFU63DU6VKFdSrVw/169eHv78/pFK2JBIRkX5oFSDOnTun00mbNGlSrGJIezKZDP/99x/OnDmDS5cuIScnR2O/qaMtzN2cYObmBKmrQ/7sMWQQ2gQDq8qVyqCS4pGnZSIvvehVpgHjW+fhVSZIJPkth872QC1vAPkhUh6fAllsEnJjk5CXnK6ePe3vv/+GhYUF6tevj+DgYDRs2JArahMRUYloFSAGDRqk1YA9URTL/RgIY/fgwQMcOHAAJ0+e1FhzQWJpDnMvV5h7usDc3QkSc14gGAv72j5IDrtRdBcgofjdl0pbYQOnCyhH6zy8qkwszWHi7QYLbzcAgDJHhtzYJOQ+ikdudAJysnNw+vRpnD59GpaWlnjttdfQqVMnVKlSxcCVExFReaRVgNi0aVNp10Ev8ejRI/z8888as7OYWFvAopoHLLzdIXW246wsRkpqZw23kEaFX4gLgFvbJkZ5B7/IdSue9Yqs8/CqkViYwbKqOyyrukMURcgTU5HzIBY592OQnZmNQ4cO4dChQ2jUqBEGDhwIT09PQ5dMRETliFYBIjg4uLTroBfYt28fNm/eDIVCAQiARRU3WPl5w8zdiaGhnFCtkZB88SayouMBiLD0dIVT/VpGe/H9ssHfFm7OcO8QbLT1Uz5BEGDm4gAzFwfYNvCD7HESsm4+QM6DWFy4cAEXL17E4MGD0bFjR0OXSkRE5UTFXhq4HDh27Bg2btwIADD3coVdo1owtbcxcFVUHFI7a1Rq3aDMnk+pVCIp7AYUOTJI7axhVcUNWQ9jtV7k7WUDoxUyGRLOXK0wC8a9CgRBgLmHM8w9nJGXmoG08xHIjU7Ajz/+CHNzc7Ru3drQJRIRUTnAAGHkfv31VwCAdT1f2NavyRYH0opcLkdubi5w9enidcn/RWgc8/wicM97WSCQJ6dDnpyu1bnI+Jja28CxXSOkh91E5rV7+O233xggiIhIK5zH08ipFnwzc3FgeCCtKJXK/PDw0gNFxB49X2RLg31tH0Ci5WdOKSL22AVO51rOqLo3AUBmJv/tiIhIO1oFCK0uRqhUvPbaawCAlH8vIevmQ4iFrEpLpNK2bVvd7iKLQNy/FwvdJbWzhlubRjqFiNTwe9o/NxmUqBSRefMBUk7kL0an+l1DRET0MloFiHbt2iEsLAwAsGLFCsTGxpZqUfTUwIEDERAQADFPgdQz15Dw5wlk3Y6CqFAYujQyQt26ddP5TnJWZEyRLQd2/tVQbWAXODb0h02NKpA62r7wXBn3otkKYeTEPAWybkch4c9/kXbmOsQ8BQIDAzFw4EBDl0ZEROWEVgEiPT0dcXFxAICVK1cyQJQhCwsLTJ06FYMGDYKVlRXyUjOQeuoqYnccQcqpq8iNSYSoLGQVYqqQ9u7dC2tr3Qczv6jlQGpnDZem9eDRsSlsfF68Er08OQ33f/4HaRH3da6BSo+oVCI3JgEpp64iducRpJ66irzUTFhbW2PQoEGYMmUKzM252CQREWlHEMUXTfKe75133sGlS5dQqVIlREdHw9XVtciVTAVBwMGDB/VeaFm5cuUKACAgIMDAlRSUmZmJQ4cO4eDBg0hISFBvF8ykMPd0gUVlV5i5O3PVaSMlT8tEavg9rWdB0lZeRhbifzuu/l6pVKrHzmjLpkYVeHRs+tLj5GmZuP/zP8DLutJJBFQb2IUzMxmQIjsXsphE5DxZTE6UydX7XFxc0LFjR7Rv3x5WVlYGrJKIiIyFLtfAWs3CtGTJEmzYsAEpKSnYvXs36tSpAycnp5JVWQz37t1D3759MWvWLPTt2xcAEB4ejgULFuDq1atwcnLC0KFDMXjw4DKvrSxYW1ujZ8+e6N69O8LDw3HixAlcuHAB6enpyLkfg5z7MQAAU0dbmLk5wdzNCWaVHCGx4KrUhlbYis6lNXORRCKBubm5TmOXtL3QV42LiD124cUh4sl4CJem9bSugUpGkSODLC4JsthkyGKTkPdkhiwVW1tbNG7cGC1atIC/vz8kEs6hQURExaNVgHBzc8PUqVMBAGfOnMGECRPg7+9fqoU9Ty6XY/LkyRp3VpOTkzFs2DC0a9cOc+fOxcWLFzF37lxYW1ujX79+ZVpfWZJIJKhbty7q1q0LhUKBmzdv4tKlS7h06RIiIyORl5yOvOR0ZEVEAgBM7Kxg5uoIM1cHSF0cYGpvA0HbgbFUYkWu6Pxk5iJLT1e936mXSqUwMTGB1NcDihwZTMzNkHrtTuEHS4T8GZe0pFoU79Ff/6qncS0Mx0KUHlEpIi81A/KEFMjiUyCLT4YirWCrU9WqVREUFIT69eujZs2aMDExMUC1RET0qtF5HYjDhw8DANLS0nDx4kWkp6fD0dERgYGBsLEpvQXOli9fXuD827dvh1QqxWeffQZTU1NUr14dkZGRWLNmzSsdIJ5lYmKC2rVro3bt2hgwYADS0tJw7do1hIeHIzw8HI8ePYIiLQvZaVnIvvMIACCYmkDqbAeps33+l5MdTGytOE1sKXnhis6leKdeIpHAqUEtmNrkd1GxqORYsOVAIsAtpLHOAUZqZw0bHy8kJ0e88BgqOVEUoUjPgjwpDfLE1CdfaRDzCk6kULlyZfXvgzp16sDOzs4AFRMR0auuWAvJrVmzBt999x1yc3OhGkJhZmaG0NBQjBkzRq8FAsC5c+fwyy+/YPfu3QgJCVFvP3/+PIKDg2Fq+vRlNGvWDKtXr0ZCQgJcXFz0Xouxs7OzQ/PmzdG8eXMA+QPgb926hZs3b+L27du4e/cucnJynnRzSFY/TpCaQupkB6mTHUyd7CB1soWpnTUEdnMosZfdiS+rO/WqlgN9jcOwr+2D5Is3Cu/KpGOrBuUTlUrkpWVCnpSGvKQ0yJPSIU9KgyjPK3CspaUlfH19Ub16ddSqVQs1a9Ys1Zs4REREKjoHiF27dmHJkiV444030LNnT7i4uCA+Ph6///47VqxYAU9PT/Tp00dvBaalpWHKlCn45JNP4OHhobHv8ePH8PPz09hWqVIlAEBMTEyFDBDPs7W1RcOGDdGwYUMA+QNsHz16hDt37uDu3bu4e/cuHj58CLlcDllsEmSxSU8fbCKB1MEWpo62kD75MnW0hcRMaqBXUz697AK9LO/Uq2ZU0sbLBn0XOR6imK0aFY1SJkfek9W85cnpyEtOgzw5AyhkVjWpVIoqVaqoA0P16tXh6enJcQxERGQQOgeIDRs2YODAgfj000/V23x9fdG0aVNYWFhg06ZNeg0Qc+bMQYMGDdCjR48C+3JycgrMBqWairAki9+JoqjzLDblibOzM5ydnREcHAwAyMvLQ0xMDCIjI/HgwQM8ePAADx8+RG5urrrLRPYzjzextlSHCtV/TWysOK6iCOXxTr22g7713arxKhKVIhQZWU9CwtOwoMjMKfR4c3NzeHt7o0qVKvD29kbVqlXh4eGh0dIK5P/+IyIi0hdRFLXuzq5zgIiMjMS0adMK3de+fXvs2rVL11MWaffu3Th//jz27NlT6H4LCwvIZDKNbargUJKpCeVyOcLDw4v9+PJKFSwaNGgAURSRkpKC+Ph4xMXFIT4+HvHx8UhPT4ciMxuKzGzkRsU9ffCzrRUONupgITHnDFClcaf+2dYBEwszKJVKvd2N1nXQty6tGq86Za7saVBIyXjy33RAUfhaLba2tnB1dYWrqysqVaoEV1dXODg4aPwCz8jIwK1bt8rqJRCRHiUnJ+O///5DSkoKHBwc0LBhQzg6Ohq6LKIiFbVMw/N0DhBubm6Ijo4udF9UVJRe++Du2rULiYmJGuMeAODTTz/FX3/9BXd3d/UCdyqq793c3Ir9vFKpFDVq1Cj2419lGRkZePToER4+fIioqChERUUhOjoaMpms0NYKiZW5RjcoU0c7mNpZVbixFfq8U19Y6wCQf+daKn2me5mJpFhrghhq0Hd5ohqr8LRFIT8oKLMKb/k0MzODp6cnKleujCpVqqBy5crw8vLimAWiV9ixY8ewevVqKJ/plnjq1CmMHDkSbdq0MWBlRIW7ffu21sfqHCDatWuHb7/9FrVq1UJgYKB6+6VLl7B8+XK0a9dO11MWafHixQWa6Tt16oRx48ahZ8+e+P3337Ft2zYoFAr19ISnT5+Gj48PnJ2di/28giBwcaUiWFlZoVKlSmjQoIF6m1KpRGxsLCIjI/Hw4UN1N6j4+Hgos3KRm5WL3OinC99BIoGpg83TcRVOdvmtFa/42Ap93KkvsnUA+a1vJiYm6pYIi8qVIBRj2k5jGfRtLJQyeX5ISEp7Ol4hpfCxCgDg6uoKb29vdTekqlWrws3NjeMViCoA1cQysbGxBcIDACgUCqxZswYNGjSAu7u7IUokKpIus3HqHCA+/PBDnDx5Em+99Ra8vLzg4uKChIQEPHr0CNWrV8ekSZN0PWWRimpFcHZ2hpubG/r164e1a9di5syZGDFiBC5fvowNGzZg7ty5equBXk4ikcDDwwMeHh5o1qyZentWVhaioqLw4MEDjXCRk5ODvCezzGiMrbCxzJ8FyjF/Fiipsz1X1X7OC1sHkN/9ztzcHObebnB4rXirqRvToO+ypsjKyZ8u9cnsR3nJaVBkZBd6rIWFhTooVK1aFVWqVEGVKlVgaWlZxlUTUUns3bsX27dvh0JRcGpkXYiiqA4QMpmsQHhQUSgUGDt2LCwsLF56ThsbG8yYMQPe3t4lqo1I33QOEDY2Nti5cyd27dqFc+fOITU1FQEBAXjvvffQt29frX4g9MXZ2Rlr167FggUL0KdPH7i6umLKlCl6HcRNxWdlZQU/Pz+NmbKUSiXi4+PVA7YjIyMRGRmJhIQEKDKy8y/WHsSqj5dYmudPL+tsr167oiKHipfd/Vf98XJ4LQCCafEWDSuPg76LQ5Gdq7GugjwpDcrswrsgubi4oGrVquovb29vuLq6slWB6BVw9OhRyOVyvZ6zqPDw7P6XHQPkz0R5/vx5BggyOsVaB8Lc3Bxvv/023n77bX3X81I3btzQ+D4wMBC//PJLmddBxSORSODm5gY3Nzf1LFBA/tiKyMhI3L9/X/0VHR0NZXYuch/FI/dRvPpYE2sLSF0cIHWxh5mLA6TOdsXqqlMevezuvz4WA3wVp2cVFQrIE9Mgi0/JDwwJKYXOgiQIAjw9PeHj44OqVauiWrVqqFq1KscqEL2iZDIZYmJiAAAfN6gEG7Pi/y2RKZRYcD7/BlhLTxscfZBS5LFtKtuia/UXTzV/+nEm/o5MQ2RkZLFrIiotxQoQRPpmY2ODunXrom7duuptOTk5iIyMxL1793D37l3cu3cP0dHRUGTmQJH5GDmRj/MPlAiQOtnBrJJj/perIyQWr+bsTy9sHRAEzUHUJVDep2dV5sggi0uGLD4ZsrhkyJPSCrxnqrDg6+sLHx8f+Pr6wtvbu0xbUYnIsB49egSlUglrUwk8raUlugmTq3j62LbejvjfwxQoCvlVbSIAHao6wv4lYcXHNv/v2J07d/DTTz/h8ePHcHd3R8eOHTl+ggyOAYKMloWFBWrVqoVatWqpt2VlZeHevXu4c+cObt26hVu3biEtLQ3yhFTIE1KRef0+AMDUwQZmbk4wd3eGmbvTKzNA+0WtA5VaNUDWhZt6fa7yMtuSUiaH7HESch8nQhablD/I+Tn29vaoWbMmatSogerVq8PHx4eTJRBVcA8ePACAEoeH57lYSTG4ngc2XY3RCBEmAjAkwAOuVi+/yeVpLYVcLldPTKLy66+/YuzYsWjfvr3e6iXSFQMElStWVlYaLRWiKCIuLg43btzAzZs3cePGDTx69Ah5KRnIS8lA1o0HgABIXRxg7uEC88qukDrZ6fUPRVkrqnXAxNJcrwHCmImiCHliWn73tuh4yBNTgefu9Hl5ecHf3189DqdSpUrl+t+diPQvKioKAOBurf+bTC0q28PPyRL/i0pFQpYcLlZStKpsr1V4AIDsPEWhi+IqFAqsWLECdevWZUsEGQwDBJVrgiCox1S0bt0aAJCamoqIiAhcu3YN165dQ0xMDOTxKZDHpyDj8m1ILM1hUdkVFt5uMHN3LpdrUhTWOqCU5xmomrIhKpSQxSYi50EscqLiCwx49vDwQL169VC3bl34+/vDzs7OQJUSUXnx8OFDKJVKRKdmYs3FTLhYmel0kf8yrlZm6OvnWqzH/i8qtch9CoUCBw4cwKBBg4pbGlGJFDtApKam4vz584iLi0Pnzp2RkpICHx8f3uEjg7O3t0fTpk3RtGlTAEBCQgKuXLmCixcv4sqVK8jJzkHWrShk3YqCYCaFZVU3WPp6QerqwM+vkRFFEfK4ZGTdjUbOg1iIsqczpVhYWCAwMBBBQUEIDAws0dovRFQxRUREICsrC5eynm7bdzcRg+t5oEVle8MVBiAhS/bC/bGxsS/cT1SaihUgvv/+e6xevRo5OTkQBAGBgYFYunQpkpOTsX79et75I6Pi4uKCtm3bom3btpDL5bh+/TrOnz+Pc+fOIS0tTR0mTGytYFWzCqxqeEFiXjqDsOVpmeV2YHJZUubKkHX7EbJuPYQi/elfdnt7ezRu3BhNmjRBnTp1YGrKRlQiKp779+8jKSmpwHaFCGy6GgM/J0u9tUQUh8tLnruotbKIyoLOf303b96M5cuXIzQ0FG3btsWbb74JAHj33XcxZcoUfPvtt5g1a5beCyXSB6lUiqCgIAQFBWHo0KG4fv06Tpw4gbNnzyInPQvp/91AxqVbsKzuBes6PjC11d8g27SI+wVWkU6+eANubRrBzr+a3p6nPMtLz0LmtXvIuvsIUOTPkW5hYYGmTZuiRYsWqFOnDtdeICK9+OOPP4rcpxDzuxAVt/uRPrSqbI9/7iYWOumeiYkJOnbsWPZFET2hc4D46aefMHLkSIwfP15j1cY2bdrgo48+wpo1axggqFwwMTFBQEAAAgICMHToUJw6dQoHDhzA/fv3kXXzIbJuRcHS1xO2QTVhYl2yqT3laZkFwgMAQCki9tgFWHq6VuiWCEVmNtIv3Ub23Wj1e1StWjV07NgRzZs359SqRKR3qgHURUnI0u/icrpytTLDW7Xd8PN1za5KJiYm+PDDDzmAmgxK5wARHR2tsQDYs3x9fZGQkFDioojKmoWFBdq2bYuQkBBERETg999/x+XLl5F95xGy78fApq4vbOr5FHvButTwewXDg4pSRGr4vXIzZao+iQoFMq7eRca1e+oWh6CgIPTs2RP+/v4ck0JEpeZlXSBdrAw//Xc7bwfse5iB9BwZAgMD4evry3UgyCjoHCA8PDwQFhaG1157rcC+q1evwsPDQy+FERmCIAioXbs2ateujZs3b2Lbtm2IiIhAxuXbyL4fA4fX6sHM1VHn88rTMku0/1Uki0tGyqkrUKTlj3Hw9/fHwIEDUbNmTQNXRkQVwYvGa5oI+V2IDE0QBLjbmEEmCnj99deLvIFLVNZ0DhBvvPEGli9fDgsLC4SEhADIX9xr3759WL16NYYNG6bvGokMws/PD7NmzcLp06fx008/ISUlBYn7zsAmsAZsAqrrdHf8Zd2TXrT/VRt4LSpFZFy5g4wrtwERcHBwwODBg9G0aVO2OBBRmUlNTYW5uTnkslyNcQa6LPZWFlwtpHiQLsfjx48NXQqRms4B4v3330dUVBQWL16MxYsXAwAGDx4MAOjRowdCQ0P1WyGRAQmCgObNmyMgIAAbN27EiRMnkHHpNuTxKXBoFaT1Ctf2tX2QfPEGCh0NJxFgX9un0Me9agOvlblypPx7CbnR+V0dW7ZsiSFDhsDauvwGIiIqf0RRRGxsLKRSKcYGuSE8MbNYi72VBVfL/Es1BggyJjoHCEEQ8Nlnn2HYsGE4ffo0UlNTYWtriyZNmsDPz680aiQyOBsbG4wZMwYBAQFYv349cqMTkPD3aTi1a6TVTE1SO2u4tWmE2GMXNEOERIBbSONCWxRetYHXeelZSDp8AYq0TJiZmWH48OFo1aqVocsiogooLS0tfyp6ADUdLVHbWX8z7umby5MAERcXZ+BKiJ4q9iTqPj4+8PEp/K4p0auqdevW8Pb2xuLFi5GUlITEv0/DsX0jmDm/vK+snX81WHq6at0d6VUaeC1LSEXy4QtQ5srg7OyMSZMmoVq1aoYui4gqKNXFuL2ZCUwlxt110tkif/IOLhxHxkTnADFo0KAi+ylLJBJYWVmhatWq6N+/P3x9fUtcIJGxqVatGubNm4eFCxciMjISSfvPwrFNA5h7urz0sVI7a60v+nUdeC2YmkDq6qD+f2ORG52A5GNhEPMUqFatGj7++GM4Ouo+EJ2ISF/i4+MBPL04N2bOFvmXaklJScjLy+MCmmQUdF6RqUqVKrh48SLCwsIA5K/yKwgCLl26hHPnziEpKQl//vkn+vXrh+vXr+u9YCJj4OjoiFmzZqFevXoQ8xRIOnIB2fdi9Pocug68FgQBzp2bwrmz8QxGzr4XjaTDFyDmKRAQEIBZs2YxPBCRwakChKOF8V+M20olkEryx20kJiYauhwiAMUIEK6urvD09MS+ffuwadMmLFmyBBs3bsSBAwdQs2ZNtG7dGkePHkWzZs2wdOnSUiiZyDhYWVnh448/RrNmzQCliJR/LyEz/L7ezm9f2wcoqmm9iIHXgiAYTXjIuH4fKf9eBkQRzZs3x8cffwxLS0tDl0VEpF6zysnc+FsgBEGAg3l+0OFaW2QsdA4Qu3btwvjx4+Hp6amxvVKlShg1ahS2bt0KExMTvPXWW7h06ZLeCiUyRlKpFGPHjkWnTp0AAGnnI5B2PgJiUWMXdDn3k4HXBULECwZeGwNRKSLtfDjSL0QAADp37owxY8aw2Z2IjIbqQlxfLRAyhRJbbiSpv99yIwmyJ4tj6oMq6DBAkLHQ+ScnOzsbUmnhU1cKgoDMzPx+2VZWVpDJZCWrjqgckEgkGDJkCJycnLBt2zZkht9HXkYWHFoEQiIt2R8nXQdeG5pSnoeUfy8jNyp/gOLAgQPRvXt3o2kVISIC8scTAICjnlogfr6ZjMuJOervLyfm4OebyRhS21kv53d4UqeqbiJD0/nqpmHDhvj2229Rv359uLg8HTSamJiIlStXokGDBgCAs2fPwtvbW3+VEhkxQRDQs2dPuLi4YNWqVch9GIfEfWfgGNIApjYlmx5Ql4HXhpSXnoXkY2HIS06HqVSKD0JDC12xnojI0FRjCRzMSh4g5EoRV5OyC2y/mpQNuVKEVA+zPKkCBMdAkLHQOUBMnz4d77zzDjp06IAGDRrAyckJiYmJuHjxIqytrbFkyRIcP34cK1euxJw5c0qhZCLj9dprr8HFxQVLlixBWnIaEvaegmOrIK1maCrPcqPjkfy/yxBlctjb22PixImoWbOmocsiIiogJycHWVlZAJ5emJdEmkwBeSG9leTK/H3OeugmpQo6ycnJJT4XkT7oPAbC19cXf/31F4YNG4bc3Fxcu3YNQP4K1f/88w+qV68OBwcHfPPNN3jrrbf0XjCRsfPz88OCBQvg6+sLUSZH0qHzSL90C2Jhq1DrkTwtEwlnriLmwBkknLn60mlg9UFUKpF+8RaSDl2AKJPD19cX8+fPZ3ggIqOlugg3kwgwNykf3Svt2IWJjEyxYrGjoyPGjx9f5P7AwEAEBgYWuyii8s7Z2RmzZ8/Gpk2bcPjwYWRcvgPZ4yQ4tAyEibX+ZyJKi7hfYNXq5Is34NamEez8q+n9+QBAkZmN5H8vQx6X/8e4ffv2GDx4cJFjpIiIjEFKSgoAwN7cpNyMz7J/0gKRmppq4EqI8hUrQFy+fBlnzpyBTCZTzzYjiiKysrJw4cIFbN++Xa9FEpVHZmZmGDFiBPz9/bF+/XrkxCUj/s8TsA+uA0sfz5efQEvytMwC4QEAoBQRe+wCLD1d9TroWhRF5NyLQerZ6xDlebCwsMCIESM43oGIygVVgLCV6twJw2DsngkQSqUSEkn5qZ1eTToHiC1btmD+/PmFTlMpkUjQsmVLvRRG9Kpo2bIlatSoge+++w63b99Gyr+XkfMgFhbVPPRy9ysl4n7B8KCiFJF4+ioc9NQKIYoisu/FIPdhLACgRo0aGDNmDNzc3PRyfiKi0qa6i2+nhwHUZcVaKoGA/N/B6enpsLe3N3RJVMHpHCA2b96M1q1bY+HChVi9ejUyMjIwY8YMHDt2DNOmTUPPnj1Lo06ics3d3R2zZ8/G7t27sXv3buQ8iEXOg1i9nDsnJ+eF+7MjYyDG6nfgnYmJCfr06YNevXrBxKT8/BEmIkpLSwNQvlogTAQB1lIJMuRKpKamMkCQwekcIKKiojBt2jTY29ujXr16WLlyJSwsLNC5c2fcvXsXmzZtQvfu3UujVqJyzdTUFG+88QYaNmyIX3/9Fenp6Xo5b3R0NGJjiw4jzs7OBRZ+LAlbW1v069cPPj4FV8ImIjJ2qhYIa2n5uvlh8yRAqAIQkSHpHCCkUiksLCwAAFWrVkVkZCTkcjmkUikaNWqEH3/8Ue9FEr1KfH19MXnyZL2d7/Hjxxg1ahQUCkWBfSYmJpg3bx7c3d319nxEROVZRkYGgPwL8vLE+km9DBBkDHT+6alduzaOHDkCAPDx8YFSqcSlS5cA5F/IEFHZcnd3x9ixYwt0JTIxMcGHH37I8EBE9AxV6691eQsQpvm/41UBiMiQdG6BGDZsGMaOHYu0tDR8/vnnaN++PaZMmYJOnTphz549aNSoUWnUSUQv0L59e9StWxcHDhxAbGws3Nzc0LFjR4YHIqLnqC7ArU3LWYB4EngYIMgY6BwgOnTogFWrVuHOnTsAgM8++wyTJk3Ctm3bEBAQgFmzZum9SCJ6OXd3dwwaNMjQZRARGTXVBbhVOWuBsHoSeDIzS3+RUKKXKdY6ECEhIQgJCQGQv6jc+vXr1fvYjYmIiIiMleoC3KqctUCo6mULBBmDYo2BuHz5cqH7zp8/j9dff73ERRERERHpm0wmg1wuBwBYlrMAYWmav25QVlaWgSsh0rIFYv369eoPrCiK2LFjB44fP17guLCwMJiZmem3QiIiIiI9yM7OVv+/uUnJF/IsSxbswkRGRKsAkZubixUrVgAABEHAjh07ChwjkUhga2uLUaNG6bdCIiIiIj1Q3Qw1NxEgEcpZgHgSeF62eChRWdAqQIwaNUodDPz9/bF9+3YEBgaWamFERERE+qS6+LYwKV/dl4CnNT/bikJkKDoPoo6IiCiNOoiIiIhKlSpAlLfuSwBgYcoWCDIexZqF6cSJEzhy5Aiys7OhVCo19gmCgM8//1wvxRERERHpS3kOEGaS/BYIBggyBjoHiPXr12PhwoUwNzeHk5MThOf6ED7/PREREZExyM3NBQCYlcMAoQo9ubm5EEWR11tkUDoHiM2bN6NHjx5YsGABZ1wiIiKickMdICTlbwyEVPI0MMhkMpibmxuwGqrodP4JSkhIwBtvvMHwQEREROWKTCYDoHkxXl5ITTQDBJEh6Rwg6tSpg1u3bpVGLURERESlpjwHCBNBgKpsBggyNJ27MM2YMQMfffQRrKysEBQUBEtLywLHeHp66qU4IiIiIn1RrUItLX89mADkB59chYi8vDxDl0IVnM4BYuDAgVAqlZgxY0aRA3jCw8NLXBgRERGRPqkuvE3LYQsEAJgKAnIhqoMQkaHoHCDmz59fGnUQERERlSpVgDAppzMYqda/YwsEGZrOAaJPnz6lUQcRERFRqVIHiHLahUkVfBggyNCKtZCcTCbDzp07cfLkScTHx+Pzzz/H2bNnUbduXQQGBuq7RiIiIqISUygUAMpxC8STslWvg8hQdM7gSUlJ6NevHxYsWIDIyEhcvnwZOTk5OHr0KAYNGoSwsLDSqJOIiIioRFQX3uV0CAQkT4KPUqk0cCVU0ekcIBYuXIjMzEz89ddf+O233yCKIgBg2bJlCAgIwLJly/ReJBEREVFJqS68JeW0BUIVfBggyNB0DhBHjhzB+PHjUbVqVY1ZmMzNzfHee+/h2rVrei2QiIiISB9UNz3LZ3xgCwQZD50DRG5uLhwcHArdZ2JiwqnFiIiIyCipA0R5TRBPqF4HkaHoHCACAgKwdevWQvft2bMH9erVK3FRRERERPpW3lsgVHUzQJCh6TwL0/jx4zF06FD06tULbdq0gSAI+PPPP7F8+XL8+++/WLt2bWnUSURERFShldfgQ68enVsgGjdujB9//BGWlpZYu3YtRFHEhg0bEB8fj9WrV6NZs2alUScRERERERmBYq0D0aRJE2zbtg05OTlITU2FjY0NrK2t9V0bERERET3BjktkLIq1FuOaNWswcuRIWFhYwM3NDVevXkXLli2xefNmfddHREREpBeq2SPL6xCCclo2vYJ0DhDr16/H0qVLUa1aNfU2b29vdOnSBV9++SV27Nihz/qIiIiI9EIdIMro+ZKy5fj1ZjzWXHyEX2/GIz5LVqLzqYKPRFKs+79EeqNzF6Zt27bho48+wsiRI9XbPDw88Mknn8DFxQUbNmxA//799VokERERUUmpLryVek4QSqUScrkcoihCEARIpVIoFAosOhOp8Vz77iZicD0PtKhsX6znEZ9EHwYIMjSdP4GxsbEICAgodF9QUBCioqJKXBQRERGRvqkuvEU9tkFciElDVlYW5HI58vLyIJfLkZWVhdzc3AJBRSECm67GFLslQskWCDISOn8Cvby8cOrUqUL3nTt3Du7u7iUuioiIiEjf9N0CEZ8lw84bcTo9RiEC/4tKLdbzKZ/0YTIxMSnW44n0RecuTG+++SYWLVoEuVyODh06wNnZGUlJSThy5Ah+/PFHTJo0qTTqJCIiIioRU9P8yx6FnkZR/y8qtVhhJCFLXqznUzx5LgYIMjSdA8TQoUMRGxuLn376CRs2bFBvNzExwZAhQzBs2DB91kdERESkF6oLb4VSP+dLKGZXJBcrabEep2ALBBkJnQNEeno6pk6ditGjR+PixYtISUmBnZ0dAgMD4ejoWBo1EhEREZWYqgUiT08tEC5WZjo/xkQAWhVzELUq+KheB5Gh6PwJ7Nq1K6ZPn46uXbuiVatWpVETERERkd6puzDpaRBEq8r2+OduYpHdmARoThlrIgBDAjzgWozgATwNPgwQZGg6fwJlMhlbGoiIiKjcedoCoZ/zuVqZ4Y1albA9ouBAanNzc3zUwB1X4jOQkCWHi5UUrSrbFzs8AEDek6QilRavCxSRvugcIAYPHoylS5fCwsIC/v7+sLS0LI26iIiIiPRKdeGdp8eFIBp52OHPBxkF1oGQSCRwspSir5+rXp5HKYrqQdQMEGRoOgeI33//HdHR0Xj77bcL3S8IAq5fv17iwoiIiIj0ycws/+6/XM8ryUkkEpibm+v1nM/Le2bgN7swkaHp/Ans2bNnadRBREREVKpKowWirDxbsyoIERmKzgFi7NixpVEHERERUakqrRaIsqCqWRAEtkCQwRX7E3js2DGcPHkS8fHxmDBhAsLDw1G3bl14eXnpsz4iIiIivVAFCFk5DBCqmi0sLAxcCVExAkR2djbGjBmDkydPwsbGBpmZmRg+fDh+/vlnXL9+HZs3b0bNmjVLo1YiIiKiYlONU5Apyl+AkCvzB0FwADUZA4muD1iyZAmuXbuGDRs24PTp0xCfzEn81Vdfwc3NDd9++63eiyQiIiIqqfLcApH7JPSU9mBtIm3oHCD+/vtvTJw4Ec2aNYMgCOrtlSpVwqhRo3DhwgW9FkhERESkD6ruPzKF8iVHGh9Vqwm7MJEx0DlApKWlFTnOwd7eHllZWSUuioiIiEjfVBffueWwC1MuAwQZEZ0DRM2aNbFnz55C9x0+fJjjH4iIiMgoqbr/KERAUc66Mam6XbELExkDnQdRjxo1CmPHjkVKSgratm0LQRBw7tw5/Prrr9i2bRu+/vrr0qiTiIiIqESevXufqxBhJRFecLTu2rZti27dumHv3r04cuQI0mQKOFvoZ8rV3CfdriwtLfVyPqKS0LkFokOHDli0aBFu3LiBOXPmQBRFfPnll/jnn38wZ84cdOnSpTTqJCIiIioRU1NT9SxGuaUwDqJbt27w9PREt27dAABJOXl6OzcHUZMxKVYs7tGjB3r06IG7d+8iJSUFdnZ28PX1hUSicx4hIiIiKjMWFhaQy+XIKYVxEHv37lW3QACAk55aHwAgJ48tEGQ8dPpkX758GY8ePYK3tzfq1q0LX1/f0qqLiIiISO8sLS2Rnp6OnFJogThy5AiOHDmi/t7OzERv51YFHgYIMgZaBYi0tDSEhobi4sWLEEURgiCgQYMG+Prrr+Hh4VHaNRIRERHpheoCPCevfA2iVgUeKysrA1dCpOUYiKVLl+L69ev48MMPsWbNGkydOhV3797F7NmzS7s+IiIiIr1RXYBnl7O1INiFiYyJVi0QR44cwcSJEzFkyBAAQOvWreHm5obJkycjKyuLaZiIiIjKBdU1i+qCvLzIftJiwmsuMgZatUDEx8ejbt26GtuaNm0KhUKBmJiYUimMiIiISN/UXZjK2WJy7MJExkSrAJGXlwczMzONbfb29gCA3Nxc/VdFREREVAqsra0BANlsgSAqthLPuyqK5SvBExERUcWlHgNR7gIEWyDIeJQ4QAiCfldxJCIiIiot5TFAiKKorlfVgkJkSFqvAzFnzhzY2Niov1e1PMyaNUvjwywIAjZu3KjHEomIiIj0Q3XNklWOpnHNVYhQxR0GCDIGWrVANGnSBNbW1hBFUf2l2m5lZaWxXaksP4meiIiIKpanAaJ0rleUSiVyc3ORk5ODf+4mIj5LVuJzqlofTE1NC4xJJTIErVogfvrpp9Ku44VSUlKwZMkSHD16FBkZGahVqxYmTZqExo0bAwBOnTqFRYsW4c6dO/Dw8MCHH36Ibt26GbRmIiIiMj6q3hSlESDkcrnG5DJHIpNx/EEyBtfzQIvK9sU+b+Yz3ZfYdZyMQYnHQJSFiRMnIiwsDEuWLMGuXbtQu3ZtDB8+HHfv3sWdO3cQGhqKVq1a4ddff0X//v0xZcoUnDp1ytBlExERkZFRBQh9j4FQtTw8TyECm67GlKglQlXrs13JiQxJ6zEQhhIZGYkTJ05g69ataNSoEYD8cRf/+9//sGfPHiQmJqJWrVqYMGECAKB69eq4fv061q5di+bNmxuydCIiIjIy6i5MciVEUdTbHX25XF7kPoUI/C8qFX39XIt17iwOoCYjY/QtEI6OjlizZg0CAgLU2wRBgCAISEtLw/nz5wsEhWbNmuHChQucYpaIiIg0qO7iK6HfxeReds2RkFV0wHiZTHl+gLC1tS32OYj0yehbIOzs7NCmTRuNbfv27UNkZCRmzJiB3377De7u7hr7K1WqhOzsbCQnJ8PJyUnn5xRFEVlZWSWqm4iIiIyTmZkZZDIZMuVKWJrq517qy1oyXKykxT63qgXC3Nyc1ydUanRpkTP6APG8//77D9OnT0enTp0QEhKCnJycAjMSqL6XyYrX31AulyM8PLzEtRIREZHxUQUIfQ6klkqlRXZjMhGAViUZRP2kBSI3N5fXJ1SqtJ3lq1wFiIMHD2Ly5Mlo2LAhFi9eDCA/jT8fFFTfW1paFut5pFIpatSoUbJiiYiIyCg5ODggIyNDPbuRPkgkEpibmxcYSG0iAEMCPOBqVfzpV1V1ent7o3bt2iWqk6got2/f1vrYchMgNm/ejAULFqBLly746quv1AnJw8MDcXFxGsfGxcXBysqq2H0FBUHgUvFERESvKHt7e0RFRSFLrt+ZmKRSKUxMTCCXyyGKIlp52aJTNccShQcA6jqdnJx4fUKlRpcJBcpFgNi6dSvmzZuHQYMGYebMmRovsHHjxjh79qzG8adPn0bDhg0hkRj9GHEiIiIqY6qB1Blyhd7PrWqJAIAuvs5wtij5pZaqBYKDqMlYGH2AuHfvHj7//HN07NgRoaGhSEhIUO+zsLDAoEGD0KdPHyxevBh9+vTBsWPH8M8//2Dt2rUGrJqIiIiMVWkuJlcaVGMguA4EGQujDxD79u2DXC7HgQMHcODAAY19ffr0wZdffonvvvsOixYtwsaNG1G5cmUsWrSIa0AQERFRoVR38jP13IWptDBAkLEx+gDxwQcf4IMPPnjhMa1bt0br1q3LqCIiIiIqz8pTgFCKorqlxM7OzsDVEOXjIAEiIiKqUFQBIqMcBIjsPCVUS9SxBYKMBQMEERERVSjqFohyMAZCFXKsrKxgamr0HUeogmCAICIiogqlPHVh4vgHMkYMEERERFShPA0QCoii+JKjDSuT4x/ICLEtjIiIiCoUVYDIE4FchQgL06IX0IrPkuF/UalIyJLBxcoMrSrbl3hhOF2wBYKMEQMEERERVSjm5uaQSqWQy+XIzFPCwrTwDhknolKx8WoMlM80Uuy7m4jB9TzQorJ9mdSqWuyOLRBkTNiFiYiIiCoUQRBeOhNTfJasQHgAAIUIbLoag/gsWWmXCeBpCwRXoSZjwgBBREREFY7qjn7mkzv8z/tfVGqB8KCiEPP3l4UMBggyQgwQREREVOG8bCamhJe0MCRkyfVeU2FUg6gZIMiYMEAQERFRhfOytSBcXjJQ2sVKqveaCsMuTGSMGCCIiIiownnZGIhWle1hUsTkTCZC/v6yoOpixVmYyJgwQBAREVGF87IuTK5WZhhcz6NAiDARgCEBHmU2lasq4HAWJjImnMaViIiIKpynLRCFD6IGgBaV7eHnZPlkHQg5XKykZboORJ5SRI5C1KiXyBgwQBAREVGF87IWCBVXKzP09XMti5IKUI3PEAQB1tbWBqmBqDDswkREREQVjrYBwpCyntRmbW0NiYSXbGQ8+GkkIiKiCudlszAZA65CTcaKAYKIiIgqHNWsRllyJUSxiBXjDEzVOsIZmMjYMEAQERFRhaO6KFcCyM4z0gDBReTISDFAEBERUYVjZmYGc3NzAMbbjYmLyJGxYoAgIiKiCunpQOqip3I1JFWwYRcmMjYMEERERFQhqcdBGGkLRBbHQJCRYoAgIiKiCunpYnLGGSDYhYmMFQMEERERVUjG3gLBLkxkrBggiIiIqEJ6dipXY5TFAEFGigGCiIiIKiRjb4HIYhcmMlIMEERERFQhqQJEphG2QChFUR1srK2tDVwNkSYGCCIiIqqQVBfmxtgCkaMQoVrejl2YyNgwQBAREVGFpOoaZIwBQtV9ydzcHFKp1MDVEGligCAiIqIKyZhbINh9iYwZAwQRERFVSAwQRMXDAEFEREQVkmpsQU6eCKUovuTossUpXMmYMUAQERFRhaS6uy8iP0QYk2y2QJARY4AgIiKiCsnU1BTm5uYAjK8bE7swkTFjgCAiIqIKS3WBnm1kAYItEGTMGCCIiIiowjLWgdRZT7pUMUCQMWKAICIiogrLysoKgPG2QKjqIzImDBBERERUYam7MCk4iJpIWwwQREREVGGxBYJIdwwQREREVGEZ7yBqjoEg48UAQURERBUWWyCIdMcAQURERBXW0wBhPGMgRFFEtoJjIMh4MUAQERFRhaUOEArjaYGQKUUon+QZtkCQMWKAICIiogpLdYc/p5hdmOzMTCAt5GpKKsnfVxw5T1pDJBKJeqVsImPCAEFEREQVlqWlJYDij4GQSgTUc7IssL2ekyWkEqFY53x2/IMgFO8cRKWJAYKIiIgqrKddmIo/BmKgnyMCnS3U3wc6W2Cgn2Oxz6fqTqUKN0TGhgGCiIiIKixVgChuFyYAMDOR4J1aTurv36nlBDOT4l9iqbowcfwDGSsGCCIiIqqwVBfpuQoRStE4ZmLiDExk7BggiIiIqMJSBQgRQE4JujHpk2oMBLswkbFigCAiIqIKSyqVQiqVAihZNyZ9YhcmMnYMEERERFShqe705xjJWhCqOhggyFiZGroAIiIiIkOytrZGWlpaqa1GHZ8lw/+iUpGQJYOLlRlaVbaHq5VZkcc/O40rkTFigCAiIqIKraRrQbzIiahUbLwao15ZGgD23U3E4HoeaFHZvtDHZLMLExk5dmEiIiKiCk09laueuzDFZ8kKhAcAUIjApqsxiM+SFfo4dmEiY8cAQURERBWaejE5PXdh+l9UaoHwoKIQ8/cXhrMwkbFjgCAiIqIKTR+LyRUmoYgWhqf75YVuV00ny3UgyFgxQBAREVGFpm6B0HMXJpcXDJTO3y8tdDtbIMjYMUAQERFRhVZaXZhaVbaHiVD4PhMhf39hVAGCLRBkrBggiIiIqEJTXajrexYmVyszDK7nUSBEmAjAkACPQqdyVYoichWchYmMG6dxJSIiogrtaQuE/qdxbVHZHn5Olk/WgZDDxUr6wnUgchQiVO0gDBBkrBggiIiIqEIrzQAB5LdE9PVz1epYVQ1mZmaQSgsfI0FkaOzCRERERBWauguTonRWotYFxz9QecAAQURERBWa6mI9S146LRC6yMrjInJk/BggiIiIqEJ7dhC1KBq2FYItEFQeMEAQERFRhaa6WFcC6hmQDCUrj4vIkfFjgCAiIqIK7dkBy1mlNJBaW6puVDY2Ngatg+hFGCCIiIioQhME4ek4CEMHCHZhonKAAYKIiIgqPGMLEGyBIGPGAEFEREQVnq2tLQAg08AzMbELE5UHDBBERERU4aku2A0dIDLyFAAYIMi4MUAQERFRhadqgTB4F6YnAUZVD5ExYoAgIiKiCs9YujBl5jFAkPFjgCAiIqIKT3XBnmHAACGKojrAMECQMWOAICIiogrvaYBQGKyGbIUI1Tp2DBBkzBggiIiIqMKzs7MDYNguTJlPwouFhQXMzMwMVgfRyzBAEBERUYWnChDpBgwQqu5TqlqIjBUDBBEREVV4qov2DLkCoigapIZ0GQMElQ8MEERERFThqS7aFSKQnWegAPGkC5O9vb1Bnp9IWwwQREREVOGZmZnBysoKwNML+bLGFggqLxggiIiIiPD0zn+azEAB4klwcXR0NMjzE2mLAYKIiIgIgIODA4CnLQFlTRVc2IWJjB0DBBERERGeBog0A3VhSnsSXFR1EBkrBggiIiIiPO06lJprmACRKmMXJiofGCCIiIiI8EyAMMAYCKUoqrswMUCQsWOAICIiIoJhWyAy5EooRUAQBI6BIKPHAEFEREQEwMnJCYBhWiBUocXe3h6mpqZl/vxEumCAICIiIoJmgCjr1ahTnoQWVQ1ExowBgoiIiAj5F++CIECuBDLlZTuVa8qTFghnZ+cyfV6i4nglAoRSqcSyZcvQqlUr1K9fH++//z4ePnxo6LKIiIioHDE1NVWPP0gu425Mybl5ABggqHx4JQLEd999h61bt2LevHnYtm0blEolRowYAZlMZujSiIiIqJx4/PgxZDIZcnJysPd2AuKzSn4dEZ8lw68347Hm4iP8ejO+yHMmswWCypFyP0pHJpNh/fr1mDx5MkJCQgAA33zzDVq1aoX9+/eje/fuhi2QiIiIjN6hQ4ewfPlyKJX5XZfOx6Qh7HEaBtfzQIvKxZsV6URUKjZejYHymeEU++4mFnrO5Jz8AOHi4lK8F0BUhsp9C0RERAQyMzPRvHlz9TY7OzvUqVMH586dM2BlREREVB48fvxYIzyoKERg09WYYrVExGfJCoSHF51T1YWJAYLKg3LfAvH48WMAgIeHh8b2SpUqqffpQi6XQxRFXL58WS/1ERERkXE7cOBAgfCgohCBP3Nd0C645QvPIQIYXju/FSHGzARH/vcvlOJdrc/5hl/+Y9PT03kNQgYhl8shCIJWx5b7AJGdnQ0AMDMz09hubm6O1NRUnc+neuO0fQOJiIiofEtOTn7h/vikFPUq0dpIlykQn5Si8zkFQYCJiYnWz0OkT4IgVJwAYWFhASB/LITq/wEgNzcXlpaWOp+vQYMGequNiIiIjF9AQIDez9m+fXu9n5PIWJT7MRCqrktxcXEa2+Pi4uDm5maIkoiIiIiIXlnlPkD4+/vDxsYGZ86cUW9LS0vD9evX0aRJEwNWRkRERET06in3XZjMzMzw7rvvYvHixXBycoKXlxcWLVoEd3d3dOrUydDlERERERG9Usp9gACAcePGIS8vD5988glycnLQpEkTrFu3DlKp1NClERERERG9UgRRFMWXH0ZERERERPQKjIEgIiIiIqKywwBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKS1V2IdCKLyZtCgQTh79myR+0+dOoWFCxfit99+09huamoKR0dHNG/eHNOnT4eTk5PG/kOHDmHLli24du0aZDIZfHx8MGDAAPTv3x+CIAAAlEol1q9fjx07diA2NhZeXl4YOnQo+vfvrz5PVFQU5s2bh3PnzsHKygpvvPEGPvzwQ5iYmOjxXSAiMn5//PEHNm/ejJs3b0IQBPj6+qJ///4YMGCAVo8/c+YMBg8ejEOHDqFy5crq7XFxcRg0aBAUCgU2btwILy+v0noJRHrHAEFkIK+//jpmzpxZ6D5HR0cAQIMGDbB8+XL19pycHISFheGzzz5DSkoKfvjhB/W+r776Clu3bsWoUaMwZcoUWFhY4MSJE/j8889x7do1zJ07FwCwevVqrF+/HnPnzkW9evVw6tQpzJkzB1KpFL1794ZcLsfw4cNRrVo1bNu2DQ8ePMDMmTMhkUgwbty4UnxHiIiMy86dO7FgwQLMnDkTjRo1giiKOHHiBObPn4+EhASMHTu2WOeNi4vD4MGDAQBbtmyBm5ubPssmKnUMEEQGYmFhAVdX1xceI5VKCxxTpUoVPHjwAMuXL0d6ejpsbW1x7NgxrF+/HitXrkSHDh3Ux1arVg3W1taYOnUqevfujQYNGuDnn3/Ge++9h65duwIAvL29cenSJezYsQO9e/fGvn37EB0dje3bt8Pe3h5+fn5ITEzEwoUL8cEHH8DMzEz/bwYRkRHaunUr+vXrhzfeeEO9zdfXF7Gxsdi0aVOxAkR8fDwGDx4MExMTbNiw4aV/B4iMEQMEUTlkbm4OQRDUXYp+/vln+Pv7a4QHle7du8PNzQ21atWCUqnEV199BR8fH41jJBIJ0tLSAADnz59H3bp1YW9vr97frFkzZGRkIDw8HEFBQaX4yoiIjIdEIkFYWBhSU1M1fieOHDkS/fr1A5DfMrxq1Srs2bMHcXFx8PX1xejRo9G5c+cC51OFBzMzM2zYsKFAN1Si8oKDqInKEVEU8d9//2Hjxo3o1KkTrKysAABXr15Fw4YNC32MqakpmjdvDisrK0gkEjRv3hzu7u7q/dHR0di7dy9atmwJAHj8+LHGfgCoVKkSACAmJqY0XhYRkVEaMWIErl+/jtatW2PkyJFYs2YNLl++DFtbW/WNmIkTJ2L37t2YNWsW/vjjD3To0AHjx4/HwYMHNc6VmJiIIUOG4N69e1i+fDnDA5VrbIEgMpA9e/b8v737j6mqfOA4/r6meRFEQgyW05oRAkP5IcLUlknkijWbJQnaddMQRHSJMRlbDqn44S/MvEvNX0SxeW05Z85oaoKIWuNHcxU3pYsolvgrdKhAwP3+wbwTzbqVyjf9vLa7cZ9zzvM85/zD/ZzzPOfhq6++uqU8Ojqa5cuXA11PA0JDQx3bWltb8fT0JCYmhgULFjjKm5qacHd3/9t9OH/+PLNnz2bgwIEkJycDXXfTbq6rb9++jvZFRB4UL7zwAj4+PhQWFlJeXk5paSnQNTw0JycHDw8P9u3bx7p163j22WcBmD9/PlarlXXr1nV7Kjxv3jwGDRqEu7s7y5cvx2w298QpidwRChAiPSQqKoq0tLRbyq8/VQAICgpixYoVAPz888+8++67+Pv78+abb3bbz9PTk6ampr/Vvs1mIzExkY6ODgoLCx2hwWg00tbW1m3f68HhxjZFRB4EISEhhISE0NnZidVqpbS0lE8//ZTZs2fz3nvvATBq1Khux4wePZr8/PxuZYMHD2bjxo0cOHCA1NRUioqKmD59+j07D5E7SUOYRHqIq6srjz/++C2fGyfUGY1GR3lUVBQbNmzgyJEjLFy4ELvd7tgvNDSUqqqqP2yno6ODhIQEiouLHWWVlZXExcXh4uLC1q1bGTJkiGObj48PZ8+e7VbH9e96U4iIPCjOnDlDVlYWZ86cAbrmQwQGBpKcnExBQQFXrly57bF2u53evbvfo126dClubm7ExMTw0ksvsXTpUn766ae7eg4id4sChMh/iK+vL2lpaZSUlLB161ZH+WuvvcaxY8duGXMLXe8wLysrcwSTo0ePkpCQwFNPPfWHrw8cPXo0P/74I83NzY6yI0eO4Orqir+//106MxGR/y8PP/wwn332GTt37rxl2/Unttfnh1VWVnbbXlFRga+vb7eyG9fRyczMxNPTk9TUVK5du3anuy5y1ylAiPSQlpYWzp0794efm4cQ3WjatGmEh4ezYsUKGhsbARg3bhxxcXEsXLiQ9evXU1tbS21tLevXryczMxOTycSoUaNob28nLS2NgQMHkpeXR2trq6PNixcvAl1zMAYNGsSCBQuwWq3s3buX/Px8Zs2apVe4isgDw9PTk4SEBFavXs2qVauoqanh1KlT7N+/n3nz5hEZGUl4eDgTJkwgKyuLkpIS6urqMJvN7Nu3j1mzZt22bnd3d3Jzc7HZbGRnZ9/DsxK5Mwz2G8dBiMg98VcrUa9evZqSkhJOnz7NJ598csv2uro6Xn75ZcaNG8fatWsd5du3b2fbtm3YbDba29sZNmwY06ZNY/LkyRgMBqqqqoiPj//DNgcPHszXX38NQH19PVlZWVRUVDBgwADHStS9eumeg4g8WHbs2MG2bds4duwYLS0tPPbYY7z44oskJSXRr18/rl69Sn5+Pl9++SWXL1/Gz8+POXPm8PzzzwO3X4kaIC8vjy1btrBq1SrH2jwi/wUKECIiIiIi4jTdThQREREREacpQIiIiIiIiNMUIERERERExGkKECIiIiIi4jQFCBERERERcZoChIiIiIiIOE0BQkREREREnKYAISIi91xPL0HU0+2LiPyXKUCIiMifMplMDB8+3PHx9/cnNDSUV155hcLCQtrb2/9WfcePH7/tiuh3W1tbGzk5OXzxxRc90r6IyP2gd093QERE/v8FBgaSmZkJQEdHB5cuXeLAgQPk5uZSUVHB+++/T69ezt2TKi4uprq6+m5297bOnj3Lxx9/TG5ubo+0LyJyP1CAEBGRv+Tm5kZISEi3sqioKIYNG0Z2dja7du1i0qRJPdM5ERG5pzSESURE/rHXX38db29vtm7dCkBLSwsrV65k4sSJBAUFERYWxsyZM6mpqQFgzZo1mM1mAIYPH86aNWsAuHjxIllZWUyYMIGgoCAiIiJISUmhoaHB0dbJkyeZM2cOkZGRBAcHM3XqVEpLS7v159ixYyQlJREWFkZYWBgpKSmcOnUKgIaGBp577jkAMjIyiIqKursXR0TkPqUAISIi/1ivXr0YM2YMR48epb29nUWLFvH555+TmJjI5s2bycjI4Pjx47z11lvY7XZiY2OZMmUKABaLhdjYWOx2O0lJSZSXl5OWlsamTZuYN28ehw8fdgyb6uzsJCkpiWvXrrFs2TI+/PBDPDw8SE5Opr6+HoC6ujri4uK4cOECS5cuJTs7m1OnThEfH8+FCxd49NFHHeElOTnZ8beIiPw9GsIkIiL/ipeXF7///jtNTU1cuXKFt99+m5iYGAAiIiJobm4mLy+P8+fP4+Pjg4+PD4BjSFRjYyMuLi6kp6cTHh4OQGRkJCdPnsRisQBw4cIFbDYbc+fOZfz48QCMHDkSs9lMW1sbAGazGRcXFwoKCnBzcwNgzJgxREdHs3HjRtLT0wkICABg6NChBAYG3psLJCJyn1GAEBGRf+X6K1ENBgObNm0CukJBXV0dJ06cYP/+/QCOH/o38/b2prCwELvdTkNDA/X19dhsNqqqqhzHeHl54evry+LFizl48CBPP/00zzzzDBkZGY56jhw5QkREBEaj0fFmKDc3N8LDwzl06NBdO38RkQeNAoSIiPwrjY2NGI1GPDw8KCsrIycnB5vNhqurK/7+/vTr1w/487UXdu7cSX5+Pr/++iseHh4EBARgNBod2w0GA5s3b2bt2rXs2bOHHTt20KdPH6Kjo8nKymLAgAE0NTWxe/dudu/efUv9np6ed/7ERUQeUAoQIiLyj7W3t/PNN98QFhbG6dOnSUlJITo6mvXr1zNkyBAMBgNFRUWUlZXdto6KigrS09MxmUy88cYbeHt7A7Bs2TIqKysd+3l7e7NkyRIyMzOxWq0UFxezYcMGHnnkETIzM+nfvz9jx45l5syZt7TRu7f+3YmI3CmaRC0iIv+YxWLh3LlzxMfH8/3339Pa2kpiYiJDhw7FYDAAOMLD9ScQN68XUV1dTWdnJ/Pnz3eEh46ODsewo87OTqqrqxk7dixHjx7FYDAQEBBAamoqfn5+/PLLL0DXfIva2loCAgIYMWIEI0aMICgoiIKCAvbs2QPAQw89dPcviojIfU63ZERE5C81Nzfz3XffAV0/6H/77TcOHjyIxWJh0qRJTJw4kfr6enr37s3y5cuZNWsWbW1tbN++nZKSEgCuXr0KgLu7OwC7du0iODiYkSNHAvDOO+/w6quvcunSJYqKirBarY7jAgMDMRqNLFq0iPnz5+Pl5cWhQ4eoqalhxowZAMydO5e4uDiSkpKIj4+nb9++WCwW9u7dywcffABA//79ATh8+DBPPvkkwcHB9+T6iYjcTwz2PxuUKiIiDzyTycS3337r+G4wGHB1dcXPz4/JkycTGxvreNpQXFyM2Wzm5MmTDBgwgJCQEGbMmIHJZGLx4sVMnz6dxsZGUlJSsFqtTJkyhSVLllBUVMSWLVtobGzEy8uLyMhIoqOjSUlJ4aOPPmL8+PGcOHGClStXUllZyeXLl3niiScwmUxMnTrV0bcffviBVatWUVVVhd1ux8/Pj8TERMf6DwB5eXlYLBb69OlDeXk5ffr0uXcXU0TkPqAAISIiIiIiTtMcCBERERERcZoChIiIiIiIOE0BQkREREREnKYAISIiIiIiTlOAEBERERERpylAiIiIiIiI0xQgRERERETEaQoQIiIiIiLiNAUIERERERFxmgKEiIiIiIg4TQFCREREREScpgAhIiIiIiJO+x/UntQYE0tj3QAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load JSON data\n", + "with open('erc20.json', 'r') as f:\n", + " erc20_data = json.load(f)\n", + "with open('sok.json', 'r') as f:\n", + " sok_data = json.load(f)\n", + "\n", + "# Convert to DataFrame and label\n", + "erc20_df = pd.DataFrame(erc20_data)\n", + "erc20_df['Dataset'] = 'ERC20'\n", + "\n", + "sok_df = pd.DataFrame(sok_data)\n", + "sok_df['Dataset'] = 'SoK'\n", + "\n", + "# Combine into a single DataFrame\n", + "df = pd.concat([erc20_df, sok_df], ignore_index=True)\n", + "\n", + "# Compute percentage of invariants removed\n", + "# If reduction_ratio = (predicates_after / predicates_before),\n", + "# then the fraction removed is 1 - reduction_ratio,\n", + "# multiplied by 100 for percentage.\n", + "df['percentage_removed'] = (1 - df['reduction_ratio']) * 100\n", + "\n", + "# Plot setup\n", + "sns.set(style=\"whitegrid\")\n", + "plt.figure(figsize=(8, 6))\n", + "\n", + "# Create a violin plot for distribution + strip plot for individual data points\n", + "sns.violinplot(x='Dataset', y='percentage_removed', data=df, palette=\"Set2\", cut=0)\n", + "sns.stripplot(x='Dataset', y='percentage_removed', data=df, color='0.3', size=6)\n", + "\n", + "# Labeling and styling\n", + "plt.ylim(0, 100) # percentage from 0% to 100%\n", + "plt.ylabel(\"Percentage of Invariants Removed (%)\")\n", + "plt.title(\"Comparison of Invariant Reduction (Percentage Removed)\")\n", + "plt.tight_layout()\n", + "\n", + "# Save or show\n", + "plt.savefig(\"percentage_removed_comparison.png\", dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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9wMAd9FzA1xd06ZNXZ0Qnnb48GG3zy1WuNmzZ4/ef/99bd68WefOnVPLli01efJk3X777W69/ty5c9qxY4duvfVW17waPz8/NWrUSImJiXI6nUpMTMz1mpyvw8LCTNdts9mKFY4AlE9+fqamKQLlRnBwsIKCgkrk2u4OSUkmw83s2bO1efNmnT59WrVr19agQYPUr18/19o07kpKStLEiRO1bNky11NXmZmZOnjwoMLDw1WjRg29/fbbysrKkt1ulyTt3LlT9evXV/Xq1c2UDgAALM5UuFm3bp1uvfVW3XHHHerUqZPpmzdp0kTdunXTtGnTNG3aNFWuXFlLlixRSkqK7r//fgUGBmrZsmV66qmnNGLECO3fv18rVqxQVFSU6XsCAABrMxVuPv/8c7cn9RRm/vz5mjdvniZMmKBffvlFHTp00KpVq3TNNddIkpYtW6bp06drwIABqlmzph5//HENGDDAI/cGAADWYyrcBAQE6NixY3rppZf0xRdfKCUlRVWrVlWHDh00ZsyYIk3WrVSpkqZOnaqpU6fm296mTRutXbvWTJkAAKAcMhVuDh8+rCFDhshut7vmxpw5c0affPKJtm7dqnfeeafI828AAAA8wVS4mTt3rurWras333xTlSpVch3/5ZdfdN9992nBggWKjo72WJEAAADuMvVc45dffqmHH344V7CRrgwxjRw5Ul9++aVHigMAACgqU+HG39+/wEV6AgIC8iy8BwAAUFpMhZvWrVtr9erVMgwj13HDMLRq1Sq1atXKI8UBAAAUlak5N48++qiGDh2qfv36qXfv3qpZs6bOnDmjzZs369ixY3r99dc9XScAAIBbTIWb1q1ba9myZZo3b56io6NdO3W2atVKr776qjp27OjpOgEAANxiem+pLl266J133tGlS5eUkpKi0NBQBQcHe7I2AACAIjMdbjIyMnT06FH98ssv+bbTewMAALzBVLjZsWOH/va3v+n8+fOuIanf/zsuLs7TtQIAABTKVLiZMWOGqlWrpqlTp6pKlSoeLgkAAMA8U+HmxIkTWrRokW688UZP1wMAAFAspta5adq0qU6fPu3pWgAAAIrNVM/Nk08+qUmTJslut6tNmzb5PiV1zTXXFLs4AACAoirW01JPPvlkge1MKAYAeMKZ1Ax9evKCklIzVCMkQDfVrayaIQHeLgs+zFS4mTp1qvz9/TVx4kTVqFHD0zUBACBJ2n7ygt44cFrZv9nt54OjZzWsVW3dWLey9wqDTzMVbo4ePaqXXnpJN998s4fLAQCUF4X1yJxJzcgTbCQpy5BWHjitJtWC6cFBvkyFm3r16ik1NdXTtQAAygl3emQ+PXkhT7DJkWVcab+zSc1SqBZljamnpR599FEtWLBA27dv18WLFz1dEwDAwgrrkTmTmiFJSvrvvwuSlJpZUiWijDPVczNv3jwlJSVpxIgR+bbbbDYdPHiwWIUBAKzJ3R6ZGoUMOdUIcZRAdbACU+Hmz3/+s6frAACUE+72yNxUt7I+OHpWWfkEIbvtSjuQH1PhZty4cZ6uAwBQTrjbI1MzJEDDWtXWygOncwUcu026r3VtJhOjQKbXuZGkbdu26fPPP9eZM2c0YcIExcXFqWXLlqpTp46n6gMAWExRemRurFtZTaoF//epqkzVCHGwzg0KZSrcXLp0SWPHjtXnn3+uihUr6uLFi3rwwQe1Zs0aHTx4UG+99ZYaN27s6VoBABZQ1B6ZmiEBPBWFIjH1tNT8+fP17bffasWKFdq5c6cM48r/nbNmzVJYWJhefPFFjxYJALCWG+tW1rRuDXRbw+rqVDtUtzWsrmndGuiPdZhHg+Iz1XPz73//WxMnTlSXLl2UlZXlOl6rVi2NHj1azz77rMcKBABYEz0yKCmmem5SUlIKnFdTuXJlFvgDAABeYyrcNG7cWDExMfm2ffzxx8y3AQAAXmNqWGr06NEaN26ckpOTdcstt8hms+nLL7/U+vXr9fbbb2vevHmerhMAAMAtpsJNz549NWfOHM2bN0/btm2TJM2cOVPVq1fX1KlT1bt3b48WCQAA4C5T4ebIkSPq27ev+vbtq6NHjyo5OVmhoaFq0KCB/PxMjXQBAAB4hKkkcvfdd2vjxo2SpAYNGqh9+/Zq1KgRwQYAAHidqTTicDhUtWpVT9cCAABQbKaGpR599FHNnj1bv/zyi5o1a6aQkJA851xzzTXFLg4AAKCoTIWbqVOnKisrS4899liB58TFxZkuCgAAwCxT4WbatGmergMAAMAjTIWbAQMGuHWeYRh68sknNX78eIapAABAqSjRx5uys7O1ceNGnT9/viRvAwAA4FLiz27n7BgOAABQGliYBgAAWIqpOTcAUN5lZGV7uwTAJ/ji3wXCDQC46bfD7E/vivdiJYBv8pWpKAxLAQAAS6HnBgDcZLPZXH9+rrNTAXZ+PwQysrJdPZm//TviTSUebnzljQKAJwXY/RRIuAF8Eo+CAwAASylWz82RI0e0fft2JSYmKjIyUj/99JOaNWumihUrSpLsdrsOHTrkkUIBAADcYSrcZGdn65lnntF7770nwzBks9nUp08fLVq0SCdOnNBbb70lp9Pp6VoBAAAKZWpYatGiRYqJidG0adO0fft219DTY489puzsbC1YsMCjRQIAALjLVLh577339Mgjj2jgwIGqUqWK63jz5s31yCOPaPv27Z6qDwAAoEhMhZukpCQ1b94837awsDClpKQUqygAAACzTIWbevXqadu2bfm2ffHFF6pXr16xigIAADDL1ITi++67T88884wyMzN1yy23yGaz6fjx49q1a5eWL1+uv//9756uEwAAwC2mws3gwYN17tw5LV68WGvWrJFhGJo4caIcDodGjBihoUOHerpOAAAAt5he52bUqFG65557tHfvXl24cEGhoaFq27ZtrgnGAAAApa1Yi/hVrFhR3bp181QtAAAAxWYq3ISHhxe4Z5Sfn59CQkJUr149RUZGqmPHjsUqEAAAoChMPS3Vt29fnTlzRqmpqerUqZNuu+02de7cWenp6Tp16pSuu+46nT59Wvfdd5927Njh6ZoBAAAKZKrnJjk5WS1atNBrr72mChUquI6npaVp1KhRqlmzpl588UU9+eSTWrRokbp27eqxggEAAK7GVM/N5s2bNXLkyFzBRpKCgoJ0//33KyYmRpJ022236eDBg8WvEgAAwE2mJxRfvHgx3+O//PKLLl++fOXi/v4Fzs0BAJRvZ1Iz9OnJC0pKzVCNkADdVLeyaoYEeLssWICpcPPHP/5R8+fPV6NGjXJtw3Do0CG98MILuvHGGyVJsbGxatiwoWcqBQBYxvaTF/TGgdPKNv537IOjZzWsVW3dWLey9wqDJZgalnryyScVFBSkO++8U7169dKQIUMUERGhAQMGKDg4WE899ZQ+/PBDrV69Wg8++OBVr5WcnKxnnnlG3bp1U/v27TV06FDt3r3b1b5jxw7deeedatu2rXr37q1//etfZkoGAPiIM6kZeYKNJGUZ0soDp3UmNcM7hcEyTPXc1KxZU//4xz+0adMm7dq1S+fOnVPDhg01duxY9e3bV3a7XQ0aNNDatWvVpk2b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erWn6wQAWETNkADd2aSmt8uAhZkalmrSpIneffddde7cWbt27ZLdbtfnn3+ua6+9Vm+//baaN2/u6ToBAADcYqrnRpLq16+v2bNny263S5IuXbqky5cvq1KlSh4rDgAAoKhM9dxkZmZqypQp+stf/uI6tm/fPnXt2lWzZs1Sdna2xwoEAAAoClPhZuHChdq0aZP+/Oc/u461aNFCkyZN0rp167Rs2TKPFQgAAFAUpoalYmJiNHnyZA0ZMsR1rEqVKrr//vvl7++vlStXauTIkR4rEgAAwF2mem7Onz+vP/zhD/m2NWjQQPHx8cUqCgAAwCxT4aZBgwb64IMP8m37+OOPVa9evWIVBQAAYJapYalhw4bp73//u5KTk9WzZ09Vr15d586d0yeffKJ///vfev755z1dJwAAgFtMhZv+/fvr4sWLWrRokT788EPX8apVq+rpp59W//79PVUfAABAkZgKN0eOHNE999yju+++W8eOHVNycrJCQ0PVoEED+fmZ3q4KAACg2EwlkbvvvlsbN26UzWZTgwYN1L59ezVq1IhgAwAAvM5UGnE4HKpataqnawEAACg2U8NSjz76qGbPnq1ffvlFzZo1U0hISJ5zrrnmmmIXBwAAUFSmws3UqVOVlZWlxx57rMBz4uLiTBcFAABglqlwM23aNE/XAQAA4BGmws2AAQM8XQcAAIBHmAo3kpSRkaF3331Xn3/+uc6cOaMZM2boiy++UMuWLdWmTRtP1ggAAOA2U09LnTt3TgMHDtT06dN1/Phx7d+/X2lpadq6dasiIyO1b98+T9cJAADgFlPhZvbs2bp48aLef/99bdiwQYZhSJJeeukltW7dWi+99JJHiwQAAHCXqXDzySef6NFHH1W9evVks9lcxwMDA/XAAw/o22+/9ViBAAAARWEq3KSnp6tKlSr5ttntdmVmZhanJgAAANNMhZvWrVtr9erV+bbFxMSoVatWxSoKAADALNMrFN9///2644471L17d9lsNv3zn//UwoUL9dlnn2nZsmWerhMAAMAtpnpuOnTooNdff10hISFatmyZDMPQihUrdObMGS1ZskRdunTxdJ0AAABuMb3OTceOHTVmzBh99tlnunTpkkJCQtSjRw917NjRk/UBAAAUialwc+HCBY0aNUpff/217Ha7qlSpouTkZL3xxhvq1q2bFi5cqICAAE/X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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.boxplot(x='Dataset', y='percentage_removed', data=df, palette=\"Set2\")\n", + "sns.stripplot(x='Dataset', y='percentage_removed', data=df, color='0.3', size=6)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# 1. Load data\n", + "with open('erc20.json', 'r') as f:\n", + " erc20_data = json.load(f)\n", + "with open('sok.json', 'r') as f:\n", + " sok_data = json.load(f)\n", + "\n", + "# 2. Convert to DataFrame and label\n", + "erc20_df = pd.DataFrame(erc20_data)\n", + "erc20_df['Dataset'] = 'ERC20'\n", + "\n", + "sok_df = pd.DataFrame(sok_data)\n", + "sok_df['Dataset'] = 'SoK'\n", + "\n", + "# 3. Combine into a single DataFrame\n", + "df = pd.concat([erc20_df, sok_df], ignore_index=True)\n", + "\n", + "# 4. Calculate percentage of invariants removed\n", + "df['percentage_removed'] = (1 - df['reduction_ratio']) * 100\n", + "\n", + "# 5. Prepare for plotting\n", + "sns.set_style(\"white\") # no grid lines\n", + "plt.figure(figsize=(3.4, 2.4)) # adjust for double-column width (~3.4 inches)\n", + "\n", + "# 6. Plot a simple box plot\n", + "sns.boxplot(\n", + " x='Dataset',\n", + " y='percentage_removed',\n", + " data=df,\n", + " palette=\"Set2\",\n", + " width=0.5\n", + ")\n", + "\n", + "# 7. Remove top/right spines and finalize styling\n", + "sns.despine() \n", + "plt.ylim(0, 100)\n", + "plt.xlabel(\"\") # remove or keep as desired\n", + "plt.ylabel(\"Invariants Removed (%)\")\n", + "plt.tight_layout()\n", + "\n", + "# 8. Save or display\n", + "plt.savefig(\"boxplot_invariants_removed.png\", dpi=300)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# 1. Load JSON data\n", + "with open('erc20.json', 'r') as f:\n", + " erc20_data = json.load(f)\n", + "with open('sok.json', 'r') as f:\n", + " sok_data = json.load(f)\n", + "\n", + "# 2. Convert to DataFrame and label each row with its dataset\n", + "erc20_df = pd.DataFrame(erc20_data)\n", + "erc20_df['Dataset'] = 'ERC20'\n", + "sok_df = pd.DataFrame(sok_data)\n", + "sok_df['Dataset'] = 'SoK'\n", + "\n", + "# 3. Combine into a single DataFrame\n", + "df = pd.concat([erc20_df, sok_df], ignore_index=True)\n", + "\n", + "# 4. Calculate percentage of invariants removed\n", + "df['percentage_removed'] = (1 - df['reduction_ratio']) * 100\n", + "\n", + "# 5. Set styles for small figure and minimal clutter\n", + "sns.set_context(\"paper\", font_scale=1.1) # smaller font\n", + "sns.set_style(\"white\") # remove background grid lines\n", + "\n", + "# 6. Create the figure sized for a double-column format (~3.4 inches wide)\n", + "plt.figure(figsize=(3.4, 2.4))\n", + "\n", + "# 7. Plot a simple box plot with a professional blue color\n", + "sns.boxplot(\n", + " x='Dataset',\n", + " y='percentage_removed',\n", + " data=df,\n", + " width=0.5,\n", + " color='#639CD9', # professional blue fill\n", + " linewidth=1.2 # slightly thicker line for clarity\n", + ")\n", + "\n", + "# 8. Finalize layout and styling\n", + "sns.despine() # remove top/right spines\n", + "plt.ylim(0, 100)\n", + "plt.xlabel(\"\") # remove x-axis label if desired\n", + "plt.ylabel(\"Invariants Removed (%)\")\n", + "plt.tight_layout()\n", + "\n", + "# 9. Save or display\n", + "plt.savefig(\"boxplot_invariants_removed.pdf\", dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# 1. Load JSON data\n", + "with open('erc20.json', 'r') as f:\n", + " erc20_data = json.load(f)\n", + "with open('sok.json', 'r') as f:\n", + " sok_data = json.load(f)\n", + "\n", + "# 2. Convert to DataFrame and label each row with its dataset\n", + "erc20_df = pd.DataFrame(erc20_data)\n", + "erc20_df['Dataset'] = 'ERC20'\n", + "sok_df = pd.DataFrame(sok_data)\n", + "sok_df['Dataset'] = 'SoK'\n", + "\n", + "# 3. Combine into a single DataFrame\n", + "df = pd.concat([erc20_df, sok_df], ignore_index=True)\n", + "\n", + "# 4. Calculate percentage of invariants removed\n", + "df['percentage_removed'] = (1 - df['reduction_ratio']) * 100\n", + "\n", + "# 5. Set styles for small figure and minimal clutter\n", + "sns.set_context(\"paper\", font_scale=1)\n", + "sns.set_style(\"white\") # clean white background\n", + "\n", + "# 6. Create the figure sized for a double-column format (~3.4 inches wide)\n", + "plt.figure(figsize=(3.4, 2.4))\n", + "\n", + "# 7. Plot a box plot with professional blue fill and black outlines\n", + "ax = sns.boxplot(\n", + " x='Dataset',\n", + " y='percentage_removed',\n", + " data=df,\n", + " width=0.5,\n", + " boxprops={'facecolor': '#639CD9', 'edgecolor': 'black', 'linewidth': 0.9},\n", + " whiskerprops={'color': 'black', 'linewidth': 0.9},\n", + " capprops={'color': 'black', 'linewidth': 0.9},\n", + " medianprops={'color': 'black', 'linewidth': 0.9},\n", + " flierprops={'markeredgecolor': 'black', 'markersize': 3}\n", + ")\n", + "\n", + "# 8. Ensure all four spines of the plot are visible with black borders\n", + "for spine in ax.spines.values():\n", + " spine.set_visible(True)\n", + " spine.set_linewidth(0.5)\n", + " spine.set_edgecolor('black')\n", + "\n", + "plt.ylim(0, 100)\n", + "plt.xlabel(\"\")\n", + "plt.ylabel(\"Invariants Removed (%)\")\n", + "plt.tight_layout()\n", + "\n", + "# 9. Save or display the figure\n", + "plt.savefig(\"boxplot_invariants_removed.pdf\", dpi=300)\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.17" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20.json b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20.json index 535d60f..96dcd77 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output_light/erc20.json +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/erc20.json @@ -142,5 +142,149 @@ "total_parsing_time": 0.0016143321990966797, "total_reduction_time": 0.38513708114624023, "contract": "./invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json" + }, + { + "predicates_before_reduction": 95, + "predicates_after_reduction": 81, + "reduction_ratio": 0.8526315789473684, + "total_parsing_time": 0.0010387897491455078, + "total_reduction_time": 0.17291474342346191, + "contract": "./invariants/erc20/0x1600c2e08acb830f2a4ee4d34b48594dade48651-TurexToken.inv.json" + }, + { + "predicates_before_reduction": 78, + "predicates_after_reduction": 64, + "reduction_ratio": 0.8205128205128205, + "total_parsing_time": 0.0007481575012207031, + "total_reduction_time": 0.10024333000183105, + "contract": "./invariants/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-PhunToken.inv.json" + }, + { + "predicates_before_reduction": 175, + "predicates_after_reduction": 140, + "reduction_ratio": 0.8, + "total_parsing_time": 0.0018973350524902344, + "total_reduction_time": 0.29102134704589844, + "contract": "./invariants/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-TetherUS.inv.json" + }, + { + "predicates_before_reduction": 158, + "predicates_after_reduction": 132, + "reduction_ratio": 0.8354430379746836, + "total_parsing_time": 0.0011055469512939453, + "total_reduction_time": 0.24414348602294922, + "contract": "./invariants/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8-PIXIUFINANCE.inv.json" + }, + { + "predicates_before_reduction": 108, + "predicates_after_reduction": 75, + "reduction_ratio": 0.6944444444444444, + "total_parsing_time": 0.0011301040649414062, + "total_reduction_time": 0.13229751586914062, + "contract": "./invariants/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-Soya.inv.json" + }, + { + "predicates_before_reduction": 94, + "predicates_after_reduction": 74, + "reduction_ratio": 0.7872340425531915, + "total_parsing_time": 0.0008113384246826172, + "total_reduction_time": 0.11466646194458008, + "contract": "./invariants/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-Token.inv.json" + }, + { + "predicates_before_reduction": 163, + "predicates_after_reduction": 136, + "reduction_ratio": 0.8343558282208589, + "total_parsing_time": 0.0011243820190429688, + "total_reduction_time": 0.24428343772888184, + "contract": "./invariants/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a-CloudProtocol.inv.json" + }, + { + "predicates_before_reduction": 282, + "predicates_after_reduction": 221, + "reduction_ratio": 0.7836879432624113, + "total_parsing_time": 0.0016093254089355469, + "total_reduction_time": 0.39635229110717773, + "contract": "./invariants/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54-DOGEVIPER.inv.json" + }, + { + "predicates_before_reduction": 145, + "predicates_after_reduction": 122, + "reduction_ratio": 0.8413793103448276, + "total_parsing_time": 0.0010471343994140625, + "total_reduction_time": 0.21072649955749512, + "contract": "./invariants/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-KPopKorea.inv.json" + }, + { + "predicates_before_reduction": 79, + "predicates_after_reduction": 73, + "reduction_ratio": 0.9240506329113924, + "total_parsing_time": 0.0007355213165283203, + "total_reduction_time": 0.11925649642944336, + "contract": "./invariants/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-FXCO.inv.json" + }, + { + "predicates_before_reduction": 111, + "predicates_after_reduction": 89, + "reduction_ratio": 0.8018018018018018, + "total_parsing_time": 0.0007739067077636719, + "total_reduction_time": 0.14775395393371582, + "contract": "./invariants/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7-WrappedHeC.inv.json" + }, + { + "predicates_before_reduction": 535, + "predicates_after_reduction": 405, + "reduction_ratio": 0.7570093457943925, + "total_parsing_time": 0.0028722286224365234, + "total_reduction_time": 0.861752986907959, + "contract": "./invariants/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-YakuzaInu.inv.json" + }, + { + "predicates_before_reduction": 181, + "predicates_after_reduction": 147, + "reduction_ratio": 0.8121546961325967, + "total_parsing_time": 0.0013947486877441406, + "total_reduction_time": 0.3249330520629883, + "contract": "./invariants/erc20/0xc382e04099a435439725bb40647e2b32dc136806-Cogecoin.inv.json" + }, + { + "predicates_before_reduction": 164, + "predicates_after_reduction": 131, + "reduction_ratio": 0.7987804878048781, + "total_parsing_time": 0.0016646385192871094, + "total_reduction_time": 0.21308040618896484, + "contract": "./invariants/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-DFV.inv.json" + }, + { + "predicates_before_reduction": 182, + "predicates_after_reduction": 146, + "reduction_ratio": 0.8021978021978022, + "total_parsing_time": 0.0022051334381103516, + "total_reduction_time": 0.30199670791625977, + "contract": "./invariants/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-TokenMintERC20MintableToken.inv.json" + }, + { + "predicates_before_reduction": 160, + "predicates_after_reduction": 128, + "reduction_ratio": 0.8, + "total_parsing_time": 0.0010983943939208984, + "total_reduction_time": 0.24736499786376953, + "contract": "./invariants/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-YCCToken.inv.json" + }, + { + "predicates_before_reduction": 172, + "predicates_after_reduction": 133, + "reduction_ratio": 0.7732558139534884, + "total_parsing_time": 0.0011441707611083984, + "total_reduction_time": 0.2437911033630371, + "contract": "./invariants/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c-EnergyEfficientBitcoin.inv.json" + }, + { + "predicates_before_reduction": 206, + "predicates_after_reduction": 158, + "reduction_ratio": 0.7669902912621359, + "total_parsing_time": 0.001528024673461914, + "total_reduction_time": 0.4394099712371826, + "contract": "./invariants/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-EmaxClassic.inv.json" } ] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output_light/sok.json b/use-cases/dynamically-mined-invariant-denoising/output_light/sok.json index 3feba67..f22b64d 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output_light/sok.json +++ b/use-cases/dynamically-mined-invariant-denoising/output_light/sok.json @@ -78,5 +78,85 @@ "total_parsing_time": 0.0005207061767578125, "total_reduction_time": 0.0667576789855957, "contract": "./invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json" + }, + { + "predicates_before_reduction": 1491, + "predicates_after_reduction": 1193, + "reduction_ratio": 0.8001341381623072, + "total_parsing_time": 0.0072290897369384766, + "total_reduction_time": 4.825824499130249, + "contract": "./invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json" + }, + { + "predicates_before_reduction": 88, + "predicates_after_reduction": 80, + "reduction_ratio": 0.9090909090909091, + "total_parsing_time": 0.0007114410400390625, + "total_reduction_time": 0.11196732521057129, + "contract": "./invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json" + }, + { + "predicates_before_reduction": 45, + "predicates_after_reduction": 41, + "reduction_ratio": 0.9111111111111111, + "total_parsing_time": 0.0006175041198730469, + "total_reduction_time": 0.07264113426208496, + "contract": "./invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json" + }, + { + "predicates_before_reduction": 708, + "predicates_after_reduction": 554, + "reduction_ratio": 0.7824858757062146, + "total_parsing_time": 0.004505157470703125, + "total_reduction_time": 1.344709873199463, + "contract": "./invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json" + }, + { + "predicates_before_reduction": 141, + "predicates_after_reduction": 141, + "reduction_ratio": 1.0, + "total_parsing_time": 0.0012536048889160156, + "total_reduction_time": 0.2701578140258789, + "contract": "./invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json" + }, + { + "predicates_before_reduction": 39, + "predicates_after_reduction": 39, + "reduction_ratio": 1.0, + "total_parsing_time": 0.0004582405090332031, + "total_reduction_time": 0.045722007751464844, + "contract": "./invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json" + }, + { + "predicates_before_reduction": 330, + "predicates_after_reduction": 316, + "reduction_ratio": 0.9575757575757575, + "total_parsing_time": 0.0018243789672851562, + "total_reduction_time": 0.874647855758667, + "contract": "./invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json" + }, + { + "predicates_before_reduction": 299, + "predicates_after_reduction": 254, + "reduction_ratio": 0.8494983277591973, + "total_parsing_time": 0.002034425735473633, + "total_reduction_time": 0.5824229717254639, + "contract": "./invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json" + }, + { + "predicates_before_reduction": 468, + "predicates_after_reduction": 413, + "reduction_ratio": 0.8824786324786325, + "total_parsing_time": 0.0035398006439208984, + "total_reduction_time": 1.1016335487365723, + "contract": "./invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json" + }, + { + "predicates_before_reduction": 56, + "predicates_after_reduction": 56, + "reduction_ratio": 1.0, + "total_parsing_time": 0.0004405975341796875, + "total_reduction_time": 0.06987667083740234, + "contract": "./invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json" } ] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/reader.py b/use-cases/dynamically-mined-invariant-denoising/reader.py index 6489fb7..cf16e05 100644 --- a/use-cases/dynamically-mined-invariant-denoising/reader.py +++ b/use-cases/dynamically-mined-invariant-denoising/reader.py @@ -64,71 +64,72 @@ def parse_original(input: dict, list): def reduce_json(path: str, contract_addr: str): - """Reduces the invariants found in the path and outputs a new json""" - f = open(path) - data = json.load(f) - total_list = [] - total_list_red = [] - output_path= output_folder.replace("./output/", "").rstrip("/") + ".json" - - output_data: dict = {"contract": path } - total_parsing_time = 0 - total_reducing_time = 0 - for entry in data: - pre_conditions = entry["preconditions"] - post_conditions = entry["postconditions"] - total_list += pre_conditions + post_conditions - parsing_time_start = time.time() - parsed_preconditions = parse_daikon_list(pre_conditions) - parsed_postconditions = parse_daikon_list(post_conditions) - parsing_time_end = time.time() - total_parsing_time += (parsing_time_end - parsing_time_start) - category_preconditions_dict, parsed_preconditions_dict = parsed_to_dict(parsed_preconditions ) - category_postconditions_dict, parsed_postconditions_dict = parsed_to_dict(parsed_postconditions) - reducing_time_start = time.time() - strongest_preconditions = find_strongest_in_dict(category_preconditions_dict, contract_addr, parsed_preconditions_dict,) - strongest_postconditions = find_strongest_in_dict(category_postconditions_dict, contract_addr, parsed_postconditions_dict) - reducing_time_end = time.time() - total_reducing_time += (reducing_time_end - reducing_time_start) - reduced_preconditions = parse_original(parsed_preconditions_dict, strongest_preconditions) - reduced_postconditions = parse_original(parsed_postconditions_dict, strongest_postconditions) - entry["postconditions"] = reduced_postconditions - entry["preconditions"] =reduced_preconditions - total_list_red += reduced_postconditions + reduced_preconditions + """Reduces the invariants found in the path and outputs a new json""" + f = open(path) + data = json.load(f) + total_list = [] + total_list_red = [] + output_path= output_folder.replace("./output/", "").rstrip("/") + ".json" - json_out = open(f"{output_folder}/{contract_addr}.json", "w") - json.dump(data, json_out, indent=4) - json_out.close() - output_data = { - "predicates_before_reduction": len(total_list), - "predicates_after_reduction": len(total_list_red), - "reduction_ratio": len(total_list_red) / len(total_list), - "total_parsing_time": total_parsing_time, - "total_reduction_time": total_reducing_time, - "contract": path -} - - - -# Check if the output file exists and load existing data - if os.path.exists(output_path): + output_data: dict = {"contract": path } + total_parsing_time = 0 + total_reducing_time = 0 + for entry in data: + pre_conditions = entry["preconditions"] + post_conditions = entry["postconditions"] + total_list += pre_conditions + post_conditions + parsing_time_start = time.time() + parsed_preconditions = parse_daikon_list(pre_conditions) + parsed_postconditions = parse_daikon_list(post_conditions) + parsing_time_end = time.time() + total_parsing_time += (parsing_time_end - parsing_time_start) + category_preconditions_dict, parsed_preconditions_dict = parsed_to_dict(parsed_preconditions ) + category_postconditions_dict, parsed_postconditions_dict = parsed_to_dict(parsed_postconditions) + reducing_time_start = time.time() + strongest_preconditions = find_strongest_in_dict(category_preconditions_dict, contract_addr, parsed_preconditions_dict,) + strongest_postconditions = find_strongest_in_dict(category_postconditions_dict, contract_addr, parsed_postconditions_dict) + reducing_time_end = time.time() + total_reducing_time += (reducing_time_end - reducing_time_start) + reduced_preconditions = parse_original(parsed_preconditions_dict, strongest_preconditions) + reduced_postconditions = parse_original(parsed_postconditions_dict, strongest_postconditions) + entry["postconditions"] = reduced_postconditions + entry["preconditions"] =reduced_preconditions + total_list_red += reduced_postconditions + reduced_preconditions + + json_out = open(f"{output_folder}/{contract_addr}.json", "w") + json.dump(data, json_out, indent=4) + json_out.close() + output_data = { + "predicates_before_reduction": len(total_list), + "predicates_after_reduction": len(total_list_red), + "reduction_ratio": len(total_list_red) / len(total_list), + "total_parsing_time": total_parsing_time, + "total_reduction_time": total_reducing_time, + "contract": path + } + + # Check if the output file exists and load existing data + + if os.path.exists(output_path): + print(f"+++ Output path: {output_path}") with open(output_path, "r") as f: try: all_output_data = json.load(f) except json.JSONDecodeError: # In case of an empty or malformed file, start with an empty list all_output_data = [] - else: + else: all_output_data = [] -# Append the new data - all_output_data.append(output_data) + # Append the new data + all_output_data.append(output_data) # Write the updated list back to the file with indentation - with open(output_path, "w") as f: + with open(output_path, "w") as f: + print(f"+++ Writing output to: {output_path}") json.dump(all_output_data, f, indent=4) - + From 9d04584e214755d4afb2d15c2aa07698dee21c60 Mon Sep 17 00:00:00 2001 From: Mojtaba Eshghie Date: Sat, 16 Aug 2025 11:08:25 +0200 Subject: [PATCH 5/7] Feature #67: Added new analysis for the light version. --- .../analysis_light.ipynb | 157 +++++++++--------- .../boxplot_invariants_removed.png | Bin 0 -> 43088 bytes .../combined_reduction_ratios.png | Bin 0 -> 30313 bytes 3 files changed, 80 insertions(+), 77 deletions(-) create mode 100644 use-cases/dynamically-mined-invariant-denoising/boxplot_invariants_removed.png create mode 100644 use-cases/dynamically-mined-invariant-denoising/combined_reduction_ratios.png diff --git a/use-cases/dynamically-mined-invariant-denoising/analysis_light.ipynb b/use-cases/dynamically-mined-invariant-denoising/analysis_light.ipynb index 06095e2..0e56ad3 100644 --- a/use-cases/dynamically-mined-invariant-denoising/analysis_light.ipynb +++ b/use-cases/dynamically-mined-invariant-denoising/analysis_light.ipynb @@ -37,21 +37,37 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 11, "metadata": {}, "outputs": [ { - "ename": "FileNotFoundError", - "evalue": "[Errno 2] No such file or directory: 'erc20'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[3], line 68\u001b[0m\n\u001b[1;32m 64\u001b[0m plt\u001b[38;5;241m.\u001b[39mclf()\n\u001b[1;32m 67\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;18m__name__\u001b[39m \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m__main__\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m---> 68\u001b[0m \u001b[43mRQ1\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43merc20\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;66;03m# print(\"_______________________________________________________________\")\u001b[39;00m\n\u001b[1;32m 70\u001b[0m RQ1(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msok\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "Cell \u001b[0;32mIn[3], line 4\u001b[0m, in \u001b[0;36mRQ1\u001b[0;34m(file_path)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mRQ1\u001b[39m(file_path):\n\u001b[1;32m 2\u001b[0m \n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# Load data from JSON file\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mfile_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m 5\u001b[0m data \u001b[38;5;241m=\u001b[39m json\u001b[38;5;241m.\u001b[39mload(f)\n\u001b[1;32m 7\u001b[0m \u001b[38;5;66;03m# Flatten nested JSON structure\u001b[39;00m\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/IPython/core/interactiveshell.py:282\u001b[0m, in \u001b[0;36m_modified_open\u001b[0;34m(file, *args, **kwargs)\u001b[0m\n\u001b[1;32m 275\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m file \u001b[38;5;129;01min\u001b[39;00m {\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m}:\n\u001b[1;32m 276\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 277\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIPython won\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt let you open fd=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfile\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m by default \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 278\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mas it is likely to crash IPython. If you know what you are doing, \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 279\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124myou can use builtins\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m open.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 280\u001b[0m )\n\u001b[0;32m--> 282\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mio_open\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'erc20'" + "name": "stdout", + "output_type": "stream", + "text": [ + "Total Parsing Time: 0.05190396308898926\n", + "Total Reduction Time: 10.079729557037354\n", + "Average Parsing Time: 0.0014417767524719238\n", + "Average Reduction Time: 0.279992487695482\n", + "Average Reduction Ratio: 0.8\n", + "Average predicates removed: 35.166666666666664\n", + "Total predicates removed: 1266\n", + "Total Parsing Time: 0.04531979560852051\n", + "Total Reduction Time: 17.858713150024414\n", + "Average Parsing Time: 0.0022659897804260254\n", + "Average Reduction Time: 0.8929356575012207\n", + "Average Reduction Ratio: 0.91\n", + "Average predicates removed: 57.8\n", + "Total predicates removed: 1156\n" ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -117,35 +133,30 @@ " plt.grid(False)\n", "\n", " # Save and show the plot\n", - " plt.savefig(f'reduction_ratio_histogram_{file_path}.pdf', format='pdf', dpi=300)\n", + " plt.savefig(f'reduction_ratio_histogram_{file_path.replace(\"/\", \"_\").replace(\".json\", \"\")}.pdf', format='pdf', dpi=300)\n", " plt.clf()\n", "\n", "\n", "if __name__ == \"__main__\":\n", - " RQ1(\"erc20\")\n", + " RQ1(\"output_light/erc20.json\")\n", " # print(\"_______________________________________________________________\")\n", - " RQ1(\"sok\")" + " RQ1(\"output_light/sok.json\")" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 12, "metadata": {}, "outputs": [ { - "ename": "JSONDecodeError", - "evalue": "Expecting value: line 1 column 1 (char 0)", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[4], line 8\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# Load data from JSON files\u001b[39;00m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124merc20.json\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[0;32m----> 8\u001b[0m erc20_data \u001b[38;5;241m=\u001b[39m \u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msok.json\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m 10\u001b[0m sok_data \u001b[38;5;241m=\u001b[39m json\u001b[38;5;241m.\u001b[39mload(f)\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/__init__.py:293\u001b[0m, in \u001b[0;36mload\u001b[0;34m(fp, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload\u001b[39m(fp, \u001b[38;5;241m*\u001b[39m, \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, object_hook\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, parse_float\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 275\u001b[0m parse_int\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, parse_constant\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, object_pairs_hook\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw):\n\u001b[1;32m 276\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Deserialize ``fp`` (a ``.read()``-supporting file-like object containing\u001b[39;00m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;124;03m a JSON document) to a Python object.\u001b[39;00m\n\u001b[1;32m 278\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;124;03m kwarg; otherwise ``JSONDecoder`` is used.\u001b[39;00m\n\u001b[1;32m 292\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 293\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 294\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobject_hook\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobject_hook\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 295\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_float\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_float\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparse_int\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_int\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 296\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_constant\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_constant\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobject_pairs_hook\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobject_pairs_hook\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/__init__.py:357\u001b[0m, in \u001b[0;36mloads\u001b[0;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 352\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m kw[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mencoding\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 355\u001b[0m parse_int \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m parse_float \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 356\u001b[0m parse_constant \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_pairs_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kw):\n\u001b[0;32m--> 357\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_default_decoder\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 359\u001b[0m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;241m=\u001b[39m JSONDecoder\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/decoder.py:337\u001b[0m, in \u001b[0;36mJSONDecoder.decode\u001b[0;34m(self, s, _w)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecode\u001b[39m(\u001b[38;5;28mself\u001b[39m, s, _w\u001b[38;5;241m=\u001b[39mWHITESPACE\u001b[38;5;241m.\u001b[39mmatch):\n\u001b[1;32m 333\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Return the Python representation of ``s`` (a ``str`` instance\u001b[39;00m\n\u001b[1;32m 334\u001b[0m \u001b[38;5;124;03m containing a JSON document).\u001b[39;00m\n\u001b[1;32m 335\u001b[0m \n\u001b[1;32m 336\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 337\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraw_decode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43midx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_w\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mend\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 338\u001b[0m end \u001b[38;5;241m=\u001b[39m _w(s, end)\u001b[38;5;241m.\u001b[39mend()\n\u001b[1;32m 339\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m end \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(s):\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/decoder.py:355\u001b[0m, in \u001b[0;36mJSONDecoder.raw_decode\u001b[0;34m(self, s, idx)\u001b[0m\n\u001b[1;32m 353\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscan_once(s, idx)\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m--> 355\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m JSONDecodeError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpecting value\u001b[39m\u001b[38;5;124m\"\u001b[39m, s, err\u001b[38;5;241m.\u001b[39mvalue) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28mNone\u001b[39m\n\u001b[1;32m 356\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj, end\n", - "\u001b[0;31mJSONDecodeError\u001b[0m: Expecting value: line 1 column 1 (char 0)" - ] + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAJICAYAAADxUwLTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB08ElEQVR4nO3dd3xOd//H8feVHYKIFbVHCbVJ1CZUaXsrqba06KAoOrRK3XcVLbV3atWqltK0qS5KidFqzbpLK1bsErFiRfb5/eHO9RNJOCey83o+Hn1UzvW5zvlcl0TO+zrf8/3aDMMwBAAAAAAmOGR3AwAAAAByDwIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAMiT8ss6qXntdea11wPkRQQIAJbs27dP77zzjlq3bq06deqoXbt2GjFihE6dOpXdrWWYWbNmqXr16tndhiXbtm3To48+qlq1aqlPnz6p1uTE1+Xv76933303w/d7+PBhde/e/a4127dvV/Xq1VP8V6tWLbVs2VJDhw7V+fPnM6Sfnj17qmfPnhmyryRXr17V0KFDtWvXrkw9Tlp69uyZ4r3z8fFRgwYNFBAQoG+//dbyPnfv3q2+ffvavz59+rSqV6+u4ODgjGwdwH1yyu4GAOQey5Yt00cffaTGjRvr7bffVsmSJXXixAktXLhQ69at06effiofH5/sbvO+Pf3002rRokV2t2HJxIkTlZiYqPnz56tYsWLZ3Y5pgYGB8vDwyPD9/vTTT9qzZ4+p2vfff18PPfSQ/esbN25o9+7dmj9/vo4dO6agoKAM7y8jhIaG6ttvv9VTTz1l3zZy5Mgs7aFmzZrJjpmQkKDw8HAtWbJEQ4cOlaenp1q1amV6f0FBQQoLC7N/XbJkSa1cuVLly5fP0L4B3B8CBABTdu/erbFjx+r555/Xf/7zH/v2xo0bq127durcubP+/e9/54lPCr29veXt7Z3dbVgSGRkpX19fNW3aNLtbsaRmzZrZ3YKqVq2qevXqJdvWrFkzxcbG6pNPPtGRI0dUtWrV7GnOoqzu08PDI8V7J0ktW7ZUkyZNFBwcbClA3MnFxSXV/QPIXgxhAmDKwoULVahQIb311lspHvPy8tK7776rtm3bKioqStKtTyKXLVumf/3rX6pTp45at26tyZMnKyYmxv68d999V71799bKlSvVrl071alTR926ddOxY8e0ceNG/etf/1LdunX19NNPKzQ0NNnzevbsqa+++kpt2rRR/fr19cILL+jAgQPJ+tq5c6d69+4tX19f1apVS/7+/po1a5YSExMl/f/wiMWLF6tDhw6qW7euvv766xRDfU6ePKn+/furcePGqlu3rp599llt3rw52bH27dun3r17q3HjxmrQoIH69++vw4cP2x9PGi7z+++/6+WXX1bdunXVrFkzTZo0SQkJCXd9748fP67XX39dzZo1U7169dSzZ0/t3r072Wv4559/tGrVKlWvXl3bt2+/6/6SBAcHq2bNmvrzzz/17LPPqnbt2mrTpo0WLlxor3n00Uf1+uuvp3juk08+qVdffVXSrb/r+fPn64knnlCdOnVUr149devWTdu2bbPXz5o1S4888ogCAwPl5+en5s2b68qVKymGMJ0+fVpDhw5V8+bN9dBDD6lJkyYaOnSoLl++bK/x9/fXzJkzNWHCBDVt2lR16tRR7969dfz4cfuxAgMDJUnVq1fXrFmzTL0fdypcuLAkyWaz2bcdOnRI/fr1U4MGDdSgQQMNHDgwxfC9M2fOaNCgQWrYsKGaNWumxYsXp9h3an2lNsRs8+bN6tatm+rVq6fmzZvr/fff19WrV7V9+3b16tVLktSrVy/7sKU7hzDFxMTo448/VocOHVS7dm21b99e8+fPt/8MJD3nP//5j+bPn6/WrVurdu3a6tatm/bu3Zuet02S5OrqKhcXl2Tv3aVLlzR69Gi1adNGtWrVkp+fnwYOHKjTp09LuvVz/c033+iff/6xD1tKbQjT3X4ekvzwww/q1KmT6tSpo4cfflhDhgzRuXPn0v16ACRHgABwT4Zh6Ndff1WTJk3k7u6eas1jjz2mgQMHqkCBApJuDQsZN26c2rVrpzlz5uj555/X559/rgEDBiS7SXLPnj36/PPP9e6772rcuHEKCwtT3759NW7cOPXr109Tp07V2bNnNWTIkGTHCw0N1bRp0zRo0CBNmjRJly9fVo8ePRQRESFJOnDggF588UV5enpq2rRpmjNnjho1aqTAwECtWbMm2b5mzZqlV155RRMnTlSzZs2SPZaYmKh+/frp5s2bmjhxombPni1PT0+9+uqrOnHihKRb9x8kjbf/6KOPNGbMGJ09e1bdunVLNhxDkoYMGaKGDRtq7ty5euKJJ7RgwYK7DpE5cuSIAgICdPr0ab333nuaPHmybDabXnjhBe3YscM+xKNEiRJq1aqVVq5cmWw4zr0kJibqzTff1GOPPab58+erQYMGmjhxon755RdJUqdOnbR582Zdv37d/pywsDAdOHBATz75pCRp8uTJmj17tp599lktWLBAH374oSIjI/XGG2/o5s2b9uedOXNGmzdv1rRp0zR8+HAVKVIkWS83b95Ur169FBYWppEjR2rhwoXq1auXfvzxR02bNi1Z7dKlS3X06FGNGzdOY8aM0V9//aVhw4ZJujUErWvXrpKklStX6umnn77nexAfH2//LzIyUuvWrdPChQtVp04dVapUSZJ07NgxdevWTRcvXtSECRM0duxYnTp1St27d9fFixclSVFRUerRo4cOHTqkDz/8UCNGjFBQUJDp4VS327hxo/r166dixYpp+vTpGjJkiNavX6/BgwfroYce0vvvvy/p1s9aakOXDMNQ//79tWDBAj399NOaO3euOnTooOnTp6eoX7t2rTZs2KD33ntPU6dO1YULF/Taa6/dM9wahpHsvYuJidHRo0c1fPhw3bhxw/49YhiG+vXrp61bt2rIkCFauHChBg0apN9//93ey4ABA9SqVSuVKFFCK1euVOvWrVMc714/D9Ktq6VDhw5V+/bt9cknn2j48OHatm2b3n77bct/BwBSxxAmAPd0+fJlxcTEqGzZsqbqjxw5oq+++kpvv/22/YbIZs2aqWTJkho6dKi2bNliH9Zw48YNTZ8+XVWqVJEk7dixQytWrNCSJUvUpEkTSdKJEyc0YcIEXb161f6p8LVr1zR37lw1atRIkuw3dC9dulRDhgzRgQMH1LRpU02aNEkODg72HkJCQrR9+3Y9/vjj9n47duyYbBz57S5evKijR4/aT26SjhUYGKjY2FhJ0pQpU1ShQgXNnz9fjo6OkqTmzZvrkUce0cyZMzVjxgz7/p5++mkNHDhQktSkSROtX79emzZtUrdu3VI9fmBgoFxcXLR06VL7vQKtW7fWE088oYkTJ+qrr75SvXr15OLiIi8vL8vDPQzD0IABA+wn2Q0bNtTPP/+sTZs2qUWLFurUqZNmzZql9evXq3PnzpJufbpbuHBh+fv7S5IiIiI0ePDgZJ98u7q66rXXXtPBgwftPcXHx2vYsGH2v7M7HT9+XN7e3powYYLKlSsnSXr44Yf1559/2k8OkxQuXFizZ8+2v98nT57UrFmzdPny5WRD0My8Hy+++GKKbUWKFFHbtm31zjvv2L9/AgMD5e7uriVLltj/Lpo0aaJ27dppwYIFGjZsmL755hudOXNGP/zwg304Ud26dfXII4/cs487zZo1SzVq1FBgYKD9k3wXFxfNmDFD0dHR9v1XrVo11aFLW7Zs0W+//aapU6fav9+bNWsmNzc3zZgxQ7169dKDDz4o6dbfzcKFC+2v68aNGxo2bJhCQ0NVq1atNHvcuXNnisBqs9lUrVo1zZgxQ23atJF063vE3d092d9/48aNdfLkSa1cuVKSVL58eXl5eSUbtpR0RTOJmZ+H3bt3y83NTX379pWLi4skydPTU/v27ZNhGMmuigBIHwIEgHtKOkm716eRSZJO9m4/SU/6evjw4dq+fbv9ZLxIkSL28CBJxYsXl3TrpCuJp6enJCULEGXLlk12IlqyZEnVr19fO3fulCR17txZnTt3VkxMjI4dO6YTJ04oNDRUCQkJiouLS9ZXjRo10nwtxYsXV9WqVTVixAj9+uuvat68uVq2bKnhw4dLunWCs2/fPg0aNMj+Pkm3TnDbtGmTYqhT/fr1k33t7e2d4iTpdjt27FCbNm2S3Wjs5OSkxx9/XB9//LFu3LihggULpvl8M27vKSmIJPVUrlw5NWjQQKtXr7YHiB9//FEdOnSwn5xNmTJF0q0hKkePHtWJEye0ceNGSbKHrCR3e69r1Kih5cuXKzExUcePH9eJEyd05MgRHT16VPHx8clqa9eunez9TgoMN2/eVNGiRS29/tGjR+uhhx5SYmKiNmzYoAULFqhnz5567bXXktVt27ZNfn5+cnNzs/fj4eGhRo0a6bfffpMk7dq1S+XLl092Ql+6dGnLwS46Olr79+/Xa6+9luyE97HHHtNjjz0mSSmubt1px44dcnJyUocOHZJt79Spk2bMmKEdO3bYA0TVqlWTfY+VKlVKkpJdQUrNQw89pNGjR0u6FRKmT5+uuLg4TZ8+XZUrV062v6VLl8owDJ0+fVonTpzQ0aNH9ccff6T4HrnXa7rXz4Ovr6+mTZumJ554Qo8++qhatWql5s2b39e9GACSI0AAuKciRYqoYMGCOnPmTJo1UVFRiouLU5EiRXTlyhVJUokSJZLVODk5qWjRorp27Zp9W1oz8CQNhUpL0gnO7YoVK6a///5b0q0TsA8//FDffvut4uPjVbZsWdWvX19OTk4p5pm/27FsNpsWLVqkOXPm6Oeff9aqVavk7Oysdu3aafTo0YqOjpZhGPbgc7vixYsne62S5ObmluxrBweHu857f+XKlTT3bRiGrl+/ft8B4l49Pfnkk/rwww91+fJl+8nfRx99ZH983759Gj16tPbt2yd3d3dVrVpVDzzwgKSUc/rfq9fFixdr7ty5ioyMVPHixVWrVi25u7uneB/vHEqXdJXg9rH9ZlWqVEm1a9eWdCu4Ojs7KzAwUK6ursmmFI2MjNTq1au1evXqFPvw8vKSdOvvK7UAU6JECV24cMF0T1euXJFhGPc1o1ZSL7cHraReJCV7T9P7fhYsWND+3km33r9OnTrp5ZdfVnBwsP19kaTvvvvOPiTR09NTNWrUSPG9Z+Y13evnoX79+po/f76WLFmixYsXa/78+SpevLj69++fZVPcAnkd90AAMKV58+bavn17spugb/fll1/q4Ycf1t9//20f237nHPpxcXG6fPmy5U+IU3P7TbVJLly4YD/hGjt2rNauXavp06frjz/+0Pr16zVp0iQ5OVn/3KRUqVIaNWqUfv31V61atUq9e/fWunXrNH36dBUqVEg2my3Vk8Pz58/br56kV5EiRdLct6QMeS/vpWPHjrLZbFq/fr1Wr16tMmXKqGHDhpKk69evq0+fPipQoIB+/PFH/fHHH/rqq6/SHBJ2N99//73Gjx+vV155Rb///ru2bt2qefPmqWLFihn8iu7u1VdflY+Pj2bOnKlDhw7ZtxcqVEiPP/64vvrqqxT/LVq0SNKtv4/U/r4iIyNTbLvzit7tV6I8PDxks9l06dKlZDUxMTHavHlzqvu7U5EiRXT58uUUx0m6TygzvneKFy+u999/X2fPntXYsWPt23ft2qVhw4apffv22rJli7Zv364lS5ZYvjJj9uehRYsWWrhwoXbu3Km5c+eqWrVqGjNmzH3dGA7g/xEgAJjy8ssvKzIyUtOnT0/x2Pnz57Vo0SJVrVpVDz30kPz8/CTdGupyux9//FEJCQn2k8/7cfz48WRDOM6dO6c9e/bY75vYvXu3fYrZpCsMf/31ly5dumTpU+o9e/aoadOm2rt3r2w2m2rUqKHBgwerWrVqOnPmjAoUKKBatWppzZo1yU7Url27pk2bNt33a/X19dXGjRuT3cSckJCgH3/8UbVr17YPI8pMScOxNmzYoLVr16pTp072YTVHjx5VZGSkevXqpapVq9o/ud6yZYska1cEdu/ercKFC6tPnz72T66T1mSwemUhqY/0cHJy0qhRoxQfH68xY8bYt/v5+enIkSOqUaOGateurdq1a6tWrVpasmSJfv75Z0m37tk4ffq09u3bZ3/epUuX9N///jfZMTw8PFLMCvTHH3/Y/1ywYEHVqFHDPhQsyZYtW9S3b19FRESkuLJwJz8/P8XHx+unn35Ktv27776TpAz5OUxNhw4d1KJFC/3www/24Yx79uxRYmKiXnvtNfvVw4SEBPvQr6S/33v9vZn5eZgwYYKeeuopGYYhd3d3tWnTxn6D/d2uogIwjyFMAEypV6+e3njjDU2fPl1hYWHq3LmzihYtqsOHD2vhwoWKiYmxh4uqVauqS5cumjlzpm7evClfX1+FhoYqMDBQjRs3zpBF2pJmmBk8eLAcHR0VGBioIkWK2Ico1KlTR2vWrNEXX3yhKlWq6MCBA5ozZ45sNts9x3XfrmbNmnJzc9PQoUP12muvqXjx4vrtt98UGhpqn0bz7bffVu/evdW3b18999xziouL0/z58xUbG2u/YTq9Bg0apC1btqhXr17q27evnJ2d9fnnn+vUqVNasGDBfe3bik6dOun1119XQkKCfWYd6dbwHw8PD82dO1dOTk5ycnLS2rVr9dVXX0m69xj629WpU0dffPGFxo8frzZt2igiIkILFy7UhQsXUszYdC9J98r88MMPqlu3rv2mbLPq16+vTp066dtvv9WaNWvUsWNHDRgwQN26dVO/fv3UvXt3ubq6auXKlVq/fr1mzpwp6dZwr6VLl2rQoEEaPHiwPDw8NGfOnBQBqHXr1vrxxx9Vt25dVahQQcHBwfZZvZK8/vrrevXVV/XWW2+pc+fOunDhgqZOnap27dqpWrVqOnjwoCRp06ZNKlKkSIpFHFu2bKnGjRvrvffe07lz5+Tj46MdO3bok08+UZcuXTJ1zYh///vf6tSpk8aMGaNvvvlGderUkSR98MEHeuqpp3TlyhUtW7bMPvVyVFSUPDw8VLhwYV24cEGbN29O9X4ZMz8PDz/8sBYvXqx3331XnTp1UlxcnBYsWCBPT089/PDDmfaagfyEKxAATHv11Vc1f/58SbemK+3bt68+//xztW7dWqtWrUp2M/TYsWM1cOBAff/99+rbt6+WLVumXr166ZNPPrmvT4eTPPDAA3r55Zf10Ucf6d///rcqVqyoFStW2IcMvfvuu2rXrp2mT5+ufv36KSgoSK+++qqeeeYZ7dmzx/QN4a6urlq0aJEefPBBjR07Vr1799aGDRv0wQcfKCAgQNKtmXgWL16s6OhovfXWWxoxYoRKlSqlL7/8UtWqVbuv1/nggw9q+fLlKlasmIYPH6533nlHhmFo6dKlWbpoXKtWrVSoUCHVrl3bPq2pdGtYz+zZs2UYht544w0NHTpUZ86c0eeff66CBQtq165dpo/RpUsXDRw4UGvWrNErr7yimTNnqlGjRvrggw8UGRl5z5uGb9e+fXvVrl1b7777brJ1LawYMmSIChYsqIkTJ+rmzZvy8fHRsmXLZLPZNHToUL3++us6f/68Pv74Y7Vv317SrZvQP/30U/n6+mrs2LH697//rSZNmthnI0oyfPhwtWnTRhMmTNDrr7+uAgUKpJhmtE2bNpo7d65OnjypgQMHasaMGfrXv/6lSZMmSbr1vfHEE09o2bJlKaY5lm7dvzNv3jx169ZNS5YsUd++ffXTTz/prbfeSnYPS2aoXLmyevbsqYMHD+qLL75Q48aN9f7772vPnj165ZVXNH78eD3wwAP29TqS1nEICAhQmTJlNHDgQK1atSrFfs38PLRq1UqTJ0/W4cOHNWjQIL311ltyd3fX0qVL73tIIYBbbMbd7t4DgBzo3Xff1Y4dOxQSEpLdrQAAkO9wBQIAAACAaQQIAAAAAKYxhAkAAACAaVyBAAAAAGAaAQIAAACAaQQIAAAAAKbl+4Xk9uzZI8Mw5OzsnN2tAAAAANkiLi5ONptN9evXv2dtvg8QhmGI+8gBAACQn1k5H873ASLpykPt2rWzuRMAAAAge+zbt890LfdAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAHKt6OjoTKnN7PrM7gXITE7Z3cDt5s2bp19//VWfffZZmjWXL1/WmDFjtGXLFtlsNj3++OMaOnSo3N3ds7BTAACQXcLCwhQcHKyQkBBFR0fLzc1N/v7+CggIUJUqVdJdm9n1md0LkFVshmEY2d2EJC1btkxjxoxRo0aN7hogevbsqZs3b2r06NG6evWq/vOf/8jX11cTJkxI13H37dsnSapdu3a6ng8AALJOSEiIxo0bp/j4+BSPOTk5afjw4fL397dcm9n1md0LcL+snBNne4A4d+6cRo4cqe3bt8vb21vFixdPM0Ds2bNH3bp10+rVq+3J+9dff1WfPn20efNmlSpVyvLxCRAAAOQOYWFh6t+/f6on1UmcnJw0b948GYZhurZy5cqW9m21PrN7ATKClXPibB/C9Pfff8vZ2VnfffedPv74Y/3zzz9p1u7atUslSpRIdtnOz89PNptNu3fv1mOPPZYVLQMAkGsYhqGYmJjsbsMywzAUGxubbNuKFSvuelItSfHx8VqxYoUMwzBdO3DgQEv7tlqf2b2kl4uLi2w2W7qfnx1cXV1zXc95UbYHCH9/f9OX4M6dO6fSpUsn2+bi4iJPT0+dPXs23T0YhqGoqKh0Px8AgJwqJibmvk4yc5Lw8HBTdevXrze9z/Xr1+uvv/6ytG+r9ZndS37y8ccfy9XVNbvbyJMMwzAdzrI9QFhx8+ZNubi4pNju6up6X5+uxMXFKTQ09H5aAwAgR4qLi8vuFjKEYRgyO+rayuhswzCUmJhoad9W6zOzFysnfXnBwYMH5ezsnN1t5FmpnWenJlcFCDc3txSXM6Vbn64UKFAg3ft1dnZW1apV76c1AABypNs/YPuwcWm5OOaOk03DMBSXmPxEeuD3EYpJSLznc10db81Sb7Z2bJMHNPD785lWn5m9jHm49D3r0uLsYMsV4SM2wdCI7bdGmlSvXp0rEJnkyJEjpmtzVYDw9vZOcSkwNjZWkZGRKlmyZLr3a7PZ7iuAAACQUzk4/P+STy6ONvsJbW7gdsfXTct7aeOxC/d8XrPyXjIk07WFXJws7dtqfWb3kvf9f5hyd3eXm9ud3xnICFbCZO75V0SSr6+vwsPDdeLECfu2HTt2SJIaNmyYXW0BAIAs0PHBUnJ0uPtJjqODTR0fLGWp1uq+c1ovQFbL0QEiISFB58+ft6++WLduXTVo0ECDBw/W3r17tW3bNr3//vvq3LlzuqZwBQAAuUcFzwIa6FcpzZNrRwebBvpVUnnPApZqre47p/UCZLUcfd3r7Nmzatu2rcaNG6eAgADZbDYFBgZq9OjReuGFF+Tq6qoOHTpo+PDh2d0qAADIAs3KF1O5wu5ac/ictp66pJj4RLk6OahZOS91fLBUspNqK7WZXZ/ZvQBZKdsXkstuLCQHAMjLoqOj9fLLL0uSJjR9IFfdA2FGbHyiXJzMvSYrtZldn9m95CUxCYka9tsZSdKiRYu4ByKTWDknzp/fiQAAIE+wclJt9QQ8M+szuxcgM/HdCAAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAEAqYuITMrUeyK2csrsBAACAnOJEZJTWHD6n305dUkx8olydHNS0nJc6PlhKFTwL3Hc9kBcQIAAAACRtPXlRH+84poREw74tJj5RG49d0JYTFzXQr5KalS+W7nogr2AIEwAAyPdOREalCAO3S0g09PGOYzoZGZWueiAvIUAAAIB8b83hc2mGgSQJiYbWHD6XrnogLyFAAACAfO+3U5dM1W39X53VeiAvIUAAAIB8LSY+QTHxiSZrE3UtOt5SfazJWiC3IEAAAIB8zdXJUa5O5k6JXJ0cVMjNyVK9i8laILfgOxoAAOR7Tct5mapr9r86q/VAXkKAAAAA+V7HB0vJ0cF21xpHB5s6PlgqXfVAXkKAAAAA+V4FzwIa6FcpzVDg6GDTQL9KKv+/xeGs1gN5CQvJAQAASGpWvpjKFXbXmsPntPW2laWb/W9l6TvDgNV6IK8gQAAAAPxPec8C6udbSf18Kyk2PvGeN0BbrQfyAr7LAQAAUmE1DBAekF/wnQ4AAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAeRQ0dHRmVILAABwP5yyuwEA/y8sLEzBwcEKCQlRdHS03Nzc5O/vr4CAAFWpUiXV2nXr1ik+Pl5OTk5q3759qrUAAAAZhSsQQA4REhKi/v37a/Xq1fYrCtHR0Vq9erX69++vkJCQVGvj4+MlSfHx8anWAgAAZCSuQAA5QFhYmMaNG2cPA3eKj4/XuHHjVLFiRRmGYbq2cuXKmdk2AADIh7gCAeQAwcHBaQaCJPHx8QoODrZUCwAAkNEIEEAOYHbI0YYNGyzVAgAAZDSGMAHZLDo62vQsSlZnZoqJiZGrq2t6WwMAAEiBKxBANnNzc5Obm1um1BIeAABARiNAADmAv7+/qbq2bdtaqgUAAMhoBAggBwgICJCT091HFDo5OSkgIMBSLQAAQEYjQAA5QJUqVTR8+PA0g4GTk5OGDx+uypUrW6oFAADIaNxEDeQQ/v7+qlixooKDg7Vhwwb7StRt27ZVQEBAskBwe+3atWvtK1E/+uijKWoBAAAyEgECyEEqV66sIUOGaMiQIfecQclKLQDglpj4BLk6OWZ3GzmmDyA9CBBADmUlEBAeACBtJyKjtObwOf126pJi4hPl6uSgpuW81PHBUqrgWSDN51k9yb9XfXr7AHIaAgQAAMiztp68qI93HFNComHfFhOfqI3HLmjLiYsa6FdJzcoXsz9m9STfbL3VPoCcjAABAADypBORUSlO2m+XkGjo4x3HVK6wu8p7FrB8km+23mofQE7HLEwAACBPWnP4XJon7UkSEg2tOXzO9En+ycgoSebDycn/XaEw2weQG3AFAgCAfCI2ITG7W8hSv528ZKpu68lLSjAMUyf5Pxw6p94NK+jHQ+Gm67edMt/Hiw0qmKrNT/Lb921uQIAAACAPM4z/P8kdsT08GzvJWoZhKMbkiWdMQqI2H79oqnbLiYs6FOOs8HBzoWDz8Qum6pL6GLr1H9lsNtPPyW9u/35G9mEIEwAAyHNsNpvpE3ErJ+yGYSgxMdHSiayVPggPyA24AgEAQB52+wnph4295eKYfz47XLg71tSVhZYVimnbqUumrli4OjpoUvOyemXVedP1D5crarqP3g0fuGddfhObkGi/ekbAyhkIEAAA5BMujg5yzUcB4vFq3vr15KW73qvg6GDTE9VKycEmbTx27+FGzcp7ydXRQU3Le5mu7/BgKdN95Ke/H+ReOeK7NDExUTNnzlSLFi1Ur149vfLKKzp16lSa9cePH1ffvn3VqFEjtWzZUjNnzlR8fHwWdgwAAHK6Cp4FNNCvkhwdUv/U2tHBpoF+lVTes4A6Plgqzbrb6zs+WEqSLNVb6QPIDXJEgJg9e7aWL1+uDz/8UCtWrFBiYqL69Omj2NjYFLVXrlzR888/r5s3b+rTTz/V1KlTtWbNGr3//vvZ0DkAAMjJmpUvpvHtasq/UnG5Ot067XF1cpB/peIa366mfV0Hqyf5VuvN9gHkBtk+hCk2NlaLFi3SkCFD1Lp1a0nStGnT1KJFC61bt05PPPFEsvpvvvlGUVFRmjFjhry8vCRJY8aM0XPPPacBAwaobNmyWf0SAABADlbes4D6+VZSP99Kio1PlItT6p+fNitfTOUKu2vN4XPaetvK0s3+t7L0nVcIrNab7QPI6dIVIG7evKldu3bp9OnTunbtmooWLaoyZcqoUaNGcnFxsbSvAwcO6MaNG2rSpIl9W+HChVWzZk3t3LkzRYA4ceKEKleubA8PklSzZk1J0q5duwgQAAAgTfc6abd6kp/eUEB4QG5mKUCEhoZq3rx52rBhg+Li4lI87u7urjZt2qhv377y8fExtc/w8Ft31ZcuXTrZ9pIlS9ofu3N7RESEEhIS5OjoKEn6559/JEkXL5qbwxkAAOBerJ7kEwqQX5gKENevX9eHH36oH3/8UY0bN9b777+v2rVrq2zZsnJ3d9eVK1d07tw57dq1S7/88oueeuopdezYUe+//74KFy58133fvHlTklJcuXB1ddWVK1dS1Hfs2FGzZ8/WuHHj9NZbbykqKkpjxoyRk5NTqqHGDMMwFBUVla7nAgCQk8XExGR3C0CGuXnzphITWZk6MxiGYXqaXFMB4sknn1S7du20adMmFS9ePMXjXl5e8vLyUo0aNdSzZ0/9888/WrRokTp37qyQkJC77tvNzU3SrXshkv4s3foHz93dPUV9xYoVNWPGDL3//vtatmyZChQooNdee01HjhxRoUKFzLycFOLi4hQaGpqu5wIAkJOl98M1ICc6ePCgnJ2ds7uNPMvsrQimAsSCBQtUqVIl0wcvU6aMRowYoeeff/6etUlDlyIiIlS+fHn79oiICFWvXj3V5/j7+8vf318RERHy9PRUfHy8xo8fr3Llypnu8XbOzs6qWrVqup4LAEBOxhUI5CXVq1eXq6trdreRJx05csR0rakAYSU83K5y5cr3rPHx8ZGHh4e2b99uDxBXr17V/v371aNHjxT1u3bt0owZM7R48WKVLFlSkrR69Wq5u7urQYMG6erTZrOpQAHmXgYA5D0ODozLR97h7u6ebMQKMo6VVb7TNQvTpUuXtHDhQv322286f/68FixYoPXr18vHx0ft2rWztC8XFxf16NFDkydPlpeXl8qUKaNJkybJ29tb7du3V0JCgi5duqRChQrJzc1NlStX1sGDBzVhwgT16tVLBw8e1JgxY9SvXz95eHik5+UAAAAAMMnyxxKnTp1Sp06d9OWXX6pUqVK6ePGiEhISdOzYMb3++uvatGmT5SZef/11de3aVe+99566d+8uR0dHLVy4UM7Ozjp79qyaN2+u1atXS7p1v8XcuXP1559/6oknntD48eM1aNAg9e/f3/JxAQAAAFhj+QrEhAkTVKxYMX322WcqUKCAatWqJUmaMmWKYmJiNHfuXPuCcGY5OjrqnXfe0TvvvJPisbJly+rgwYPJtjVo0EBffvml1dYBAAAA3CfLVyB+//13DRgwQIULF04xVurZZ5/V4cOHM6w5AAAAADlLuu6scnJK/cJFbGyspRswAAAAAOQulgNEo0aNNG/evGQLr9lsNiUmJuqLL75I90xIAAAAAHI+y/dAvP322+revbvat2+vxo0by2azaeHChQoLC9OJEye0fPnyzOgTAAAgS8XEJ8jVyTHT6oHcynKAqFatmr7++mvNmjVL27dvl6Ojo3777Tf5+vpqwoQJaS7+BgAAkNOdiIzSmsPn9NupS4qJT5Srk4OalvNSxwdLqYJnyjWjrNYDeYHlAPHNN9+oadOmmjJlSmb0AwAAkC22nryoj3ccU0KiYd8WE5+ojccuaMuJixroV0nNyhdLdz2QV1i+B+KDDz7Q3r17M6MXAACAbHEiMipFGLhdQqKhj3cc08nIqHTVA3mJ5QDh7e2t69evZ0YvAAAA2WLN4XNphoEkCYmG1hw+l656IC+xPITp2Wef1dixY7Vnzx5Vr15dBQsWTFHTuXPnjOgNAAAgS/x26pKpuq2nLqmfbyXL9UBeYjlAjB8/XpLSXAnaZrMRIAAAQK4RE5+gmPhEk7WJuhYTZ6k+Nj5RLk7pWnoLyJEsB4gNGzZkRh8AAADZwtXJUa5ODqZCgauTgwq5OluqJzwgr7EcIMqUKWP/882bN3X9+nV5enrK2dk5QxsDAADIKk3LeWnjsQv3rGtWzitd9UBekq5IvGvXLj3zzDNq2LChWrZsqTp16ujZZ5/Vtm3bMro/AACATNfxwVJydLDdtcbRwaaOD5ZKVz2Ql1gOEH/88YdefPFFXbt2TQMGDNDIkSP16quvKjIyUn369NGePXsyo08AAIBMU8GzgAb6VUozFDg62DTQr5LK/29xOKv1QF5ieQjT9OnT1ahRIy1cuFCOjv+/XPugQYPUu3dvzZo1S4sWLcrQJgEAADJbs/LFVK6wu9YcPqett60s3ex/K0vfGQas1gN5heUAsW/fPk2ZMiVZeJAkBwcH9ejRQ8OGDcuw5gAAALJSec8C6udbSf18K5maPclqPZAXWP4uL1iwoOLj41N9LD4+XoZx90VVAAAAcgOrYYDwgPzC8nd6gwYNNH/+fN28eTPZ9qioKM2fP1+NGjXKsOYAAAAA5CyWhzC99dZbeuqpp9S2bVu1bt1aJUqU0Pnz57Vp0yZFR0dr7NixmdEnAAAAgBzAcoCoWLGivvzyS82aNUubN2/WlStXVKRIEfn5+WnQoEGqWrVqZvQJAAAAIAcwFSCeeOIJTZgwQQ899JBWrVqlVq1aafr06ZncGgAAAICcxtQ9ECdOnNClS5ckScOHD9epU6cytSkAAAAAOZOpKxBVqlTRkCFDVK1aNRmGoVGjRsnDwyPVWpvNpk8//TRDmwQAAACQM5i6AjFx4kQ1btxYNptNNtutFRcNw0j1v8TExExtGAAAAED2MXUFolq1apo5c6YkycfHR6NGjVKdOnUytTEAAAAAOY/lWZgOHDhg//O1a9cUERGhcuXKydHRMcXq1AAAAADylnQtmbh9+3Y9/fTT8vPz07/+9S8dPnxYb7/9tsaPH5/R/QEAAADIQSwHiN9//129e/eWm5ubhgwZIsMwJN0a2rR06VItXrw4w5sEAAAAkDNYDhDTp09X27Zt9dlnn+mFF16wB4j+/furT58+CgoKyvAmAQAAAOQMlgNEaGionnrqKUmyz8iUpFmzZvrnn38ypjMAAAAAOY7lAFGoUCGdP38+1cfOnj2rQoUK3XdTAKTo6OhMqQUAALgflmdhatu2raZNm6Zq1aqpZs2akm5diQgPD9fcuXPVunXrjO4RyDfCwsIUHByskJAQRUdHy83NTf7+/goICFCVKlXSXQsAAJBRLF+BePvtt1WsWDE988wz9rDw1ltvqUOHDrLZbHrrrbcyukcgXwgJCVH//v21evVq+xWF6OhorV69Wv3791dISEi6agEAADKS5SsQRYoUUVBQkFatWqVt27YpMjJShQoVUs+ePRUQECB3d/fM6BPI08LCwjRu3DjFx8en+nh8fLzGjRunihUryjAM07WVK1fOzLYBIE+LiU+Qq5P5Na6s1gO5leUAIUkuLi565pln9Mwzz2R0P0C2MwxDMTExWXrMoKCgNANBkvj4eAUFBckwDNO1b7zxRka2maFcXV1TTMQAANntRGSU1hw+p99OXVJMfKJcnRzUtJyXOj5YShU8C9x3PZAXWAoQUVFRkqQCBW79QISHh2vhwoU6ceKEKlasqB49eqh8+fIZ3yWQRQzD0OjRo3Xo0KEsPW54eLipurVr15re59q1a/Xnn3+mt6VMV61aNY0cOZIQASDH2Hryoj7ecUwJiYZ9W0x8ojYeu6AtJy5qoF8lNStfLN31QF5h6h6I6OhoDRs2TL6+vvL19dV7772niIgIPfPMM1q+fLn279+vZcuWqXPnzgoNDc3snoE8xTAM+3oq2VULAPndicioFGHgdgmJhj7ecUwnI6PSVQ/kJaauQMyaNUvr1q1T//79VahQIX322Wfavn27ChcurJUrV6p06dI6ffq0+vXrp48//liBgYGZ3TeQKWw2m0aOHJnlQ5i6dOliaipWNzc3SeambXVzc8vRK8MzhAnIerEJhqTE7G4jR/rxUHiaYSBJQqKhHw6dU++GFSzXI/1ufd8iJzEVINauXas33nhDL774oiSpTp06eu655zRhwgSVLl1aklS2bFkNGDBAH330UaY1C2QFm81mP1HPKv7+/lq9evU969q2bSvDMEzXZvXrAJCzjdh+NrtbyLHCwy+Zqtty4qIOxThbrgfyElNDmMLDw1WjRg3710nrP9x5v0OZMmUUGRmZcd0B+URAQICcnO6e552cnBQQEGCpFgBwb1aHhyYmJjKcFPmaqSsQ8fHxyaZndXa+laRdXFyS1dlsNiUmcmkU+UvSIm73o0qVKho+fHia07M6OTlp+PDh9mlZrdTej4x4bQCyl6urqxYtWpTdbeR4VoaSLlmyxFJ9Th5Omtu4urpmdwtQOqdxBfK7zFgF2t/fXxUrVlRwcLA2bNhg32/btm0VEBCQLBAk1QYFBWnt2rUyDCPN2pzw2gBkn+wYlpkbWRlKmvTvIsNJkV+ZDhD79++331iakJAgm82m/fv326d2laTDhw9nfIdADhMSEpLi0/+kVaDXrVun4cOHy9/fP137rly5soYMGaIhQ4YoJibmrp+0VK5cWW+88Yb+/PNPGYahxYsX3/cvqcx8bQCQkwUEBGjdunV3XWfn9uGhVuuBvMRmmBiY5+Pjk2K2lKSn3b7dMAzZbLZcNZXrvn37JEm1a9fO5k6QG4SFhal///73/IUxb968LFkFOjo6Wi+//LIkadGiRfcVIHLaawOArJbahyhJkoaH3v4hitV6ICezck5s6grE0qVL768jII8IDg42tQp0cHCwhgwZkkVdZYy8/NoAwAwrQ0lvr8+M4aRATmbqCkRexhUIWNGxY0fTN82tWbMm0/vJyCsQOe21AUB2u9dQ0iRJ/xZn1HBSIDtYOSc2NY0rgFu/IMycYCfV3rkYndnnZoU7e7nf1wYAeZHVGX9YHBP5BbMwASa5ubnJzc3N9Kf0rq6u9zWjkZUpVM1cSLxXL1ZfGwAAyJ8IEIAFVqbtS8+MRlYCR1hYmIKCghQeHi7DMNSlS5c0a832Yva1AQCA/IshTIAFZleB9vX1TXNmDunWzcjjxo3T0aNH7dtCQkLUv39/rV692n4lIOkkv3///goJCUlRm3TT3t1qw8LCTPXi5+fHCtcAAOCeTAWI3r1769NPP9Xx48czuR0gZ0taMTqtE+2kaft27NhhekYjyfxJ/tGjRy3VSuZnV9q5c6ep18asIgAA5G+mhjC1aNFCmzdv1pQpU1SqVCm1atVKLVu21MMPPywXF5fM7hG5mGEYee6G26ZNm2rmzJn67rvvtGnTJvtQo9atW6tTp06qVKmSJk2aZGpfGzZs0KBBgxQUFGTqJD8oKEiGYZiufeONN5JdjTDTy71eW066GTyrubq6cpMkACDfszSN682bN/X7779r8+bN+uWXX3Tp0iX5+fnZA0W5cuUys9dMwTSumev2aUbzqqQFFG//Ojw83PTzvb29de7cOVM3Qicdx2xtqVKlLPeS2uKQuOV+p8oFkDdl5JTaQHbJ8IXkkri7u8vf399+4+fhw4e1ZcsWrVu3TuPGjVPZsmXVqlUrDR8+PB1tA7nTnSfYNptNNpstwwOBlbrba630ktprAQAAuN19zcL04IMP6sEHH1Tv3r1148YNbd26Vb/88ktG9YY8pmTXNrI5OWZ3G1ki5uffdemvI/esK/pQFXk/0kQRgV8oMe7uw5IkycH51o+s2Vrv7o8o1kIvpR5pcs+6/MaIT1DEVxuzuw0AAHKMDJvGtWDBgmrfvr3at2+fUbtEHmNzcrSfAOd1JRs9pMv7j8pITEyzxubgoFK+D8nB2UlFfSrp4r7D99xv0RqVJcMwXevg7GS5FySX9rsGAED+xDSuQCYoUNJLFR5vIZtD6j9iNgcHVXi8hdxLeEmSSjSsmWbt7c8p2bCGpdr09AIAAHA3fNwIZBKvGpXlXtxTEbtDdTn0qBLj4m9dbahRWSUb1kh2wp50kn/ix19SvVJw50m+lVqrvQAAANwNAQLIRO4lvFShQzNV6NDMftKeFisn+ekJBFZ6AQAASIvlM4gRI0aoa9euqlu3bmb0A+RZt5+wp3UCb+Uk32oguL2G8AAAANLL8lnEd999p44dO2ZGL0CeFhVxSed379flA8f+/4qBTyWVaFhTBUqmvGJg5SQ/rVqrxwQAALgXywGifv362r59u5o2bZoZ/QB50qXQoynuWUiMi9fFfYd16e8wVXi8hbxqVM71xwQAAHmf5QBRvXp1LVy4UD/99JN8fHxUoECBZI/bbDZ99NFHGdYgkNtFRVxK84ZnSTISE3Xix1/kXtwzw25mzo5jAgCA/MFygPj5559VsmRJxcXF2Ze8vh0r1wLJnd+9/65rMEi3TugjdoeqQodmufaYAAAgf7AcIEJCQjKjDyDPunzgmLm60KMZdjKfHccEAAD5Q7oXkktMTNSBAwe0ZcsWXb9+XZGRkRnYFpA3JMbFKzEuPsNrc9oxAQBA/pGuuRy//fZbTZkyRREREbLZbPrqq680a9YsOTs7a8qUKXJxccnoPoFcycHZSQ7OTqZO0pNqc+MxAQBA/mH5CsTq1as1bNgwPfzww5o2bZoMw5AkPfLII9q8ebNmz56d4U0CuVlRn0rm6u6YEcnKlYE7a9N7TAAAgHux/NHj3Llz1a1bN40aNUoJCQn27U899ZQuXbqkL7/8Um+++WZG9gjkaiUa1tSlv8PuelOzzcFBJRvWsLRuw91qrRwTAADACstXII4dO6ZHHnkk1cfq1q2rc+fO3XdTQF5SoKSXKjzeQjaH1H/cbA4OqvB4C928EKmDS7/XxX2H7VcUktZtOLj0e10KPWp/zqXQo3etjb4YaeqYTOEKAACsshwgihUrprCwsFQfCwsLU7Fixe67KSCv8apRWT4v/EvF6lSz33Pg4OykYnWqyeeFf8mtmKepdRtunr9kaY2Hux2TReQAAEB6WB7C9Nhjj2nmzJkqWbKkWrVqJenW2g9//fWXZs+erSeeeCLDmwTyAvcSXqrQoZkqdGhmH3KU5MSaX02v2yDDsLTGQ1rHBAAASA/LZxNvvvmmDh06pDfffFMO/xse0bNnT0VFRalRo0Z64403MrxJIK+580TeyroNZt25xgPhAQAAZATLZxQuLi5asGCBtm7dqm3btikyMlKFChWSn5+fWrVqxUrUgEVW122wul+CAwAAyEiWzyxWrVqlVq1aqVmzZmrWLPkKtufPn9eqVav0yiuvZFiDQF5ndd0GyVyQYI0HAACQGSzfRD18+HCdOnUq1cdCQ0M1c+bM+24KyG+srNvAGg8AACA7mfp4sm/fvvaZlwzD0MCBA1NdbfrixYsqX758xnYI3AerQ3iya8iPlXUbDEM5eo2H3PKeAwCA9DH1W7t///4KCgqSJH3zzTeqWbOmvLySzx/v4OCgwoULKyAgIOO7BCywshhbeuozQ9JaEWlNz3rnug1WarNCbnzPAQBA+pgKEDt27NCbb76pUqVKSZIGDBigcuXKZUgDiYmJCgwMVFBQkK5duyZfX1+9//77ae7/4sWL+uijj7R161YZhqGmTZvq3XfftfeG/O1S6NEUJ9ZJC6xd+jtMFR5vkWz9A6v1t8voT9q9alSWe3FPRewO1eXQo/9/Yl2jsko2rJEsEFipzezes/I9B4CsFB0dLTc3N9P1hmFkYjdAzmHqDGLu3Lny9fVVqVKltGrVKnXv3j3DAsTs2bO1fPlyjR8/Xt7e3po0aZL69Omj77//PtVhUm+++abi4+O1ePFiGYah0aNHa+DAgfrqq68ypB/kXlYWWHMv4WW5PukYmflJ++1rRcTfjJaTe9q/uJLVRkXLqcDdf8llRu9Z8Z4DQFYKCwtTcHCwQkJC7AHC399fAQEBqlKlSqr1QUFBCg8Pl2EY6tKly13rgbzAVIDw8PDQ4sWLdfLkSRmGoU2bNuno0bTno+/cubOpg8fGxmrRokUaMmSIWrduLUmaNm2aWrRooXXr1qVYlO7q1avasWOH5syZoxo1bo3v7tu3rwYMGKDIyEh5enqaOi7ypvO791taYM1qfVZ80m7lJN9KbWb1ntnvOQBkpZCQEI0bN07x8f8/0110dLRWr16tdevWafjw4fL39093PZBXmAoQffr00cSJE7V+/XrZbDbNnj07zVqbzWY6QBw4cEA3btxQkyZN7NsKFy6smjVraufOnSkChJubmwoWLKhVq1bJz89PkvTtt9+qUqVKKly4sKljIvsY8Qm6+6nj/bGyGFu5to0t1RevU83UJ+eunoXkXryobp6/bKleki4fPKaTP/2W5kl7+Q5NVbR6Jcu1VnuxUp+Z73m5to1N1WY2Iz4hu1sAkAXCwsJShIHbxcfHa9y4capYsaIqV65suR7IS0wFiBdffFFdu3bVlStX1LZtWwUGBtqvANyP8PBwSVLp0qWTbS9ZsqT9sdu5uLho/Pjxev/999WoUSPZbDaVLFlSn3/+uX1VbOQst48HjfhqY6Yex8pibGeXr7NUf+Kr9aY+OT/51QZ5enoqMjLSUn1cXJwuXLhw19oTq3/VjR0HJMl0rbOzs+VerNRn5nse/sXPOW5hSsY3A3lXcHBwmmEgSXx8vIKDgzVkyBDL9UBeYvouSg8PD3l4eGjcuHFq2LChihYtmmrdr7/+qjJlypja582bNyUpxb0Orq6uunLlSop6wzAUGhqq+vXrq0+fPkpISNC0adM0YMAAffHFF/Lw8DD7clLsNyoqKl3Pxd1FR0dnyXFsNptsNpupEzybzSYHBwdL9TExMab6SHq9Zl93Ut2NGzdM1ZutS6r19PS03IuV+sx8z3NaeJBu/ZtFiADyppCQEFN1GzZs0IABAyzXAzmdYRimf/danny9S5cuKbZdunRJX3/9tb788kudPn1aoaGhpvaVNLNBbGxsslkOYmJi5O7unqJ+zZo1+vzzz7Vx40Z7WJg7d67atGmjr776Si+++KLVlyNJiouLM90zrImLi7P/uWTXNrI5OWbasWJ+/l2X/jpyz7qiD1VRqUeamK+vUVmX9oeZ6sEwDBV7srnOzg0yXV+ia2udM1kfEx9376Lbaks81VpnA78w3YvV3ovWrKzL+9O+HyqJ5ff8f/U5gRGfYL96dujQITk7O2dzRwAyWmxsrKUPT3bt2mWpfu/evfzbgVwhtQmMUnNfqzft2LFDK1as0M8//6y4uDiVL19eAwcONP38pKFLERERyRagi4iIUPXq1VPU79q1S5UqVUp2paFIkSKqVKmSTpw4ke7X4ezsrKpVq6b7+Ujb7Z/c25wcM3XBsJKNHtLl/UfvucBaKd+H5ODsZL6+cS1FHj5haviNg7OTXAp7yMHZyXS9g5O5Wkmm65JqHZydLPVitfdSfrUVeeB4xr/n/6vPCW7vtHr16nJ1dc22XgBkHjc3N1OhwM3NTY0aNbJUX6dOnYxoEchUR47c+wO+JJZ/Q1+9elXBwcH68ssvdezYrRsiO3TooJ49e6pBgwaW9uXj4yMPDw9t377dHiCuXr2q/fv3q0ePHinqvb299eOPPyomJsb+SzwqKkqnT59Wp06drL4UO5vNpgIFCqT7+UhbVt6bYnUxNiv1RX0q6eK+w/fsoej/ZjKyUm/1JF8yFySS9puZvWfme54Tubu7W5oTHkDu4e/vr9WrV9+zrm3btipQoIDleiCnszJ02PTZ3Z49ezRs2DC1bNlSEydOlLe3t0aOHCnDMPTcc89ZDg/SrcskPXr00OTJk7VhwwYdOHBAgwcPlre3t9q3b6+EhASdP3/envCTZnd68803deDAAR04cEBvvfWWXF1dWQEbkm4tsObzwr9UrE41+8m2g7OTitWpJp8X/pVi2lSz9SUa1pTtHmHI5uCgkg1rpKu+qE8lU6+vaI3KlmrT04vV+sx6zwEgKwUEBMjJ6e6fqzo5OdnPN6zWA3mJzTBxR2CnTp10+PBhVaxYUZ06dVLnzp1VunRp+8rRn332mXx9fdPVQEJCgqZOnarg4GBFR0fbV6IuW7asTp8+rbZt22rcuHH2H8CwsDBNmjRJe/bskYODgxo1aqRhw4apbNmy6Tr+vn37JEm1a9dO1/Nxd9HR0Xr55ZclSaW6tcvyYSmZveJykqRPzu+1lkJa9VERl3Rw6ff3HNrj88K/ZBgyXZv0SX5m9n6njF6hO7slxsXr3Ir1kqRFixZxBQLIw1Jb1yGJk5OTqXUg7lYP5GRWzolNBQgfHx9Vr15dL730klq2bCkvr1snJRkRILIbASJzZXeAyGg3z19SxO5QXQ49+v+Lt9WorJINa6Q67Cat+uJ1q6lg6RLJaq2ctKfnBD/tXh5UwdIl7/u15lUECCB/OXr0qIKDg7Vhwwb7StRt27ZVQEBAqus5HD16VEFBQVq7dq0Mw7hnPZBTZXiA+O233/T1119r/fr1SkhIUPPmzdW1a1c1aNBATZs2JUAgTXktQNzO6ifn18+c18U/D9515WgrJ+33c4J/48x5XbhHL/fzWvMSAgSQf91+z+XdJP2uMwxDixcv5t8J5EpWzolNnRE0bdpUTZs21bVr1/Tdd98pODhYgwYNUpEiRWSz2XTixIlcGyCA9LJyQp3aFYPbV45OumLgXsJLFTo0U4UOze550m6lNj29pPe1AkBeYXXWtZy4fg2QGSxNkVOoUCE9//zz+vrrr/Xtt9/qySeflKenp0aMGKE2bdpo0qRJ+vvvvzOrVyBXioq4lOZwI+l/K0f/+Itunr+UbLvVGZeS3K0+vb0AAAAkSffHitWrV9e///1vDR06VCEhIfr666+1ZMkSLVq0iEXZgNuc373/rjc8S7dO3CN2h6pCh2aSbp3on9+93/QQI7P16ekFAADgdvc9LsHJyUnt27dX+/btFRERoW+//TYj+gLyjMsHjpmrCz2qCh2aWR5iZKXeai8AkJ8l3URtlonbSoE8wdQQphkzZig2NvaedSVLltQrr7wi6dYCb9OmTbu/7oBcLjEu3tIq0zfOnLc0xMjKkCSrvVhZ9RoA8oqk6eI7duxo/2/SpEkKCwtLs3769OkKDw9XeHi4unTpctd6IC8wdQXi6tWrat++vV588UU99thjKlky5ZSPSc6fP6+goCB98cUXateuXYY1itzPiE/Q3QfP5E1WVpk+/98DpoYYndv5t8o/0kQRu/62VJ8ZK17ndUZ8Qna3ACCLpLauQ3R0tFavXq1169aZWgfibvVAXmFqGldJ+v333zV+/HgdPnxYdevWVZ06dVS2bFm5u7vr2rVrOnv2rHbv3q2DBw+qSpUqGjJkiFq0aJHZ/d83pnHNXLdP45pfRUZG6ubNm/esc3d3V3R0tKlL4DabTd7e3goPD7dUb6UXT0/Pe9blN0zjCuRdYWFh6t+/f6qLwiVxcnLSvHnzVLlyZcv1QE6X4dO4SlKTJk307bffatOmTfr+++/1ww8/6OLFi/bHixcvrubNm2vQoEFq06ZNOtoG8qaCBQuaOmkvUKCAqTrp1jjbxMRE0+NtDcOQYRimeylYsKCp/QJAZjEMQzExMVl2vKCgoLuGAUmKj49XUFCQ3njjDcv1OZGrqytTzyJdTF+BSM3Nmzd17do1eXp6ysXFJSP7yjJcgchcWf0LIKfatGmTpkyZkuovGycnJ7399ttq3bq1unTpoujo6Hvuz83NTd98843leiu9ICV+2QJZwzAMjR49WocOHcqyY1q9omu1PieqVq2aRo4cyb9rkJRJVyBS4+7uLnd39/vZBfI4m83GkA9JHTp0ULVq1RQcHKwNGzbYZ/Zo27atAgIC7Je3/f39tXr16nvur23btnJzc1OrVq20du1a0/VWegGA/CLpKq3Z2vRcAeYkHXnJfV2ByAu4AoHsEBMTk+oKp1bH1IaGhmrAgAF3Pda9xuCm1QsAZKesvoKdFVeAcxququJ2WXYFAkD6pHXCXqVKFQ0fPjzFrB5JnJycNHz4cFWuXFnR0dGqVKmSPD09FRkZmer+bq+/Vy9W5zsHgMyU1VewrV4BtloP5CUECCCH8ff3V8WKFVMdYuTr66sdO3Zo0qRJ9u02m02enp56+OGHtWnTJktDksLCwhQcHKyQkBD78/z9/RUQEKAqVapk4asGgOwVEBCgdevW3fMKcEBAQLrqgbyEIUwMYUIOlzTEKLX5xm83bNgwdejQwfSQpLvtL+nKBfOXA8hPrP67yL+jyEusnBOnO0Bs2bJFO3bs0NWrV1W0aFE1atQoV6z7cCcCBHKDjJ5vnPnLASB1R48etTTJhNV6IKfK1AARGxurAQMG6Ndff5Wjo6OKFi2qy5cvKzExUQ8//LDmzZuXq6Z0JUAgN5g0aZKpsbaPP/64hgwZkuX7A4C8yOokE0xKgdzMyjmxg9Wdz5o1S7t379bEiRO1d+9e/frrr/rzzz81btw4/fe//9WcOXOsdwzgrkJCQkzVbdiwIVv2BwB5kdUwQHhAfmE5QPzwww8aNGiQOnXqJEdHR0m3hjp07txZgwYN0vfff5/hTQJ5lZkpAKOjo03VJdXeOe3hnc+93/0BAID8zfIsTJcuXVLNmjVTfaxmzZo6d+7cfTcF5GVWZz5yc3OTm5ub6fnGXV1d73kMq/sDAABIYvkKRPny5bV79+5UH9u5c6dKly59300BeVVISIj69++v1atX20/go6OjtXr1avXv3z/NoUVmZ/Fo27atqWNY2R8AAMDtLAeIbt26ad68eVqwYIHOnj2ruLg4nT17Vp988ok++eQTPfXUU5nRJ5DrhYWF3XUa1vj4eI0bN05Hjx5N8VhAQICcnO5+wdDJyUm+vr6mjuHn52dqf8xfDgAA7mQ5QHTv3l2dOnXS5MmT5e/vrzp16sjf319TpkzRE088ob59+2ZGn0CuFxwcfNdpU6VbJ/jBwcEptietUH23k/63335bO3bsMHWMnTt33nV/ZlawBgAA+VO614E4cuSIfR2IIkWKyM/PL1euXMs0rsgqHTt2NH3fwZo1a1J9LLX5xm02mwoWLKjPPvtMXbp0sXQM5i8HAABSFi0kl1cQIJAVoqOj1bFjR9P1P/300z1vXo6JiZFhGHr55ZclSbNnz1aXLl3SfQzmLwcAIP+yck5sahamtm3b6uOPP5aPj4/8/f1ls9nSrLXZbFq/fr3JVoH8IT0zKd2Lq6trsv3d7zEIDwAAwAxTAcLPz08FCxa0//luAQJA6vz9/U2t/nw/Mx9lxTEAAED+ZipAjBs3zv7n8ePH37U2ISHh/joC8qiAgACtW7furjc53z7zUdI9CWYkjUS0egwAAACrLM/C1LZtWx04cCDVx/bu3aumTZved1NAXnSvmZScnJz08ssv6+uvv1bHjh3t/02aNElhYWEp6sPCwjR9+nSFh4crPDxcXbp0UXBwsF5++WVmVwIAAJnG1BWIH374wf6J5j///KN169alGiJ+//13xcXFZWyHQB7i7++vihUrpjrzUZkyZbRo0aJkVw+SFoBbt26dhg8fbl8ALiQkJMV6D0m1SUHkn3/+YXYlAACQ4UzNwjRu3Dh9+umnt55gs+luT3nppZc0bNiwjOswkzELE7JT0sxHYWFh6t+//z2HHs2bN0+GYZiurVy5MrMrAQCAe8rwWZjefvtt9erVS4ZhqF27dgoMDFSNGjWS1Tg6OsrDw0MeHh7paBnIOQzDUExMTJYdLzo6WkFBQaYWgAsKCpJhGKZr33jjDfsxchpXV1cmZAAAIBeyvA7EP//8o5IlS8rZ2TmzespSXIHA7QzD0OjRo3Xo0KEsPW54ePhdr+wlSTrhNlvr7e19371llmrVqmnkyJGECAAAcoAMvwJxuzJlymjv3r3avn27YmNj7ScyhmEoKipKu3fv1pdffml1t0C+ZRiGqUCQVGt1v5ygAwCAjGQ5QCxbtkxjxoxJ9UTGwcFBzZs3z5DGgOxgs9k0cuTILB3CJEldunQxvQCcZG5IkpubmxYvXnzfvWUWhjABAJA7WQ4Qn3/+uVq2bKmJEydq3rx5un79uv79739r8+bNevfdd9WpU6fM6BPIMjabzfT6CxnFygJwhmGYrs3q1wEAAPI+y+tAnD59Ws8995yKFCmiWrVqaffu3XJzc9Ojjz6qvn37aunSpZnRJ5CnBQQEpLl2Q5KkBeCs1AIAAGQ0ywHC2dnZ/qlmhQoVdOLECfvaDw0bNtTx48cztEEgPzCzyFzSAnBWagEAADKa5SFMNWrU0MaNG9W4cWNVqlRJiYmJ+vPPP9WoUSOFh4dnRo9AvnC3RebuXADOSi0AAEBGsjyN6/r16zVo0CAFBAToo48+0muvvaa///5b7du31/fff686depozpw5mdVvhmMaV+RUVhaAY7E4AABwP6ycE1sewtSuXTvNnTtXVapUkSR98MEHqlixolasWKHKlStrxIgRVncJIBVWAgHhAQAAZBXLVyDuJbd9EsoVCAAAAOR3mXYFIiwsTEePHk3z8bVr16pjx45WdgkAAAAgFzF1E/WFCxc0cOBA7d27V5JUt25dzZkzR0WLFpUkHTlyRGPGjNG2bdvk4eGRed0CAAAAyFamrkBMmjRJ+/fvV58+fTR48GAdO3ZMkydPliQtWLBAXbp00fbt2/Xkk09qzZo1mdowAAAAgOxj6grEtm3b1K9fPw0aNEiSVLFiRY0YMUKlS5dWYGCgfHx8NGrUKNWrVy8zewUAAACQzUwFiEuXLqlhw4b2rxs3bqwrV65o7ty5GjRokF599VU5OjpmWpMAAAAAcgZTASIuLk4FCxa0f510n0Pv3r3tVyUAAAAA5H2W14G4Xdu2bTOqDwAAAAC5wH0FCIYtAQAAAPmLqSFMkrR//37FxMRIkhISEmSz2bR//35FRUWlqPX19c24DgEAAADkGKZWovbx8ZHNZku2Lelpt283DEM2m02hoaEZ3GbmYSVqAAAA5HdWzolNXYFYunTp/XUEAAAAIE8wFSD8/Pwyuw8AAAAAucB93UQNAAAAIH8hQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATDO9kFwSwzAUFBSkjRs36ubNm0pMTEz2uM1m06effpphDQIAAADIOSwHiClTpmjBggUqW7asvL2901xgDgAAAEDeYzlArFq1Si+99JKGDRuWGf0AAAAAyMEs3wNx/fp1tW7dOhNaAQAAAJDTWQ4QDRs21B9//JEZvQAAAADI4SwPYerTp4/eeecdxcfHq27dunJ3d09R4+vrmyHNAQAAAMhZLAeIl156SZL08ccfS1Kym6gNw5DNZlNoaGgGtQcAAAAgJ7EcIJYuXZoZfQAAAADIBSwHCD8/v8zoAwAAAEAuYDlASNKxY8c0c+ZM7dixQ1evXlXRokXVqFEjDRw4UFWqVMnoHgEAAADkEJYDxJEjR9StWzc5OjrK399fxYsX1/nz57Vx40Zt2rRJQUFBhAgAAAAgj7IcICZPnqyyZcvqs88+U6FChezbr127phdeeEHTpk1TYGBghjYJAAAAIGewvA7Ezp071b9//2ThQZIKFSqkvn37aufOnRnWHAAAAICcxXKAcHJykqura6qPubi4KDY29r6bAgAAAJAzWQ4QtWvX1vLly2UYRrLthmFo2bJlqlWrVoY1BwAAACBnsXwPxBtvvKHu3burU6dO6tChg0qUKKHz58/rp59+0rFjx7R48eLM6BMAAABADmA5QNSuXVsLFizQlClTFBgYaF99ulatWvrkk0/k6+ubGX0CAAAAyAHStQ7Eww8/rKCgIN28eVNXr15V4cKF5e7untG9AQAAAMhhTAWInTt3qmbNmipYsKCpWZa4CgEAAADkTaYCRM+ePfXll1+qTp066tmzp2w2m/0m6qQ/3/7/0NBQ0w0kJiYqMDBQQUFBunbtmnx9ffX++++rXLlyKWpnzZqV5hoTAQEBGjdunOnjAgAAALDOZtw5nVIqduzYoYceekgFCxbUjh077rlTPz8/0w0EBgbq888/1/jx4+Xt7a1Jkybp9OnT+v777+Xi4pKs9saNG4qKikq2bfHixfriiy+0YsUKVa9e3fRxk+zbt0/SrXs7AAAAgPzIyjmxqSsQtwcCm81mH850p6tXr+qXX34x26diY2O1aNEiDRkyRK1bt5YkTZs2TS1atNC6dev0xBNPJKsvWLBgsuPu379fS5cu1Ycffpiu8AAAAADAGsvrQPTq1UthYWGpPrZ//34NHz7c9L4OHDigGzduqEmTJvZthQsXVs2aNU3da/HBBx+oUaNG6tKli+ljAgAAAEg/U1cghg0bprNnz0q6tWDcqFGj5OHhkaLu+PHjKl68uOmDh4eHS5JKly6dbHvJkiXtj6Vl48aN2rNnj1atWmX6eAAAAADuj6kA8eijj6ZYIO7OWyccHR1Vr149Pf/886YPfvPmTUlKca+Dq6urrly5ctfnLl68WG3atFGNGjVMHy8thmGkuLcCyG7R0dFyc3PL8FoAAIA7JU2GZIapAOHv7y9/f39Jt2ZkGjVqlKpUqZL+Dv8n6YQnNjY22clPTEzMXdeVOHPmjLZv36758+ffdw+SFBcXZ2nmKCCznDlzRr/++qv++9//KjY2Vi4uLqpXr56aN2+uBx54INXa3bt3KyEhQY6OjmrYsGGqtQAAAPdy54f6abG8kNxnn32m3bt36+OPP9bAgQMl3br3Yd68eXrllVdUq1Yt0/tKGroUERGh8uXL27dHRETc9abo9evXy8vLS82aNbPafqqcnZ1VtWrVDNkXkF6bN2/WzJkzFR8fb98WGxurHTt26I8//tBbb72lVq1apVmbkJCQai0AAMC9HDlyxHSt5QCxefNmDRw4ULVr17YHCJvNpuPHj+u5557TokWL1KhRI1P78vHxkYeHh7Zv324PEFevXtX+/fvVo0ePNJ+3a9cu+fn5yckpXQtpp2Cz2VSgQIEM2ReQHmFhYZo6dWqyQHC7+Ph4TZ06VdWrV5dhGKZrK1eunJltAwCAPMLs8CUpHbMwzZo1S48//riWL19u31ajRg19++236tixo6ZOnWp6Xy4uLurRo4cmT56sDRs26MCBAxo8eLC8vb3Vvn17JSQk6Pz584qOjk72vP3798vHx8dq60COFRwcnGYgSBIfH6/g4GBLtQAAABnNcoAICwtT586dU00pnTt31oEDByzt7/XXX1fXrl313nvvqXv37nJ0dNTChQvl7Oyss2fPqnnz5lq9enWy55w/f16enp5WWwdyrJCQEFN1GzZssFQLAACQ0SyPASpUqJCOHTuWbO2GJKdOnbI8FMjR0VHvvPOO3nnnnRSPlS1bVgcPHkyx/c8//7R0DCAni46OTnGV7W61VvYbExMjV1fX9LYGAACQguUrEI888ohmzJihjRs3Jtv+yy+/aMaMGXrkkUcyrDkgP3BzczM9BavVWsIDAADIaJavQAwePFj79u3Tq6++KmdnZ3l6eioyMlLx8fGqW7eu3n777czoE8jT/P39UwzVS03btm1lGIbpWgAAgIxmOUB4eHhoxYoV2rx5s/744w9FRkaqUKFCatSokVq3bi0HB8sXNYB8LyAgQOvWrbvrzdFOTk4KCAiQYRimawEAADKazbhzSel8Zt++fZKk2rVrZ3MnyO9CQkI0bty4VIOBk5OThg8fbl/Q0UotAADAvVg5J7Z8BSIwMPCeNYMGDbK6WyDf8/f3V8WKFRUcHKwNGzYoOjpabm5uatu2rQICApKt6XB77dq1axUfHy8nJyc9+uijKWoBAAAykuUrEHdbf8HDw0MlS5Y0NT47p+AKBHIqKzMoMdsSAAC4H5l6BSK1dR6ioqK0a9cujRo1SiNGjLC6SwCpsBIICA8AACCrZMgdzwUKFFDLli01cOBATZw4MSN2CQAAACAHytApkx544AGFhYVl5C4BAAAA5CCWhzClxjAMhYeHa8GCBSpTpkxG7BIAAABADmQ5QPj4+Mhms6X6mGEYDGECAAAA8jDLAWLgwIGpBggPDw+1bt1aFStWzIi+AAAAAORAlgPEa6+9lhl9AAAAAMgFTAWInTt3Wtqpr69vupoBAAAAkLOZChA9e/a0D1syDCPZn5PcPqwpNDQ0I3sEAAAAkEOYChBLly61//nMmTMaMWKEnnrqKXXs2FElSpRQZGSkQkJCtGLFCn3wwQeZ1iwAAACA7GUqQPj5+dn/3LNnT7344ot6++23k9U0aNBAbm5uWrx4sR577LGM7RIAAABAjmB5Ibm9e/eqSZMmqT5Wv359HTp06L6bAgAAAJAzWQ4Q3t7e+uWXX1J97KefflL58uXvuykAAAAAOZPlaVxfeukljRo1ShEREWrTpo2KFi2qCxcu6KefftKmTZs0derUzOgTAAAAQA5gOUB069ZN8fHxmjNnjn788Uf79tKlS2vy5Mnq2LFjhjYIAAAAIOewGbfPxWrR0aNHdeXKFRUtWjTXrkC9b98+SVLt2rWzuRMAAAAge1g5J7Z8D0SSK1eu6NixYzpw4IAKFy6so0eP6j6yCAAAAIBcwPIQJkmaM2eO5s2bp+joaNlsNtWpU0fTp0/X5cuXtWjRIhUuXDij+wQAAACQA1i+AvH5559r1qxZeumll/Tll1/arzr06NFDp06d0owZMzK8SQAAAAA5g+UA8dlnn6lv375644039NBDD9m3t2rVSm+++aZCQkIytEEAAAAAOYflAHHmzJlkK1PfrnLlyrpw4cJ9NwUAAAAgZ7IcIEqXLq09e/ak+thff/2l0qVL33dTAAAAAHImyzdRd+3aVbNmzZKbm5tat24tSYqKitLatWs1b948vfTSSxndIwAAAIAcwvI6EIZhaOTIkQoKCrJ/bbPZJEn/+te/NH78eDk4pHt22CzHOhAAAADI76ycE6d7Ibnjx49r27ZtioyMVKFCheTr66tq1aqlZ1fZigABAACA/M7KOXG61oGQpIoVK6ZYfdowDC1fvlzPP/98encLAAAAIAczHSC2bNmib775RjabTU8++aRatWqV7PFdu3ZpzJgxOnjwIAECAAAAyKNMBYjvvvtOQ4cOlbOzs1xcXLRmzRrNnDlTjzzyiCIjIzVmzBj9+OOPcnR05CZqAAAAIA8zFSA+/fRT1a1bVwsXLpSLi4uGDx+ujz/+WA8++KBeeuklnT17Vi1atNC///1vVapUKbN7BgAAAJBNTAWI48eP68MPP5SHh4ckadCgQXrsscc0YMAAxcbGasaMGXr00UcztVEAAAAA2c9UgIiKikq2QFyZMmVkGIacnJz03XffqVixYpnWIAAAAICcw9SCDYZhyNHR0f510p8HDx5MeAAAAADykfta8a1kyZIZ1QcAAACAXOC+AkTSCtQAAAAA8gfT60CMGjXKfhN10uLVI0aMUMGCBZPV2Ww2ffrppxnYIgAAAICcwlSA8PX1lfT/wSGtbal9DQAAACDvMBUgPvvss8zuAwAAAEAucF/3QAAAAADIXwgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMC0bA8QiYmJmjlzplq0aKF69erplVde0alTp9Ksj4uL05QpU+z1PXr0UGhoaBZ2DAAAAORf2R4gZs+ereXLl+vDDz/UihUrlJiYqD59+ig2NjbV+lGjRik4OFgfffSRvv76a3l5eemVV17RtWvXsrhzAAAAIP/J1gARGxurRYsW6fXXX1fr1q3l4+OjadOmKTw8XOvWrUtRf+rUKX399dcaO3asWrRooSpVqmjMmDFycXHRX3/9lQ2vAAAAAMhfsjVAHDhwQDdu3FCTJk3s2woXLqyaNWtq586dKeq3bt2qQoUKqWXLlsnqQ0JCku0DAAAAQOZwys6Dh4eHS5JKly6dbHvJkiXtj93u2LFjKleunNatW6f58+fr3Llzqlmzpt59911VqVIl3X0YhqGoqKh0Px8AAADIzQzDkM1mM1WbrQHi5s2bkiQXF5dk211dXXXlypUU9devX9eJEyc0e/ZsDR06VIULF9acOXP03HPPafXq1SpWrFi6+oiLi+NGbAAAAORrd56TpyVbA4Sbm5ukW/dCJP1ZkmJiYuTu7p6i3snJSdevX9e0adPsVxymTZumVq1a6ZtvvlGfPn3S1Yezs7OqVq2arucCAAAAud2RI0dM12ZrgEgauhQREaHy5cvbt0dERKh69eop6r29veXk5JRsuJKbm5vKlSun06dPp7sPm82mAgUKpPv5AAAAQG5mdviSlM03Ufv4+MjDw0Pbt2+3b7t69ar2798vX1/fFPW+vr6Kj4/Xvn377Nuio6N16tQpVahQIUt6BgAAAPKzbL0C4eLioh49emjy5Mny8vJSmTJlNGnSJHl7e6t9+/ZKSEjQpUuXVKhQIbm5ualRo0Zq2rSphg0bpg8++ECenp6aOXOmHB0d9eSTT2bnSwEAAADyhWxfSO71119X165d9d5776l79+5ydHTUwoUL5ezsrLNnz6p58+ZavXq1vX7WrFny8/PToEGD1LVrV12/fl1Lly6Vl5dXNr4KAAAAIH+wGYZhZHcT2SlpOFTt2rWzuRMAAAAge1g5J872KxAAAAAAcg8CBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANOyPUAkJiZq5syZatGiherVq6dXXnlFp06dSrP+u+++U/Xq1VP8d/r06SzsGgAAAMifnLK7gdmzZ2v58uUaP368vL29NWnSJPXp00fff/+9XFxcUtQfPHhQfn5+mjp1arLtXl5eWdUyAAAAkG9l6xWI2NhYLVq0SK+//rpat24tHx8fTZs2TeHh4Vq3bl2qzzl06JCqV6+uEiVKJPvP0dExi7sHAAAA8p9sDRAHDhzQjRs31KRJE/u2woULq2bNmtq5c2eqzzl48KCqVKmSVS0CAAAAuE22DmEKDw+XJJUuXTrZ9pIlS9ofu92VK1d07tw57dq1S8uXL9fly5dVp04dvfPOO6pUqVK6eoiLi5NhGNq7d2+6ng8AAADkdnFxcbLZbKZqszVA3Lx5U5JS3Ovg6uqqK1eupKg/fPiwJMkwDI0bN07R0dGaM2eOnnvuOX3//fcqXry45R6S3iizbxgAAACQ19hsttwRINzc3CTduhci6c+SFBMTI3d39xT1jRo10u+//66iRYvaX2BgYKBat26t4OBg9e3b13IP9evXT2f3AAAAQP6TrfdAJA1dioiISLY9IiJCpUqVSvU5Xl5eydKRu7u7ypYtq3PnzmVeowAAAAAkZXOA8PHxkYeHh7Zv327fdvXqVe3fv1++vr4p6leuXKnGjRsrKirKvu369es6fvy4qlatmiU9AwAAAPlZtgYIFxcX9ejRQ5MnT9aGDRt04MABDR48WN7e3mrfvr0SEhJ0/vx5RUdHS5JatmypxMREDR06VIcPH9a+ffv02muvycvLSwEBAdn5UgAAAIB8IdtXon799dfVtWtXvffee+revbscHR21cOFCOTs76+zZs2revLlWr14t6daQpyVLligqKkrdu3fXiy++qEKFCmnp0qVydXXN5lcCAAAA5H02wzCM7G4CAAAAQO6Q7VcgAAAAAOQeBAgAAAAAphEgAAAAAJhGgAAAAABgGgECAAAAgGkECAAAAACmOWV3A0B+0bNnT+3YsSPNx3///XdNnDhR33zzTbLtTk5OKlq0qJo0aaLhw4fLy8sr2eMbNmzQsmXL9Pfffys2NlaVKlVSt27d9PTTT8tms0mSEhMTtWjRIgUFBencuXMqU6aMXnzxRT399NP2/Zw+fVoffvihdu7cqQIFCqhr16567bXX5OjomIHvAgDkHt99950+//xzHTp0SDabTZUrV9bTTz+tbt26mXr+9u3b1atXL23YsEFly5a1b4+IiFDPnj2VkJCgTz/9VGXKlMmslwBkCgIEkIU6duyo//znP6k+VrRoUUlS/fr1NWvWLPv26Oho7dmzRx988IEiIyP1ySef2B+bMGGCli9frldffVVDhw6Vm5ubtm7dqo8++kh///23Ro8eLUmaN2+eFi1apNGjR6tWrVr6/fffNWrUKDk7O6tz586Ki4tT7969VbFiRa1YsUInT57Uf/7zHzk4OOj111/PxHcEAHKmr776SmPHjtV//vMfNWzYUIZhaOvWrRozZowuXLigQYMGpWu/ERER6tWrlyRp2bJlKlWqVEa2DWQJAgSQhdzc3FSiRIm71jg7O6eoKVeunE6ePKlZs2bp2rVrKlSokDZv3qxFixbp448/Vrt27ey1FStWVMGCBTVs2DB17txZ9evX1xdffKGXX35Zjz32mCSpfPny+vPPPxUUFKTOnTtr7dq1OnPmjL788ksVKVJE1apV08WLFzVx4kT1799fLi4uGf9mAEAOtnz5cj311FPq2rWrfVvlypV17tw5LV26NF0B4vz58+rVq5ccHR21ZMmSe/4+AHIqAgSQS7i6uspms9mHFH3xxRfy8fFJFh6SPPHEEypVqpSqV6+uxMRETZgwQZUqVUpW4+DgoKtXr0qSdu3apYceekhFihSxP/7www/r+vXrCg0NVd26dTPxlQFAzuPg4KA9e/boypUryf5t7Nu3r5566ilJt64Qz507V99//70iIiJUuXJlDRgwQI8++miK/SWFBxcXFy1ZsiTFcFQgN+EmaiCHMwxDf/zxhz799FO1b99eBQoUkCT99ddfatCgQarPcXJyUpMmTVSgQAE5ODioSZMm8vb2tj9+5swZ/fjjj2revLkkKTw8PNnjklSyZElJ0tmzZzPjZQFAjtanTx/t379fLVu2VN++fTV//nzt3btXhQoVsn8g89Zbb2nVqlUaMWKEvvvuO7Vr105vvPGG1q9fn2xfFy9e1AsvvKBjx45p1qxZhAfkelyBALLQ999/r7Vr16bY3q5dO02aNEnSrasB9evXtz8WExMjLy8vPfbYY3rzzTft2yMjI1W4cGHLPVy4cEGvvPKKihUrpldffVXSrU/R7tyXq6ur/fgAkN906NBB3t7eWrp0qbZu3arNmzdLujVM9KOPPpKnp6c2bNiguXPnqnXr1pKk1157TQcOHNDcuXOTXR0eNGiQSpQoocKFC2vSpEkKDAzMjpcEZBgCBJCF/P39NWTIkBTbk64qSFKtWrU0efJkSVJYWJg+/PBD+fj46I033khW5+XlpcjISEvHP3r0qPr27auEhAQtXbrUHhrc3NwUGxubrDYpONx+TADIT+rVq6d69eopMTFRBw4c0ObNm/X555/rlVde0ZgxYyRJDRs2TPYcX19fTZ06Ndm2MmXKaMGCBdqyZYsGDx6sZcuW6fnnn8+y1wFkNIYwAVmoYMGCqlChQor/br+Rzs3Nzb7d399fn3zyibZt26a33npLhmHY6+rXr68//vgj1eMkJCSoT58++umnn+zbdu/erW7dusnd3V0rVqxQuXLl7I95e3srIiIi2T6SvmaGEAD5TXh4uEaPHq3w8HBJt+6HqFmzpl599VUtWbJEN27cSPO5hmHIySn557MTJkyQh4eHHnvsMT3xxBOaMGGCDh48mKmvAchMBAggh6tataqGDBmiTZs2acWKFfbtzzzzjA4dOpRirK10a+7yX375xR5M9u7dqz59+ujBBx9MddpAX19f7d+/X9evX7dv27ZtmwoWLCgfH59MemUAkDO5uLgoKChI3333XYrHkq7cJt0ntnv37mSP79q1S1WrVk227fb1dEaOHCkvLy8NHjxYN2/ezOjWgSxBgACyUHR0tM6fP5/qf3cOIbrdc889p0aNGmny5Mk6d+6cJKlZs2bq1q2b3nrrLc2bN09HjhzRkSNHNG/ePI0cOVI9e/ZUw4YNFR8fryFDhqhYsWIaP368YmJi7Me8dOmSpFv3YJQoUUJvvvmmDhw4oPXr12vq1Kl6+eWXmcIVQL7j5eWlPn36aMaMGZo2bZpCQ0N16tQpbdy4UYMGDVLjxo3VqFEjtWnTRqNHj9amTZt07NgxBQYGasOGDXr55ZfT3HfhwoU1btw4HT16VGPHjs3CVwVkHJtx+5gIAJnmXitRz5gxQ5s2bdI///yjzz77LMXjx44d05NPPqlmzZppzpw59u3BwcH68ssvdfToUcXHx6ty5cp67rnn1KVLF9lsNv3xxx/q3r17qscsU6aMQkJCJEknTpzQ6NGjtWvXLhUpUsS+ErWDA58zAMifVq1apS+//FKHDh1SdHS0HnjgAXXs2FH9+vVTgQIFFBUVpalTp2rNmjW6evWqqlWrpv79++uRRx6RlPZK1JI0fvx4LV68WNOmTbOv0QPkFgQIAAAAAKbx0SIAAAAA0wgQAAAAAEwjQAAAAAAwjQABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAyDLZvfRQdh8fAPICAgQAIFU9e/ZU9erV7f/5+Piofv36CggI0NKlSxUfH29pf4cPH05zVfTMFhsbq48++kjff/99thwfAPISp+xuAACQc9WsWVMjR46UJCUkJOjKlSvasmWLxo0bp127dmn69OlycDD3WdRPP/2kPXv2ZGa7aYqIiNCnn36qcePGZcvxASAvIUAAANLk4eGhevXqJdvm7++vypUra+zYsfrhhx/UqVOn7GkOAJAtGMIEALCsR48eKlWqlFasWCFJio6O1pQpU9S+fXvVqlVLDRo00EsvvaTQ0FBJ0qxZsxQYGChJql69umbNmiVJunTpkkaPHq02bdqoVq1a8vPz08CBA3X69Gn7sU6ePKn+/furcePGqlu3rp599llt3rw5WT+HDh1Sv3791KBBAzVo0EADBw7UqVOnJEmnT59W27ZtJUnDhw+Xv79/5r45AJDHESAAAJY5ODioSZMm2rt3r+Lj4zV06FB9/fXX6tu3rxYtWqThw4fr8OHDevvtt2UYhp5++ml17dpVkrRy5Uo9/fTTMgxD/fr109atWzVkyBAtXLhQgwYN0u+//24fNpWYmKh+/frp5s2bmjhxombPni1PT0+9+uqrOnHihCTp2LFj6tatmy5evKgJEyZo7NixOnXqlLp3766LFy+qZMmS9vDy6quv2v8MAEgfhjABANKlePHiiouLU2RkpG7cuKH33ntPjz32mCTJz89P169f1/jx43XhwgV5e3vL29tbkuxDos6dOyd3d3cNGzZMjRo1kiQ1btxYJ0+e1MqVKyVJFy9e1NGjRzVgwAC1atVKklSnTh0FBgYqNjZWkhQYGCh3d3ctWbJEHh4ekqQmTZqoXbt2WrBggYYNG6YaNWpIksqXL6+aNWtmzRsEAHkUAQIAkC5JU6LabDYtXLhQ0q1QcOzYMR0/flwbN26UJPuJ/p1KlSqlpUuXyjAMnT59WidOnNDRo0f1xx9/2J9TvHhxVa1aVSNGjNCvv/6q5s2bq2XLlho+fLh9P9u2bZOfn5/c3NzsM0N5eHioUaNG+u233zLt9QNAfkWAAACky7lz5+Tm5iZPT0/98ssv+uijj3T06FEVLFhQPj4+KlCggKS7r73w3XffaerUqTp79qw8PT1Vo0YNubm52R+32WxatGiR5syZo59//lmrVq2Ss7Oz2rVrp9GjR6tIkSKKjIzU6tWrtXr16hT79/LyyvgXDgD5HAECAGBZfHy8tm/frgYNGuiff/7RwIED1a5dO82bN0/lypWTzWbTsmXL9Msvv6S5j127dmnYsGHq2bOnevfurVKlSkmSJk6cqN27d9vrSpUqpVGjRmnkyJE6cOCAfvrpJ33yyScqWrSoRo4cqUKFCqlp06Z66aWXUhzDyYlfcwCQ0biJGgBg2cqVK3X+/Hl1795df/31l2JiYtS3b1+VL19eNptNkuzhIekKxJ3rRezZs0eJiYl67bXX7OEhISHBPuwoMTFRe/bsUdOmTbV3717ZbDbVqFFDgwcPVrVq1XTmzBlJt+63OHLkiGrUqKHatWurdu3aqlWrlpYsWaKff/5ZkuTo6Jj5bwoA5BN8NAMASNP169f13//+V9KtE/rLly/r119/1cqVK9WpUye1b99eJ06ckJOTkyZNmqSXX35ZsbGxCg4O1qZNmyRJUVFRkqTChQtLkn744QfVrVtXderUkSR98MEHeuqpp3TlyhUtW7ZMBw4csD+vZs2acnNz09ChQ/Xaa6+pePHi+u233xQaGqpevXpJkgYMGKBu3bqpX79+6t69u1xdXbVy5UqtX79eM2fOlCQVKlRIkvT777+rSpUqqlu3bpa8fwCQF9mMuw1OBQDkWz179tSOHTvsX9tsNhUsWFDVqlVTly5d9PTTT9uvNvz0008KDAzUyZMnVaRIEdWrV0+9evVSz549NWLECD3//PM6d+6cBg4cqAMHDqhr164aNWqUli1bpsWLF+vcuXMqXry4GjdurHbt2mngwIGaP3++WrVqpePHj2vKlCnavXu3rl69qooVK6pnz5569tln7b39/fffmjZtmv744w8ZhqFq1aqpb9++9vUfJGn8+PFauXKlnJ2dtXXrVjk7O2fdmwkAeQgBAgAAAIBp3AMBAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAAAAMI0AAQAAAMA0AgQAAAAA0wgQAAAAAEwjQAAAAAAw7f8An1wpO5upnFQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -155,9 +166,9 @@ "import matplotlib.pyplot as plt\n", "\n", "# Load data from JSON files\n", - "with open('erc20.json', 'r') as f:\n", + "with open('output_light/erc20.json', 'r') as f:\n", " erc20_data = json.load(f)\n", - "with open('sok.json', 'r') as f:\n", + "with open('output_light/sok.json', 'r') as f:\n", " sok_data = json.load(f)\n", "\n", "# Convert JSON data into DataFrames and add a column to indicate the dataset source\n", @@ -189,18 +200,23 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 13, "metadata": {}, "outputs": [ { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAJICAYAAADxUwLTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACQmklEQVR4nOzdd3wT9R8G8OfSpnsPuqDQAqWMtswCsspG9hAFlSVIZQgyZAqCgAMQkaGAgICAyFAUUdnjJxssu2VTKC3deyVN7vdHSSC0haRNm5Q+79erL+3d5fJJSNt77rsEURRFEBERERERaUFi6AKIiIiIiKj8YIAgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFEVAFUlDVDK8rrNCS+x0TEAEFUAleuXMHHH3+MkJAQBAYGokOHDpg1axYePnxo6NL0Zvny5ahVq5ahy9DJ6dOn0blzZ9SrVw8jRowo9BhjfF3t2rXDtGnT9H7eW7duYeDAgS885syZM6hVq1aBr3r16qF169aYMmUK4uPj9VLPoEGDMGjQIL2cSyUtLQ1TpkzB+fPnS/V5Xmb9+vWYPHkygMLfU39/fzRs2BADBgzA4cOHy7Q2fdDms1TWVD/Lz3/Vr18fnTt3xjfffIO8vDxDl1kmoqKiUKtWLfz6668AgLt376Jdu3ZIS0szcGX0qjE1dAFE5dWWLVvw+eefo2nTppg0aRIqVaqEyMhIrFu3Dvv378fGjRvh7+9v6DJLrH///mjVqpWhy9DJwoULoVQqsWbNGjg7Oxu6HK2tWLECNjY2ej/vP//8g7CwMK2OnT17NurWrav+PjMzExcuXMCaNWtw79497NixQ+/16UN4eDh+//139OvXT73t008/LdMa7ty5g9WrV+OPP/7Q2P7seyqKIlJTU7F+/XqMHj0aq1evRps2bcq0zpLQ5bNU1n755ReN75OTk/Hnn39i1apVyMvLw8cff2ygygzH19cX7du3x/z587Fw4UJDl0OvEAYIomK4cOECFixYgHfeeQczZ85Ub2/atCk6dOiA3r17Y8aMGeq7QOWZu7s73N3dDV2GTlJSUtCkSRO89tprhi5FJ3Xq1DF0CahRowbq16+vsa1FixaQyWT44YcfcPv2bdSoUcMwxemorOtctGgRunfvDjc3twJ1PP+eNm7cGCEhIdi0aVO5ChDG7Pn3GADatm2LqKgo/PrrrxUyQADAyJEjERISgiFDhmjcHCAqCXZhIiqGdevWwdbWFhMnTiywz8nJCdOmTUP79u2RlZUFAFAoFNiyZQt69OiBwMBAhISEYPHixcjNzVU/btq0aRg+fDh++eUXdOjQAYGBgRgwYADu3buHI0eOoEePHggKCkL//v0RHh6u8bhBgwZh586daNu2LRo0aIAhQ4YgIiJCo65z585h+PDhaNKkCerVq4d27dph+fLlUCqVAJ42ff/444/o0qULgoKCsGvXrgJdfR48eIAPPvgATZs2RVBQEN566y0cO3ZM47muXLmC4cOHo2nTpmjYsCE++OAD3Lp1S71f1bXj1KlTeO+99xAUFIQWLVpg0aJFUCgUL3zv79+/j3HjxqFFixaoX78+Bg0ahAsXLmi8hkePHmH37t2oVasWzpw588Lzqfz666+oU6cOLl26hLfeegsBAQFo27Yt1q1bpz6mc+fOGDduXIHH9urVC6NGjQKQ/2+9Zs0adO/eHYGBgahfvz4GDBiA06dPq49fvnw5OnbsiBUrViA4OBgtW7ZEampqgS5MUVFRmDJlClq2bIm6deuiefPmmDJlCpKTk9XHtGvXDsuWLcNXX32F1157DYGBgRg+fDju37+vfq4VK1YAAGrVqoXly5dr9X48z87ODgAgCIJ6282bNxEaGoqGDRuiYcOGGDNmTIHue9HR0Rg7diwaNWqEFi1a4Mcffyxw7sLqKqyL2bFjxzBgwADUr18fLVu2xOzZs5GWloYzZ85g8ODBAIDBgweruy0934UpNzcXK1euRJcuXRAQEIBOnTphzZo16p8B1WNmzpyJNWvWICQkBAEBARgwYAAuX778wvfn5s2bOHr0KLp37/7C41RsbGzg4+OD6Oho9baUlBTMnj0br732GgICAvDmm2/i1KlTBd6rFStWoG/fvggMDFT/2969exdjx45FcHAwmjRpgtDQUNy5c0fjtS9cuBBt2rRBvXr10KNHD/z1118a5y7uZykpKQlz585F27ZtUa9ePQQHB2PMmDGIiorSOP+6devQvn179e+2w4cPF/gZ1eYzpSsbGxuNzy0AHDx4EH379kVAQABatGiB+fPnq39fq15rly5dcODAAXTv3h0BAQHo1asXwsLCcPHiRfTv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IiIiIio5g3dhio2NxaeffoozZ84UWDBl+/btkEql+Oyzz2Bqaorq1asjMjISa9asQb9+/SCTybB+/XpMnjwZISEhAIBvvvkGrVq1wv79+9G9e/eyf0FERERERK8wg7dAXLt2DVKpFH/88UeB1UTPnz+P4OBgjRUomzVrhvv37yMhIQERERHIzMzUWE3Xzs4OderUwblz58rsNRARERERVRQGb4Fo164d2rVrV+i+x48fF5g3uVKlSgCAmJgY9cqKz04LpzpGtU9XYWFhEEXxhYv2EBERERG9SuRyOQRBQIMGDV56rMEDxIvk5OTAzMxMY5u5uTkAIDc3V72qa2HHpKamFus5RVGEKIocQ0FEREREVAijDhAWFhYFLuRzc3MB5K9cqVpRUSaTaayumJubC0tLy2I9p1QqhSiKqFGjRjGrJiIiIiIqX27fvg1BELQ61qgDhLu7O+Li4jS2qb53c3NDXl6eepu3t7fGMbVq1Sr28wqCACsrq2I/noiIiIioPNE2PABGMIj6RZo0aYILFy5AoVCot50+fRo+Pj5wdnaGv78/bGxscObMGfX+tLQ0XL9+HU2aNDFEyURERERErzSjDhD9+vVDRkYGZs6cidu3b+PXX3/Fhg0b1CtXmpmZ4d1338XixYtx6NAhREREYMKECXB3d0enTp0MXD0RERER0avHqLswOTs7Y+3atViwYAH69OkDV1dXTJkyBX369FEfM27cOOTl5eGTTz5BTk4OmjRpgnXr1nEWJSIiIiKiUiCIoigaughjcuXKFQBAQECAgSshIiIiIiobulwDG3UXJiIiIiIiMi4MEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtlYsAkZeXh2+//RZt27ZFgwYN8M477+DixYvq/eHh4Xj33XdRv359tGvXDps2bTJcsUREREREr7ByESC+//577NixA/PmzcPu3bvh4+ODESNGIC4uDsnJyRg2bBi8vb2xa9cujBkzBosXL8auXbsMXTYRERER0SvH1NAFaOPgwYPo3r07WrZsCQCYNm0aduzYgYsXL+LevXuQSqX47LPPYGpqiurVqyMyMhJr1qxBv379DFw5EREREdGrpVy0QDg7O+PIkSOIioqCQqHAL7/8AjMzM/j7++P8+fMIDg6GqenTLNSsWTPcv38fCQkJBqyaiIiIiOjVUy5aIGbOnInx48ejffv2MDExgUQiwfLly+Ht7Y3Hjx/Dz89P4/hKlSoBAGJiYuDi4mKIkomIiIiIXknlIkDcvn0btra2WLlyJdzc3LBjxw5MnjwZmzdvRk5ODszMzDSONzc3BwDk5uYW6/lEUURWVlaJ6yYiIiIiKg9EUYQgCFoda/QBIiYmBpMmTcKGDRvQuHFjAEBAQABu376N5cuXw8LCAjKZTOMxquBgZWVV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FSB+//13fP3114iPj4cgCNixYweWL18OqVSKr7/+GmZmZvquk4iIiIiIjIDOszD99ddfmDp1Kpo1a4YlS5ZAqVQCADp27Ihjx47hu+++03uRRERERERkHHRugVi1ahUGDBiAOXPmQKFQqLf369cPSUlJ2L59Oz766CN91khEREREREZC5xaIe/fuoWPHjoXuCwoKQmxsbImLIiIiIiIi46RzgHB2dsadO3cK3Xfnzh04OzuXuCgiIiIiIjJOOgeIrl27YtmyZfjnn38gk8kAAIIg4OrVq/juu+/QpUsXvRdJRERERETGQecxEB999BFu3ryJjz76CBJJfv4YNGgQsrKy0LhxY4wfP17vRRIRERERkXHQOUCYmZlh7dq1OHHiBE6fPo2UlBTY2toiODgYbdq0gSAIpVEnEREREREZAZ0DxMGDBxESEoIWLVqgRYsWpVETEREREREZKZ0DxNixY+Hg4ICuXbuiV69eCAoKKo26iIiIiIjICOk8iPq3335Dv379cPToUQwYMACdO3fGypUr8fDhw9Koj4iIiIiIjIggiqJY3AdfuHABe/fuxb59+5CUlIT69eujV69eGDBggD5rLFNXrlwBAAQEBBi4EiIiIiKisqHLNXCJAoRKRkYGli5dip9//hlKpRLh4eElPaXBMEAQERERUUWjyzWwzmMgVGQyGY4cOYK9e/fi2LFjUCqVaNu2LXr16lXcUxIRERERkZHTOUAcO3YMe/fuxaFDh5CZmYn69etj2rRp6Nq1K+zt7UujRiIiIiIiMhI6B4jQ0FB4e3tj2LBh6NmzJ7y9vUujLiIiIiIiMkI6B4iff/4ZDRo0KI1aiIiIiIjIyOkcIBo0aACZTIZdu3bh7NmzSEtLg6OjIxo3bozevXvDwsKiNOokIiIiIiIjoHOASEtLw+DBgxEREQFPT0+4urri3r17+PPPP7FlyxZs3boVtra2pVErEREREREZmM4LyX399dd4/PgxNm/ejMOHD+OXX37B4cOHsXnzZiQmJuLbb78tjTqJiIiIiMgI6BwgDh06hI8++giNGzfW2N64cWOMGzcO+/fv11txRERERERkXHQOEJmZmahSpUqh+6pUqYKUlJSS1kREREREREZK5wDh6+uLI0eOFLrvyJEjqFq1aomLIiIiIiIi46TzIOrhw4dj0qRJUCgU6NatG1xcXJCQkIA///wT27dvx6effloadRIRERERkRHQOUB07doV9+/fx6pVq7Bt2zYAgCiKMDMzw+jRo/HWW2/pvUgiIiIiIjIOgiiKYnEemJaWhrCwMKSlpcHe3h5BQUGwt7fXd31l7sqVKwCAgIAAA1dCRERERFQ2dLkG1rkFQsXOzg5t2rQp7sOJiIiIiKgc0jlAREdH47PPPsN///2H9PT0AvsFQcD169f1UhwRERERERkXnQPEzJkzcfHiRfTr1w8ODg6lUBIRERERERkrnQPExYsXMX/+fHTr1q006iEiIiIiIiOm8zoQrq6usLS0LI1aiIiIiIjIyOkcIEJDQ7F8+XI8evSoNOohIiIiIiIjpnMXppCQEKxduxYdOnSAo6NjgdYIQRBw8OBBvRVIRERERETGQ+cAMX36dDx8+BAtW7aEi4tLadRERERERERGSucAcfbsWXz66afo379/adRDRERERERGTOcxEHZ2dvDw8CiNWoiIiIiIyMjpHCAGDhyINWvWICMjozTqISIiIiIiI6ZzF6aYmBhcu3YNLVu2hK+vL2xsbDT2C4KAjRs36q1AIiIiIiIyHjoHiHv37qFOnTrq70VR1Nj//PdERERERPTq0DlA/PTTT6VRBxERERERlQM6BwiV1NRUnD9/HnFxcejcuTNSUlLg4+MDQRD0WR8RERERERmRYgWI77//HqtXr0ZOTg4EQUBgYCCWLl2K5ORkrF+/HnZ2dvquk4iIiIiIjIDOszBt3rwZy5cvx7Bhw7B9+3b1mId3330XDx8+xLfffqv3IomIiIiIyDjoHCB++uknjBw5EuPHj0fdunXV29u0aYOPPvoIhw8f1muBRERERERkPHQOENHR0QgODi50n6+vLxISEkpcFBERERERGSedA4SHhwfCwsIK3Xf16lWuUk1ERERE9ArTOUC88cYbWLVqFdatW4f79+8DALKysrBv3z6sXr0affr00XeNAIDdu3eja9euCAgIQLdu3fD333+r90VFRSE0NBQNGzZEy5YtsXTpUigUilKpg4iIiIioItN5Fqb3338fUVFRWLx4MRYvXgwAGDx4MACgR48eCA0N1W+FAH7//XfMnDkTM2bMQKtWrbB3715MnDgR7u7uqFevHoYPH45q1aph27ZtePDgAWbOnAmJRIJx48bpvRYiIiIioopMEIu5dPT9+/dx+vRppKSkwNbW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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "JSONDecodeError", + "evalue": "Expecting value: line 1 column 1 (char 0)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[13], line 8\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# Load JSON data\u001b[39;00m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124merc20.json\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[0;32m----> 8\u001b[0m erc20_data \u001b[38;5;241m=\u001b[39m \u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msok.json\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m 10\u001b[0m sok_data \u001b[38;5;241m=\u001b[39m json\u001b[38;5;241m.\u001b[39mload(f)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/__init__.py:293\u001b[0m, in \u001b[0;36mload\u001b[0;34m(fp, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload\u001b[39m(fp, \u001b[38;5;241m*\u001b[39m, \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, object_hook\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, parse_float\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 275\u001b[0m parse_int\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, parse_constant\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, object_pairs_hook\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw):\n\u001b[1;32m 276\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Deserialize ``fp`` (a ``.read()``-supporting file-like object containing\u001b[39;00m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;124;03m a JSON document) to a Python object.\u001b[39;00m\n\u001b[1;32m 278\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;124;03m kwarg; otherwise ``JSONDecoder`` is used.\u001b[39;00m\n\u001b[1;32m 292\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 293\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 294\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobject_hook\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobject_hook\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 295\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_float\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_float\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparse_int\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_int\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 296\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_constant\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_constant\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobject_pairs_hook\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobject_pairs_hook\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/__init__.py:357\u001b[0m, in \u001b[0;36mloads\u001b[0;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 352\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m kw[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mencoding\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 355\u001b[0m parse_int \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m parse_float \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 356\u001b[0m parse_constant \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_pairs_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kw):\n\u001b[0;32m--> 357\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_default_decoder\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 359\u001b[0m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;241m=\u001b[39m JSONDecoder\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/decoder.py:337\u001b[0m, in \u001b[0;36mJSONDecoder.decode\u001b[0;34m(self, s, _w)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecode\u001b[39m(\u001b[38;5;28mself\u001b[39m, s, _w\u001b[38;5;241m=\u001b[39mWHITESPACE\u001b[38;5;241m.\u001b[39mmatch):\n\u001b[1;32m 333\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Return the Python representation of ``s`` (a ``str`` instance\u001b[39;00m\n\u001b[1;32m 334\u001b[0m \u001b[38;5;124;03m containing a JSON document).\u001b[39;00m\n\u001b[1;32m 335\u001b[0m \n\u001b[1;32m 336\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 337\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraw_decode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43midx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_w\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mend\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 338\u001b[0m end \u001b[38;5;241m=\u001b[39m _w(s, end)\u001b[38;5;241m.\u001b[39mend()\n\u001b[1;32m 339\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m end \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(s):\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/decoder.py:355\u001b[0m, in \u001b[0;36mJSONDecoder.raw_decode\u001b[0;34m(self, s, idx)\u001b[0m\n\u001b[1;32m 353\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscan_once(s, idx)\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m--> 355\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m JSONDecodeError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpecting value\u001b[39m\u001b[38;5;124m\"\u001b[39m, s, err\u001b[38;5;241m.\u001b[39mvalue) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28mNone\u001b[39m\n\u001b[1;32m 356\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj, end\n", + "\u001b[0;31mJSONDecodeError\u001b[0m: Expecting value: line 1 column 1 (char 0)" + ] } ], "source": [ @@ -252,28 +268,22 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 14, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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9wMAd9FzA1xd06ZNXZ0Qnnb48GG3zy1WuNmzZ4/ef/99bd68WefOnVPLli01efJk3X777W69/ty5c9qxY4duvfVW17waPz8/NWrUSImJiXI6nUpMTMz1mpyvw8LCTNdts9mKFY4AlE9+fqamKQLlRnBwsIKCgkrk2u4OSUkmw83s2bO1efNmnT59WrVr19agQYPUr18/19o07kpKStLEiRO1bNky11NXmZmZOnjwoMLDw1WjRg29/fbbysrKkt1ulyTt3LlT9evXV/Xq1c2UDgAALM5UuFm3bp1uvfVW3XHHHerUqZPpmzdp0kTdunXTtGnTNG3aNFWuXFlLlixRSkqK7r//fgUGBmrZsmV66qmnNGLECO3fv18rVqxQVFSU6XsCAABrMxVuPv/8c7cn9RRm/vz5mjdvniZMmKBffvlFHTp00KpVq3TNNddIkpYtW6bp06drwIABqlmzph5//HENGDDAI/cGAADWYyrcBAQE6NixY3rppZf0xRdfKCUlRVWrVlWHDh00ZsyYIk3WrVSpkqZOnaqpU6fm296mTRutXbvWTJkAAKAcMhVuDh8+rCFDhshut7vmxpw5c0affPKJtm7dqnfeeafI828AAAA8wVS4mTt3rurWras333xTlSpVch3/5ZdfdN9992nBggWKjo72WJEAAADuMvVc45dffqmHH344V7CRrgwxjRw5Ul9++aVHigMAACgqU+HG39+/wEV6AgIC8iy8BwAAUFpMhZvWrVtr9erVMgwj13HDMLRq1Sq1atXKI8UBAAAUlak5N48++qiGDh2qfv36qXfv3qpZs6bOnDmjzZs369ixY3r99dc9XScAAIBbTIWb1q1ba9myZZo3b56io6NdO3W2atVKr776qjp27OjpOgEAANxiem+pLl266J133tGlS5eUkpKi0NBQBQcHe7I2AACAIjMdbjIyMnT06FH98ssv+bbTewMAALzBVLjZsWOH/va3v+n8+fOuIanf/zsuLs7TtQIAABTKVLiZMWOGqlWrpqlTp6pKlSoeLgkAAMA8U+HmxIkTWrRokW688UZP1wMAAFAspta5adq0qU6fPu3pWgAAAIrNVM/Nk08+qUmTJslut6tNmzb5PiV1zTXXFLs4AACAoirW01JPPvlkge1MKAYAeMKZ1Ax9evKCklIzVCMkQDfVrayaIQHeLgs+zFS4mTp1qvz9/TVx4kTVqFHD0zUBACBJ2n7ygt44cFrZv9nt54OjZzWsVW3dWLey9wqDTzMVbo4ePaqXXnpJN998s4fLAQCUF4X1yJxJzcgTbCQpy5BWHjitJtWC6cFBvkyFm3r16ik1NdXTtQAAygl3emQ+PXkhT7DJkWVcab+zSc1SqBZljamnpR599FEtWLBA27dv18WLFz1dEwDAwgrrkTmTmiFJSvrvvwuSlJpZUiWijDPVczNv3jwlJSVpxIgR+bbbbDYdPHiwWIUBAKzJ3R6ZGoUMOdUIcZRAdbACU+Hmz3/+s6frAACUE+72yNxUt7I+OHpWWfkEIbvtSjuQH1PhZty4cZ6uAwBQTrjbI1MzJEDDWtXWygOncwUcu026r3VtJhOjQKbXuZGkbdu26fPPP9eZM2c0YcIExcXFqWXLlqpTp46n6gMAWExRemRurFtZTaoF//epqkzVCHGwzg0KZSrcXLp0SWPHjtXnn3+uihUr6uLFi3rwwQe1Zs0aHTx4UG+99ZYaN27s6VoBABZQ1B6ZmiEBPBWFIjH1tNT8+fP17bffasWKFdq5c6cM48r/nbNmzVJYWJhefPFFjxYJALCWG+tW1rRuDXRbw+rqVDtUtzWsrmndGuiPdZhHg+Iz1XPz73//WxMnTlSXLl2UlZXlOl6rVi2NHj1azz77rMcKBABYEz0yKCmmem5SUlIKnFdTuXJlFvgDAABeYyrcNG7cWDExMfm2ffzxx8y3AQAAXmNqWGr06NEaN26ckpOTdcstt8hms+nLL7/U+vXr9fbbb2vevHmerhMAAMAtpsJNz549NWfOHM2bN0/btm2TJM2cOVPVq1fX1KlT1bt3b48WCQAA4C5T4ebIkSPq27ev+vbtq6NHjyo5OVmhoaFq0KCB/PxMjXQBAAB4hKkkcvfdd2vjxo2SpAYNGqh9+/Zq1KgRwQYAAHidqTTicDhUtWpVT9cCAABQbKaGpR599FHNnj1bv/zyi5o1a6aQkJA851xzzTXFLg4AAKCoTIWbqVOnKisrS4899liB58TFxZkuCgAAwCxT4WbatGmergMAAMAjTIWbAQMGuHWeYRh68sknNX78eIapAABAqSjRx5uys7O1ceNGnT9/viRvAwAA4FLiz27n7BgOAABQGliYBgAAWIqpOTcAUN5lZGV7uwTAJ/ji3wXCDQC46bfD7E/vivdiJYBv8pWpKAxLAQAAS6HnBgDcZLPZXH9+rrNTAXZ+PwQysrJdPZm//TviTSUebnzljQKAJwXY/RRIuAF8Eo+CAwAASylWz82RI0e0fft2JSYmKjIyUj/99JOaNWumihUrSpLsdrsOHTrkkUIBAADcYSrcZGdn65lnntF7770nwzBks9nUp08fLVq0SCdOnNBbb70lp9Pp6VoBAAAKZWpYatGiRYqJidG0adO0fft219DTY489puzsbC1YsMCjRQIAALjLVLh577339Mgjj2jgwIGqUqWK63jz5s31yCOPaPv27Z6qDwAAoEhMhZukpCQ1b94837awsDClpKQUqygAAACzTIWbevXqadu2bfm2ffHFF6pXr16xigIAADDL1ITi++67T88884wyMzN1yy23yGaz6fjx49q1a5eWL1+uv//9756uEwAAwC2mws3gwYN17tw5LV68WGvWrJFhGJo4caIcDodGjBihoUOHerpOAAAAt5he52bUqFG65557tHfvXl24cEGhoaFq27ZtrgnGAAAApa1Yi/hVrFhR3bp181QtAAAAxWYq3ISHhxe4Z5Sfn59CQkJUr149RUZGqmPHjsUqEAAAoChMPS3Vt29fnTlzRqmpqerUqZNuu+02de7cWenp6Tp16pSuu+46nT59Wvfdd5927Njh6ZoBAAAKZKrnJjk5WS1atNBrr72mChUquI6npaVp1KhRqlmzpl588UU9+eSTWrRokbp27eqxggEAAK7GVM/N5s2bNXLkyFzBRpKCgoJ0//33KyYmRpJ022236eDBg8WvEgAAwE2mJxRfvHgx3+O//PKLLl++fOXi/v4Fzs0BAJRvZ1Iz9OnJC0pKzVCNkADdVLeyaoYEeLssWICpcPPHP/5R8+fPV6NGjXJtw3Do0CG98MILuvHGGyVJsbGxatiwoWcqBQBYxvaTF/TGgdPKNv537IOjZzWsVW3dWLey9wqDJZgalnryyScVFBSkO++8U7169dKQIUMUERGhAQMGKDg4WE899ZQ+/PBDrV69Wg8++OBVr5WcnKxnnnlG3bp1U/v27TV06FDt3r3b1b5jxw7deeedatu2rXr37q1//etfZkoGAPiIM6kZeYKNJGUZ0soDp3UmNcM7hcEyTPXc1KxZU//4xz+0adMm7dq1S+fOnVPDhg01duxY9e3bV3a7XQ0aNNDatWvVpk2b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erWn6wQAWETNkADd2aSmt8uAhZkalmrSpIneffddde7cWbt27ZLdbtfnn3+ua6+9Vm+//baaN2/u6ToBAADcYqrnRpLq16+v2bNny263S5IuXbqky5cvq1KlSh4rDgAAoKhM9dxkZmZqypQp+stf/uI6tm/fPnXt2lWzZs1Sdna2xwoEAAAoClPhZuHChdq0aZP+/Oc/u461aNFCkyZN0rp167Rs2TKPFQgAAFAUpoalYmJiNHnyZA0ZMsR1rEqVKrr//vvl7++vlStXauTIkR4rEgAAwF2mem7Onz+vP/zhD/m2NWjQQPHx8cUqCgAAwCxT4aZBgwb64IMP8m37+OOPVa9evWIVBQAAYJapYalhw4bp73//u5KTk9WzZ09Vr15d586d0yeffKJ///vfev755z1dJwAAgFtMhZv+/fvr4sWLWrRokT788EPX8apVq+rpp59W//79PVUfAABAkZgKN0eOHNE999yju+++W8eOHVNycrJCQ0PVoEED+fmZ3q4KAACg2EwlkbvvvlsbN26UzWZTgwYN1L59ezVq1IhgAwAAvM5UGnE4HKpataqnawEAACg2U8NSjz76qGbPnq1ffvlFzZo1U0hISJ5zrrnmmmIXBwAAUFSmws3UqVOVlZWlxx57rMBz4uLiTBcFAABglqlwM23aNE/XAQAA4BGmws2AAQM8XQcAAIBHmAo3kpSRkaF3331Xn3/+uc6cOaMZM2boiy++UMuWLdWmTRtP1ggAAOA2U09LnTt3TgMHDtT06dN1/Phx7d+/X2lpadq6dasiIyO1b98+T9cJAADgFlPhZvbs2bp48aLef/99bdiwQYZhSJJeeukltW7dWi+99JJHiwQAAHCXqXDzySef6NFHH1W9evVks9lcxwMDA/XAAw/o22+/9ViBAAAARWEq3KSnp6tKlSr5ttntdmVmZhanJgAAANNMhZvWrVtr9erV+bbFxMSoVatWxSoKAADALNMrFN9///2644471L17d9lsNv3zn//UwoUL9dlnn2nZsmWerhMAAMAtpnpuOnTooNdff10hISFatmyZDMPQihUrdObMGS1ZskRdunTxdJ0AAABuMb3OTceOHTVmzBh99tlnunTpkkJCQtSjRw917NjRk/UBAAAUialwc+HCBY0aNUpff/217Ha7qlSpouTkZL3xxhvq1q2bFi5cqICAAE/X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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "ValueError", + "evalue": "Could not interpret input 'percentage_removed'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[14], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43msns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mboxplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mDataset\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mpercentage_removed\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpalette\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mSet2\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m sns\u001b[38;5;241m.\u001b[39mstripplot(x\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDataset\u001b[39m\u001b[38;5;124m'\u001b[39m, y\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpercentage_removed\u001b[39m\u001b[38;5;124m'\u001b[39m, data\u001b[38;5;241m=\u001b[39mdf, color\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m0.3\u001b[39m\u001b[38;5;124m'\u001b[39m, size\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m6\u001b[39m)\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/seaborn/categorical.py:2231\u001b[0m, in \u001b[0;36mboxplot\u001b[0;34m(data, x, y, hue, order, hue_order, orient, color, palette, saturation, width, dodge, fliersize, linewidth, whis, ax, **kwargs)\u001b[0m\n\u001b[1;32m 2224\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mboxplot\u001b[39m(\n\u001b[1;32m 2225\u001b[0m data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m, x\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, y\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, hue\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, order\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, hue_order\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 2226\u001b[0m orient\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, color\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, palette\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, saturation\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m.75\u001b[39m, width\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m.8\u001b[39m,\n\u001b[1;32m 2227\u001b[0m dodge\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, fliersize\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, linewidth\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, whis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1.5\u001b[39m, ax\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 2228\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 2229\u001b[0m ):\n\u001b[0;32m-> 2231\u001b[0m plotter \u001b[38;5;241m=\u001b[39m \u001b[43m_BoxPlotter\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43morder\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhue_order\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2232\u001b[0m \u001b[43m \u001b[49m\u001b[43morient\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcolor\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpalette\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msaturation\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2233\u001b[0m \u001b[43m \u001b[49m\u001b[43mwidth\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdodge\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfliersize\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlinewidth\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2235\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ax \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 2236\u001b[0m ax \u001b[38;5;241m=\u001b[39m plt\u001b[38;5;241m.\u001b[39mgca()\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/seaborn/categorical.py:785\u001b[0m, in \u001b[0;36m_BoxPlotter.__init__\u001b[0;34m(self, x, y, hue, data, order, hue_order, orient, color, palette, saturation, width, dodge, fliersize, linewidth)\u001b[0m\n\u001b[1;32m 781\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, x, y, hue, data, order, hue_order,\n\u001b[1;32m 782\u001b[0m orient, color, palette, saturation,\n\u001b[1;32m 783\u001b[0m width, dodge, fliersize, linewidth):\n\u001b[0;32m--> 785\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mestablish_variables\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43morient\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43morder\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhue_order\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 786\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mestablish_colors(color, palette, saturation)\n\u001b[1;32m 788\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdodge \u001b[38;5;241m=\u001b[39m dodge\n", + "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/seaborn/categorical.py:541\u001b[0m, in \u001b[0;36m_CategoricalPlotter.establish_variables\u001b[0;34m(self, x, y, hue, data, orient, order, hue_order, units)\u001b[0m\n\u001b[1;32m 539\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(var, \u001b[38;5;28mstr\u001b[39m):\n\u001b[1;32m 540\u001b[0m err \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCould not interpret input \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mvar\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m--> 541\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(err)\n\u001b[1;32m 543\u001b[0m \u001b[38;5;66;03m# Figure out the plotting orientation\u001b[39;00m\n\u001b[1;32m 544\u001b[0m orient \u001b[38;5;241m=\u001b[39m infer_orient(\n\u001b[1;32m 545\u001b[0m x, y, orient, require_numeric\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequire_numeric\n\u001b[1;32m 546\u001b[0m )\n", + "\u001b[0;31mValueError\u001b[0m: Could not interpret input 'percentage_removed'" + ] } ], "source": [ @@ -283,12 +293,12 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -304,9 +314,9 @@ "import matplotlib.pyplot as plt\n", "\n", "# 1. Load data\n", - "with open('erc20.json', 'r') as f:\n", + "with open('output_light/erc20.json', 'r') as f:\n", " erc20_data = json.load(f)\n", - "with open('sok.json', 'r') as f:\n", + "with open('output_light/sok.json', 'r') as f:\n", " sok_data = json.load(f)\n", "\n", "# 2. Convert to DataFrame and label\n", @@ -349,12 +359,12 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -370,9 +380,9 @@ "import matplotlib.pyplot as plt\n", "\n", "# 1. Load JSON data\n", - "with open('erc20.json', 'r') as f:\n", + "with open('output_light/erc20.json', 'r') as f:\n", " erc20_data = json.load(f)\n", - "with open('sok.json', 'r') as f:\n", + "with open('output_light/sok.json', 'r') as f:\n", " sok_data = json.load(f)\n", "\n", "# 2. Convert to DataFrame and label each row with its dataset\n", @@ -418,12 +428,12 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 18, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -439,9 +449,9 @@ "import matplotlib.pyplot as plt\n", "\n", "# 1. Load JSON data\n", - "with open('erc20.json', 'r') as f:\n", + "with open('output_light/erc20.json', 'r') as f:\n", " erc20_data = json.load(f)\n", - "with open('sok.json', 'r') as f:\n", + "with open('output_light/sok.json', 'r') as f:\n", " sok_data = json.load(f)\n", "\n", "# 2. Convert to DataFrame and label each row with its dataset\n", @@ -492,13 +502,6 @@ "plt.show()\n", "\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/use-cases/dynamically-mined-invariant-denoising/boxplot_invariants_removed.png b/use-cases/dynamically-mined-invariant-denoising/boxplot_invariants_removed.png new file mode 100644 index 0000000000000000000000000000000000000000..18ceff8c62b875f448e0239288fca4d7f089f53c GIT binary patch literal 43088 zcmeFZcT|+w`Zb6c8w}m8fDufX5KsXTB$!YE5hRKvGeS|I z3PlA)MafVk1tcfQv1Xr_?%(QfW_@eT{5A8(^jh~`Z(H@&c~5wr{p`J;b3^0!kwrW! zdAPW^7AYS+q{+oKdy{|N^);4BVmJ(vpVp7}JUb3~lY$Gc!PXC_|h*?>iiuZ?v=;I;3T|TOB!^I`Gf&6Ed zV}znT7gtn{@}d3OjzL{@4z_&d)6@N?fBOAye$?alb%XWcTi0J*uXJ<$JU+g6JSVw$ zjVE*tZ9jTq8881$_x)W*m(KeB=dAtv?$+O0_S?F3o`3z7GB)*Ee8c_2$F2Pie#thW z1z#8rl6O&9n(om5sjK?jqewIIj$B-hd_w91)StLⅇ%(KY0kO@0(5j(CD=QFOPp5 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 Date: Sat, 16 Aug 2025 11:18:24 +0200 Subject: [PATCH 6/7] Feature #67: Adding experiment results for the baseline (light version) --- .../analysis.ipynb | 101 +- .../boxplot_invariants_removed.png | Bin 43088 -> 43152 bytes .../combined_reduction_ratios.png | Bin 30313 -> 29118 bytes .../erc20.json | 0 .../output/erc20.json | 146 + ...0c2e08acb830f2a4ee4d34b48594dade48651.json | 18 + ...e5588cb1de19c70b6ad5399152d8c643fae7b.json | 279 ++ ...57c27368d1475a3ce49a25c48c40b85e7f7e1.json | 236 ++ ...15c92e67686aa268df03d4c881a76340907e8.json | 228 ++ ...833cd4cfce20c04d0279ccbb8cd827c8bcdbf.json | 279 ++ ...d3170f407cacaaa328660c2ee2499055e3b07.json | 174 ++ ...a550259532f7429530dcb93d86269629e3f2a.json | 282 ++ ...8591fe802585a9713bd6ebe75d6c285236c54.json | 407 +++ ...f3fe77732ec3fc5327eb52327b06be4e472f8.json | 430 +++ ...bdd708b6f7247d57e9281e2073d2b88a67a42.json | 286 ++ ...23909b5d8bbe01505121f15a4503b6617dae7.json | 197 ++ ...d4fb8595f4b923ec53533f4bbd641c1910aca.json | 654 +++++ ...2e04099a435439725bb40647e2b32dc136806.json | 277 ++ ...94c97a5d4374ec35bda83570c461c6d6f6079.json | 336 +++ ...0d1d98b5ca16b79c7eedada2454c2564da59e.json | 357 +++ ...c90e33ac839c29a3d98c807eeef0c4508bee8.json | 217 ++ ...690a0c9958e5375eda5694e754b125a6c972c.json | 223 ++ ...ae54b74a37be4fc11e9f1a35021848d996afc.json | 283 ++ ...8acb830f2a4ee4d34b48594dade48651-kept.json | 156 ++ ...cb1de19c70b6ad5399152d8c643fae7b-kept.json | 350 +++ ...368d1475a3ce49a25c48c40b85e7f7e1-kept.json | 676 +++++ ...e67686aa268df03d4c881a76340907e8-kept.json | 702 +++++ ...4cfce20c04d0279ccbb8cd827c8bcdbf-kept.json | 410 +++ ...f407cacaaa328660c2ee2499055e3b07-kept.json | 358 +++ ...59532f7429530dcb93d86269629e3f2a-kept.json | 706 +++++ ...e802585a9713bd6ebe75d6c285236c54-kept.json | 1040 +++++++ ...7732ec3fc5327eb52327b06be4e472f8-kept.json | 682 +++++ ...8b6f7247d57e9281e2073d2b88a67a42-kept.json | 406 +++ ...b5d8bbe01505121f15a4503b6617dae7-kept.json | 470 ++++ ...595f4b923ec53533f4bbd641c1910aca-kept.json | 1966 ++++++++++++++ ...99a435439725bb40647e2b32dc136806-kept.json | 724 +++++ ...a5d4374ec35bda83570c461c6d6f6079-kept.json | 642 +++++ ...8b5ca16b79c7eedada2454c2564da59e-kept.json | 696 +++++ ...3ac839c29a3d98c807eeef0c4508bee8-kept.json | 664 +++++ ...c9958e5375eda5694e754b125a6c972c-kept.json | 676 +++++ ...74a37be4fc11e9f1a35021848d996afc-kept.json | 768 ++++++ ...b830f2a4ee4d34b48594dade48651-removed.json | 138 - ...de19c70b6ad5399152d8c643fae7b-removed.json | 72 + ...d1475a3ce49a25c48c40b85e7f7e1-removed.json | 219 ++ ...686aa268df03d4c881a76340907e8-removed.json | 168 ++ ...ce20c04d0279ccbb8cd827c8bcdbf-removed.json | 185 ++ ...7cacaaa328660c2ee2499055e3b07-removed.json | 138 + ...32f7429530dcb93d86269629e3f2a-removed.json | 167 ++ ...2585a9713bd6ebe75d6c285236c54-removed.json | 409 +++ ...2ec3fc5327eb52327b06be4e472f8-removed.json | 147 + ...f7247d57e9281e2073d2b88a67a42-removed.json | 32 + ...8bbe01505121f15a4503b6617dae7-removed.json | 136 + ...f4b923ec53533f4bbd641c1910aca-removed.json | 820 ++++++ ...435439725bb40647e2b32dc136806-removed.json | 208 ++ ...4374ec35bda83570c461c6d6f6079-removed.json | 233 ++ ...ca16b79c7eedada2454c2564da59e-removed.json | 230 ++ ...839c29a3d98c807eeef0c4508bee8-removed.json | 186 ++ ...58e5375eda5694e754b125a6c972c-removed.json | 215 ++ ...37be4fc11e9f1a35021848d996afc-removed.json | 266 ++ .../output/sok.json | 82 + ...1df026010b5aea781f90542ee19e900f2db15.json | 12 +- ...4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json | 383 ++- ...66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json | 198 +- ...7259b2b3a4c17e7c43c54409810af48ba5210.json | 42 + ...a87899490ece95443e979ca9485cbe7e71522.json | 10 + ...e6fecd516ecc3849daf6845e3ec868087b755.json | 11 + ...93840aad42d2621e1a452bf5d7076ff804d61.json | 39 +- ...43e627e64355f1861cec6d3a6688b31a6f952.json | 144 +- ...6010b5aea781f90542ee19e900f2db15-kept.json | 48 + ...e803ee84009ce6e1ecf419c9cb1e8af0-kept.json | 1944 ++++++++++++- ...d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json | 464 ++++ ...2b3a4c17e7c43c54409810af48ba5210-kept.json | 364 +++ ...9490ece95443e979ca9485cbe7e71522-kept.json | 100 + ...d516ecc3849daf6845e3ec868087b755-kept.json | 78 + ...aad42d2621e1a452bf5d7076ff804d61-kept.json | 192 ++ ...7e64355f1861cec6d3a6688b31a6f952-kept.json | 714 +++++ ...0b5aea781f90542ee19e900f2db15-removed.json | 40 - ...3ee84009ce6e1ecf419c9cb1e8af0-removed.json | 2401 +++-------------- ...b37fa76aa3ed1ff33e8e39f0b9c7a-removed.json | 670 ++--- ...a4c17e7c43c54409810af48ba5210-removed.json | 322 --- ...0ece95443e979ca9485cbe7e71522-removed.json | 90 - ...6ecc3849daf6845e3ec868087b755-removed.json | 69 - ...42d2621e1a452bf5d7076ff804d61-removed.json | 197 +- ...4355f1861cec6d3a6688b31a6f952-removed.json | 720 +---- .../percentage_removed_comparison.png | Bin 0 -> 149612 bytes .../sok.json | 0 86 files changed, 26608 insertions(+), 4197 deletions(-) delete mode 100644 use-cases/dynamically-mined-invariant-denoising/erc20.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0xc382e04099a435439725bb40647e2b32dc136806.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x37a15c92e67686aa268df03d4c881a76340907e8-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x6f2a550259532f7429530dcb93d86269629e3f2a-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x8b68591fe802585a9713bd6ebe75d6c285236c54-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xb2923909b5d8bbe01505121f15a4503b6617dae7-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xc382e04099a435439725bb40647e2b32dc136806-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xeeb690a0c9958e5375eda5694e754b125a6c972c-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-kept.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x37a15c92e67686aa268df03d4c881a76340907e8-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x6f2a550259532f7429530dcb93d86269629e3f2a-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x8b68591fe802585a9713bd6ebe75d6c285236c54-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xb2923909b5d8bbe01505121f15a4503b6617dae7-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xc382e04099a435439725bb40647e2b32dc136806-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xeeb690a0c9958e5375eda5694e754b125a6c972c-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok.json delete mode 100644 use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x818e6fecd516ecc3849daf6845e3ec868087b755-removed.json create mode 100644 use-cases/dynamically-mined-invariant-denoising/percentage_removed_comparison.png delete mode 100644 use-cases/dynamically-mined-invariant-denoising/sok.json diff --git a/use-cases/dynamically-mined-invariant-denoising/analysis.ipynb b/use-cases/dynamically-mined-invariant-denoising/analysis.ipynb index 64fa454..f9a619f 100644 --- a/use-cases/dynamically-mined-invariant-denoising/analysis.ipynb +++ b/use-cases/dynamically-mined-invariant-denoising/analysis.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -23,7 +23,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -37,24 +37,37 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { - "ename": "JSONDecodeError", - "evalue": "Expecting value: line 1 column 1 (char 0)", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[5], line 68\u001b[0m\n\u001b[1;32m 64\u001b[0m plt\u001b[38;5;241m.\u001b[39mclf()\n\u001b[1;32m 67\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;18m__name__\u001b[39m \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m__main__\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m---> 68\u001b[0m \u001b[43mRQ1\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43merc20\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;66;03m# print(\"_______________________________________________________________\")\u001b[39;00m\n\u001b[1;32m 70\u001b[0m RQ1(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msok\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "Cell \u001b[0;32mIn[5], line 5\u001b[0m, in \u001b[0;36mRQ1\u001b[0;34m(file_path)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mRQ1\u001b[39m(file_path):\n\u001b[1;32m 2\u001b[0m \n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# Load data from JSON file\u001b[39;00m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(file_path, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[0;32m----> 5\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;66;03m# Flatten nested JSON structure\u001b[39;00m\n\u001b[1;32m 8\u001b[0m flat_data \u001b[38;5;241m=\u001b[39m []\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/__init__.py:293\u001b[0m, in \u001b[0;36mload\u001b[0;34m(fp, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload\u001b[39m(fp, \u001b[38;5;241m*\u001b[39m, \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, object_hook\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, parse_float\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 275\u001b[0m parse_int\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, parse_constant\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, object_pairs_hook\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw):\n\u001b[1;32m 276\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Deserialize ``fp`` (a ``.read()``-supporting file-like object containing\u001b[39;00m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;124;03m a JSON document) to a Python object.\u001b[39;00m\n\u001b[1;32m 278\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;124;03m kwarg; otherwise ``JSONDecoder`` is used.\u001b[39;00m\n\u001b[1;32m 292\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 293\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 294\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobject_hook\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobject_hook\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 295\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_float\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_float\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparse_int\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_int\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 296\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_constant\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_constant\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mobject_pairs_hook\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobject_pairs_hook\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/__init__.py:357\u001b[0m, in \u001b[0;36mloads\u001b[0;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 352\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m kw[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mencoding\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 355\u001b[0m parse_int \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m parse_float \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 356\u001b[0m parse_constant \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_pairs_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kw):\n\u001b[0;32m--> 357\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_default_decoder\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 359\u001b[0m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;241m=\u001b[39m JSONDecoder\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/decoder.py:337\u001b[0m, in \u001b[0;36mJSONDecoder.decode\u001b[0;34m(self, s, _w)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecode\u001b[39m(\u001b[38;5;28mself\u001b[39m, s, _w\u001b[38;5;241m=\u001b[39mWHITESPACE\u001b[38;5;241m.\u001b[39mmatch):\n\u001b[1;32m 333\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Return the Python representation of ``s`` (a ``str`` instance\u001b[39;00m\n\u001b[1;32m 334\u001b[0m \u001b[38;5;124;03m containing a JSON document).\u001b[39;00m\n\u001b[1;32m 335\u001b[0m \n\u001b[1;32m 336\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 337\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraw_decode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43midx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_w\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mend\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 338\u001b[0m end \u001b[38;5;241m=\u001b[39m _w(s, end)\u001b[38;5;241m.\u001b[39mend()\n\u001b[1;32m 339\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m end \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(s):\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.8/json/decoder.py:355\u001b[0m, in \u001b[0;36mJSONDecoder.raw_decode\u001b[0;34m(self, s, idx)\u001b[0m\n\u001b[1;32m 353\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscan_once(s, idx)\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m--> 355\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m JSONDecodeError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpecting value\u001b[39m\u001b[38;5;124m\"\u001b[39m, s, err\u001b[38;5;241m.\u001b[39mvalue) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28mNone\u001b[39m\n\u001b[1;32m 356\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj, end\n", - "\u001b[0;31mJSONDecodeError\u001b[0m: Expecting value: line 1 column 1 (char 0)" + "name": "stdout", + "output_type": "stream", + "text": [ + "Total Parsing Time: 0.05190396308898926\n", + "Total Reduction Time: 10.079729557037354\n", + "Average Parsing Time: 0.0014417767524719238\n", + "Average Reduction Time: 0.279992487695482\n", + "Average Reduction Ratio: 0.8\n", + "Average predicates removed: 35.166666666666664\n", + "Total predicates removed: 1266\n", + "Total Parsing Time: 0.04531979560852051\n", + "Total Reduction Time: 17.858713150024414\n", + "Average Parsing Time: 0.0022659897804260254\n", + "Average Reduction Time: 0.8929356575012207\n", + "Average Reduction Ratio: 0.91\n", + "Average predicates removed: 57.8\n", + "Total predicates removed: 1156\n" ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -120,14 +133,14 @@ " plt.grid(False)\n", "\n", " # Save and show the plot\n", - " plt.savefig(f'reduction_ratio_histogram_{file_path}.pdf', format='pdf', dpi=300)\n", + " plt.savefig(f'reduction_ratio_histogram_{file_path.replace(\"/\", \"_\").replace(\".json\", \"\")}.pdf', format='pdf', dpi=300)\n", " plt.clf()\n", "\n", "\n", "if __name__ == \"__main__\":\n", - " RQ1(\"erc20\")\n", + " RQ1(\"output_light/erc20.json\")\n", " # print(\"_______________________________________________________________\")\n", - " RQ1(\"sok\")" + " RQ1(\"output_light/sok.json\")" ] }, { @@ -137,7 +150,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAJICAYAAADxUwLTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABv20lEQVR4nO3dd3yNd//H8ffJPCGI2DVqlVCbRG1CtcqtpNrSooPapUpp7rtW7VUrtWpVS5E21SFK7VbtutGKFaPUiBUrOzm/P/xybmmC65DknCSv5+Ph0eS6vuc6n3Mker3Pd5ksFotFAAAAAGCAk70LAAAAAJB1ECAAAAAAGEaAAAAAAGAYAQIAAACAYQQIAAAAAIYRIAAAAAAYRoAAAAAAYBgBAgAAAIBhBAgAQLaUU/ZJzW6vM7u9HiA7IkAAsMmhQ4f0wQcfqGnTpqpWrZpatGihYcOG6ezZs/YuLd3MmjVLFStWtHcZNtm5c6eee+45ValSRd27d0+zjSO+Ln9/f3344Yfpft3jx4+rU6dOD2yza9cuVaxYMdWfKlWqqHHjxhoyZIguX76cLvV06dJFXbp0SZdrJbt586aGDBmivXv3Zujz3E+XLl1SvXc+Pj6qVauWAgIC9N1339l8zX379qlHjx7W78+dO6eKFSsqJCQkPUsH8Jhc7F0AgKxj2bJlGjdunOrWratBgwapcOHCOnPmjBYuXKj169fr888/l4+Pj73LfGwvv/yyGjVqZO8ybDJp0iQlJSVp/vz5KlCggL3LMSwoKEienp7pft2ffvpJ+/fvN9R2+PDhevrpp63f37lzR/v27dP8+fN16tQpBQcHp3t96SEsLEzfffedXnrpJeuxESNGZGoNlStXTvGciYmJunjxopYsWaIhQ4bIy8tLTZo0MXy94OBghYeHW78vXLiwVq5cqVKlSqVr3QAeDwECgCH79u3T2LFj9frrr+s///mP9XjdunXVokULtWvXTv/+97+zxSeFRYsWVdGiRe1dhk0iIyPl6+ur+vXr27sUm1SuXNneJah8+fKqUaNGimMNGjRQXFycPvvsM504cULly5e3T3E2yuw6PT09U713ktS4cWPVq1dPISEhNgWIf3Jzc0vz+gDsiyFMAAxZuHCh8uTJo/fffz/VOW9vb3344Ydq3ry5oqKiJN39JHLZsmX617/+pWrVqqlp06aaMmWKYmNjrY/78MMP1a1bN61cuVItWrRQtWrV1LFjR506dUqbN2/Wv/71L1WvXl0vv/yywsLCUjyuS5cu+vrrr9WsWTPVrFlTb7zxho4cOZKirj179qhbt27y9fVVlSpV5O/vr1mzZikpKUnS/4ZHLF68WM8//7yqV6+ub775JtVQn7/++ku9evVS3bp1Vb16db366qvaunVriuc6dOiQunXrprp166pWrVrq1auXjh8/bj2fPFxmx44devvtt1W9enU1aNBAkydPVmJi4gPf+9OnT6t///5q0KCBatSooS5dumjfvn0pXsPff/+t1atXq2LFitq1a9cDr5csJCRElStX1oEDB/Tqq6+qatWqatasmRYuXGht89xzz6l///6pHvviiy+qd+/eku7+Xc+fP19t2rRRtWrVVKNGDXXs2FE7d+60tp81a5aeffZZBQUFyc/PTw0bNtSNGzdSDWE6d+6chgwZooYNG+rpp59WvXr1NGTIEF2/ft3axt/fXzNnztTEiRNVv359VatWTd26ddPp06etzxUUFCRJqlixombNmmXo/finvHnzSpJMJpP12LFjx9SzZ0/VqlVLtWrVUt++fVMN3zt//rz69eun2rVrq0GDBlq8eHGqa6dVV1pDzLZu3aqOHTuqRo0aatiwoYYPH66bN29q165d6tq1qySpa9eu1mFL/xzCFBsbq08//VTPP/+8qlatqpYtW2r+/PnW34Hkx/znP//R/Pnz1bRpU1WtWlUdO3bUwYMHH+VtkyS5u7vLzc0txXt37do1jRo1Ss2aNVOVKlXk5+envn376ty5c5Lu/l5/++23+vvvv63DltIawvSg34dkP/74o9q2batq1arpmWee0eDBg3Xp0qVHfj0AUiJAAHgoi8WiX3/9VfXq1ZOHh0eabV544QX17dtXuXLlknR3WMj48ePVokULzZkzR6+//rq+/PJL9enTJ8Ukyf379+vLL7/Uhx9+qPHjxys8PFw9evTQ+PHj1bNnT33yySe6cOGCBg8enOL5wsLCNG3aNPXr10+TJ0/W9evX1blzZ0VEREiSjhw5ojfffFNeXl6aNm2a5syZozp16igoKEhr165Nca1Zs2bpnXfe0aRJk9SgQYMU55KSktSzZ09FR0dr0qRJmj17try8vNS7d2+dOXNG0t35B8nj7ceNG6cxY8bowoUL6tixY4rhGJI0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dUtbtmx57Nfq6+urzZs3p5jEnJiYqDVr1qhq1arWYUQZKXk41saNG7Vu3Tq1bdvWOqzm5MmTioyMVNeuXVW+fHnrJ9fbtm2TZFuPwL59+5Q3b151797d+sl18p4MtvYsJNfxKFxcXDRy5EglJCRozJgx1uN+fn46ceKEKlWqpKpVq6pq1aqqUqWKlixZop9//lnS3Tkb586d06FDh6yPu3btmv773/+meA5PT89UqwL9/vvv1q9z586tSpUqWYeCJdu2bZt69OihiIiIVD0L/+Tn56eEhAT99NNPKY5///33kpQuv4dpef7559WoUSP9+OOP1uGM+/fvV1JSkt59911r72FiYqJ16Ffy3+/D/t6M/D5MnDhRL730kiwWizw8PNSsWTPrBPsH9aICMI4hTAAMqVGjhgYMGKDp06crPDxc7dq1U/78+XX8+HEtXLhQsbGx1nBRvnx5tW/fXjNnzlR0dLR8fX0VFhamoKAg1a1bN102aUteYWbgwIFydnZWUFCQ8uXLZx2iUK1aNa1du1ZfffWVypUrpyNHjmjOnDkymUwPHdd9r8qVK8tsNmvIkCF69913VbBgQf32228KCwuzLqM5aNAgdevWTT169NBrr72m+Ph4zZ8/X3FxcdYJ04+qX79+2rZtm7p27aoePXrI1dVVX375pc6ePasFCxY81rVt0bZtW/Xv31+JiYnWlXWku8N/PD09NXfuXLm4uMjFxUXr1q3T119/LenhY+jvVa1aNX311VeaMGGCmjVrpoiICC1cuFBXrlxJtWLTwyTPlfnxxx9VvXp166Rso2rWrKm2bdvqu+++09q1a9WqVSv16dNHHTt2VM+ePdWpUye5u7tr5cqV2rBhg2bOnCnp7nCvpUuXql+/fho4cKA8PT01Z86cVAGoadOmWrNmjapXr64nn3xSISEh1lW9kvXv31+9e/fW+++/r3bt2unKlSv65JNP1KJFC1WoUEFHjx6VJG3ZskX58uVLtYlj48aNVbduXX300Ue6dOmSfHx8tHv3bn322Wdq3759hu4Z8e9//1tt27bVmDFj9O2336patWqSpI8//lgvvfSSbty4oWXLllmXXo6KipKnp6fy5s2rK1euaOvWrWnOlzHy+/DMM89o8eLF+vDDD9W2bVvFx8drwYIF8vLy0jPPPJNhrxnISeiBAGBY7969NX/+fEl3lyvt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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAJICAYAAADxUwLTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABwNUlEQVR4nO3dd1yVdf/H8fdhI6iI+3bkStHcCuZWNNPqNiUrLbWhudM00+jO1HLvQa5cWVpKkQ01zV2W219aggN3ibhwseH6/eHNuSVAr4NsXs/Hw0dwne+5zuccIa/39V0WwzAMAQAAAIAJdtldAAAAAIDcgwABAAAAwDQCBAAAAADTCBAAAAAATCNAAAAAADCNAAEAAADANAIEAAAAANMIEAAAAABMI0AAAPKk/LJPal57n3nt/QB5EQECgE2OHDmid955R61atVLt2rXVtm1bjRo1SufPn8/u0jLM3LlzVa1atewuwya7d+/Wk08+qZo1a6p3796ptsmJ78vX11fvvvtuhp/3xIkT6tat233b7NmzR9WqVUvxp2bNmmrRooVGjBihy5cvZ0g9PXr0UI8ePTLkXElu3rypESNGaP/+/Zn6Omnp0aNHis/Oy8tL9evXl5+fn7799lubz3ngwAH16dPH+v2FCxdUrVo1BQUFZWTpAB6SQ3YXACD3WLlypSZMmKBGjRrp7bffVokSJXT27FktWbJEmzZt0qeffiovL6/sLvOhPf/882revHl2l2GTKVOmKDExUYsWLVLRokWzuxzTAgIC5O7unuHn/fHHH3Xo0CFTbT/44AM99thj1u/v3LmjAwcOaNGiRTp9+rQCAwMzvL6MEBwcrG+//VbPPfec9djo0aOztIYaNWoke82EhASFhYVp+fLlGjFihDw8PNSyZUvT5wsMDFRoaKj1+xIlSmj16tUqX758htYN4OEQIACYcuDAAY0fP14vv/yy/vOf/1iPN2rUSG3btlWnTp303nvv5Yk7haVKlVKpUqWyuwybREREyNvbW02aNMnuUmxSo0aN7C5BVapUUd26dZMda9q0qWJjY/XJJ5/o5MmTqlKlSvYUZ6OsrtPd3T3FZydJLVq0UOPGjRUUFGRTgPgnJyenVM8PIHsxhAmAKUuWLFHBggU1bNiwFI95enrq3XffVZs2bRQZGSnp7p3IlStX6t///rdq166tVq1aadq0aYqJibE+791331WvXr20evVqtW3bVrVr11bXrl11+vRpbdu2Tf/+979Vp04dPf/88woODk72vB49euirr75S69atVa9ePb3yyisKCQlJVte+ffvUq1cveXt7q2bNmvL19dXcuXOVmJgo6X/DI5YtW6b27durTp06+vrrr1MM9Tl37pz69eunRo0aqU6dOnrxxRe1Y8eOZK915MgR9erVS40aNVL9+vXVr18/nThxwvp40nCZ3377Ta+//rrq1Kmjpk2baurUqUpISLjvZ3/mzBkNHjxYTZs2Vd26ddWjRw8dOHAg2Xv466+/tHbtWlWrVk179uy57/mSBAUFqUaNGvr999/14osvqlatWmrdurWWLFlibfPkk09q8ODBKZ777LPPqn///pLu/l0vWrRIzzzzjGrXrq26deuqa9eu2r17t7X93Llz9cQTTyggIEA+Pj5q1qyZbty4kWII04ULFzRixAg1a9ZMjz32mBo3bqwRI0bo+vXr1ja+vr6aM2eOJk+erCZNmqh27drq1auXzpw5Y32tgIAASVK1atU0d+5cU5/HPxUqVEiSZLFYrMeOHz+uvn37qn79+qpfv74GDhyYYvje33//rUGDBqlBgwZq2rSpli1bluLcqdWV2hCzHTt2qGvXrqpbt66aNWumDz74QDdv3tSePXvUs2dPSVLPnj2tw5b+OYQpJiZGH3/8sdq3b69atWqpXbt2WrRokfV3IOk5//nPf7Ro0SK1atVKtWrVUteuXXX48OH0fGySJGdnZzk5OSX77K5du6axY8eqdevWqlmzpnx8fDRw4EBduHBB0t3f62+++UZ//fWXddhSakOY7vf7kOSHH35Qx44dVbt2bT3++OMaPny4Ll26lO73AyA5AgSABzIMQ7/88osaN24sV1fXVNs89dRTGjhwoAoUKCDp7rCQiRMnqm3btpo/f75efvllff755xowYECySZKHDh3S559/rnfffVcTJ05UaGio+vTpo4kTJ6pv376aMWOGLl68qOHDhyd7veDgYM2cOVODBg3S1KlTdf36dXXv3l3h4eGSpJCQEL366qvy8PDQzJkzNX/+fDVs2FABAQHasGFDsnPNnTtXb7zxhqZMmaKmTZsmeywxMVF9+/ZVVFSUpkyZonnz5snDw0P9+/fX2bNnJd2df5A03n7ChAkaN26cLl68qK5duyYbjiFJw4cP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7du3P/R79fb21rZt25JNYk5ISNC6detUq1Yt6zCizJQ0HGvLli3auHGjOnbsaB1Wc+rUKUVERKhnz56qUqWK9c71zp07JdnWI3DgwAEVKlRIvXv3tt65TtqTwdaehaQ60sPBwUFjxoxRfHy8xo0bZz3u4+OjkydPqnr16qpVq5Zq1aqlmjVravny5frpp58k3Z2zceHCBR05csT6vGvXrun//u//kr2Gu7t7ilWBDh48aP3azc1N1atXtw4FS7Jz50716dNH4eHhKXoW/snHx0fx8fH68ccfkx3/7rvvJClDfg9T0759ezVv3lw//PCDdTjjoUOHlJiYqDfffNPae5iQkGAd+pX09/ugvzczvw+TJ0/Wc889J8Mw5OrqqtatW1sn2N+vFxWAeQxhAmBK3bp1NWTIEM2aNUuhoaHq1KmTihQpohMnTmjJkiWKiYmxhosqVaqoc+fOmjNnjqKiouTt7a3g4GAFBASoUaNGGbJJW9IKM0OHDpW9vb0CAgJUuHBh6xCF2rVra8OGDfriiy9UuXJlhYSEaP78+bJYLA8c132vGjVqyMXFRSNGjNCbb76pYsWK6ddff1VwcLB1Gc23335bvXr1Up8+ffTSSy8pLi5OixYtUmxsrHXCdHoNGjRIO3fuVM+ePdWnTx85Ojrq888/1/nz57V48eKHOrctOnbsqMGDByshIcG6so50d/iPu7u7FixYIAcHBzk4OGjjxo366quvJD14DP29ateurS+++EKTJk1S69atFR4eriVLlujKlSspVmx6kKS5Mj/88IPq1KljnZRtVr169dSxY0d9++232rBhgzp06KABAwaoa9eu6tu3r7p16yZnZ2etXr1amzdv1pw5cyTdHe61YsUKDRo0SEOHDpW7u7vmz5+fIgC1atVK69atU506dfTII48oKCjIuqpXksGDB6t///4aNmyYOnXqpCtXrmjGjBlq27atqlatqmPHjkmStm/frsKFC6fYxLFFixZq1KiR3n//fV26dEleXl7au3evPvnkE3Xu3DlT94x477331LFjR40bN07ffPONateuLUn68MMP9dxzz+nGjRtauXKldenlyMhIubu7q1ChQrpy5Yp27NiR6nwZM78Pjz/+uJYtW6Z3331XHTt2VFxcnBYvXiwPDw89/vjjmfaegfyEHggApvXv31+LFi2SdHe50j59+ujz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", "text/plain": [ "
" ] @@ -153,9 +166,9 @@ "import matplotlib.pyplot as plt\n", "\n", "# Load data from JSON files\n", - "with open('erc20.json', 'r') as f:\n", + "with open('output/erc20.json', 'r') as f:\n", " erc20_data = json.load(f)\n", - "with open('sok.json', 'r') as f:\n", + "with open('output/sok.json', 'r') as f:\n", " sok_data = json.load(f)\n", "\n", "# Convert JSON data into DataFrames and add a column to indicate the dataset source\n", @@ -192,7 +205,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAJICAYAAADxUwLTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACQmklEQVR4nOzdd3wT9R8G8OfSpnsPuqDQAqWMtswCsspG9hAFlSVIZQgyZAqCgAMQkaGAgICAyFAUUdnjJxssu2VTKC3deyVN7vdHSSC0haRNm5Q+79erL+3d5fJJSNt77rsEURRFEBERERERaUFi6AKIiIiIiKj8YIAgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFEVAFUlDVDK8rrNCS+x0TEAEFUAleuXMHHH3+MkJAQBAYGokOHDpg1axYePnxo6NL0Zvny5ahVq5ahy9DJ6dOn0blzZ9SrVw8jRowo9BhjfF3t2rXDtGnT9H7eW7duYeDAgS885syZM6hVq1aBr3r16qF169aYMmUK4uPj9VLPoEGDMGjQIL2cSyUtLQ1TpkzB+fPnS/V5Xmb9+vWYPHkygMLfU39/fzRs2BADBgzA4cOHy7Q2fdDms1TWVD/Lz3/Vr18fnTt3xjfffIO8vDxDl1kmoqKiUKtWLfz6668AgLt376Jdu3ZIS0szcGX0qjE1dAFE5dWWLVvw+eefo2nTppg0aRIqVaqEyMhIrFu3Dvv378fGjRvh7+9v6DJLrH///mjVqpWhy9DJwoULoVQqsWbNGjg7Oxu6HK2tWLECNjY2ej/vP//8g7CwMK2OnT17NurWrav+PjMzExcuXMCaNWtw79497NixQ+/16UN4eDh+//139OvXT73t008/LdMa7ty5g9WrV+OPP/7Q2P7seyqKIlJTU7F+/XqMHj0aq1evRps2bcq0zpLQ5bNU1n755ReN75OTk/Hnn39i1apVyMvLw8cff2ygygzH19cX7du3x/z587Fw4UJDl0OvEAYIomK4cOECFixYgHfeeQczZ85Ub2/atCk6dOiA3r17Y8aMGeq7QOWZu7s73N3dDV2GTlJSUtCkSRO89tprhi5FJ3Xq1DF0CahRowbq16+vsa1FixaQyWT44YcfcPv2bdSoUcMwxemorOtctGgRunfvDjc3twJ1PP+eNm7cGCEhIdi0aVO5ChDG7Pn3GADatm2LqKgo/PrrrxUyQADAyJEjERISgiFDhmjcHCAqCXZhIiqGdevWwdbWFhMnTiywz8nJCdOmTUP79u2RlZUFAFAoFNiyZQt69OiBwMBAhISEYPHixcjNzVU/btq0aRg+fDh++eUXdOjQAYGBgRgwYADu3buHI0eOoEePHggKCkL//v0RHh6u8bhBgwZh586daNu2LRo0aIAhQ4YgIiJCo65z585h+PDhaNKkCerVq4d27dph+fLlUCqVAJ42ff/444/o0qULgoKCsGvXrgJdfR48eIAPPvgATZs2RVBQEN566y0cO3ZM47muXLmC4cOHo2nTpmjYsCE++OAD3Lp1S71f1bXj1KlTeO+99xAUFIQWLVpg0aJFUCgUL3zv79+/j3HjxqFFixaoX78+Bg0ahAsXLmi8hkePHmH37t2oVasWzpw588Lzqfz666+oU6cOLl26hLfeegsBAQFo27Yt1q1bpz6mc+fOGDduXIHH9urVC6NGjQKQ/2+9Zs0adO/eHYGBgahfvz4GDBiA06dPq49fvnw5OnbsiBUrViA4OBgtW7ZEampqgS5MUVFRmDJlClq2bIm6deuiefPmmDJlCpKTk9XHtGvXDsuWLcNXX32F1157DYGBgRg+fDju37+vfq4VK1YAAGrVqoXly5dr9X48z87ODgAgCIJ6282bNxEaGoqGDRuiYcOGGDNmTIHue9HR0Rg7diwaNWqEFi1a4Mcffyxw7sLqKqyL2bFjxzBgwADUr18fLVu2xOzZs5GWloYzZ85g8ODBAIDBgweruy0934UpNzcXK1euRJcuXRAQEIBOnTphzZo16p8B1WNmzpyJNWvWICQkBAEBARgwYAAuX778wvfn5s2bOHr0KLp37/7C41RsbGzg4+OD6Oho9baUlBTMnj0br732GgICAvDmm2/i1KlTBd6rFStWoG/fvggMDFT/2969exdjx45FcHAwmjRpgtDQUNy5c0fjtS9cuBBt2rRBvXr10KNHD/z1118a5y7uZykpKQlz585F27ZtUa9ePQQHB2PMmDGIiorSOP+6devQvn179e+2w4cPF/gZ1eYzpSsbGxuNzy0AHDx4EH379kVAQABatGiB+fPnq39fq15rly5dcODAAXTv3h0BAQHo1asXwsLCcPHiRfTv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IiIiIio5g3dhio2NxaeffoozZ84UWDBl+/btkEql+Oyzz2Bqaorq1asjMjISa9asQb9+/SCTybB+/XpMnjwZISEhAIBvvvkGrVq1wv79+9G9e/eyf0FERERERK8wg7dAXLt2DVKpFH/88UeB1UTPnz+P4OBgjRUomzVrhvv37yMhIQERERHIzMzUWE3Xzs4OderUwblz58rsNRARERERVRQGb4Fo164d2rVrV+i+x48fF5g3uVKlSgCAmJgY9cqKz04LpzpGtU9XYWFhEEXxhYv2EBERERG9SuRyOQRBQIMGDV56rMEDxIvk5OTAzMxMY5u5uTkAIDc3V72qa2HHpKamFus5RVGEKIocQ0FEREREVAijDhAWFhYFLuRzc3MB5K9cqVpRUSaTaayumJubC0tLy2I9p1QqhSiKqFGjRjGrJiIiIiIqX27fvg1BELQ61qgDhLu7O+Li4jS2qb53c3NDXl6eepu3t7fGMbVq1Sr28wqCACsrq2I/noiIiIioPNE2PABGMIj6RZo0aYILFy5AoVCot50+fRo+Pj5wdnaGv78/bGxscObMGfX+tLQ0XL9+HU2aNDFEyURERERErzSjDhD9+vVDRkYGZs6cidu3b+PXX3/Fhg0b1CtXmpmZ4d1338XixYtx6NAhREREYMKECXB3d0enTp0MXD0RERER0avHqLswOTs7Y+3atViwYAH69OkDV1dXTJkyBX369FEfM27cOOTl5eGTTz5BTk4OmjRpgnXr1nEWJSIiIiKiUiCIoigaughjcuXKFQBAQECAgSshIiIiIiobulwDG3UXJiIiIiIiMi4MEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtMUAQEREREZHWGCCIiIiIiEhrDBBERERERKQ1BggiIiIiItIaAwQREREREWmNAYKIiIiIiLTGAEFERERERFpjgCAiIiIiIq0xQBARERERkdYYIIiIiIiISGsMEEREREREpDUGCCIiIiIi0hoDBBERERERaY0BgoiIiIiItMYAQUREREREWmOAICIiIiIirTFAEBERERGR1hggiIiIiIhIawwQRERERESkNQYIIiIiIiLSGgMEERERERFpjQGCiIiIiIi0xgBBRERERERaY4AgIiIiIiKtlYsAkZeXh2+//RZt27ZFgwYN8M477+DixYvq/eHh4Xj33XdRv359tGvXDps2bTJcsUREREREr7ByESC+//577NixA/PmzcPu3bvh4+ODESNGIC4uDsnJyRg2bBi8vb2xa9cujBkzBosXL8auXbsMXTYRERER0SvH1NAFaOPgwYPo3r07WrZsCQCYNm0aduzYgYsXL+LevXuQSqX47LPPYGpqiurVqyMyMhJr1qxBv379DFw5EREREdGrpVy0QDg7O+PIkSOIioqCQqHAL7/8AjMzM/j7++P8+fMIDg6GqenTLNSsWTPcv38fCQkJBqyaiIiIiOjVUy5aIGbOnInx48ejffv2MDExgUQiwfLly+Ht7Y3Hjx/Dz89P4/hKlSoBAGJiYuDi4mKIkomIiIiIXknlIkDcvn0btra2WLlyJdzc3LBjxw5MnjwZmzdvRk5ODszMzDSONzc3BwDk5uYW6/lEUURWVlaJ6yYiIiIiKg9EUYQgCFoda/QBIiYmBpMmTcKGDRvQuHFjAEBAQABu376N5cuXw8LCAjKZTOMxquBgZWVV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FSB+//13fP3114iPj4cgCNixYweWL18OqVSKr7/+GmZmZvquk4iIiIiIjIDOszD99ddfmDp1Kpo1a4YlS5ZAqVQCADp27Ihjx47hu+++03uRRERERERkHHRugVi1ahUGDBiAOXPmQKFQqLf369cPSUlJ2L59Oz766CN91khEREREREZC5xaIe/fuoWPHjoXuCwoKQmxsbImLIiIiIiIi46RzgHB2dsadO3cK3Xfnzh04OzuXuCgiIiIiIjJOOgeIrl27YtmyZfjnn38gk8kAAIIg4OrVq/juu+/QpUsXvRdJRERERETGQecxEB999BFu3ryJjz76CBJJfv4YNGgQsrKy0LhxY4wfP17vRRIRERERkXHQOUCYmZlh7dq1OHHiBE6fPo2UlBTY2toiODgYbdq0gSAIpVEnEREREREZAZ0DxMGDBxESEoIWLVqgRYsWpVETEREREREZKZ0DxNixY+Hg4ICuXbuiV69eCAoKKo26iIiIiIjICOk8iPq3335Dv379cPToUQwYMACdO3fGypUr8fDhw9Koj4iIiIiIjIggiqJY3AdfuHABe/fuxb59+5CUlIT69eujV69eGDBggD5rLFNXrlwBAAQEBBi4EiIiIiKisqHLNXCJAoRKRkYGli5dip9//hlKpRLh4eElPaXBMEAQERERUUWjyzWwzmMgVGQyGY4cOYK9e/fi2LFjUCqVaNu2LXr16lXcUxIRERERkZHTOUAcO3YMe/fuxaFDh5CZmYn69etj2rRp6Nq1K+zt7UujRiIiIiIiMhI6B4jQ0FB4e3tj2LBh6NmzJ7y9vUujLiIiIiIiMkI6B4iff/4ZDRo0KI1aiIiIiIjIyOkcIBo0aACZTIZdu3bh7NmzSEtLg6OjIxo3bozevXvDwsKiNOokIiIiIiIjoHOASEtLw+DBgxEREQFPT0+4urri3r17+PPPP7FlyxZs3boVtra2pVErEREREREZmM4LyX399dd4/PgxNm/ejMOHD+OXX37B4cOHsXnzZiQmJuLbb78tjTqJiIiIiMgI6BwgDh06hI8++giNGzfW2N64cWOMGzcO+/fv11txRERERERkXHQOEJmZmahSpUqh+6pUqYKUlJSS1kREREREREZK5wDh6+uLI0eOFLrvyJEjqFq1aomLIiIiIiIi46TzIOrhw4dj0qRJUCgU6NatG1xcXJCQkIA///wT27dvx6effloadRIRERERkRHQOUB07doV9+/fx6pVq7Bt2zYAgCiKMDMzw+jRo/HWW2/pvUgiIiIiIjIOgiiKYnEemJaWhrCwMKSlpcHe3h5BQUGwt7fXd31l7sqVKwCAgIAAA1dCRERERFQ2dLkG1rkFQsXOzg5t2rQp7sOJiIiIiKgc0jlAREdH47PPPsN///2H9PT0AvsFQcD169f1UhwRERERERkXnQPEzJkzcfHiRfTr1w8ODg6lUBIRERERERkrnQPExYsXMX/+fHTr1q006iEiIiIiIiOm8zoQrq6usLS0LI1aiIiIiIjIyOkcIEJDQ7F8+XI8evSoNOohIiIiIiIjpnMXppCQEKxduxYdOnSAo6NjgdYIQRBw8OBBvRVIRERERETGQ+cAMX36dDx8+BAtW7aEi4tLadRERERERERGSucAcfbsWXz66afo379/adRDRERERERGTOcxEHZ2dvDw8CiNWoiIiIiIyMjpHCAGDhyINWvWICMjozTqISIiIiIiI6ZzF6aYmBhcu3YNLVu2hK+vL2xsbDT2C4KAjRs36q1AIiIiIiIyHjoHiHv37qFOnTrq70VR1Nj//PdERERERPTq0DlA/PTTT6VRBxERERERlQM6BwiV1NRUnD9/HnFxcejcuTNSUlLg4+MDQRD0WR8RERERERmRYgWI77//HqtXr0ZOTg4EQUBgYCCWLl2K5ORkrF+/HnZ2dvquk4iIiIiIjIDOszBt3rwZy5cvx7Bhw7B9+3b1mId3330XDx8+xLfffqv3IomIiIiIyDjoHCB++uknjBw5EuPHj0fdunXV29u0aYOPPvoIhw8f1muBRERERERkPHQOENHR0QgODi50n6+vLxISEkpcFBERERERGSedA4SHhwfCwsIK3Xf16lWuUk1ERERE9ArTOUC88cYbWLVqFdatW4f79+8DALKysrBv3z6sXr0affr00XeNAIDdu3eja9euCAgIQLdu3fD333+r90VFRSE0NBQNGzZEy5YtsXTpUigUilKpg4iIiIioItN5Fqb3338fUVFRWLx4MRYvXgwAGDx4MACgR48eCA0N1W+FAH7//XfMnDkTM2bMQKtWrbB3715MnDgR7u7uqFevHoYPH45q1aph27ZtePDgAWbOnAmJRIJx48bpvRYiIiIioopMEIu5dPT9+/dx+vRppKSkwNbW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", + "image/png": "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EEREREREpDEGCCIiIiIi0hgDBBERERERaYwBgoiIiIiINMYAQUREREREGmOAICIiIiIijTFAEBERERGRxhggiIiIiIhIYwwQRERERESkMQYIIiIiIiLSGAMEERERERFpjAGCiIiIiIg0xgBBREREREQaY4AgIiIiIiKNMUAQEREREZHGGCCIiIiIiEhjDBBERERERKQxBggiIiIiItIYAwQREREREWmMAYKIiIiIiDTGAEFERERERBpjgCAiIiIiIo0xQBARERERkcYYIIiIiIiISGMMEEREREREpDEGCCIiIiIi0hgDBBERERERaYwBgoiIiIiINMYAQUREREREGmOAICIiIiIijTFAEBERERGRxhggiIiIiIhIYwwQRERERESkMQYIIiIiIiLSGAMEERERERFpjAGCiIiIiIg0xgBBREREREQaY4AgIiIiIiKNMUAQEREREZHGGCCIiIiIiEhjDBBERERERKQxBggiIiIiItIYAwQREREREWmMAYKIiIiIiDTGAEFERERERBpjgCAiIiIiIo0xQBARERERkcYYIIiIiIiISGMMEEREREREpDEGCCIiIiIi0hgDBBERERERaYwBgoiIiIiINMYAQUREREREGmOAICIiIiIijTFAEBERERGRxupEgCgtLcWSJUvQo0cPtGnTBi+99BIuXryo2h8TE4OXX34ZrVu3Rs+ePbF+/XrdFUtEREREVI/ViQCxcuVKbNmyBZ9++im2b98OT09PjB8/HmlpacjOzsbYsWPRtGlTbNu2DZMmTcLChQuxbds2XZdNRERERFTvGOm6AE0cOHAAgwcPRufOnQEAs2fPxpYtW3Dx4kUkJCRAIpFg7ty5MDIyQvPmzXHr1i2sWbMGw4cP13HlRERERET1S51ogXBwcEBERASSkpKgUCiwadMmGBsbw8/PD+fOnUNYWBiMjP7LQh06dEBiYiIyMjJ0WDURERERUf1TJ1og3nvvPUydOhW9evWCoaEhDAwMsGzZMjRt2hQpKSnw8fFRO97Z2RkAkJycDEdHR12UTERERERUL9WJABEXFwcrKyusWLECLi4u2LJlC2bOnIkNGzagpKQExsbGasebmJgAAKRSaaXOJ4oiioqKqlw3EREREVFdIIoiBEHQ6Fi9DxDJycl4++238eOPPyIkJAQAEBgYiLi4OCxbtgympqaQyWRqtykPDubm5pU6p1wuR0xMTNUKJyIiIiKqQx78Uv5R9D5AXLp0CXK5HIGBgWrbg4ODcfToUbi7uyMtLU1tX/nPLi4ulTqnRCKBt7d35QomIiIiIqpj4uLiND5W7wOEq6srAODatWsICgpSbb9+/To8PDwQHByM3377DQqFAoaGhgCAU6dOwdPTEw4ODpU6pyAIlW69ICIiIiKqazTtvgTUgVmYgoKC0K5dO7zzzjs4deoUEhMTsXjxYpw8eRITJkzA8OHDUVBQgPfeew9xcXH4/fff8eOPPyI8PFzXpRMRERER1TuCKIqirot4ktzcXCxevBiHDx9Gbm4ufHx8MGPGDISFhQEALl++jPnz5+Pq1atwcnLCa6+9hpdffrlS54qKigKACl2miIiIiIjqK22ugetEgKhNDBBERERE1NBocw1cpS5MUqkUGRkZKC0trcrdEBERERFRHaH1IOojR45gx44dOHXqFDIzMwGUDbpwdHREly5dMGDAAHTu3LnaCyUiIiIiIt3TOECcOnUKn3/+OW7cuIHWrVtj0KBBaNSoEczMzJCXl4eUlBScP38e27dvh6+vL95++2106tSpJmsnIiIiIqJaplGA+OSTT3Do0CGMGTMGgwYNeuz6Cunp6di8eTNmz56NXr164eOPP66uWomIiIiISMc0ChB2dnbYu3cvTE1Nn3isk5MTJk2ahFdffRXfffddlQskIiIiIiL9wVmYHsBZmIiIiIioodHmGrjKK1EnJycjPT0dDg4OaNSoUVXvjoiIiIiI9FilA0RSUhKmTZuG6OhoAGUzMfn5+WHhwoVo3rx5tRVIRERERET6o9LrQMybNw9hYWE4ceIEoqOjcfDgQXh7e+Odd96pzvqIiIiIiEiPaBQgVq9eDalUqrbtzp07GDJkCOzt7WFkZAR3d3f06dMHd+7cqZFCiYiIiIhI9zTqwhQdHY0+ffpg8uTJGDFiBAwMDDB06FCEh4ejd+/esLGxQUZGBvbu3Yvhw4fXdM1ERERERKQjGs/CFBkZia+++gpZWVmYMWMG+vbti4MHD2Lfvn3IzMyEg4MDunfvjv79+0MQhJquu8ZwFiYiIiIiami0uQbWehrXAwcOYNGiRbCwsMDMmTPRvn37ylWppxggiIiIiKih0eYaWOtB1L1798bff/+NESNGYObMmRg/fjxiY2O1r5KIiIiIiOocjadxPX78OE6cOAGlUol27drh+eefx9ChQ7Fu3Tq8/PLL6NatG6ZPn47GjRvXZL1ERERERKRDGrVArFmzBm+++SYSEhJw7949fPDBB/j8889hZmaGSZMmYd++fbCxscGQIUMwb968mq6ZiIiIiIh0RKMxEJ07d8bs2bMxePBgAEBCQgKGDh2KyMhIGBn914hx69YtfPPNN1i8eHGNFVzTOAaCiIiIiBqaah8DYWBggNzcXNXP+fn5EAShwmxLzZo1q9PhgYiIiIiIHk+jMRDh4eGYP38+Nm3aBFNTU1y7dg0TJ06EoaFhTddHRERERER6RKMA8dJLLyEkJASnT5+GIAj44IMP2MWHiIiIiKgB0ngWJl9fX/j6+tZkLUREREREpOc0GgMxa9YsZGRkaHXHKSkpePvttytVFBERERER6SeNAoSfnx8GDRqEefPm4fLly4899vLly3jvvfcwZMgQtGzZslqKJCIiIiIi/aBRF6bXXnsN3bp1w8KFC/H888/D2dkZgYGBaNy4MczMzJCfn4/k5GRERkYiOzsb3bt3x8aNG+Hj41PT9RMRERERUS3SaB2I+12/fh07duzA6dOncefOHeTn58POzg6NGjVCp06d0Ldv3zo9VoLrQBARERFRQ6PNNbDGg6jL+fj4cGwDEREREVEDpdEYCCIiIiIiIoABgoiIiIiItMAAQUREREREGmOAICIiIiIijTFAEBERERGRxjSahenevXta3am7u3uliiEiIiIiIv2mUYDo2bMnBEHQ+E5jYmIqXRAREREREekvjQLEZ599pgoQubm5WLhwIZ566ikMGDAATk5OyMnJwaFDh3D48GHMnj27RgsmIiIiIiLd0Xol6kmTJsHOzg7z5s2rsG/+/Pm4ceMGfvzxx+qqr9ZxJWoiIiIiami0uQbWehD18ePHMWDAgIfu6969OyIjI7W9SyIiIiIiqiO0DhB2dna4fPnyQ/edOnUKLi4uVS6KiIiIiIj0k0ZjIO43cuRIrFixAiUlJejevTvs7OyQkZGBPXv24Ndff8W7775bE3USEREREZEe0DpATJw4Efn5+Vi7di3WrFkDABBFEaamppg6dSpeeumlai+SiIiIiIj0g9aDqMvl5+fj4sWLyM3NhZ2dHdq0aQNzc/Pqrq/WcRA1ERERETU02lwDa90CUc7CwgJOTk4QRRHBwcGQyWT1IkAQEREREdGjVSpA/Pnnn/j666+Rnp4OQRCwZcsWLFu2DBKJBF9//TWMjY2ru04iIiIiItIDWs/CtGvXLrzzzjvo0KEDFi1aBKVSCQDo06cPjhw5gm+//bbaiyQiIiIiIv2gdQvEqlWrMGrUKHz88cdQKBSq7cOHD0dWVhY2b96MadOmVWeNRERERESkJ7RugUhISECfPn0eui84OBipqalVLoqIiIiIiPST1gHCwcEBN2/efOi+mzdvwsHBocpFERERERGRftI6QAwcOBBLly7Fnj17IJPJAACCICA6Ohrffvst+vfvX+1FEhERERGRftB6DMS0adNw/fp1TJs2DQYGZfnjlVdeQVFREUJCQjB16tRqL5KIiIiIiPSD1gHC2NgY33//PY4fP45Tp04hJycHVlZWCAsLQ7du3SAIQk3USUREREREekDrAHHgwAF0794dnTp1QqdOnWqiJiIiIiIi0lNaB4jJkyfD1tYWAwcOxNNPP43g4OCaqIuIiIiIiPSQ1oOo//jjDwwfPhyHDx/GqFGj0K9fP6xYsQJ37typifqIiIiIiEiPCKIoipW98fnz57Fz507s3bsXWVlZaN26NZ5++mmMGjWqOmusVVFRUQCAwMBAHVdCRERERFQ7tLkGrlKAKFdQUIDFixfj119/hVKpRExMTFXvUmcYIIiIiIioodHmGljrMRDlZDIZIiIisHPnThw5cgRKpRI9evTA008/Xdm7JCIiIiIiPad1gDhy5Ah27tyJgwcPorCwEK1bt8bs2bMxcOBA2NjY1ESNRERERESkJ7QOEOHh4WjatCnGjh2LoUOHomnTpjVRFxERERER6SGtA8Svv/6KNm3a1EQtRERERESk57QOEG3atIFMJsO2bdtw5swZ5OXlwc7ODiEhIXjmmWdgampaE3USEREREZEe0DpA5OXlYfTo0YiNjYW7uzucnJyQkJCAv//+Gxs3bsQvv/wCKyurmqiViIiIiIh0TOuF5L7++mukpKRgw4YNOHToEDZt2oRDhw5hw4YNyMzMxJIlS2qiTiIiIiIi0gNaB4iDBw9i2rRpCAkJUdseEhKCKVOmYN++fdVWHBERERER6RetA0RhYSGaNGny0H1NmjRBTk5OVWsiIiIiIiI9pXWA8PLyQkRExEP3RUREoFmzZlUuioiIiIiI9JPWg6jHjRuHt99+GwqFAoMGDYKjoyMyMjLw999/Y/Pmzfjoo49qok4iIiIiItIDWgeIgQMHIjExEatWrcJvv/0GABBFEcbGxnjzzTfx/PPPV3uRRERERESkHwRRFMXK3DAvLw+RkZHIy8uDjY0NgoODYWNjU9311bqoqCgAQGBgoI4rISIiIiKqHdpcA2vdAlHO2toa3bp1q+zNiYiIiIioDtI6QNy7dw9z587FhQsXkJ+fX2G/IAi4evVqtRRHRERERET6ResA8d577+HixYsYPnw4bG1ta6AkIiIiIiLSV1oHiIsXL2LevHkYNGhQTdRDRERERER6TOt1IJycnGBmZlYTtRARERERkZ7TOkCEh4dj2bJluHv3bk3UQ0REREREekzrLkzdu3fH999/j969e8POzq5Ca4QgCDhw4EC1FUhERERERPpD6wAxZ84c3LlzB507d4ajo2NN1ERERERERHpK6wBx5swZfPTRRxg5cmRN1ENERERERHpM6zEQ1tbWcHNzq4laiIiIiIhIz2kdIF544QWsWbMGBQUFNVEPERERERHpMa27MCUnJ+PKlSvo3LkzvLy8YGlpqbZfEAT89NNP1VYgERERERHpD60DREJCAlq1aqX6WRRFtf0P/kxERERERPWH1gHi559/rok6iIiIiIioDtA6QJTLzc3FuXPnkJaWhn79+iEnJweenp4QBKE66yMiIiIiIj1SqQCxcuVKrF69GiUlJRAEAUFBQVi8eDGys7Oxbt06WFtbV3edRERERESkB7SehWnDhg1YtmwZxo4di82bN6vGPLz88su4c+cOlixZUu1FEhERERGRftA6QPz888+YMGECpk6dCn9/f9X2bt26Ydq0aTh06FC1FkhERERERPpD6wBx7949hIWFPXSfl5cXMjIyqlwUERERERHpJ60DhJubGyIjIx+6Lzo6mqtUExERERHVY1oHiBEjRmDVqlVYu3YtEhMTAQBFRUXYu3cvVq9ejWHDhlV3jQCA7du3Y+DAgQgMDMSgQYOwe/du1b6kpCSEh4ejbdu26Ny5MxYvXgyFQlEjdRARERERNWRaz8L0+uuvIykpCQsXLsTChQsBAKNHjwYADBkyBOHh4dVbIYA///wT7733Ht5991106dIFO3fuxIwZM+Dq6oqAgACMGzcOHh4e+O2333D79m289957MDAwwJQpU6q9FiIiIiKihkwQK7l0dGJiIk6d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QWCAICIiIiKqp7QOEAsWLEBubi7eeecdREREwNjYGD169MDRo0dx9OhRrF+/vibqJCIiIiIiPaD1NK6XLl3C1KlT8eqrr2LgwIEoLi7Giy++iFWrVqF37974+eefa6JOIiIiIiLSA1oHCJlMBg8PDwCAh4cHYmNjVfueffZZXLx4sbpqIyIiIiIiPVOplajv3LkDoCxAFBQUqBaVMzY2Rm5ubvVWSEREREREekPrANG3b198/fXX2Lt3L1xcXODl5YXFixfj2rVrWLduHZo0aVITdRIRERERkR7QOkBMnjwZbdu2xdatWwEAc+bMwf79+/HMM8/g1KlTeOutt6q9SCIiIiIi0g+CWL6Qg5bkcjkkEgkA4Pbt27hy5Qr8/f3RtGnTai2wtkVFRQEAAgMDdVwJEREREVHt0OYauNILyZWHBwBo2rRpnQ8ORERERET0ZBoFiF69emHFihXw8/NDz549IQjCI48VBAEHDhyotgKJiIiIiEh/aBQgwsLCYGFhofr/xwUIIiIiIiKqvzQKEJ9//rnq/59++mm0adMGpqamNVYUERERERHpJ61nYXrrrbewb9++mqiFiIiIiIj0nNYBwtramq0PREREREQNlNazMIWHh2PevHlISEiAn58fzM3NKxwTGhpaLcUREREREZF+0XodCD8/P/U7uG9AtSiKEAQBMTEx1VOdDnAdCCIiIiJqaGp0HYj169drXxEREREREdULWgeIsLCwmqiDiIiIiIjqgEqtRH358mWcPn0aMpkM5T2gRFFEUVERzp8/j82bN1drkUREREREpB+0DhAbN27EvHnz8LChEwYGBujcuXO1FEZERERERPpH62lcN2zYgK5du+L06dN47bXX8Nxzz+HixYtYsmQJTExMMHTo0Jqok4iIiIiI9IDWASIpKQkvvvgibGxsEBAQgPPnz8PU1BT9+vXDhAkTOMiaiIiIiKge0zpASCQS1UJyzZo1w61btyCXywEA7dq1Q2JiYrUWSERERERE+kPrANGyZUtEREQAADw9PaFUKnHp0iUAQEpKSvVWR0REREREekXrQdRjx47F5MmTkZeXh88++wy9evXCrFmz0LdvX+zYsQPt2rWriTqJiIiIiEgPaN0C0bt3b6xatQrNmzcHAMydOxceHh747bff4OXlhQ8//LDaiyQiIiIiIv0giA+bj/UxFAoFDA0Na6oendNmGW8iIiIiovpAm2tgrVsgOnfujHnz5qlOQkREREREDYfWAWLw4MHYu3cvnnvuOfTv3x+rVq3C3bt3a6I2IiIiIiLSM1p3YQIAURRx6tQp7Ny5E/v370d+fj7atm2Lp59+Gv3794eVlVVN1For2IWJiIiIiBoaba6BKxUg7ieXy3H8+HHs3LkTu3fvhpGRES5evFiVu9QpBggiIiIiami0uQbWehrX+5WWluKff/7B7t27cfToUQDAU089VZW7JCIiIiIiPaZ1gHiw+1Jubi6CgoIwZcoUDBw4EHZ2djVRJxERERER6QGtA0SXLl2QmZkJd3d3vPjii3j66afh4eFRA6UREREREZG+0TpA9OzZE0OHDkVISEhN1ENERERERHpM6wAxd+7cmqiDiIiIiIjqAK0DRElJCVauXImIiAgUFxdDqVSq7RcEAQcOHKi2AomIiIiISH9oHSDmz5+PrVu3IiwsDC1btoSBgdZr0RERERERUR2ldYDYt28fpk+fjgkTJtREPUREREREpMe0bj6Qy+UICgqqiVqIiIiIiEjPaR0gOnfurFo0joiIiIiIGhatuzANHDgQH330EbKyshAcHAwzM7MKxzzzzDPVURsREREREekZQRRFUZsb+Pn5Pf4OBQExMTFVKkqXoqKiAACBgYE6roSIiIiIqHZocw2sdQvEwYMHta+IiIiIiIjqBa0DRKNGjWqiDiIiIiIiqgM0ChBnz57V6k5DQ0MrVQwREREREek3jQLEK6+8AkEQnnicKIp1fgwEERERERE9mkYBYv369TVdBxERERER1QEaBYiwsLCaroOIiIiIiOoArReSIyIiIiKihosBgoiIiIiINMYAQUREREREGtMoQEil0pqug4iIiIiI6gCNAkTPnj0RGRkJAFi+fDlSU1NrtCgiIiIiItJPGgWI/Px8pKWlAQBWrFjBAEFERERE1EBpNI1rYGAg3n77bXz55ZcQRRGTJk2CsbHxQ48VBAEHDhyo1iKJiIiIiEg/aBQgFi1ahB9//BE5OTnYvn07WrVqBXt7+5qurYKEhAQ8++yz+OCDD/Dss88CAGJiYjB//nxER0fD3t4er776KkaPHl3rtRERERERNQQaBQgXFxe88847AIDTp09j+vTp8PPzq9HCHiSXyzFz5kwUFRWptmVnZ2Ps2LHo2bMnPvnkE1y8eBGffPIJLCwsMHz48Fqtj4iIiIioIdAoQNzv0KFDAIC8vDxcvHgR+fn5sLOzQ1BQECwtLau9wHLLli2rcP+bN2+GRCLB3LlzYWRkhObNm+PWrVtYs2YNAwQRERERUQ3QOkAAwJo1a/Dtt99CKpVCFEUAgLGxMcLDwzFp0qRqLRAAzp49i02bNmH79u3o3r27avu5c+cQFhYGI6P/fo0OHTpg9erVyMjIgKOjY7XXQkRERETUkGkdILZt24ZFixZhxIgRGDp0KBwdHZGeno4///wTy5cvh7u7O4YNG1ZtBebl5WHWrFl4//334ebmprYvJSUFPj4+atucnZ0BAMnJyQwQRERERETVTOsA8eOPP+KFF17ARx99pNrm5eWF9u3bw9TUFOvXr6/WAPHxxx+jTZs2GDJkSIV9JSUlFWaDMjExAVC1xe9EUVQba0FEREREVJ+JoghBEDQ6VusAcevWLcyePfuh+3r16oVt27Zpe5ePtH37dpw7dw47dux46H5TU1PIZDK1beXBwdzcvNLnlcvliImJqfTtiYiIiIjqmkct0/AgrQOEi4sL7t2799B9SUlJ1TqQetu2bcjMzFQb9wAAH330EXbt2gVXV1fVAnflyn92cXGp9HklEgm8vb0rfXsiIiIiorokLi5O42O1DhA9e/bEkiVL4Ovri6CgINX2S5cuYdmyZejZs6e2d/lICxcuRElJidq2vn37YsqUKRg6dCj+/PNP/Pbbb1AoFDA0NAQAnDp1Cp6ennBwcKj0eQVBqFILBhERERFRXaJp9yWgEgHirbfewokTJ/D888+jUaNGcHR0REZGBu7evYvmzZvj7bff1vYuH+lRrQgODg5wcXHB8OHD8f333+O9997D+PHjcfnyZfz444/45JNPqq0GIiIiIiL6j9YBwtLSElu3bsW2bdtw9uxZ5ObmIjAwEK+99hqeffZZmJqa1kSdD+Xg4IDvv/8e8+fPx7Bhw+Dk5IRZs2ZV6yBuIiIiIiL6jyCWL+RAAICoqCgAQGBgoI4rISIiIiKqHdpcAxvUdDFERERERFR/MEAQEREREZHGGCCIiIiIiEhjDBBERERERKQxrWdhKpebm4tz584hLS0N/fr1Q05ODjw9PbWaQ5aIiIiIiOqWSgWIlStXYvXq1SgpKYEgCAgKCsLixYuRnZ2NdevWwdraurrrJCIiIiIiPaB1F6YNGzZg2bJlGDt2LDZv3ozyWWBffvll3LlzB0uWLKn2IomIiIiISD9oHSB+/vlnTJgwAVOnToW/v79qe7du3TBt2jQcOnSoWgskIiIiIiL9oXWAuHfvHsLCwh66z8vLCxkZGVUuioiIiIiI9JPWAcLNzQ2RkZEP3RcdHQ03N7cqF0VERERERPpJ60HUI0aMwLJly2Bqaoru3bsDAIqKirB3716sXr0aY8eOre4aiYiIiIhITwhi+ShoDYmiiI8++ghbtmxR/Vw+deuQIUPwxRdfwMCg7i4vERUVBQAIDAzUcSVERERERLVDm2tgrQNEuYSEBJw6dQq5ubmwsrJCaGgofHx8KnNXeoUBgoiIiIgaGm2ugSu9kJynpyc8PT0re3MiIiIiIqqDtA4Qr7zyyiNXmzYwMIC5uTmaNWuGkSNHwsvLq8oFEhERERGR/tB6sEKTJk1w8eJF1UxMjo6OEAQBly5dwtmzZ5GVlYW///4bw4cPx9WrV6u9YCIiIiIi0h2tWyCcnJzg7u6OdevWwd3dXbU9LS0NEyZMQNeuXREeHo7Jkydj8eLFWLNmTbUWTEREREREuqN1C8S2bdswdepUtfAAAM7Ozpg4cSJ++eUXGBoa4vnnn8elS5eqrVAiIiIiItI9rQNEcXExJBLJQ/cJgoDCwkIAgLm5OWQyWdWqIyIiIiIivaJ1gGjbti2WLFmCjIwMte2ZmZlYsWIF2rRpAwA4c+YMmjZtWj1VEhERERGRXtB6DMScOXPw0ksvoXfv3mjTpg3s7e2RmZmJixcvwsLCAosWLcLRo0exYsUKfPzxxzVQMhERERER6YrWLRBeXl7YtWsXxo4dC6lUiitXrgAAXn/9dezZswfNmzeHra0tvvnmGzz//PPVXjAREREREelOpVeirq+4EjURERERNTQ1vhL15cuXcfr0achkMpTnD1EUUVRUhPPnz2Pz5s2VuVsiIiIiItJzWgeIjRs3Yt68eXhYw4WBgQE6d+5cLYUREREREZH+0XoMxIYNG9C1a1ecPn0ar732Gp577jlcvHgRS5YsgYmJCYYOHVoTdRIRERERkR7QOkAkJSXhxRdfhI2NDQICAnD+/HmYmpqiX79+mDBhAtavX18TdRIRERERkR7QOkBIJBKYmpoCAJo1a4Zbt25BLpcDANq1a4fExMRqLZCIiIiIiPSH1gGiZcuWiIiIAAB4enpCqVTi0qVLAICUlJTqrY6IiIiIiPSK1oOox44di8mTJyMvLw+fffYZevXqhVmzZqFv377YsWMH2rVrVxN1EhERERGRHtC6BaJ3795YtWoVmjdvDgCYO3cuPDw88Ntvv8HLywsffPBBtRdJRERERET6odoXkktJSYGrq2t13mWt4kJyRERERNTQaHMNXKkxEJcvX37ovnPnzmHAgAHa3iUREREREdURGo2BWLduHYqKigCUrTi9ZcsWHD16tMJxkZGRMDY2rt4KiYiIiIhIb2gUIKRSKZYvXw4AEAQBW7ZsqXCMgYEBrKysMHHixOqtkIiIiIiI9IbWYyD8/PywefNmBAUF1VRNOsUxEERERETU0GhzDaz1NK6xsbHaV0RERERERPWC1gECAI4fP46IiAgUFxdDqVSq7RMEAZ999lm1FEdEVZeSkoL9+/erZkjr06dPnZ4pjYiIiHRL6wCxbt06LFiwACYmJrC3t4cgCGr7H/yZiHTn4MGDWLZsmVrQ//333zF58mT06tVLh5URERFRXaV1gNiwYQOGDBmC+fPnc8YlIj2WkpJSITwAgEKhwPLly+Hv78+WCCIiItKa1gEiIyMDI0aMYHggqkEymQzffvst0tPTK30fKSkpFcJDOYVCgffee69CgHBycsKbb77J1zcRERE9ktYBolWrVrhx4wbat29fE/UQEYALFy7gzJkzVbqPkpKSx+7Pzs5GcXGx2raEhAR07NgRYWFhVTo3ERER1V9aB4h3330X06ZNg7m5OYKDg2FmZlbhGHd392opjqihunbtGgDA0Noc1iEtK3UfOTEJyL9x+5H7zTzdYdvSU/Vz3tkYKPKLcO3aNQYIIiIieiStA8QLL7wApVKJd99995EDpmNiYqpcGFFDduPGDQCAVVALmDZyqtR9OFiZI//mHUD5kKVeDAQ4hPlDYm2h2iRK5cg5fll1biIiIqKH0TpAzJs3rybqIKJ/yeVy3Lp1CwAgcbSp9P1IrC3g0q0dUo+cVw8RBgJcuoeohYf7z3Xr1i2UlpbCyKhSszwTERFRPaf1FcKwYcNqog4i+ldiYiIUCgUMTCQwtKzYRVAb1n4eMHN3Qm5MAuR5hZBYW8CmpWeF8AAAhlbmEIwlkMvkSExMhLe3d5XOTURERPVTpb5ilMlk2Lp1K06cOIH09HR89tlnOHPmDPz9/REUFFTdNRI1KOXjHyROdtWyrorE2gKO7QOeeJwgCDB2soX0bjquXbvGAEFEREQPZaDtDbKysjB8+HDMnz8ft27dwuXLl1FSUoLDhw/jlVdeQWRkZE3USdRgREVFAQCMXexr/dzl54yOjq71cxMREVHdoHWAWLBgAQoLC7Fr1y788ccfEMWyvtVLly5FYGAgli5dWu1FEjUUBQUFuHr1KgDAtJFjrZ/f5N8B29HR0SgoKKj18xMREZH+0zpAREREYOrUqWjWrJla9woTExO89tpruHLlSrUWSNSQHDlyBAqFAkZ2VjCysaz180tsLWFkawmFQoFjx47V+vmJiIhI/2kdIKRSKWxtbR+6z9DQEHK5vKo1ETVIUqkUu3btAgBY+DbVWR3m/557586dkMlkOquDiIiI9JPWASIwMBC//PLLQ/ft2LEDAQFPHqxJRBX9/vvvyM7OhqGFGcy8GumsDvPmjWBoYYqsrCz8/vvvOquDiIiI9JPWAWLq1Kk4fvw4nn76aSxZsgSCIODvv//GG2+8gT179mDSpEk1USdRvXbx4kX8/fffAADrUD8Ihlq/NKuNYGioWv16x44duHTpks5qISIiIv2j9VVKSEgIfvjhB5iZmeH777+HKIr48ccfkZ6ejtWrV6NDhw41USdRvXX9+nUsXboUoijCzLsxTJu46LokmDZ1gVnzRhBFEUuXLkVcXJyuSyIiIiI9IYjl0yhVQklJCXJzc2FpaQkLi4oLU9VF5VNoBgYG6rgSagguXbqEJUuWoKSkBMYu9rDvFaLT1of7iQolsg6egyw1C6amppg6dSqCg4N1XRYRERHVAG2ugSt1pbJmzRpMmDABpqamcHFxQXR0NDp37owNGzZU5u6IGhylUont27djwYIFqvBg16Ot3oQHABAMDWDXoy2MXexRUlKCBQsW4M8//4RSqdR1aURERKRDWl+trFu3DosXL4aHh4dqW9OmTdG/f3988cUX2LJlS3XWR1Tv3L17F3PnzsXmzZtV3Zbse4XAQFKpheFrlIHECPa9QlTdmTZt2oR58+bh7t27ui6NiIiIdETrLkx9+/bFiBEjMGHChAr7Vq1ahR07dmDnzp3VVmBtYxcmqikFBQX466+/sHv3bigUCggSQ1iHtoKZl7vamir6SBRFFN+8i7yzMRBLFTA0NMTAgQMxdOjQetN9kYiIqCHT5hpY6688U1NTH3nHwcHBWLlypbZ3SVSvFRUVYd++ffj7779RVFQEADBp7ATr0JYwsjTXcXWaEQQB5t6NYexij7yzMZDeTceOHTtw6NAhDBkyBH369IGZmZmuyyQiIqJaoHWAaNSoEU6ePImnnnqqwr6zZ8/C1dW1Wgojquuys7Oxd+9eHDhwQBUcjGwsYdXWB6aNnXVcXeUYWZnDvmc7lCSlIf/CdRTmFuC3337DX3/9hd69e6N///6PXGiSiIiI6getA8Rzzz2Hr776CnK5HL1794aDgwOysrIQERGBH374AW+//XZN1ElUJ4iiiJiYGOzfvx/nzp2DQqEAABhaW8AysDnMPNwgGOh3dyVNmDZ2hom7E4oT76EgKh5FeYX466+/sHPnToSGhqJPnz7w8/PT+65ZREREpL1KTeP65Zdf4ueff1ZdHAGAoaEhxowZg//973/VWmBt4xgIqoyMjAwcO3YMx44dQ0pKimq7xNkOlq08YdLYqd5eTIuiCGlSGgquJECenqPa7urqiq5du6JLly5wcHDQXYFERET0RNpcA2sdIPLz82FlZYX8/HxcvHgROTk5sLa2RlBQEOzs7CpXsR5hgCBN5ebm4syZMzh16hRiY2NR/lISjAxh5ukOc58mkNhb67jK2iXPykPR9dsojk+G+O8XDIIgoGXLlujQoQPCwsJgbd2wHhMiIqK6oEYDRJcuXTBnzhwMHDiwctXpOQYIepzMzEycP38eZ8+exdWrV3H/y8fYxR5mzRvBtKmLXk7JWpuU8lKU3E5B8c17kKVmqbYbGBigVatWCA0NRdu2bdkyQUREpCdqdBYmmUxWL1oaiDShVCqRmJiIixcv4sKFC4iPj1fbL3GwhmkzN5h5uMLQgrMQlTOQGMG8eWOYN2+M0oJilNxKQUliMuRZeYiOjkZ0dDR++OEHeHl5oW3btmjdujU8PDxgYKA/C+kRERHRw2kdIEaPHo3FixfD1NQUfn5+nLqR6p38/HxcuXIFly5dwqVLl5CTk6O2X+JkC9MmLjBt6gIjq7oxDasuGVmawdLfE5b+nijNK0TJnTSU3EmFPD0H8fHxiI+Px9atW2Fra4vg4GAEBwcjICAAlpaWui6diIiIHqJSC8ndu3dPbQC12h0KAq5evVotxekCuzA1PHK5HHFxcYiKisLly5eRkJCg1jVJMDKEsZsDTBs5waSxMwzNTHRYbf2hKJZCmpSGkrvpkCVnQiz97z1FEAR4eXkhMDAQgYGB8Pb2hkQi0WG1RERE9VuNdmEaOnSo9hUR6ZHS0lIkJCTgypUruHr1Kq5duwa5XK52jJGNJUzcHWDSyAnGzvYQDNm1proZmpnAvEUTmLdoAlGhhCwtC9K76ZDey0RpbgFu3ryJmzdvYvv27TA2NoaPjw/8/f3h7+8PDw8PGBk17HEmREREulKpaVzrM7ZA1D9yuRw3b95EbGwsYmJicP36dUilUrVjDMxMYOxiDxN3R5i4OcDQ3FRH1T6aPK8QuTEJkOcVQmJtAZuWnpBYW+i6rBqhKCqBNDkD0nuZkKVkQlkiU9tvYmICHx8ftGzZEi1btkTz5s0ZKIiIiKqgRmdhKnfkyBGcOHEC6enpmD59OmJiYuDv749GjRpV5u70BgNE3VdUVIQbN27g2rVruHbtGuLi4iq0MAjGEpi42sPY1R7Grg4wsrbQ63Ua8mITkXr4PHD/y9VAgEu3drD289BZXbVBFEWU5hZClpIJaUoWZKlZEGXqf0+JRAJvb2/4+vrC19cXLVq0gLk5x6cQERFpqka7MBUXF2PSpEk4ceIELC0tUVhYiHHjxuHXX3/F1atXsWHDBrRo0UL7qokqQRRFZGRk4Pr166p/t2/fxoO52MDEGMYudjB2sYexiz2MbC31OjDcT55XWDE8AIBSROqR8zBzd1K1RKjWoqgjv5smBEGAxNYSEltLWPg1KwsUOQWQpWap/smlcsTExCAmJkZ1m2bNmqFFixaqQOHo6FivHhciIiJd0TpALFq0CFeuXMGPP/6IkJAQBAQEAChbnXr8+PFYsmQJli9fXu2FEgFl3ZESEhJw48YN1b/s7OwKxxlamsHY2U71z1DPWxgeJzcmoWJ4KKcUkRuTAMf2ARBFEZl7TwMAHPq1r7O/75MIggCJnRUkdlb/BYq8QsjTsiH795+ioBiJiYlITEzE/v37AQD29vZo0aKF6p+HhwcHZhMREVWC1gFi9+7dmDFjBjp06KA2E5OzszMmTpyIuXPnVmuB1LBlZmbixo0biIuLw40bN5CQkIDS0lL1gwQBEntrGDvZQuJsB2MnW70cw1BZ8rxCjfaLpQrI03NU/y80kMXsBEGAxMYSEhtLmLdoAqBsDIUsPQeytGzI03Mgz8pDVlYWTp8+jdOny0KWRCKBh4eHKlB4e3tzYTsiIiINaH2FkZeX98hxDjY2NigqKqpyUdQwSaVSJCQkIC4uTvUvKyurwnEGJhJInGxh7GRX9l8HGwhGhjqouHK0HQz9pIHS9XUgdVUYmpvCrJkrzJq5AigLVLKMHMjTc1T/lUvlqlascvb29vD29lb98/LygrGxsa5+DSIiIr2kdYBo0aIFduzYgc6dO1fYd+jQIY5/II2IooiUlBS1sHD79u2K64sIAozsrGDsaAOJo21Z64KVeZ3tnvOwwdDZF689djC0TUtPZF+8Bigf0o3JQIBNS88aqrb+EIwMYeLqABPXshYGURShyC+CLD0H8owcyDJyUZqdj6ysLJw5cwZnzpwBABgaGqJp06bw9vZWtVK4uLjU2ecfERFRddA6QEycOBGTJ09GTk4OevToAUEQcPbsWfz+++/47bff8PXXX9dEnVTHFRYW4ubNm6quSDdv3kRBQUGF4wzMTCBxtCnrjuRoC4m9NQzqSVccbQZD309ibQGXbu2QeuS8eogwEODSPYQtEJUgCAKMrC1gZG0BNC9rUVXKSyHPyvuvlSIjF4rislaxhIQE1VgKS0tLtVaK5s2bw8KCfwMiImo4KjWN644dO/D1118jJSVFtc3BwQHTpk3DyJEjq7XA2sZpXKtOqVQiKSlJNXYhLi4Od+/erXiggQEkDtYwdrRVhQYDc9N69e3u/d2VSvOLUJKa+chj7dr6wbF9gEb39bCuT0p5KVJ/OwAAcBnVu94EL10RRRHKf8dSlLdSyDPzAKWywrGNGjVStVB4e3ujcePGMDDg4oNERFR31Og0rgAwZMgQDBkyBPHx8cjJyYG1tTW8vLz4gdlAFRQUqM2KFB8fj+Li4grHGVqZlwUFx39bF+ys6vUKzw9du+ExnjRYWmJt8diAQdVLEAQYWpjBzMIMZh5uAABRoYQ8O//fQFE2lkJRUIy7d+/i7t27OHz4MADAzMwMXl5earM+WVpa6vC3ISIiqj5aBYjLly/j7t27aNq0Kfz9/eHl5VVTdZGeEkUR9+7dU1t3ITk5ucJxgsQQEgfbsrEL/3ZHMjRtOINRH9ld6THYFUn/CYYGMHa0gbGjDSzQDACgKJGVBYp/WyrkGbkoLi7GlStXcOXKFdVt3d3d4ePjo/rn5uZWr1rbiIio4dAoQOTl5SE8PBwXL16EKIoQBAFt2rTB119/DTc3t5qukXSotLQU8fHxqlWdr1+//tCxC4bW5jB2/G9mJCMbSwgGDffi6LFrNzwMB0PXWYamxjBs7AzTxs4AAFEpojS3ALL0bNV4CkVeEe7du4d79+6pWiksLS3h4+MDX19f+Pn5wdPTE0ZG7HZGRET6T6NPq8WLF+Pq1at46623EBAQgPj4eKxatQoffvghvvvuu5qukWqRTCbDjRs3EBMTg9jYWMTFxUEmk6kfZGgAYwcb1ZoLxk62MDBpOK0LmnhSdyQ1HAxdrwgG/y10B5+mAAClVKa2LoUsMxcFBQW4cOECLly4AAAwNjaGt7c3/Pz80LJlS7Ro0YJTyBI9QUpKCvbv34+UlBS4urqiT58+cHV11XVZRPWeRgEiIiICM2bMwJgxYwAAXbt2hYuLC2bOnImioiKYm5vXaJFUc+Tysrnwr169iqtXryIuLq7CQm0GJpKysOBsV9bCYG9dr8cuVIcnhQFTFwcYWZlrtA5EXaHt+hYNiYGJMUzvb6VQKCHPyoMsPRuy1Oyy/0plqtchABgZGcHb2xutWrWCv78/vL29uXI20X0OHjyIZcuWQXnfxAa///47Jk+ejF69eumwMqL6T6MAkZ6eDn9/f7Vt7du3h0KhQHJyMpo3b14jxVH1E0URd+7cQVRUFKKjoxEbGwupVKp2jIGZCYxd7GHiYg+Jix2MrC3YV1tLT1q7wbV3WLVeXIulCuSciFL9nHMiCnadgmptgb3KrG/RkAmGBqrWO7TyhCiKKM0thCwtqyxQpGahtFiK2NhYxMbG4vfff4eJiQn8/PwQEBCAwMBANGnShK9LarBSUlIqhAcAUCgUWL58Ofz9/XXSElE+sSVfm1TfaRQgSktLKzSl29jYAECFi0/SP0VFRYiOjsbFixdx+fLlCqs7G5gaw9jVASau9jB2sa/TC7Xpi0eu3QDAsX1gtX8zn3MiCtLbqaqfpbdTkSNEwa5r62o9z8NUdn0L+o8gCJDYWkJiawkLn6b/LXSXmgVpShZkKZmQlkhx6dIlXLp0CUDZqtnBwcEIDg5GQEAAW4KpQdm/f3+F8FBOoVDgjz/+wDPPPFOrNYmiiOXLlwMAJk+erJPPUYlEAgcHB36GU42r8oi9SiwjQbUgJycH58+fx9mzZ3HlyhX1FZ4NDWDiYg9jN0eYuDnAyNaSbzY1wNrPA4piKTJORaltzzgdBUNT42r7Zl5UKFCSlFZhe0lSGkSFAoJhzbZCPHbAuFJEbkwCp5/V0v0L3Zm3aFLWQpFTAGlyJmTJGZCmZiErKwsRERGIiIiAoaEhAgICEBISgpCQENUXPET11f3rUD3M/v37cezYsVqqpqKZM2fq7NyjRo3C0KFDdXZ+ahiqHCB44ak/8vPzcebMGRw/fhzXrl1TC3eGVuYwaeQE00ZOMHaxq/GLSir7Zj7jdHTFHdX8zbyiWAooHvJNnEIJRbEURpY1+830kwaMazWgnB5KEO4bmN3KA6JCAVlqFkruZkB6Nx2K/CJV68S6devg6+uLTp06oX379lx/guqlJ3VPMhAEmBrW7vWJKIqQ/vtWbGJQ+9dHIgCpQsSWLVvQpk0bNGnSpFbPTw2LxgHi448/VvsgKr84/eCDD2Bh8d9FkCAI+Omnn6qxRHocpVKJy5cv4+DBg7h48aJaS4PEwQamTV1g2sQZRja8iKhtDeWb+SeFIHZfqn6CoSFM3J1g4u4EhLaEPLcA0tupKLmTBnlmrmrsxI8//og2bdqgV69eCAwM5GKfVG/06dMHv//+u3rr+n1G+DqhZxPrWq1JqlDinRP3AABzO7jDpJYnGxFFEWuvZiI6qwTfffcdPv74Y77mqcZoFCBCQ0MBVOyu9LDt7NJUO4qLi3Hw4EHs378f6enpqu1GdlYw83SHmYcrDC3MdFghNZRv5p80YJzrW9Q8iY0lJIGWsAxsDkVhMYoTk1GckIzS7HycO3cO586dg5OTE/r27YtevXrB1NRU1yUTVYmrqysmT56M5cuXVwgRnvaW6NHYSkeV6Y4gCBjhbYcb51MQFxeHAwcOoG/fvroui+opjQLEzz//XNN1PFZOTg4WLVqEw4cPo6CgAL6+vnj77bcREhICADh58iS++uor3Lx5E25ubnjrrbcwaNAgndZcU0pKSrBr1y7s2bNHtaCbYCyBuZc7zFo0hsS24b1p6qsnffNeml+E5P2n6/yUp48cMM71LXTC0MIMlv5esPT3gjw7H0VxSSiOv4v09HRs3LgRf/75JwYMGICBAwfCxMRE1+USVVqvXr3g7++P/fv3IyoqCjdv3oS5iTHeCHZtsN2rbU0MMdjDBttu5mDTpk0IDQ2FnZ2drsuieqhOLHs6Y8YMpKenY9GiRXBwcMDPP/+McePG4Y8//oAoiggPD8fYsWPx1Vdf4fDhw5g1axbs7e3x1FNP6br0anX27FmsX78emZmZAMpWf7b094KZh1utTddJmnvsN/MASlIzgdSyv2VdmvL0Yes9WPt5wMzdSbXdwEQCAQIKb6dAlpNfpwNSXSaxs4JNaEtYt/FBcUIyCq7EoyC/AFu2bEFERARGjx6t+iKGqC5ydXXFsGHD8M8//8DExASDPG3gYKo/lzbpRTIcS8pFRpEMjubG6NLYBk7mNbtAZCc3C5xNLcTtgmJs3LgRkydPrtHzUcOkP6+yR7h16xaOHz+OX375Be3atQNQNu7i2LFj2LFjBzIzM+Hr64vp06cDAJo3b46rV6/i+++/rzcBorS0FBs3bsTevXsBAIYWprBq4wPTZm4QDBrmtyx1weOmcq1AKSI14lzZrDvuTrVToJbkeYVI/ycShbfUZz+5P/w4tg/gmhB6SDAyhHmLxjBr3gglt5KRH3kdGRkZWLRoEQYMGIAXX3wRhpxYgeqoLVu2ID8/H67mRujmrj/j/Y4n5eKn6GS1t/+98ZkYHeCGTo1rbqY0A0HASG87LLqYhhMnTqBXr15o2bJljZ2PGia9H11jZ2eHNWvWIDAwULVNEAQIgoC8vDycO3euQlDo0KEDzp8/Xy/GY4iiiDVr1qjCg4W/J5yGdoGZpzvDQx1g7ecBjxf6w66tHyy9m8DUxeGxx9/98wjyYhNrpzgt5MUmIvGXPRXCAwDVrFLyvMInrglRX8Z91FWCgQAzT3c4DukMi1YeAIDdu3djzZo19eL9khqe27dv48CBAwCAZ5vbwlBPPhcziuQVwgMAKERgfXQy0otkNXr+JlbGeMq1rNV3/fr1j1wzg6iy9L4FwtraGt26dVPbtnfvXty6dQvvvvsu/vjjjwrTuTk7O6O4uBjZ2dmwt7fX+pyiKKKoqKhKdVeXf/75B//88w8gCLDtEgyzZrW/siZVjcTaQjXbUvL+06puS4+ib4uvPTIU3O/fWaUANIiZp+o6A4kRrNv5QeJoi5xjl3Ds2DF4e3ujU6dOui6NSGOiKOKnn36CKIoIdjCDj63+TA5w4m7uIxueFSJwLCkXz/rUbGvzQA9rRGYU4datW9i3bx+6du1ao+ejuk8URY3HD+l9gHjQhQsXMGfOHPTt2xfdu3dHSUlJhVWyy3+WySqX8OVyOWJiYqpca3XYuXMnAMAq2JvhoR7QKBRU4UK7R48eGDRoEHbu3ImIiIhqWQfisdPR3keT1gW2QOgXs2auKM0tRMGlG9i1a1elvnAh0pX4+HjExMTAUACGeunX4okZxfLH7y96/P7qYCkxRL+m1tgen4utW7fCxsamwvUS0YM0fY7UqQBx4MABzJw5E23btsXChQsBACYmJhWCQvnPZmaVm8ZUIpHA29u7asVWk9zcXACAKcNDvfCkgdXlKnuhPWjQILi7u2PQoEFlAaKgGHCq2gwcmtaiSTjSl1YV+o9ZMxcUXLqBnJwc9pOmOkOpVOK3334DAHR1t9SrgdMA4Ggmefx+88fvry6d3Szxz70CZBSVtURwhWp6nLi4OI2P1a9X3GNs2LAB8+fPR//+/fHll1+qEpKbmxvS0tLUjk1LS4O5uTmsrCo3pakgCDA3r9nVezVla2uLtLQ0yNKyYcSLrzpPNbA64twTj3uYh82AdP9YmJ07d6paIADA0LLqa4FodNF/33oPXBOibpGl5QAoe6/Rl/c9oic5cuQI7t69C3MjAX1qecE4TXRsZIMDiVlQPOSt0FAAutTgIOr7GRkIGORhg59is7B3714MGDAANjb61VpD+kOb6Y/1fhA1APzyyy/49NNP8dJLL2HRokVqzSshISE4c+aM2vGnTp1C27Zt68UKjL169QIA5J2LhTw7X8fVUHWw9vNAo6e7PfqAR1xolw9kzr4Qi4K4O8i+EIvEX/cg/2aS6piIiAjMnDkTERERAABDs6rP82/T0hN43MBEAar1HsoDUoXjuSaEXpJn5SHvfCwAoHfv3jquhkgzcrkc27ZtAwD0amwNc4n+fdY7mkswOsANhg+8FRoKwJhAtxqfyvV+rR3N0MRSAqlUij///LPWzkv1m963QCQkJOCzzz5Dnz59EB4ejoyMDNU+U1NTvPLKKxg2bBgWLlyIYcOG4ciRI9izZw++//57HVZdffr164cLFy7g2rVryNx7GrYdA2Ha1EXXZVEVmbs7waVHiMaLrz1udqOMk1EwNzOrscD8uOlozZu5wblza7V6H1wToq4vlFdfldxORc6JyxDlCvj5+XHFWqozDh8+jIyMDFgbG6CLu/6+r3RqbAMfe7N/14GQw9FcUivrQDxIEMpaIVZFZ+DgwYMYNGgQHBwePyMg0ZPofYDYu3cv5HI59u/fj/3796vtGzZsGL744gt8++23+Oqrr/DTTz+hcePG+Oqrr+rNGhDGxsZ4++238fXXX+PatWvIPhIJUw9XWLfzg6G5/sw4QdrT5kL7sQOZRRFyubxGVxXWNhTcP/MU6RdFUQnyzsWi5N8pef38/DBjxgxIJLXTJ5uoKmQyGbZv3w4A6NPEGsaG+tf6cD8nc+Man21JE762JvCyNkZ8ngx//fUXxo4dq+uSqI4TRE7+rSYqKgoA1Nad0AelpaXYtGkTdu3aVTbNlqEhzP2awqKVJwxNOatCfZe8/zQK4u48cr+RkRFMTSsGSqdhXas8C9PjPGxMBlsa9JOiWIrCqwkoun4HYqkCgiBg4MCBeP7552FkpPffJREBAPbv348ffvgBtsaGeD/UFUZ6su4DAEgVSrxz4h4A4MuO7jDRs3BzI6cEK6IyYGRkhG+++YatEFSBNtfA/NSoI4yMjPDSSy+hY8eO+OGHHxAXF4fCKwkoir0Ns+aNYOHXFEY2+rMCJ1WvJ12UazPwqbpwxem6oTS3AIWxt1B88x5EhQIA0KJFC4wdOxYeHh66LY5IC6Wlpfjrr78AAL2bWOlVeKgLWtiaorm1MW7myfD3339jzJgxui6J6jAGiDrG09MTn3zyCSIjI7F161YkJiai6PptFF2/DWM3B5h7N4ZpExcIevbNB1XNY6d/FYRa737ypBWn9WkhvIZIVChQcjsNRXFJkKX8t3Chp6cnRowYgdatW+skdBJVxbFjx5CZmQlrYwO0d+X7S2X0bWqNldEZOHToEJ555hnOyESVxgBRBwmCgLZt26JNmza4cuUK9u7diwsXLkCWnAlZciYEYwnMPN1g5uEGiZMtLxTqgUcOZDYQ4NghECWX42u1nseOyeCK0zohiiLk6TkoTkhGcWIyRFnZQlXl7xf9+/dHq1at+H5AdZJSqcSOHTsAAD0aWUHC1odK8bE1QVMrCW7ny7F7926MGjVK1yVRHcUAUYcJgoCAgAAEBAQgNTUVR44cwdGjR5GVlYWia7dRdO02DC1MYerhBtOmrpA4WPPioQ571EBmwUCo9QDxpMXluOJ07RBFEfLMXJTcTkVJYjIUhSWqffb29ujWrRu6desGZ2dnHVZJVHVnz55FSkoKzI0EdHRj60NlCYKA3o2tsS4mEwcOHMDQoUO5/gtVCgNEPeHi4oLnnnsOI0aMQFRUFI4fP45z586hpLAEhVcSUHglAQbmpjBt6gLTJs4wdraDUA/WyWhoHja7UWlBkU7qqMp+qjxRqYQsLRsld9JQcjsVyqL/QoOpqSlCQ0PRsWNHBAYG1ou1cIhEUVS1PnR2s9S7wcl1TYCDKZzNjJBWVISIiAgMGjRI1yVRHcQAUc8YGBggODgYwcHBkMlkiIyMxOnTpxEZGQlpUQmKYm+hKPYWBGMjmLg7wbSxE0zcHWFgwpmcSHOPHZPBFaernVIqg/ReBkqS0iC9lwFRVqraZ2JigjZt2qB9+/Zo06aN2kKbRPVBbGws4uPjITEQ0MWdk4VUlYEgoGdjK/x2Ixu7d+9Gv379OBMbaY3PmHrM2NgY7du3R/v27SGTyRAVFYWzZ8/iwoULKCgoQEliMkoSkwEBkDjawsTdESaNnCCxZ1cnerzHjclw6R4CAMg4Hc3pXSuprGtSHqT30iG9lwF5Rg5w38NsZWWFNm3aIDQ0FIGBgQwNVK/t2rULABDibA4rY0MdV1M/hDibY2diLrKysnDq1Cl07txZ1yVRHcMA0UAYGxujXbt2aNeuHZRKJW7cuIELFy4gMjISSUlJkKfnQJ6eg4JLcTAwkcDYzQEmbo4wcXOEoQUXrKtvqmP9hkeNySi+l47EX/ZwelctKQqLIU3OhPReBqQpmRClcrX9jRs3Rtu2bdG2bVt4e3uzexI1CMnJybhw4QIAoHsjtj5UF6N/W3N23crDrl270KlTJ35xSFphgGiADAwM4OvrC19fX7zwwgvIyMjApUuXcOnSJURHR6OkpAQliSkoSSxbqdbQ2gImbg4wcXWAsas9DIy5Yq0+MTQzAQwNAIXygR0GZfseUJ3rNzw4JoPTu2pOKZVDlpoFaUompMmZUDww8NzU1BSBgYGqLolc9Ikaoj179kAURfjbm8LFnJ891amjmwX238lHYmIiYmNj0bJlS12XRHUIAwTB0dERvXr1Qq9evVBaWoq4uDhERUUhKioKN2/ehCKvEEV5hSi6drusu5O9DYxd7WHiag+Jkx0MJHwa6ZJgaAjTxs4ouZWitt20sTMEQ/Xm/pq+wOf0ro+mlJdClpYNWWoWZClZkGflqnVLEgQBzZs3R1BQEAICAuDt7c1+ydSgFRYW4ujRowCAbmx9qHaWEkOEOJvjZEoh9uzZwwBBWuGnE6kxMjKCn58f/Pz8MHLkSBQUFCAmJgbR0dG4cuUK7t27B3lmLuSZuSi8klC2iJmjDUxc7GHsag+Joy0DRS2T5xVCITGAzAAQi6WQSCQw83CDbceKS9HX9AU+p3f9j1JeCnl6DqSpWZClZkGekVvhsXd3d4e/vz8CAgLQsmVLWFryIomoXEREBKRSKdzMJWhhU7E1laqum7slTqYU4ty5c0hLS+OUz6QxXunRY1laWiI0NBShoaEAgKysLFy5cgVXr17FlStXkJGRoRo/geh4VaAwdrGHiYsdWyhq2MO6I8nlclg42kAwqjjYsKYv8Bvy9K5lgSEb0tTsRwYGJycntGrVCq1atYK/vz/s7e11VC2RflMqldi/fz8AoGsjS/bPryGuFhL42prgWo4U+/fvx0svvaTrkqiO4JUdacXe3h5dunRBly5dAABpaWm4evUqrl69ipiYGGRmZqoCRWE0ygKFvTWMXexg7GIPYyc7GJiwH2t1eGR3JADpxyJh0cSlwgV7TV/gN6TpXZVSOWTp/3ZJSs2GPCuvwt/C0dERLVu2RMuWLeHv7w8nJycdVUtUt5w/fx7p6emwMDJAOycudFaTujayxLUcKSIiIjB8+HCYmnLiFHoyBgiqEmdnZzg7O6N79+4QRRHp6emqMBEbG4v09PT/ujxdTQQAGNlZwdj530DhbPfQgb70ZI/tjiQ+vDtSTV/gP2l617rcAqEolv43hiEtG6XZ+RWOcXJyUgWGVq1aMTAQVdLevXsBAB1cLWBsyNaHmtTSzhSOpobIKCrC8ePH0atXL12XRHUAAwRVG0EQ1AIFAGRkZCA2NlYVKJKTk1GanY/S7PyyQdkADK3NYexsX9ZK4WwPI0szHf4WdUdluiPVxgX+o6Z3rUvhQRRFKAqLIUvNLgsNaVlQ5FVc8dvNzQ1+fn5o2bIl/Pz84OjoqINqieqXpKQkXL16FQKAzm51532jstKLZDiWlIuMIhkczY3RpbENnMxrb20XA0FAZ3dLbI/Pxb59+9CzZ092GaMnYoCgGuXo6IjOnTurFqnJyclBbGysKlQkJSVBkVeE4rwiFMclAQAMLUwhcbaDibM9JC52MLK2qNNvZtWx5sLDVLY7Um1c4D84vau+E0URpbmFkKVlqUKDsqhE7RhBENCkSRO1wGBjY6Ojionqr3379gEAAh3MYGdavy9Tjifl4qfoZLXvc/bGZ2J0gBs6Na6995cwFwvsSszDnTt3OKUraaR+vzJJ79ja2qJDhw7o0KEDAKCgoADXrl3DtWvXEBsbi4SEBCgKS6BISEZJQjIAwMDE+N/WibJuT0a2VhAM6kagqM41Fx702O5IwuO7I9W1C/zqJipFlGbnQZZWNuhZnpYF5QMLtxkaGsLT01M1K5mPjw9nSSKqYUVFRTh27BgAoLN7/W59SC+SVQgPAKAQgfXRyfCxN6u1lghzIwOEOJvjREoh9u7dywBBT8QAQTplaWmpWiEbAEpKShAXF6dqpbhx4wbkUhlKbqei5HYqAECQGJWFiX8DhcTBGoIerspb02suPLI7EgDnrm3qVJehmiYqlJBn5Za1LqRmQZaeA1FeqnaMRCJBixYtVC0MzZs352BColr2zz//QCqVwsXMqN5P3XosKfeh3/8AZSHiWFIunvWpvXFUnd0tceLfKV2zs7NhZ2dXa+emuocBgvSKqakpAgICEBBQ9u24XC5HfHw8rl27hpiYGFy/fh3FxcWQ3k2H9G46gLKF1CROtmVTx7raQ+JgA8FQ94GiNhZVU+uOlFsA6e1USCQSWLVoWqX7retEhRLyjPI1GLIhT8+BqFCoHWNmZgZfX19VC4OXlxcXbiPSIVEUVVO3dnav/1O3ZhTJnrBf/tj91c3dQgIva2PE58lw6NAhDB8+vFbPT3ULPy1Jr0kkEvj6+sLX1xdDhw6FUqnErVu31AZmFxQUQJaSCVlKJgouATA0gHF5oHApW9xOF4GithZVK++OJIoiMveeBoCHrgFRn6kFhpQsyDJyAIVS7RhLS0vV2AU/Pz80a9YMBnrYckXUUMXGxuLu3bswNhAQ4ly3pm6VKZTYeC1L9fPGa1l42dcexo/57HF8QvckR/Pan/K8k5sl4vOycOjQITzzzDMwNGxYnyWkOQYIqlMMDAzg6ekJT09PDBgwAEqlEnfv3kVMTIzqX15eXtlFZEoWCoCyQOFs9+9q2Q611uWpthdVEwQBDv3aq/6/PhOVSsgz8yBLyYQ0JQuy9OwKgcHa2hqtWrVSTavq7u7OwECkx8pbH9o5m8PMqG69Vn+9no3Lmf9NvHA5swS/Xs/GmJYOj7xNl8Y22BufCcVDGqoNhbL9tS3Y0Qx/xBsgOzsb58+fR1hYWK3XQHUDAwTVaQYGBmjSpAmaNGmCvn37QhRF3Lt3T7UWxdWrV8sCRXImZMmZAG6UjaFwsYOJqwOM3RxgZFMzTeW6WFStvgYHURRRmlPwb2DIhCw1u8IYhvLAUB4a3N3d6+3jQVTf5Obm4uzZswCATnVs6la5UkR0VnGF7dFZxZArRUgeMemHk7kxRge4YX10slqIMBSAMYFutTqVazkjAwHtXSxwMCkfBw8eZICgR2KAoHpFEAQ0atQIjRo1Qp8+fSCKIu7evYsrV66oVswuLCyENCkd0qSyMRQGZiYwcXOAiZsjjN0cqm1hu/q8qFptUBRLIU3OhCw5A9LkTCiLpWr7y7sktWrVCv7+/mjUqBEDA1EddfToUSgUCjS1lKCxZe1fOFdFnkwBubLidrmybJ/DY6ai7dTYBj72Zv+uAyGHo7mk1teBeNBTrmUBIioqCqmpqXBxcdFZLaS/GCCoXhMEAY0bN0bjxo3Rr18/KJVKJCYm4sqVK4iOjsa1a9cgK5aiOP4eiuPvAShbKdukkRNM3B1h7GRbpe5O9WFRtdoiKpWQpeeUDZC/l1FhpWdjY2P4+vqqBtlzDANR/SCKIg4dOgQAeMqt4U2V7GRuXKuzLT2Jo5kRfG1NcC1HisOHD+P555/XdUmkhxggqEExMDCAl5cXvLy8MGTIEMhkMly/fh1RUVGIiopCYmKiaqXswuh4CBKjstaJxs4waeQEQ1PtvxVq6GsuPI6iWArpvQxIk9IgTc6s0C3Jw8MDQUFBCAwMhI+PDySS2h9USEQ1KyYmBqmpqTAxFNDWyUzX5RDKWiGu5Uhx5MgRjBgxgoOpqQIGCGrQjI2NVd9ov/DCC8jNzUVUVBQuXryIy5cvo6CgQG0NComTLUwbO8O0qQuM2IpQKaW5BSi5k4aSpDTI03PU9llZWSEoKAjBwcEIDAzkSs9EDcDhw4cBAG2dzGGiB1NwExDgYAZLiQFycnJw6dIltG3bVtclkZ5hgCC6j42NDTp37ozOnTtDqVQiPj4ekZGRiIyMRGJiIuTpOZCn5yA/8jqMbCxh2sQZph5uMLKt/3OWV5YoiijNzkfxrRRI76SiNFd9+loPDw+0bdsWrVu3hpeXF7slETUgRUVFOH26bPrp9i51a+rW+szo36l0D98twJEjRxggqAIGCKJHMDAwgLe3N7y9vTFy5EhkZmYiMjISZ8+exdWrV1GaW4CC3AIURMfD0NoCZh6uMPN0Z8vEv0pzC1CcmIzixBQo7lvzwtDQEP7+/ggNDUWbNm1gb2+vwyqJSJdOnToFuVwOV3MjNLOqW4On67v2LhY4fLcAFy5cQF5eHqytrXVdEukRBggiDTk4OKB3797o3bs3CgsLERkZiTNnzuDSpUuQ5xWi4PJNFFy+CYmjDcy8GsHMwxUGJg3rA1EplZWFhpv3IM/MVW2XSCRo3bo1wsLC0KZNG5ib85tGIgKOHTsGAAh1tmArrp5xs5CgsaUESQVynDx5Ev369dN1SaRHGCCIKsHCwkLV1amoqAjnz5/HiRMnEBUVBXlGLuQZucg7FwuzZq4wb9EYEme7evvhKIoiZGnZKLpxByW3UgFl2XyGBgYGCAoKQseOHdG2bVuGBiJSk5aWhmvXrkFA2eJxpH9Cnc2RVJCLf/75hwGC1DBAEFWRubk5unTpgi5duiA3NxcnTpzA0aNHcevWLRQn3ENxwj0Y2VrCoqUHzDzdINST2SxEhQLF8ckojE1EaU6BanuzZs3QtWtXdOzYkYOgieiRTpw4AQBoYWsCW5P68b4IAEqlEnK5HKIoYk98Jvp62Ol0XYeqaOtkjj/jc3Hz5k2kpKTA1dVV1yWRnmCAIKpGNjY2GDBgAPr374/4+HgcOnQIJ06cgDSnALkno5EfeR0WrTxh7tMEBpK6+fJTyktRdP02Cq8mQlkiAwCYmJigY8eO6NWrF7y8vHRcIRHVBSdPngRQdpFaX8jlckil/y16GXErG0dvZ2N0gBs6Na57X6hYGRuixb9rQpw8eRLDhg3TdUmkJ+rmFQyRnhMEAc2bN0fz5s3xwgsvICIiAvv27UNmZibyL1xD4ZV4WAQ0h4VvUwh1ZNpCUaFE4bVbKIiOhyiVAwAcHR3Rt29f9OjRAxYWHDxORJq5e/cu7ty5A0MBCHKoH2s/KJVKtfBQTiEC66OT4WNvVidbIto6meNajhSnTp1igCAVBgiiGmZpaYkhQ4ZgwIABOH78OLZv347U1FTkn49F0fXbsA7xg2ljZ12X+VglSWnIOxsDRUExAMDFxQXDhg1Dp06duMAQEWntzJkzAAAfW1OYS+rGlyhPIpfLH7lPIQLHknL1asVpTQU4mMEgLht37txBcnIy3NzcdF0S6QEGCKJaYmRkhG7duqFz5844evQotmzZgpycHGRHXICphxtswlrq3axNSqkMuaevouRWCgDA1tYWI0eORNeuXRkciKjSzp49CwAIdqwfrQ9A2YQSj5NR9OiAoc8sJAZoYVPWjens2bMYOnSorksiPVA/Yj9RHWJoaIgePXpg0aJFGDRoEARBQEliMtL/PgHZAysz65IsPRvpf59Aya0UGBgYYPDgwVi0aBF69OjB8EBElZaRkYHExEQIAALsTXVdTrV50kx7juaSWqqk+gX+283s3LlzOq6E9AUDBJGOmJqa4qWXXsKnn34KV1dXKItKkLnvDIpvp+i6NBTfSkHmvrNQFpXAzc0Nc+fOxYsvvghT0/rzYU9EuhEZGQkA8LA2hqVx/fkyQiJ5dEAwFIAudXAQdbmAfwPEzZs3kZeXp+NqSB8wQBDpmJeXF+bNm4d27doBSiVyjl7UaYgovpWCnKMXAaUSISEhmDdvHmdWIqJqc+nSJQBAq3rU+gCUrX1jYmJSYbuhAIwJdKuTA6jL2ZoYopGFBKIo4vLly7ouh/QAAwSRHjA3N8e0adPQrVs3QARyjl1WW8m5tsgycpHzT9mHQ/fu3TFt2jSYmdWfPspEpFulpaW4cuUKAKClXf0KEEBZK4S5uTkkEgmMjIzQo5kd5nX1QsdGdbf1oZzfv38vBggCGCCI9IahoSHGjx+PNm3aAEolsv+5DFGhrLXziwoFcv65BCiVaNeuHcaPHw8DA75FEFH1iYuLg1QqhaXEAO4WdXdMwOOUt0SYmpqiv5dDnW55uJ+vXVnrSnR09BMHjFP9x6sDIj1iaGiIiRMnwtbWFoq8QhReu11r5y68dhuK/CLY2dkhPDyc4YGIqt3Vq1cBAN42JjB4wqBj0i+e1iYwEoCcnBzcu3dP1+WQjvEKgUjPWFpaYsSIEQCAotjEWvmmR1SKKIy5BQAYMWIELC0ta/ycRNTwxMTEACgLEFS3SAwENLMua02JjY3VcTWkawwQRHqoc+fOMDc3h6KwBPKMmh8LIc/IgbKoBObm5ujUqVONn4+IGh6FQoG4uDgAgBcDRJ3U3Lrs73b9+nUdV0K6xgBBpIeMjY3h7+8PAJClZdf4+crPERAQAGPj+tFfl4j0y507dyCVSmFqKMDVnOvYaiu9SIbfr6djzcW7+P16OtKLZLVeg8e/LRA3btyo9XOTfuErmEhPNW3aFGfPnkVpbkGNn6s0rxAA0KxZsxo/FxE1TDdv3gQANLUyrtfjH5RKJeRyOURRxJ74TPT1sKvyQOrjSbn4KToZyvt6tO6Nz8ToADd0qsX1JZpalf0eKSkpKCgoYHfXBowtEER6ytbWFgCglNb8t0zKEpnaOYmIqltiYiIAoLFl/Zx9CQDkcjmKioogl8tRWlqKiFvZeP9oPI4nVb4ranqRrEJ4AACFCKyPTq7VlghLiSHsTcoW/7t161atnZf0DwMEkZ5SrWr64KdGDSifLvZxK6kSEVVF+QVnY8v62U1SqVRCKpVW2F7VC/1jSbmP/BhQiGX7a1N5AGSAaNgYIIj0lFL57xoQtdDULxgI6uckIqpGSuX/27vz4Kiq/P3j75vOHpJACCQYQIwYAoR9ExFRjMxIOQ4IGUFNHBFBNrehpCi1MCo7wiiMgigCIwo4oxY4DoyiICKoLA4/kIhMAiQs2SAJZOuku39/NN1fYkAaku7O8ryqqIJ7+97z6b4Vcp8+59xjJTMzE6DBrv9QUVFx2X01udHPu0LwyCu5fLvu0OrC9XNcT2mcFCBE6ijHN1mGyf0/poavqUqbIiK1KT8/n/LyckwGtAhsmNMvr/TI7Wu90Y+8wvyJyGDPBrJWF9o7ceKER9uVukUBQqSOKi0tBcDwc/8vW0cbjjZFRGqTY+GxFkG+mHwa5gRq4wq9xdd6oz+wdTimy5zaZNj3e1LURQFCK1I3XgoQInWU42bexxMB4kIPhAKEiLjD6dOnAXuAaKh+aw5ZTW70WwT7k5LQqlqIMBnwcJdWNX7C09WKDPLFwP77oqioyKNtS93RcH+SReo5s/nCuNcLN/eXUlFUTOGhDCqKivELCyG84w34hYVcdVuOAOFsU0SkFuXk5AAQ2UCHLwH4+PgQEBBQbShobdzoD2gdTlxEENuzCskrqSAy2I+BrcM9Hh7AviJ1uL+JArOFnJwcwsM92wMidUPD/UkWqeccE5qNy3T3F6UdJXvrHrioC/nsjz8TNagXYfHtrqotR9e7JlGLiDvk5uYCENGAAwTYeyFMJpNzHYiBMaG1sg4E2Hsi7otrUQtV1lxEoD1A5ObmctNNN3m7HPECDWESqaNMJnuvgOMRqxerKCquFh4AsNrI3raHigsLw7nKduEZgY42RURqU15eHgDNAhr+/zGOnojAwEB+H9vcK70E7uYIgvn5+V6uRLylYX8VIFKPBQcHA1B8MIOSn49X2VdeWlY9PDhYbZz8x5cEBAW63Jat0lKlTRGR2nT27FkAmjaCANEYhPvbr+OZM2e8XIl4iwKESB3VoUMHDMPAZrM5b/AdrBbLZY76v/2/PuZKDMMgLi7uqusUEfktFovFOdk2zF8BoiEI87cPYCkoKPBuIeI1ChAidVSXLl148803L/lkpI8//pjPPvvssscOGTKE4cOHX1V7QUFBhIWFXXWdIiK/5fz589hsNgygiZ9GTjcEoReCoJ7C1HgpQIjUYWFhYZe8qR82bBibN2/GcomeCJPJxLBhw4iKivJEiSIiv+ncuXMABPv64HOFtRKkfmjiaw+CChCNl74KEKmHoqOjmTx5crVJzyaTiSlTphAdHe2lykREqnIGCPU+NBiOa1lcfHUP7JCGQz0QIvXUnXfeSefOnfn888/Jzs4mKiqKu+66S+FBROqUkpISAIIut5yy1DtBF3ogHNdWGh8FCJF6LDo6muTkZG+XISJyWWVlZQAEmNQD0VAEXgiDZrMZi8WiR4A3QvppFhEREbdxrMzsrx6IBsP/ojD465W3pXFQgBARERG3qaioAMDPRwGiofC96FI6rq80LgoQIiIi4jaVlZUAmPQEpgbDMAwcHUqO6yuNiwKEiIiIuI3VagVAHRANi+N6Oq6vNC4KECIiIiIi4jIFCBEREXEbHx/7rYbV5uVCpFZZLlxPx/WVxkWPcRURERG38fW132pYbEoQtSW3xMz2rELySsxEBvszsHU4LYL9Pda+1WZzBkLH9ZXGRVddRERE3Mbf335ja1YXRK3YkVXIqgOnqvTobE7PJyWhFQNah3ukhoqLGg8ICPBIm1K3qN9JRERE3CYoKAiAskpNtq2p3BJztfAA9uFEqw+cIrfE7JE6yi+MXzIMQwGikVKAEBEREbcJCQkBoEQBosa2ZxVedi6JxWbf7wklFfZrGRISgqHH8zZKChAiIiLiNmFhYQCcMytA1FTeFXoY8ko8s6jbuQoLAKGhoR5pT+oeBQgRERFxm2bNmgFQXGmlUvMgaiTyChOlI4P9PFJHodkeIBzXVhofBQgRERFxm9DQUOc4+bPlWrW4Jga2DneuAP1rJsO+3xPOlNkDRGRkpEfak7pHAUJERETcxjAMWrZsCUBOqQJETbQI9icloVW1EGEy4OEurTz2KNfcC9cxKirKI+1J3aPHuIqIiIhbxcTEkJmZyeniSjpHeLua+m1A63DiIoIurANRQWSwn8fXgTh1Ya5FTEyMx9qUukUBQkRERNyqbdu27Nq1i6xizzxmtKFrEezPfXEtvNJ2pdXG6WJ7gLj++uu9UoN4n4YwiYiIiFvdeOONABwrUoCo704WV1Bpsz/C1TE0TRofBQgRERFxq/bt22MYBmfKLZwt0zyI+uxIYTkAcXFxWgOiEVOAEBEREbcKCgpy9kL8XFDu5WqkJn4+WwZA586dvVyJeJMChIiIiLhdt27dADhwptTLlci1Kqu0OnsgHNdTGicFCBEREXG7Pn36AJB2poyySq1KXR8dOFOKxQbXXXcd1113nbfLES9SgBARERG3a9OmDTExMVTaYF+eeiHqox+ySwC4+eabNf+hkVOAEBEREbczDIOBAwcCsPP0eS9XI1crr7TSOX/FcR2l8VKAEBEREY8YNGgQvr6+HD9XwdEiTaauT7afsoe+Ll26aAVqUYAQERERzwgPD+eWW24BYEvWOS9XI64qrrCy81QxAEOHDvVyNVIXKECIiIiIx/zhD3/AMAz+X34Zmee1sFx98GXWOcxWG9dffz1du3b1djlSBzSIAGG1Wnn99dcZOHAg3bt357HHHiMzM9PbZYmIiMivxMTE0L9/fwA+zSjEZrN5uaKaCfM34XeJuyk/H/u++q6g3MLXJ+3Dl0aMGKHJ0wI0kADxxhtv8P777/Pyyy+zdu1arFYrY8eOxWzWNxsiIiJ1TVJSEiaTiZ8Lyjl4pswrNeSWmPnocC5v/XiCjw7nkltydfcMjuPf3X+SJoYVq7Xqo2kTIoLw83HtZrumtbjTxoxCKqw24uLi6NWrl7fLkTrC19sF1JTZbGbFihVMnTqV22+/HYBFixYxcOBA/vOf/3DPPfd4t0ARERGpIioqiqFDh7Jx40b++b8CbmoaQIDJc99p7sgqZNWBU1gv6vzYnJ5PSkIrBrQOv6bjDcA/IAA/Pz+6Ng9kdFwzj9TiTocLytiTW4JhGKSkpKj3QZzqfQ9EWloaxcXFzu5QgLCwMDp16sQPP/zgxcpERETkcoYPH07z5s05W27hX0eLPNZubom52g07gMUGqw+cuuK3/5c73gaUl5djtVp5sEME/i4EoprW4k7lFivrfzkLQGJiIrGxsV6rReqeet8Dcfr0aQBatWpVZXvLli2d+65GRUUFNpuN/fv310p9IiIicmkPP/wwhYWFAGT4+eDjgW+4v9z+DVZb+iX3WWzwaXkkg/veek3HA3Tu3JlT3QbiyjupaS3uVG6x8ceOVkwmE82aNdN9USNQUVHhci9TvQ8QpaX21Sz9/f2rbA8ICHD+p3Q1HB+cuulERETcKyAggKCgIEpLSzlfYb3yAbUg90zBFfcXmS3XfHxhYSHnfuP42qzFE0JDQ/HxqfcDVsQFhmE0ngARGBgI2OdCOP4O9m7EoKCgqz5fjx49aq02ERERqVvuvPNOrx7vrnOJeFK9j5SOoUs5OTlVtufk5GilRBERERGRWlbvA0R8fDxNmjThu+++c24rKirip59+ok+fPl6sTERERESk4an3Q5j8/f156KGHWLBgAREREcTExDB//nyio6MZMmSIt8sTEREREWlQ6n2AAHjiiSeorKzk+eefp6ysjD59+vDOO+/g5+fn7dJERERERBoUw1bf15AXERERERGPqfdzIERERERExHMUIERERERExGUKECIiIiIi4jIFCBERERERcZkChIiIiIiIuEwBQkREREREXNYg1oEQqW+Sk5P5/vvvL7t/586dzJs3j48//rjKdl9fX5o1a0b//v2ZPn06ERERVfZv2bKFNWvWcPDgQcxmMzfccAOjRo0iKSkJwzAAsFqtrFixgg8//JDs7GxiYmL485//TFJSkvM8WVlZvPzyy/zwww8EBwczcuRIpkyZgslkqsVPQUSk7tuwYQPvvfcehw8fxjAMYmNjSUpKYtSoUS4d/91335GSksKWLVto3bq1c3tOTg7JyclYLBZWrVpFTEyMu96CSK1TgBDxkrvvvpvnnnvukvuaNWsGQI8ePVi8eLFze1lZGfv27eOll16ioKCA5cuXO/fNnTuX999/nwkTJvDss88SGBjIjh07mDVrFgcPHiQ1NRWAZcuWsWLFClJTU0lISGDnzp28+OKL+Pn5MWzYMCoqKnj00Udp164da9eu5fjx4zz33HP4+PjwxBNPuPETERGpW/7xj38wc+ZMnnvuOXr16oXNZmPHjh288sor5OXlMXny5Gs6b05ODikpKQCsWbOGqKio2ixbxO0UIES8JDAwkBYtWvzma/z8/Kq9pk2bNhw/fpzFixdz7tw5QkND2bZtGytWrOBvf/sbiYmJzte2a9eOkJAQpk2bxrBhw+jRowcffPABY8aMYejQoQC0bduW//73v3z44YcMGzaMzZs3c/LkSdavX094eDhxcXHk5+czb948Hn/8cfz9/Wv/wxARqYPef/99RowYwciRI53bYmNjyc7OZvXq1dcUIHJzc0lJScFkMrFy5cor/h4QqYsUIETqoYCAAAzDcA4p+uCDD4iPj68SHhzuueceoqKi6NChA1arlblz53LDDTdUeY2Pjw9FRUUA7N69m86dOxMeHu7cf/PNN3P+/HkOHTpEt27d3PjORETqDh8fH/bt20dhYWGV/xPHjRvHiBEjAHvP8NKlS9m4cSM5OTnExsYyceJEfve731U7nyM8+Pv7s3LlymrDUEXqC02iFqlHbDYbe/fuZdWqVQwZMoTg4GAADhw4QM+ePS95jK+vL/379yc4OBgfHx/69+9PdHS0c//Jkyf517/+xa233grA6dOnq+wHaNmyJQCnTp1yx9sSEamTxo4dy08//cRtt93GuHHjeOutt9i/fz+hoaHOL2KeeeYZPvnkE1544QU2bNhAYmIiTz75JF988UWVc+Xn5/Pwww+TkZHB4sWLFR6kXlMPhIiXbNy4kc2bN1fbnpiYyPz58wF7b0CPHj2c+8rLy4mIiGDo0KE89dRTzu0FBQWEhYVddQ15eXk89thjNG/enAkTJgD2b9N+fa6AgABn+yIijcXvf/97oqOjWb16NTt27GDbtm2AfXjorFmzaNq0KVu2bGHp0qXcfvvtAEyZMoW0tDSWLl1apVd48uTJtGjRgrCwMObPn8+SJUu88ZZEaoUChIiXDB48mKlTp1bb7uhVAEhISGDBggUA/O9//+Pll18mPj6eJ598ssrrIiIiKCgouKr209PTGTduHBaLhdWrVztDQ2BgIGazucprHcHh4jZFRBqD7t270717d6xWK2lpaWzbto333nuPxx57jFdeeQWAXr16VTmmT58+LFy4sMq2mJgY3n77bb7++muefvpp1qxZw4MPPuix9yFSmzSEScRLQkJCuP7666v9uXhCXWBgoHP74MGDWb58Obt27eKZZ57BZrM5X9ejRw/27t17yXYsFgtjx45l06ZNzm179uxh1KhRBAUFsXbtWtq0aePcFx0dTU5OTpVzOP6tJ4WISGNx+vRpUlNTOX36NGCfD9GpUycmTJjAypUrKS4uvuyxNpsNX9+q39HOnTuXJk2aMHToUO655x7mzp3Lzz//7Nb3IOIuChAi9Uj79u2ZOnUqW7duZe3atc7tf/rTnzh8+HC1Mbdgf4b59u3bncFk//79jB07lptuuumSjw/s06cPP/30E+fPn3du27VrFyEhIcTHx7vpnYmI1C3+/v58+OGHbNiwodo+R4+tY37Ynj17quzfvXs37du3r7Lt4nV0ZsyYQUREBE8//TSlpaW1XbqI2ylAiHhJWVkZubm5l/zz6yFEF3vggQfo3bs3CxYsIDs7G4ABAwYwatQonnnmGZYtW8aRI0c4cuQIy5YtY8aMGSQnJ9OrVy8qKyuZOnUqzZs3Z86cOZSXlzvbPHPmDGCfg9GiRQueeuop0tLS+OKLL1i4cCFjxozRI1xFpNGIiIhg7NixvPbaayxatIhDhw6RmZnJV199xeTJk+nXrx+9e/fmjjvuIDU1la1bt5KRkcGSJUvYsmULY8aMuey5w8LCmD17Nunp6cycOdOD70qkdhi2i8dBiIhHXGkl6tdee42tW7dy4sQJ/v73v1fbn5GRwR//+EcGDBjAm2++6dz+0UcfsX79etLT06msrCQ2NpYHHniA4cOHYxgGe/fuZfTo0ZdsMyYmhi+//BKAY8eOkZqayu7duwkPD3euRO3jo+8cRKRx+eSTT1i/fj2HDx+mrKyM6667jrvvvpvx48cTHBxMSUkJCxcu5N///jdFRUXExcXx+OOPc9dddwGXX4kaYM6cObz77rssWrTIuTaPSH2gACEiIiIiIi7T14kiIiIiIuIyBQgREREREXGZAoSIiIiIiLhMAUJERERERFymACEiIiIiIi5TgBAREREREZcpQIiIiIiIiMsUIERExOO8vQSRt9sXEanPFCBEROQ3JScn06FDB+ef+Ph4evTowX333cfq1auprKy8qvP98ssvl10R3d3MZjOzZs1i48aNXmlfRKQh8PV2ASIiUvd16tSJGTNmAGCxWCgsLOTrr79m9uzZ7N69m7/+9a/4+Lj2ndSmTZvYt2+fO8u9rJycHFatWsXs2bO90r6ISEOgACEiIlfUpEkTunfvXmXb4MGDiY2NZebMmXz66afce++93ilOREQ8SkOYRETkmj300ENERUWxdu1aAMrKynj11VcZMmQICQkJ9OzZk0ceeYRDhw4BsHjxYpYsWQJAhw4dWLx4MQBnzpwhNTWVO+64g4SEBPr27cukSZPIyspytnX8+HEef/xx+vXrR7du3bj//vvZtm1blXoOHz7M+PHj6dmzJz179mTSpElkZmYCkJWVxZ133gnA9OnTGTx4sHs/HBGRBkoBQkRErpmPjw/9+/dn//79VFZW8uyzz/LPf/6TcePGsWLFCqZPn84vv/zCX/7yF2w2G0lJSYwcORKAdevWkZSUhM1mY/z48ezYsYOpU6fyzjvvMHnyZHbu3OkcNmW1Whk/fjylpaXMmzePN954g6ZNmzJhwgSOHTsGQEZGBqNGjSI/P5+5c+cyc+ZMMjMzGT16NPn5+bRs2dIZXiZMmOD8u4iIXB0NYRIRkRqJjIykoqKCgoICiouLef755xk6dCgAffv25fz588yZM4e8vDyio6OJjo4GcA6Jys7OJigoiGnTptG7d28A+vXrx/Hjx1m3bh0A+fn5pKenM3HiRAYNGgRA165dWbJkCWazGYAlS5YQFBTEypUradKkCQD9+/cnMTGRt99+m2nTptGxY0cA2rZtS6dOnTzzAYmINDAKECIiUiOOR6IahsE777wD2ENBRkYGR48e5auvvgJw3uj/WlRUFKtXr8Zms5GVlcWxY8dIT09n7969zmMiIyNp3749L7zwAt988w233nort912G9OnT3eeZ9euXfTt25fAwEDnk6GaNGlC7969+fbbb932/kVEGhsFCBERqZHs7GwCAwNp2rQp27dvZ9asWaSnpxMSEkJ8fDzBwcHAb6+9sGHDBhYuXMipU6do2rQpHTt2JDAw0LnfMAxWrFjBm2++yeeff84nn3yCn58fiYmJpKamEh4eTkFBAZ999hmfffZZtfNHRETU/hsXEWmkFCBEROSaVVZW8t1339GzZ09OnDjBpEmTSExMZNmyZbRp0wbDMFizZg3bt2+/7Dl2797NtGnTSE5O5tFHHyUqKgqAefPmsWfPHufroqKiePHFF5kxYwZpaWls2rSJ5cuX06xZM2bMmEFoaCi33HILjzzySLU2fH31605EpLZoErWIiFyzdevWkZuby+jRozlw4ADl5eWMGzeOtm3bYhgGgDM8OHogfr1exL59+7BarUyZMsUZHiwWi3PYkdVqZd++fdxyyy3s378fwzDo2LEjTz/9NHFxcZw8eRKwz7c4cuQIHTt2pEuXLnTp0oWEhARWrlzJ559/DoDJZHL/hyIi0sDpKxkREbmi8+fP8+OPPwL2G/qzZ8/yzTffsG7dOu69916GDBnCsWPH8PX1Zf78+YwZMwaz2cxHH33E1q1bASgpKQEgLCwMgE8//ZRu3brRtWtXAF566SVGjBhBYWEha9asIS0tzXlcp06dCAwM5Nlnn2XKlClERkby7bffcujQIVJSUgCYOHEio0aNYvz48YwePZqAgADWrVvHF198weuvvw5AaGgoADt37uTGG2+kW7duHvn8REQaEsP2W4NSRUSk0UtOTub77793/tswDEJCQoiLi2P48OEkJSU5exs2bdrEkiVLOH78OOHh4XTv3p2UlBSSk5N54YUXePDBB8nOzmbSpEmkpaUxcuRIXnzxRdasWcO7775LdnY2kZGR9OvXj8TERCZNmsRbb73FoEGDOHr0KK+++ip79uyhqKiIdu3akZyczP333++s7eDBgyxatIi9e/dis9mIi4tj3LhxzvUfAObMmcO6devw8/Njx44d+Pn5ee7DFBFpABQgRERERETEZZoDISIiIiIiLlOAEBERERERlylAiIiIiIiIyxQgRERERETEZQoQIiIiIiLiMgUIERERERFxmQKEiIiIiIi4TAFCRERERERcpgAhIiIiIiIuU4AQERERERGXKUCIiIiIiIjLFCBERERERMRl/x+Nie8qD6ZmngAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -208,9 +221,9 @@ "import matplotlib.pyplot as plt\n", "\n", "# Load JSON data\n", - "with open('erc20.json', 'r') as f:\n", + "with open('output/erc20.json', 'r') as f:\n", " erc20_data = json.load(f)\n", - "with open('sok.json', 'r') as f:\n", + "with open('output/sok.json', 'r') as f:\n", " sok_data = json.load(f)\n", "\n", "# Convert to DataFrame and label\n", @@ -250,7 +263,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -259,13 +272,13 @@ "" ] }, - "execution_count": 10, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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9wMAd9FzA1xd06ZNXZ0Qnnb48GG3zy1WuNmzZ4/ef/99bd68WefOnVPLli01efJk3X777W69/ty5c9qxY4duvfVW17waPz8/NWrUSImJiXI6nUpMTMz1mpyvw8LCTNdts9mKFY4AlE9+fqamKQLlRnBwsIKCgkrk2u4OSUkmw83s2bO1efNmnT59WrVr19agQYPUr18/19o07kpKStLEiRO1bNky11NXmZmZOnjwoMLDw1WjRg29/fbbysrKkt1ulyTt3LlT9evXV/Xq1c2UDgAALM5UuFm3bp1uvfVW3XHHHerUqZPpmzdp0kTdunXTtGnTNG3aNFWuXFlLlixRSkqK7r//fgUGBmrZsmV66qmnNGLECO3fv18rVqxQVFSU6XsCAABrMxVuPv/8c7cn9RRm/vz5mjdvniZMmKBffvlFHTp00KpVq3TNNddIkpYtW6bp06drwIABqlmzph5//HENGDDAI/cGAADWYyrcBAQE6NixY3rppZf0xRdfKCUlRVWrVlWHDh00ZsyYIk3WrVSpkqZOnaqpU6fm296mTRutXbvWTJkAAKAcMhVuDh8+rCFDhshut7vmxpw5c0affPKJtm7dqnfeeafI828AAAA8wVS4mTt3rurWras333xTlSpVch3/5ZdfdN9992nBggWKjo72WJEAAADuMvVc45dffqmHH344V7CRrgwxjRw5Ul9++aVHigMAACgqU+HG39+/wEV6AgIC8iy8BwAAUFpMhZvWrVtr9erVMgwj13HDMLRq1Sq1atXKI8UBAAAUlak5N48++qiGDh2qfv36qXfv3qpZs6bOnDmjzZs369ixY3r99dc9XScAAIBbTIWb1q1ba9myZZo3b56io6NdO3W2atVKr776qjp27OjpOgEAANxiem+pLl266J133tGlS5eUkpKi0NBQBQcHe7I2AACAIjMdbjIyMnT06FH98ssv+bbTewMAALzBVLjZsWOH/va3v+n8+fOuIanf/zsuLs7TtQIAABTKVLiZMWOGqlWrpqlTp6pKlSoeLgkAAMA8U+HmxIkTWrRokW688UZP1wMAAFAspta5adq0qU6fPu3pWgAAAIrNVM/Nk08+qUmTJslut6tNmzb5PiV1zTXXFLs4AACAoirW01JPPvlkge1MKAYAeMKZ1Ax9evKCklIzVCMkQDfVrayaIQHeLgs+zFS4mTp1qvz9/TVx4kTVqFHD0zUBACBJ2n7ygt44cFrZv9nt54OjZzWsVW3dWLey9wqDTzMVbo4ePaqXXnpJN998s4fLAQCUF4X1yJxJzcgTbCQpy5BWHjitJtWC6cFBvkyFm3r16ik1NdXTtQAAygl3emQ+PXkhT7DJkWVcab+zSc1SqBZljamnpR599FEtWLBA27dv18WLFz1dEwDAwgrrkTmTmiFJSvrvvwuSlJpZUiWijDPVczNv3jwlJSVpxIgR+bbbbDYdPHiwWIUBAKzJ3R6ZGoUMOdUIcZRAdbACU+Hmz3/+s6frAACUE+72yNxUt7I+OHpWWfkEIbvtSjuQH1PhZty4cZ6uAwBQTrjbI1MzJEDDWtXWygOncwUcu026r3VtJhOjQKbXuZGkbdu26fPPP9eZM2c0YcIExcXFqWXLlqpTp46n6gMAWExRemRurFtZTaoF//epqkzVCHGwzg0KZSrcXLp0SWPHjtXnn3+uihUr6uLFi3rwwQe1Zs0aHTx4UG+99ZYaN27s6VoBABZQ1B6ZmiEBPBWFIjH1tNT8+fP17bffasWKFdq5c6cM48r/nbNmzVJYWJhefPFFjxYJALCWG+tW1rRuDXRbw+rqVDtUtzWsrmndGuiPdZhHg+Iz1XPz73//WxMnTlSXLl2UlZXlOl6rVi2NHj1azz77rMcKBABYEz0yKCmmem5SUlIKnFdTuXJlFvgDAABeYyrcNG7cWDExMfm2ffzxx8y3AQAAXmNqWGr06NEaN26ckpOTdcstt8hms+nLL7/U+vXr9fbbb2vevHmerhMAAMAtpsJNz549NWfOHM2bN0/btm2TJM2cOVPVq1fX1KlT1bt3b48WCQAA4C5T4ebIkSPq27ev+vbtq6NHjyo5OVmhoaFq0KCB/PxMjXQBAAB4hKkkcvfdd2vjxo2SpAYNGqh9+/Zq1KgRwQYAAHidqTTicDhUtWpVT9cCAABQbKaGpR599FHNnj1bv/zyi5o1a6aQkJA851xzzTXFLg4AAKCoTIWbqVOnKisrS4899liB58TFxZkuCgAAwCxT4WbatGmergMAAMAjTIWbAQMGuHWeYRh68sknNX78eIapAABAqSjRx5uys7O1ceNGnT9/viRvAwAA4FLiz27n7BgOAABQGliYBgAAWIqpOTcAUN5lZGV7uwTAJ/ji3wXCDQC46bfD7E/vivdiJYBv8pWpKAxLAQAAS6HnBgDcZLPZXH9+rrNTAXZ+PwQysrJdPZm//TviTSUebnzljQKAJwXY/RRIuAF8Eo+CAwAASylWz82RI0e0fft2JSYmKjIyUj/99JOaNWumihUrSpLsdrsOHTrkkUIBAADcYSrcZGdn65lnntF7770nwzBks9nUp08fLVq0SCdOnNBbb70lp9Pp6VoBAAAKZWpYatGiRYqJidG0adO0fft219DTY489puzsbC1YsMCjRQIAALjLVLh577339Mgjj2jgwIGqUqWK63jz5s31yCOPaPv27Z6qDwAAoEhMhZukpCQ1b94837awsDClpKQUqygAAACzTIWbevXqadu2bfm2ffHFF6pXr16xigIAADDL1ITi++67T88884wyMzN1yy23yGaz6fjx49q1a5eWL1+uv//9756uEwAAwC2mws3gwYN17tw5LV68WGvWrJFhGJo4caIcDodGjBihoUOHerpOAAAAt5he52bUqFG65557tHfvXl24cEGhoaFq27ZtrgnGAAAApa1Yi/hVrFhR3bp181QtAAAAxWYq3ISHhxe4Z5Sfn59CQkJUr149RUZGqmPHjsUqEAAAoChMPS3Vt29fnTlzRqmpqerUqZNuu+02de7cWenp6Tp16pSuu+46nT59Wvfdd5927Njh6ZoBAAAKZKrnJjk5WS1atNBrr72mChUquI6npaVp1KhRqlmzpl588UU9+eSTWrRokbp27eqxggEAAK7GVM/N5s2bNXLkyFzBRpKCgoJ0//33KyYmRpJ022236eDBg8WvEgAAwE2mJxRfvHgx3+O//PKLLl++fOXi/v4Fzs0BAJRvZ1Iz9OnJC0pKzVCNkADdVLeyaoYEeLssWICpcPPHP/5R8+fPV6NGjXJtw3Do0CG98MILuvHGGyVJsbGxatiwoWcqBQBYxvaTF/TGgdPKNv537IOjZzWsVW3dWLey9wqDJZgalnryyScVFBSkO++8U7169dKQIUMUERGhAQMGKDg4WE899ZQ+/PBDrV69Wg8++OBVr5WcnKxnnnlG3bp1U/v27TV06FDt3r3b1b5jxw7deeedatu2rXr37q1//etfZkoGAPiIM6kZeYKNJGUZ0soDp3UmNcM7hcEyTPXc1KxZU//4xz+0adMm7dq1S+fOnVPDhg01duxY9e3bV3a7XQ0aNNDatWvVpk2b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erWn6wQAWETNkADd2aSmt8uAhZkalmrSpIneffddde7cWbt27ZLdbtfnn3+ua6+9Vm+//baaN2/u6ToBAADcYqrnRpLq16+v2bNny263S5IuXbqky5cvq1KlSh4rDgAAoKhM9dxkZmZqypQp+stf/uI6tm/fPnXt2lWzZs1Sdna2xwoEAAAoClPhZuHChdq0aZP+/Oc/u461aNFCkyZN0rp167Rs2TKPFQgAAFAUpoalYmJiNHnyZA0ZMsR1rEqVKrr//vvl7++vlStXauTIkR4rEgAAwF2mem7Onz+vP/zhD/m2NWjQQPHx8cUqCgAAwCxT4aZBgwb64IMP8m37+OOPVa9evWIVBQAAYJapYalhw4bp73//u5KTk9WzZ09Vr15d586d0yeffKJ///vfev755z1dJwAAgFtMhZv+/fvr4sWLWrRokT788EPX8apVq+rpp59W//79PVUfAABAkZgKN0eOHNE999yju+++W8eOHVNycrJCQ0PVoEED+fmZ3q4KAACg2EwlkbvvvlsbN26UzWZTgwYN1L59ezVq1IhgAwAAvM5UGnE4HKpataqnawEAACg2U8NSjz76qGbPnq1ffvlFzZo1U0hISJ5zrrnmmmIXBwAAUFSmws3UqVOVlZWlxx57rMBz4uLiTBcFAABglqlwM23aNE/XAQAA4BGmws2AAQM8XQcAAIBHmAo3kpSRkaF3331Xn3/+uc6cOaMZM2boiy++UMuWLdWmTRtP1ggAAOA2U09LnTt3TgMHDtT06dN1/Phx7d+/X2lpadq6dasiIyO1b98+T9cJAADgFlPhZvbs2bp48aLef/99bdiwQYZhSJJeeukltW7dWi+99JJHiwQAAHCXqXDzySef6NFHH1W9evVks9lcxwMDA/XAAw/o22+/9ViBAAAARWEq3KSnp6tKlSr5ttntdmVmZhanJgAAANNMhZvWrVtr9erV+bbFxMSoVatWxSoKAADALNMrFN9///2644471L17d9lsNv3zn//UwoUL9dlnn2nZsmWerhMAAMAtpnpuOnTooNdff10hISFatmyZDMPQihUrdObMGS1ZskRdunTxdJ0AAABuMb3OTceOHTVmzBh99tlnunTpkkJCQtSjRw917NjRk/UBAAAUialwc+HCBY0aNUpff/217Ha7qlSpouTkZL3xxhvq1q2bFi5cqICAAE/XCgAAUChTw1IzZszQsWPHtHDhQn3zzTf67LPPtH//fr344ov66quvtGDBAk/XCQAA4BZT4Wbr1q2aNGmSevbs6Vrnxs/PT7169dKECRMUExPj0SIBAADcZSrcGIahGjVq5NtWu3ZtpaamFqsoAAAAs0yFmwEDBmjx4sW6ePFiruOXL1/WW2+9xa7hAADAa0xNKA4ODtaPP/6oHj16qEePHgoLC9P58+e1bds2xcfHq3LlynriiSckSTabTTNmzPBo0QAAAAUxFW42bdqkihUrSpJ27NiRq83pdGrv3r2ur3+79xQAAEBJMxVuPv74Y0/XAQAA4BGm5twAAAD4KsINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFJ8LN0uWLFFkZGSuY3Fxcbr33nt1/fXXKzw8XCtXrvRSdQAAwNf5VLhZtWqVXnjhhVzHzp8/r+HDh+vaa6/Ve++9p7Fjx2ru3Ll67733vFMkAADwaaa2X/C0hIQETZkyRbt27dJ1112Xq23dunVyOBx69tln5e/vr4YNG+r48eNaunSpBg4c6J2CAZR7GVmGpGxvl1GuGYYhiT0Mve3K3wXf4hPh5ttvv5XD4dCmTZv08ssv6+eff3a17d69W506dZK///9K7dKli5YsWaKkpCTVqFHDGyUDKOee3nXa2yUAKIBPhJvw8HCFh4fn2xYfH68mTZrkOlarVi1J0unTp02FG8MwlJqaWvRCAZRr6enp3i4B8GmXLl1SdnbJ9GgahuF2L51PhJurSUtLU0BAQK5jgYGBksx/0GRmZiouLq7YtQEoXwzD0COPPOLtMqArn+OLFy+WJI0ePVoOh8PLFUGSjhw5UqLDhL/PAwXx+XATFBSkjIyMXMdyQk1ISIipazocDjVq1KjYtQEAvOO3v9y2atXK9UsvrOvw4cNun+vz4cbpdCoxMTHXsZyvw8LCTF3TZrOZDkYAAO/z8/vfw77BwcEKCgryYjUoDUXpEfKpR8Hz07FjR+3Zs0dZWVmuYzt37lT9+vVVvXp1L1YGAAB8kc+Hm4EDB+rXX3/VU089pcOHD2v9+vVasWKFRo0a5e3SAACAD/L5cFO9enUtW7ZMx44d04ABAxQdHa3HH39cAwYM8HZpAADAB/ncnJuZM2fmOdamTRutXbvWC9UAAICyxud7bgAAAIqCcAMAACyFcAMAACyFcAMAACyFcAMAACzF556WAgCgtMXHxys2Nlbx8fFyOp2KiIiQ0+n0dlkwiXADACjXtmzZooULF+bazXr9+vUaN26cevTo4cXKYBbDUgCAcis+Pj5PsJGkrKwsRUdHKz4+3kuVoTgINwCAcis2NjZPsMmRlZWl2NjYUq4InkC4AQCUW4X1zCQkJJRSJfAkwg0AoNwqbNJwWFhYKVUCTyLcAADKrYiICNnt9nzb7Ha7IiIiSrkieALhBgBQbjmdTo0bNy5PwLHb7Ro/fjyPg5dRPAoOACjXevTooZYtWyo2NlYJCQkKCwtjnZsyjnADACj3nE6nIiMjvV0GPIRhKQAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCllItxkZ2frpZde0k033aTrr79eDz30kH766SdvlwUAAHyQv7cLcMeiRYu0evVqzZw5U06nU3PmzNGIESMUExOjgIAAb5cHACgF8fHxio2NVXx8vGrUqKHs7GxJ0po1a5SUlCSn06mIiAg5nU4vVwpvsxmGYXi7iKvJyMhQly5dNGnSJN19992SpJSUFN10002aPn26br/99iJd75tvvpEktW7d2uO1AgBKxpYtW7Rw4UJXoCmI3W7XuHHj1KNHj1KqDKWlKD+/fb7n5tChQ7p48aK6du3qOhYaGqoWLVroyy+/LHK4AYDyzjAMpaene7sMtyUmJroVbCQpKytL0dHRaty4sWrVqlUK1XlGYGCgbDabt8uwDJ8PN/Hx8ZKk2rVr5zpeq1YtV1tRGYah1NTUYtcGAGWNYRiaOXOmjhw54u1S3Jaenu5WsMmRlZWlCRMmKDAwsASr8qxGjRpp8uTJBJyrMAzD7e+Pz4ebS5cuSVKeuTWBgYG6cOGCqWtmZmYqLi6u2LUBQFljGIbrc7WsMDN7wsdnXOSRmpqquLg4wk0h3J1n6/PhJigoSNKVuTc5f5auJPng4GBT13Q4HGrUqJFH6gOAsiYqKkoZGRneLsNt7777rmJiYor0mj59+mjQoEElVJHnBQQEEGwKcfjwYbfP9flwkzMclZiYqGuvvdZ1PDExUU2bNjV1TZvNppCQEI/UBwBlUYUKFbxdgtv69u2r999/X1lZWW6db7fb1bdvX1WtWrWEK0NpKkr48/l1bpo1a6aKFStq165drmMpKSk6ePCgOnbs6MXKAAClwel0aty4cbLb7bmO22w2+fnl/jFmt9s1fvx4Hgcv53y+5yYgIED33nuv5s6dq2rVqqlOnTqaM2eOnE6nevXq5e3yAACloEePHmrZsqViY2OVkJCgsLAwRURESFKeYwQb+Pw6N9KVme/z58/X+vXrlZaWpo4dO+qZZ55R3bp1i3wt1rkBAKDsKcrP7zIRbjyJcAMAQNlTlJ/fPj/nBgAAoCgINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFJ8fm8pT8vMzJRhGK6VDgEAgO/LyMhwe2fwchduirJlOgAA8A02m83tn+Hlbm8pAABgbcy5AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAllLudgWHb4qMjNQXX3xRYPuOHTs0e/ZsbdiwIddxf39/Va1aVV27dtUTTzyhatWq5WrfsmWLVq1apW+//VYZGRmqX7++hgwZosGDB7t2l83Oztby5cv1zjvvKCEhQXXq1NH999+vwYMHu65z8uRJPffcc/ryyy8VEhKiQYMGafz48bLb7R78LgDYtGmT3nrrLX3//fey2Wxq0KCBBg8erCFDhrj1+l27dmnYsGHasmWL6tat6zqemJioyMhIZWVl6Y033lCdOnVK6i3ABxBu4DP69Omjp556Kt+2qlWrSpLatWunhQsXuo6npaVp3759evbZZ5WcnKxXX33V1TZr1iytXr1ao0eP1uOPP66goCBt375dM2bM0LfffquoqChJ0pIlS7R8+XJFRUWpVatW2rFjh6ZOnSqHw6H+/fsrMzNTDz74oK677jq9/fbbOnHihJ566in5+fnpkUceKcHvCFC+vPvuu5o+fbqeeuop3XDDDTIMQ9u3b9e0adOUlJSkcePGmbpuYmKihg0bJklatWqVwsLCPFk2fBDhBj4jKChINWvWvOo5Docjzzl/+MMfdOLECS1cuFC//PKLKlWqpG3btmn58uV6+eWX1bNnT9e51113nSpUqKDJkyerf//+ateundasWaMHHnhAt912myTp2muv1ddff6133nlH/fv31wcffKBTp05p3bp1qly5spo0aaKzZ89q9uzZevjhhxUQEOD5bwZQDq1evVoDBw7UoEGDXMcaNGighIQErVy50lS4OXPmjIYNGya73a4VK1YU+hkDayDcwBICAwNls9lcw0Rr1qxRs2bNcgWbHLfffrvCwsLUtGlTZWdna9asWapfv36uc/z8/JSSkiJJ2r17t1q2bKnKlSu72rt06aJff/1VcXFxatu2bQm+M6D88PPz0759+3ThwoVcf99GjhypgQMHSrrSW/vKK68oJiZGiYmJatCggcaMGaNbb701z/Vygk1AQIBWrFiRZ9ga1sWEYpRphmFo7969euONN9SrVy+FhIRIkg4cOKD27dvn+xp/f3917dpVISEh8vPzU9euXeV0Ol3tp06d0r/+9S/96U9/kiTFx8fnapekWrVqSZJOnz5dEm8LKJdGjBihgwcPqlu3bho5cqSWLl2q/fv3q1KlSq5fQCZOnKiNGzfq6aef1qZNm9SzZ089+uij+uijj3Jd6+zZs7rvvvt07NgxLVy4kGBTztBzA58RExOjDz74IM/xnj17as6cOZKu9KK0a9fO1Zaenq5q1arptttu01//+lfX8eTkZIWGhha5hqSkJD300EOqXr26Ro8eLenKb4q/v1ZgYKDr/gA8o3fv3nI6nVq5cqW2b9+ubdu2SboynDxjxgxVqVJFW7Zs0SuvvKKbb75ZkjR+/HgdOnRIr7zySq6e2nHjxqlmzZoKDQ3VnDlzFB0d7Y23BC8h3MBnhIeHa9KkSXmO5/TGSFKrVq00d+5cSdKRI0f03HPPqVmzZnr00UdznVetWjUlJycX6f5Hjx7VyJEjlZWVpZUrV7oCTVBQkDIyMnKdmxNqfntPAMV3/fXX6/rrr1d2drYOHTqkbdu26a233tJDDz2kadOmSZJuuOGGXK/p2LGj5s+fn+tYnTp1tGzZMv3nP//RhAkTtGrVKt1zzz2l9j7gXQxLwWdUqFBB9erVy/PPbycABgUFuY6Hh4fr1Vdf1c6dOzVx4kQZhuE6r127dtq7d2++98nKytKIESO0efNm17E9e/ZoyJAhCg4O1ttvv60//OEPrjan06nExMRc18j5mqcuAM+Ij49XVFSU4uPjJV2Zf9OiRQuNHj1aK1as0MWLFwt8rWEY8vfP/bv6rFmzVLFiRd122226/fbbNWvWLH333Xcl+h7gOwg3KNMaNWqkSZMmaevWrXr77bddx//yl7/o+++/zzMOL11ZR+PTTz91hab9+/drxIgRaty4cb6PiXbs2FEHDx7Ur7/+6jq2c+dOVahQQc2aNSuhdwaULwEBAXrnnXe0adOmPG05vag5c9327NmTq3337t1q1KhRrmO/XYNqypQpqlatmiZMmKBLly55unT4IMINfEZaWprOnDmT7z+/Hxb6rbvvvlsdOnTQ3LlzlZCQIEm68cYbNWTIEE2cOFFLlizR4cOHdfjwYS1ZskRTpkxRZGSkbrjhBl2+fFmTJk1S9erVNXPmTKWnp7vuee7cOUlX5vzUrFlTf/3rX3Xo0CF99NFHmj9/vh544AEeAwc8pFq1ahoxYoRefPFFLViwQHFxcfrpp5/0ySefaNy4cercubM6dOigW265RVFRUdq6dauOHTum6OhobdmyRQ888ECB1w4NDdXzzz+vo0ePavr06aX4ruAtNuO3ffmAlxS2QvGLL76orVu36ueff9abb76Zp/3YsWO64447dOONN2rx4sWu4+vXr9e6det09OhRXb58WQ0aNNDdd9+tAQMGyGazae/evRo6dGi+96xTp44+/vhjSdLx48cVFRWl3bt3q3Llyq4Viv38+P0A8KSNGzdq3bp1+v7775WWlqZrrrlGffr00ahRoxQSEqLU1FTNnz9f//73v5WSkqImTZro4YcfVkREhKSCVyiWpJkzZ+r111/XggULXOtawZoINwAAwFL4tRMAAFgK4QYAAFgK4QYAAFgK4QYAAFgK4QYAAFgK4QYAAFgK4QZAmeTtVSy8fX8ABSPcAChxkZGRatq0qeufZs2aqV27drrzzju1cuVKXb58uUjX++GHHwpcfLGkZWRkaMaMGYqJifHK/QEUjl3BAZSKFi1aaMqUKZKubF564cIF/ec//9Hzzz+v3bt364UXXnB7xefNmzdr3759JVlugRITE/XGG2/o+eef98r9ARSOcAOgVFSsWFHXX399rmPh4eFq0KCBpk+frn/+85/q16+fd4oDYCkMSwHwqnvvvVdhYWGuXd3T0tI0b9489erVS61atVL79u01fPhwxcXFSZIWLlyo6OhoSVLTpk21cOFCSdK5c+cUFRWlW265Ra1atVKnTp00duxYnTx50nWvEydO6OGHH1bnzp3Vtm1b3XXXXdq2bVuuer7//nuNGjVK7du3V/v27TV27Fj99NNPkqSTJ0+qR48ekqQnnnhC4eHhJfvNAWAK4QaAV/n5+alr167av3+/Ll++rMcff1zvvfeeRo4cqeXLl+uJJ57QDz/8oL/97W8yDEODBw/WoEGDJElr167V4MGDZRiGRo0ape3bt2vSpEl67bXXNG7cOO3YscM1FJadna1Ro0bp0qVLmj17thYtWqQqVapo9OjROn78uKQrG7AOGTJEZ8+e1axZszR9+nT99NNPGjp0qM6ePatatWq5gtXo0aNdfwbgWxiWAuB1NWrUUGZmppKTk3Xx4kX93//9n2vX5k6dOunXX3/VzJkzlZSUJKfTKafTKUmuYa6EhAQFBwdr8uTJ6tChgySpc+fOOnHihNauXStJOnv2rI4ePaoxY8aoe/fukqQ2bdooOjpaGRkZkqTo6GgFBwdrxYoVqlixoiSpa9eu6tmzp5YtW6bJkyerefPmkqRrr71WLVq0KJ1vEIAiIdwA8Lqcx6ptNptee+01SVcCy7Fjx/Tjjz/qk08+kSRXCPm9sLAwrVy5UoZh6OTJkzp+/LiOHj2qvXv3ul5To0YNNWrUSE8//bQ+++wz/elPf1K3bt30xBNPuK6zc+dOderUSUFBQa4nuCpWrKgOHTro888/L7H3D8CzCDcAvC4hIUFBQUGqUqWKPv30U82YMUNHjx5VhQoV1KxZM4WEhEi6+toymzZt0vz583X69GlVqVJFzZs3V1BQkKvdZrNp+fLlWrx4sWJjY7Vx40Y5HA717NlTUVFRqly5spKTk/X+++/r/fffz3P9atWqef6NAygRhBsAXnX58mXt2rVL7du3188//6yxY8eqZ8+eWrJkif7whz/IZrNp1apV+vTTTwu8xu7duzV58mRFRkbqwQcfVFhYmCRp9uzZ2rNnj+u8sLAwTZ06VVOmTNGhQ4e0efNmvfrqq6pataqmTJmiSpUq6Y9//KOGDx+e5x7+/nxcAmUFE4oBeNXatWt15swZDR06VAcOHFB6erpGjhypa6+9VjabTZJcwSan5+b36+Hs27dP2dnZGj9+vCvYZGVluYaSsrOztW/fPv3xj3/U/v37ZbPZ1Lx5c02YMEFNmjTRqVOnJF2Z33P48GE1b95crVu3VuvWrdWqVSutWLFCsbGxkiS73V7y3xQAxcKvIgBKxa+//qqvvvpK0pWwcf78eX322Wdau3at+vXrp169eun48ePy9/fXnDlz9MADDygjI0Pr16/X1q1bJUmpqamSpNDQUEnSP//5T7Vt21Zt2rSRJD377LMaOHCgLly4oFWrVunQoUOu17Vo0UJBQUF6/PHHNX78eNWoUUOff/654uLiNGzYMEnSmDFjNGTIEI0aNUpDhw5VYGCg1q5dq48++kgvvfSSJKlSpUqSpB07dqhhw4Zq27ZtqXz/ALjPZrBBCoASFhkZqS+++ML1tc1mU4UKFdSkSRMNGDBAgwcPdvXSbN68WdHR0Tpx4oQqV66s66+/XsOGDVNkZKSefvpp3XPPPUpISNDYsWN16NAhDRo0SFOnTtWqVav0+uuvKyEhQTVq1FDnzp3Vs2dPjR07VkuXLlX37t31448/at68edqzZ49SUlJ03XXXKTIyUnfddZertm+//VYLFizQ3r17ZRiGmjRpopEjR7rWt5GkmTNnau3atXI4HNq+fbscDkfpfTMBFIpwAwAALIU5NwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFL+H07r1UYNdwTmAAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAG1CAYAAAAFuNXgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABHDElEQVR4nO3deXxNd/7H8ffNldwIYo1cS4uIfWstLdMWFZROKcVMtaKosUYN1aIdtbT2rW1SqlWlimotHWaUhpZpUWrp2IJaSpUktthCEsn9/eGXOyJIcnKTe3Pyej4e85g633PP+UQk932/57tYHA6HQwAAACbh5e4CAAAAXIlwAwAATIVwAwAATIVwAwAATIVwAwAATIVwAwAATIVwAwAATIVwAwAATKWAuwvIbbt375bD4ZC3t7e7SwEAAJmUlJQki8Wihx9+OMNz8124cTgcYlFmAADylqy8d+e7cJPaY1OnTh03VwIAADJr7969mT6XMTcAAMBUCDcAAMBUCDcAAMBUCDcAAMBUCDcAAMBUCDcAAMBUCDcAAMBUCDcAAMBUCDcAAMBUCDcwtZ07d+qVV17Rzp073V0KACCX5LvtF5B3REdHKzIyUtHR0bLb7WrVqpXsdnumX5+QkKB58+bp4sWLmjdvnmrXri2bzZaDFQMAPAHhBh5pw4YNCg8PV0pKivPYihUrFBYWppCQkExd45///Kfi4uIkSXFxcVq1apW6dOmSE+UCADwIj6XgcaKjo9MFG0lKTk5WRESEoqOjM3WN1atXO3eRdTgcWrVqVaZeCwDI2wg38DiRkZHpgk2q5ORkRUZG3vf1DodD8+fPdwabjI4DAMyFcAOPk1HvSkxMzH3bT58+rT179qQLSCkpKdqzZ49Onz6d7RoBAJ7L7eHm/Pnzeu2119S4cWM9/PDD6tOnj44ePepsj4qKUrdu3fTQQw+pRYsW+uyzz9xYLXJDRoOGAwMD79tetmxZ1a1bV15eaf95e3l5qW7duipbtmy2awQAeC63h5uBAwfqxIkT+uijj7Rs2TL5+vqqR48eun79ui5evKiePXvqwQcf1PLlyzVw4EBNmzZNy5cvd3fZyEGtWrWS1Wq9a5vValWrVq3u+3qLxaIePXrIYrGkO96zZ890xwEA5uLWcHPp0iWVK1dO77zzjurWravKlStrwIABio2N1a+//qovv/xS3t7eGjdunCpXrqxOnTqpR48e+uijj9xZNnKY3W5XWFhYuoBjtVo1aNCgTE0Ht9vtateunTPIWCwWtW/fPsNeHwBA3ufWqeBFixbV9OnTnX++cOGC5s+fL7vdruDgYIWHh+uRRx5RgQL/K7Nx48aaM2eOzp07p1KlSrmjbOSCkJAQ1apVS5GRkYqJiVFgYGCW17l59tlntWnTJl28eFHFixdX+/btc7BiAICn8Jh1bkaNGqUvv/xSPj4+mj17tvz8/BQdHa2qVaumOa906dKSpDNnzhBuTM5utys0NNTw6202m3r16qUFCxbopZdeYgE/AMgnPCbcvPTSS/rrX/+qRYsWaeDAgVq8eLFu3LghHx+fNOelvkElJCQYvpfD4VB8fHy26kXeUKNGDU2aNEmS+J4DQB7mcDgyPWbSY8JNcHCwJGn8+PH673//q88//1y+vr5KTExMc15qqPHz8zN8r6SkJEVFRRkvFgAA5Lo7Ozzuxa3h5sKFC9q6daueeuop57gaLy8vBQcHKzY2Vna7XbGxsWlek/rn7AwM9fb2doYpAADg+Y4cOZLpc90abs6dO6ehQ4dq7ty5euKJJyTd6lU5cOCAWrRooVKlSumLL75QcnKyc+bMTz/9pEqVKqlkyZKG72uxWLLV8wMAAHJXVpbxcOtU8KpVq6pp06Z655139PPPP+vw4cMaMWKELl++rB49eqhTp066evWq3nzzTR05ckQrVqzQ/Pnz1bdvX3eWDQAAPJjF4eaNdq5cuaLp06dr/fr1unLliho2bKgRI0aoSpUqkqQ9e/Zo/PjxOnDggAICAtSrVy9169bN8P327t0rSapTp45L6gcAADkvK+/fbg83uY1wAwBA3pOV92+3b78AAADgSoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABg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yBBdv37d1aXDAxFu4DFu3Lihs2fP3vV/dz4Wut0LL7yghg0batq0aYqJiZEkPfbYY3r++ec1dOhQzZkzR0eOHNGRI0c0Z84cjR49WqGhoWrQoIFu3rypYcOGqWTJkpo0aZISEhKc97xw4YKkW2N+AgIC9Pe//10HDx7U+vXrNWPGDPXq1Ytp4ICLlChRQr1799Z7772nmTNnKioqSr///ru+//57hYWF6dFHH1XDhg315JNPauzYsdq4caOOHz+uiIgIbdiwQb169brntf39/TVx4kQdO3ZM48ePz8WvCu5icdzelw+4SUYrFL/33nvauHGj/vjjDy1cuDBd+/Hjx/Xss8/qscce0+zZs53HV6xYoS+//FLHjh3TzZs3FRQUpBdeeEEdO3aUxWLRrl271LVr17ves1y5cvruu+8kSSdOnNDYsWO1Y8cOFS1a1LlCsZcXnw8AV/r666/15Zdf6vDhw7px44bKli2rtm3bqm/fvvLz81N8fLxmzJihb775RpcvX1bVqlXVr18/tWrVStK9VyiWpEmTJunTTz/VzJkznetawZwINwAAwFT42AkAAEyFcAMAAEyFcAMAAEyFcAMAAEyFcAMAAEyFcAMAAEyFcAMgT3L3Khbuvj+AeyPcAMhxoaGhqlatmvN/1atX18MPP6znnntOn332mW7evJml6/3666/3XHwxpyUmJmrChAlavXq1W+4PIGPsCg4gV9SsWVOjR4+WdGvz0kuXLuk///mPJk6cqB07dujdd9/N9IrPa9eu1e7du3Oy3HuKjY3VggULNHHiRLfcH0DGCDcAckXhwoX10EMPpTnWokULBQUFafz48frXv/6l9u3bu6c4AKbCYykAbtWtWzcFBgY6d3W/ceOGpk+frtatW6t27dqqX7++evbsqaioKElSeHi4IiIiJEnVqlVTeHi4JOnChQsaO3asnnzySdWuXVuPPPKIBg4cqFOnTjnvdfLkSfXr10+PPvqo6tWrp7/+9a/atGlTmnoOHz6svn37qn79+qpfv74GDhyo33//XZJ06tQphYSESJJGjhypFi1a5OxfDgBDCDcA3MrLy0tNmjTRnj17dPPmTb3++utavny5+vTpo3nz5mnkyJH69ddf9eqrr8rhcKhLly7q3LmzJGnp0qXq0qWLHA6H+vbtq82bN2vYsGH65JNPFBYWpq1btzofhaWkpKhv3766fv26pkyZolmzZqlYsWLq37+/Tpw4IenWBqzPP/+8zp8/r8mTJ2v8+PH6/fff1bVrV50/f16lS5d2Bqv+/fs7/xuAZ+GxFAC3K1WqlJKSkhQXF6dr167pH//4h3PX5kceeURXr17VpEmTdO7cOdntdtntdklyPuaKiYlRwYIFNXz4cDVs2FCS9Oijj+rkyZNaunSpJOn8+fM6duyYBgwYoGbNmkmS6tatq4iICCUmJkqSIiIiVLBgQc2fP1+FCxeWJDVp0kQtW7bU3LlzNXz4cNWoUUOS9OCDD6pmzZq58xcEIEsINwDcLnVatcVi0SeffCLpVmA5fvy4fvvtN33//feS5AwhdwoMDNRnn30mh8OhU6dO6cSJEzp27Jh27drlfE2pUqUUHBysUaNG6ccff9Tjjz+upk2bauTIkc7r/PTTT3rkkUfk6+vrnMFVuHBhNWzYUFu2bMmxrx+AaxFuALhdTEyMfH19VaxYMf3www+aMGGCjh07pkKFCql69ery8/OTdP+1ZVatWqUZM2bozJkzKlasmGrUqCFfX19nu8Vi0bx58zR79mxFRkbq66+/lre3t1q2bKmxY8eqaNGiiouL05o1a7RmzZp01y9RooTrv3AAOYJwA8Ctbt68qW3btql+/fr6448/NHDgQLVs2VJz5szRAw88IIvFokWLFumHH3645zV27Nih4cOHKzQ0VC+//LICAwMlSVOmTNHOnTud5wUGBmrMmDEaPXq0Dh48qLVr1+rjjz9W8eLFNXr0aBUpUkR/+tOf1LNnz3T3KFCAX5dAXsGAYgButXTpUp09e1Zdu3bVvn37lJCQoD59+ujBBx+UxWKRJGewSe25uXM9nN27dyslJUWDBg1yBpvk5GTno6SUlBTt3r1bf/rTn7Rnzx5ZLBbVqFFDQ4YMUdWqVXX69GlJt8b3HDlyRDVq1FCdOnVUp04d1a5dW/Pnz1dkZKQkyWq15vxfCoBs4aMIgFxx9epV/fLLL5JuhY2LFy/qxx9/1NKlS9W+fXu1bt1aJ06cUIECBTR16lT16tVLiYmJWrFihTZu3ChJio+PlyT5+/tLkv71r3+pXr16qlu3riRp3Lhx6tSpky5duqRFixbp4MGDztfVrFlTvr6+ev311zVo0CCVKlVKW7ZsUVRUlLp37y5JGjBggJ5//nn17dtXXbt2lc1m09KlS7V+/Xq9//77kqQiRYpIkrZu3arKlSurXr16ufL3ByDzLA42SAGQw0JDQ7V9+3bnny0WiwoVKqSqVauqY8eO6tKli7OXZu3atYqIiNDJkydVtGhRPfTQQ+revbtCQ0M1atQovfjii4qJidHAgQN18OBBde7cWWPGjNGiRYv06aefKiYmRqVKldKjjz6qli1bauDAgfroo4/UrFkz/fbbb5o+fbp27typy5cvq2LFigoNDdVf//pXZ2379+/XzJkztWvXLjkcDlWtWlV9+vRxrm8jSZMmTdLSpUvl7e2tzZs3y9vbO/f+MgFkiHADAABMhTE3AADAVAg3AADAVAg3AADAVAg3AADAVAg3AADAVAg3AADAVAg3AADAVAg3AADAVAg3AADAVAg3AADAVAg3AADAVAg3AADAVP4PjA8J2MDJRhEAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -281,12 +294,12 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -302,9 +315,9 @@ "import matplotlib.pyplot as plt\n", "\n", "# 1. Load data\n", - "with open('erc20.json', 'r') as f:\n", + "with open('output/erc20.json', 'r') as f:\n", " erc20_data = json.load(f)\n", - "with open('sok.json', 'r') as f:\n", + "with open('output/sok.json', 'r') as f:\n", " sok_data = json.load(f)\n", "\n", "# 2. Convert to DataFrame and label\n", @@ -347,12 +360,12 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -368,9 +381,9 @@ "import matplotlib.pyplot as plt\n", "\n", "# 1. Load JSON data\n", - "with open('erc20.json', 'r') as f:\n", + "with open('output/erc20.json', 'r') as f:\n", " erc20_data = json.load(f)\n", - "with open('sok.json', 'r') as f:\n", + "with open('output/sok.json', 'r') as f:\n", " sok_data = json.load(f)\n", "\n", "# 2. Convert to DataFrame and label each row with its dataset\n", @@ -416,7 +429,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -437,9 +450,9 @@ "import matplotlib.pyplot as plt\n", "\n", "# 1. Load JSON data\n", - "with open('erc20.json', 'r') as f:\n", + "with open('output/erc20.json', 'r') as f:\n", " erc20_data = json.load(f)\n", - "with open('sok.json', 'r') as f:\n", + "with open('output/sok.json', 'r') as f:\n", " sok_data = json.load(f)\n", "\n", "# 2. Convert to DataFrame and label each row with its dataset\n", @@ -487,8 +500,14 @@ "\n", "# 9. Save or display the figure\n", "plt.savefig(\"boxplot_invariants_removed.pdf\", dpi=300)\n", - "plt.show()\n", - "\n" + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparing Sindi's comparator and its light version with respect to the invariant denoising task" ] }, { diff --git a/use-cases/dynamically-mined-invariant-denoising/boxplot_invariants_removed.png b/use-cases/dynamically-mined-invariant-denoising/boxplot_invariants_removed.png index 18ceff8c62b875f448e0239288fca4d7f089f53c..3ab28e725bcca054107610ee29da1b72775bdac2 100644 GIT binary patch literal 43152 zcmeFZcTm+?*ELA1XbUJNzy!1kiXvb_MUtYZfCv&Li>OGrfaHA9Zcs6x2%?A}NRE;& zIoPPEC`gtJB9b$g9A=$M_xtrs)i+i1-%QnXRX^<`m-`E6pS{;wd+l>q`TUtxESp)F zn3z_{ojs+(#I$sliD}8V-BYr92~5LFIj1IR?CKoNq7hO_czA~ zX?rH7s5!Y)C)6B+`kEXZIn?Kihs*f*wjKY2@A#cH-edY4Yfn7hF1z-YxA!IHy?2;v z^98rlIFy&M_H6IE6&<%-k=c`<^{jgM#CFlY{#v$fUB$176$SU7AF_V(Lf5);&N+DI z*};h~&j*+B@JbytF5MVu5=b6~iAn!`aV0b3PfQa#hL(~)wR--Jr^Y{y+m=W({-A%S zke&R&gKPW$|B?UKzn49o-Ak-Y&MGO@di=ID&9X&Gt|Cz{$6G=}MaB2m*B4O>bA#0S zWTV^XL!^W%52+_;i;9}noRf4JuX=E#S%6AixLlptUB=BH@Jct+ zgaic6=DAF0{JDIU?fk40r72sTyc_?=j}7U=bb9qzcV%_DS?xWZ9sBoRz=tYAsPiTb z&5?>*^xWvxEUQ=747V4jU-`6-TipIjP3LF9q^hV8_gL!=M{lyFJPxjzy?9 z%cm0Gh-7h2vhzqpzp%)bi;0P;q3P#2cc<6tt9E?$r?^e@H$)ZlxSVqt?@OjJuUKK$ zT@jHr{cEhzrmVZcvLL8n?+bQQ5nSEZR$`aOScLg77l?LLpw z&&M($T;#F+uEtjkDjT@b{qdFpjlVlo|NQiXVz>}!mRRn$TXlqOXw~LJ-#SC6iFfY& zZl>evntQD@NUL?f{Xk=k)95d)e(R3UCRpjLzw>PkYYKPxNQ4;&JAI(dRVqnWKR;;9 z;-on$-NWrrc8PvcYc1Nph3p@0=JawMTMt(lk4Z_=Scv#y19)uMVVH|I?wcH zT;1rEPQen%%gcXu2*Eei57e|c_ahHzyv(vBnR zl7f?0u3hWtO)98ab)@l?W&YHMalJfey0^rDLyKEfpOR;zRnaOIcJ_iU_XO>9l>lMA zc>Bwj!!+VAJ~nO%59gbkZ1-makZ%iiPUFlD4Sf!>R6_p(PRh18V4 zKEuJq73Jr*;ib64c_}HWSmn@Ldo<#sTU#&5o;nq+5+NTfoUU9NBAvADq}TQ0hum5D zIU}D1MeTaj?C`$M8g;UDyG@Vn9?Qr7mVfpaOc<|-P^eBaDA1j&NisN`a!*y-PR&k-n1&98pw z?Y)@lhnyd>%_b)&PmecP(nrgr%}SmM(ROzy=BE8|_^`%}8#hRbked3rerkF;RyFE; zPfJ08^TdGLr&6Y_#;jC**I`*v^Y3piw)ZvXHH_=JVRh6Z%e-lp>M>x&~9%=1Dzw9GWdD*4GiWSNcANT_JcvPpNHvhLLz zs#}_GxG`%$nCo=S#_sNJ?L6mnjU@eq8|@!rltQF7A2xrcoo?C@yj~#k+SfpnFVFU8 z&rkO@9cZ4Po1yei(|dCyPQN^6XP(Nwdh5|gf?JE@NF6baHSH!ai#`Ij^zKB5+dOLV|-6pX^fN>^*8|Xh^d! zUA*Rzk)FZ=B)`1zdb1k8q4>_CRYi|X0yPRnG!ujHNYP%aw!~UAWyk8}&}3v}km|w; z3y)9D%#<8b}b!^Nw9(5Z7Awnf@b^W8Y4i zHf5*tP-kystQfqv^7r2b9vgjl|Gut1G&B^qi0s+=3@e)@{O)ICakbIA;$p#r2UVq{ za>EH`@R%6+T*%AKop7YtvB=q9XWX;(T%}r;bw|}diLs|5;$GkpOJPz;xJR+L({mFo zbnIPIdQWwIo{K|b`}}Y*Z}wpRjBS%$ZMP?vzH)zk`aOp*9!_3fOEa#kUvCB7+q#pF zZ-e9gk&cp*vNEj8K1EgIvS2%tyqgt%j~|C3)H>?*5l!1g-u#ZcDs;*f9x4l#)LFml zyc*I=B1cP7cF!K!)2Cz4`0!X5C`u#QH)Y$YW>_@w={-A~f4zMB912Q}{J7RZ)_K&U zo>~KH^+|Tg@W(sOaGErED7>8-?WFXxaO}yHIDP5TrJF{-%scxGHab=N`}$gcT0W0k z(4zXJ-1GMSOm}3Ush`DWOBPV*NY*y_8YoJ8#k+NDy!c?Q>f^_cW7Xp{VybQGt_GOA zyR#NG;V+VIk?G9Z{`Rby`KhX+GFB=+D6nUbyk#E!sc=qTib~v9Jrz||N`F|RTWOY( zv$ONfVgb!kdO-?qV)Q5p(pF0DuWi3j7|K~@Dm*)BAx^(G2^r+;A_H8H@tO+?JWPqj z-j=;^;ezvzySvOCo*uDijJ~;ag>yXZ$4BSN6HmjI%?Fj08&kg;==X<7IE2(ni4`*t zp=G=1O=)EJNR!yh@4YumI;TAq){8|^*6b(=n6Nc@`s&pm4>pU+BO_EkQId*5x>Lv= znx$&_jcQGYHHwyHDV6TGX)Z^)3EfvwQDIFH90*)RZrUnlG_cShQCF<#MlrW`wr$L5 zA0EB%&QA&oo-7<>8wu%Ut6?W;KG(Y=WPG$t@S?%FQa9`6!$JLFTX!U}u1yr4Wk7|i z4{9ZffKyuHPW-t%Sh$FvRLOfH`O%>#Z#!rEZT}P)`ltg5L)hoBpWhX;PTh0Kd=IyA z^gm!Mm-17`uiWz~oa3o+1_k+13Ie`ZqxyO=gBZ!~i%-CkGWGYv4nUbI`MA&zAW7Mn2qp zr_g769JXtM+s}_{1ByRpDWP&%)9>E7BT#e0dR!##;2!e1LXKtb8?>J6R5b5*n;Fka zqoRI=y?&iQGu-GT75I4csLRBFUH4J3-aREgRPqbQ4cAUyxUzQbT9%b7lk2hTr;(po z^A?^8=@3wm{sK#1SXih#r=4LzF|%yWt&2FeFxk$olcSeoFWk>4tydq{##b0=aUNNwXyU8Y()ZA1*pVdL!?`12?ho3PUHCB{LM!! z;!z3}vfo^95h<7rYtC~qNXxe@n5!A@1X$B#W@gs2{im!ytDvsMORH{u`zM{?sEihO zRV?PY$}gkqQRc~&urHlQzaH^_`t(=#h=MM_2PLj~us&TO)wnFb%Uw0{Tyny<7Tj~X zY4x6#`HV*EdkJ$jI+h*IP5S4N#w&00x?gXwZ=hu8r5z@VGPHcz{1W86GbeAat{!O0 zxf&SB$Klv{tT*S&mvdi(#8iEx=QH~^*;)P^986ll<5)=Rr`HPLHf0)?O*A09~- ziPhxlj;uvr~GAftiQI=3z#z2 zu*fS0`1OFIDhgl4t`OHSW>(JcskwBa5)Q=?AYvVL^H8sORC}hJ#u8h)|VP3ZE`qW4Vt-4P{ z_WjCPU)#wcLsS^OV>f=BN*w$gAd-Ydh=`2*HJykD2s~)~Fjg%_CAvKq>>?|&TY*b> zpIWS%9O}$hn}PrXcP&JWOX$NklVyx;KTzm5?>Y-4=_}k=Juy67zJk})s=T|EV~^Um z^-2<a-&kIU?urq{$el}E3PF}sqwzL9Yy=DZ1mCwB&x`1xXsQh+?`}R zovINqVNdU^tp!gTd$(SxE2TuZBm)^Jolq&W(jYOGRjcf#juIF+KN_+St&?FfGCEq4 z>XVd|WRcmn+znWK^MNaON{UI;c%+n?>6c_!cgUkeeWfH7DV#m~#@$}j?^ho+x%#IF zbK?27GM|Ei0v^|)6Oxmyf7Yj5y*EDClJxA^#;ez^?cw7)1)QeV{^3DKyK1hPBA{Ds zF)uY9N(ANmn-jZ~g4IAV2#yBbNVjZhj(EN(G*EJP4q4Wx$qnXB1UrxS#b7gCMA;Oq zaoo0T8;Oo{l~u?x39^$cM!hu&Ss$#!kZm|7V%7x_GVSVM|d^qlXLC-i!=BrW<`u3&XWc6xQlNwKwTes6|J zpf-Ts_8mLuzyxN1Ou{}6?GKK~`=-~=dxP^A z1fU7FM%D-4aMV$-YkA*w>(|>2G>XZkOkbUI`0?&8!O~mGHZ(u19U+y(YDLn@SuJ7C z*`&O2?FT%P+IZ=?T^Et~oxy0*O)7VqE!>;SPIbf!BRj2jr?BXl3?>`A?B+Z*kh z-tJzMgBstOEu}ui1`^WEROUq_1ivjXt4#zh7?b^TA z0PaGKGA$4DOw1WLh6l_#bbgh-H$zb>WS+qVY z4B>YfqV^_as1>-o^@>*>N_VE4l7f@HFh4^Fsdjn;g%AIDm)^K3ea~=Xc6a29wCm+z zu756k3q5Ivs5C`P^Tcmpe5zLL@Q`uV#UX>#YYzspdxe{9$|URG82-6Jkb#z74Q=I} zO#R6=kGzq^xU(Gl1XRn&oWXpZ-rA&zOA(B((cOAe`gVM40qUV*(9!*xLk1ZZFTL1# z6WfYzo8is>b2*P$v0v$~yUquF155Vv^9x7bMs3?IA)zZJ#cVJNIDC&&r~(=270^P5 z^GgF%BRbM|S8QD3o(Gj4ONX?j$OQ*l({DenMJ@vmOJaxKoeI5hYz^iN0$Yso^rD_vQ7yp`;f*46r(Cc&y>L9TWS3!ks> zd=nfJU#K6W!k;(vH|yr3R=~$EB4gg)w3yhD|ql@hu+W zj(V*jqGnH<9ott4{xoJD&OLvy)4|KIYkp?1R#i#TuDo4$?_>t0K?9jl1J`S`*0)-{ zs6sjn#TG7rMfBv)45Z$2sEP6P@`?rQi`7n#U9x0}pRaG&yLzlzIk<>=sEnr!Z^I!)!X2ht|7158-RKpHr!_-88#pR^l5c#c-D9A!J+(<8zsf?AK0VnLhtwb| z#Sn6syi33+0OIWL^ybyKS_D5C?@Wu3KKGt0o40k^D!g$wnd>QT&U zV^oVH=4{4&e0)SSB(>faShnQX=Qvmb#b#r6q+re z-d@eUfrm%9Tc&FPI8@Ye=n~<^ckkYH8h8T2hL3k60aOHvn#Ffc{CVqE6_!{fj+?|N zlf!7B@#LzaZ>%D@uOPzcyqz0rD{`Lhj)Gu>+X_Wm*}ZR{vWbZaZsh*MtzuzmX@|`2 z$1^VkJNN9y+I&)tVm#ULWF+)}@L)-op6ABFO+DqW zZ==TTMww^VSp5AN$E&RY!i{eSA(R|*7}(qW_YybojtfZ2d(@&|VSVZbCKoHEV(#Ig z&Y!)#abPIU*=&rLChu7*S;Ro`O#ce@{HPGn7K4RDKLXNA=q;{xiKAjG5jWf?+g2zA zw59MXJdFmR4i;Yg?yFd9UP)&)QZz^^Ma_O&*`Zqntyt7`(n=Cwln4k>C5$k0+?1pf zu>chN?TulPZGU=gPjWGjYU;JG5_-O0$+MeOMw)==`|?#Da+3Um+-YHd?yuDgBvpO; zrVN~kOnmu03#fTd=xv^nN$v$KCW#fGt(<|}(enxVdG)aej~=}UhE2cDfJ01!M$aNm zoU?y-xa;Fn3lJC{;yx|sW%zv{_{^zO0tXJL9BFY)g`TDm5sVFIRvsoxD9eu@Klt=A zUx!2hkU8UCH*j)l?4iFhzw_{+27~}>ijTMVk3rJ!@sJsfEez>^CdyD*cbs{6@vVU` zThSxz3sSnWer>ixb%IXu1Q<%^;R~c>2xmmn(9UCqP{Rc z*JQ2h$n|fY`CKTX=cw3%ts73A>ot%+f1bunm8*HVfW%JnFz#Bj$ZM54WHHoG1xPV0 zY;0d_`cOq*9=#z0fx8y0J`f%0;47v$x=IeJn{rp&%<8oSN5 zDGU+_P~AJdsO2KE|K@*Gw|9^vq25madSPkXQ?*-e{FOnY!AX51&)c_qAzf5K%O^t6 zS1F6CM^snfUwc)p(6aC*K4n&+6z?G2wp%5x z9~G%!uHQ0yW+2B#GO7R^1gv@6}PXt~*okdP4YqHydv&Rz+HrK;2akQT*mk^5s~wu~a=I{D^Yr61C7 zvvaRd9=%4#bM=g`8a6iJq|;!&KxfPdB3z7o-W%X2YklTBfUjcCasF;(C&ro%G+Da zHTN09&XD~>*4aoCQ+)IQ+et6OXsy(1*}aK5-jV~5kCKG-vM;hu2tjj!&R`KeS&?DW zd0r>SVX)cLSx2TN-_7R1lc!Ig#IXEBv+J$l;+6)ZSh}3;O+B*oG-P>^ zY=YF89G4a|&jT}ee@`~jaA_^PX|W}Tx-ef;CMPFHGya&TrK=m1p!dD=%Z}~a%_)_K zY##8-32MZ@Nw>^w^OC83IvOV9o=P?!Q(*)0FYhtiv%c~E%?O|#S~BR6h+Iume|xb{ z4y8}wITk;`4Pu8(Kcj`!fS#cZ1)9angeIaS*4E^^x%dlC)RqWfCk6E?GGI;XgRNYX zO2HB)W?W-iGvlmbT%td)8Z4Mk>t9$0`Pj*+gQ`$D?yaQaQQ;*+BPnH16v@I0A2v>MCvP-0m(GHOqB+Je#jm z!j$a8!aBTavzmAlPxqpIq*abPj=Z?dsy0!Na4HB?*q7kX$Xn`Qgbx00pW<{f67#2f z1RG=@0>yPBNHsyRfNTWy&|@T61+6*?eI*M^#S6>)7?**pU1c`_m(lB(J#QnW{rJ(N z){%|mX_adbKMEB{(iBN!%Z*<4{q+$b?|EmF%4f=`^RIITvP(F(ySciKfs*AUG^cDw z(MF6{LyibG`>iN9&Ad(pz@U;LC#$W{`r0As2RG)gs~NxDUoHoOHIV1ksHojZ4$0%>R$xaSerKL^>VMsF^Dp&5FB zX=7&cuJd1C6Im62R28-bozQ7Z7z;9*o#TQXf2>5~U7$<~7#-A$bzCmXfF1zt`G21D z0G^bv46vv7@7`SuZ8@Y!sZaYfo}Gz`VkSR{b`iyJ|IFT-duw%V9(;Jnt;1q$Wio}; zPpH**QN$juIc#8HVAuEk0{1anWxQ`Y6pQ}v$tMYNf=I)s=h)v22{I0#sRtVIBkVm& zV_!S&#O>lnv58O9HVjr^`RjY3L7ubSSG3f2oWB3%`VA+^gr+1U-^=#x%CuZ#3X0UWON zx+JqQc|Hyf)^GhMtb_c|+1$Bv=Nn|rLtq|LQ&V*V-?@Gn1xBL72*{!DMpw^+Ry#5= zF)^g&pNNuVhMGvD5Dq3a)0Zky1j9o0tfqmRI$<-E87#tU;Kc$OMT{CE`}|?Z!6EVf zGLn}(4vHNcQc%H?(urn@N(Ch=4d~sNdFqywFSHWYIha9eQA-bDHP}P$8oSb~HEI51 zacVJP4$V$ye*5h=t|o`7=nI6}Q5w+JH}8j(hwXoXNfUX!u3k*DpCL0^{`|gsPR!HO z(*$Y=xeT&V`qdInZV5+aqK;Zyr?3?%BjrQYN`%U-i~97H?(VQlJLSsV1h>wY4zXas zp3Mu$&!kmwIXwf80O^HURk#iwhwB<~boe`qO|+E}Ug@!Z&E)7BR4%CJN&z=MDS)&? z$2V_CESPr=_;4K|+EbGdhyH|C1LE`w^Zd||mCnNV?-v7lCG2|q67;a_0sjcYABI(@ zFW9bJxiTv_CJ9@*q+Qp2s)J^4Ynw*5Id$r<{v0r+ObPc=H@vydf5UhU`cluIKhL6d zxOTc3{&bC$5*4kUo+1f1A(pg`fouXkv=mSa5}Mu^o(wP}8ox)1*X}u|j}T5#o9xgk zIm`VZ`@S8G6Y)r(~?gU{QSEG!VEmR)+5cuG#gF_EL9 zqGC<|#54Ki$rHO0p$q{e6WB(4yugaAJA&xFd(nr-VqAT3py1lq%>hfOpdj#PTyA(u zpLIurH2dOB17G+~E_4<0a&TNVbLgp(lae}TPV#8$+*v7K_xUMfdS4yXF1nxl99b~XwX;c{xn{Ew!(nx zcjBJ`r)WGp*Vq6KeIEV13<^+}Z~o+udrKzn-Mw4>@$n8jkP)*Nr0d`|RxU9kJv&rH z8^6El;305d*J9$!&__#2*XU<1BYQA4e@?zh{q^Pf^mK0$|0m9|r2J{qJbYoGqzer% zG0?J$=q!-!ue3+$hzJw>iFgynpkg&d_VL2c z#OpTp*dllMGJ!E2^g*LJ zo4w}OsPkzm>gHx~`*{1oW{Td?eQYNYAm7l^ROtLm__r5FENkwp-LZj}H>7g{Tu24l zQNO=S-Gi-SDhME{gWq6NxKnEUbo@(S<6nHIfIgI zkwrTrE4zE|-Y-izNWco*+v;?CfjG?=rQ`P*K*s6&`q38huD7gMTKsZ;$5{rb(>Lm`s+c3&DLmFAe zA#NJi{$>c)nfG=qT~LyqyTWY4%gak(ek_2}<6>4ewkniHjx}p8Q5uj3@*Q&W)RBVn zQDe!cAk)a^v+~HRoIQJIAghyS4r$%{{{6jU`vCw&jZ3$pf}h8=MBcQ3zKB9QT{1(S z(IdmU=3YBLQB{zO(>UvMV7;jZ5xMNMW$oHfY^82U_^C9&c>Y?m-rScERhP4EeD&MX zUmMd-tENDZbH;dcWMnW(ff-@M1&{!o128@EGaC;?!2Xz#msFQA`# z>(4){AqL|vbUQwa4I~{QfpKwbz#WJafW~7pu=!S8hCPk2k`n<&anwB-Tz#CeO!Ye&Qddhv4c z=lRc!*UTjUq&IG$grx6$pgo~=84vR8 z`?VQKmSVK18?t~QAkXTk_A6Fa{q4z`AU^W`2Kra%4}HsibZMg(+Bm9xHyHOIKtBBF z(HgYTKbsPCh2*k(JQLe2k?!aLjjbmBIo`=VNnys-W!o|fMdU!yYs{w510)F1fI64{ zvE6Ncs*_+?(O^CxsgHUci&WsindS4)deyPK0k&-xuGj^q?{5qRv=yn{GtVsMJQh7a zo>4&TmZ_8^z-grOA2orCuSZr)iK}%b+VZO3lIFHxQmzUK zeQbEj4AHPq5sz85dK`wA27kYM$Bv@II)%l>X8<9?W@l$5Y!|`hS+DMg9KD~3{@WcB z6`WG9Rp1@(Igw&nk|mimA8FF_X;(-Ua-Bl_HOGRkuIu=nybRikYzzF|;#zEOdS}p0t5&vKA2@hf3Z>TI}`dX6cX_Bch@@bCh6^ zL(AmMDjtc80F(mn8GL{#^XL-lVWjRFutR=1aL!|nL&T5Zk6i#Umo%!N7+|qg@UMif z5MxoNb_{jChU^HxM@&=+qfQ+_=(Ob~!MT=z9R1G0+D$i<6@AL2sdV71TsHyqE1`q}h)dfVHDS9fm;|L&ODztl;TO@t?-S5Od z5oz+7C{%{53&^OXrYvXYiAP|9h<{Z98NMCI`2JTzY?X%;mAKk=qc=)?)M?O3_;>D< zPidi-UEb&gYHJ5e!fq(mq#x|+y45LRS;QazJKd@an)K|{C}|UoL4PpAew9~J3h)!3 zH74#PqB@YTLOvKdS3acuPs8+hYuPrWCNx#Q;g{1X4Tt5Z%x=3KCM_Xlllz7PG7cW! z2!nmOtN&?Ot(jzfgSHoOeG}!Jppo4RyBFZ%CGeJ5zReP|KG;8IvSR*UzhMHgZF(SQ zkj1rGI!^EP=~YDHBeoA?Z`tRk|Iu-mxpTdgrs|gjh}4n>BuF$Y81mU`#%-GEE%2d7 zeLl76-_H`wS8M&6HLs-HrlVovls|V)4eJ9_OehR2zr>mtJe^7Dk0Gvduv}83dx>U` zjp=la@iQyAZ9_SifKjyHT)IiH7Pqu}W4%S-wZxnmz()Gn2aI4jyKMg6F$hYe=LYLa z7aG34)=A$&=(G6{n1B~z!Fb{jLcx0$_0c6%eIgX0!D$9rW*X#@uVeL;Rs)y`tl=AA zJRre<^%*_;m2rhDXIdAion;}la7V`@#L3!y{`m2c-;BSD);3~C1QM-8AxEt-^Qk7# zo$0tf&>FHSw6plmk+PTK#*~2hz{HUBugERXzcsF02}e?n02%bDW(Y&aPhex9l@Uv> z0QJ@T!2^Fk>c@a^SS^qt&*I)xAVC;=GorJQ8E#%;VoLv}|1@ZuG?|}&C z&f(`7ckYc%D6OFJF<_o$y1yYq6BnHx?~j96<{W!y@e}XMZ%PaPybVSJQDO6;>yHTh zuM1=R&}wP%a(5^#^se%g*igg{>gwt$p|_6lQ;YVGg$v-TdPkaUpX||0?CV}^!V9d$ zt$~!#Z5i4Llb^t^vA zRs$k{Yj}tVG`hkuk$5;PGeFSX6j;7n)xch+AOQX8up$ zEkt1e$wdz*{QiA5z{4K^Mw_oNCT8t{SP;~lG1(ovmKtn>p6;@o@j6*5C+ zp8fw#^$KYVk#fsEaPT0%-tS!~2Nl4NmH|cid<6OvZVsv2f^tw%6;3Hz%`C>PWPX7o z1D<2(Q#Bi0;Y)+ilX}tNe9_;3lRs7-PN#nI<*%`sXMEc4Fu(=U!yd533Qy(=qNt`rf{C*DjKIYQFno zH2_W-Meq0ph-0@g5rE!H2pB}4Dr%Ir?;|v+6qqoy)!T3# zw+{~U8jc;85jDoQzd33zPqha!tN=qLIg0p0$liyl{lt=5w2yd@h$=^tF9?#JcQs@C zTHRPSZw?Cn3h{c@mlPPFKs181k>9XLXy;yl?TiCF1eV7#&c!wV?f2O!5>DVnJ>3UB z$HS9F`b2qzExYxKr74kB?j!w8m>`(>VN{7MjPob?{LxXODD$uL~ zp8&n>D3Dm0K z4iDlC6i7#xpL33naHLmkH~J3F5*36v!-#503S*`P#8YAgtxnX>%Wj6TPNK-&-sr>q zWT6@d@IXSqv!>Ao{htPxfYmhh_;HWObI-}pidh33k}P=|j9~M#!?s3|u7R{qVMfZ2 zR~jEOsPd_FMVFN}4z(--RZrKp0KZ5dYyq1AH_MtPb6v2`1XWvLPhwxWl@Avc6_N54 z_Y$Tftm$yrBFjHw_0w-2t5JNoUrI3Cz`pKkEbQdqoG6l=nI==RHz1Tl@Lfo)Z)AI zAr-}%h(*~i(6As=J7fd{F)?cEbhQ*v$v-&QA|1aC5YDntOXebbz@%=vfleC}#W3bu zdxm9;KDK_UX(I-}NMgWEa5^)bKTu_kL`Zk~4TDg-p=tBi+;&o$Da4VVV>gQo(s0=g zI|H4r3!xM2hyu_Di*(>hglCgB1McX0qoreX`Eq;+Y*$2|z+Jh#2}^%$Q5TbC(2CTMk-0^%4b)~mSUrf@vMTdN`;ua5u=51H)N6_XW?!ZTrh|+~ zX7o5>t=n3b{g3&>WLnrvO#yF}qBc2O@Px*ij5WDKpz zxxX;y05}D{LTlUMl{%ZmFQI4dl%Rv)=`AU$DXV zzFomfG$tF*xgY=*XO#j5*ViKv2rrIzTz$|!Fhm@S#32Z; zCZ8M{W#urP0}g+V4l-;6vZKy4w3sKAW1^>|3O)#o5(+?Kz&oiyHu8V=>^i+J-7J7K zh37h@7fA1y@&&ikP%l;>a{t}~1|V+!c;hCSeRXKOaa(G3=%ic)>21JNr3|bQEELZM zA5U^RVFDn#a$Fjf3k@yvk!X%7ptjN6QBO$S6Q$0(nl%uF=RWJ0hkhL`|9^T>pY3Mj zHrz za+}BbEGAR(t`~3_xLzPO+UmnVg-D+C;nC65bQ^spf%`#RHr5aSeIY35hbZ-G0FG5B zF}MXgI+|s2n0nBF6{0FpPaK0NXRvB}G>&dPYV~S{C4X6mXr2_P7nC8(&~dbpYJugW zaJ}++P7V(LI3@eVCQ;{BhT|vqvC+~3zUl-WO=#4$xFyU;Kx8M*P~2(ORaZ;)Sqwv! zr6<5(CY%u7^7;(BPOA?DY_La&yOMIB>Dl>cMrP?6WBNMbrA@UviNT@M4}&U10^PaomjpD4!`h%l`vO?_S9A+aDLTvQeAUNAO&7vJ!R}b{* z;Ix=b%&;K46a&La59PQ+v7XzmrltVlz3u@AA9cE_8yId#^LGC~b$U{G7QLyKzcP&( znhYRn-K~7^0gL>pYxMpGP51`Xfhn}UCp;qaIxt&l_XCw=OMJivG4DqfxF~IaJ`xOQ zshqvAN@!r#NuhUHUrRwtjm7sjp(Uau2OQUG&lH~}0&BWyj!7W8ezgVjbdfyd=4@!R z9Gsk|zdM|GahPJ>k1J-S5fi#O7aQLUwH@ zjSd!dkGKK6Wqd+LMX5-QpXt9d#6-s(#rz@hnrT-hcez96ae5P&k_2#r$=HY0r5`_% znNUnItlK;-CI(_=6$)dWjZ-9u|w;OQna+Y}uPfU@XqAvfrE6-49a&6_lPFvHt> zhF1f3AS2Nz*cQZOEs{Nm6q0UUcc6iW$|SaLJ89i_U{JwP4##O-^2n8?!_cvxvjr4H6RkM;YdZ$G}fW z`f7HY&;wNaUhfVDhUU_RqTB46h=6oSEDqEX*Zkrxw6zj3=FmXHh`m|g_hd3uK)>?= zbA80_B{}kON6nA>gbDp$IxEMz-w!Vg-dw@+4N@t;9NZq?0GQMggW8*wyX@gm`S#jJ zDi+DLb2DIj_?ZdGYlbu<^|MAABh|z*Romx zLJ7pHBQ2tpa%u%TPg=cJTR|pU(KiB44sZr}{^MQ!{7dNDWdc#HnP=i@OOvQ1Zkci) z?O00Xgrgf~gxQ?-)zVxH;fyI5euWT@&nr6_pR)Yu^RS1!x<@b13Eqr3o?XZ zUFWlLbwP0D0w+~ssp#lt3hdtfX}WYD8>J<`$uue|Dh?HaD5qq!0}e;$uq%wa89CJ& zV2kE<-e{>fv0LG=iEVNR6jKY`$T=IBm_j{rV9Xbx#YE~LDPIqK8MiL*s6C|30OPXI z>tGq)4uxLlM9V(5-X{Sh#Y!9Fhy?gGYrzccUo#y_8)o?_hQ&k{6KvFIesY?$X@MJL?^=f31(GDPBf zlGvKi!=t=d`-dE+(rTpVhkaDU7tQD+KRyEyNATCp-d1cc*tvVxP~(xk4OeF z=;=*8EXRDj5W;}4IgI}D&Dlj!;g*B#(=H}xQPp>XsviQm9a7FU<}oC@UUCQpe0*{E zGneyL^az_k&qybdW8J#TGZuKn0pZ0bmw`=h0a{qX8^G`nKDH3xK$lGyMH$cS*$MDIJ9(oYoqbz(GfH{`|BVQC10#rTN3sN-#}B4?{97R7YdL zW7jffW)q~d>0;^mZH&1{GSq=-nHUhLY|Lb-0siX74WNlnv;*XpDx!M=q;{jKq&d;Mf#l*Ct$(BYzTLc)Zh zwg)VYq*9Edhzb?#gS7lj1a9(Rw{a~5veS$*$8ev7eG^p+;PMjd_ zcI?~)2u=d%^H*MF6o5y&mQZ=f&(dV|a~mOyiM5P_msh0nP?MS%BZg#+pXmoGgUTW~ z)5&xt{#!%atL4x-H#aAWQ$!?(->nC(wCUbR)}OQy(Nxtk+Tvx{)JD2ZFG`o6|L>6T z`?x>Ivup^|Y;IEm&mlwtq5m_xJ(%NTDlG(^D~y`N95(;{3OJhd_u-kvs|4??C7LPN zRwQHAfk{|QKjXRqgkT=W*5B|}npu9-N&8w8XYckKH ztwx;gG|y3@yu%VirYJND;6FnfyBh|XYSau8|9enGeaSE*854vt;t?NAj*QtqK+KV# z{6VxY2xEnYbOADp!o>evM6tUCGF$>Tgix6EYdOblNV3&;Y-84WW&lBxZ#NWAs5?=_ z=VJWbvMwcp;#6t8mizxGi!l(dJ^tQA_Aj! z8a8a0kC&Yyvw-B#0`!EPKD}JC7=S<3Z%Q9KR!>_;g|C`5J!H`ia!Ke1jGV+RejNoY zYoLcHaij$~kUwLg|DIt3%)H`MeUKccQ&WZ{U}F;K2C)VAGfa*d$VZsKQAo5462=o7 z7Pa1$7|RIp_1)era~*~oFNK*JjP})>S5nI0T)2nk45pEZktCyfakb^h$6@`S+qz-H z&x(BFlS@w>7$cP|#C7B@PK@z3_=E8r5%1!H+sZzEeB(Yoe51b#f*}PqZgLvfq7CQO zIeeADRxz&5gKQ^Z8$Y^;M3r~0ogBRYlW&u4rQ$ymWFFhM4RyZV$0mx*P^~aIwUKf8tzQ2Rj+8raj*O)Il|#rrqi+Gtb7a1b${|}PEnc(_ zLs8?GAN*$Q{hz5Wm5Udjt=L2Mk}{`Le@>^j3wP1I#6K6W{ZVi!^~PW+7Z=we#t8o9 ze>0?z0VJ)CC9%xnm?Y0Ah2z^AF;uLbWgWps&hom8X1u*Xq zGc7qqtO^HE5T^v-_kb`1xPM-Tufym^R+K`atSdrEkQwFo$9TxS`pM=#WsmrUE(gP9EBXPT$F7*$;pe7t8x+cN_%-5z;zph^ z0<3sAR(v)yjp19x*1eaz0LlIk4qw2D4_XcIrBs0(fGnyY&`4v^eRlW^^jR%8PGQ|> z6qQ~O7Xghqa$)7CFmdi7-YQvHSq>*MqW6GXTm$T+h6Y=&3C3MbG02cG2-kBII`I1B z%rBZ72x9iHK(mXTBs+K*LAT}?h7gaVHk^|`Oai0XVcsT=dr@-!iTRri8#aVvM{B~o zltQ5b9NtrB6eK_XW$u2N0s78z=-fT#V=Oq}8n9nF#Rc;g>ZlQ}6Z_dt!nYX-+pGnJ z%nKk(w~h>xYm*ZrUZ28Hof3Qp8TBW<*lsx82gB-t+eSkiGY^=1&gycoY}Yr^ldRykyd8~M_g43rYvI9RUi=3Xe!G<$5D62Un% z_Ur0#Zjz9S5cw?<3~d@@xD}_FC5$7hzQ%?Cl1AV%EMXn{ky*_9QBJtB7;!5gi0iz- zkMnRmnnn&V6yXluqStE9-P}ubRHyq49aW2UCE24MM|KPqQOHnK??9H}M)FMX`6t-xmZzAF+IJ+Ul2BAu?aZ^1wjo( z#?5mglFbQZj+uo5Qi0Dl9k9pnWI}&?`?Nt_(7oB`ky`PA5#{xS6WJ7Ef-fN^s; z(eJ0TMSe7Pj(L9&7Zb}4Ny)sz{Up8$x8U%dy$Jepn1?T=18c;?`36~wJyPD$SA=m312Yh17@OWdC@3B{A_i^;vWKD+1ntP_a}dMh?IF67N|{aH z2&_gMhoYs+vjfz!#=f?XvGAFGYbW_}>IONQfE@UPQGr(18PaYfr|nUuou7g!^&q{d zW4+{4sub`LxnWp|I7y4fqw0yebqU3!d6=N*r`gldxQmZ3{Gup%qT^bva2w%JGI%f5 zh^fikJpR_LTO+Gx$uI?c0{*accTQkHqP9PyC6RPA&<@!9HdbU+!TfX_rnj!7!{ZVG zp|1x=FyZtb06-mabjfR_ppaFd2O%s+v`n{vxg{qJiD*_s8b>8YxH!@JK;ZFW*6uic z9gkKM+Yhdzj-COUikEvaf%Kc=vwbIst6amijJ!;82qdBoDJ^4NLQ5s+vxOPPn5z!w z6}*8J&8DApDs^s3Z{Pm+coPH%|G>bW3Y*C@54R?#_rk4W{gPZ4(fPQ%?^#*VS#fyzM!kkOrv~g%Bta+BeZ=kMM(=p{z1s|V-KZ9EY>^*b7I|SH`o{IT& z*kehT4DCzNTD4*94LM{GTsv^p5NW|`=VqI^Dn^j#w<;JU~_@PpuX&xGXZDk&R616 zWVkCm21+_1ke>BNI?vsM?=~x)VPVfy6B8a9#PNaJ=}r6C(4>}ZVIIdZLgb9lhW9s- zTROz;OZR2LvpB&qa0$Y5s@@gs|4MkUg|l1mZpnFpaolUxwB9))Ko;HOXJH`~4j977 zxi+-c#%me9SS>7vR7lC6gAskZT+Qe#Nq^^KKK=stOG$V#gvvwg*)<_X=ZWc>v_l#W z1E|5b@$@<)l&oT)1xTamm7oU!*L5aQH>;vX82k>EHNbKK4SXH(&LtiK+0e>*ph{#= zX3)K)7cONd0Z*)9e0U{h=>Ba!W*d#eU=s3CuxjAG){SMjDm-?HS(N89M1p<$_O;}T zh0rm6lZWgy(jUTcEOm17=zz2QUBXRmiN6Q&Uqb^lF-0E{P%H=-kDThEJA;1sg~8m> zhuGfosk-Ei3<(tTR|K(+;?S0#b%S8bRWLVD8qiwRZT-%07vs=IZ{=+x#G40VZh*t` z+!6`7!fPMCsAvJkm7@y9XP|UR7*szU zwR6RIZ%w|_Cy46!eEb=v6kb*;x-v9u6!pFv#IT0`WeGgbvp_ zxXR(nxDeL4WcT*%w^|O8*ZA}84b^FEQrn_cM=qX_f~5r3kTO<6z1b*U<+A%aIA<9zi`vH;|`Ox)8JbXl{{1qrC6kOYJw>=*7^H(QdXq&qy;K5@<3hR2cb4l6GPV=X9!6 zg=fwzFyu74l`%L8xU+r%Nh_m2z%Ka`#ul?XgI(nNB^IxKk95$;90obQ7bDN&4czX~ z>_C7NP*>E!p+*~z2o4$dlamq2jBPEB(z*~B#rW;x!9+c=Cr(*%c+mUe;$C?7LGM-3 zk%IA$wNV7kJg8KvP|T}wzzO+U^gAQe7Ueu<8`svdbvT0&n=fE|3NKSWa*=;{e=1j< zRv_aN=u%4PF&?xq6i!1bRFj%AC;)0`{x=>NKoF5RXfqrQM;zZ$b7QJRZ@1XQkQkXX zkK%|0c*t;V99N1?B+d_#^%ah9rgnWJ$7lb1G}ljZj)2&?Zimz zdE=tF0h-L1>BNzs>?U|ZuKpKvHWRco$Pocg+l`s$_QI8DUy{kxy6Pd1WGr~Q4mmkD z2Igi2$kP>ZKyO3(`gFDeI5G8|yZPm~{&sK=>0{~X?AayQx5XyFrNEOI*gvGC2KHp@P&uth7&Knwhb3xMC13A_7pkc=;u{*dZ$5FlvxH?~SwKtQZVJYK<`e=CQOx zH(ErR@v&BSeX)pweItR*>`Yc6xtu*E?5v~#kr`5pmH&vyP6*j@=z8m0d8R^_jtpf3 z_Y}^dUSRx{8psQ+TOYE|GBHi$e3x;Xnu52cdNCyOm&IZctT>C$cduab3%Vy%6%Z27 zj88HtyP~b(p~GPxnm@Z&JMAngnw^m>eo*=o?H*=1d3hB?4B{UdMk}5<97m2GIHIwf zDL_gS_oh^{#2wHeh|Z#pU&$;Tz9|h)IkBITlLz3z1@WyGYTxV?3TIT#)xAstg1UPD zKB}_o!_^Gj2)&Ei6naAavumAs+F=iBI48j-;8cUQV zd$Kgfkd(Ed4NbPlS_v&?$QjPmXd-I~A#H~CQVl~Y6{R9ek)%y&)&6^4w>jr=&iC>C z^Y_Q^@%Z^?&dkZ(eShxva$T?OIw|_)l4`}-1+uKgT!1J%%I>KM<+-nHzd{a>I0D&? z!03|Ql1Eb_C)%gY3gZPLvc`4v2k3Te-cxhWEne5XmFQ&=*?zX8$*hBIvj4IXgiBSqX2zSKFl zXFKtYz7?_-A0I_fe>l6;--{HkCL>E#oJT!mM-}KnJR=}CM&Tb^PfPHM6Dx6AFS`yi zdY7_gw+`e@%a*2HQR?owgZ^@k`$)y{S4+tTN$UySCtKW^tvpWLY85_KI^4$MmZI^~bE>Kv{ zqOul}`}XbIMU75;hlmaDUT@~{*e*}c>a=S%efs9C@2)$eMB%{Ai{5d`ba~~ls*Z`4 zs_$=*dg17tp?sPew^)T5D-PFN`xan*s!MKjTBN6NO?VaQI#9KaZ`iAU(#LJ(FWT1R z$MS_gDhmJCf0rUY0cDV+HBDZ~_k(TYx4%BTXd2WdaH3F`{mG4(C24mbxa7{!dU}CqA}*ypF3{uC3#H5RqV(?h#TV!44A!&FJTDLp ze=%$!ACW&_&h6YrVi9r-LpXL56w{`6?!|ncIR1+A|2EpbsbGe%jYysFWyB>;YYd@9 z2`*IrZR4IS11^Ss*nMeYze#p-C^XCpyBQCyVR}bdt(_gtib_DzDFj{b+QYj|^lUKP z2siy~SK+U8)kk+XysbF4Qu%_zyU>M+EwO2e<{JqY6loBfbt!y!+IaCri5m*4lkfXV3%=CYJ*VdxO{5dL;)=sZo6kbC2+ z9LjPGMII%2hDb8S^y=?zkxBN+%4@?^5+8^a7h1zcPBjCJ08`vwkRJgzw4MrB_^6#i zyL764x3hzP1s7CK2B|?8PuZq8?7P9axME2ggv9a6<9y-S)F8p}0&#Gb3ZMGO&{xl# zfB(AN`x@|}l)nH(4Le8hit30YeJ9jS&^#T9xiCK-*yCE$TXr#UL1X<_M3c&8Wb-=l z^pqV>myJ_AB3!8VuFrdDY!PhWya>R&g|9sAa0}S$$d-JFJ|zLZ5ptrjz7EX>+XgWKB5vd?ue)qW_U{=w$)dmHyQuN@udZI|mz5!%W98MSFyF^iWu5aE}tRc6Ms zBC=67@+GWC*|_SR9>-qt4zmJWC+%9{WxY3lnTGa5Q;7pubOd+G;?P4}g7_l<*G67R0A#uX``-3v##WR0FHL!_N4@B?S zy?JIYkxoj$n}}(%BoPi>9+kT$9|1^X8Mzuf3zGm^*Dk86nwevv--V9mJXrvSo6T}0 zj`@BD~``2hHQdLUIODt#6zp%$13c5xrrQqKq{Kj+XQs$n*!3?jwR#as& zyMZb~+Iq3t2XA442Kz!_N_H<#7I(Z&GoQH*rOQa+mA25<&3~h&Whlt@0O$9s(OX|N zZWS>({)`18pn~>ZblK^3`k6oyq|X|+A_%PIuWtmOIM7eom&E;2h;)51eXit}5RP^? zW{5B5OljT0_A=QnLGiHpysO_i<}{VE#&3*#f+Pb)Yz)}RKx(FPV3_9f)w0*8l%9Af z*?#0uM{LF|3+Q?t5+M}n0Y4@E5oXFv2=O3ibdC3MrR$&qR~h*85Al1WX%g4PK3YuX zs6-!-&~Rj^=!AG^l6II~3?;gpN<%DEF=adD@GkHyzKaK#?Vbe|Ab5smEowe7-k0+F zKZxYsGssw!)=Gz;c3JEw=mX1nzBe_ju>VO>r^L?1fbzpE-B@IBqWTawN6==`-qLaV zQB-MU$b^Hk=whGi2U@vyHden%jvjD^h`=0D?Ki}3t)aIq14UiR8$7(zo%i;3@$%$J6?7-chSRE+=xz!2_0;;Po-7kHC)RYZ#0SHeaMjuG8)TDE zF6ac(39qWYW>cv+)~mjxx5y%>O7cZ@n>(X(Aca6USdseLG;{f!mkeW=C&v&c$-Cwx zHLdu@@FZWmUdoQ|W`f&`Ns?+-0L9;iO2)S|(_%_|RkObVoTQ-cg#XZq6C=LQ|Fad~ z6!5>SWSnB|RF}3mc|{t%kw{LmiYB{p--;)NGmOhIF{?=7pEBn9un7mnIwD<_kfj1_ zuq{sLHp?+jy+Ib=?vUSn>ugYQCJ@bFmt;0am$Zo(hf3RUMCL3#-{Lb$VfBQq1v91O z%&VvGEMXHw))~y7p9xNM9!y}x6QOQdeKCpeJP<|Efv-HQ(uCxgYb&MZT)O{IC?&oO zWz1X35!G48MEWa{Ul5YRm%*lPdpKlWqW>$}xoo;jU2``p<@t*M3ghwoqeIjyQUgf9 z6sT2BD#2A6>%Zi9mb7e1lLR$8w&5h|Kn{Q<F}Ol#IE5RB;~&b8J#*xTqmY!Y2NET1-Hh&~U@%5S5T&6l{&H$RPfkYznNk4>?; zOt-_rf=2|OjJWrV-Fm7Ni~8?FF$|A{R^+%$vrEb!!C7T%W67zhRpC26YT%UZLrr{P zt{&xK-qiO?l5EfTmTH5*8y}nqH~p0|?z5v_c5@jkf#!&a-AS|yI-q(TRrC}8Rs`6a zE6M{K)~)z=$d(6}pfY63E*RYUNsiDm!@G+8mq6f4sawM+3MOy-Mr+Wvg9C5t*yN1j zJ(kkl;r!Xp#r7(*ZHjgu1UirN$aRZweT%Cib1b>MJL&J_Z~zktzY0W4iso(qsqFAW z09rpp)d_;jrW|{7Mo=p!hZ#9Y0~QN>)2UBPtQIi z$!k5MU93q<2B+*d!+EbyzPOc)*RNkc!eprq{OQ8)3JxX>rSuUY)8;Z#K!TkJ7Xgj! zwD0EK=!yF2WB0}Fe|~?SUawttM)SsuAEzh>00h z=f~`_+K~M98*kmVHXd(ss!BT=(x6VYOeAm^d!w9}n3Z&=lfcUufz~|1U^HH^Cc=xf zKjC{!F0zt|IXPOYOWqVXZZpU+kCS?I>!*biRp*=2H3?{8b~szN=HB?|CPc;0bJC-) zxU7ElblAUw!{SQ2B`kfv;hzf}YX3=nDXH1=1#WI8x^w$MO3E`rlaZY5F6wl+z3?!=fGq(AQTUvhpr13p&Dy?aEm5f^Om9`A~D}`hnTSAx=ddVn)+cnNm;UTI*Hi;&MGFc^-Fs8Vg_e;-Hx2H$B2i^ z1GdMdv*`i-ApmZmDJofveGe|_X~emmbl0#J=KZYjG(_05kInNwh#&?_rJk|hV9uV% zY1=7pPU^M2FEo21Nwd76fW3~n>N9H^8cc9)1QAIDU~k~pASu#J<60N~^UptP#~2Ti zH$*C-#xv0*)95dMLJBu`$AF-_)An-nJ3fExLbkRTTb@)tT}F8QAK@mF!}MWV3A5|A z?Gu%R>yXJ>jj)C$kdX*A z9~W+kd*>!{VOmoWWl&?sbC6s_KrQTslns!JH+8D^$`lTclZee_dEtSkZ_C#;09loh z_7|Rq_FSee$)3_})~5CrjYh~=dY)%1)#FTFN7u}6*!j6d%DuZ@L;J?JxP)K$(Pvs^ z32L51jl?7SX6*T_JSX^+WOmXr@l5Dju=S#<$TB)?r}jaV^YYm4Zj zCL5I-*?hEW&H_Tf2EfX`{Y5ar_NUNmv%FXL*LS~_m1pFwn6!a*Sngv=JN^`S61UJ@;VE;%5a#WQQJaek z=zsQ)gNsQwe<#5UXT2B~G5Hv0|A*$VzqXE!*9_jIYmb6Qa|9Oy?_c{-TaO;<>cz4c z_|xrEsfvL-|0y;9^3Ol*nS^TkjJm0tiHqPL1hiVzYH1jAhI}Glvg!)ko`M z!8w*IwN!iih{M&U_bL~^`rj~&?K_pD2gH2JzL__2OhLy){~s~p3cp8zbDE~EtU(X8 zRCkk(lb3w=-NzmakM-Dc;!IK3e^<-KA2S3(oVk2|+@H)|+;zU|p}#=&I3mSlt3if{qq*X)W@543wn2fG;2;la z*dnu)!Zg=F(5@LUPACzIyVQyigHu)1vba-BpG0o)9x74ZEJ7+(kP{wnHcN#xFzu4r z?@=+!WEy1nel!ZZUd1UUOV>|jpXlY>owBZ@Lqi94a|X~erb-cT9cV?Cr{9Y59UnbwaVOG>?P|-{4)qWg(T;PDiK0)@Ss7HrWdob zH1p%Bl_d!~`#JuOeO73wpXX@3StBilLZOii$i(kKu;R7z#foNhB>{IUB|W|-|P$=uug zx+Uanrw$)J@I1ag&xeq+^VBca0Uv-UZJ>g~(0VVsfu26BPNFg>GrR+p zc*HCdJX0VJk#t7ZjW^8d2PG*XOQgnC=PD10sE;OBqZR;H$+Dj`L-Rcq`81P!d_a~w z)9ZDqEAMKT{oeZ4nac~|=CYT?NDdd}v`^vz8DH!FB{w6m^#k-956{l(ST^u1t0KBd z@{t9TK`2*@q@fvr7#g$?eh4pO;7J-SBet?2H!izKl=-@^7 zOo?YDW^76N^JyiMR|o6yGp4jUK7S$p3NR+{4hCcvFV<644FB?9OgCa#$9+onYUaCl zzeQ_34Q5FNA}n9IDuLZ8wUT65O1(y=&bRa{d^Zve?+;9LY~h~@y ze9!)-%vD@IH)CT-7$QZt>$oCnY5_E|EfAlGa2;sL@#;ucXr&|pDO^1fX~}iZ-D6`) z4F~dZTSe|$4G!=G!l}fZMm#_T2}X&ZOK1t^`J%jdY#O~~rw;#`>O@Qkyoq3e2qi~X zqDHwbjJ!K3EJoNs%wBb+MxL3xmFzN4BxVxJORmXMo?0F2Q>;dkZx%Pd{y6Tx5iK`nVfV>$bAC5(SmC9$W~KW8(Q!( z!)!VvAn!1nim8S_$AJ$}o8kvW6+zdvgrSXb+ zT&KAx#zey{n|9?NYdTdP`Pg-nRs=-+52992bo!)aiVjpJD1RJ&iCPNj0B&+_q^l}U z^;N!*Hln+e;e2v(6S1*@dwzgkM@3c8O)YqNq!T49JKLa7Tqogaui5$O%z(nm>4y#_ z`gTVYqxqNk;YD^_XSTs&NgMeLwS4T${Eir6kHshMcx|tu>XU!*^Y>13rVbx4S1Yer zvg}8KT#>ki4qh}=VSwu5MlAi^F4xjiL`YH^OV@L0{>KWBt#%()pX<3@VRjQbb*{=V z^)h@{oaLDH(Np*KAu+gv7RZDgDaxfQ60NIL&Kz!Lp$#1s!$y?;w-Dj^W-FB{+dn%L z^<3#Ams9VHwd#vt0L40!@7!!iEb7Y}4;1}F|AXB>XmD0*GCY{{5e#W51tc_CyY}LR z1fP-&3IpeG#p&}x^{+!!Q_492!B}@KdPJ5|#EpJsP`|ACgVc$I zLr7=AA19Ufz@Vz)uYuv(8S@&p>Q5D+8Yq`MtGhK4VGXq)W)e)55-)6YteaxMB9xC* zTSic^Tg##t&RqOfk6rrt=kKpS##AMtaRZ&-&mvU8bNj)TASE0QYcDUsP)iz%Jy$j< zqK2xm%Bi8YKiSd3UhGE%fpWgm*1<`g+tAJ`-#14k^Na>3$EP@_A8laQ1fs)~6CQmV z`FskqbAQVP3?wYm^bYYbeKdu|?fElKSn6ic?ju(Cq4IFL_A9P9nPLJ4N%ZMbp1AJf z@d~d_fRz$~9@HM$TLvvk*jr419Choq|5#8-9|vVqqt=*d`J(-hW{9x_z7bHv@X*Df zUw{G-`i>GrJPXT+%RO?Zis9&Bt7&Dz`W{NA8^j)8zaYNWiMRFCgWWw`CcLBK_&z@Wy8I4~1OD_4ALS0Ehg0df?P#8T>G1GR+ z-_Og{v*@l;%qlgx=cZZHHQ%eVJMWsJBv2|jjH~-k@yCA}KyYN_+dHQ&j*x7=x6e$u zt(IZq6&>dGqW+C#9b9|-9_~s>`{A$M?C-sP3Dg`W|1x(7ZV^@p>IMAf7^ADG+RdV> zR)+Pt7epl{kd+{0kwb%odr$>mp-UbRqNX^#FI-Xu=N~Ne`2Zzhlw~Ij`d}w2u#*@X zD=UrGx-Rhu=yzS~&kytC`{A!h8Of6{9+WF@mD!Yt6+~zv0}NnuMnWi}saehwmMcXD zOJ-S1jX5(wNLp3Z>q62N`^`7*&lEBl|5VG7|9W??HF)%RcXcim&m2#?*R>_RYnZM% ze(k4^52gI`zTdasE*`ex$`FGi6IUCjdkuLqsBDnwfv^$&a~382{Pnh=OF#ei>cJuynEApBec@a>5l%>%CaVl{LnR4 zRx&U}62RzcuFz1XTwW<3G^%OjQ?E9<9fPL)bBjQ*tygqARDfJZj9{W$Uh>Gn8WN1i z_EWS6^Aje^-x@w_r1BFI|M~3IdJu(pwZMIsNGTwPazo6bEGjvaD~CcMzsm%<}S zC^zWE49S)jnxDXXhS*k4o`@`r7F_%AH92bwt_1$Jubo@#Aq?m@r_#QOeHMcJ;o=_4 zjzE{NRZVyAPr@iBK20r;O2}2=if;Mj3z>>e$3VGU6vMlZ{IQ^+z8DEFP4{hYlT(~ z00iNrT+gM?Y#0-W$F&(gGR9n=MJCIeuSLAcj*h)5;_qVSS$gxR$tJo#H+!z}XZ;w6 zH%Q#-(b3VK;t?GV4FwRX43Hc?P5s*T)R>P_Q<7ujjIVik2mdx?(bAU2IU6qXI1sOn zTTs(hlTcwF%eMrZ`Dc$6H+&N!7DI>4k%mD%et=!u^7Get-sNtVQ%9~nwg>P8Hj zl1Dz@pQJ3~iLWbXnCECHW=1dm`ckdI_EC8bMG>|WPo=#pOUXD~t*SvoV(wPH9vj!-rzYwHC-zhG@N$+U3yYGklXDL zWsj0_y-VNsB0kK~NYqE@=w=V7JiVVKp*H%>tc3skF){Xg+kIMfpJ1ld>)WGm{S=ET zWA%EPTTLvVbPcydloo-M^StP`iYZ|2e&(3`J?>bN{!?9Dz1YIS=X@n$wMFBq+M`do zUeCI;;vb(VT-oO2hZsGF;%_x6{_zyZPP%YAU*yagFK)wVhm$a8M-)yJEz zkXwN${VOM~ca6oC^LE5Xzq>>_L(51L)`DyGSu~K==Ccn-rk%&Sp57+C?2kH|O}lpO z+5#s^@A~(;$eP{k*REZA#6}j6Yqfi#$9C;$)1EvmE-Y+()w6iR6#mTl`x#ABnUONx zq%v%eqhs6LTt~IaS+WJLj#K_;qnaAiM%P5aIAgT@vs##KGp6fv&#fTszi zkbX1v-T}Xg;K{E7Y>jlGHMt^nP!t_4QgK-^<8g6`a|u(1L;Rc=66SGd+CUf1YW2vW z@-xG8N7Z#}r@>5#`N+#tI1GqRcY7+sxn!*rcCEO2^=gj*WiOkeY0#++=FH3P)8QHf zI>!3laA|k;xWioO-23s^-4B~8F-I?(W2Z8^+iV0?=GlHF3}FeisqL?6Y<*zxu1=zd z{3S<;t`=di%iT|I+%qV2cl(74-3dZ}k@E#)2Lgdv&l(BxDqyaJ7^G=va2h7=xfxK}=l7eVE>-Nc`ysWoDs5p*mQaVTEGV ztiMB6M*ZV&>u;yO<5#W@`Y(feB}GyWw0^!Gr^A3jrNP5)ni5j|^j&cZdRDJhxw z=X=st0|}eQ?OMc9)rA=$s42kEhf+0O)1m-2W35Wj0ZK^JyZ-a%&uRIDJ&`GGr)*;a zf($+~P6s(Z+f%@A8N3i)lfev8kLmTt1C&q!715!c3u&d9zc5lqXDOZ;V}1)5eu&UE z^fk9fukZxF(h$WOhj=#4&CxSw&Q$&Zn5LXZ!JzNU&;d7_ub8vf$%s1Bng~8a*Iel%I#x;aYBT{#D^#$&G?88 z?d_`QrB72K0S&y$8}>)10j8YPB7sETz8I)2WbuKweUVb&sp((A{j!0~<2icynBzjI z6izmsKX;CJ1J}X6>R0=ndS)BxZTGoi)w0|*1b<6<4&EV%a&T7Lu-0Wx|G@CoMXp#8ekG@zga@4WEz_8 z)ETaazJ??aIG1u^nOA6;G~>YE7tnzmn{DT#nVi^8g76Zi`suXBe^%dN{PP!`6;T?R zng(=qexm#aY2B^cM!6(LDjmn_S9|p%QN*CMt2uMCJ-@xpM7~zY`NDd;9ox6-VBGt4 z;Ed-Lr_=zWPR?+N7rh!2B_l&8P~~$rT)BT$yS1{R5Le{Z<`%_BH^$!x#LxuxZ0_c? z1u%2}ewmYPVG)v$4otX$uQ?lq!~EE%fnwf5&)j46z^z{}6|Z3ADW>QBawZTzuA0>L@V9Z>$h zoRg#plS>_qM!)#0YuBx_`RgB_(=RB!IB&v{17AjscISRE)gZv8WH+F%xXhBPgZq6$ z;@=Xw_QEKZ;~QQhhi^vJDN{m6rN?!Pr-Nfs(L7q(6y7WFNstT(Nl8mPI<)BZ>r!xy zWh^eVDY3I%dMk3g0m3B11WeUkkHeCKuoSFi8H;ZzChDYhj*gC)m9qGGNwqHFuyxO1 zy1V4$qKmnVbjYNxcz9RYMxxJ)i__Jgv3lU$ft)5G*Pv!guUOU`GqoL&X@}FM4idSH zcGhnH(s=?Si1%gr_l5|P#M_Q~c5>6EiKj#Y$c|V5ce!oKTQp@7gCX6%oZPIpWy_Zz zyO0|C@q!cM=I}X{(@1hH=vLr0Y~RF!nd#V-E)|jT#X_*dVA#0zV0G^CxF>9wipBEY z8lOAw`|l+quB#JI@*y>E*GXe9q)wWFm-31vB4-xepFu>ia7{Z$xgIK}pIOe?bp9*8 zRMIcz@?Lg2#(8^t(-ccGx9Ea1fr12kO)BOR6KORA5f+z*d(+EJge+X-=5l!GO+Dj2 z63F-$cF|=nG5vNSMag#Q z5nQ)XEPmo1FM9Q=Pt&K(Ghc}6eYRxhAlw~O%dUvM@9+{U>JFR&`S;N*Pv&o?74{P$ zx};X}|NiyMUf-3-%IBicaJOgINhaGZ!;U6=`9v$)5#BJZiToQ$clJ&iIK%nrm?4Q7 z8Afa(&8l9m!pj4FPbi;UMaxdo$&JK3#Sc$7U%Q6(YOM=(v71(I$*hLVusQi0#fMET zPCUX*z#x(}d1(i(c8@y9t+>?ytwGn#v`kbqMSJ#Q&kgWC^6qV%BE7hUYyWfB9Fb3?)>#vpOAd|IZSu4_iZFQgO1-W zOn4Gl+Q`z5s|>;NCWIaCQSYBx=2Z)UaK8c2zjt`hxElTmnwa@+YOe1m&92RIA4l>M z4G1QSaAXf84WIuVq2~D8fY3r=Ks0!@?{=p z$X3VGJHB@z_x@?TTg@MhX@eEUV<&5GTKRCav486Ib0ORUKklAy;Uh`Q0-=^YF>|(`{bf-j@W!OhD}{n)&kbP1NOv0zcrVW9Xs(;N0cMCDI67Pv^$#Zy$Bm zol7wjb$iN8gT)+`saAzAU+zS8rk^i{-obVsb?$5f+9$D9U36_(M8c$Ue@Z+K5xE{A zg)KEPD_tu&+uSPrY@=R$%q0=!^efE|qtNfa^Ph-7kZvYBZBl;uqF_akA3(WVJ%o&$ zf-pUfd$j<1(59spZUg_2n0MHmk#x^dx_5B2Q6YN(SQ=jUJ5k@d@7p<_{cdanBjlO-} z=6i4b_M-rrFW*g3{P1(l#Pg3IKbDu~)+pW{?CJSq6ToCx8GjumMpO%M%vr9aLjl@OG4~*+U zX7Y$u(A|l(;Ty8<>^xo5@8b~LEpW?}fY>eLP|do*ea|bfw_Q=358?ZO*^i z{QW!$E7P&MqvmaT2Ifs3Z&4K8;1$kkaX|kOA`~22vfQh`2J+1wIxKjhQozma*QW`` z$(hQZ7N;8pnBTCn^pSj0x7)!S8v>nYZA-V@I^AjRa!(m!RWPN)(*7hn?0$D!-Q3xp zunysED5sb6?sN!I7jGkB5L)$iwEclxW__B(XxyupzqBhLt4$K3k72hA4s!gB!6L*b zeEMe9q2GrgzRE`7-kRUu>g(rn_qVV4HjnQ*I8gChC^fqb{}H3GUjmC`H%`c!uZml| zVxWip7h7(41gtHxTYXF5G;^({V%>^|jmf8{o%TH$y|VvjGjBft`KfpoYeN1*M#FLR zD>6UZ{q`dMoyi(cL;yoy_v_ri=1OcF0OwZeJ2=o;hPqD}l^(;w zlC+pkZBGj3LmN?e6>qm+Lg_iTSY;LCU|a)(&@yRkmvQc~H>z6*B@lXdwnu7O8Yr|I zE~HvWHPIYVM@;B1#&o!`6Y-x|Bs*GLJLE@e+W=e0h3A)n%m?yqt7BZvp1=_Mal`*v zW2?}p(;DS!^E;QNWcgFjzCm#2V6%X9cGj~v64=&r$>#c<4@TjD7;XWsTt(`orPu#fHt)~)7`Z% zWynZZ5lnH~-_|pt^nq2ry|L>*i$hEUTctpGepcFMQD<>2oU-VEE^pG)_ovB} zNA{TfR%7Pp@4C%UoHdrnH>?2X`I37Q*1zK)c0L-$&m}eooJgcVYORt}rh3|^v}H#x zjjBD4ecMN9l}@{=2)e}GyAo4?OlAVPQ{p+la+KeYB_cyOTAn)2JxV#?t?Ko97|jy* z$oN_=ue4wQ(m%vT;kSjkpOR+kr%gi!qo)%TsFLWU`+{||34)(>bN~MR9#f2*@c~=` zQMk<7km;;*tso!Nj1m}$Xb=g zLt&pusN7lN2{|4{Vum;(o9HC_`?jK7k74MYq0yG7i^4Z9yY-VjaVeu0Kl87UbSlKS zt5z0Gg~1~`aMaGv^@_Jzcnvd7x6)m)NpTV3zKdK>$ z=;gA-~P#FQ4uHwo9Tsd z%`+E8JlxS%U7G&u$BM1~q?pJD<@UP-#d%!M5(B57c@NXWG5v~dhoj`bAS`9|bvhOa zv2=?Uxalv8!yQL<0TW3)OW!NONor1FP{IcN%z3V8blmKz3`JVFW&-(Cb0p!JUoqYJ z3MytZa&rExy)KqvUxFp~J?T0%kXQ^q@_y9m2Cdfbi5af0m`nqCQOqTL!5Q}x_&tkP z^m*vmVTr@@`~-kD%w12hkMOhM@fEPk`rkPJxZgvEW1|F zjqlQVp4}(HM`h$i&Lpv8$0=V$NWxL<1TAJS&KD2oAyk|wa>5hjI zG~bRgUMa&zjcP9~II;NLq$3?PhX6V)py~@ksD5&Gv&43AX{t}v<2V6dn^;RgWBj)p zW7%A*>t2_am(NZxdtFo{4Ux#ZORmc(4mP%TLPA1PxXz|W_wT1~`7@}6LGXQZ=7Kb% zI;n~3rpS$#a~udpCY8|wc7wSs-|?LM|BLaO>n2U9tl!Sy0*_FcE|Imc!`t}YMeZOw zk`C+^FSEaa2cB+e?Bdl~y!r+-ahD_xR6pO>DEa!eYhAt~($z%289GDzh(lv8>xd?! zZxdX{(t_hO_$3fCW9!<*@PPapeB|&_1CGnCS%xyema-)>Y2f6oiDPa=;O4QN-nZkb z>FI~hSVY^*Uqn6GC(pvd!tJ+#N`eRgr~ZAvbSq37^L45Wyw{y!NGQG?u0QGYMn5Q1 zEEj<8RhjUSfC*|&G6vz&?P+^n9hs|U*#x8nms7VUdj~L9Ryanw5I$=0wAZw$Imi># zocL`bPN0SRA!zqd5gv^VW0djB`bT^x{qhJk8DT$N5n`BbR4682T!ZRmr%7xY8^%{g$DS7{tP+gs*-b~$4_jWgKiITd|gh5m!CO)rL8xXiiR8Od9Tv zF);D!HD~H68LB%wNs?IIdNpk!ZWo1h*k7e8TQ>&)*o(nXKVQtEnDqvq*+TW_mR(Mk zs-&sh8Y_}hq@Zd}Krf4-O-*z0#ZBD586Y!DOIu?D&KoJg)tr(%2IeAfonLV>Fy;~+8QpHu) zHw^+Jl8r3a+nF;JZw8K84ir(X`O3^pyghOQ|*R{*5xa&5H@pWp3KO%IHHm_bG@)&RuwCCZMiN z8e-Dy9Mm>rM`yx0ohOxQbpD7cmYtl4=|0oT-UtkWzjDDOE!}s7enppOq^BPnYc|YXPq77xe6rH;5$?y~-+Xh&IE#kw+54}?iUVZBCRzd-BI}h7A76e0ykLCD ztW%q31euyy&Q<=OzXw?r@$`s^6LaoYzKy2w-UIx0ujlj7o_+cZ*VfjiX6?P}9sspr zi6n&gXo@MS?ldh(wX8zT7F6oU- zvgqX2>baaiS3X5*n13k|xpkaAX5mv^ZR9*Eh~Sq+@9pf2`%$Z7@O7GQ0hMKrF|C(* zyiw^WkZasF4=6kX5V)P_y=nXH>?QSqFF;ry0Ch1<;i}4|qtDTPN~0ad40EuPijm7d zDOf4tloF%Cs~+Vxm?A!<;BA~bxg^SW2j^TQF@JN7VnqdQLuXM+uIau>gXMrC9Yx6> z0L%%BT|Z&|e7qo%th}UMB$vpxEbDf=Rv!{E=QvVmE)f49D*|BKgsWNt_*lSHIx`^} z$|g*kUc=>pG9Z`Y_9%c4JO2vjX>M)CM`z1HE5D-%6CDoKxMXqxOtZ4y2oy{h>C>1a zrS7bguc+x+079|AD)%INio-RK^X))-KZUU#B#|&&R|gHymVf>~#ftsE!_WPH_fBft Zlg^ZT?_Oc9oUb}>&cbg)X0Q6`{{S1uC2Ifx literal 43088 zcmeFZcT|+w`Zb6c8w}m8fDufX5KsXTB$!YE5hRKvGeS|I z3PlA)MafVk1tcfQv1Xr_?%(QfW_@eT{5A8(^jh~`Z(H@&c~5wr{p`J;b3^0!kwrW! zdAPW^7AYS+q{+oKdy{|N^);4BVmJ(vpVp7}JUb3~lY$Gc!PXC_|h*?>iiuZ?v=;I;3T|TOB!^I`Gf&6Ed zV}znT7gtn{@}d3OjzL{@4z_&d)6@N?fBOAye$?alb%XWcTi0J*uXJ<$JU+g6JSVw$ zjVE*tZ9jTq8881$_x)W*m(KeB=dAtv?$+O0_S?F3o`3z7GB)*Ee8c_2$F2Pie#thW z1z#8rl6O&9n(om5sjK?jqewIIj$B-hd_w91)StLⅇ%(KY0kO@0(5j(CD=QFOPp5 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 0", "ori(Sum(balances[...])) == 5000000000000000000000000", "ori(Sum(balances[...])) one of [5000000000000000000000000]", "msg.value == 0", "msg.value one of [0]", + "ori(totalSupply_) > 0", "ori(totalSupply_) == 5000000000000000000000000", "ori(totalSupply_) one of [5000000000000000000000000]", "ori(unfrozen) == false", @@ -106,8 +108,10 @@ "msg.sender == ori(owner)" ], "postconditions": [ + "Sum(balances[...]) > 0", "Sum(balances[...]) == 5000000000000000000000000", "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ > 0", "totalSupply_ == 5000000000000000000000000", "totalSupply_ one of [5000000000000000000000000]", "unfrozen == true", @@ -116,6 +120,8 @@ "Sum(balances[...]) == ori(Sum(balances[...]))", "msg.sender == owner", "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_", "unfrozen != ori(unfrozen)", "ori(owner) == owner" ], @@ -175,18 +181,22 @@ "msg.sender != 0", "_value > 0", "_to != 0", + "ori(Sum(balances[...])) > 0", "ori(Sum(balances[...])) == 5000000000000000000000000", "ori(Sum(balances[...])) one of [5000000000000000000000000]", "msg.value == 0", "msg.value one of [0]", + "ori(totalSupply_) > 0", "ori(totalSupply_) == 5000000000000000000000000", "ori(totalSupply_) one of [5000000000000000000000000]", "ori(unfrozen) == true", "ori(owner) != 0" ], "postconditions": [ + "Sum(balances[...]) > 0", "Sum(balances[...]) == 5000000000000000000000000", "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ > 0", "totalSupply_ == 5000000000000000000000000", "totalSupply_ one of [5000000000000000000000000]", "unfrozen == true", @@ -194,6 +204,8 @@ "owner != 0", "Sum(balances[...]) == ori(Sum(balances[...]))", "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_", "unfrozen == ori(unfrozen)", "ori(owner) == owner" ], @@ -268,16 +280,20 @@ "type": "PptType.CONTRACT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(Sum(balances[...])) > 0", "ori(Sum(balances[...])) == 5000000000000000000000000", "ori(Sum(balances[...])) one of [5000000000000000000000000]", + "ori(totalSupply_) > 0", "ori(totalSupply_) == 5000000000000000000000000", "ori(totalSupply_) one of [5000000000000000000000000]", "ori(owner) != 0", "ori(Sum(balances[...])) == ori(totalSupply_)" ], "postconditions": [ + "Sum(balances[...]) > 0", "Sum(balances[...]) == 5000000000000000000000000", "Sum(balances[...]) one of [5000000000000000000000000]", + "totalSupply_ > 0", "totalSupply_ == 5000000000000000000000000", "totalSupply_ one of [5000000000000000000000000]", "unfrozen == true", @@ -288,6 +304,8 @@ "Sum(balances[...]) == totalSupply_", "ori(Sum(balances[...])) == totalSupply_", "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_", "ori(owner) == owner" ], "falsified_preconditions": [], diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b.json new file mode 100644 index 0000000..0ff8f1e --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b.json @@ -0,0 +1,279 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_paused) == false", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000", + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "to != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000", + "ori(_totalSupply) one of [10000000000000000000000000000]" + ], + "postconditions": [ + "_paused == false", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000", + "Sum(_balances[...]) one of [10000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "elem of _balances[...] is one of [10000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000", + "_totalSupply one of [10000000000000000000000000000]", + "_paused == ori(_paused)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "_totalSupply == ori(_totalSupply)" + ], + "falsified_preconditions": [ + "value > 0" + ], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000", + "ori(_totalSupply) one of [10000000000000000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000", + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_paused) == false", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000", + "Sum(_balances[...]) one of [10000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_paused == false", + "elem of _balances[...] is one of [10000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000", + "_totalSupply one of [10000000000000000000000000000]", + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "_decimals == ori(_decimals)", + "_paused == ori(_paused)", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) == _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1.json new file mode 100644 index 0000000..5e1be96 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1.json @@ -0,0 +1,236 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000000000000]", + "msg.sender != 0", + "spender != 0", + "ori(Sum(allowed[msg.sender][...])) == 0", + "ori(Sum(allowed[msg.sender][...])) one of [0]", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "ori(Sum(allowed[msg.sender][...])) != tokens", + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])", + "tokens > ori(allowed[msg.sender][spender])", + "tokens != ori(allowed[msg.sender][spender])" + ], + "postconditions": [ + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of balances[...] is one of [1000000000000000000000000000]", + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000", + "Sum(balances[...]) one of [1000000000000000000000000000]", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(Sum(allowed[msg.sender][...])) != allowed[msg.sender][spender]", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] == tokens", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "Sum(allowed[msg.sender][...]) == tokens", + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000000000000]", + "msg.sender != 0", + "to != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]", + "ori(balances[msg.sender]) > 0", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) != tokens", + "ori(balances[to]) != ori(balances[msg.sender])", + "ori(balances[msg.sender]) >= tokens" + ], + "postconditions": [ + "elem of balances[...] is one of [1000000000000000000000000000]", + "balances[to] > 0", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000", + "Sum(balances[...]) one of [1000000000000000000000000000]", + "ori(Sum(balances[...])) != balances[to]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "balances[to] != ori(balances[to])", + "balances[to] >= tokens", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "ori(balances[msg.sender]) <= Sum(balances[...])", + "tokens < Sum(balances[...])", + "tokens != Sum(balances[...])", + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[to]) <= ori(balances[msg.sender])", + "ori(balances[to]) < ori(balances[msg.sender])", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[to]) != tokens", + "ori(balances[msg.sender]) > tokens", + "ori(balances[msg.sender]) != tokens" + ], + "falsified_postconditions": [ + "balances[msg.sender] > 0", + "balances[to] <= ori(balances[msg.sender])", + "balances[to] < ori(balances[msg.sender])", + "balances[to] != ori(balances[msg.sender])", + "balances[to] == tokens", + "balances[to] <= tokens", + "balances[to] <= balances[msg.sender]", + "balances[to] < balances[msg.sender]", + "balances[to] != balances[msg.sender]", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[to]) < balances[msg.sender]", + "ori(balances[to]) != balances[msg.sender]", + "tokens <= balances[msg.sender]", + "tokens < balances[msg.sender]", + "tokens != balances[msg.sender]" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "elem of balances[...] is one of [1000000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000", + "Sum(balances[...]) one of [1000000000000000000000000000]", + "decimals == ori(decimals)", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "_totalSupply == ori(_totalSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8.json new file mode 100644 index 0000000..1a363af --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x37a15c92e67686aa268df03d4c881a76340907e8.json @@ -0,0 +1,228 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "ori(decimals) == 0", + "ori(decimals) one of [0]", + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "ori(Sum(allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000", + "ori(_totalSupply) one of [10000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000", + "ori(Sum(balances[...])) one of [10000000]", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "msg.sender != 0", + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) != tokens", + "ori(Sum(allowed[msg.sender][...])) <= tokens" + ], + "postconditions": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of balances[...] is one of [10000000]", + "elem of allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]", + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "decimals == 0", + "decimals one of [0]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000", + "Sum(balances[...]) one of [10000000]", + "_totalSupply > 0", + "_totalSupply == 10000000", + "_totalSupply one of [10000000]", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] == tokens", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "Sum(allowed[msg.sender][...]) >= tokens" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) == 0", + "ori(decimals) one of [0]", + "ori(balances[msg.sender]) > 0", + "to != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000", + "ori(_totalSupply) one of [10000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000", + "ori(Sum(balances[...])) one of [10000000]", + "msg.value == 0", + "msg.value one of [0]", + "tokens > 0", + "msg.sender != 0", + "ori(balances[msg.sender]) <= ori(Sum(balances[...]))", + "ori(balances[msg.sender]) != ori(balances[to])", + "ori(balances[msg.sender]) >= tokens", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) != tokens" + ], + "postconditions": [ + "elem of balances[...] is one of [10000000]", + "balances[to] > 0", + "decimals == 0", + "decimals one of [0]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000", + "Sum(balances[...]) one of [10000000]", + "_totalSupply > 0", + "_totalSupply == 10000000", + "_totalSupply one of [10000000]", + "balances[to] < ori(Sum(balances[...]))", + "balances[to] != ori(Sum(balances[...]))", + "balances[to] != ori(balances[to])", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])", + "balances[to] >= tokens", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "ori(balances[msg.sender]) <= Sum(balances[...])", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(Sum(balances[...])) != balances[msg.sender]", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "Sum(balances[...]) != tokens", + "Sum(balances[...]) != balances[msg.sender]", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[msg.sender]) >= ori(balances[to])", + "ori(balances[msg.sender]) > ori(balances[to])", + "ori(balances[msg.sender]) > tokens", + "ori(balances[msg.sender]) != tokens", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[to]) != tokens" + ], + "falsified_postconditions": [ + "balances[msg.sender] > 0", + "balances[to] <= ori(balances[msg.sender])", + "balances[to] < ori(balances[msg.sender])", + "balances[to] != ori(balances[msg.sender])", + "balances[to] == tokens", + "balances[to] <= tokens", + "balances[to] <= balances[msg.sender]", + "balances[to] < balances[msg.sender]", + "balances[to] != balances[msg.sender]", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[to]) < balances[msg.sender]", + "ori(balances[to]) != balances[msg.sender]", + "tokens <= balances[msg.sender]", + "tokens < balances[msg.sender]", + "tokens != balances[msg.sender]" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) == 0", + "ori(decimals) one of [0]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000", + "ori(Sum(balances[...])) one of [10000000]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000", + "ori(_totalSupply) one of [10000000]" + ], + "postconditions": [ + "elem of balances[...] is one of [10000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000", + "Sum(balances[...]) one of [10000000]", + "decimals == 0", + "decimals one of [0]", + "_totalSupply > 0", + "_totalSupply == 10000000", + "_totalSupply one of [10000000]", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf.json new file mode 100644 index 0000000..a2f075e --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf.json @@ -0,0 +1,279 @@ +[ + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "ori(_balances[account]) one of [0,200000000,40000000200000000,20000000200000000]", + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]", + "msg.value == 0", + "msg.value one of [0]", + "account != 0", + "amount > 0", + "amount one of [200000000,20000000000000000,200000000000000000000000000]", + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]", + "ori(_balances[account]) <= ori(Sum(_balances[...]))", + "ori(_balances[account]) <= ori(_totalSupply)", + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [200000000]", + "elem of _balances[...] is one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]", + "_balances[account] > 0", + "_balances[account] one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "_totalSupply > 0", + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "_balances[account] <= Sum(_balances[...])", + "_balances[account] != ori(_balances[account])", + "_balances[account] != ori(Sum(_balances[...]))", + "_balances[account] <= _totalSupply", + "_balances[account] != ori(_totalSupply)", + "Sum(_balances[...]) != ori(_balances[account])", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) != ori(_totalSupply)", + "ori(_balances[account]) != _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply", + "_totalSupply != ori(_totalSupply)" + ], + "falsified_preconditions": [ + "ori(_balances[account]) == ori(Sum(_balances[...]))", + "ori(_balances[account]) >= ori(Sum(_balances[...]))", + "ori(_balances[account]) == ori(_totalSupply)", + "ori(_balances[account]) >= ori(_totalSupply)" + ], + "falsified_postconditions": [ + "_balances[account] == Sum(_balances[...])", + "_balances[account] >= Sum(_balances[...])", + "_balances[account] >= ori(Sum(_balances[...]))", + "_balances[account] > ori(Sum(_balances[...]))", + "_balances[account] == _totalSupply", + "_balances[account] >= _totalSupply", + "_balances[account] >= ori(_totalSupply)", + "_balances[account] > ori(_totalSupply)" + ] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_balances[recipient]) one of [0,5000000000000000000,100000000000000000000000,100000000000000000000,200000000000000000000000,5872550000000000000000,200000000000000000000,55000000000000000000]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 400000000040000000200000000", + "ori(Sum(_balances[...])) one of [400000000040000000200000000]", + "msg.value == 0", + "msg.value one of [0]", + "amount > 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 400000000040000000200000000", + "ori(_totalSupply) one of [400000000040000000200000000]", + "recipient != 0", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "postconditions": [ + "elem of _balances[...] is one of [400000000040000000200000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 400000000040000000200000000", + "Sum(_balances[...]) one of [400000000040000000200000000]", + "_totalSupply > 0", + "_totalSupply == 400000000040000000200000000", + "_totalSupply one of [400000000040000000200000000]", + "_balances[recipient] > 0", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])", + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) != _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]", + "_totalSupply == ori(_totalSupply)" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0" + ], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]", + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]", + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [200000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "_totalSupply > 0", + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= _totalSupply", + "_totalSupply >= ori(_totalSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "ori(Sum(_balances[...])) < _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07.json new file mode 100644 index 0000000..a14b8a9 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x4d5d3170f407cacaaa328660c2ee2499055e3b07.json @@ -0,0 +1,174 @@ +[ + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(_spender,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(_from,_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "_to != 0", + "_value > 0", + "msg.sender != 0", + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000", + "ori(Sum(balanceOf[...])) one of [100000000000000]", + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000", + "ori(totalSupply) one of [100000000000000]", + "ori(balanceOf[msg.sender]) > 0", + "ori(decimals) > 0", + "ori(decimals) == 6", + "ori(decimals) one of [6]", + "ori(balanceOf[_to]) < ori(Sum(balanceOf[...]))", + "ori(balanceOf[_to]) != ori(Sum(balanceOf[...]))", + "_value != ori(Sum(balanceOf[...]))", + "_value <= ori(balanceOf[msg.sender])", + "ori(Sum(balanceOf[...])) >= ori(balanceOf[msg.sender])" + ], + "postconditions": [ + "elem of balanceOf[...] is one of [100000000000000]", + "totalSupply > 0", + "totalSupply == 100000000000000", + "totalSupply one of [100000000000000]", + "balanceOf[_to] > 0", + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000", + "Sum(balanceOf[...]) one of [100000000000000]", + "decimals > 0", + "decimals == 6", + "decimals one of [6]", + "ori(balanceOf[_to]) <= balanceOf[_to]", + "ori(balanceOf[_to]) < Sum(balanceOf[...])", + "ori(balanceOf[_to]) != Sum(balanceOf[...])", + "balanceOf[msg.sender] != _value", + "balanceOf[msg.sender] < Sum(balanceOf[...])", + "balanceOf[msg.sender] != Sum(balanceOf[...])", + "balanceOf[msg.sender] < ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] != ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] <= ori(balanceOf[msg.sender])", + "totalSupply == ori(totalSupply)", + "_value <= balanceOf[_to]", + "_value != Sum(balanceOf[...])", + "balanceOf[_to] < Sum(balanceOf[...])", + "balanceOf[_to] != Sum(balanceOf[...])", + "balanceOf[_to] < ori(Sum(balanceOf[...]))", + "balanceOf[_to] != ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) >= ori(balanceOf[msg.sender])", + "decimals == ori(decimals)" + ], + "falsified_preconditions": [ + "ori(balanceOf[_to]) == 0", + "ori(balanceOf[_to]) <= _value", + "ori(balanceOf[_to]) < _value", + "ori(balanceOf[_to]) != _value", + "ori(balanceOf[_to]) <= ori(balanceOf[msg.sender])", + "ori(balanceOf[_to]) < ori(balanceOf[msg.sender])", + "ori(balanceOf[_to]) != ori(balanceOf[msg.sender])", + "_value < ori(balanceOf[msg.sender])", + "_value != ori(balanceOf[msg.sender])" + ], + "falsified_postconditions": [ + "balanceOf[msg.sender] > 0", + "ori(balanceOf[_to]) <= balanceOf[msg.sender]", + "ori(balanceOf[_to]) < balanceOf[msg.sender]", + "ori(balanceOf[_to]) != balanceOf[msg.sender]", + "ori(balanceOf[_to]) < balanceOf[_to]", + "ori(balanceOf[_to]) != balanceOf[_to]", + "balanceOf[msg.sender] >= _value", + "balanceOf[msg.sender] > _value", + "balanceOf[msg.sender] >= balanceOf[_to]", + "balanceOf[msg.sender] > balanceOf[_to]", + "balanceOf[msg.sender] != balanceOf[_to]", + "balanceOf[msg.sender] < ori(balanceOf[msg.sender])", + "balanceOf[msg.sender] != ori(balanceOf[msg.sender])", + "_value == balanceOf[_to]", + "_value >= balanceOf[_to]", + "balanceOf[_to] <= ori(balanceOf[msg.sender])", + "balanceOf[_to] < ori(balanceOf[msg.sender])", + "balanceOf[_to] != ori(balanceOf[msg.sender])", + "balanceOf[_to] - _value == ori(balanceOf[_to])", + "ori(balanceOf[msg.sender]) - _value == balanceOf[msg.sender]" + ] + }, + { + "func": "transfer(_to,_value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000", + "ori(totalSupply) one of [100000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 6", + "ori(decimals) one of [6]", + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000", + "ori(Sum(balanceOf[...])) one of [100000000000000]" + ], + "postconditions": [ + "elem of balanceOf[...] is one of [100000000000000]", + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000", + "Sum(balanceOf[...]) one of [100000000000000]", + "decimals > 0", + "decimals == 6", + "decimals one of [6]", + "totalSupply > 0", + "totalSupply == 100000000000000", + "totalSupply one of [100000000000000]", + "ori(totalSupply) == totalSupply", + "ori(totalSupply) >= totalSupply", + "ori(totalSupply) <= totalSupply", + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))", + "decimals == ori(decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a.json new file mode 100644 index 0000000..167e04c --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x6f2a550259532f7429530dcb93d86269629e3f2a.json @@ -0,0 +1,282 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000", + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]", + "msg.sender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_allowances[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000", + "ori(_totalSupply) one of [4000000000000000000000000000]", + "spender != msg.sender", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])", + "value >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ], + "postconditions": [ + "elem of _balances[...] is one of [4000000000000000000000000000]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000", + "_totalSupply one of [4000000000000000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000", + "Sum(_balances[...]) one of [4000000000000000000000000000]", + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "elem of _allowances[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]", + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "value <= Sum(_allowances[msg.sender][...])", + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))", + "_totalSupply == ori(_totalSupply)", + "_allowances[msg.sender][spender] >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_balances[msg.sender]) > 0", + "amount > 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000", + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]", + "recipient != 0", + "msg.sender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000", + "ori(_totalSupply) one of [4000000000000000000000000000]", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "postconditions": [ + "elem of _balances[...] is one of [4000000000000000000000000000]", + "_balances[recipient] > 0", + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000", + "_totalSupply one of [4000000000000000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000", + "Sum(_balances[...]) one of [4000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) != _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_balances[recipient] < Sum(_balances[...])", + "_balances[recipient] != Sum(_balances[...])", + "_balances[recipient] >= ori(_balances[recipient])", + "_totalSupply == ori(_totalSupply)", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "Sum(_balances[...]) != ori(_balances[recipient])", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0", + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])", + "recipient != msg.sender" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "ori(_balances[msg.sender]) >= _balances[recipient]", + "ori(_balances[msg.sender]) > _balances[recipient]", + "ori(_balances[msg.sender]) != _balances[recipient]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "_balances[recipient] <= _balances[msg.sender]", + "_balances[recipient] < _balances[msg.sender]", + "_balances[recipient] != _balances[msg.sender]", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])", + "_balances[msg.sender] >= ori(_balances[recipient])", + "_balances[msg.sender] > ori(_balances[recipient])", + "_balances[msg.sender] != ori(_balances[recipient])" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000", + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000", + "ori(_totalSupply) one of [4000000000000000000000000000]", + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [4000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000", + "_totalSupply one of [4000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000", + "Sum(_balances[...]) one of [4000000000000000000000000000]", + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_totalSupply == ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54.json new file mode 100644 index 0000000..921b704 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x8b68591fe802585a9713bd6ebe75d6c285236c54.json @@ -0,0 +1,407 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_allowed[msg.sender][spender]) == 0", + "ori(_allowed[msg.sender][spender]) one of [0]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "msg.sender != 0", + "ori(Sum(_allowed[msg.sender][...])) == 0", + "ori(Sum(_allowed[msg.sender][...])) one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "spender != 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(_allowed[msg.sender][spender]) != value", + "ori(_allowed[msg.sender][spender]) == ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) >= ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))", + "value > ori(Sum(_allowed[msg.sender][...]))", + "value != ori(Sum(_allowed[msg.sender][...]))" + ], + "postconditions": [ + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_allowed[msg.sender][...]) > 0", + "Sum(_allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(_allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]", + "elem of _balances[...] is one of [993060750000000000000000000000]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_allowed[msg.sender][spender] != ori(_allowed[msg.sender][spender])", + "_allowed[msg.sender][spender] == value", + "_allowed[msg.sender][spender] == Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] >= Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] <= Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] > ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] != ori(Sum(_allowed[msg.sender][...]))", + "_totalSupply == ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "value == Sum(_allowed[msg.sender][...])", + "value >= Sum(_allowed[msg.sender][...])", + "value <= Sum(_allowed[msg.sender][...])", + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "_lastTokenSupply == ori(_lastTokenSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_balances[msg.sender]) > 0", + "value > 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(_balances[to]) one of [0,1485000000000000000000000000,4950000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "to != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_balances[msg.sender]) >= value", + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_balances[to])", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))", + "value != ori(_balances[to])", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_totalSupply) > ori(_balances[to])", + "ori(_totalSupply) != ori(_balances[to])", + "ori(Sum(_balances[...])) != ori(_balances[to])" + ], + "postconditions": [ + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [993732500000000000000000000000]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_balances[to] > 0", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply != value", + "_totalSupply != ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]", + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])", + "_burnStopAmount == ori(_burnStopAmount)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]", + "value < Sum(_balances[...])", + "value != Sum(_balances[...])", + "value != _balances[msg.sender]", + "value != _balances[to]", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", + "ori(_totalSupply) > _balances[to]", + "ori(_totalSupply) != _balances[to]", + "Sum(_balances[...]) != _balances[msg.sender]", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) != _balances[to]", + "Sum(_balances[...]) != ori(_balances[to])", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "_balances[msg.sender] != _balances[to]", + "_balances[msg.sender] >= ori(_balances[to])", + "ori(Sum(_balances[...])) != _balances[to]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_balances[to] != ori(_balances[to])", + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(_balances[to]) == 0", + "ori(_balances[msg.sender]) > value", + "ori(_balances[msg.sender]) != value", + "value >= ori(_balances[to])", + "value > ori(_balances[to])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "value <= _balances[msg.sender]", + "value < _balances[msg.sender]", + "value >= _balances[to]", + "value > _balances[to]", + "_balances[msg.sender] >= _balances[to]", + "_balances[msg.sender] > _balances[to]", + "_balances[msg.sender] > ori(_balances[to])", + "_balances[msg.sender] != ori(_balances[to])" + ] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [993732500000000000000000000000]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply <= ori(Sum(_balances[...]))", + "_burnStopAmount == ori(_burnStopAmount)", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_totalSupply) >= Sum(_balances[...])", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "_lastTokenSupply == ori(_lastTokenSupply)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8.json new file mode 100644 index 0000000..cdb86d4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x923f3fe77732ec3fc5327eb52327b06be4e472f8.json @@ -0,0 +1,430 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFrom(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFrom(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "claimOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceOwnership()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(paused) == false", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000", + "ori(_totalSupply) one of [3000000000000000000000000000]", + "recipient != 0", + "amount > 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000", + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]", + "ori(_owner) != 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_balances[msg.sender]) > 0", + "msg.sender != 0", + "ori(_pendingowner) == 0", + "ori(Sum(_locked_balances[...])) == 0", + "ori(Sum(_locked_balances[...])) one of [0]", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))", + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])" + ], + "postconditions": [ + "elem of _locked_balances[...] is one of [0]", + "elem of _locked_balances[...] is one of []", + "Sum(_locked_balances[...]) == 0", + "Sum(_locked_balances[...]) one of [0]", + "_balances[recipient] > 0", + "_owner != 0", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000", + "_totalSupply one of [3000000000000000000000000000]", + "elem of _balances[...] is one of [3000000000000000000000000000]", + "paused == false", + "_pendingowner == 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000", + "Sum(_balances[...]) one of [3000000000000000000000000000]", + "ori(paused) == paused", + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] <= ori(Sum(_balances[...]))", + "_balances[recipient] <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_owner == ori(_owner)", + "_decimals == ori(_decimals)", + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_pendingowner) == _pendingowner" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) <= ori(_balances[msg.sender])" + ], + "falsified_postconditions": [ + "_balances[recipient] <= ori(_balances[msg.sender])", + "ori(_balances[recipient]) <= _balances[msg.sender]" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFromLocked(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "collectFromLocked(addresses,amounts,recipient)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockTokenWhole(addresses)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockTokenWhole(addresses)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unlockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unlockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "lockToken(addresses,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(paused) == false", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000", + "ori(_totalSupply) one of [3000000000000000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000", + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]", + "ori(_owner) != 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(Sum(_locked_balances[...])) == 0", + "ori(Sum(_locked_balances[...])) one of [0]", + "ori(_pendingowner) == 0", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(Sum(_balances[...])) != ori(Sum(_locked_balances[...]))", + "ori(_owner) != ori(_pendingowner)" + ], + "postconditions": [ + "elem of _locked_balances[...] is one of [0]", + "elem of _locked_balances[...] is one of []", + "Sum(_locked_balances[...]) == 0", + "Sum(_locked_balances[...]) one of [0]", + "_owner != 0", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000", + "Sum(_balances[...]) one of [3000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000", + "_totalSupply one of [3000000000000000000000000000]", + "elem of _balances[...] is one of [3000000000000000000000000000]", + "paused == false", + "_pendingowner == 0", + "ori(paused) == paused", + "Sum(_locked_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) < Sum(_balances[...])", + "Sum(_locked_balances[...]) != Sum(_balances[...])", + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) == _totalSupply", + "_owner == ori(_owner)", + "_owner != _pendingowner", + "_owner != ori(_pendingowner)", + "_decimals == ori(_decimals)", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) != ori(Sum(_locked_balances[...]))", + "ori(_owner) != _pendingowner", + "_pendingowner == ori(_pendingowner)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42.json new file mode 100644 index 0000000..02acc28 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42.json @@ -0,0 +1,286 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "unpause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renouncePauser()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addPauser(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "pause()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000", + "ori(_totalSupply) one of [1000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 5", + "ori(_decimals) one of [5]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000", + "ori(Sum(_balances[...])) one of [1000000000000000]", + "to != 0", + "ori(_paused) == false", + "value > 0", + "msg.sender != 0" + ], + "postconditions": [ + "_decimals > 0", + "_decimals == 5", + "_decimals one of [5]", + "_paused == false", + "elem of _balances[...] is one of [1000000000000000]", + "_totalSupply > 0", + "_totalSupply == 1000000000000000", + "_totalSupply one of [1000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000", + "Sum(_balances[...]) one of [1000000000000000]", + "_decimals == ori(_decimals)", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_paused == ori(_paused)", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_paused) == false", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000", + "ori(_totalSupply) one of [1000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000", + "ori(Sum(_balances[...])) one of [1000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 5", + "ori(_decimals) one of [5]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000", + "_totalSupply one of [1000000000000000]", + "elem of _balances[...] is one of [1000000000000000]", + "_decimals > 0", + "_decimals == 5", + "_decimals one of [5]", + "_paused == false", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000", + "Sum(_balances[...]) one of [1000000000000000]", + "_totalSupply == ori(_totalSupply)", + "_totalSupply == ori(Sum(_balances[...]))", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "ori(_paused) == _paused", + "_decimals == ori(_decimals)", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7.json new file mode 100644 index 0000000..a4c5fd1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xb2923909b5d8bbe01505121f15a4503b6617dae7.json @@ -0,0 +1,197 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "destroySmartContract(_to)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "destroySmartContract(_to)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.sender != 0", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000", + "ori(Sum(balances[...])) one of [7000000000000000000000000]", + "ori(balances[to]) one of [0,124700000000000000000000,374700000000000000000000,437200000000000000000000,499700000000000000000000,749700000000000000000000]", + "to != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000", + "ori(_totalSupply) one of [7000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(balances[msg.sender]) > 0", + "ori(owner) != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "tokens > 0", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) != tokens", + "ori(balances[to]) != ori(balances[msg.sender])", + "ori(balances[to]) != tokens", + "ori(balances[msg.sender]) >= tokens" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000", + "_totalSupply one of [7000000000000000000000000]", + "owner != 0", + "elem of balances[...] is one of [7000000000000000000000000]", + "balances[to] > 0", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000", + "Sum(balances[...]) one of [7000000000000000000000000]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "ori(Sum(balances[...])) != balances[to]", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(balances[to]) != balances[msg.sender]", + "ori(balances[to]) < balances[to]", + "ori(balances[to]) != balances[to]", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "balances[msg.sender] != ori(balances[msg.sender])", + "balances[msg.sender] != balances[to]", + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])", + "decimals == ori(decimals)", + "_totalSupply == ori(_totalSupply)", + "ori(balances[msg.sender]) != balances[to]", + "ori(balances[msg.sender]) <= Sum(balances[...])", + "owner == ori(owner)", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])", + "balances[to] >= tokens", + "Sum(balances[...]) != tokens", + "tokens + ori(balances[to]) == balances[to]", + "tokens + balances[msg.sender] == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[to]) <= ori(balances[msg.sender])", + "ori(balances[to]) < ori(balances[msg.sender])", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[msg.sender]) > tokens", + "ori(balances[msg.sender]) != tokens" + ], + "falsified_postconditions": [ + "balances[msg.sender] > 0", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[to]) < balances[msg.sender]", + "balances[msg.sender] >= balances[to]", + "balances[msg.sender] > balances[to]", + "balances[msg.sender] >= tokens", + "balances[msg.sender] > tokens", + "balances[msg.sender] != tokens", + "ori(balances[msg.sender]) >= balances[to]", + "ori(balances[msg.sender]) > balances[to]", + "balances[to] == tokens", + "balances[to] <= tokens" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000", + "ori(_totalSupply) one of [7000000000000000000000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000", + "ori(Sum(balances[...])) one of [7000000000000000000000000]", + "ori(owner) != 0" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000", + "_totalSupply one of [7000000000000000000000000]", + "owner != 0", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000", + "Sum(balances[...]) one of [7000000000000000000000000]", + "elem of balances[...] is one of [7000000000000000000000000]", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "_totalSupply == ori(_totalSupply)", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(owner) == owner" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca.json new file mode 100644 index 0000000..0504629 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca.json @@ -0,0 +1,654 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) one of [1500000000000000000000000,720000000000000000000000000]", + "ori(_allowed[msg.sender][spender]) == 0", + "ori(_allowed[msg.sender][spender]) one of [0]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]", + "ori(Sum(_allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]", + "ori(_allowed[msg.sender][spender]) != value", + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))", + "value >= ori(Sum(_allowed[msg.sender][...]))" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_allowed[msg.sender][...]) > 0", + "Sum(_allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]", + "elem of _balances[...] is one of [997200000000000000000000000]", + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount one of [1500000000000000000000000,720000000000000000000000000]", + "elem of _allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]", + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) < _allowed[msg.sender][spender]", + "ori(_allowed[msg.sender][spender]) != _allowed[msg.sender][spender]", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "Sum(_allowed[msg.sender][...]) >= _allowed[msg.sender][spender]", + "Sum(_allowed[msg.sender][...]) >= value", + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] == value", + "_allowed[msg.sender][spender] >= ori(Sum(_allowed[msg.sender][...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_totalSupply == ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addToBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "account != 0", + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 1500000000000000000000000", + "ori(maxTxAmount) one of [1500000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000", + "ori(_totalSupply) one of [1000000000000000000000000000]", + "ori(_isBlackListed[account]) == false", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000000000000000", + "ori(Sum(_balances[...])) one of [1000000000000000000000000000]", + "msg.sender == ori(currentOwner)" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000000000000000", + "Sum(_balances[...]) one of [1000000000000000000000000000]", + "elem of _balances[...] is one of [1000000000000000000000000000]", + "currentOwner != 0", + "_isBlackListed[account] == true", + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000", + "_totalSupply one of [1000000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount == 1500000000000000000000000", + "maxTxAmount one of [1500000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "msg.sender == currentOwner", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_isBlackListed[account] != ori(_isBlackListed[account])", + "_totalSupply == ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addToBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeFromBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "removeFromBlackList(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 300000000000000000000000000", + "ori(maxTxAmount) one of [300000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_balances[to]) == 0", + "ori(_balances[to]) one of [0]", + "ori(_balances[msg.sender]) > 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "value > 0", + "value one of [10000000000000000000000000,3000000000000000000000000,7000000000000000000000000]", + "ori(_totalSupply) > 0", + "msg.value == 0", + "msg.value one of [0]", + "to != 0", + "ori(Sum(_balances[...])) > 0", + "ori(maxTxAmount) > ori(_balances[to])", + "ori(maxTxAmount) != ori(_balances[to])", + "ori(maxTxAmount) < ori(_balances[msg.sender])", + "ori(maxTxAmount) != ori(_balances[msg.sender])", + "ori(maxTxAmount) != value", + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)", + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))", + "msg.sender != to", + "ori(_balances[to]) < ori(_balances[msg.sender])", + "ori(_balances[to]) != ori(_balances[msg.sender])", + "ori(_balances[to]) != value", + "ori(_balances[to]) != ori(_totalSupply)", + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != value", + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "_balances[msg.sender] > 0", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [998970000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "_balances[to] > 0", + "_balances[to] one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000]", + "maxTxAmount > 0", + "maxTxAmount == 300000000000000000000000000", + "maxTxAmount one of [300000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "_balances[msg.sender] != ori(maxTxAmount)", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] != ori(_balances[to])", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] != _totalSupply", + "_balances[msg.sender] != value", + "_balances[msg.sender] != _balances[to]", + "_balances[msg.sender] != ori(_totalSupply)", + "_balances[msg.sender] != maxTxAmount", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])", + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply", + "ori(maxTxAmount) > _balances[to]", + "ori(maxTxAmount) != _balances[to]", + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) != ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[msg.sender])", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) != value", + "Sum(_balances[...]) != _balances[to]", + "Sum(_balances[...]) != ori(_totalSupply)", + "Sum(_balances[...]) != maxTxAmount", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "ori(_balances[to]) != _totalSupply", + "ori(_balances[to]) < _balances[to]", + "ori(_balances[to]) != _balances[to]", + "ori(_balances[to]) != maxTxAmount", + "ori(_balances[msg.sender]) != _totalSupply", + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]", + "ori(_balances[msg.sender]) != maxTxAmount", + "_totalSupply != value", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]", + "_totalSupply != ori(_totalSupply)", + "_totalSupply != maxTxAmount", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "_burnStopAmount == ori(_burnStopAmount)", + "value > _balances[to]", + "value != _balances[to]", + "value < maxTxAmount", + "value != maxTxAmount", + "_balances[to] != ori(_totalSupply)", + "_balances[to] != maxTxAmount", + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))", + "ori(_totalSupply) != maxTxAmount", + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))", + "value + _balances[msg.sender] == ori(_balances[msg.sender])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMaxTxAmount(theAmount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "msg.sender != 0", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "theAmount > 0", + "theAmount one of [300000000,720000000,1500000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]", + "msg.sender == ori(currentOwner)" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]", + "elem of _balances[...] is one of [997200000000000000000000000]", + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "ori(maxTxAmount) != maxTxAmount", + "msg.sender == currentOwner", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_totalSupply == ori(_totalSupply)", + "_burnStopAmount == ori(_burnStopAmount)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "setMaxTxAmount(theAmount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferOwnership(newOwner)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000", + "ori(_lastTokenSupply) one of [200000000000000000000000]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(currentOwner) != 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)", + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000", + "_lastTokenSupply one of [200000000000000000000000]", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [998970000000000000000000000]", + "currentOwner != 0", + "_totalSupply > 0", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "maxTxAmount > 0", + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_lastTokenSupply == ori(_lastTokenSupply)", + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])", + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply", + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) != maxTxAmount", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "ori(currentOwner) == currentOwner", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply != maxTxAmount", + "_totalSupply <= ori(Sum(_balances[...]))", + "_burnStopAmount == ori(_burnStopAmount)", + "ori(_totalSupply) != maxTxAmount", + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount", + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply == ori(Sum(_balances[...]))", + "_totalSupply >= ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xc382e04099a435439725bb40647e2b32dc136806.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xc382e04099a435439725bb40647e2b32dc136806.json new file mode 100644 index 0000000..5c8e14a --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xc382e04099a435439725bb40647e2b32dc136806.json @@ -0,0 +1,277 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000", + "ori(_totalSupply) one of [100000000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]", + "ori(Sum(_allowances[msg.sender][...])) == 0", + "ori(Sum(_allowances[msg.sender][...])) one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "spender != msg.sender", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])", + "value > ori(Sum(_allowances[msg.sender][...]))", + "value != ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) == ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ], + "postconditions": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]", + "elem of _balances[...] is one of [0,15000000000000000000000000000000,30000000000000000000000000000000,500000000000000000000000000000,200000000000000000000000000000,20000000000000000000000000000000,2605000000000000000000000000000,10000000000000000000000000000,100000000000000000000000000000,10000000000000000000000000000000,25000000000000000000000000000]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000", + "_totalSupply one of [100000000000000000000000000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000000000000000]", + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])", + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) != ori(_allowances[msg.sender][spender])", + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) == _allowances[msg.sender][spender]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_balances[msg.sender]) > 0", + "recipient != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000", + "ori(_totalSupply) one of [100000000000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]", + "amount > 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_balances[recipient]) one of [0,20000000000000000000000000000000]", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_balances[recipient])", + "recipient != msg.sender", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "postconditions": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000", + "_totalSupply one of [100000000000000000000000000000000]", + "_balances[recipient] > 0", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000000000000000]", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "_balances[msg.sender] != _balances[recipient]", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "_balances[recipient] != ori(_balances[recipient])", + "_balances[recipient] <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0" + ], + "falsified_postconditions": [ + "_balances[msg.sender] >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) >= _balances[recipient]" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000", + "ori(_totalSupply) one of [100000000000000000000000000000000]", + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ], + "postconditions": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000", + "_totalSupply one of [100000000000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000000000000000]", + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_totalSupply == ori(_totalSupply)", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_decimals == ori(_decimals)", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079.json new file mode 100644 index 0000000..460394d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xcc494c97a5d4374ec35bda83570c461c6d6f6079.json @@ -0,0 +1,336 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "multiTransfer(receivers,amounts)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burnFrom(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "msg.value == 0", + "msg.value one of [0]", + "ori(_balances[msg.sender]) > 0", + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "to != 0", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "msg.sender != 0", + "ori(_balances[to]) one of [0,519750000000000000000,247500000000000000000000,7920000000000000000000,2549250000000000000000]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000", + "ori(_lastTokenSupply) one of [100000000000000000000000000]", + "value <= ori(_balances[msg.sender])", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_balances[to])", + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(_totalSupply)", + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000", + "_lastTokenSupply one of [100000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [101004337700000000000000000]", + "_totalSupply != value", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply <= ori(Sum(_balances[...]))", + "basePercent == ori(basePercent)", + "_lastTokenSupply == ori(_lastTokenSupply)", + "value != _balances[msg.sender]", + "value < Sum(_balances[...])", + "value != Sum(_balances[...])", + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[to]", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount", + "_decimals == ori(_decimals)", + "_balances[msg.sender] != _balances[to]", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] != ori(_totalSupply)", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "_balances[to] < Sum(_balances[...])", + "_balances[to] != Sum(_balances[...])", + "_balances[to] >= ori(_balances[to])", + "_balances[to] != ori(_totalSupply)", + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(_balances[to])", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ], + "falsified_preconditions": [ + "value > 0", + "ori(_balances[to]) == 0", + "value < ori(_balances[msg.sender])", + "value != ori(_balances[msg.sender])", + "value >= ori(_balances[to])", + "value > ori(_balances[to])", + "value != ori(_balances[to])", + "ori(_balances[msg.sender]) >= ori(_balances[to])", + "ori(_balances[msg.sender]) > ori(_balances[to])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "_balances[to] > 0", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "value <= _balances[msg.sender]", + "value < _balances[msg.sender]", + "value >= _balances[to]", + "value > _balances[to]", + "value != _balances[to]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "ori(_balances[msg.sender]) >= _balances[to]", + "ori(_balances[msg.sender]) > _balances[to]", + "_balances[msg.sender] >= _balances[to]", + "_balances[msg.sender] > _balances[to]", + "_balances[msg.sender] >= ori(_balances[to])", + "_balances[msg.sender] > ori(_balances[to])", + "_balances[msg.sender] != ori(_balances[to])", + "_balances[to] > ori(_balances[to])", + "_balances[to] != ori(_balances[to])", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "func": "transfer(to,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_burnStopAmount) == 0", + "ori(_burnStopAmount) one of [0]", + "ori(basePercent) > 0", + "ori(basePercent) == 100", + "ori(basePercent) one of [100]", + "ori(_decimals) > 0", + "ori(_decimals) == 18", + "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(Sum(_balances[...])) > 0", + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000", + "ori(_lastTokenSupply) one of [100000000000000000000000000]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "basePercent > 0", + "basePercent == 100", + "basePercent one of [100]", + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000", + "_lastTokenSupply one of [100000000000000000000000000]", + "_decimals > 0", + "_decimals == 18", + "_decimals one of [18]", + "_burnStopAmount == 0", + "_burnStopAmount one of [0]", + "Sum(_balances[...]) > 0", + "elem of _balances[...] is one of [101004337700000000000000000]", + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", + "_totalSupply <= ori(_totalSupply)", + "_totalSupply <= ori(Sum(_balances[...]))", + "basePercent == ori(basePercent)", + "_lastTokenSupply == ori(_lastTokenSupply)", + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount", + "_decimals == ori(_decimals)", + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "falsified_preconditions": [], + "falsified_postconditions": [ + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e.json new file mode 100644 index 0000000..f68ac17 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xce90d1d98b5ca16b79c7eedada2454c2564da59e.json @@ -0,0 +1,357 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "spender != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(Sum(_allowances[msg.sender][...])) == 0", + "ori(Sum(_allowances[msg.sender][...])) one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 9", + "ori(_decimals) one of [9]", + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "msg.value == 0", + "msg.value one of [0]", + "msg.sender != 0", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "spender != msg.sender", + "ori(Sum(_allowances[msg.sender][...])) != value", + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ], + "postconditions": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000]", + "elem of _balances[...] is one of [100000000000000000000]", + "elem of _balances[...] is one of [1000000000000000,3169849838330000000,39000000000000,12000000000000000,0,420000000000000,123930000000000,30000000000000,330000000000000,60000000000000,438872000000000,80050000000,208080000000000,900000000000000,50000000000,112410000000000,96800000000000000000,10000000,440544000000000,1740000000000000,750000000000000,2104500000000000,135556000000000,1124100000000000,75804000000000,410495670000000,80000000000,50000000000000,210000000000000,270050010000000,119659930000000,150000000000000,36870000000000,90000000000000,1050000000000000,1035000000000000,75000000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000", + "_totalSupply one of [100000000000000000000]", + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935", + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_decimals > 0", + "_decimals == 9", + "_decimals one of [9]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] == value", + "_allowances[msg.sender][spender] != ori(_allowances[msg.sender][spender])", + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "mint(account,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "addMinter(account)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "renounceMinter()", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "amount > 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 9", + "ori(_decimals) one of [9]", + "msg.value == 0", + "msg.value one of [0]", + "recipient != 0", + "ori(_balances[msg.sender]) > 0", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "recipient != msg.sender", + "ori(_balances[msg.sender]) != ori(_balances[recipient])", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000]", + "elem of _balances[...] is one of [100000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000", + "_totalSupply one of [100000000000000000000]", + "_balances[recipient] > 0", + "_decimals > 0", + "_decimals == 9", + "_decimals one of [9]", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] != _balances[recipient]", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "Sum(_balances[...]) >= ori(_balances[msg.sender])", + "Sum(_balances[...]) != ori(_balances[recipient])", + "Sum(_balances[...]) != _balances[recipient]", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]", + "_balances[recipient] < ori(Sum(_balances[...]))", + "_balances[recipient] != ori(Sum(_balances[...]))" + ], + "falsified_preconditions": [ + "ori(_balances[recipient]) == 0", + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])" + ], + "falsified_postconditions": [ + "_balances[msg.sender] > 0", + "_balances[msg.sender] >= ori(_balances[recipient])", + "_balances[msg.sender] > ori(_balances[recipient])", + "_balances[msg.sender] != ori(_balances[recipient])", + "_balances[msg.sender] >= _balances[recipient]", + "_balances[msg.sender] > _balances[recipient]", + "ori(_balances[msg.sender]) >= _balances[recipient]", + "ori(_balances[msg.sender]) > _balances[recipient]", + "ori(_balances[msg.sender]) != _balances[recipient]" + ] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferMinterRole(newMinter)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferMinterRole(newMinter)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9", + "ori(_decimals) one of [9]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000", + "ori(_totalSupply) one of [100000000000000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000", + "ori(Sum(_balances[...])) one of [100000000000000000000]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000", + "Sum(_balances[...]) one of [100000000000000000000]", + "elem of _balances[...] is one of [100000000000000000000]", + "_decimals > 0", + "_decimals == 9", + "_decimals one of [9]", + "_totalSupply > 0", + "_totalSupply == 100000000000000000000", + "_totalSupply one of [100000000000000000000]", + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(_balances[...])) == _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8.json new file mode 100644 index 0000000..e549f46 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8.json @@ -0,0 +1,217 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "tokens > 0", + "tokens == 1214154393080207565488897145207363713379238199016", + "tokens one of [1214154393080207565488897145207363713379238199016]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(allowed[msg.sender][...])) == 0", + "ori(Sum(allowed[msg.sender][...])) one of [0]", + "spender != 0", + "msg.sender != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000", + "ori(_totalSupply) one of [1000000000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 8", + "ori(decimals) one of [8]", + "ori(allowed[msg.sender][spender]) != tokens", + "ori(allowed[msg.sender][spender]) == ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) >= ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))", + "tokens > ori(Sum(allowed[msg.sender][...]))", + "tokens != ori(Sum(allowed[msg.sender][...]))" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000", + "_totalSupply one of [1000000000000000000]", + "elem of balances[...] is one of [1000000000000000000]", + "elem of balances[...] is one of [0,42155608000000,7827168000000,26727712000000,2364184000000,14505336000000,39866984000000,26200000000000,1991093640000000,60000000000,200000000000000,223083670000000,4856418504000000,2886756805000000,733387377300000,466343312000000,89562000000000,614258317000000,115335000000000,293365795000000,55321433000000,10100000000000,808584315377000000,67977665000000,7549993000000,3309113000000,2321935681000000,50633353000000,13500177000000,23370833000000,2100000000000,822900562000000,362332495000000,230490600000000,494315646000000,234663856000000,568993250000000,1056758701000000,955539526000000,2290247800000000,816436753000000,1500000000000000,287186755000000,35912634000000,1475154770000000,8253082000000,4196890000000,210344090000000,2581883922000000,85196714000000,408071641000000,1308507218000000,1365056466000000,907453248000000,253334180000000,1634666760000000,1650101000000000,100000000000000,3552133331000000,2147174090000000,1819394147000000,287238396000000,119538379000000,42432787000000,1905260435000000,1451707355000000,23514979000000,25595051000000,89326155000000,117578331000000,7103883000000,1900128000000,18888800000000,243285700000000,1916403000000,3298409047000000,4212424891000000,9126009837000000,1753730950000000,1498000000000000,814045727000000,1896835000000,1105069134000000,599482190000000,1740028000000,301265220000000,8596628000000,32234460000000,315772404000000,268733620000000,719812020000000,36880755700000000,310833676000000,250440116000000,2160100000000,2609636221000000,3002439449000000,3523832342000000,1600000000000000,2326235055000000,506668360000000,1933196460000000,274876741000000,10000000000,1231918352000000,42995981000000,1876942246000000,1015929560000000,2226634250000000,2454909000000,1967529221000000,252862285000000,5670605000000,355760661000000,3118813000000,562571485000000,71098725000000,100000000000,150144416000000,20100000000000,186156392000000,243145064000000,3077644954000000,1179432137000000,1375765499000000,250245012000000,2500000000000,1379680451000000,1501362421000000,34207198000000,7751278000000,809717142000000,2453660118000000,216910870000000,36701942000000,9379382000000,2443859382000000,3000000000000,511371390000000,2495907929000000,1263531812000000,1691474109000000,1169134166000000,2000000000000,5000000000,571697800000000,3563600000000,47000000000000,2741947060000000,25185204000000,38577000000,1899900000000,1200000000000,1881079000000,40680695000000,59926463000000,218139263000000,2995575000000,37517527000000,4300000000000,856864703000000,5520682479000000,1807288095000000,1857587524000000,9600000000000,263852200000000,4148000000000000,172345459000000,1669293427000000,2344197414700000,3212593467000000,532420717000000,341006648000000,394034232000000,2909613777000000,3520287800000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000", + "Sum(balances[...]) one of [1000000000000000000]", + "elem of allowed[msg.sender][...] is one of [1214154393080207565488897145207363713379238199016]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 1214154393080207565488897145207363713379238199016", + "Sum(allowed[msg.sender][...]) one of [1214154393080207565488897145207363713379238199016]", + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 1214154393080207565488897145207363713379238199016", + "allowed[msg.sender][spender] one of [1214154393080207565488897145207363713379238199016]", + "decimals > 0", + "decimals == 8", + "decimals one of [8]", + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) < allowed[msg.sender][spender]", + "ori(allowed[msg.sender][spender]) != allowed[msg.sender][spender]", + "tokens == Sum(allowed[msg.sender][...])", + "tokens >= Sum(allowed[msg.sender][...])", + "tokens <= Sum(allowed[msg.sender][...])", + "tokens == allowed[msg.sender][spender]", + "tokens >= allowed[msg.sender][spender]", + "tokens <= allowed[msg.sender][spender]", + "_totalSupply == ori(_totalSupply)", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(allowed[msg.sender][...]) == allowed[msg.sender][spender]", + "Sum(allowed[msg.sender][...]) != ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))", + "decimals == ori(decimals)" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(balances[msg.sender]) > 0", + "msg.sender != 0", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000", + "ori(_totalSupply) one of [1000000000000000000]", + "to != 0", + "ori(decimals) > 0", + "ori(decimals) == 8", + "ori(decimals) one of [8]", + "tokens <= ori(Sum(balances[...]))", + "tokens <= ori(balances[msg.sender])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000", + "_totalSupply one of [1000000000000000000]", + "elem of balances[...] is one of [1000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000", + "Sum(balances[...]) one of [1000000000000000000]", + "decimals > 0", + "decimals == 8", + "decimals one of [8]", + "tokens <= Sum(balances[...])", + "tokens <= balances[to]", + "_totalSupply == ori(_totalSupply)", + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= balances[to]", + "Sum(balances[...]) >= ori(balances[msg.sender])", + "Sum(balances[...]) != ori(balances[to])", + "Sum(balances[...]) != balances[msg.sender]", + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "balances[to] >= ori(balances[to])", + "ori(balances[msg.sender]) >= balances[msg.sender]", + "decimals == ori(decimals)" + ], + "falsified_preconditions": [ + "tokens > 0", + "tokens >= ori(balances[to])", + "tokens > ori(balances[to])", + "tokens != ori(balances[to])", + "ori(balances[msg.sender]) >= ori(balances[to])", + "ori(balances[msg.sender]) > ori(balances[to])", + "ori(balances[msg.sender]) != ori(balances[to])" + ], + "falsified_postconditions": [ + "balances[to] > 0", + "tokens != balances[msg.sender]", + "balances[to] > ori(balances[to])", + "balances[to] != ori(balances[to])", + "balances[to] != balances[msg.sender]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "ori(balances[to]) + tokens == balances[to]", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000", + "ori(Sum(balances[...])) one of [1000000000000000000]", + "ori(decimals) > 0", + "ori(decimals) == 8", + "ori(decimals) one of [8]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000", + "ori(_totalSupply) one of [1000000000000000000]" + ], + "postconditions": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000", + "_totalSupply one of [1000000000000000000]", + "elem of balances[...] is one of [1000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000", + "Sum(balances[...]) one of [1000000000000000000]", + "decimals > 0", + "decimals == 8", + "decimals one of [8]", + "_totalSupply == ori(_totalSupply)", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c.json new file mode 100644 index 0000000..f4796db --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xeeb690a0c9958e5375eda5694e754b125a6c972c.json @@ -0,0 +1,223 @@ +[ + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000", + "ori(_totalSupply) one of [250000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000", + "ori(Sum(balances[...])) one of [250000000000000000000000000]", + "ori(Sum(allowed[msg.sender][...])) == 0", + "ori(Sum(allowed[msg.sender][...])) one of [0]", + "ori(allowed[msg.sender][spender]) == 0", + "ori(allowed[msg.sender][spender]) one of [0]", + "msg.sender != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "tokens > 0", + "tokens == 116143000000000000000000", + "tokens one of [116143000000000000000000]", + "spender != 0", + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) != tokens", + "ori(allowed[msg.sender][spender]) != tokens" + ], + "postconditions": [ + "elem of allowed[msg.sender][...] is one of [116143000000000000000000]", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 116143000000000000000000", + "allowed[msg.sender][spender] one of [116143000000000000000000]", + "elem of balances[...] is one of [250000000000000000000000000]", + "elem of balances[...] is one of [0,100000000000000000000000,249676860000000000000000000,1140000000000000000000,10000000000000000000000,12000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000", + "_totalSupply one of [250000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000", + "Sum(balances[...]) one of [250000000000000000000000000]", + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 116143000000000000000000", + "Sum(allowed[msg.sender][...]) one of [116143000000000000000000]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "decimals == ori(decimals)", + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] == tokens", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])", + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) == tokens" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(from,to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000", + "ori(_totalSupply) one of [250000000000000000000000000]", + "msg.value == 0", + "msg.value one of [0]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000", + "ori(Sum(balances[...])) one of [250000000000000000000000000]", + "msg.sender != 0", + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "to != 0", + "ori(Sum(balances[...])) != ori(balances[to])", + "ori(Sum(balances[...])) >= ori(balances[msg.sender])", + "ori(Sum(balances[...])) != tokens", + "ori(balances[to]) != ori(balances[msg.sender])", + "ori(balances[msg.sender]) >= tokens" + ], + "postconditions": [ + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "elem of balances[...] is one of [250000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000", + "_totalSupply one of [250000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000", + "Sum(balances[...]) one of [250000000000000000000000000]", + "balances[to] > 0", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])", + "ori(Sum(balances[...])) != balances[to]", + "ori(Sum(balances[...])) != balances[msg.sender]", + "decimals == ori(decimals)", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])", + "ori(balances[to]) <= balances[to]", + "Sum(balances[...]) >= ori(balances[msg.sender])", + "Sum(balances[...]) != balances[to]", + "Sum(balances[...]) != tokens", + "Sum(balances[...]) != balances[msg.sender]", + "ori(balances[msg.sender]) >= balances[msg.sender]", + "balances[to] >= tokens", + "balances[to] != balances[msg.sender]", + "tokens + ori(balances[to]) == balances[to]", + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "falsified_preconditions": [ + "ori(balances[to]) == 0", + "ori(balances[msg.sender]) > 0", + "tokens > 0", + "ori(balances[to]) <= ori(balances[msg.sender])", + "ori(balances[to]) < ori(balances[msg.sender])", + "ori(balances[to]) <= tokens", + "ori(balances[to]) < tokens", + "ori(balances[to]) != tokens" + ], + "falsified_postconditions": [ + "ori(balances[to]) < balances[to]", + "ori(balances[to]) != balances[to]", + "ori(balances[to]) <= balances[msg.sender]", + "ori(balances[msg.sender]) >= balances[to]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]", + "balances[to] == tokens", + "balances[to] <= tokens", + "tokens != balances[msg.sender]" + ] + }, + { + "func": "transfer(to,tokens)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(decimals) > 0", + "ori(decimals) == 18", + "ori(decimals) one of [18]", + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000", + "ori(_totalSupply) one of [250000000000000000000000000]", + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000", + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ], + "postconditions": [ + "elem of balances[...] is one of [250000000000000000000000000]", + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000", + "_totalSupply one of [250000000000000000000000000]", + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000", + "Sum(balances[...]) one of [250000000000000000000000000]", + "decimals > 0", + "decimals == 18", + "decimals one of [18]", + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", + "_totalSupply == ori(_totalSupply)", + "Sum(balances[...]) == ori(Sum(balances[...]))" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc.json new file mode 100644 index 0000000..ed657bb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/0xf61ae54b74a37be4fc11e9f1a35021848d996afc.json @@ -0,0 +1,283 @@ +[ + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000", + "ori(_totalSupply) one of [100000000000]", + "ori(Sum(_allowances[msg.sender][...])) == 0", + "ori(Sum(_allowances[msg.sender][...])) one of [0]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000", + "ori(Sum(_balances[...])) one of [100000000000]", + "ori(_allowances[msg.sender][spender]) == 0", + "ori(_allowances[msg.sender][spender]) one of [0]", + "spender != 0", + "msg.value == 0", + "msg.value one of [0]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "value > 0", + "value one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) != value", + "msg.sender != spender", + "ori(_allowances[msg.sender][spender]) != value" + ], + "postconditions": [ + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000]", + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_totalSupply > 0", + "_totalSupply == 100000000000", + "_totalSupply one of [100000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000", + "Sum(_balances[...]) one of [100000000000]", + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "elem of _balances[...] is one of [100000000000]", + "elem of _balances[...] is one of [0,100000000000]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_decimals == ori(_decimals)", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] == value", + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])", + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "approve(spender,value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transferFrom(sender,recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "increaseAllowance(spender,addedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "burn(value)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "decreaseAllowance(spender,subtractedValue)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000", + "ori(_totalSupply) one of [100000000000]", + "msg.sender != 0", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000", + "ori(Sum(_balances[...])) one of [100000000000]", + "msg.value == 0", + "msg.value one of [0]", + "amount > 0", + "amount == 100000000000", + "amount one of [100000000000]", + "recipient != 0", + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000", + "ori(_balances[msg.sender]) one of [100000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(_balances[recipient]) == 0", + "ori(_balances[recipient]) one of [0]", + "msg.sender != recipient", + "ori(Sum(_balances[...])) == ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ], + "postconditions": [ + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "_balances[msg.sender] == 0", + "_balances[msg.sender] one of [0]", + "elem of _balances[...] is one of [100000000000]", + "elem of _balances[...] is one of [0,100000000000]", + "_totalSupply > 0", + "_totalSupply == 100000000000", + "_totalSupply one of [100000000000]", + "_balances[recipient] > 0", + "_balances[recipient] == 100000000000", + "_balances[recipient] one of [100000000000]", + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000", + "Sum(_balances[...]) one of [100000000000]", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "_decimals == ori(_decimals)", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) == _balances[recipient]", + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", + "_balances[msg.sender] != _balances[recipient]", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", + "_balances[msg.sender] == ori(_balances[recipient])", + "_balances[recipient] == ori(_balances[msg.sender])", + "_balances[recipient] == Sum(_balances[...])", + "_balances[recipient] >= Sum(_balances[...])", + "_balances[recipient] <= Sum(_balances[...])", + "_balances[recipient] != ori(_balances[recipient])", + "ori(_balances[msg.sender]) == Sum(_balances[...])", + "ori(_balances[msg.sender]) >= Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": "transfer(recipient,amount)", + "type": "PptType.EXIT", + "executionType": "TxType.REVERSION", + "preconditions": [], + "postconditions": [], + "falsified_preconditions": [], + "falsified_postconditions": [] + }, + { + "func": null, + "type": "PptType.CONTRACT", + "executionType": "TxType.NORMAL", + "preconditions": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000", + "ori(_totalSupply) one of [100000000000]", + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000", + "ori(Sum(_balances[...])) one of [100000000000]", + "ori(_decimals) > 0", + "ori(_decimals) == 6", + "ori(_decimals) one of [6]", + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "postconditions": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000", + "Sum(_balances[...]) one of [100000000000]", + "_decimals > 0", + "_decimals == 6", + "_decimals one of [6]", + "_totalSupply > 0", + "_totalSupply == 100000000000", + "_totalSupply one of [100000000000]", + "elem of _balances[...] is one of [100000000000]", + "elem of _balances[...] is one of [0,100000000000]", + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])", + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) == _totalSupply", + "_decimals == ori(_decimals)", + "ori(Sum(_balances[...])) == _totalSupply" + ], + "falsified_preconditions": [], + "falsified_postconditions": [] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json index 7b20fcb..ac1e81f 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1600c2e08acb830f2a4ee4d34b48594dade48651-kept.json @@ -7,6 +7,16 @@ "msg.sender != 0" ] }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ] + }, { "before_preds": [ "ori(Sum(balances[...])) one of [5000000000000000000000000]" @@ -31,6 +41,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ] + }, { "before_preds": [ "ori(totalSupply_) one of [5000000000000000000000000]" @@ -63,6 +83,16 @@ "msg.sender == ori(owner)" ] }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ] + }, { "before_preds": [ "Sum(balances[...]) one of [5000000000000000000000000]" @@ -71,6 +101,16 @@ "Sum(balances[...]) one of [5000000000000000000000000]" ] }, + { + "before_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ], + "after_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ] + }, { "before_preds": [ "totalSupply_ one of [5000000000000000000000000]" @@ -111,6 +151,18 @@ "msg.sender == owner" ] }, + { + "before_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ], + "after_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ] + }, { "before_preds": [ "unfrozen != ori(unfrozen)" @@ -151,6 +203,16 @@ "_to != 0" ] }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ] + }, { "before_preds": [ "ori(Sum(balances[...])) one of [5000000000000000000000000]" @@ -175,6 +237,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ] + }, { "before_preds": [ "ori(totalSupply_) one of [5000000000000000000000000]" @@ -199,6 +271,16 @@ "ori(owner) != 0" ] }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ] + }, { "before_preds": [ "Sum(balances[...]) one of [5000000000000000000000000]" @@ -207,6 +289,16 @@ "Sum(balances[...]) one of [5000000000000000000000000]" ] }, + { + "before_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ], + "after_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ] + }, { "before_preds": [ "totalSupply_ one of [5000000000000000000000000]" @@ -239,6 +331,18 @@ "owner != 0" ] }, + { + "before_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ], + "after_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ] + }, { "before_preds": [ "unfrozen == ori(unfrozen)" @@ -255,6 +359,16 @@ "ori(owner) == owner" ] }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 5000000000000000000000000" + ] + }, { "before_preds": [ "ori(Sum(balances[...])) one of [5000000000000000000000000]" @@ -263,6 +377,16 @@ "ori(Sum(balances[...])) one of [5000000000000000000000000]" ] }, + { + "before_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ], + "after_preds": [ + "ori(totalSupply_) > 0", + "ori(totalSupply_) == 5000000000000000000000000" + ] + }, { "before_preds": [ "ori(totalSupply_) one of [5000000000000000000000000]" @@ -279,6 +403,16 @@ "ori(owner) != 0" ] }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 5000000000000000000000000" + ] + }, { "before_preds": [ "Sum(balances[...]) one of [5000000000000000000000000]" @@ -287,6 +421,16 @@ "Sum(balances[...]) one of [5000000000000000000000000]" ] }, + { + "before_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ], + "after_preds": [ + "totalSupply_ > 0", + "totalSupply_ == 5000000000000000000000000" + ] + }, { "before_preds": [ "totalSupply_ one of [5000000000000000000000000]" @@ -319,6 +463,18 @@ "owner != 0" ] }, + { + "before_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ], + "after_preds": [ + "ori(totalSupply_) == totalSupply_", + "ori(totalSupply_) >= totalSupply_", + "ori(totalSupply_) <= totalSupply_" + ] + }, { "before_preds": [ "ori(owner) == owner" diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-kept.json new file mode 100644 index 0000000..43e603f --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-kept.json @@ -0,0 +1,350 @@ +[ + { + "before_preds": [ + "ori(_paused) == false" + ], + "after_preds": [ + "ori(_paused) == false" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_paused == false" + ], + "after_preds": [ + "_paused == false" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [10000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [10000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_paused == ori(_paused)" + ], + "after_preds": [ + "_paused == ori(_paused)" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_paused) == false" + ], + "after_preds": [ + "ori(_paused) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [10000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_paused == false" + ], + "after_preds": [ + "_paused == false" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [10000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [10000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [10000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_paused == ori(_paused)" + ], + "after_preds": [ + "_paused == ori(_paused)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-kept.json new file mode 100644 index 0000000..d051bf4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-kept.json @@ -0,0 +1,676 @@ +[ + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "tokens > 0" + ], + "after_preds": [ + "tokens > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= tokens" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= tokens" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "balances[to] > 0" + ], + "after_preds": [ + "balances[to] > 0" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "balances[to] >= tokens" + ], + "after_preds": [ + "balances[to] >= tokens" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "after_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x37a15c92e67686aa268df03d4c881a76340907e8-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x37a15c92e67686aa268df03d4c881a76340907e8-kept.json new file mode 100644 index 0000000..b86336c --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x37a15c92e67686aa268df03d4c881a76340907e8-kept.json @@ -0,0 +1,702 @@ +[ + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) == 0" + ], + "after_preds": [ + "ori(decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [0]" + ], + "after_preds": [ + "ori(decimals) one of [0]" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [10000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [10000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "tokens > 0", + "tokens == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "tokens one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= tokens" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= tokens" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [10000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [10000000]" + ] + }, + { + "before_preds": [ + "elem of allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ], + "after_preds": [ + "elem of allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ] + }, + { + "before_preds": [ + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "decimals == 0" + ], + "after_preds": [ + "decimals == 0" + ] + }, + { + "before_preds": [ + "decimals one of [0]" + ], + "after_preds": [ + "decimals one of [0]" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) > 0" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [10000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [10000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [10000000]" + ], + "after_preds": [ + "_totalSupply one of [10000000]" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) >= tokens" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) >= tokens" + ] + }, + { + "before_preds": [ + "ori(decimals) == 0" + ], + "after_preds": [ + "ori(decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [0]" + ], + "after_preds": [ + "ori(decimals) one of [0]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [10000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [10000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "tokens > 0" + ], + "after_preds": [ + "tokens > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "ori(balances[msg.sender]) <= ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) != ori(balances[to])" + ], + "after_preds": [ + "ori(balances[msg.sender]) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= tokens" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= tokens" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [10000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [10000000]" + ] + }, + { + "before_preds": [ + "balances[to] > 0" + ], + "after_preds": [ + "balances[to] > 0" + ] + }, + { + "before_preds": [ + "decimals == 0" + ], + "after_preds": [ + "decimals == 0" + ] + }, + { + "before_preds": [ + "decimals one of [0]" + ], + "after_preds": [ + "decimals one of [0]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [10000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [10000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [10000000]" + ], + "after_preds": [ + "_totalSupply one of [10000000]" + ] + }, + { + "before_preds": [ + "balances[to] >= tokens" + ], + "after_preds": [ + "balances[to] >= tokens" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "after_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(decimals) == 0" + ], + "after_preds": [ + "ori(decimals) == 0" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [0]" + ], + "after_preds": [ + "ori(decimals) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 10000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [10000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 10000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [10000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [10000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [10000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [10000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 10000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [10000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [10000000]" + ] + }, + { + "before_preds": [ + "decimals == 0" + ], + "after_preds": [ + "decimals == 0" + ] + }, + { + "before_preds": [ + "decimals one of [0]" + ], + "after_preds": [ + "decimals one of [0]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 10000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [10000000]" + ], + "after_preds": [ + "_totalSupply one of [10000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-kept.json new file mode 100644 index 0000000..96a5dae --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-kept.json @@ -0,0 +1,410 @@ +[ + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[account]) one of [0,200000000,40000000200000000,20000000200000000]" + ], + "after_preds": [ + "ori(_balances[account]) one of [0,200000000,40000000200000000,20000000200000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "account != 0" + ], + "after_preds": [ + "account != 0" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "amount one of [200000000,20000000000000000,200000000000000000000000000]" + ], + "after_preds": [ + "amount one of [200000000,20000000000000000,200000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000]" + ] + }, + { + "before_preds": [ + "ori(_balances[account]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[account]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[account]) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[account]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [200000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [200000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_balances[account] > 0" + ], + "after_preds": [ + "_balances[account] > 0" + ] + }, + { + "before_preds": [ + "_balances[account] one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]" + ], + "after_preds": [ + "_balances[account] one of [200000000,20000000200000000,40000000200000000,200000000000000000000000000,200000000040000000200000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_balances[account] <= Sum(_balances[...])" + ], + "after_preds": [ + "_balances[account] <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[account] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[account] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[account] <= _totalSupply" + ], + "after_preds": [ + "_balances[account] <= _totalSupply" + ] + }, + { + "before_preds": [ + "_balances[account] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[account] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) one of [0,5000000000000000000,100000000000000000000000,100000000000000000000,200000000000000000000000,5872550000000000000000,200000000000000000000,55000000000000000000]" + ], + "after_preds": [ + "ori(_balances[recipient]) one of [0,5000000000000000000,100000000000000000000000,100000000000000000000,200000000000000000000000,5872550000000000000000,200000000000000000000,55000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 400000000040000000200000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 400000000040000000200000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [400000000040000000200000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 400000000040000000200000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 400000000040000000200000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [400000000040000000200000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [400000000040000000200000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 400000000040000000200000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 400000000040000000200000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [400000000040000000200000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 400000000040000000200000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 400000000040000000200000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [400000000040000000200000000]" + ], + "after_preds": [ + "_totalSupply one of [400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [0,200000000,40000000200000000,20000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [200000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [200000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ], + "after_preds": [ + "_totalSupply one of [200000000,20000000200000000,40000000200000000,200000000040000000200000000,400000000040000000200000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) >= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) <= _totalSupply" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply >= ori(_totalSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-kept.json new file mode 100644 index 0000000..e883ed0 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-kept.json @@ -0,0 +1,358 @@ +[ + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "_to != 0" + ], + "after_preds": [ + "_to != 0" + ] + }, + { + "before_preds": [ + "_value > 0" + ], + "after_preds": [ + "_value > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000" + ], + "after_preds": [ + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balanceOf[...])) one of [100000000000000]" + ], + "after_preds": [ + "ori(Sum(balanceOf[...])) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000" + ], + "after_preds": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000" + ] + }, + { + "before_preds": [ + "ori(totalSupply) one of [100000000000000]" + ], + "after_preds": [ + "ori(totalSupply) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "ori(balanceOf[msg.sender]) > 0" + ], + "after_preds": [ + "ori(balanceOf[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 6" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [6]" + ], + "after_preds": [ + "ori(decimals) one of [6]" + ] + }, + { + "before_preds": [ + "_value <= ori(balanceOf[msg.sender])" + ], + "after_preds": [ + "_value <= ori(balanceOf[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(balanceOf[...])) >= ori(balanceOf[msg.sender])" + ], + "after_preds": [ + "ori(Sum(balanceOf[...])) >= ori(balanceOf[msg.sender])" + ] + }, + { + "before_preds": [ + "elem of balanceOf[...] is one of [100000000000000]" + ], + "after_preds": [ + "elem of balanceOf[...] is one of [100000000000000]" + ] + }, + { + "before_preds": [ + "totalSupply > 0", + "totalSupply == 100000000000000" + ], + "after_preds": [ + "totalSupply > 0", + "totalSupply == 100000000000000" + ] + }, + { + "before_preds": [ + "totalSupply one of [100000000000000]" + ], + "after_preds": [ + "totalSupply one of [100000000000000]" + ] + }, + { + "before_preds": [ + "balanceOf[_to] > 0" + ], + "after_preds": [ + "balanceOf[_to] > 0" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000" + ], + "after_preds": [ + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) one of [100000000000000]" + ], + "after_preds": [ + "Sum(balanceOf[...]) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 6" + ], + "after_preds": [ + "decimals > 0", + "decimals == 6" + ] + }, + { + "before_preds": [ + "decimals one of [6]" + ], + "after_preds": [ + "decimals one of [6]" + ] + }, + { + "before_preds": [ + "ori(balanceOf[_to]) <= balanceOf[_to]" + ], + "after_preds": [ + "ori(balanceOf[_to]) <= balanceOf[_to]" + ] + }, + { + "before_preds": [ + "balanceOf[msg.sender] != _value" + ], + "after_preds": [ + "balanceOf[msg.sender] != _value" + ] + }, + { + "before_preds": [ + "balanceOf[msg.sender] <= ori(balanceOf[msg.sender])" + ], + "after_preds": [ + "balanceOf[msg.sender] <= ori(balanceOf[msg.sender])" + ] + }, + { + "before_preds": [ + "_value <= balanceOf[_to]" + ], + "after_preds": [ + "_value <= balanceOf[_to]" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) >= ori(balanceOf[msg.sender])" + ], + "after_preds": [ + "Sum(balanceOf[...]) >= ori(balanceOf[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000" + ], + "after_preds": [ + "ori(totalSupply) > 0", + "ori(totalSupply) == 100000000000000" + ] + }, + { + "before_preds": [ + "ori(totalSupply) one of [100000000000000]" + ], + "after_preds": [ + "ori(totalSupply) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 6" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [6]" + ], + "after_preds": [ + "ori(decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000" + ], + "after_preds": [ + "ori(Sum(balanceOf[...])) > 0", + "ori(Sum(balanceOf[...])) == 100000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balanceOf[...])) one of [100000000000000]" + ], + "after_preds": [ + "ori(Sum(balanceOf[...])) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "elem of balanceOf[...] is one of [100000000000000]" + ], + "after_preds": [ + "elem of balanceOf[...] is one of [100000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000" + ], + "after_preds": [ + "Sum(balanceOf[...]) > 0", + "Sum(balanceOf[...]) == 100000000000000" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) one of [100000000000000]" + ], + "after_preds": [ + "Sum(balanceOf[...]) one of [100000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 6" + ], + "after_preds": [ + "decimals > 0", + "decimals == 6" + ] + }, + { + "before_preds": [ + "decimals one of [6]" + ], + "after_preds": [ + "decimals one of [6]" + ] + }, + { + "before_preds": [ + "totalSupply > 0", + "totalSupply == 100000000000000" + ], + "after_preds": [ + "totalSupply > 0", + "totalSupply == 100000000000000" + ] + }, + { + "before_preds": [ + "totalSupply one of [100000000000000]" + ], + "after_preds": [ + "totalSupply one of [100000000000000]" + ] + }, + { + "before_preds": [ + "ori(totalSupply) == totalSupply", + "ori(totalSupply) >= totalSupply", + "ori(totalSupply) <= totalSupply" + ], + "after_preds": [ + "ori(totalSupply) == totalSupply", + "ori(totalSupply) >= totalSupply", + "ori(totalSupply) <= totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x6f2a550259532f7429530dcb93d86269629e3f2a-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x6f2a550259532f7429530dcb93d86269629e3f2a-kept.json new file mode 100644 index 0000000..3d486e4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x6f2a550259532f7429530dcb93d86269629e3f2a-kept.json @@ -0,0 +1,706 @@ +[ + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "spender != msg.sender" + ], + "after_preds": [ + "spender != msg.sender" + ] + }, + { + "before_preds": [ + "value >= ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "value >= ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) > 0" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "value <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "value <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]" + ], + "after_preds": [ + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] >= ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "_allowances[msg.sender][spender] >= ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] >= ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 4000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [4000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x8b68591fe802585a9713bd6ebe75d6c285236c54-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x8b68591fe802585a9713bd6ebe75d6c285236c54-kept.json new file mode 100644 index 0000000..028fd6d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x8b68591fe802585a9713bd6ebe75d6c285236c54-kept.json @@ -0,0 +1,1040 @@ +[ + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowed[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(_allowed[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowed[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_allowed[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) == ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) >= ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) == ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) >= ori(Sum(_allowed[msg.sender][...]))", + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) > 0", + "Sum(_allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) > 0", + "Sum(_allowed[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [993060750000000000000000000000,993205000000000000000000000000,993780000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [993060750000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [993060750000000000000000000000]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] == Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] >= Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] <= Sum(_allowed[msg.sender][...])" + ], + "after_preds": [ + "_allowed[msg.sender][spender] == Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] >= Sum(_allowed[msg.sender][...])", + "_allowed[msg.sender][spender] <= Sum(_allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "value == Sum(_allowed[msg.sender][...])", + "value >= Sum(_allowed[msg.sender][...])", + "value <= Sum(_allowed[msg.sender][...])" + ], + "after_preds": [ + "value == Sum(_allowed[msg.sender][...])", + "value >= Sum(_allowed[msg.sender][...])", + "value <= Sum(_allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "value > 0" + ], + "after_preds": [ + "value > 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) one of [0,1485000000000000000000000000,4950000000000000000000000000]" + ], + "after_preds": [ + "ori(_balances[to]) one of [0,1485000000000000000000000000,4950000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= value" + ], + "after_preds": [ + "ori(_balances[msg.sender]) >= value" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "value != ori(_balances[to])" + ], + "after_preds": [ + "value != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [993732500000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [993732500000000000000000000000]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[to] > 0" + ], + "after_preds": [ + "_balances[to] > 0" + ] + }, + { + "before_preds": [ + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "value != _balances[msg.sender]" + ], + "after_preds": [ + "value != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "value != _balances[to]" + ], + "after_preds": [ + "value != _balances[to]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != _balances[to]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[to]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= ori(_balances[to])" + ], + "after_preds": [ + "_balances[msg.sender] >= ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [993732500000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [993732500000000000000000000000]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-kept.json new file mode 100644 index 0000000..0f5e65f --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-kept.json @@ -0,0 +1,682 @@ +[ + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(paused) == false" + ], + "after_preds": [ + "ori(paused) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_pendingowner) == 0" + ], + "after_preds": [ + "ori(_pendingowner) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_locked_balances[...])) == 0" + ], + "after_preds": [ + "ori(Sum(_locked_balances[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_locked_balances[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_locked_balances[...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "elem of _locked_balances[...] is one of [0]" + ], + "after_preds": [ + "elem of _locked_balances[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of _locked_balances[...] is one of []" + ], + "after_preds": [ + "elem of _locked_balances[...] is one of []" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) == 0" + ], + "after_preds": [ + "Sum(_locked_balances[...]) == 0" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) one of [0]" + ], + "after_preds": [ + "Sum(_locked_balances[...]) one of [0]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [3000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [3000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "paused == false" + ], + "after_preds": [ + "paused == false" + ] + }, + { + "before_preds": [ + "_pendingowner == 0" + ], + "after_preds": [ + "_pendingowner == 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(paused) == paused" + ], + "after_preds": [ + "ori(paused) == paused" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] >= ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "_balances[recipient] <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[recipient] <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[recipient] <= Sum(_balances[...])" + ], + "after_preds": [ + "_balances[recipient] <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_owner == ori(_owner)" + ], + "after_preds": [ + "_owner == ori(_owner)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_pendingowner) == _pendingowner" + ], + "after_preds": [ + "ori(_pendingowner) == _pendingowner" + ] + }, + { + "before_preds": [ + "ori(paused) == false" + ], + "after_preds": [ + "ori(paused) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_owner) != 0" + ], + "after_preds": [ + "ori(_owner) != 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(Sum(_locked_balances[...])) == 0" + ], + "after_preds": [ + "ori(Sum(_locked_balances[...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_locked_balances[...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_locked_balances[...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_pendingowner) == 0" + ], + "after_preds": [ + "ori(_pendingowner) == 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_owner) != ori(_pendingowner)" + ], + "after_preds": [ + "ori(_owner) != ori(_pendingowner)" + ] + }, + { + "before_preds": [ + "elem of _locked_balances[...] is one of [0]" + ], + "after_preds": [ + "elem of _locked_balances[...] is one of [0]" + ] + }, + { + "before_preds": [ + "elem of _locked_balances[...] is one of []" + ], + "after_preds": [ + "elem of _locked_balances[...] is one of []" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) == 0" + ], + "after_preds": [ + "Sum(_locked_balances[...]) == 0" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) one of [0]" + ], + "after_preds": [ + "Sum(_locked_balances[...]) one of [0]" + ] + }, + { + "before_preds": [ + "_owner != 0" + ], + "after_preds": [ + "_owner != 0" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [3000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 3000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [3000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [3000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [3000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "paused == false" + ], + "after_preds": [ + "paused == false" + ] + }, + { + "before_preds": [ + "_pendingowner == 0" + ], + "after_preds": [ + "_pendingowner == 0" + ] + }, + { + "before_preds": [ + "ori(paused) == paused" + ], + "after_preds": [ + "ori(paused) == paused" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_owner == ori(_owner)" + ], + "after_preds": [ + "_owner == ori(_owner)" + ] + }, + { + "before_preds": [ + "_owner != _pendingowner" + ], + "after_preds": [ + "_owner != _pendingowner" + ] + }, + { + "before_preds": [ + "_owner != ori(_pendingowner)" + ], + "after_preds": [ + "_owner != ori(_pendingowner)" + ] + }, + { + "before_preds": [ + "ori(_owner) != _pendingowner" + ], + "after_preds": [ + "ori(_owner) != _pendingowner" + ] + }, + { + "before_preds": [ + "_pendingowner == ori(_pendingowner)" + ], + "after_preds": [ + "_pendingowner == ori(_pendingowner)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-kept.json new file mode 100644 index 0000000..a3c701d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-kept.json @@ -0,0 +1,406 @@ +[ + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 5" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 5" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [5]" + ], + "after_preds": [ + "ori(_decimals) one of [5]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(_paused) == false" + ], + "after_preds": [ + "ori(_paused) == false" + ] + }, + { + "before_preds": [ + "value > 0" + ], + "after_preds": [ + "value > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 5" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 5" + ] + }, + { + "before_preds": [ + "_decimals one of [5]" + ], + "after_preds": [ + "_decimals one of [5]" + ] + }, + { + "before_preds": [ + "_paused == false" + ], + "after_preds": [ + "_paused == false" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "_paused == ori(_paused)" + ], + "after_preds": [ + "_paused == ori(_paused)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_paused) == false" + ], + "after_preds": [ + "ori(_paused) == false" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 5" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 5" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [5]" + ], + "after_preds": [ + "ori(_decimals) one of [5]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 5" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 5" + ] + }, + { + "before_preds": [ + "_decimals one of [5]" + ], + "after_preds": [ + "_decimals one of [5]" + ] + }, + { + "before_preds": [ + "_paused == false" + ], + "after_preds": [ + "_paused == false" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(Sum(_balances[...]))", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply == ori(Sum(_balances[...]))", + "_totalSupply >= ori(Sum(_balances[...]))", + "_totalSupply <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_paused) == _paused" + ], + "after_preds": [ + "ori(_paused) == _paused" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xb2923909b5d8bbe01505121f15a4503b6617dae7-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xb2923909b5d8bbe01505121f15a4503b6617dae7-kept.json new file mode 100644 index 0000000..41dc4da --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xb2923909b5d8bbe01505121f15a4503b6617dae7-kept.json @@ -0,0 +1,470 @@ +[ + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [7000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(balances[to]) one of [0,124700000000000000000000,374700000000000000000000,437200000000000000000000,499700000000000000000000,749700000000000000000000]" + ], + "after_preds": [ + "ori(balances[to]) one of [0,124700000000000000000000,374700000000000000000000,437200000000000000000000,499700000000000000000000,749700000000000000000000]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [7000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "tokens > 0" + ], + "after_preds": [ + "tokens > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) != tokens" + ], + "after_preds": [ + "ori(balances[to]) != tokens" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= tokens" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= tokens" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [7000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [7000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "balances[to] > 0" + ], + "after_preds": [ + "balances[to] > 0" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [7000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) != balances[msg.sender]" + ], + "after_preds": [ + "ori(balances[to]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "balances[msg.sender] != balances[to]" + ], + "after_preds": [ + "balances[msg.sender] != balances[to]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) != balances[to]" + ], + "after_preds": [ + "ori(balances[msg.sender]) != balances[to]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[msg.sender]) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "owner == ori(owner)" + ], + "after_preds": [ + "owner == ori(owner)" + ] + }, + { + "before_preds": [ + "balances[to] >= tokens" + ], + "after_preds": [ + "balances[to] >= tokens" + ] + }, + { + "before_preds": [ + "tokens + ori(balances[to]) == balances[to]" + ], + "after_preds": [ + "tokens + ori(balances[to]) == balances[to]" + ] + }, + { + "before_preds": [ + "tokens + balances[msg.sender] == ori(balances[msg.sender])" + ], + "after_preds": [ + "tokens + balances[msg.sender] == ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [7000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [7000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(owner) != 0" + ], + "after_preds": [ + "ori(owner) != 0" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [7000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "owner != 0" + ], + "after_preds": [ + "owner != 0" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 7000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [7000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [7000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(owner) == owner" + ], + "after_preds": [ + "ori(owner) == owner" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-kept.json new file mode 100644 index 0000000..ee7bb10 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-kept.json @@ -0,0 +1,1966 @@ +[ + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) > 0" + ], + "after_preds": [ + "ori(maxTxAmount) > 0" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(currentOwner) != 0" + ], + "after_preds": [ + "ori(currentOwner) != 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "ori(Sum(_allowed[msg.sender][...])) one of [0,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) <= ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "value >= ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "value >= ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) > 0" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) one of [231584178474632390847141970017375815706539969331281128078915168015826259279870,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "_allowed[msg.sender][spender] > 0", + "_allowed[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowed[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [997200000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [997200000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "currentOwner != 0" + ], + "after_preds": [ + "currentOwner != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "maxTxAmount > 0" + ], + "after_preds": [ + "maxTxAmount > 0" + ] + }, + { + "before_preds": [ + "maxTxAmount one of [1500000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "maxTxAmount one of [1500000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ], + "after_preds": [ + "elem of _allowed[msg.sender][...] is one of [231584178474632390847141970017375815706539969331281128078915168015826259279870]" + ] + }, + { + "before_preds": [ + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowed[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ], + "after_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) >= _allowed[msg.sender][spender]" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) >= _allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) >= value" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) >= value" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] >= ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "_allowed[msg.sender][spender] >= ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(currentOwner) == currentOwner" + ], + "after_preds": [ + "ori(currentOwner) == currentOwner" + ] + }, + { + "before_preds": [ + "account != 0" + ], + "after_preds": [ + "account != 0" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 1500000000000000000000000" + ], + "after_preds": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 1500000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000]" + ], + "after_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(currentOwner) != 0" + ], + "after_preds": [ + "ori(currentOwner) != 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_isBlackListed[account]) == false" + ], + "after_preds": [ + "ori(_isBlackListed[account]) == false" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender == ori(currentOwner)" + ], + "after_preds": [ + "msg.sender == ori(currentOwner)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "currentOwner != 0" + ], + "after_preds": [ + "currentOwner != 0" + ] + }, + { + "before_preds": [ + "_isBlackListed[account] == true" + ], + "after_preds": [ + "_isBlackListed[account] == true" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "maxTxAmount > 0", + "maxTxAmount == 1500000000000000000000000" + ], + "after_preds": [ + "maxTxAmount > 0", + "maxTxAmount == 1500000000000000000000000" + ] + }, + { + "before_preds": [ + "maxTxAmount one of [1500000000000000000000000]" + ], + "after_preds": [ + "maxTxAmount one of [1500000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ], + "after_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ] + }, + { + "before_preds": [ + "msg.sender == currentOwner" + ], + "after_preds": [ + "msg.sender == currentOwner" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(currentOwner) == currentOwner" + ], + "after_preds": [ + "ori(currentOwner) == currentOwner" + ] + }, + { + "before_preds": [ + "_isBlackListed[account] != ori(_isBlackListed[account])" + ], + "after_preds": [ + "_isBlackListed[account] != ori(_isBlackListed[account])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 300000000000000000000000000" + ], + "after_preds": [ + "ori(maxTxAmount) > 0", + "ori(maxTxAmount) == 300000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) one of [300000000000000000000000000]" + ], + "after_preds": [ + "ori(maxTxAmount) one of [300000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(currentOwner) != 0" + ], + "after_preds": [ + "ori(currentOwner) != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) == 0" + ], + "after_preds": [ + "ori(_balances[to]) == 0" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) one of [0]" + ], + "after_preds": [ + "ori(_balances[to]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "value > 0" + ], + "after_preds": [ + "value > 0" + ] + }, + { + "before_preds": [ + "value one of [10000000000000000000000000,3000000000000000000000000,7000000000000000000000000]" + ], + "after_preds": [ + "value one of [10000000000000000000000000,3000000000000000000000000,7000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != to" + ], + "after_preds": [ + "msg.sender != to" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] > 0" + ], + "after_preds": [ + "_balances[msg.sender] > 0" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [998970000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [998970000000000000000000000]" + ] + }, + { + "before_preds": [ + "currentOwner != 0" + ], + "after_preds": [ + "currentOwner != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "_balances[to] > 0" + ], + "after_preds": [ + "_balances[to] > 0" + ] + }, + { + "before_preds": [ + "_balances[to] one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000]" + ], + "after_preds": [ + "_balances[to] one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000]" + ] + }, + { + "before_preds": [ + "maxTxAmount > 0", + "maxTxAmount == 300000000000000000000000000" + ], + "after_preds": [ + "maxTxAmount > 0", + "maxTxAmount == 300000000000000000000000000" + ] + }, + { + "before_preds": [ + "maxTxAmount one of [300000000000000000000000000]" + ], + "after_preds": [ + "maxTxAmount one of [300000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ], + "after_preds": [ + "ori(maxTxAmount) == maxTxAmount", + "ori(maxTxAmount) >= maxTxAmount", + "ori(maxTxAmount) <= maxTxAmount" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(currentOwner) == currentOwner" + ], + "after_preds": [ + "ori(currentOwner) == currentOwner" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != _totalSupply" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != _totalSupply" + ] + }, + { + "before_preds": [ + "value + _balances[msg.sender] == ori(_balances[msg.sender])" + ], + "after_preds": [ + "value + _balances[msg.sender] == ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) > 0" + ], + "after_preds": [ + "ori(maxTxAmount) > 0" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000]" + ], + "after_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "theAmount > 0" + ], + "after_preds": [ + "theAmount > 0" + ] + }, + { + "before_preds": [ + "theAmount one of [300000000,720000000,1500000]" + ], + "after_preds": [ + "theAmount one of [300000000,720000000,1500000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(currentOwner) != 0" + ], + "after_preds": [ + "ori(currentOwner) != 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender == ori(currentOwner)" + ], + "after_preds": [ + "msg.sender == ori(currentOwner)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [997200000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [997200000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [9900000000000000000000000,2970000000000000000000000,6930000000000000000000000,1000000000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "currentOwner != 0" + ], + "after_preds": [ + "currentOwner != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [997200000000000000000000000,1000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "maxTxAmount > 0" + ], + "after_preds": [ + "maxTxAmount > 0" + ] + }, + { + "before_preds": [ + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) != maxTxAmount" + ], + "after_preds": [ + "ori(maxTxAmount) != maxTxAmount" + ] + }, + { + "before_preds": [ + "msg.sender == currentOwner" + ], + "after_preds": [ + "msg.sender == currentOwner" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(currentOwner) == currentOwner" + ], + "after_preds": [ + "ori(currentOwner) == currentOwner" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) > 0" + ], + "after_preds": [ + "ori(maxTxAmount) > 0" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "ori(maxTxAmount) one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(currentOwner) != 0" + ], + "after_preds": [ + "ori(currentOwner) != 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 200000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [200000000000000000000000]" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [998970000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [998970000000000000000000000]" + ] + }, + { + "before_preds": [ + "currentOwner != 0" + ], + "after_preds": [ + "currentOwner != 0" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "maxTxAmount > 0" + ], + "after_preds": [ + "maxTxAmount > 0" + ] + }, + { + "before_preds": [ + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ], + "after_preds": [ + "maxTxAmount one of [1500000000000000000000000,300000000000000000000000000,720000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ], + "after_preds": [ + "ori(basePercent) == basePercent", + "ori(basePercent) >= basePercent", + "ori(basePercent) <= basePercent" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(currentOwner) == currentOwner" + ], + "after_preds": [ + "ori(currentOwner) == currentOwner" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xc382e04099a435439725bb40647e2b32dc136806-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xc382e04099a435439725bb40647e2b32dc136806-kept.json new file mode 100644 index 0000000..ab30ead --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xc382e04099a435439725bb40647e2b32dc136806-kept.json @@ -0,0 +1,724 @@ +[ + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "spender != msg.sender" + ], + "after_preds": [ + "spender != msg.sender" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) == ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) == ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) >= ori(Sum(_allowances[msg.sender][...]))", + "ori(_allowances[msg.sender][spender]) <= ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,15000000000000000000000000000000,30000000000000000000000000000000,500000000000000000000000000000,200000000000000000000000000000,20000000000000000000000000000000,2605000000000000000000000000000,10000000000000000000000000000,100000000000000000000000000000,10000000000000000000000000000000,25000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,15000000000000000000000000000000,30000000000000000000000000000000,500000000000000000000000000000,200000000000000000000000000000,20000000000000000000000000000000,2605000000000000000000000000000,10000000000000000000000000000,100000000000000000000000000000,10000000000000000000000000000000,25000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]" + ], + "after_preds": [ + "value == _allowances[msg.sender][spender]", + "value >= _allowances[msg.sender][spender]", + "value <= _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) one of [0,20000000000000000000000000000000]" + ], + "after_preds": [ + "ori(_balances[recipient]) one of [0,20000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "recipient != msg.sender" + ], + "after_preds": [ + "recipient != msg.sender" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != _balances[recipient]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[recipient]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[recipient] <= Sum(_balances[...])" + ], + "after_preds": [ + "_balances[recipient] <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-kept.json new file mode 100644 index 0000000..337109f --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-kept.json @@ -0,0 +1,642 @@ +[ + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) one of [0,519750000000000000000,247500000000000000000000,7920000000000000000000,2549250000000000000000]" + ], + "after_preds": [ + "ori(_balances[to]) one of [0,519750000000000000000,247500000000000000000000,7920000000000000000000,2549250000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [100000000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [100000000000000000000000000]" + ] + }, + { + "before_preds": [ + "value <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "value <= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[to])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [100000000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [100000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [101004337700000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [101004337700000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_totalSupply != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "value != _balances[msg.sender]" + ], + "after_preds": [ + "value != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != _balances[to]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != _balances[to]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount" + ], + "after_preds": [ + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != _balances[to]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[to]" + ] + }, + { + "before_preds": [ + "_balances[to] >= ori(_balances[to])" + ], + "after_preds": [ + "_balances[to] >= ori(_balances[to])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] + value == ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == 0" + ], + "after_preds": [ + "ori(_burnStopAmount) == 0" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) one of [0]" + ], + "after_preds": [ + "ori(_burnStopAmount) one of [0]" + ] + }, + { + "before_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ], + "after_preds": [ + "ori(basePercent) > 0", + "ori(basePercent) == 100" + ] + }, + { + "before_preds": [ + "ori(basePercent) one of [100]" + ], + "after_preds": [ + "ori(basePercent) one of [100]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [18]" + ], + "after_preds": [ + "ori(_decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0" + ], + "after_preds": [ + "ori(_totalSupply) > 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000" + ], + "after_preds": [ + "ori(_lastTokenSupply) > 0", + "ori(_lastTokenSupply) == 100000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_lastTokenSupply) one of [100000000000000000000000000]" + ], + "after_preds": [ + "ori(_lastTokenSupply) one of [100000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0" + ], + "after_preds": [ + "_totalSupply > 0" + ] + }, + { + "before_preds": [ + "basePercent > 0", + "basePercent == 100" + ], + "after_preds": [ + "basePercent > 0", + "basePercent == 100" + ] + }, + { + "before_preds": [ + "basePercent one of [100]" + ], + "after_preds": [ + "basePercent one of [100]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000" + ], + "after_preds": [ + "_lastTokenSupply > 0", + "_lastTokenSupply == 100000000000000000000000000" + ] + }, + { + "before_preds": [ + "_lastTokenSupply one of [100000000000000000000000000]" + ], + "after_preds": [ + "_lastTokenSupply one of [100000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, + { + "before_preds": [ + "_decimals one of [18]" + ], + "after_preds": [ + "_decimals one of [18]" + ] + }, + { + "before_preds": [ + "_burnStopAmount == 0" + ], + "after_preds": [ + "_burnStopAmount == 0" + ] + }, + { + "before_preds": [ + "_burnStopAmount one of [0]" + ], + "after_preds": [ + "_burnStopAmount one of [0]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0" + ], + "after_preds": [ + "Sum(_balances[...]) > 0" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [101004337700000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [101004337700000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount" + ], + "after_preds": [ + "ori(_burnStopAmount) == _burnStopAmount", + "ori(_burnStopAmount) >= _burnStopAmount", + "ori(_burnStopAmount) <= _burnStopAmount" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-kept.json new file mode 100644 index 0000000..f73fadb --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-kept.json @@ -0,0 +1,696 @@ +[ + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [9]" + ], + "after_preds": [ + "ori(_decimals) one of [9]" + ] + }, + { + "before_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "value > 0", + "value == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "spender != msg.sender" + ], + "after_preds": [ + "spender != msg.sender" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "_allowances[msg.sender][spender] > 0", + "_allowances[msg.sender][spender] == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowances[msg.sender][spender] one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [1000000000000000,3169849838330000000,39000000000000,12000000000000000,0,420000000000000,123930000000000,30000000000000,330000000000000,60000000000000,438872000000000,80050000000,208080000000000,900000000000000,50000000000,112410000000000,96800000000000000000,10000000,440544000000000,1740000000000000,750000000000000,2104500000000000,135556000000000,1124100000000000,75804000000000,410495670000000,80000000000,50000000000000,210000000000000,270050010000000,119659930000000,150000000000000,36870000000000,90000000000000,1050000000000000,1035000000000000,75000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [1000000000000000,3169849838330000000,39000000000000,12000000000000000,0,420000000000000,123930000000000,30000000000000,330000000000000,60000000000000,438872000000000,80050000000,208080000000000,900000000000000,50000000000,112410000000000,96800000000000000000,10000000,440544000000000,1740000000000000,750000000000000,2104500000000000,135556000000000,1124100000000000,75804000000000,410495670000000,80000000000,50000000000000,210000000000000,270050010000000,119659930000000,150000000000000,36870000000000,90000000000000,1050000000000000,1035000000000000,75000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) > 0", + "Sum(_allowances[msg.sender][...]) == 115792089237316195423570985008687907853269984665640564039457584007913129639935" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) one of [115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 9" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 9" + ] + }, + { + "before_preds": [ + "_decimals one of [9]" + ], + "after_preds": [ + "_decimals one of [9]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "amount > 0" + ], + "after_preds": [ + "amount > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [9]" + ], + "after_preds": [ + "ori(_decimals) one of [9]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "recipient != msg.sender" + ], + "after_preds": [ + "recipient != msg.sender" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0" + ], + "after_preds": [ + "_balances[recipient] > 0" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 9" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 9" + ] + }, + { + "before_preds": [ + "_decimals one of [9]" + ], + "after_preds": [ + "_decimals one of [9]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] != _balances[recipient]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[recipient]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[msg.sender])" + ], + "after_preds": [ + "Sum(_balances[...]) >= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 9" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [9]" + ], + "after_preds": [ + "ori(_decimals) one of [9]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 9" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 9" + ] + }, + { + "before_preds": [ + "_decimals one of [9]" + ], + "after_preds": [ + "_decimals one of [9]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-kept.json new file mode 100644 index 0000000..aa0786d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-kept.json @@ -0,0 +1,664 @@ +[ + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "tokens > 0", + "tokens == 1214154393080207565488897145207363713379238199016" + ], + "after_preds": [ + "tokens > 0", + "tokens == 1214154393080207565488897145207363713379238199016" + ] + }, + { + "before_preds": [ + "tokens one of [1214154393080207565488897145207363713379238199016]" + ], + "after_preds": [ + "tokens one of [1214154393080207565488897145207363713379238199016]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [8]" + ], + "after_preds": [ + "ori(decimals) one of [8]" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) == ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) >= ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) == ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) >= ori(Sum(allowed[msg.sender][...]))", + "ori(allowed[msg.sender][spender]) <= ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [0,42155608000000,7827168000000,26727712000000,2364184000000,14505336000000,39866984000000,26200000000000,1991093640000000,60000000000,200000000000000,223083670000000,4856418504000000,2886756805000000,733387377300000,466343312000000,89562000000000,614258317000000,115335000000000,293365795000000,55321433000000,10100000000000,808584315377000000,67977665000000,7549993000000,3309113000000,2321935681000000,50633353000000,13500177000000,23370833000000,2100000000000,822900562000000,362332495000000,230490600000000,494315646000000,234663856000000,568993250000000,1056758701000000,955539526000000,2290247800000000,816436753000000,1500000000000000,287186755000000,35912634000000,1475154770000000,8253082000000,4196890000000,210344090000000,2581883922000000,85196714000000,408071641000000,1308507218000000,1365056466000000,907453248000000,253334180000000,1634666760000000,1650101000000000,100000000000000,3552133331000000,2147174090000000,1819394147000000,287238396000000,119538379000000,42432787000000,1905260435000000,1451707355000000,23514979000000,25595051000000,89326155000000,117578331000000,7103883000000,1900128000000,18888800000000,243285700000000,1916403000000,3298409047000000,4212424891000000,9126009837000000,1753730950000000,1498000000000000,814045727000000,1896835000000,1105069134000000,599482190000000,1740028000000,301265220000000,8596628000000,32234460000000,315772404000000,268733620000000,719812020000000,36880755700000000,310833676000000,250440116000000,2160100000000,2609636221000000,3002439449000000,3523832342000000,1600000000000000,2326235055000000,506668360000000,1933196460000000,274876741000000,10000000000,1231918352000000,42995981000000,1876942246000000,1015929560000000,2226634250000000,2454909000000,1967529221000000,252862285000000,5670605000000,355760661000000,3118813000000,562571485000000,71098725000000,100000000000,150144416000000,20100000000000,186156392000000,243145064000000,3077644954000000,1179432137000000,1375765499000000,250245012000000,2500000000000,1379680451000000,1501362421000000,34207198000000,7751278000000,809717142000000,2453660118000000,216910870000000,36701942000000,9379382000000,2443859382000000,3000000000000,511371390000000,2495907929000000,1263531812000000,1691474109000000,1169134166000000,2000000000000,5000000000,571697800000000,3563600000000,47000000000000,2741947060000000,25185204000000,38577000000,1899900000000,1200000000000,1881079000000,40680695000000,59926463000000,218139263000000,2995575000000,37517527000000,4300000000000,856864703000000,5520682479000000,1807288095000000,1857587524000000,9600000000000,263852200000000,4148000000000000,172345459000000,1669293427000000,2344197414700000,3212593467000000,532420717000000,341006648000000,394034232000000,2909613777000000,3520287800000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [0,42155608000000,7827168000000,26727712000000,2364184000000,14505336000000,39866984000000,26200000000000,1991093640000000,60000000000,200000000000000,223083670000000,4856418504000000,2886756805000000,733387377300000,466343312000000,89562000000000,614258317000000,115335000000000,293365795000000,55321433000000,10100000000000,808584315377000000,67977665000000,7549993000000,3309113000000,2321935681000000,50633353000000,13500177000000,23370833000000,2100000000000,822900562000000,362332495000000,230490600000000,494315646000000,234663856000000,568993250000000,1056758701000000,955539526000000,2290247800000000,816436753000000,1500000000000000,287186755000000,35912634000000,1475154770000000,8253082000000,4196890000000,210344090000000,2581883922000000,85196714000000,408071641000000,1308507218000000,1365056466000000,907453248000000,253334180000000,1634666760000000,1650101000000000,100000000000000,3552133331000000,2147174090000000,1819394147000000,287238396000000,119538379000000,42432787000000,1905260435000000,1451707355000000,23514979000000,25595051000000,89326155000000,117578331000000,7103883000000,1900128000000,18888800000000,243285700000000,1916403000000,3298409047000000,4212424891000000,9126009837000000,1753730950000000,1498000000000000,814045727000000,1896835000000,1105069134000000,599482190000000,1740028000000,301265220000000,8596628000000,32234460000000,315772404000000,268733620000000,719812020000000,36880755700000000,310833676000000,250440116000000,2160100000000,2609636221000000,3002439449000000,3523832342000000,1600000000000000,2326235055000000,506668360000000,1933196460000000,274876741000000,10000000000,1231918352000000,42995981000000,1876942246000000,1015929560000000,2226634250000000,2454909000000,1967529221000000,252862285000000,5670605000000,355760661000000,3118813000000,562571485000000,71098725000000,100000000000,150144416000000,20100000000000,186156392000000,243145064000000,3077644954000000,1179432137000000,1375765499000000,250245012000000,2500000000000,1379680451000000,1501362421000000,34207198000000,7751278000000,809717142000000,2453660118000000,216910870000000,36701942000000,9379382000000,2443859382000000,3000000000000,511371390000000,2495907929000000,1263531812000000,1691474109000000,1169134166000000,2000000000000,5000000000,571697800000000,3563600000000,47000000000000,2741947060000000,25185204000000,38577000000,1899900000000,1200000000000,1881079000000,40680695000000,59926463000000,218139263000000,2995575000000,37517527000000,4300000000000,856864703000000,5520682479000000,1807288095000000,1857587524000000,9600000000000,263852200000000,4148000000000000,172345459000000,1669293427000000,2344197414700000,3212593467000000,532420717000000,341006648000000,394034232000000,2909613777000000,3520287800000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of allowed[msg.sender][...] is one of [1214154393080207565488897145207363713379238199016]" + ], + "after_preds": [ + "elem of allowed[msg.sender][...] is one of [1214154393080207565488897145207363713379238199016]" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 1214154393080207565488897145207363713379238199016" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 1214154393080207565488897145207363713379238199016" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) one of [1214154393080207565488897145207363713379238199016]" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) one of [1214154393080207565488897145207363713379238199016]" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 1214154393080207565488897145207363713379238199016" + ], + "after_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 1214154393080207565488897145207363713379238199016" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] one of [1214154393080207565488897145207363713379238199016]" + ], + "after_preds": [ + "allowed[msg.sender][spender] one of [1214154393080207565488897145207363713379238199016]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 8" + ], + "after_preds": [ + "decimals > 0", + "decimals == 8" + ] + }, + { + "before_preds": [ + "decimals one of [8]" + ], + "after_preds": [ + "decimals one of [8]" + ] + }, + { + "before_preds": [ + "tokens == Sum(allowed[msg.sender][...])", + "tokens >= Sum(allowed[msg.sender][...])", + "tokens <= Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "tokens == Sum(allowed[msg.sender][...])", + "tokens >= Sum(allowed[msg.sender][...])", + "tokens <= Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "tokens == allowed[msg.sender][spender]", + "tokens >= allowed[msg.sender][spender]", + "tokens <= allowed[msg.sender][spender]" + ], + "after_preds": [ + "tokens == allowed[msg.sender][spender]", + "tokens >= allowed[msg.sender][spender]", + "tokens <= allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) > 0" + ], + "after_preds": [ + "ori(balances[msg.sender]) > 0" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [8]" + ], + "after_preds": [ + "ori(decimals) one of [8]" + ] + }, + { + "before_preds": [ + "tokens <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "tokens <= ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "tokens <= ori(balances[msg.sender])" + ], + "after_preds": [ + "tokens <= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 8" + ], + "after_preds": [ + "decimals > 0", + "decimals == 8" + ] + }, + { + "before_preds": [ + "decimals one of [8]" + ], + "after_preds": [ + "decimals one of [8]" + ] + }, + { + "before_preds": [ + "tokens <= Sum(balances[...])" + ], + "after_preds": [ + "tokens <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "tokens <= balances[to]" + ], + "after_preds": [ + "tokens <= balances[to]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= balances[to]" + ], + "after_preds": [ + "Sum(balances[...]) >= balances[to]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "Sum(balances[...]) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[to]" + ], + "after_preds": [ + "ori(Sum(balances[...])) >= balances[to]" + ] + }, + { + "before_preds": [ + "balances[to] >= ori(balances[to])" + ], + "after_preds": [ + "balances[to] >= ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 8" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [8]" + ], + "after_preds": [ + "ori(decimals) one of [8]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [1000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 1000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [1000000000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 8" + ], + "after_preds": [ + "decimals > 0", + "decimals == 8" + ] + }, + { + "before_preds": [ + "decimals one of [8]" + ], + "after_preds": [ + "decimals one of [8]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xeeb690a0c9958e5375eda5694e754b125a6c972c-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xeeb690a0c9958e5375eda5694e754b125a6c972c-kept.json new file mode 100644 index 0000000..76227fd --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xeeb690a0c9958e5375eda5694e754b125a6c972c-kept.json @@ -0,0 +1,676 @@ +[ + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "tokens > 0", + "tokens == 116143000000000000000000" + ], + "after_preds": [ + "tokens > 0", + "tokens == 116143000000000000000000" + ] + }, + { + "before_preds": [ + "tokens one of [116143000000000000000000]" + ], + "after_preds": [ + "tokens one of [116143000000000000000000]" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "elem of allowed[msg.sender][...] is one of [116143000000000000000000]" + ], + "after_preds": [ + "elem of allowed[msg.sender][...] is one of [116143000000000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 116143000000000000000000" + ], + "after_preds": [ + "allowed[msg.sender][spender] > 0", + "allowed[msg.sender][spender] == 116143000000000000000000" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] one of [116143000000000000000000]" + ], + "after_preds": [ + "allowed[msg.sender][spender] one of [116143000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [0,100000000000000000000000,249676860000000000000000000,1140000000000000000000,10000000000000000000000,12000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [0,100000000000000000000000,249676860000000000000000000,1140000000000000000000,10000000000000000000000,12000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 116143000000000000000000" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) > 0", + "Sum(allowed[msg.sender][...]) == 116143000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) one of [116143000000000000000000]" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) one of [116143000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "allowed[msg.sender][spender] == Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] >= Sum(allowed[msg.sender][...])", + "allowed[msg.sender][spender] <= Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "to != 0" + ], + "after_preds": [ + "to != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(balances[...])) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ], + "after_preds": [ + "ori(balances[to]) != ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= tokens" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= tokens" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "balances[to] > 0" + ], + "after_preds": [ + "balances[to] > 0" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ], + "after_preds": [ + "ori(Sum(balances[...])) == Sum(balances[...])", + "ori(Sum(balances[...])) >= Sum(balances[...])", + "ori(Sum(balances[...])) <= Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= balances[to]" + ], + "after_preds": [ + "ori(balances[to]) <= balances[to]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= ori(balances[msg.sender])" + ], + "after_preds": [ + "Sum(balances[...]) >= ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]" + ], + "after_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]" + ] + }, + { + "before_preds": [ + "balances[to] >= tokens" + ], + "after_preds": [ + "balances[to] >= tokens" + ] + }, + { + "before_preds": [ + "balances[to] != balances[msg.sender]" + ], + "after_preds": [ + "balances[to] != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "tokens + ori(balances[to]) == balances[to]" + ], + "after_preds": [ + "tokens + ori(balances[to]) == balances[to]" + ] + }, + { + "before_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ], + "after_preds": [ + "balances[msg.sender] + tokens == ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, + { + "before_preds": [ + "ori(decimals) one of [18]" + ], + "after_preds": [ + "ori(decimals) one of [18]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ], + "after_preds": [ + "ori(Sum(balances[...])) > 0", + "ori(Sum(balances[...])) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ], + "after_preds": [ + "ori(Sum(balances[...])) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ], + "after_preds": [ + "elem of balances[...] is one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ], + "after_preds": [ + "_totalSupply one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ], + "after_preds": [ + "Sum(balances[...]) > 0", + "Sum(balances[...]) == 250000000000000000000000000" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ], + "after_preds": [ + "Sum(balances[...]) one of [250000000000000000000000000]" + ] + }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, + { + "before_preds": [ + "decimals one of [18]" + ], + "after_preds": [ + "decimals one of [18]" + ] + }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-kept.json new file mode 100644 index 0000000..7ca24a5 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/kept/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-kept.json @@ -0,0 +1,768 @@ +[ + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) == 0" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) one of [0]" + ] + }, + { + "before_preds": [ + "spender != 0" + ], + "after_preds": [ + "spender != 0" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "value > 0" + ], + "after_preds": [ + "value > 0" + ] + }, + { + "before_preds": [ + "value one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "value one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "msg.sender != spender" + ], + "after_preds": [ + "msg.sender != spender" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000]" + ] + }, + { + "before_preds": [ + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "elem of _allowances[msg.sender][...] is one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] > 0" + ], + "after_preds": [ + "_allowances[msg.sender][spender] > 0" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "_allowances[msg.sender][spender] one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) > 0" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) > 0" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) one of [100000000000000000000000000000000000000000000000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "_allowances[msg.sender][spender] == Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] >= Sum(_allowances[msg.sender][...])", + "_allowances[msg.sender][spender] <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "value == Sum(_allowances[msg.sender][...])", + "value >= Sum(_allowances[msg.sender][...])", + "value <= Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000]" + ] + }, + { + "before_preds": [ + "msg.sender != 0" + ], + "after_preds": [ + "msg.sender != 0" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ] + }, + { + "before_preds": [ + "msg.value == 0" + ], + "after_preds": [ + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "amount > 0", + "amount == 100000000000" + ], + "after_preds": [ + "amount > 0", + "amount == 100000000000" + ] + }, + { + "before_preds": [ + "amount one of [100000000000]" + ], + "after_preds": [ + "amount one of [100000000000]" + ] + }, + { + "before_preds": [ + "recipient != 0" + ], + "after_preds": [ + "recipient != 0" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) one of [100000000000]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) == 0" + ], + "after_preds": [ + "ori(_balances[recipient]) == 0" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) one of [0]" + ], + "after_preds": [ + "ori(_balances[recipient]) one of [0]" + ] + }, + { + "before_preds": [ + "msg.sender != recipient" + ], + "after_preds": [ + "msg.sender != recipient" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] == 0" + ], + "after_preds": [ + "_balances[msg.sender] == 0" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] one of [0]" + ], + "after_preds": [ + "_balances[msg.sender] one of [0]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000]" + ] + }, + { + "before_preds": [ + "_balances[recipient] > 0", + "_balances[recipient] == 100000000000" + ], + "after_preds": [ + "_balances[recipient] > 0", + "_balances[recipient] == 100000000000" + ] + }, + { + "before_preds": [ + "_balances[recipient] one of [100000000000]" + ], + "after_preds": [ + "_balances[recipient] one of [100000000000]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[recipient] == Sum(_balances[...])", + "_balances[recipient] >= Sum(_balances[...])", + "_balances[recipient] <= Sum(_balances[...])" + ], + "after_preds": [ + "_balances[recipient] == Sum(_balances[...])", + "_balances[recipient] >= Sum(_balances[...])", + "_balances[recipient] <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) == Sum(_balances[...])", + "ori(_balances[msg.sender]) >= Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) == Sum(_balances[...])", + "ori(_balances[msg.sender]) >= Sum(_balances[...])", + "ori(_balances[msg.sender]) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) one of [100000000000]" + ], + "after_preds": [ + "ori(_totalSupply) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) one of [100000000000]" + ] + }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, + { + "before_preds": [ + "ori(_decimals) one of [6]" + ], + "after_preds": [ + "ori(_decimals) one of [6]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 100000000000" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ], + "after_preds": [ + "Sum(_balances[...]) one of [100000000000]" + ] + }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, + { + "before_preds": [ + "_decimals one of [6]" + ], + "after_preds": [ + "_decimals one of [6]" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 100000000000" + ] + }, + { + "before_preds": [ + "_totalSupply one of [100000000000]" + ], + "after_preds": [ + "_totalSupply one of [100000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [100000000000]" + ] + }, + { + "before_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ], + "after_preds": [ + "elem of _balances[...] is one of [0,100000000000]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) == Sum(_balances[...])", + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json index b9b80d2..d4ac78e 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1600c2e08acb830f2a4ee4d34b48594dade48651-removed.json @@ -1,40 +1,4 @@ [ - { - "before_preds": [ - "ori(Sum(balances[...])) > 0", - "ori(Sum(balances[...])) == 5000000000000000000000000" - ], - "after_preds": [ - "ori(Sum(balances[...])) == 5000000000000000000000000" - ] - }, - { - "before_preds": [ - "ori(totalSupply_) > 0", - "ori(totalSupply_) == 5000000000000000000000000" - ], - "after_preds": [ - "ori(totalSupply_) == 5000000000000000000000000" - ] - }, - { - "before_preds": [ - "Sum(balances[...]) > 0", - "Sum(balances[...]) == 5000000000000000000000000" - ], - "after_preds": [ - "Sum(balances[...]) == 5000000000000000000000000" - ] - }, - { - "before_preds": [ - "totalSupply_ > 0", - "totalSupply_ == 5000000000000000000000000" - ], - "after_preds": [ - "totalSupply_ == 5000000000000000000000000" - ] - }, { "before_preds": [ "Sum(balances[...]) == ori(Sum(balances[...]))", @@ -45,52 +9,6 @@ "Sum(balances[...]) == ori(Sum(balances[...]))" ] }, - { - "before_preds": [ - "ori(totalSupply_) == totalSupply_", - "ori(totalSupply_) >= totalSupply_", - "ori(totalSupply_) <= totalSupply_" - ], - "after_preds": [ - "ori(totalSupply_) == totalSupply_" - ] - }, - { - "before_preds": [ - "ori(Sum(balances[...])) > 0", - "ori(Sum(balances[...])) == 5000000000000000000000000" - ], - "after_preds": [ - "ori(Sum(balances[...])) == 5000000000000000000000000" - ] - }, - { - "before_preds": [ - "ori(totalSupply_) > 0", - "ori(totalSupply_) == 5000000000000000000000000" - ], - "after_preds": [ - "ori(totalSupply_) == 5000000000000000000000000" - ] - }, - { - "before_preds": [ - "Sum(balances[...]) > 0", - "Sum(balances[...]) == 5000000000000000000000000" - ], - "after_preds": [ - "Sum(balances[...]) == 5000000000000000000000000" - ] - }, - { - "before_preds": [ - "totalSupply_ > 0", - "totalSupply_ == 5000000000000000000000000" - ], - "after_preds": [ - "totalSupply_ == 5000000000000000000000000" - ] - }, { "before_preds": [ "Sum(balances[...]) == ori(Sum(balances[...]))", @@ -101,34 +19,6 @@ "Sum(balances[...]) == ori(Sum(balances[...]))" ] }, - { - "before_preds": [ - "ori(totalSupply_) == totalSupply_", - "ori(totalSupply_) >= totalSupply_", - "ori(totalSupply_) <= totalSupply_" - ], - "after_preds": [ - "ori(totalSupply_) == totalSupply_" - ] - }, - { - "before_preds": [ - "ori(Sum(balances[...])) > 0", - "ori(Sum(balances[...])) == 5000000000000000000000000" - ], - "after_preds": [ - "ori(Sum(balances[...])) == 5000000000000000000000000" - ] - }, - { - "before_preds": [ - "ori(totalSupply_) > 0", - "ori(totalSupply_) == 5000000000000000000000000" - ], - "after_preds": [ - "ori(totalSupply_) == 5000000000000000000000000" - ] - }, { "before_preds": [ "ori(Sum(balances[...])) == ori(totalSupply_)", @@ -139,24 +29,6 @@ "ori(Sum(balances[...])) == ori(totalSupply_)" ] }, - { - "before_preds": [ - "Sum(balances[...]) > 0", - "Sum(balances[...]) == 5000000000000000000000000" - ], - "after_preds": [ - "Sum(balances[...]) == 5000000000000000000000000" - ] - }, - { - "before_preds": [ - "totalSupply_ > 0", - "totalSupply_ == 5000000000000000000000000" - ], - "after_preds": [ - "totalSupply_ == 5000000000000000000000000" - ] - }, { "before_preds": [ "Sum(balances[...]) == ori(Sum(balances[...]))", @@ -196,15 +68,5 @@ "after_preds": [ "ori(Sum(balances[...])) == totalSupply_" ] - }, - { - "before_preds": [ - "ori(totalSupply_) == totalSupply_", - "ori(totalSupply_) >= totalSupply_", - "ori(totalSupply_) <= totalSupply_" - ], - "after_preds": [ - "ori(totalSupply_) == totalSupply_" - ] } ] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-removed.json new file mode 100644 index 0000000..10fab79 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x1fee5588cb1de19c70b6ad5399152d8c643fae7b-removed.json @@ -0,0 +1,72 @@ +[ + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-removed.json new file mode 100644 index 0000000..906f7c5 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x28e57c27368d1475a3ce49a25c48c40b85e7f7e1-removed.json @@ -0,0 +1,219 @@ +[ + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= tokens", + "ori(Sum(allowed[msg.sender][...])) < tokens", + "ori(Sum(allowed[msg.sender][...])) != tokens" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) != tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) >= ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) <= ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "tokens >= ori(allowed[msg.sender][spender])", + "tokens > ori(allowed[msg.sender][spender])", + "tokens != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "tokens > ori(allowed[msg.sender][spender])", + "tokens != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= allowed[msg.sender][spender]", + "ori(Sum(allowed[msg.sender][...])) < allowed[msg.sender][spender]", + "ori(Sum(allowed[msg.sender][...])) != allowed[msg.sender][spender]" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) != allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] == tokens", + "allowed[msg.sender][spender] >= tokens", + "allowed[msg.sender][spender] <= tokens" + ], + "after_preds": [ + "allowed[msg.sender][spender] == tokens" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] > ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) == tokens", + "Sum(allowed[msg.sender][...]) >= tokens", + "Sum(allowed[msg.sender][...]) <= tokens" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) == tokens" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) >= ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) > ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "after_preds": [ + "ori(Sum(balances[...])) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens" + ], + "after_preds": [ + "ori(Sum(balances[...])) != tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) > balances[to]", + "ori(Sum(balances[...])) != balances[to]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[to]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "balances[to] >= ori(balances[to])", + "balances[to] > ori(balances[to])", + "balances[to] != ori(balances[to])" + ], + "after_preds": [ + "balances[to] != ori(balances[to])" + ] + }, + { + "before_preds": [ + "balances[to] <= Sum(balances[...])", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ], + "after_preds": [ + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]" + ], + "after_preds": [ + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "tokens <= Sum(balances[...])", + "tokens < Sum(balances[...])", + "tokens != Sum(balances[...])" + ], + "after_preds": [ + "tokens < Sum(balances[...])", + "tokens != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "balances[msg.sender] <= Sum(balances[...])", + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])" + ], + "after_preds": [ + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x37a15c92e67686aa268df03d4c881a76340907e8-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x37a15c92e67686aa268df03d4c881a76340907e8-removed.json new file mode 100644 index 0000000..ac87210 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x37a15c92e67686aa268df03d4c881a76340907e8-removed.json @@ -0,0 +1,168 @@ +[ + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= tokens", + "ori(allowed[msg.sender][spender]) < tokens", + "ori(allowed[msg.sender][spender]) != tokens" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) != tokens" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] > ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] == tokens", + "allowed[msg.sender][spender] >= tokens", + "allowed[msg.sender][spender] <= tokens" + ], + "after_preds": [ + "allowed[msg.sender][spender] == tokens" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "after_preds": [ + "ori(Sum(balances[...])) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens" + ], + "after_preds": [ + "ori(Sum(balances[...])) != tokens" + ] + }, + { + "before_preds": [ + "balances[to] <= ori(Sum(balances[...]))", + "balances[to] < ori(Sum(balances[...]))", + "balances[to] != ori(Sum(balances[...]))" + ], + "after_preds": [ + "balances[to] < ori(Sum(balances[...]))", + "balances[to] != ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "balances[to] >= ori(balances[to])", + "balances[to] > ori(balances[to])", + "balances[to] != ori(balances[to])" + ], + "after_preds": [ + "balances[to] != ori(balances[to])" + ] + }, + { + "before_preds": [ + "balances[to] <= Sum(balances[...])", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ], + "after_preds": [ + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "ori(balances[msg.sender]) >= balances[msg.sender]", + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]" + ], + "after_preds": [ + "ori(balances[msg.sender]) > balances[msg.sender]", + "ori(balances[msg.sender]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= tokens", + "Sum(balances[...]) > tokens", + "Sum(balances[...]) != tokens" + ], + "after_preds": [ + "Sum(balances[...]) != tokens" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= balances[msg.sender]", + "Sum(balances[...]) > balances[msg.sender]", + "Sum(balances[...]) != balances[msg.sender]" + ], + "after_preds": [ + "Sum(balances[...]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-removed.json new file mode 100644 index 0000000..114992b --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x3b2833cd4cfce20c04d0279ccbb8cd827c8bcdbf-removed.json @@ -0,0 +1,185 @@ +[ + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[account] >= ori(_balances[account])", + "_balances[account] > ori(_balances[account])", + "_balances[account] != ori(_balances[account])" + ], + "after_preds": [ + "_balances[account] != ori(_balances[account])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[account])", + "Sum(_balances[...]) > ori(_balances[account])", + "Sum(_balances[...]) != ori(_balances[account])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[account])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) > ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[account]) <= _totalSupply", + "ori(_balances[account]) < _totalSupply", + "ori(_balances[account]) != _totalSupply" + ], + "after_preds": [ + "ori(_balances[account]) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) <= _totalSupply", + "ori(Sum(_balances[...])) < _totalSupply", + "ori(Sum(_balances[...])) != _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _totalSupply" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_totalSupply)", + "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= _balances[recipient]", + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]" + ], + "after_preds": [ + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-removed.json new file mode 100644 index 0000000..6c21512 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x4d5d3170f407cacaaa328660c2ee2499055e3b07-removed.json @@ -0,0 +1,138 @@ +[ + { + "before_preds": [ + "ori(balanceOf[_to]) <= ori(Sum(balanceOf[...]))", + "ori(balanceOf[_to]) < ori(Sum(balanceOf[...]))", + "ori(balanceOf[_to]) != ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "ori(balanceOf[_to]) < ori(Sum(balanceOf[...]))", + "ori(balanceOf[_to]) != ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "_value <= ori(Sum(balanceOf[...]))", + "_value < ori(Sum(balanceOf[...]))", + "_value != ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "_value != ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "ori(balanceOf[_to]) <= Sum(balanceOf[...])", + "ori(balanceOf[_to]) < Sum(balanceOf[...])", + "ori(balanceOf[_to]) != Sum(balanceOf[...])" + ], + "after_preds": [ + "ori(balanceOf[_to]) < Sum(balanceOf[...])", + "ori(balanceOf[_to]) != Sum(balanceOf[...])" + ] + }, + { + "before_preds": [ + "balanceOf[msg.sender] <= Sum(balanceOf[...])", + "balanceOf[msg.sender] < Sum(balanceOf[...])", + "balanceOf[msg.sender] != Sum(balanceOf[...])" + ], + "after_preds": [ + "balanceOf[msg.sender] < Sum(balanceOf[...])", + "balanceOf[msg.sender] != Sum(balanceOf[...])" + ] + }, + { + "before_preds": [ + "balanceOf[msg.sender] <= ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] < ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] != ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "balanceOf[msg.sender] < ori(Sum(balanceOf[...]))", + "balanceOf[msg.sender] != ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "totalSupply == ori(totalSupply)", + "totalSupply >= ori(totalSupply)", + "totalSupply <= ori(totalSupply)" + ], + "after_preds": [ + "totalSupply == ori(totalSupply)" + ] + }, + { + "before_preds": [ + "_value <= Sum(balanceOf[...])", + "_value < Sum(balanceOf[...])", + "_value != Sum(balanceOf[...])" + ], + "after_preds": [ + "_value != Sum(balanceOf[...])" + ] + }, + { + "before_preds": [ + "balanceOf[_to] <= Sum(balanceOf[...])", + "balanceOf[_to] < Sum(balanceOf[...])", + "balanceOf[_to] != Sum(balanceOf[...])" + ], + "after_preds": [ + "balanceOf[_to] < Sum(balanceOf[...])", + "balanceOf[_to] != Sum(balanceOf[...])" + ] + }, + { + "before_preds": [ + "balanceOf[_to] <= ori(Sum(balanceOf[...]))", + "balanceOf[_to] < ori(Sum(balanceOf[...]))", + "balanceOf[_to] != ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "balanceOf[_to] < ori(Sum(balanceOf[...]))", + "balanceOf[_to] != ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) >= ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) <= ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) >= ori(Sum(balanceOf[...]))", + "Sum(balanceOf[...]) <= ori(Sum(balanceOf[...]))" + ], + "after_preds": [ + "Sum(balanceOf[...]) == ori(Sum(balanceOf[...]))" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x6f2a550259532f7429530dcb93d86269629e3f2a-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x6f2a550259532f7429530dcb93d86269629e3f2a-removed.json new file mode 100644 index 0000000..0c7f06b --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x6f2a550259532f7429530dcb93d86269629e3f2a-removed.json @@ -0,0 +1,167 @@ +[ + { + "before_preds": [ + "value >= ori(_allowances[msg.sender][spender])", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) >= ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) > ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_balances[recipient] <= Sum(_balances[...])", + "_balances[recipient] < Sum(_balances[...])", + "_balances[recipient] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[recipient] < Sum(_balances[...])", + "_balances[recipient] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x8b68591fe802585a9713bd6ebe75d6c285236c54-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x8b68591fe802585a9713bd6ebe75d6c285236c54-removed.json new file mode 100644 index 0000000..d95ce82 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x8b68591fe802585a9713bd6ebe75d6c285236c54-removed.json @@ -0,0 +1,409 @@ +[ + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= value", + "ori(_allowed[msg.sender][spender]) < value", + "ori(_allowed[msg.sender][spender]) != value" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) != value" + ] + }, + { + "before_preds": [ + "value >= ori(Sum(_allowed[msg.sender][...]))", + "value > ori(Sum(_allowed[msg.sender][...]))", + "value != ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "value > ori(Sum(_allowed[msg.sender][...]))", + "value != ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] >= ori(_allowed[msg.sender][spender])", + "_allowed[msg.sender][spender] > ori(_allowed[msg.sender][spender])", + "_allowed[msg.sender][spender] != ori(_allowed[msg.sender][spender])" + ], + "after_preds": [ + "_allowed[msg.sender][spender] != ori(_allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] == value", + "_allowed[msg.sender][spender] >= value", + "_allowed[msg.sender][spender] <= value" + ], + "after_preds": [ + "_allowed[msg.sender][spender] == value" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] >= ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] > ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] != ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "_allowed[msg.sender][spender] > ori(Sum(_allowed[msg.sender][...]))", + "_allowed[msg.sender][spender] != ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) >= ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) > ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= ori(_balances[to])", + "ori(_balances[msg.sender]) > ori(_balances[to])", + "ori(_balances[msg.sender]) != ori(_balances[to])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "value <= ori(_totalSupply)", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ], + "after_preds": [ + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "value <= ori(Sum(_balances[...]))", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= ori(_balances[to])", + "ori(_totalSupply) > ori(_balances[to])", + "ori(_totalSupply) != ori(_balances[to])" + ], + "after_preds": [ + "ori(_totalSupply) > ori(_balances[to])", + "ori(_totalSupply) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[to])", + "ori(Sum(_balances[...])) > ori(_balances[to])", + "ori(Sum(_balances[...])) != ori(_balances[to])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_totalSupply >= value", + "_totalSupply > value", + "_totalSupply != value" + ], + "after_preds": [ + "_totalSupply != value" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[to]", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ], + "after_preds": [ + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[to])", + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[msg.sender]", + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[to]", + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]" + ] + }, + { + "before_preds": [ + "value <= Sum(_balances[...])", + "value < Sum(_balances[...])", + "value != Sum(_balances[...])" + ], + "after_preds": [ + "value < Sum(_balances[...])", + "value != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= Sum(_balances[...])", + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _balances[msg.sender]", + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= _balances[to]", + "ori(_totalSupply) > _balances[to]", + "ori(_totalSupply) != _balances[to]" + ], + "after_preds": [ + "ori(_totalSupply) > _balances[to]", + "ori(_totalSupply) != _balances[to]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[msg.sender]", + "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) != _balances[msg.sender]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[to]", + "Sum(_balances[...]) > _balances[to]", + "Sum(_balances[...]) != _balances[to]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[to]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[to])", + "Sum(_balances[...]) > ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[to])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[to]", + "ori(Sum(_balances[...])) > _balances[to]", + "ori(Sum(_balances[...])) != _balances[to]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[to]" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "_balances[to] >= ori(_balances[to])", + "_balances[to] > ori(_balances[to])", + "_balances[to] != ori(_balances[to])" + ], + "after_preds": [ + "_balances[to] != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-removed.json new file mode 100644 index 0000000..f08cc07 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x923f3fe77732ec3fc5327eb52327b06be4e472f8-removed.json @@ -0,0 +1,147 @@ +[ + { + "before_preds": [ + "ori(_balances[recipient]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) >= ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) <= ori(Sum(_locked_balances[...]))" + ], + "after_preds": [ + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(Sum(_locked_balances[...]))", + "ori(Sum(_balances[...])) > ori(Sum(_locked_balances[...]))", + "ori(Sum(_balances[...])) != ori(Sum(_locked_balances[...]))" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(Sum(_locked_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_locked_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_locked_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) <= Sum(_balances[...])", + "Sum(_locked_balances[...]) < Sum(_balances[...])", + "Sum(_locked_balances[...]) != Sum(_balances[...])" + ], + "after_preds": [ + "Sum(_locked_balances[...]) < Sum(_balances[...])", + "Sum(_locked_balances[...]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) >= ori(Sum(_locked_balances[...]))", + "Sum(_locked_balances[...]) <= ori(Sum(_locked_balances[...]))" + ], + "after_preds": [ + "Sum(_locked_balances[...]) == ori(Sum(_locked_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(Sum(_locked_balances[...]))", + "Sum(_balances[...]) > ori(Sum(_locked_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_locked_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_locked_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-removed.json new file mode 100644 index 0000000..4154b27 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0x9fdbdd708b6f7247d57e9281e2073d2b88a67a42-removed.json @@ -0,0 +1,32 @@ +[ + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xb2923909b5d8bbe01505121f15a4503b6617dae7-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xb2923909b5d8bbe01505121f15a4503b6617dae7-removed.json new file mode 100644 index 0000000..911d3c1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xb2923909b5d8bbe01505121f15a4503b6617dae7-removed.json @@ -0,0 +1,136 @@ +[ + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "after_preds": [ + "ori(Sum(balances[...])) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens" + ], + "after_preds": [ + "ori(Sum(balances[...])) != tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) > balances[to]", + "ori(Sum(balances[...])) != balances[to]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[to]" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= balances[to]", + "ori(balances[to]) < balances[to]", + "ori(balances[to]) != balances[to]" + ], + "after_preds": [ + "ori(balances[to]) < balances[to]", + "ori(balances[to]) != balances[to]" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "balances[msg.sender] <= ori(balances[msg.sender])", + "balances[msg.sender] < ori(balances[msg.sender])", + "balances[msg.sender] != ori(balances[msg.sender])" + ], + "after_preds": [ + "balances[msg.sender] != ori(balances[msg.sender])" + ] + }, + { + "before_preds": [ + "balances[msg.sender] <= Sum(balances[...])", + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])" + ], + "after_preds": [ + "balances[msg.sender] < Sum(balances[...])", + "balances[msg.sender] != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "balances[to] <= Sum(balances[...])", + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ], + "after_preds": [ + "balances[to] < Sum(balances[...])", + "balances[to] != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= tokens", + "Sum(balances[...]) > tokens", + "Sum(balances[...]) != tokens" + ], + "after_preds": [ + "Sum(balances[...]) != tokens" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-removed.json new file mode 100644 index 0000000..1e7a116 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xbc7d4fb8595f4b923ec53533f4bbd641c1910aca-removed.json @@ -0,0 +1,820 @@ +[ + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= value", + "ori(_allowed[msg.sender][spender]) < value", + "ori(_allowed[msg.sender][spender]) != value" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) != value" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) < Sum(_allowed[msg.sender][...])", + "ori(_allowed[msg.sender][spender]) != Sum(_allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_allowed[msg.sender][spender]) <= _allowed[msg.sender][spender]", + "ori(_allowed[msg.sender][spender]) < _allowed[msg.sender][spender]", + "ori(_allowed[msg.sender][spender]) != _allowed[msg.sender][spender]" + ], + "after_preds": [ + "ori(_allowed[msg.sender][spender]) < _allowed[msg.sender][spender]", + "ori(_allowed[msg.sender][spender]) != _allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "Sum(_allowed[msg.sender][...]) >= ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) > ori(Sum(_allowed[msg.sender][...]))", + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))" + ], + "after_preds": [ + "Sum(_allowed[msg.sender][...]) != ori(Sum(_allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "_allowed[msg.sender][spender] == value", + "_allowed[msg.sender][spender] >= value", + "_allowed[msg.sender][spender] <= value" + ], + "after_preds": [ + "_allowed[msg.sender][spender] == value" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) >= ori(_balances[to])", + "ori(maxTxAmount) > ori(_balances[to])", + "ori(maxTxAmount) != ori(_balances[to])" + ], + "after_preds": [ + "ori(maxTxAmount) > ori(_balances[to])", + "ori(maxTxAmount) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= ori(_balances[msg.sender])", + "ori(maxTxAmount) < ori(_balances[msg.sender])", + "ori(maxTxAmount) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(maxTxAmount) < ori(_balances[msg.sender])", + "ori(maxTxAmount) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) >= value", + "ori(maxTxAmount) > value", + "ori(maxTxAmount) != value" + ], + "after_preds": [ + "ori(maxTxAmount) != value" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= ori(_totalSupply)", + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= ori(Sum(_balances[...]))", + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= ori(_balances[msg.sender])", + "ori(_balances[to]) < ori(_balances[msg.sender])", + "ori(_balances[to]) != ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_balances[to]) < ori(_balances[msg.sender])", + "ori(_balances[to]) != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= value", + "ori(_balances[to]) < value", + "ori(_balances[to]) != value" + ], + "after_preds": [ + "ori(_balances[to]) != value" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= ori(_totalSupply)", + "ori(_balances[to]) < ori(_totalSupply)", + "ori(_balances[to]) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[to]) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= ori(Sum(_balances[...]))", + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= value", + "ori(_balances[msg.sender]) > value", + "ori(_balances[msg.sender]) != value" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != value" + ] + }, + { + "before_preds": [ + "value <= ori(_totalSupply)", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ], + "after_preds": [ + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "value <= ori(Sum(_balances[...]))", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= ori(maxTxAmount)", + "_balances[msg.sender] > ori(maxTxAmount)", + "_balances[msg.sender] != ori(maxTxAmount)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(maxTxAmount)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= ori(_balances[to])", + "_balances[msg.sender] > ori(_balances[to])", + "_balances[msg.sender] != ori(_balances[to])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= _totalSupply", + "_balances[msg.sender] < _totalSupply", + "_balances[msg.sender] != _totalSupply" + ], + "after_preds": [ + "_balances[msg.sender] != _totalSupply" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= value", + "_balances[msg.sender] > value", + "_balances[msg.sender] != value" + ], + "after_preds": [ + "_balances[msg.sender] != value" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= _balances[to]", + "_balances[msg.sender] > _balances[to]", + "_balances[msg.sender] != _balances[to]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[to]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_totalSupply)", + "_balances[msg.sender] < ori(_totalSupply)", + "_balances[msg.sender] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] >= maxTxAmount", + "_balances[msg.sender] > maxTxAmount", + "_balances[msg.sender] != maxTxAmount" + ], + "after_preds": [ + "_balances[msg.sender] != maxTxAmount" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= Sum(_balances[...])", + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= _totalSupply", + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply" + ], + "after_preds": [ + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) >= _balances[to]", + "ori(maxTxAmount) > _balances[to]", + "ori(maxTxAmount) != _balances[to]" + ], + "after_preds": [ + "ori(maxTxAmount) > _balances[to]", + "ori(maxTxAmount) != _balances[to]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[to])", + "Sum(_balances[...]) > ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[to])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= value", + "Sum(_balances[...]) > value", + "Sum(_balances[...]) != value" + ], + "after_preds": [ + "Sum(_balances[...]) != value" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[to]", + "Sum(_balances[...]) > _balances[to]", + "Sum(_balances[...]) != _balances[to]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[to]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(_totalSupply)", + "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= maxTxAmount", + "Sum(_balances[...]) > maxTxAmount", + "Sum(_balances[...]) != maxTxAmount" + ], + "after_preds": [ + "Sum(_balances[...]) != maxTxAmount" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) <= ori(Sum(_balances[...]))", + "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= _totalSupply", + "ori(_balances[to]) < _totalSupply", + "ori(_balances[to]) != _totalSupply" + ], + "after_preds": [ + "ori(_balances[to]) != _totalSupply" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= _balances[to]", + "ori(_balances[to]) < _balances[to]", + "ori(_balances[to]) != _balances[to]" + ], + "after_preds": [ + "ori(_balances[to]) < _balances[to]", + "ori(_balances[to]) != _balances[to]" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= maxTxAmount", + "ori(_balances[to]) < maxTxAmount", + "ori(_balances[to]) != maxTxAmount" + ], + "after_preds": [ + "ori(_balances[to]) != maxTxAmount" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= _balances[to]", + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > _balances[to]", + "ori(_balances[msg.sender]) != _balances[to]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= maxTxAmount", + "ori(_balances[msg.sender]) > maxTxAmount", + "ori(_balances[msg.sender]) != maxTxAmount" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != maxTxAmount" + ] + }, + { + "before_preds": [ + "_totalSupply >= value", + "_totalSupply > value", + "_totalSupply != value" + ], + "after_preds": [ + "_totalSupply != value" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[to]", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ], + "after_preds": [ + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(_totalSupply)", + "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_totalSupply >= maxTxAmount", + "_totalSupply > maxTxAmount", + "_totalSupply != maxTxAmount" + ], + "after_preds": [ + "_totalSupply != maxTxAmount" + ] + }, + { + "before_preds": [ + "_totalSupply <= ori(Sum(_balances[...]))", + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "value >= _balances[to]", + "value > _balances[to]", + "value != _balances[to]" + ], + "after_preds": [ + "value > _balances[to]", + "value != _balances[to]" + ] + }, + { + "before_preds": [ + "value <= maxTxAmount", + "value < maxTxAmount", + "value != maxTxAmount" + ], + "after_preds": [ + "value < maxTxAmount", + "value != maxTxAmount" + ] + }, + { + "before_preds": [ + "_balances[to] <= ori(_totalSupply)", + "_balances[to] < ori(_totalSupply)", + "_balances[to] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[to] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[to] <= maxTxAmount", + "_balances[to] < maxTxAmount", + "_balances[to] != maxTxAmount" + ], + "after_preds": [ + "_balances[to] != maxTxAmount" + ] + }, + { + "before_preds": [ + "_balances[to] <= ori(Sum(_balances[...]))", + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= maxTxAmount", + "ori(_totalSupply) > maxTxAmount", + "ori(_totalSupply) != maxTxAmount" + ], + "after_preds": [ + "ori(_totalSupply) != maxTxAmount" + ] + }, + { + "before_preds": [ + "maxTxAmount <= ori(Sum(_balances[...]))", + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= ori(_totalSupply)", + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(maxTxAmount) < ori(_totalSupply)", + "ori(maxTxAmount) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= ori(Sum(_balances[...]))", + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(maxTxAmount) < ori(Sum(_balances[...]))", + "ori(maxTxAmount) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= Sum(_balances[...])", + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(maxTxAmount) < Sum(_balances[...])", + "ori(maxTxAmount) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(maxTxAmount) <= _totalSupply", + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply" + ], + "after_preds": [ + "ori(maxTxAmount) < _totalSupply", + "ori(maxTxAmount) != _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= maxTxAmount", + "Sum(_balances[...]) > maxTxAmount", + "Sum(_balances[...]) != maxTxAmount" + ], + "after_preds": [ + "Sum(_balances[...]) != maxTxAmount" + ] + }, + { + "before_preds": [ + "_totalSupply >= maxTxAmount", + "_totalSupply > maxTxAmount", + "_totalSupply != maxTxAmount" + ], + "after_preds": [ + "_totalSupply != maxTxAmount" + ] + }, + { + "before_preds": [ + "_burnStopAmount == ori(_burnStopAmount)", + "_burnStopAmount >= ori(_burnStopAmount)", + "_burnStopAmount <= ori(_burnStopAmount)" + ], + "after_preds": [ + "_burnStopAmount == ori(_burnStopAmount)" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) >= maxTxAmount", + "ori(_totalSupply) > maxTxAmount", + "ori(_totalSupply) != maxTxAmount" + ], + "after_preds": [ + "ori(_totalSupply) != maxTxAmount" + ] + }, + { + "before_preds": [ + "maxTxAmount <= ori(Sum(_balances[...]))", + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "maxTxAmount < ori(Sum(_balances[...]))", + "maxTxAmount != ori(Sum(_balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xc382e04099a435439725bb40647e2b32dc136806-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xc382e04099a435439725bb40647e2b32dc136806-removed.json new file mode 100644 index 0000000..96d35dd --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xc382e04099a435439725bb40647e2b32dc136806-removed.json @@ -0,0 +1,208 @@ +[ + { + "before_preds": [ + "value >= ori(_allowances[msg.sender][spender])", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "value >= ori(Sum(_allowances[msg.sender][...]))", + "value > ori(Sum(_allowances[msg.sender][...]))", + "value != ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "value > ori(Sum(_allowances[msg.sender][...]))", + "value != ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) >= ori(_allowances[msg.sender][spender])", + "Sum(_allowances[msg.sender][...]) > ori(_allowances[msg.sender][spender])", + "Sum(_allowances[msg.sender][...]) != ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) != ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) >= ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) > ori(Sum(_allowances[msg.sender][...]))", + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) != ori(Sum(_allowances[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "Sum(_allowances[msg.sender][...]) == _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) >= _allowances[msg.sender][spender]", + "Sum(_allowances[msg.sender][...]) <= _allowances[msg.sender][spender]" + ], + "after_preds": [ + "Sum(_allowances[msg.sender][...]) == _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= Sum(_balances[...])", + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ], + "after_preds": [ + "ori(_balances[recipient]) < Sum(_balances[...])", + "ori(_balances[recipient]) != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-removed.json new file mode 100644 index 0000000..ccc3895 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xcc494c97a5d4374ec35bda83570c461c6d6f6079-removed.json @@ -0,0 +1,233 @@ +[ + { + "before_preds": [ + "value <= ori(_totalSupply)", + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ], + "after_preds": [ + "value < ori(_totalSupply)", + "value != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "value <= ori(Sum(_balances[...]))", + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "value < ori(Sum(_balances[...]))", + "value != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= ori(_totalSupply)", + "ori(_balances[to]) < ori(_totalSupply)", + "ori(_balances[to]) != ori(_totalSupply)" + ], + "after_preds": [ + "ori(_balances[to]) != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "ori(_balances[to]) <= ori(Sum(_balances[...]))", + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[to]) < ori(Sum(_balances[...]))", + "ori(_balances[to]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply >= value", + "_totalSupply > value", + "_totalSupply != value" + ], + "after_preds": [ + "_totalSupply != value" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[msg.sender]", + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply >= _balances[to]", + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ], + "after_preds": [ + "_totalSupply > _balances[to]", + "_totalSupply != _balances[to]" + ] + }, + { + "before_preds": [ + "_totalSupply >= ori(_balances[to])", + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])" + ], + "after_preds": [ + "_totalSupply > ori(_balances[to])", + "_totalSupply != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "basePercent == ori(basePercent)", + "basePercent >= ori(basePercent)", + "basePercent <= ori(basePercent)" + ], + "after_preds": [ + "basePercent == ori(basePercent)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "value <= Sum(_balances[...])", + "value < Sum(_balances[...])", + "value != Sum(_balances[...])" + ], + "after_preds": [ + "value < Sum(_balances[...])", + "value != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_totalSupply)", + "_balances[msg.sender] < ori(_totalSupply)", + "_balances[msg.sender] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[to] <= Sum(_balances[...])", + "_balances[to] < Sum(_balances[...])", + "_balances[to] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[to] < Sum(_balances[...])", + "_balances[to] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[to] <= ori(_totalSupply)", + "_balances[to] < ori(_totalSupply)", + "_balances[to] != ori(_totalSupply)" + ], + "after_preds": [ + "_balances[to] != ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "_balances[to] <= ori(Sum(_balances[...]))", + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[to] < ori(Sum(_balances[...]))", + "_balances[to] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[to])", + "Sum(_balances[...]) > ori(_balances[to])", + "Sum(_balances[...]) != ori(_balances[to])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[to])" + ] + }, + { + "before_preds": [ + "basePercent == ori(basePercent)", + "basePercent >= ori(basePercent)", + "basePercent <= ori(basePercent)" + ], + "after_preds": [ + "basePercent == ori(basePercent)" + ] + }, + { + "before_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)", + "_lastTokenSupply >= ori(_lastTokenSupply)", + "_lastTokenSupply <= ori(_lastTokenSupply)" + ], + "after_preds": [ + "_lastTokenSupply == ori(_lastTokenSupply)" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-removed.json new file mode 100644 index 0000000..744fa8c --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xce90d1d98b5ca16b79c7eedada2454c2564da59e-removed.json @@ -0,0 +1,230 @@ +[ + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= value", + "ori(Sum(_allowances[msg.sender][...])) < value", + "ori(Sum(_allowances[msg.sender][...])) != value" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) != value" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) >= ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) <= ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "value >= ori(_allowances[msg.sender][spender])", + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "value > ori(_allowances[msg.sender][spender])", + "value != ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] == value", + "_allowances[msg.sender][spender] >= value", + "_allowances[msg.sender][spender] <= value" + ], + "after_preds": [ + "_allowances[msg.sender][spender] == value" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] >= ori(_allowances[msg.sender][spender])", + "_allowances[msg.sender][spender] > ori(_allowances[msg.sender][spender])", + "_allowances[msg.sender][spender] != ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "_allowances[msg.sender][spender] != ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= ori(Sum(_balances[...]))", + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[recipient]) < ori(Sum(_balances[...]))", + "ori(_balances[recipient]) != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(Sum(_balances[...]))", + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]" + ], + "after_preds": [ + "Sum(_balances[...]) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[recipient]) <= _balances[recipient]", + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]" + ], + "after_preds": [ + "ori(_balances[recipient]) < _balances[recipient]", + "ori(_balances[recipient]) != _balances[recipient]" + ] + }, + { + "before_preds": [ + "_balances[recipient] <= ori(Sum(_balances[...]))", + "_balances[recipient] < ori(Sum(_balances[...]))", + "_balances[recipient] != ori(Sum(_balances[...]))" + ], + "after_preds": [ + "_balances[recipient] < ori(Sum(_balances[...]))", + "_balances[recipient] != ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(_totalSupply)", + "Sum(_balances[...]) >= ori(_totalSupply)", + "Sum(_balances[...]) <= ori(_totalSupply)" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-removed.json new file mode 100644 index 0000000..a40fac1 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xd4ac90e33ac839c29a3d98c807eeef0c4508bee8-removed.json @@ -0,0 +1,186 @@ +[ + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= tokens", + "ori(allowed[msg.sender][spender]) < tokens", + "ori(allowed[msg.sender][spender]) != tokens" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) != tokens" + ] + }, + { + "before_preds": [ + "tokens >= ori(Sum(allowed[msg.sender][...]))", + "tokens > ori(Sum(allowed[msg.sender][...]))", + "tokens != ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "tokens > ori(Sum(allowed[msg.sender][...]))", + "tokens != ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) < Sum(allowed[msg.sender][...])", + "ori(allowed[msg.sender][spender]) != Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= allowed[msg.sender][spender]", + "ori(allowed[msg.sender][spender]) < allowed[msg.sender][spender]", + "ori(allowed[msg.sender][spender]) != allowed[msg.sender][spender]" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) < allowed[msg.sender][spender]", + "ori(allowed[msg.sender][spender]) != allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) == allowed[msg.sender][spender]", + "Sum(allowed[msg.sender][...]) >= allowed[msg.sender][spender]", + "Sum(allowed[msg.sender][...]) <= allowed[msg.sender][spender]" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) == allowed[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) >= ori(Sum(allowed[msg.sender][...]))", + "Sum(allowed[msg.sender][...]) > ori(Sum(allowed[msg.sender][...]))", + "Sum(allowed[msg.sender][...]) != ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) != ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "after_preds": [ + "ori(Sum(balances[...])) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= ori(balances[to])", + "Sum(balances[...]) > ori(balances[to])", + "Sum(balances[...]) != ori(balances[to])" + ], + "after_preds": [ + "Sum(balances[...]) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= balances[msg.sender]", + "Sum(balances[...]) > balances[msg.sender]", + "Sum(balances[...]) != balances[msg.sender]" + ], + "after_preds": [ + "Sum(balances[...]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xeeb690a0c9958e5375eda5694e754b125a6c972c-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xeeb690a0c9958e5375eda5694e754b125a6c972c-removed.json new file mode 100644 index 0000000..5d2964d --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xeeb690a0c9958e5375eda5694e754b125a6c972c-removed.json @@ -0,0 +1,215 @@ +[ + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) >= ori(allowed[msg.sender][spender])", + "ori(Sum(allowed[msg.sender][...])) <= ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) == ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= tokens", + "ori(Sum(allowed[msg.sender][...])) < tokens", + "ori(Sum(allowed[msg.sender][...])) != tokens" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) != tokens" + ] + }, + { + "before_preds": [ + "ori(allowed[msg.sender][spender]) <= tokens", + "ori(allowed[msg.sender][spender]) < tokens", + "ori(allowed[msg.sender][spender]) != tokens" + ], + "after_preds": [ + "ori(allowed[msg.sender][spender]) != tokens" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))" + ], + "after_preds": [ + "allowed[msg.sender][spender] > ori(Sum(allowed[msg.sender][...]))", + "allowed[msg.sender][spender] != ori(Sum(allowed[msg.sender][...]))" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] >= ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] > ori(allowed[msg.sender][spender])", + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "allowed[msg.sender][spender] != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "allowed[msg.sender][spender] == tokens", + "allowed[msg.sender][spender] >= tokens", + "allowed[msg.sender][spender] <= tokens" + ], + "after_preds": [ + "allowed[msg.sender][spender] == tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(allowed[msg.sender][...])) <= Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(allowed[msg.sender][...])) < Sum(allowed[msg.sender][...])", + "ori(Sum(allowed[msg.sender][...])) != Sum(allowed[msg.sender][...])" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) >= ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) > ori(allowed[msg.sender][spender])", + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) != ori(allowed[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "Sum(allowed[msg.sender][...]) == tokens", + "Sum(allowed[msg.sender][...]) >= tokens", + "Sum(allowed[msg.sender][...]) <= tokens" + ], + "after_preds": [ + "Sum(allowed[msg.sender][...]) == tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= ori(balances[to])", + "ori(Sum(balances[...])) > ori(balances[to])", + "ori(Sum(balances[...])) != ori(balances[to])" + ], + "after_preds": [ + "ori(Sum(balances[...])) != ori(balances[to])" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= tokens", + "ori(Sum(balances[...])) > tokens", + "ori(Sum(balances[...])) != tokens" + ], + "after_preds": [ + "ori(Sum(balances[...])) != tokens" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[to]", + "ori(Sum(balances[...])) > balances[to]", + "ori(Sum(balances[...])) != balances[to]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[to]" + ] + }, + { + "before_preds": [ + "ori(Sum(balances[...])) >= balances[msg.sender]", + "ori(Sum(balances[...])) > balances[msg.sender]", + "ori(Sum(balances[...])) != balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(balances[...])) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "decimals == ori(decimals)", + "decimals >= ori(decimals)", + "decimals <= ori(decimals)" + ], + "after_preds": [ + "decimals == ori(decimals)" + ] + }, + { + "before_preds": [ + "ori(balances[to]) <= Sum(balances[...])", + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ], + "after_preds": [ + "ori(balances[to]) < Sum(balances[...])", + "ori(balances[to]) != Sum(balances[...])" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= balances[to]", + "Sum(balances[...]) > balances[to]", + "Sum(balances[...]) != balances[to]" + ], + "after_preds": [ + "Sum(balances[...]) != balances[to]" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= tokens", + "Sum(balances[...]) > tokens", + "Sum(balances[...]) != tokens" + ], + "after_preds": [ + "Sum(balances[...]) != tokens" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) >= balances[msg.sender]", + "Sum(balances[...]) > balances[msg.sender]", + "Sum(balances[...]) != balances[msg.sender]" + ], + "after_preds": [ + "Sum(balances[...]) != balances[msg.sender]" + ] + }, + { + "before_preds": [ + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" + ], + "after_preds": [ + "_totalSupply == ori(_totalSupply)" + ] + }, + { + "before_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))", + "Sum(balances[...]) >= ori(Sum(balances[...]))", + "Sum(balances[...]) <= ori(Sum(balances[...]))" + ], + "after_preds": [ + "Sum(balances[...]) == ori(Sum(balances[...]))" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-removed.json new file mode 100644 index 0000000..3641fa4 --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/erc20/removed/0xf61ae54b74a37be4fc11e9f1a35021848d996afc-removed.json @@ -0,0 +1,266 @@ +[ + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) >= ori(_allowances[msg.sender][spender])", + "ori(Sum(_allowances[msg.sender][...])) <= ori(_allowances[msg.sender][spender])" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) == ori(_allowances[msg.sender][spender])" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= value", + "ori(Sum(_allowances[msg.sender][...])) < value", + "ori(Sum(_allowances[msg.sender][...])) != value" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) != value" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= value", + "ori(_allowances[msg.sender][spender]) < value", + "ori(_allowances[msg.sender][spender]) != value" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) != value" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) < _allowances[msg.sender][spender]", + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_allowances[msg.sender][...])) <= Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "ori(Sum(_allowances[msg.sender][...])) < Sum(_allowances[msg.sender][...])", + "ori(Sum(_allowances[msg.sender][...])) != Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < _allowances[msg.sender][spender]", + "ori(_allowances[msg.sender][spender]) != _allowances[msg.sender][spender]" + ] + }, + { + "before_preds": [ + "ori(_allowances[msg.sender][spender]) <= Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ], + "after_preds": [ + "ori(_allowances[msg.sender][spender]) < Sum(_allowances[msg.sender][...])", + "ori(_allowances[msg.sender][spender]) != Sum(_allowances[msg.sender][...])" + ] + }, + { + "before_preds": [ + "_allowances[msg.sender][spender] == value", + "_allowances[msg.sender][spender] >= value", + "_allowances[msg.sender][spender] <= value" + ], + "after_preds": [ + "_allowances[msg.sender][spender] == value" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= ori(_balances[recipient])", + "ori(Sum(_balances[...])) > ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) >= ori(_balances[recipient])", + "ori(_balances[msg.sender]) > ori(_balances[recipient])", + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ], + "after_preds": [ + "ori(_balances[msg.sender]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) >= _balances[msg.sender]", + "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) != _balances[msg.sender]" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _balances[recipient]", + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) <= _balances[recipient]" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _balances[recipient]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= _balances[recipient]", + "_balances[msg.sender] < _balances[recipient]", + "_balances[msg.sender] != _balances[recipient]" + ], + "after_preds": [ + "_balances[msg.sender] != _balances[recipient]" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= ori(_balances[msg.sender])", + "_balances[msg.sender] < ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[msg.sender] != ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] <= Sum(_balances[...])", + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ], + "after_preds": [ + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_balances[msg.sender] == ori(_balances[recipient])", + "_balances[msg.sender] >= ori(_balances[recipient])", + "_balances[msg.sender] <= ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[msg.sender] == ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "_balances[recipient] == ori(_balances[msg.sender])", + "_balances[recipient] >= ori(_balances[msg.sender])", + "_balances[recipient] <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "_balances[recipient] == ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])" + ], + "after_preds": [ + "_balances[recipient] != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" + ], + "after_preds": [ + "Sum(_balances[...]) != ori(_balances[recipient])" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "Sum(_balances[...]) == ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "Sum(_balances[...]) == _totalSupply", + "Sum(_balances[...]) >= _totalSupply", + "Sum(_balances[...]) <= _totalSupply" + ], + "after_preds": [ + "Sum(_balances[...]) == _totalSupply" + ] + }, + { + "before_preds": [ + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" + ], + "after_preds": [ + "_decimals == ori(_decimals)" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == _totalSupply", + "ori(Sum(_balances[...])) >= _totalSupply", + "ori(Sum(_balances[...])) <= _totalSupply" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == _totalSupply" + ] + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok.json b/use-cases/dynamically-mined-invariant-denoising/output/sok.json new file mode 100644 index 0000000..103323c --- /dev/null +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok.json @@ -0,0 +1,82 @@ +[ + { + "predicates_before_reduction": 1491, + "predicates_after_reduction": 924, + "reduction_ratio": 0.6197183098591549, + "total_parsing_time": 0.003945112228393555, + "total_reduction_time": 51.6808500289917, + "contract": "./invariants/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-bVault.inv.json" + }, + { + "predicates_before_reduction": 88, + "predicates_after_reduction": 70, + "reduction_ratio": 0.7954545454545454, + "total_parsing_time": 0.0003712177276611328, + "total_reduction_time": 1.672656774520874, + "contract": "./invariants/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522-AnyswapV4Router.inv.json" + }, + { + "predicates_before_reduction": 45, + "predicates_after_reduction": 33, + "reduction_ratio": 0.7333333333333333, + "total_parsing_time": 0.0002181529998779297, + "total_reduction_time": 1.381868839263916, + "contract": "./invariants/sok/0x39b1df026010b5aea781f90542ee19e900f2db15-Keep3rV2Oracle.inv.json" + }, + { + "predicates_before_reduction": 708, + "predicates_after_reduction": 430, + "reduction_ratio": 0.6073446327683616, + "total_parsing_time": 0.002055644989013672, + "total_reduction_time": 31.290276527404785, + "contract": "./invariants/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-Bank.inv.json" + }, + { + "predicates_before_reduction": 141, + "predicates_after_reduction": 130, + "reduction_ratio": 0.9219858156028369, + "total_parsing_time": 0.0005276203155517578, + "total_reduction_time": 3.0120651721954346, + "contract": "./invariants/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755-KyberNetworkProxy.inv.json" + }, + { + "predicates_before_reduction": 39, + "predicates_after_reduction": 39, + "reduction_ratio": 1.0, + "total_parsing_time": 0.00020503997802734375, + "total_reduction_time": 1.025242567062378, + "contract": "./invariants/sok/0x6684977bbed67e101bb80fc07fccfba655c0a64f-SushiMaker.inv.json" + }, + { + "predicates_before_reduction": 330, + "predicates_after_reduction": 274, + "reduction_ratio": 0.8303030303030303, + "total_parsing_time": 0.0010573863983154297, + "total_reduction_time": 8.86786961555481, + "contract": "./invariants/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210-ControllerV4.inv.json" + }, + { + "predicates_before_reduction": 299, + "predicates_after_reduction": 220, + "reduction_ratio": 0.7357859531772575, + "total_parsing_time": 0.0009560585021972656, + "total_reduction_time": 10.77918028831482, + "contract": "./invariants/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61-UFragments.inv.json" + }, + { + "predicates_before_reduction": 468, + "predicates_after_reduction": 293, + "reduction_ratio": 0.6260683760683761, + "total_parsing_time": 0.001405954360961914, + "total_reduction_time": 16.010133504867554, + "contract": "./invariants/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952-yVault.inv.json" + }, + { + "predicates_before_reduction": 56, + "predicates_after_reduction": 56, + "reduction_ratio": 1.0, + "total_parsing_time": 0.00022912025451660156, + "total_reduction_time": 1.5980191230773926, + "contract": "./invariants/sok/0xe11fc0b43ab98eb91e9836129d1ee7c3bc95df50-SushiMaker.inv.json" + } +] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json index e1bab50..affd560 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x39b1df026010b5aea781f90542ee19e900f2db15.json @@ -40,8 +40,12 @@ "length == 0", "length one of [0]", "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112", "e10 == ori(e10)", - "ori(length) == length" + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" ], "falsified_preconditions": [], "falsified_postconditions": [] @@ -75,8 +79,12 @@ "length == 0", "length one of [0]", "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112", "e10 == ori(e10)", - "ori(length) == length" + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" ], "falsified_preconditions": [], "falsified_postconditions": [] diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json index 721f165..079a446 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0.json @@ -4,10 +4,13 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(feeMax) > 0", "ori(feeMax) == 1000", "ori(feeMax) one of [1000]", + "amount > 0", "amount == 79228162514000000000000000000", "amount one of [79228162514000000000000000000]", + "ori(fee2) > 0", "ori(fee2) == 3", "ori(fee2) one of [3]", "ori(Sum(_balances[...])) > 0", @@ -15,17 +18,20 @@ "ori(earnLowerlimit) > 0", "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]", "ori(feeAddress) != 0", + "ori(fee3) > 0", "ori(fee3) == 1", "ori(fee3) one of [1]", "msg.sender != 0", "ori(governance) != 0", "ori(token) != 0", "ori(controller) != 0", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(timelock) != 0", "msg.value == 0", "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", "ori(depositWithdrawInterval) == 60", "ori(depositWithdrawInterval) one of [60]", "spender != 0", @@ -33,22 +39,27 @@ "ori(fee1) one of [10,5]", "ori(Sum(userDepoistTime[...])) > 0", "ori(_totalSupply) > 0", + "ori(_decimals) > 0", "ori(_decimals) == 6", "ori(_decimals) one of [6]" ], "postconditions": [ "Sum(_balances[...]) > 0", + "depositWithdrawInterval > 0", "depositWithdrawInterval == 60", "depositWithdrawInterval one of [60]", + "min > 0", "min == 9500", "min one of [9500]", "token != 0", + "fee3 > 0", "fee3 == 1", "fee3 one of [1]", "elem of _balances[...] is one of [860260929152]", "_totalSupply > 0", "Sum(userDepoistTime[...]) > 0", "timelock != 0", + "fee2 > 0", "fee2 == 3", "fee2 one of [3]", "fee1 > 0", @@ -56,8 +67,10 @@ "controller != 0", "earnLowerlimit > 0", "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", "feeMax == 1000", "feeMax one of [1000]", + "_decimals > 0", "_decimals == 6", "_decimals one of [6]", "elem of userDepoistTime[...] is one of [51597976325]", @@ -66,14 +79,22 @@ "governance != 0", "Sum(_balances[...]) == ori(Sum(_balances[...]))", "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", "ori(RestrictContractCall) == RestrictContractCall", "depositWithdrawInterval == ori(depositWithdrawInterval)", "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", "ori(feeAddress) == feeAddress", "min == ori(min)", "token == ori(token)", "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", "ori(governance) == governance", "ori(controller) == controller", "_totalSupply == ori(_totalSupply)", @@ -117,9 +138,11 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(feeMax) > 0", "ori(feeMax) == 1000", "ori(feeMax) one of [1000]", "_amount > 0", + "ori(fee2) > 0", "ori(fee2) == 3", "ori(fee2) one of [3]", "ori(RestrictContractCall) == true", @@ -127,6 +150,7 @@ "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]", "ori(feeAddress) != 0", "ori(userDepoistTime[msg.sender]) one of [0,1611890956,1612413709,1612672271,1612709011,1612516662]", + "ori(fee3) > 0", "ori(fee3) == 1", "ori(fee3) one of [1]", "msg.sender != 0", @@ -134,32 +158,40 @@ "ori(token) != 0", "ori(controller) != 0", "ori(_balances[msg.sender]) one of [0,494036168419,501354600,72,9986072971,9975667988]", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(timelock) != 0", "msg.value == 0", "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", "ori(depositWithdrawInterval) == 60", "ori(depositWithdrawInterval) one of [60]", "ori(fee1) > 0", "ori(fee1) one of [10,5]", + "ori(_decimals) > 0", "ori(_decimals) == 6", "ori(_decimals) one of [6]", - "ori(Sum(_balances[...])) < ori(earnLowerlimit)", + "ori(Sum(_balances[...])) != ori(earnLowerlimit)", "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", "ori(Sum(_balances[...])) == ori(_totalSupply)", "ori(earnLowerlimit) > ori(_balances[msg.sender])", + "ori(earnLowerlimit) != ori(_balances[msg.sender])", "ori(earnLowerlimit) > ori(_totalSupply)", + "ori(earnLowerlimit) != ori(_totalSupply)", "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))", "ori(_balances[msg.sender]) <= ori(_totalSupply)" ], "postconditions": [ "Sum(_balances[...]) > 0", + "depositWithdrawInterval > 0", "depositWithdrawInterval == 60", "depositWithdrawInterval one of [60]", + "min > 0", "min == 9500", "min one of [9500]", "token != 0", + "fee3 > 0", "fee3 == 1", "fee3 one of [1]", "elem of _balances[...] is one of [860260929152]", @@ -167,6 +199,7 @@ "_totalSupply > 0", "Sum(userDepoistTime[...]) > 0", "timelock != 0", + "fee2 > 0", "fee2 == 3", "fee2 one of [3]", "fee1 > 0", @@ -174,8 +207,10 @@ "controller != 0", "earnLowerlimit > 0", "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", "feeMax == 1000", "feeMax one of [1000]", + "_decimals > 0", "_decimals == 6", "_decimals one of [6]", "elem of userDepoistTime[...] is one of [51597976325]", @@ -183,44 +218,54 @@ "userDepoistTime[msg.sender] > 0", "feeAddress != 0", "governance != 0", - "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", "Sum(_balances[...]) != ori(earnLowerlimit)", "Sum(_balances[...]) >= _balances[msg.sender]", "Sum(_balances[...]) == _totalSupply", - "Sum(_balances[...]) > ori(_balances[msg.sender])", + "Sum(_balances[...]) != ori(_balances[msg.sender])", "Sum(_balances[...]) != earnLowerlimit", - "Sum(_balances[...]) > ori(_totalSupply)", + "Sum(_balances[...]) != ori(_totalSupply)", "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", "ori(Sum(_balances[...])) != _balances[msg.sender]", - "ori(Sum(_balances[...])) < _totalSupply", - "ori(Sum(_balances[...])) < earnLowerlimit", + "ori(Sum(_balances[...])) != _totalSupply", + "ori(Sum(_balances[...])) != earnLowerlimit", "ori(RestrictContractCall) == RestrictContractCall", "depositWithdrawInterval == ori(depositWithdrawInterval)", "ori(earnLowerlimit) != _balances[msg.sender]", "ori(earnLowerlimit) != _totalSupply", "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", "ori(feeAddress) == feeAddress", "min == ori(min)", "token == ori(token)", "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])", "ori(userDepoistTime[msg.sender]) < userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) != userDepoistTime[msg.sender]", "fee3 == ori(fee3)", "ori(governance) == governance", "ori(controller) == controller", "_balances[msg.sender] <= _totalSupply", - "_balances[msg.sender] > ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_balances[msg.sender])", "_balances[msg.sender] != earnLowerlimit", "_balances[msg.sender] != ori(_totalSupply)", "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", "_totalSupply != earnLowerlimit", - "_totalSupply > ori(_totalSupply)", - "ori(_balances[msg.sender]) < earnLowerlimit", - "Sum(userDepoistTime[...]) > ori(Sum(userDepoistTime[...]))", + "_totalSupply != ori(_totalSupply)", + "ori(_balances[msg.sender]) != earnLowerlimit", + "Sum(userDepoistTime[...]) != ori(Sum(userDepoistTime[...]))", "Sum(userDepoistTime[...]) >= userDepoistTime[msg.sender]", "timelock == ori(timelock)", "fee1 == ori(fee1)", "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)", "_decimals == ori(_decimals)", "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" ], @@ -262,27 +307,33 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(feeMax) > 0", "ori(feeMax) == 1000", "ori(feeMax) one of [1000]", + "ori(fee2) > 0", "ori(fee2) == 3", "ori(fee2) one of [3]", "ori(Sum(_balances[...])) > 0", "ori(Sum(_balances[...])) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", "ori(earnLowerlimit) == 1000000000000000000000000", "ori(earnLowerlimit) one of [1000000000000000000000000]", "ori(feeAddress) != 0", + "ori(fee3) > 0", "ori(fee3) == 1", "ori(fee3) one of [1]", "msg.sender != 0", "ori(governance) != 0", "ori(token) != 0", "ori(controller) != 0", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(timelock) != 0", "msg.value == 0", "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", "ori(depositWithdrawInterval) == 60", "ori(depositWithdrawInterval) one of [60]", "ori(fee1) > 0", @@ -291,17 +342,21 @@ "ori(Sum(userDepoistTime[...])) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]", "ori(_totalSupply) > 0", "ori(_totalSupply) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "ori(_decimals) > 0", "ori(_decimals) == 6", "ori(_decimals) one of [6]" ], "postconditions": [ "Sum(_balances[...]) > 0", "Sum(_balances[...]) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]", + "depositWithdrawInterval > 0", "depositWithdrawInterval == 60", "depositWithdrawInterval one of [60]", + "min > 0", "min == 9500", "min one of [9500]", "token != 0", + "fee3 > 0", "fee3 == 1", "fee3 one of [1]", "elem of _balances[...] is one of [82641458184]", @@ -310,15 +365,19 @@ "Sum(userDepoistTime[...]) > 0", "Sum(userDepoistTime[...]) one of [37084585504,22572762120,29022429166,43534554260,8061100949,3224014173,32247272285]", "timelock != 0", + "fee2 > 0", "fee2 == 3", "fee2 one of [3]", "fee1 > 0", "fee1 one of [10,5]", "controller != 0", + "earnLowerlimit > 0", "earnLowerlimit == 1000000000000000000000000", "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", "feeMax == 1000", "feeMax one of [1000]", + "_decimals > 0", "_decimals == 6", "_decimals one of [6]", "elem of userDepoistTime[...] is one of [37084585504]", @@ -327,14 +386,22 @@ "governance != 0", "Sum(_balances[...]) == ori(Sum(_balances[...]))", "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", "ori(RestrictContractCall) == RestrictContractCall", "depositWithdrawInterval == ori(depositWithdrawInterval)", "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", "ori(feeAddress) == feeAddress", "min == ori(min)", "token == ori(token)", "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", "ori(governance) == governance", "ori(controller) == controller", "_totalSupply == ori(_totalSupply)", @@ -396,8 +463,10 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(feeMax) > 0", "ori(feeMax) == 1000", "ori(feeMax) one of [1000]", + "ori(fee2) > 0", "ori(fee2) == 3", "ori(fee2) one of [3]", "ori(Sum(_balances[...])) > 0", @@ -406,12 +475,14 @@ "ori(earnLowerlimit) > 0", "ori(earnLowerlimit) one of [50000000000,500000000000000000000000]", "ori(feeAddress) != 0", + "ori(fee3) > 0", "ori(fee3) == 1", "ori(fee3) one of [1]", "msg.sender != 0", "ori(governance) != 0", "ori(token) != 0", "ori(controller) != 0", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(timelock) != 0", @@ -419,27 +490,34 @@ "msg.value one of [0]", "_earnLowerlimit > 0", "_earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "ori(depositWithdrawInterval) > 0", "ori(depositWithdrawInterval) == 60", "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", "ori(fee1) == 5", "ori(fee1) one of [5]", "ori(Sum(userDepoistTime[...])) > 0", "ori(Sum(userDepoistTime[...])) one of [3224014173,1611989982]", "ori(_totalSupply) > 0", "ori(_totalSupply) one of [50815436600,82641458184]", + "ori(_decimals) > 0", "ori(_decimals) == 6", "ori(_decimals) one of [6]", "ori(earnLowerlimit) < _earnLowerlimit", + "ori(earnLowerlimit) != _earnLowerlimit", "msg.sender == ori(governance)" ], "postconditions": [ "Sum(_balances[...]) > 0", "Sum(_balances[...]) one of [50815436600,82641458184]", + "depositWithdrawInterval > 0", "depositWithdrawInterval == 60", "depositWithdrawInterval one of [60]", + "min > 0", "min == 9500", "min one of [9500]", "token != 0", + "fee3 > 0", "fee3 == 1", "fee3 one of [1]", "elem of _balances[...] is one of [50815436600]", @@ -449,15 +527,19 @@ "Sum(userDepoistTime[...]) > 0", "Sum(userDepoistTime[...]) one of [3224014173,1611989982]", "timelock != 0", + "fee2 > 0", "fee2 == 3", "fee2 one of [3]", + "fee1 > 0", "fee1 == 5", "fee1 one of [5]", "controller != 0", "earnLowerlimit > 0", "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", "feeMax == 1000", "feeMax one of [1000]", + "_decimals > 0", "_decimals == 6", "_decimals one of [6]", "elem of userDepoistTime[...] is one of [3224014173]", @@ -467,14 +549,21 @@ "governance != 0", "Sum(_balances[...]) == ori(Sum(_balances[...]))", "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", "ori(RestrictContractCall) == RestrictContractCall", "depositWithdrawInterval == ori(depositWithdrawInterval)", "ori(earnLowerlimit) < earnLowerlimit", + "ori(earnLowerlimit) != earnLowerlimit", "ori(feeAddress) == feeAddress", "min == ori(min)", "token == ori(token)", "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", "msg.sender == governance", "ori(governance) == governance", "ori(controller) == controller", @@ -520,71 +609,98 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(feeMax) > 0", "ori(feeMax) == 1000", "ori(feeMax) one of [1000]", + "ori(fee2) > 0", "ori(fee2) == 3", "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", "ori(Sum(_balances[...])) == 1310289998969", "ori(Sum(_balances[...])) one of [1310289998969]", "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", "ori(earnLowerlimit) == 1000000000000000000000000", "ori(earnLowerlimit) one of [1000000000000000000000000]", "ori(feeAddress) != 0", + "ori(fee3) > 0", "ori(fee3) == 1", "ori(fee3) one of [1]", "msg.sender != 0", "ori(governance) != 0", "ori(token) != 0", "ori(controller) != 0", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(timelock) != 0", "msg.value == 0", "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", "ori(depositWithdrawInterval) == 60", "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", "ori(fee1) == 5", "ori(fee1) one of [5]", + "ori(Sum(userDepoistTime[...])) > 0", "ori(Sum(userDepoistTime[...])) == 41922035526", "ori(Sum(userDepoistTime[...])) one of [41922035526]", + "ori(_totalSupply) > 0", "ori(_totalSupply) == 1310289998969", "ori(_totalSupply) one of [1310289998969]", + "ori(_decimals) > 0", "ori(_decimals) == 6", "ori(_decimals) one of [6]", "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)", "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)", "ori(feeMax) > ori(fee1)", - "ori(fee2) > ori(fee3)", + "ori(feeMax) != ori(fee1)", + "ori(fee2) != ori(fee3)", "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)", "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)", "msg.sender == ori(timelock)" ], "postconditions": [ + "Sum(_balances[...]) > 0", "Sum(_balances[...]) == 1310289998969", "Sum(_balances[...]) one of [1310289998969]", + "depositWithdrawInterval > 0", "depositWithdrawInterval == 60", "depositWithdrawInterval one of [60]", + "min > 0", "min == 9500", "min one of [9500]", "token != 0", + "fee3 > 0", "fee3 == 1", "fee3 one of [1]", "elem of _balances[...] is one of [1310289998969]", "elem of _balances[...] is one of [0,4,6,9,17,23,26,29,36,43,47,73,75,1300417580500,84,88,92,93,97,98,9872417260]", + "_totalSupply > 0", "_totalSupply == 1310289998969", "_totalSupply one of [1310289998969]", + "Sum(userDepoistTime[...]) > 0", "Sum(userDepoistTime[...]) == 41922035526", "Sum(userDepoistTime[...]) one of [41922035526]", "timelock != 0", + "fee2 > 0", "fee2 == 3", "fee2 one of [3]", + "fee1 > 0", "fee1 == 10", "fee1 one of [10]", "controller != 0", + "earnLowerlimit > 0", "earnLowerlimit == 1000000000000000000000000", "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", "feeMax == 1000", "feeMax one of [1000]", + "_decimals > 0", "_decimals == 6", "_decimals one of [6]", "elem of userDepoistTime[...] is one of [41922035526]", @@ -594,27 +710,44 @@ "governance != 0", "Sum(_balances[...]) == ori(Sum(_balances[...]))", "ori(feeMax) > fee3", + "ori(feeMax) != fee3", "ori(feeMax) > fee2", + "ori(feeMax) != fee2", "ori(feeMax) > fee1", + "ori(feeMax) != fee1", "ori(feeMax) == feeMax", - "ori(fee2) > fee3", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) != fee3", "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", "ori(fee2) < fee1", - "ori(fee2) < feeMax", + "ori(fee2) != fee1", + "ori(fee2) != feeMax", "ori(RestrictContractCall) == RestrictContractCall", "depositWithdrawInterval == ori(depositWithdrawInterval)", "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", "ori(feeAddress) == feeAddress", "min == ori(min)", "token == ori(token)", "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", "ori(fee3) < fee2", + "ori(fee3) != fee2", "ori(fee3) < fee1", - "ori(fee3) < feeMax", + "ori(fee3) != fee1", + "ori(fee3) != feeMax", "fee3 < fee2", + "fee3 != fee2", "fee3 < fee1", - "fee3 < feeMax", + "fee3 != fee1", + "fee3 != feeMax", "fee3 < ori(fee1)", + "fee3 != ori(fee1)", "msg.sender == timelock", "ori(governance) == governance", "ori(controller) == controller", @@ -622,11 +755,14 @@ "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", "timelock == ori(timelock)", "fee2 < fee1", - "fee2 < feeMax", + "fee2 != fee1", + "fee2 != feeMax", "fee2 < ori(fee1)", - "fee1 < feeMax", - "fee1 > ori(fee1)", + "fee2 != ori(fee1)", + "fee1 != feeMax", + "fee1 != ori(fee1)", "feeMax > ori(fee1)", + "feeMax != ori(fee1)", "_decimals == ori(_decimals)" ], "falsified_preconditions": [], @@ -646,36 +782,47 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(feeMax) > 0", "ori(feeMax) == 1000", "ori(feeMax) one of [1000]", + "ori(fee2) > 0", "ori(fee2) == 3", "ori(fee2) one of [3]", + "ori(Sum(_balances[...])) > 0", "ori(Sum(_balances[...])) == 851093071954", "ori(Sum(_balances[...])) one of [851093071954]", "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", "ori(earnLowerlimit) == 1000000000000000000000000", "ori(earnLowerlimit) one of [1000000000000000000000000]", "ori(feeAddress) != 0", "_governance != 0", + "ori(fee3) > 0", "ori(fee3) == 1", "ori(fee3) one of [1]", "msg.sender != 0", "ori(governance) != 0", "ori(token) != 0", "ori(controller) != 0", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(timelock) != 0", "msg.value == 0", "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", "ori(depositWithdrawInterval) == 60", "ori(depositWithdrawInterval) one of [60]", + "ori(fee1) > 0", "ori(fee1) == 5", "ori(fee1) one of [5]", + "ori(Sum(userDepoistTime[...])) > 0", "ori(Sum(userDepoistTime[...])) == 32247272285", "ori(Sum(userDepoistTime[...])) one of [32247272285]", + "ori(_totalSupply) > 0", "ori(_totalSupply) == 851093071954", "ori(_totalSupply) one of [851093071954]", + "ori(_decimals) > 0", "ori(_decimals) == 6", "ori(_decimals) one of [6]", "_governance != msg.sender", @@ -683,31 +830,42 @@ "msg.sender == ori(governance)" ], "postconditions": [ + "Sum(_balances[...]) > 0", "Sum(_balances[...]) == 851093071954", "Sum(_balances[...]) one of [851093071954]", + "depositWithdrawInterval > 0", "depositWithdrawInterval == 60", "depositWithdrawInterval one of [60]", + "min > 0", "min == 9500", "min one of [9500]", "token != 0", + "fee3 > 0", "fee3 == 1", "fee3 one of [1]", "elem of _balances[...] is one of [851093071954]", "elem of _balances[...] is one of [0,4,6,9,18,23,26,29,36,73,75,77,84,115213479893,88,92,93,97,1373058547,734506532600]", + "_totalSupply > 0", "_totalSupply == 851093071954", "_totalSupply one of [851093071954]", + "Sum(userDepoistTime[...]) > 0", "Sum(userDepoistTime[...]) == 32247272285", "Sum(userDepoistTime[...]) one of [32247272285]", "timelock != 0", + "fee2 > 0", "fee2 == 3", "fee2 one of [3]", + "fee1 > 0", "fee1 == 5", "fee1 one of [5]", "controller != 0", + "earnLowerlimit > 0", "earnLowerlimit == 1000000000000000000000000", "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", "feeMax == 1000", "feeMax one of [1000]", + "_decimals > 0", "_decimals == 6", "_decimals one of [6]", "elem of userDepoistTime[...] is one of [32247272285]", @@ -717,15 +875,23 @@ "governance != 0", "Sum(_balances[...]) == ori(Sum(_balances[...]))", "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", "ori(RestrictContractCall) == RestrictContractCall", "depositWithdrawInterval == ori(depositWithdrawInterval)", "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", "ori(feeAddress) == feeAddress", "min == ori(min)", "_governance == governance", "token == ori(token)", "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", "msg.sender != governance", "ori(governance) != governance", "ori(controller) == controller", @@ -806,10 +972,12 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(feeMax) > 0", "ori(feeMax) == 1000", "ori(feeMax) one of [1000]", "amount > 0", "amount one of [4673850400,19974784100,120385957800,499026405900,31826021500]", + "ori(fee2) > 0", "ori(fee2) == 3", "ori(fee2) one of [3]", "ori(Sum(_balances[...])) > 0", @@ -818,6 +986,7 @@ "ori(earnLowerlimit) > 0", "ori(earnLowerlimit) one of [500000000000000000000000,1000000000000000000000000]", "ori(feeAddress) != 0", + "ori(fee3) > 0", "ori(fee3) == 1", "ori(fee3) one of [1]", "msg.sender != 0", @@ -826,11 +995,13 @@ "ori(_balances[recipient]) one of [36,77,18,84,88]", "ori(token) != 0", "ori(controller) != 0", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(timelock) != 0", "msg.value == 0", "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", "ori(depositWithdrawInterval) == 60", "ori(depositWithdrawInterval) one of [60]", "recipient != 0", @@ -840,20 +1011,24 @@ "ori(Sum(userDepoistTime[...])) one of [38697044728,53210802285,43534554260,3224014173]", "ori(_totalSupply) > 0", "ori(_totalSupply) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(_decimals) > 0", "ori(_decimals) == 6", "ori(_decimals) one of [6]", - "ori(Sum(_balances[...])) > ori(_balances[recipient])" + "ori(Sum(_balances[...])) != ori(_balances[recipient])" ], "postconditions": [ "Sum(_balances[...]) > 0", "Sum(_balances[...]) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]", + "depositWithdrawInterval > 0", "depositWithdrawInterval == 60", "depositWithdrawInterval one of [60]", + "min > 0", "min == 9500", "min one of [9500]", "_balances[recipient] > 0", "_balances[recipient] one of [499026405988,120385957836,4673850477,31826021584,19974784118]", "token != 0", + "fee3 > 0", "fee3 == 1", "fee3 one of [1]", "elem of _balances[...] is one of [1003539015686]", @@ -862,6 +1037,7 @@ "Sum(userDepoistTime[...]) > 0", "Sum(userDepoistTime[...]) one of [38697044728,53210802285,43534554260,3224014173]", "timelock != 0", + "fee2 > 0", "fee2 == 3", "fee2 one of [3]", "fee1 > 0", @@ -869,8 +1045,10 @@ "controller != 0", "earnLowerlimit > 0", "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", "feeMax == 1000", "feeMax one of [1000]", + "_decimals > 0", "_decimals == 6", "_decimals one of [6]", "elem of userDepoistTime[...] is one of [38697044728]", @@ -878,19 +1056,27 @@ "feeAddress != 0", "governance != 0", "Sum(_balances[...]) == ori(Sum(_balances[...]))", - "Sum(_balances[...]) > _balances[recipient]", - "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != _balances[recipient]", + "Sum(_balances[...]) != ori(_balances[recipient])", "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", "ori(fee2) == fee2", - "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(Sum(_balances[...])) != _balances[recipient]", "ori(RestrictContractCall) == RestrictContractCall", "depositWithdrawInterval == ori(depositWithdrawInterval)", "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", "ori(feeAddress) == feeAddress", "min == ori(min)", - "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])", "token == ori(token)", "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", "ori(governance) == governance", "ori(controller) == controller", "_totalSupply == ori(_totalSupply)", @@ -916,9 +1102,11 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(feeMax) > 0", "ori(feeMax) == 1000", "ori(feeMax) one of [1000]", "amount > 0", + "ori(fee2) > 0", "ori(fee2) == 3", "ori(fee2) one of [3]", "ori(RestrictContractCall) == true", @@ -928,18 +1116,21 @@ "ori(feeAddress) != 0", "ori(Sum(_allowances[sender][...])) > 0", "ori(Sum(_allowances[sender][...])) one of [79228162513999999970070829900,79228162513999999968173978500,79228162514000000000000000000]", + "ori(fee3) > 0", "ori(fee3) == 1", "ori(fee3) one of [1]", "msg.sender != 0", "ori(governance) != 0", "ori(token) != 0", "ori(controller) != 0", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(timelock) != 0", "sender != 0", "msg.value == 0", "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", "ori(depositWithdrawInterval) == 60", "ori(depositWithdrawInterval) one of [60]", "recipient != 0", @@ -948,29 +1139,35 @@ "ori(Sum(userDepoistTime[...])) > 0", "ori(_totalSupply) > 0", "ori(_balances[sender]) > 0", + "ori(_decimals) > 0", "ori(_decimals) == 6", "ori(_decimals) one of [6]", "amount < ori(Sum(_allowances[sender][...]))", - "ori(Sum(_balances[...])) > ori(_balances[recipient])", - "ori(Sum(_balances[...])) > ori(_balances[sender])", + "amount != ori(Sum(_allowances[sender][...]))", + "ori(Sum(_balances[...])) != ori(_balances[recipient])", + "ori(Sum(_balances[...])) != ori(_balances[sender])", "ori(_balances[recipient]) != ori(_balances[sender])", "sender != recipient" ], "postconditions": [ "Sum(_balances[...]) > 0", "Sum(_allowances[sender][...]) > 0", + "depositWithdrawInterval > 0", "depositWithdrawInterval == 60", "depositWithdrawInterval one of [60]", + "min > 0", "min == 9500", "min one of [9500]", "_balances[recipient] > 0", "token != 0", + "fee3 > 0", "fee3 == 1", "fee3 one of [1]", "elem of _balances[...] is one of [860260929152]", "_totalSupply > 0", "Sum(userDepoistTime[...]) > 0", "timelock != 0", + "fee2 > 0", "fee2 == 3", "fee2 one of [3]", "fee1 > 0", @@ -979,37 +1176,50 @@ "controller != 0", "earnLowerlimit > 0", "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", "feeMax == 1000", "feeMax one of [1000]", + "_decimals > 0", "_decimals == 6", "_decimals one of [6]", "elem of userDepoistTime[...] is one of [51597976325]", "RestrictContractCall == true", "feeAddress != 0", "governance != 0", - "Sum(_balances[...]) > _balances[sender]", + "Sum(_balances[...]) != _balances[sender]", "Sum(_balances[...]) == ori(Sum(_balances[...]))", - "Sum(_balances[...]) > _balances[recipient]", - "Sum(_balances[...]) > ori(_balances[recipient])", - "Sum(_balances[...]) > ori(_balances[sender])", + "Sum(_balances[...]) != _balances[recipient]", + "Sum(_balances[...]) != ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[sender])", "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", "_balances[sender] < ori(Sum(_balances[...]))", + "_balances[sender] != ori(Sum(_balances[...]))", "_balances[sender] < _balances[recipient]", + "_balances[sender] != _balances[recipient]", "_balances[sender] != ori(_balances[recipient])", - "_balances[sender] < ori(_balances[sender])", + "_balances[sender] != ori(_balances[sender])", "amount < Sum(_allowances[sender][...])", + "amount != Sum(_allowances[sender][...])", "ori(fee2) == fee2", - "Sum(_allowances[sender][...]) < ori(Sum(_allowances[sender][...]))", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "Sum(_allowances[sender][...]) != ori(Sum(_allowances[sender][...]))", "ori(RestrictContractCall) == RestrictContractCall", "depositWithdrawInterval == ori(depositWithdrawInterval)", - "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]", "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", "ori(feeAddress) == feeAddress", "min == ori(min)", - "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])", "_balances[recipient] != ori(_balances[sender])", "token == ori(token)", "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", "ori(governance) == governance", "ori(controller) == controller", "_totalSupply == ori(_totalSupply)", @@ -1056,18 +1266,22 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(feeMax) > 0", "ori(feeMax) == 1000", "ori(feeMax) one of [1000]", + "ori(fee2) > 0", "ori(fee2) == 3", "ori(fee2) one of [3]", "ori(Sum(_balances[...])) > 0", "ori(Sum(_balances[...])) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]", "ori(RestrictContractCall) == true", + "ori(earnLowerlimit) > 0", "ori(earnLowerlimit) == 1000000000000000000000000", "ori(earnLowerlimit) one of [1000000000000000000000000]", "ori(feeAddress) != 0", "ori(userDepoistTime[msg.sender]) > 0", "ori(userDepoistTime[msg.sender]) one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]", + "ori(fee3) > 0", "ori(fee3) == 1", "ori(fee3) one of [1]", "msg.sender != 0", @@ -1076,11 +1290,13 @@ "ori(controller) != 0", "ori(_balances[msg.sender]) > 0", "ori(_balances[msg.sender]) one of [499026405988,120385957836,4673850477,31826021584,19974784118,262979296856]", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(timelock) != 0", "msg.value == 0", "msg.value one of [0]", + "ori(depositWithdrawInterval) > 0", "ori(depositWithdrawInterval) == 60", "ori(depositWithdrawInterval) one of [60]", "ori(fee1) > 0", @@ -1089,21 +1305,26 @@ "ori(Sum(userDepoistTime[...])) one of [38697044728,43534554260,53210802285,33859705567]", "ori(_totalSupply) > 0", "ori(_totalSupply) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]", + "ori(_decimals) > 0", "ori(_decimals) == 6", "ori(_decimals) one of [6]", - "ori(Sum(_balances[...])) > ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) != ori(_balances[msg.sender])", "ori(Sum(_balances[...])) == ori(_totalSupply)", "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))", - "ori(_balances[msg.sender]) < ori(_totalSupply)" + "ori(userDepoistTime[msg.sender]) != ori(Sum(userDepoistTime[...]))", + "ori(_balances[msg.sender]) != ori(_totalSupply)" ], "postconditions": [ "Sum(_balances[...]) > 0", "Sum(_balances[...]) one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]", + "depositWithdrawInterval > 0", "depositWithdrawInterval == 60", "depositWithdrawInterval one of [60]", + "min > 0", "min == 9500", "min one of [9500]", "token != 0", + "fee3 > 0", "fee3 == 1", "fee3 one of [1]", "elem of _balances[...] is one of [1408314583361]", @@ -1114,15 +1335,19 @@ "Sum(userDepoistTime[...]) > 0", "Sum(userDepoistTime[...]) one of [38697044728,43534554260,53210802285,33859705567]", "timelock != 0", + "fee2 > 0", "fee2 == 3", "fee2 one of [3]", "fee1 > 0", "fee1 one of [10,5]", "controller != 0", + "earnLowerlimit > 0", "earnLowerlimit == 1000000000000000000000000", "earnLowerlimit one of [1000000000000000000000000]", + "feeMax > 0", "feeMax == 1000", "feeMax one of [1000]", + "_decimals > 0", "_decimals == 6", "_decimals one of [6]", "elem of userDepoistTime[...] is one of [38697044728]", @@ -1131,37 +1356,47 @@ "userDepoistTime[msg.sender] one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]", "feeAddress != 0", "governance != 0", - "Sum(_balances[...]) < ori(Sum(_balances[...]))", - "Sum(_balances[...]) > _balances[msg.sender]", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", + "Sum(_balances[...]) != _balances[msg.sender]", "Sum(_balances[...]) == _totalSupply", - "Sum(_balances[...]) > ori(_balances[msg.sender])", - "Sum(_balances[...]) < ori(_totalSupply)", + "Sum(_balances[...]) != ori(_balances[msg.sender])", + "Sum(_balances[...]) != ori(_totalSupply)", "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", "ori(fee2) == fee2", - "ori(Sum(_balances[...])) > _balances[msg.sender]", - "ori(Sum(_balances[...])) > _totalSupply", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", + "ori(Sum(_balances[...])) != _balances[msg.sender]", + "ori(Sum(_balances[...])) != _totalSupply", "ori(RestrictContractCall) == RestrictContractCall", "depositWithdrawInterval == ori(depositWithdrawInterval)", "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit", "ori(feeAddress) == feeAddress", "min == ori(min)", "token == ori(token)", "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])", "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) >= userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]", "fee3 == ori(fee3)", "ori(governance) == governance", "ori(controller) == controller", - "_balances[msg.sender] < _totalSupply", - "_balances[msg.sender] < ori(_balances[msg.sender])", - "_balances[msg.sender] < ori(_totalSupply)", + "_balances[msg.sender] != _totalSupply", + "_balances[msg.sender] != ori(_balances[msg.sender])", + "_balances[msg.sender] != ori(_totalSupply)", "_totalSupply > ori(_balances[msg.sender])", - "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_balances[msg.sender])", + "_totalSupply != ori(_totalSupply)", "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", - "Sum(userDepoistTime[...]) > userDepoistTime[msg.sender]", + "Sum(userDepoistTime[...]) != userDepoistTime[msg.sender]", "timelock == ori(timelock)", "fee1 == ori(fee1)", "_decimals == ori(_decimals)", - "ori(Sum(userDepoistTime[...])) > userDepoistTime[msg.sender]" + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" ], "falsified_preconditions": [], "falsified_postconditions": [] @@ -1180,48 +1415,63 @@ "type": "PptType.CONTRACT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(feeMax) > 0", "ori(feeMax) == 1000", "ori(feeMax) one of [1000]", + "ori(fee2) > 0", "ori(fee2) == 3", "ori(fee2) one of [3]", "ori(RestrictContractCall) == true", "ori(earnLowerlimit) > 0", "ori(earnLowerlimit) one of [50000000000,500000000000000000000000,1000000000000000000000000]", "ori(feeAddress) != 0", + "ori(fee3) > 0", "ori(fee3) == 1", "ori(fee3) one of [1]", "ori(governance) != 0", "ori(token) != 0", "ori(controller) != 0", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(timelock) != 0", + "ori(depositWithdrawInterval) > 0", "ori(depositWithdrawInterval) == 60", "ori(depositWithdrawInterval) one of [60]", "ori(fee1) > 0", "ori(fee1) one of [10,5]", + "ori(_decimals) > 0", "ori(_decimals) == 6", "ori(_decimals) one of [6]", "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)", "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)", "ori(feeMax) > ori(fee1)", - "ori(fee2) > ori(fee3)", + "ori(feeMax) != ori(fee1)", + "ori(fee2) != ori(fee3)", "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)", "ori(Sum(_balances[...])) != ori(earnLowerlimit)", "ori(Sum(_balances[...])) == ori(_totalSupply)", "ori(earnLowerlimit) != ori(_totalSupply)", - "ori(fee3) < ori(fee1)" + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" ], "postconditions": [ + "depositWithdrawInterval > 0", "depositWithdrawInterval == 60", "depositWithdrawInterval one of [60]", + "min > 0", "min == 9500", "min one of [9500]", "token != 0", + "fee3 > 0", "fee3 == 1", "fee3 one of [1]", "elem of _balances[...] is one of [0]", "timelock != 0", + "fee2 > 0", "fee2 == 3", "fee2 one of [3]", "fee1 > 0", @@ -1229,8 +1479,10 @@ "controller != 0", "earnLowerlimit > 0", "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]", + "feeMax > 0", "feeMax == 1000", "feeMax one of [1000]", + "_decimals > 0", "_decimals == 6", "_decimals one of [6]", "elem of userDepoistTime[...] is one of [0]", @@ -1241,14 +1493,22 @@ "Sum(_balances[...]) == _totalSupply", "Sum(_balances[...]) != earnLowerlimit", "ori(feeMax) > fee3", + "ori(feeMax) != fee3", "ori(feeMax) > fee2", + "ori(feeMax) != fee2", "ori(feeMax) > fee1", + "ori(feeMax) != fee1", "ori(feeMax) == feeMax", - "ori(fee2) > fee3", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax", + "ori(fee2) != fee3", "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2", "ori(fee2) < fee1", - "ori(fee2) < feeMax", - "ori(Sum(_balances[...])) < earnLowerlimit", + "ori(fee2) != fee1", + "ori(fee2) != feeMax", + "ori(Sum(_balances[...])) != earnLowerlimit", "ori(RestrictContractCall) == RestrictContractCall", "depositWithdrawInterval == ori(depositWithdrawInterval)", "ori(earnLowerlimit) != _totalSupply", @@ -1257,24 +1517,35 @@ "min == ori(min)", "token == ori(token)", "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3", "ori(fee3) < fee2", + "ori(fee3) != fee2", "ori(fee3) < fee1", - "ori(fee3) < feeMax", + "ori(fee3) != fee1", + "ori(fee3) != feeMax", "fee3 < fee2", + "fee3 != fee2", "fee3 < fee1", - "fee3 < feeMax", + "fee3 != fee1", + "fee3 != feeMax", "fee3 < ori(fee1)", + "fee3 != ori(fee1)", "ori(controller) == controller", "_totalSupply != earnLowerlimit", "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", "timelock == ori(timelock)", "fee2 < fee1", - "fee2 < feeMax", + "fee2 != fee1", + "fee2 != feeMax", "fee2 < ori(fee1)", - "fee1 < feeMax", + "fee2 != ori(fee1)", + "fee1 != feeMax", "fee1 >= ori(fee1)", "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)", "feeMax > ori(fee1)", + "feeMax != ori(fee1)", "_decimals == ori(_decimals)" ], "falsified_preconditions": [ diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json index 7086cf4..ee3d9de 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a.json @@ -40,6 +40,7 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(decimals) > 0", "ori(decimals) == 18", "ori(decimals) one of [18]", "ori(_owner) != 0", @@ -55,6 +56,8 @@ "ori(_totalSupply) >= ori(reservePool)", "ori(_totalSupply) >= ori(_balances[msg.sender])", "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", "ori(_totalSupply) != ori(_guardCounter)", "ori(reservePool) <= ori(Sum(_balances[...]))", "ori(reservePool) != ori(_guardCounter)", @@ -63,6 +66,7 @@ "ori(Sum(_balances[...])) != ori(_guardCounter)" ], "postconditions": [ + "decimals > 0", "decimals == 18", "decimals one of [18]", "_owner != 0", @@ -75,6 +79,8 @@ "_guardCounter > 0", "config != 0", "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", "ori(glbDebtVal) != _totalSupply", "ori(glbDebtVal) >= reservePool", "ori(glbDebtVal) != _balances[msg.sender]", @@ -83,49 +89,63 @@ "ori(glbDebtVal) <= glbDebtVal", "ori(_owner) == _owner", "ori(_totalSupply) < _totalSupply", + "ori(_totalSupply) != _totalSupply", "ori(_totalSupply) >= reservePool", "ori(_totalSupply) != _balances[msg.sender]", "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", "ori(_totalSupply) != _guardCounter", "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply", "ori(reservePool) <= reservePool", "ori(reservePool) != _balances[msg.sender]", "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])", "ori(reservePool) != _guardCounter", "ori(reservePool) <= glbDebtVal", "lastAccrueTime >= ori(lastAccrueTime)", "glbDebtShare == ori(glbDebtShare)", - "_totalSupply > reservePool", + "_totalSupply != reservePool", "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", "_totalSupply >= _balances[msg.sender]", "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter", "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)", "_totalSupply != glbDebtVal", "reservePool <= ori(Sum(_balances[...]))", "reservePool != _balances[msg.sender]", "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])", "reservePool != _guardCounter", "reservePool != ori(_guardCounter)", "reservePool <= glbDebtVal", "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", "ori(_balances[msg.sender]) != _guardCounter", "ori(_balances[msg.sender]) <= glbDebtVal", "ori(Sum(_balances[...])) != _balances[msg.sender]", "ori(Sum(_balances[...])) < Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])", "ori(Sum(_balances[...])) != _guardCounter", "_balances[msg.sender] <= Sum(_balances[...])", - "_balances[msg.sender] > _guardCounter", - "_balances[msg.sender] > ori(_guardCounter)", + "_balances[msg.sender] != _guardCounter", + "_balances[msg.sender] != ori(_guardCounter)", "_balances[msg.sender] != glbDebtVal", - "Sum(_balances[...]) > _guardCounter", - "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != _guardCounter", + "Sum(_balances[...]) != ori(_guardCounter)", "Sum(_balances[...]) != glbDebtVal", "nextPositionID == ori(nextPositionID)", "_guardCounter == ori(_guardCounter) + 1", - "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)", "_guardCounter != glbDebtVal", "config == ori(config)", "ori(_guardCounter) != glbDebtVal" @@ -318,26 +338,35 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(decimals) > 0", "ori(decimals) == 18", "ori(decimals) one of [18]", + "ori(glbDebtVal) > 0", "ori(glbDebtVal) == 14854681992016139228071", "ori(glbDebtVal) one of [14854681992016139228071]", "ori(_owner) != 0", + "ori(_totalSupply) > 0", "ori(_totalSupply) == 20424063187886226982599", "ori(_totalSupply) one of [20424063187886226982599]", + "ori(reservePool) > 0", "ori(reservePool) == 148922433659474232", "ori(reservePool) one of [148922433659474232]", "msg.sender != 0", + "ori(lastAccrueTime) > 0", "ori(lastAccrueTime) == 1602231144", "ori(lastAccrueTime) one of [1602231144]", + "ori(Sum(_balances[...])) > 0", "ori(Sum(_balances[...])) == 20424063187886226982599", "ori(Sum(_balances[...])) one of [20424063187886226982599]", "_config != 0", + "ori(nextPositionID) > 0", "ori(nextPositionID) == 198", "ori(nextPositionID) one of [198]", "ori(config) != 0", + "ori(_guardCounter) > 0", "ori(_guardCounter) == 376", "ori(_guardCounter) one of [376]", + "ori(glbDebtShare) > 0", "ori(glbDebtShare) == 14846441340661167278357", "ori(glbDebtShare) one of [14846441340661167278357]", "msg.value == 0", @@ -345,36 +374,55 @@ "_config != ori(config)" ], "postconditions": [ + "decimals > 0", "decimals == 18", "decimals one of [18]", "_owner != 0", + "lastAccrueTime > 0", "lastAccrueTime == 1602231144", "lastAccrueTime one of [1602231144]", + "glbDebtShare > 0", "glbDebtShare == 14846441340661167278357", "glbDebtShare one of [14846441340661167278357]", + "_totalSupply > 0", "_totalSupply == 20424063187886226982599", "_totalSupply one of [20424063187886226982599]", + "reservePool > 0", "reservePool == 148922433659474232", "reservePool one of [148922433659474232]", "elem of _balances[...] is one of [20424063187886226982599]", "elem of _balances[...] is one of [0,207595542558178816,2499288059837974695884,4999207308361928720,76989635665897056757,2099694672502978261129,2499278042403573792,23994090941122685480,348905267647927528350,4057048061363058246,19994236218049902145,12008096684355041865,3498972866121430093,399952049758648104376,379892644249751734723,7331074273148906603,499926721158544918445,28995014649187331200,155534040163110543,3419055614113489263301,199945786064955255869,99984922215138066540,11940731249496242,9998648791479301808,99997986090636984,4999319919409024702,75278599312019471008,20004274794429721786,22994220695367180988,3998913359845597384,9497882822697579207,1849753685077835228080,1499693766495532245,9998132539448897243,2999161464973501151,122963923838163536554,9998602921031189222,249933540782134667412,8748256010480108303,199870887498978286782,74979877460347423478,2999622873234109207,74989718060626759416,1999465504916710427064,499908735865805608,1241962116152060713,401109492287907629,73980033536100457236,29886166173581944622,359442063782612289,39988232675288000305,999713726897813322,953321242468317018,22006669614395381074,330342581938126080214,401583241182296934,1999553099697343335,4998650914601382245,899807013883311181285,349967173402743561941,4999141914029901165,999808531376531825,19996452589694343531,2999199985428679028,100983359711349393234,86984751696672373087,299941269738273242381,2999577045009891728,2099550583177882008,156757421593122201,18497345372475515793,2999475445556411802,99980055585089435,282421952098266234655,99985734138462998901,499892501497066034892,37108231016789653399,7997832369182641578,1427667316733088179,2199682035744654782,499855855955010505,9997205556608119756,19994928949477146578,4018969067458326495,19995027751107133405,1999420721406120521858,177960697518442657180,39994654851654382555,999861461461553649,99985182676534263,1999560000545579004,29998406400582478834]", + "Sum(_balances[...]) > 0", "Sum(_balances[...]) == 20424063187886226982599", "Sum(_balances[...]) one of [20424063187886226982599]", + "nextPositionID > 0", "nextPositionID == 198", "nextPositionID one of [198]", + "_guardCounter > 0", "_guardCounter == 376", "_guardCounter one of [376]", "config != 0", + "glbDebtVal > 0", "glbDebtVal == 14854681992016139228071", "glbDebtVal one of [14854681992016139228071]", "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", "ori(glbDebtVal) == glbDebtVal", + "ori(glbDebtVal) >= glbDebtVal", + "ori(glbDebtVal) <= glbDebtVal", "ori(_owner) == _owner", "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", "ori(reservePool) == reservePool", + "ori(reservePool) >= reservePool", + "ori(reservePool) <= reservePool", "lastAccrueTime == ori(lastAccrueTime)", "glbDebtShare == ori(glbDebtShare)", "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", "_config == config", "nextPositionID == ori(nextPositionID)", "_guardCounter == ori(_guardCounter)", @@ -397,6 +445,7 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(decimals) > 0", "ori(decimals) == 18", "ori(decimals) one of [18]", "ori(glbDebtVal) > 0", @@ -415,22 +464,32 @@ "msg.value == 0", "msg.value one of [0]", "ori(glbDebtVal) != ori(_totalSupply)", - "ori(glbDebtVal) > ori(reservePool)", + "ori(glbDebtVal) != ori(reservePool)", "ori(glbDebtVal) > ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(_balances[msg.sender])", "ori(glbDebtVal) != ori(Sum(_balances[...]))", "ori(glbDebtVal) > ori(_guardCounter)", - "ori(_totalSupply) > ori(reservePool)", + "ori(glbDebtVal) != ori(_guardCounter)", + "ori(_totalSupply) != ori(reservePool)", "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])", "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", "ori(_totalSupply) > ori(_guardCounter)", + "ori(_totalSupply) != ori(_guardCounter)", "ori(reservePool) != ori(_balances[msg.sender])", "ori(reservePool) < ori(Sum(_balances[...]))", + "ori(reservePool) != ori(Sum(_balances[...]))", "ori(reservePool) > ori(_guardCounter)", + "ori(reservePool) != ori(_guardCounter)", "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", - "ori(_balances[msg.sender]) > ori(_guardCounter)", - "ori(Sum(_balances[...])) > ori(_guardCounter)" + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(_guardCounter)", + "ori(Sum(_balances[...])) != ori(_guardCounter)" ], "postconditions": [ + "decimals > 0", "decimals == 18", "decimals one of [18]", "_owner != 0", @@ -446,63 +505,93 @@ "config != 0", "glbDebtVal > 0", "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", "ori(glbDebtVal) != _totalSupply", - "ori(glbDebtVal) > reservePool", + "ori(glbDebtVal) != reservePool", "ori(glbDebtVal) > _balances[msg.sender]", + "ori(glbDebtVal) != _balances[msg.sender]", "ori(glbDebtVal) != Sum(_balances[...])", "ori(glbDebtVal) > _guardCounter", + "ori(glbDebtVal) != _guardCounter", "ori(glbDebtVal) < glbDebtVal", + "ori(glbDebtVal) != glbDebtVal", "ori(_owner) == _owner", "ori(_totalSupply) > _totalSupply", - "ori(_totalSupply) > reservePool", + "ori(_totalSupply) != _totalSupply", + "ori(_totalSupply) != reservePool", "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", "ori(_totalSupply) > _guardCounter", + "ori(_totalSupply) != _guardCounter", "ori(_totalSupply) != glbDebtVal", "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply", "ori(reservePool) < reservePool", + "ori(reservePool) != reservePool", "ori(reservePool) != _balances[msg.sender]", "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])", "ori(reservePool) > _guardCounter", + "ori(reservePool) != _guardCounter", "ori(reservePool) < glbDebtVal", - "lastAccrueTime > ori(lastAccrueTime)", + "ori(reservePool) != glbDebtVal", + "lastAccrueTime != ori(lastAccrueTime)", "glbDebtShare == ori(glbDebtShare)", - "_totalSupply > reservePool", + "_totalSupply != reservePool", "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter", "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)", "_totalSupply != glbDebtVal", "reservePool != ori(_balances[msg.sender])", "reservePool < ori(Sum(_balances[...]))", + "reservePool != ori(Sum(_balances[...]))", "reservePool != _balances[msg.sender]", "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])", "reservePool > _guardCounter", + "reservePool != _guardCounter", "reservePool > ori(_guardCounter)", + "reservePool != ori(_guardCounter)", "reservePool < glbDebtVal", + "reservePool != glbDebtVal", "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", "ori(_balances[msg.sender]) < Sum(_balances[...])", - "ori(_balances[msg.sender]) > _guardCounter", - "ori(_balances[msg.sender]) < glbDebtVal", - "ori(Sum(_balances[...])) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != Sum(_balances[...])", + "ori(_balances[msg.sender]) != _guardCounter", + "ori(_balances[msg.sender]) != glbDebtVal", + "ori(Sum(_balances[...])) != _balances[msg.sender]", "ori(Sum(_balances[...])) > Sum(_balances[...])", - "ori(Sum(_balances[...])) > _guardCounter", + "ori(Sum(_balances[...])) != Sum(_balances[...])", + "ori(Sum(_balances[...])) != _guardCounter", "ori(Sum(_balances[...])) != glbDebtVal", "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])", "_balances[msg.sender] != _guardCounter", "_balances[msg.sender] != ori(_guardCounter)", - "_balances[msg.sender] < glbDebtVal", - "Sum(_balances[...]) > _guardCounter", - "Sum(_balances[...]) > ori(_guardCounter)", + "_balances[msg.sender] != glbDebtVal", + "Sum(_balances[...]) != _guardCounter", + "Sum(_balances[...]) != ori(_guardCounter)", "Sum(_balances[...]) != glbDebtVal", "nextPositionID == ori(nextPositionID)", "_guardCounter == ori(_guardCounter) + 1", - "_guardCounter > ori(_guardCounter)", - "_guardCounter < glbDebtVal", + "_guardCounter != ori(_guardCounter)", + "_guardCounter != glbDebtVal", "config == ori(config)", - "ori(_guardCounter) < glbDebtVal" + "ori(_guardCounter) != glbDebtVal" ], "falsified_preconditions": [ "ori(glbDebtVal) <= ori(_totalSupply)", @@ -570,6 +659,7 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(decimals) > 0", "ori(decimals) == 18", "ori(decimals) one of [18]", "ori(_owner) != 0", @@ -594,16 +684,19 @@ "ori(reservePool) != ori(_guardCounter)", "ori(reservePool) <= ori(glbDebtShare)", "goblin != msg.sender", - "id < ori(nextPositionID)", + "id != ori(nextPositionID)", "id < ori(_guardCounter)", + "id != ori(_guardCounter)", "id <= ori(glbDebtShare)", "loan != ori(nextPositionID)", "loan != ori(_guardCounter)", "ori(nextPositionID) < ori(_guardCounter)", + "ori(nextPositionID) != ori(_guardCounter)", "ori(nextPositionID) != ori(glbDebtShare)", "ori(_guardCounter) != ori(glbDebtShare)" ], "postconditions": [ + "decimals > 0", "decimals == 18", "decimals one of [18]", "_owner != 0", @@ -618,30 +711,41 @@ "glbDebtVal > 0", "positions[id].goblin == ori(positions[id].goblin)", "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", "ori(glbDebtVal) != glbDebtShare", "ori(glbDebtVal) >= reservePool", "ori(glbDebtVal) != nextPositionID", "ori(glbDebtVal) != _guardCounter", "ori(_owner) == _owner", "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply", "ori(reservePool) < glbDebtShare", + "ori(reservePool) != glbDebtShare", "ori(reservePool) <= reservePool", "ori(reservePool) != nextPositionID", "ori(reservePool) != _guardCounter", "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal", "lastAccrueTime >= ori(lastAccrueTime)", "positions[id].debtShare <= ori(positions[id].debtShare)", "id < glbDebtShare", + "id != glbDebtShare", "id <= reservePool", - "id < nextPositionID", + "id != nextPositionID", "id < _guardCounter", + "id != _guardCounter", "id < glbDebtVal", - "glbDebtShare > reservePool", + "id != glbDebtVal", + "glbDebtShare != reservePool", "glbDebtShare >= loan", - "glbDebtShare > nextPositionID", + "glbDebtShare != nextPositionID", "glbDebtShare > _guardCounter", - "glbDebtShare > ori(nextPositionID)", + "glbDebtShare != _guardCounter", + "glbDebtShare != ori(nextPositionID)", "glbDebtShare > ori(_guardCounter)", + "glbDebtShare != ori(_guardCounter)", "glbDebtShare <= glbDebtVal", "reservePool != loan", "reservePool != nextPositionID", @@ -650,24 +754,30 @@ "reservePool != ori(_guardCounter)", "reservePool <= ori(glbDebtShare)", "reservePool < glbDebtVal", + "reservePool != glbDebtVal", "ori(positions[id].owner) == positions[id].owner", "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])", "loan != nextPositionID", "loan != _guardCounter", "loan <= glbDebtVal", "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter", "nextPositionID >= ori(nextPositionID)", "nextPositionID <= ori(_guardCounter)", "nextPositionID != ori(glbDebtShare)", "nextPositionID < glbDebtVal", - "_guardCounter > ori(nextPositionID)", + "nextPositionID != glbDebtVal", + "_guardCounter != ori(nextPositionID)", "_guardCounter == ori(_guardCounter) + 1", - "_guardCounter > ori(_guardCounter)", + "_guardCounter != ori(_guardCounter)", "_guardCounter != ori(glbDebtShare)", - "_guardCounter < glbDebtVal", + "_guardCounter != glbDebtVal", "config == ori(config)", "ori(nextPositionID) < glbDebtVal", - "ori(_guardCounter) < glbDebtVal", + "ori(nextPositionID) != glbDebtVal", + "ori(_guardCounter) != glbDebtVal", "ori(glbDebtShare) != glbDebtVal" ], "falsified_preconditions": [ @@ -712,6 +822,7 @@ "type": "PptType.CONTRACT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(decimals) > 0", "ori(decimals) == 18", "ori(decimals) one of [18]", "ori(_owner) != 0", @@ -725,6 +836,8 @@ "ori(glbDebtVal) >= ori(glbDebtShare)", "ori(_totalSupply) >= ori(reservePool)", "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", "ori(_totalSupply) != ori(_guardCounter)", "ori(reservePool) <= ori(Sum(_balances[...]))", "ori(reservePool) != ori(nextPositionID)", @@ -736,6 +849,7 @@ "ori(_guardCounter) != ori(glbDebtShare)" ], "postconditions": [ + "decimals > 0", "decimals == 18", "decimals one of [18]", "_owner != 0", @@ -747,6 +861,8 @@ "_guardCounter > 0", "config != 0", "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals", "ori(glbDebtVal) != _totalSupply", "ori(glbDebtVal) >= reservePool", "ori(glbDebtVal) != Sum(_balances[...])", @@ -757,8 +873,10 @@ "ori(_totalSupply) != _guardCounter", "ori(reservePool) <= glbDebtShare", "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply", "ori(reservePool) <= reservePool", "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])", "ori(reservePool) != nextPositionID", "ori(reservePool) != _guardCounter", "ori(reservePool) <= glbDebtVal", @@ -769,13 +887,18 @@ "glbDebtShare != ori(nextPositionID)", "glbDebtShare != ori(_guardCounter)", "glbDebtShare <= glbDebtVal", - "_totalSupply > reservePool", + "_totalSupply != reservePool", "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter", "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)", "_totalSupply != glbDebtVal", "reservePool <= ori(Sum(_balances[...]))", "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])", "reservePool != nextPositionID", "reservePool != _guardCounter", "reservePool != ori(nextPositionID)", @@ -783,15 +906,16 @@ "reservePool <= ori(glbDebtShare)", "reservePool <= glbDebtVal", "ori(Sum(_balances[...])) != _guardCounter", - "Sum(_balances[...]) > _guardCounter", - "Sum(_balances[...]) > ori(_guardCounter)", + "Sum(_balances[...]) != _guardCounter", + "Sum(_balances[...]) != ori(_guardCounter)", "Sum(_balances[...]) != glbDebtVal", "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter", "nextPositionID >= ori(nextPositionID)", "nextPositionID <= ori(_guardCounter)", "nextPositionID != ori(glbDebtShare)", "nextPositionID != glbDebtVal", - "_guardCounter > ori(nextPositionID)", + "_guardCounter != ori(nextPositionID)", "_guardCounter >= ori(_guardCounter)", "_guardCounter != ori(glbDebtShare)", "_guardCounter != glbDebtVal", diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json index 83d3ba4..ad3acfd 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6847259b2b3a4c17e7c43c54409810af48ba5210.json @@ -5,11 +5,13 @@ "executionType": "TxType.NORMAL", "preconditions": [ "ori(devfund) != 0", + "ori(split) > 0", "ori(split) == 500", "ori(split) one of [500]", "msg.value == 0", "msg.value one of [0]", "_converter != 0", + "ori(convenienceFee) > 0", "ori(convenienceFee) == 100", "ori(convenienceFee) one of [100]", "ori(governance) != 0", @@ -23,6 +25,7 @@ ], "postconditions": [ "governance != 0", + "split > 0", "split == 500", "split one of [500]", "onesplit != 0", @@ -30,6 +33,7 @@ "strategist != 0", "devfund != 0", "approvedJarConverters[_converter] == true", + "convenienceFee > 0", "convenienceFee == 100", "convenienceFee one of [100]", "timelock != 0", @@ -40,6 +44,8 @@ "onesplit == ori(onesplit)", "treasury == ori(treasury)", "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", "strategist == ori(strategist)", "approvedJarConverters[_converter] != ori(approvedJarConverters[_converter])", "ori(timelock) == timelock" @@ -63,11 +69,13 @@ "preconditions": [ "_strategy != 0", "ori(devfund) != 0", + "ori(split) > 0", "ori(split) == 500", "ori(split) one of [500]", "msg.value == 0", "msg.value one of [0]", "ori(approvedStrategies[_token][_strategy]) == false", + "ori(convenienceFee) > 0", "ori(convenienceFee) == 100", "ori(convenienceFee) one of [100]", "ori(governance) != 0", @@ -82,12 +90,14 @@ "postconditions": [ "approvedStrategies[_token][_strategy] == true", "governance != 0", + "split > 0", "split == 500", "split one of [500]", "onesplit != 0", "treasury != 0", "strategist != 0", "devfund != 0", + "convenienceFee > 0", "convenienceFee == 100", "convenienceFee one of [100]", "timelock != 0", @@ -98,6 +108,8 @@ "onesplit == ori(onesplit)", "treasury == ori(treasury)", "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", "strategist == ori(strategist)", "ori(timelock) == timelock", "msg.sender == timelock" @@ -246,10 +258,12 @@ "executionType": "TxType.NORMAL", "preconditions": [ "ori(devfund) != 0", + "ori(split) > 0", "ori(split) == 500", "ori(split) one of [500]", "msg.value == 0", "msg.value one of [0]", + "ori(convenienceFee) > 0", "ori(convenienceFee) == 100", "ori(convenienceFee) one of [100]", "ori(governance) != 0", @@ -265,12 +279,14 @@ ], "postconditions": [ "governance != 0", + "split > 0", "split == 500", "split one of [500]", "onesplit != 0", "treasury != 0", "strategist != 0", "devfund != 0", + "convenienceFee > 0", "convenienceFee == 100", "convenienceFee one of [100]", "timelock != 0", @@ -282,6 +298,8 @@ "onesplit == ori(onesplit)", "treasury == ori(treasury)", "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", "strategist == ori(strategist)", "ori(timelock) == timelock" ], @@ -304,11 +322,13 @@ "preconditions": [ "ori(jars[_token]) == 0", "ori(devfund) != 0", + "ori(split) > 0", "ori(split) == 500", "ori(split) one of [500]", "msg.value == 0", "msg.value one of [0]", "_jar != 0", + "ori(convenienceFee) > 0", "ori(convenienceFee) == 100", "ori(convenienceFee) one of [100]", "ori(governance) != 0", @@ -325,6 +345,7 @@ ], "postconditions": [ "governance != 0", + "split > 0", "split == 500", "split one of [500]", "onesplit != 0", @@ -332,6 +353,7 @@ "jars[_token] != 0", "strategist != 0", "devfund != 0", + "convenienceFee > 0", "convenienceFee == 100", "convenienceFee one of [100]", "timelock != 0", @@ -346,6 +368,8 @@ "treasury == ori(treasury)", "_jar == jars[_token]", "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", "strategist != ori(governance)", "strategist == ori(strategist)", "strategist != msg.sender", @@ -425,11 +449,13 @@ "_strategy != 0", "ori(devfund) != 0", "ori(strategies[_token]) == 0", + "ori(split) > 0", "ori(split) == 500", "ori(split) one of [500]", "msg.value == 0", "msg.value one of [0]", "ori(approvedStrategies[_token][_strategy]) == true", + "ori(convenienceFee) > 0", "ori(convenienceFee) == 100", "ori(convenienceFee) one of [100]", "ori(governance) != 0", @@ -447,6 +473,7 @@ "postconditions": [ "approvedStrategies[_token][_strategy] == true", "governance != 0", + "split > 0", "split == 500", "split one of [500]", "onesplit != 0", @@ -454,6 +481,7 @@ "strategies[_token] != 0", "strategist != 0", "devfund != 0", + "convenienceFee > 0", "convenienceFee == 100", "convenienceFee one of [100]", "timelock != 0", @@ -469,6 +497,8 @@ "onesplit == ori(onesplit)", "treasury == ori(treasury)", "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", "strategist != ori(governance)", "strategist == ori(strategist)", "strategist != msg.sender", @@ -492,10 +522,12 @@ "executionType": "TxType.NORMAL", "preconditions": [ "ori(devfund) != 0", + "ori(split) > 0", "ori(split) == 500", "ori(split) one of [500]", "msg.value == 0", "msg.value one of [0]", + "ori(convenienceFee) > 0", "ori(convenienceFee) == 100", "ori(convenienceFee) one of [100]", "ori(governance) != 0", @@ -511,12 +543,14 @@ ], "postconditions": [ "governance != 0", + "split > 0", "split == 500", "split one of [500]", "onesplit != 0", "treasury != 0", "strategist != 0", "devfund != 0", + "convenienceFee > 0", "convenienceFee == 100", "convenienceFee one of [100]", "timelock != 0", @@ -526,6 +560,8 @@ "onesplit == ori(onesplit)", "treasury == ori(treasury)", "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", "strategist == ori(strategist)", "ori(timelock) != timelock", "msg.sender != timelock", @@ -639,8 +675,10 @@ "executionType": "TxType.NORMAL", "preconditions": [ "ori(devfund) != 0", + "ori(split) > 0", "ori(split) == 500", "ori(split) one of [500]", + "ori(convenienceFee) > 0", "ori(convenienceFee) == 100", "ori(convenienceFee) one of [100]", "ori(governance) != 0", @@ -652,12 +690,14 @@ ], "postconditions": [ "governance != 0", + "split > 0", "split == 500", "split one of [500]", "onesplit != 0", "treasury != 0", "strategist != 0", "devfund != 0", + "convenienceFee > 0", "convenienceFee == 100", "convenienceFee one of [100]", "timelock != 0", @@ -668,6 +708,8 @@ "onesplit == ori(onesplit)", "treasury == ori(treasury)", "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee", "strategist != ori(governance)", "strategist == ori(strategist)" ], diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json index 479dbee..1cf2310 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x6b7a87899490ece95443e979ca9485cbe7e71522.json @@ -68,12 +68,14 @@ "ori(_newMPC) != 0", "msg.value == 0", "msg.value one of [0]", + "ori(_newMPCEffectiveTime) > 0", "ori(_newMPCEffectiveTime) == 1624013046", "ori(_newMPCEffectiveTime) one of [1624013046]", "msg.sender != 0" ], "postconditions": [ "_newMPC != 0", + "_newMPCEffectiveTime > 0", "_newMPCEffectiveTime == 1624013046", "_newMPCEffectiveTime one of [1624013046]", "_oldMPC == 0", @@ -154,20 +156,24 @@ "preconditions": [ "to != 0", "token != 0", + "toChainID > 0", "toChainID == 56", "toChainID one of [56]", + "amount > 0", "amount == 390000000000", "amount one of [390000000000]", "ori(_oldMPC) == 0", "ori(_newMPC) != 0", "msg.value == 0", "msg.value one of [0]", + "ori(_newMPCEffectiveTime) > 0", "ori(_newMPCEffectiveTime) == 1624013046", "ori(_newMPCEffectiveTime) one of [1624013046]", "msg.sender != 0" ], "postconditions": [ "_newMPC != 0", + "_newMPCEffectiveTime > 0", "_newMPCEffectiveTime == 1624013046", "_newMPCEffectiveTime one of [1624013046]", "_oldMPC == 0", @@ -363,12 +369,14 @@ "ori(_newMPC) != 0", "msg.value == 0", "msg.value one of [0]", + "ori(_newMPCEffectiveTime) > 0", "ori(_newMPCEffectiveTime) == 1624013046", "ori(_newMPCEffectiveTime) one of [1624013046]", "msg.sender != 0" ], "postconditions": [ "_newMPC != 0", + "_newMPCEffectiveTime > 0", "_newMPCEffectiveTime == 1624013046", "_newMPCEffectiveTime one of [1624013046]", "_oldMPC == 0", @@ -521,11 +529,13 @@ "preconditions": [ "ori(_oldMPC) == 0", "ori(_newMPC) != 0", + "ori(_newMPCEffectiveTime) > 0", "ori(_newMPCEffectiveTime) == 1624013046", "ori(_newMPCEffectiveTime) one of [1624013046]" ], "postconditions": [ "_newMPC != 0", + "_newMPCEffectiveTime > 0", "_newMPCEffectiveTime == 1624013046", "_newMPCEffectiveTime one of [1624013046]", "_oldMPC == 0", diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json index 1cc42db..5fdb5f1 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x818e6fecd516ecc3849daf6845e3ec868087b755.json @@ -58,6 +58,7 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(Sum(decimals[...])) > 0", "ori(Sum(decimals[...])) == 81", "ori(Sum(decimals[...])) one of [81]", "ori(pendingAdmin) != 0", @@ -68,6 +69,7 @@ "sendTo != 0", "token != 0", "ori(admin) != 0", + "amount > 0", "amount == 40963957051", "amount one of [40963957051]", "msg.sender == ori(admin)" @@ -77,10 +79,13 @@ "elem of decimals[...] is one of [9,18]", "pendingAdmin != 0", "admin != 0", + "Sum(decimals[...]) > 0", "Sum(decimals[...]) == 81", "Sum(decimals[...]) one of [81]", "kyberNetworkContract != 0", "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", "ori(pendingAdmin) == pendingAdmin", "msg.sender == admin", "ori(kyberNetworkContract) == kyberNetworkContract", @@ -160,6 +165,8 @@ "Sum(decimals[...]) one of [0]", "kyberNetworkContract != 0", "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", "ori(pendingAdmin) != pendingAdmin", "msg.sender == admin", "ori(kyberNetworkContract) == kyberNetworkContract", @@ -241,6 +248,8 @@ "Sum(decimals[...]) one of [0]", "kyberNetworkContract != 0", "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", "ori(pendingAdmin) == pendingAdmin", "msg.sender != admin", "ori(kyberNetworkContract) == kyberNetworkContract", @@ -303,6 +312,8 @@ "Sum(decimals[...]) one of [0]", "kyberNetworkContract != 0", "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])", "_kyberNetworkContract == kyberNetworkContract", "ori(pendingAdmin) == pendingAdmin", "msg.sender == admin", diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json index 78cdaa3..a47671d 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0x88093840aad42d2621e1a452bf5d7076ff804d61.json @@ -13,14 +13,17 @@ "ori(rebasePausedDeprecated) == false", "ori(_allowedFragments[msg.sender][spender]) == 0", "ori(_allowedFragments[msg.sender][spender]) one of [0]", + "ori(_totalSupply) > 0", "ori(_totalSupply) == 60000000000000", "ori(_totalSupply) one of [60000000000000]", "ori(initialized) == true", "msg.value == 0", "msg.value one of [0]", "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) > 0", "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(_gonsPerFragment) > 0", "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733", "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]", "ori(_owner) == 0", @@ -29,13 +32,14 @@ "value > 0", "value one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", "ori(Sum(_allowedFragments[msg.sender][...])) == ori(_allowedFragments[msg.sender][spender])", - "ori(Sum(_allowedFragments[msg.sender][...])) < value", - "ori(_allowedFragments[msg.sender][spender]) < value" + "ori(Sum(_allowedFragments[msg.sender][...])) != value", + "ori(_allowedFragments[msg.sender][spender]) != value" ], "postconditions": [ "_allowedFragments[msg.sender][spender] > 0", "_allowedFragments[msg.sender][spender] one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", "initializing == false", + "_totalSupply > 0", "_totalSupply == 60000000000000", "_totalSupply one of [60000000000000]", "rebasePausedDeprecated == false", @@ -43,9 +47,11 @@ "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", "Sum(_allowedFragments[msg.sender][...]) > 0", "Sum(_allowedFragments[msg.sender][...]) one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", + "_gonsPerFragment > 0", "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", "_decimals == 0", @@ -56,14 +62,18 @@ "elem of _allowedFragments[msg.sender][...] is one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]", "ori(initializing) == initializing", "_allowedFragments[msg.sender][spender] > ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] != ori(Sum(_allowedFragments[msg.sender][...]))", "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])", - "_allowedFragments[msg.sender][spender] > ori(_allowedFragments[msg.sender][spender])", + "_allowedFragments[msg.sender][spender] >= Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] <= Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] != ori(_allowedFragments[msg.sender][spender])", "_allowedFragments[msg.sender][spender] == value", "ori(Sum(_allowedFragments[msg.sender][...])) < Sum(_allowedFragments[msg.sender][...])", + "ori(Sum(_allowedFragments[msg.sender][...])) != Sum(_allowedFragments[msg.sender][...])", "_totalSupply == ori(_totalSupply)", "rebasePausedDeprecated == ori(rebasePausedDeprecated)", "monetaryPolicy == ori(monetaryPolicy)", - "Sum(_allowedFragments[msg.sender][...]) > ori(_allowedFragments[msg.sender][spender])", + "Sum(_allowedFragments[msg.sender][...]) != ori(_allowedFragments[msg.sender][spender])", "Sum(_allowedFragments[msg.sender][...]) == value", "ori(tokenPausedDeprecated) == tokenPausedDeprecated", "_gonsPerFragment == ori(_gonsPerFragment)", @@ -183,14 +193,17 @@ "msg.sender != 0", "ori(tokenPausedDeprecated) == false", "ori(rebasePausedDeprecated) == false", + "ori(_totalSupply) > 0", "ori(_totalSupply) == 60000000000000", "ori(_totalSupply) one of [60000000000000]", "ori(initialized) == true", "msg.value == 0", "msg.value one of [0]", "ori(monetaryPolicy) == 0", + "ori(Sum(_gonBalances[...])) > 0", "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "ori(_gonsPerFragment) > 0", "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733", "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]", "ori(_owner) == 0", @@ -201,14 +214,17 @@ ], "postconditions": [ "initializing == false", + "_totalSupply > 0", "_totalSupply == 60000000000000", "_totalSupply one of [60000000000000]", "rebasePausedDeprecated == false", "monetaryPolicy == 0", "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment > 0", "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", "_decimals == 0", @@ -309,14 +325,17 @@ ], "postconditions": [ "initializing == false", + "_totalSupply > 0", "_totalSupply == 60000000000000", "_totalSupply one of [60000000000000]", "rebasePausedDeprecated == false", "monetaryPolicy == 0", "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment > 0", "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", "_decimals == 0", @@ -333,15 +352,15 @@ "initializing == tokenPausedDeprecated", "initializing == ori(initialized)", "initializing != initialized", - "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", "rebasePausedDeprecated == ori(rebasePausedDeprecated)", "monetaryPolicy == ori(monetaryPolicy)", "ori(tokenPausedDeprecated) == tokenPausedDeprecated", "ori(tokenPausedDeprecated) != initialized", - "_gonsPerFragment > ori(_gonsPerFragment)", + "_gonsPerFragment != ori(_gonsPerFragment)", "tokenPausedDeprecated == ori(initialized)", "tokenPausedDeprecated != initialized", - "Sum(_gonBalances[...]) > ori(Sum(_gonBalances[...]))", + "Sum(_gonBalances[...]) != ori(Sum(_gonBalances[...]))", "Sum(_gonBalances[...]) >= ori(_gonBalances[owner_])", "Sum(_gonBalances[...]) > ori(_gonBalances[owner_])", "Sum(_gonBalances[...]) != ori(_gonBalances[owner_])", @@ -408,14 +427,17 @@ ], "postconditions": [ "initializing == false", + "_totalSupply > 0", "_totalSupply == 60000000000000", "_totalSupply one of [60000000000000]", "rebasePausedDeprecated == false", "monetaryPolicy == 0", "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", + "_gonsPerFragment > 0", "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733", "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]", "tokenPausedDeprecated == false", + "Sum(_gonBalances[...]) > 0", "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000", "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]", "_decimals == 0", @@ -429,13 +451,14 @@ "initializing == tokenPausedDeprecated", "initializing != initialized", "_totalSupply < _gonsPerFragment", + "_totalSupply != _gonsPerFragment", "_totalSupply >= ori(_totalSupply)", "_totalSupply != ori(_gonsPerFragment)", "rebasePausedDeprecated == ori(rebasePausedDeprecated)", "monetaryPolicy == ori(monetaryPolicy)", "ori(tokenPausedDeprecated) == tokenPausedDeprecated", "ori(tokenPausedDeprecated) != initialized", - "_gonsPerFragment > ori(_totalSupply)", + "_gonsPerFragment != ori(_totalSupply)", "_gonsPerFragment >= ori(_gonsPerFragment)", "tokenPausedDeprecated != initialized", "Sum(_gonBalances[...]) >= ori(Sum(_gonBalances[...]))", diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json index 550e29a..7f146f1 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/0xacd43e627e64355f1861cec6d3a6688b31a6f952.json @@ -42,11 +42,13 @@ "preconditions": [ "msg.value == 0", "msg.value one of [0]", + "ori(_decimals) > 0", "ori(_decimals) == 18", "ori(_decimals) one of [18]", "ori(_totalSupply) one of [0,141846855438073018741198,142345985557645870700604,128570263817014177167271]", "ori(_balances[msg.sender]) == 0", "ori(_balances[msg.sender]) one of [0]", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(token) != 0", @@ -58,6 +60,8 @@ "ori(controller) != 0", "ori(_totalSupply) >= ori(_balances[msg.sender])", "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" ], "postconditions": [ @@ -66,29 +70,42 @@ "token != 0", "Sum(_balances[...]) > 0", "Sum(_balances[...]) one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]", + "_decimals > 0", "_decimals == 18", "_decimals one of [18]", "governance != 0", "_balances[msg.sender] > 0", "_balances[msg.sender] one of [13082359060001746878663,103789481789261074604,100000000000000000000,499130119572851959406]", "controller != 0", + "min > 0", "min == 9500", "min one of [9500]", "elem of _balances[...] is one of [142345985557645870700604]", - "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", "_totalSupply >= _balances[msg.sender]", "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", "token == ori(token)", "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", "ori(_totalSupply) != _balances[msg.sender]", "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", "Sum(_balances[...]) >= _balances[msg.sender]", - "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", "governance == ori(governance)", "_balances[msg.sender] != ori(Sum(_balances[...]))", "controller == ori(controller)" @@ -112,10 +129,12 @@ "preconditions": [ "msg.value == 0", "msg.value one of [0]", + "ori(_decimals) > 0", "ori(_decimals) == 18", "ori(_decimals) one of [18]", "ori(_totalSupply) > 0", "ori(_balances[msg.sender]) one of [0,90000000000000000000]", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(token) != 0", @@ -125,34 +144,49 @@ "ori(controller) != 0", "ori(_totalSupply) >= ori(_balances[msg.sender])", "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" ], "postconditions": [ "_totalSupply > 0", "token != 0", "Sum(_balances[...]) > 0", + "_decimals > 0", "_decimals == 18", "_decimals one of [18]", "governance != 0", "_balances[msg.sender] > 0", "controller != 0", + "min > 0", "min == 9500", "min one of [9500]", "elem of _balances[...] is one of [134406668607338084218100]", - "_totalSupply > ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", "_totalSupply >= _balances[msg.sender]", "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", "token == ori(token)", "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", "ori(_totalSupply) != _balances[msg.sender]", "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", "Sum(_balances[...]) >= _balances[msg.sender]", - "Sum(_balances[...]) > ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", "governance == ori(governance)", "_balances[msg.sender] != ori(Sum(_balances[...]))", "controller == ori(controller)" @@ -176,10 +210,12 @@ "preconditions": [ "msg.value == 0", "msg.value one of [0]", + "ori(_decimals) > 0", "ori(_decimals) == 18", "ori(_decimals) one of [18]", "ori(_totalSupply) > 0", "ori(_totalSupply) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(token) != 0", @@ -195,19 +231,25 @@ "token != 0", "Sum(_balances[...]) > 0", "Sum(_balances[...]) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]", + "_decimals > 0", "_decimals == 18", "_decimals one of [18]", "governance != 0", "elem of _balances[...] is one of [100000000000000000000]", "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,193288114234845046898,15113130871002806453838,100000000000000000000,7682645945411942583280,9999286966540985221802,58078098074825682085113]", "controller != 0", + "min > 0", "min == 9500", "min one of [9500]", "_totalSupply == ori(_totalSupply)", "token == ori(token)", "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", "Sum(_balances[...]) == ori(Sum(_balances[...]))", "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", "governance == ori(governance)", "controller == ori(controller)" ], @@ -285,13 +327,17 @@ "_governance != 0", "msg.value == 0", "msg.value one of [0]", + "ori(_decimals) > 0", "ori(_decimals) == 18", "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", "ori(_totalSupply) == 142449775039435131775208", "ori(_totalSupply) one of [142449775039435131775208]", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", "ori(Sum(_balances[...])) == 142449775039435131775208", "ori(Sum(_balances[...])) one of [142449775039435131775208]", "ori(governance) != 0", @@ -302,25 +348,33 @@ "ori(governance) == msg.sender" ], "postconditions": [ + "_totalSupply > 0", "_totalSupply == 142449775039435131775208", "_totalSupply one of [142449775039435131775208]", "token != 0", + "Sum(_balances[...]) > 0", "Sum(_balances[...]) == 142449775039435131775208", "Sum(_balances[...]) one of [142449775039435131775208]", + "_decimals > 0", "_decimals == 18", "_decimals one of [18]", "governance != 0", "elem of _balances[...] is one of [142449775039435131775208]", "elem of _balances[...] is one of [5000096484670531227816,723959234856246226088,0,193288114234845046898,499130119572851959406,15113130871002806453838,2887782269888984921831,28891975855582153400605,13082359060001746878663,7682645945411942583280,194232561057094695264,103789481789261074604,9999286966540985221802,58078098074825682085113]", "controller != 0", + "min > 0", "min == 9500", "min one of [9500]", "_governance == governance", "_totalSupply == ori(_totalSupply)", "token == ori(token)", "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", "Sum(_balances[...]) == ori(Sum(_balances[...]))", "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", "governance != ori(governance)", "governance != msg.sender", "controller == ori(controller)" @@ -396,59 +450,91 @@ "type": "PptType.EXIT", "executionType": "TxType.NORMAL", "preconditions": [ + "_shares > 0", "_shares == 10000000000000000000", "_shares one of [10000000000000000000]", "msg.value == 0", "msg.value one of [0]", + "ori(_decimals) > 0", "ori(_decimals) == 18", "ori(_decimals) one of [18]", + "ori(_totalSupply) > 0", "ori(_totalSupply) == 100000000000000000000", "ori(_totalSupply) one of [100000000000000000000]", + "ori(_balances[msg.sender]) > 0", "ori(_balances[msg.sender]) == 100000000000000000000", "ori(_balances[msg.sender]) one of [100000000000000000000]", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(token) != 0", + "ori(Sum(_balances[...])) > 0", "ori(Sum(_balances[...])) == 100000000000000000000", "ori(Sum(_balances[...])) one of [100000000000000000000]", "ori(governance) != 0", "msg.sender != 0", "ori(controller) != 0", "ori(_totalSupply) == ori(_balances[msg.sender])", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) <= ori(_balances[msg.sender])", "ori(_totalSupply) == ori(Sum(_balances[...]))", - "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))" + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" ], "postconditions": [ + "_totalSupply > 0", "_totalSupply == 90000000000000000000", "_totalSupply one of [90000000000000000000]", "token != 0", + "Sum(_balances[...]) > 0", "Sum(_balances[...]) == 90000000000000000000", "Sum(_balances[...]) one of [90000000000000000000]", + "_decimals > 0", "_decimals == 18", "_decimals one of [18]", "governance != 0", + "_balances[msg.sender] > 0", "_balances[msg.sender] == 90000000000000000000", "_balances[msg.sender] one of [90000000000000000000]", "controller != 0", + "min > 0", "min == 9500", "min one of [9500]", "elem of _balances[...] is one of [90000000000000000000]", - "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", "_totalSupply < ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", "_totalSupply == _balances[msg.sender]", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply <= _balances[msg.sender]", "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", "token == ori(token)", "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", "ori(_balances[msg.sender]) > Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]", "Sum(_balances[...]) == _balances[msg.sender]", - "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", "governance == ori(governance)", "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", "controller == ori(controller)" ], "falsified_preconditions": [], @@ -470,12 +556,14 @@ "preconditions": [ "msg.value == 0", "msg.value one of [0]", + "ori(_decimals) > 0", "ori(_decimals) == 18", "ori(_decimals) one of [18]", "ori(_totalSupply) > 0", "ori(_totalSupply) one of [128942301002958992697573,134406668607338084218100]", "ori(_balances[msg.sender]) > 0", "ori(_balances[msg.sender]) one of [5464367604379091520527,29264013041526968930907]", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(token) != 0", @@ -485,8 +573,12 @@ "msg.sender != 0", "ori(controller) != 0", "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])", "ori(_totalSupply) == ori(Sum(_balances[...]))", - "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))" + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" ], "postconditions": [ "_totalSupply > 0", @@ -494,31 +586,47 @@ "token != 0", "Sum(_balances[...]) > 0", "Sum(_balances[...]) one of [128942301002958992697573,99678287961432023766666]", + "_decimals > 0", "_decimals == 18", "_decimals one of [18]", "governance != 0", "_balances[msg.sender] == 0", "_balances[msg.sender] one of [0]", "controller != 0", + "min > 0", "min == 9500", "min one of [9500]", "elem of _balances[...] is one of [128942301002958992697573]", - "_totalSupply < ori(_totalSupply)", + "_totalSupply != ori(_totalSupply)", "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])", "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]", "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))", "token == ori(token)", "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])", "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]", "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])", "ori(_balances[msg.sender]) > _balances[msg.sender]", - "Sum(_balances[...]) > _balances[msg.sender]", - "Sum(_balances[...]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != _balances[msg.sender]", + "Sum(_balances[...]) != _balances[msg.sender]", + "Sum(_balances[...]) != ori(Sum(_balances[...]))", "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", "governance == ori(governance)", "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))", "controller == ori(controller)" ], "falsified_preconditions": [], @@ -538,30 +646,42 @@ "type": "PptType.CONTRACT", "executionType": "TxType.NORMAL", "preconditions": [ + "ori(_decimals) > 0", "ori(_decimals) == 18", "ori(_decimals) one of [18]", + "ori(min) > 0", "ori(min) == 9500", "ori(min) one of [9500]", "ori(token) != 0", "ori(governance) != 0", "ori(controller) != 0", - "ori(_totalSupply) == ori(Sum(_balances[...]))" + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" ], "postconditions": [ "_totalSupply > 0", "token != 0", "Sum(_balances[...]) > 0", + "_decimals > 0", "_decimals == 18", "_decimals one of [18]", "governance != 0", "elem of _balances[...] is one of [141846855438073018741198]", "controller != 0", + "min > 0", "min == 9500", "min one of [9500]", "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])", "token == ori(token)", "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals", "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min", "controller == ori(controller)" ], "falsified_preconditions": [], diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json index de0643a..f25f26f 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x39b1df026010b5aea781f90542ee19e900f2db15-kept.json @@ -119,6 +119,30 @@ "length one of [0]" ] }, + { + "before_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ], + "after_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ] + }, + { + "before_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "after_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ] + }, { "before_preds": [ "ori(Q112) == 0" @@ -214,5 +238,29 @@ "after_preds": [ "length one of [0]" ] + }, + { + "before_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ], + "after_preds": [ + "ori(Q112) == Q112", + "ori(Q112) >= Q112", + "ori(Q112) <= Q112" + ] + }, + { + "before_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ], + "after_preds": [ + "ori(length) == length", + "ori(length) >= length", + "ori(length) <= length" + ] } ] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json index b51ce64..44876d2 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-kept.json @@ -1,4 +1,14 @@ [ + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, { "before_preds": [ "ori(feeMax) one of [1000]" @@ -7,6 +17,16 @@ "ori(feeMax) one of [1000]" ] }, + { + "before_preds": [ + "amount > 0", + "amount == 79228162514000000000000000000" + ], + "after_preds": [ + "amount > 0", + "amount == 79228162514000000000000000000" + ] + }, { "before_preds": [ "amount one of [79228162514000000000000000000]" @@ -15,6 +35,16 @@ "amount one of [79228162514000000000000000000]" ] }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, { "before_preds": [ "ori(fee2) one of [3]" @@ -63,6 +93,16 @@ "ori(feeAddress) != 0" ] }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, { "before_preds": [ "ori(fee3) one of [1]" @@ -103,6 +143,16 @@ "ori(controller) != 0" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -135,6 +185,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, { "before_preds": [ "ori(depositWithdrawInterval) one of [60]" @@ -183,6 +243,16 @@ "ori(_totalSupply) > 0" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, { "before_preds": [ "ori(_decimals) one of [6]" @@ -199,6 +269,16 @@ "Sum(_balances[...]) > 0" ] }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, { "before_preds": [ "depositWithdrawInterval one of [60]" @@ -207,6 +287,16 @@ "depositWithdrawInterval one of [60]" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -223,6 +313,16 @@ "token != 0" ] }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, { "before_preds": [ "fee3 one of [1]" @@ -263,6 +363,16 @@ "timelock != 0" ] }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, { "before_preds": [ "fee2 one of [3]" @@ -311,6 +421,16 @@ "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" ] }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, { "before_preds": [ "feeMax one of [1000]" @@ -319,6 +439,16 @@ "feeMax one of [1000]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, { "before_preds": [ "_decimals one of [6]" @@ -359,6 +489,30 @@ "governance != 0" ] }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, { "before_preds": [ "ori(RestrictContractCall) == RestrictContractCall" @@ -367,6 +521,18 @@ "ori(RestrictContractCall) == RestrictContractCall" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, { "before_preds": [ "ori(feeAddress) == feeAddress" @@ -383,6 +549,18 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, { "before_preds": [ "ori(governance) == governance" @@ -407,6 +585,16 @@ "timelock == ori(timelock)" ] }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, { "before_preds": [ "ori(feeMax) one of [1000]" @@ -423,6 +611,16 @@ "_amount > 0" ] }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, { "before_preds": [ "ori(fee2) one of [3]" @@ -471,6 +669,16 @@ "ori(userDepoistTime[msg.sender]) one of [0,1611890956,1612413709,1612672271,1612709011,1612516662]" ] }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, { "before_preds": [ "ori(fee3) one of [1]" @@ -519,6 +727,16 @@ "ori(_balances[msg.sender]) one of [0,494036168419,501354600,72,9986072971,9975667988]" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -551,6 +769,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, { "before_preds": [ "ori(depositWithdrawInterval) one of [60]" @@ -575,6 +803,16 @@ "ori(fee1) one of [10,5]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, { "before_preds": [ "ori(_decimals) one of [6]" @@ -615,6 +853,16 @@ "Sum(_balances[...]) > 0" ] }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, { "before_preds": [ "depositWithdrawInterval one of [60]" @@ -623,6 +871,16 @@ "depositWithdrawInterval one of [60]" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -639,6 +897,16 @@ "token != 0" ] }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, { "before_preds": [ "fee3 one of [1]" @@ -687,6 +955,16 @@ "timelock != 0" ] }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, { "before_preds": [ "fee2 one of [3]" @@ -735,6 +1013,16 @@ "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]" ] }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, { "before_preds": [ "feeMax one of [1000]" @@ -743,6 +1031,16 @@ "feeMax one of [1000]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, { "before_preds": [ "_decimals one of [6]" @@ -815,6 +1113,30 @@ "Sum(_balances[...]) != earnLowerlimit" ] }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, { "before_preds": [ "ori(Sum(_balances[...])) != _balances[msg.sender]" @@ -847,6 +1169,18 @@ "ori(earnLowerlimit) != _totalSupply" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, { "before_preds": [ "ori(feeAddress) == feeAddress" @@ -935,6 +1269,16 @@ "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" ] }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, { "before_preds": [ "ori(feeMax) one of [1000]" @@ -943,6 +1287,16 @@ "ori(feeMax) one of [1000]" ] }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, { "before_preds": [ "ori(fee2) one of [3]" @@ -975,6 +1329,16 @@ "ori(RestrictContractCall) == true" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, { "before_preds": [ "ori(earnLowerlimit) one of [1000000000000000000000000]" @@ -991,6 +1355,16 @@ "ori(feeAddress) != 0" ] }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, { "before_preds": [ "ori(fee3) one of [1]" @@ -1031,6 +1405,16 @@ "ori(controller) != 0" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -1063,6 +1447,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, { "before_preds": [ "ori(depositWithdrawInterval) one of [60]" @@ -1119,6 +1513,16 @@ "ori(_totalSupply) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, { "before_preds": [ "ori(_decimals) one of [6]" @@ -1143,6 +1547,16 @@ "Sum(_balances[...]) one of [82641458184,493442357552,1013641382544,851093071954,636030155668,186161256091,1809316404957]" ] }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, { "before_preds": [ "depositWithdrawInterval one of [60]" @@ -1151,6 +1565,16 @@ "depositWithdrawInterval one of [60]" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -1167,6 +1591,16 @@ "token != 0" ] }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, { "before_preds": [ "fee3 one of [1]" @@ -1223,6 +1657,16 @@ "timelock != 0" ] }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, { "before_preds": [ "fee2 one of [3]" @@ -1255,6 +1699,16 @@ "controller != 0" ] }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ] + }, { "before_preds": [ "earnLowerlimit one of [1000000000000000000000000]" @@ -1263,6 +1717,16 @@ "earnLowerlimit one of [1000000000000000000000000]" ] }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, { "before_preds": [ "feeMax one of [1000]" @@ -1271,6 +1735,16 @@ "feeMax one of [1000]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, { "before_preds": [ "_decimals one of [6]" @@ -1311,6 +1785,30 @@ "governance != 0" ] }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, { "before_preds": [ "ori(RestrictContractCall) == RestrictContractCall" @@ -1319,6 +1817,18 @@ "ori(RestrictContractCall) == RestrictContractCall" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, { "before_preds": [ "ori(feeAddress) == feeAddress" @@ -1335,6 +1845,18 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, { "before_preds": [ "ori(governance) == governance" @@ -1359,6 +1881,16 @@ "timelock == ori(timelock)" ] }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, { "before_preds": [ "ori(feeMax) one of [1000]" @@ -1367,6 +1899,16 @@ "ori(feeMax) one of [1000]" ] }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, { "before_preds": [ "ori(fee2) one of [3]" @@ -1423,6 +1965,16 @@ "ori(feeAddress) != 0" ] }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, { "before_preds": [ "ori(fee3) one of [1]" @@ -1463,6 +2015,16 @@ "ori(controller) != 0" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -1511,6 +2073,16 @@ "_earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" ] }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, { "before_preds": [ "ori(depositWithdrawInterval) one of [60]" @@ -1519,6 +2091,16 @@ "ori(depositWithdrawInterval) one of [60]" ] }, + { + "before_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ], + "after_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ] + }, { "before_preds": [ "ori(fee1) one of [5]" @@ -1559,6 +2141,16 @@ "ori(_totalSupply) one of [50815436600,82641458184]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, { "before_preds": [ "ori(_decimals) one of [6]" @@ -1591,6 +2183,16 @@ "Sum(_balances[...]) one of [50815436600,82641458184]" ] }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, { "before_preds": [ "depositWithdrawInterval one of [60]" @@ -1599,6 +2201,16 @@ "depositWithdrawInterval one of [60]" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -1615,6 +2227,16 @@ "token != 0" ] }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, { "before_preds": [ "fee3 one of [1]" @@ -1679,6 +2301,16 @@ "timelock != 0" ] }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, { "before_preds": [ "fee2 one of [3]" @@ -1687,6 +2319,16 @@ "fee2 one of [3]" ] }, + { + "before_preds": [ + "fee1 > 0", + "fee1 == 5" + ], + "after_preds": [ + "fee1 > 0", + "fee1 == 5" + ] + }, { "before_preds": [ "fee1 one of [5]" @@ -1719,6 +2361,16 @@ "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" ] }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, { "before_preds": [ "feeMax one of [1000]" @@ -1727,6 +2379,16 @@ "feeMax one of [1000]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, { "before_preds": [ "_decimals one of [6]" @@ -1775,6 +2437,30 @@ "governance != 0" ] }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, { "before_preds": [ "ori(RestrictContractCall) == RestrictContractCall" @@ -1799,6 +2485,18 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, { "before_preds": [ "msg.sender == governance" @@ -1831,6 +2529,16 @@ "timelock == ori(timelock)" ] }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, { "before_preds": [ "ori(feeMax) one of [1000]" @@ -1839,6 +2547,16 @@ "ori(feeMax) one of [1000]" ] }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, { "before_preds": [ "ori(fee2) one of [3]" @@ -1847,6 +2565,16 @@ "ori(fee2) one of [3]" ] }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1310289998969" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 1310289998969" + ] + }, { "before_preds": [ "ori(Sum(_balances[...])) one of [1310289998969]" @@ -1863,6 +2591,16 @@ "ori(RestrictContractCall) == true" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, { "before_preds": [ "ori(earnLowerlimit) one of [1000000000000000000000000]" @@ -1879,6 +2617,16 @@ "ori(feeAddress) != 0" ] }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, { "before_preds": [ "ori(fee3) one of [1]" @@ -1919,6 +2667,16 @@ "ori(controller) != 0" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -1951,6 +2709,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, { "before_preds": [ "ori(depositWithdrawInterval) one of [60]" @@ -1959,6 +2727,16 @@ "ori(depositWithdrawInterval) one of [60]" ] }, + { + "before_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ], + "after_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ] + }, { "before_preds": [ "ori(fee1) one of [5]" @@ -1967,6 +2745,16 @@ "ori(fee1) one of [5]" ] }, + { + "before_preds": [ + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 41922035526" + ], + "after_preds": [ + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 41922035526" + ] + }, { "before_preds": [ "ori(Sum(userDepoistTime[...])) one of [41922035526]" @@ -1975,6 +2763,16 @@ "ori(Sum(userDepoistTime[...])) one of [41922035526]" ] }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1310289998969" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 1310289998969" + ] + }, { "before_preds": [ "ori(_totalSupply) one of [1310289998969]" @@ -1983,6 +2781,16 @@ "ori(_totalSupply) one of [1310289998969]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, { "before_preds": [ "ori(_decimals) one of [6]" @@ -1999,6 +2807,16 @@ "msg.sender == ori(timelock)" ] }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1310289998969" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 1310289998969" + ] + }, { "before_preds": [ "Sum(_balances[...]) one of [1310289998969]" @@ -2007,6 +2825,16 @@ "Sum(_balances[...]) one of [1310289998969]" ] }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, { "before_preds": [ "depositWithdrawInterval one of [60]" @@ -2015,6 +2843,16 @@ "depositWithdrawInterval one of [60]" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -2031,6 +2869,16 @@ "token != 0" ] }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, { "before_preds": [ "fee3 one of [1]" @@ -2055,6 +2903,16 @@ "elem of _balances[...] is one of [0,4,6,9,17,23,26,29,36,43,47,73,75,1300417580500,84,88,92,93,97,98,9872417260]" ] }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 1310289998969" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 1310289998969" + ] + }, { "before_preds": [ "_totalSupply one of [1310289998969]" @@ -2063,6 +2921,16 @@ "_totalSupply one of [1310289998969]" ] }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 41922035526" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 41922035526" + ] + }, { "before_preds": [ "Sum(userDepoistTime[...]) one of [41922035526]" @@ -2079,6 +2947,16 @@ "timelock != 0" ] }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, { "before_preds": [ "fee2 one of [3]" @@ -2087,6 +2965,16 @@ "fee2 one of [3]" ] }, + { + "before_preds": [ + "fee1 > 0", + "fee1 == 10" + ], + "after_preds": [ + "fee1 > 0", + "fee1 == 10" + ] + }, { "before_preds": [ "fee1 one of [10]" @@ -2103,6 +2991,16 @@ "controller != 0" ] }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ] + }, { "before_preds": [ "earnLowerlimit one of [1000000000000000000000000]" @@ -2111,6 +3009,16 @@ "earnLowerlimit one of [1000000000000000000000000]" ] }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, { "before_preds": [ "feeMax one of [1000]" @@ -2119,6 +3027,16 @@ "feeMax one of [1000]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, { "before_preds": [ "_decimals one of [6]" @@ -2167,6 +3085,30 @@ "governance != 0" ] }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, { "before_preds": [ "ori(RestrictContractCall) == RestrictContractCall" @@ -2175,6 +3117,18 @@ "ori(RestrictContractCall) == RestrictContractCall" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, { "before_preds": [ "ori(feeAddress) == feeAddress" @@ -2191,6 +3145,18 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, { "before_preds": [ "msg.sender == timelock" @@ -2223,6 +3189,16 @@ "timelock == ori(timelock)" ] }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, { "before_preds": [ "ori(feeMax) one of [1000]" @@ -2231,6 +3207,16 @@ "ori(feeMax) one of [1000]" ] }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, { "before_preds": [ "ori(fee2) one of [3]" @@ -2239,6 +3225,16 @@ "ori(fee2) one of [3]" ] }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 851093071954" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 851093071954" + ] + }, { "before_preds": [ "ori(Sum(_balances[...])) one of [851093071954]" @@ -2255,6 +3251,16 @@ "ori(RestrictContractCall) == true" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, { "before_preds": [ "ori(earnLowerlimit) one of [1000000000000000000000000]" @@ -2279,6 +3285,16 @@ "_governance != 0" ] }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, { "before_preds": [ "ori(fee3) one of [1]" @@ -2319,6 +3335,16 @@ "ori(controller) != 0" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -2340,47 +3366,97 @@ "msg.value == 0" ], "after_preds": [ - "msg.value == 0" + "msg.value == 0" + ] + }, + { + "before_preds": [ + "msg.value one of [0]" + ], + "after_preds": [ + "msg.value one of [0]" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, + { + "before_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ], + "after_preds": [ + "ori(depositWithdrawInterval) one of [60]" + ] + }, + { + "before_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ], + "after_preds": [ + "ori(fee1) > 0", + "ori(fee1) == 5" + ] + }, + { + "before_preds": [ + "ori(fee1) one of [5]" + ], + "after_preds": [ + "ori(fee1) one of [5]" ] }, { "before_preds": [ - "msg.value one of [0]" + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 32247272285" ], "after_preds": [ - "msg.value one of [0]" + "ori(Sum(userDepoistTime[...])) > 0", + "ori(Sum(userDepoistTime[...])) == 32247272285" ] }, { "before_preds": [ - "ori(depositWithdrawInterval) one of [60]" + "ori(Sum(userDepoistTime[...])) one of [32247272285]" ], "after_preds": [ - "ori(depositWithdrawInterval) one of [60]" + "ori(Sum(userDepoistTime[...])) one of [32247272285]" ] }, { "before_preds": [ - "ori(fee1) one of [5]" + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 851093071954" ], "after_preds": [ - "ori(fee1) one of [5]" + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 851093071954" ] }, { "before_preds": [ - "ori(Sum(userDepoistTime[...])) one of [32247272285]" + "ori(_totalSupply) one of [851093071954]" ], "after_preds": [ - "ori(Sum(userDepoistTime[...])) one of [32247272285]" + "ori(_totalSupply) one of [851093071954]" ] }, { "before_preds": [ - "ori(_totalSupply) one of [851093071954]" + "ori(_decimals) > 0", + "ori(_decimals) == 6" ], "after_preds": [ - "ori(_totalSupply) one of [851093071954]" + "ori(_decimals) > 0", + "ori(_decimals) == 6" ] }, { @@ -2415,6 +3491,16 @@ "msg.sender == ori(governance)" ] }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 851093071954" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 851093071954" + ] + }, { "before_preds": [ "Sum(_balances[...]) one of [851093071954]" @@ -2423,6 +3509,16 @@ "Sum(_balances[...]) one of [851093071954]" ] }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, { "before_preds": [ "depositWithdrawInterval one of [60]" @@ -2431,6 +3527,16 @@ "depositWithdrawInterval one of [60]" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -2447,6 +3553,16 @@ "token != 0" ] }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, { "before_preds": [ "fee3 one of [1]" @@ -2471,6 +3587,16 @@ "elem of _balances[...] is one of [0,4,6,9,18,23,26,29,36,73,75,77,84,115213479893,88,92,93,97,1373058547,734506532600]" ] }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 851093071954" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 851093071954" + ] + }, { "before_preds": [ "_totalSupply one of [851093071954]" @@ -2479,6 +3605,16 @@ "_totalSupply one of [851093071954]" ] }, + { + "before_preds": [ + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 32247272285" + ], + "after_preds": [ + "Sum(userDepoistTime[...]) > 0", + "Sum(userDepoistTime[...]) == 32247272285" + ] + }, { "before_preds": [ "Sum(userDepoistTime[...]) one of [32247272285]" @@ -2495,6 +3631,16 @@ "timelock != 0" ] }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, { "before_preds": [ "fee2 one of [3]" @@ -2503,6 +3649,16 @@ "fee2 one of [3]" ] }, + { + "before_preds": [ + "fee1 > 0", + "fee1 == 5" + ], + "after_preds": [ + "fee1 > 0", + "fee1 == 5" + ] + }, { "before_preds": [ "fee1 one of [5]" @@ -2519,6 +3675,16 @@ "controller != 0" ] }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ] + }, { "before_preds": [ "earnLowerlimit one of [1000000000000000000000000]" @@ -2527,6 +3693,16 @@ "earnLowerlimit one of [1000000000000000000000000]" ] }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, { "before_preds": [ "feeMax one of [1000]" @@ -2535,6 +3711,16 @@ "feeMax one of [1000]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, { "before_preds": [ "_decimals one of [6]" @@ -2583,6 +3769,30 @@ "governance != 0" ] }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, { "before_preds": [ "ori(RestrictContractCall) == RestrictContractCall" @@ -2591,6 +3801,18 @@ "ori(RestrictContractCall) == RestrictContractCall" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, { "before_preds": [ "ori(feeAddress) == feeAddress" @@ -2615,6 +3837,18 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, { "before_preds": [ "msg.sender != governance" @@ -2647,6 +3881,16 @@ "timelock == ori(timelock)" ] }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, { "before_preds": [ "ori(feeMax) one of [1000]" @@ -2671,6 +3915,16 @@ "amount one of [4673850400,19974784100,120385957800,499026405900,31826021500]" ] }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, { "before_preds": [ "ori(fee2) one of [3]" @@ -2727,6 +3981,16 @@ "ori(feeAddress) != 0" ] }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, { "before_preds": [ "ori(fee3) one of [1]" @@ -2783,6 +4047,16 @@ "ori(controller) != 0" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -2815,6 +4089,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, { "before_preds": [ "ori(depositWithdrawInterval) one of [60]" @@ -2879,6 +4163,16 @@ "ori(_totalSupply) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, { "before_preds": [ "ori(_decimals) one of [6]" @@ -2903,6 +4197,16 @@ "Sum(_balances[...]) one of [1003539015686,82641458184,1688930447121,1440140604945,1023513799804,1809316404957]" ] }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, { "before_preds": [ "depositWithdrawInterval one of [60]" @@ -2911,6 +4215,16 @@ "depositWithdrawInterval one of [60]" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -2943,6 +4257,16 @@ "token != 0" ] }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, { "before_preds": [ "fee3 one of [1]" @@ -2999,6 +4323,16 @@ "timelock != 0" ] }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, { "before_preds": [ "fee2 one of [3]" @@ -3047,6 +4381,16 @@ "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" ] }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, { "before_preds": [ "feeMax one of [1000]" @@ -3055,6 +4399,16 @@ "feeMax one of [1000]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, { "before_preds": [ "_decimals one of [6]" @@ -3095,6 +4449,30 @@ "governance != 0" ] }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, { "before_preds": [ "ori(RestrictContractCall) == RestrictContractCall" @@ -3103,6 +4481,18 @@ "ori(RestrictContractCall) == RestrictContractCall" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, { "before_preds": [ "ori(feeAddress) == feeAddress" @@ -3119,6 +4509,18 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, { "before_preds": [ "ori(governance) == governance" @@ -3143,6 +4545,16 @@ "timelock == ori(timelock)" ] }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, { "before_preds": [ "ori(feeMax) one of [1000]" @@ -3159,6 +4571,16 @@ "amount > 0" ] }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, { "before_preds": [ "ori(fee2) one of [3]" @@ -3223,6 +4645,16 @@ "ori(Sum(_allowances[sender][...])) one of [79228162513999999970070829900,79228162513999999968173978500,79228162514000000000000000000]" ] }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, { "before_preds": [ "ori(fee3) one of [1]" @@ -3263,6 +4695,16 @@ "ori(controller) != 0" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -3303,6 +4745,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, { "before_preds": [ "ori(depositWithdrawInterval) one of [60]" @@ -3359,6 +4811,16 @@ "ori(_balances[sender]) > 0" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, { "before_preds": [ "ori(_decimals) one of [6]" @@ -3393,18 +4855,38 @@ }, { "before_preds": [ - "Sum(_allowances[sender][...]) > 0" + "Sum(_allowances[sender][...]) > 0" + ], + "after_preds": [ + "Sum(_allowances[sender][...]) > 0" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, + { + "before_preds": [ + "depositWithdrawInterval one of [60]" ], "after_preds": [ - "Sum(_allowances[sender][...]) > 0" + "depositWithdrawInterval one of [60]" ] }, { "before_preds": [ - "depositWithdrawInterval one of [60]" + "min > 0", + "min == 9500" ], "after_preds": [ - "depositWithdrawInterval one of [60]" + "min > 0", + "min == 9500" ] }, { @@ -3431,6 +4913,16 @@ "token != 0" ] }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, { "before_preds": [ "fee3 one of [1]" @@ -3471,6 +4963,16 @@ "timelock != 0" ] }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, { "before_preds": [ "fee2 one of [3]" @@ -3527,6 +5029,16 @@ "earnLowerlimit one of [500000000000000000000000,1000000000000000000000000]" ] }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, { "before_preds": [ "feeMax one of [1000]" @@ -3535,6 +5047,16 @@ "feeMax one of [1000]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, { "before_preds": [ "_decimals one of [6]" @@ -3575,6 +5097,18 @@ "governance != 0" ] }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, { "before_preds": [ "_balances[sender] != ori(_balances[recipient])" @@ -3583,6 +5117,18 @@ "_balances[sender] != ori(_balances[recipient])" ] }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, { "before_preds": [ "ori(RestrictContractCall) == RestrictContractCall" @@ -3591,6 +5137,18 @@ "ori(RestrictContractCall) == RestrictContractCall" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, { "before_preds": [ "ori(feeAddress) == feeAddress" @@ -3615,6 +5173,18 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, { "before_preds": [ "ori(governance) == governance" @@ -3639,6 +5209,16 @@ "timelock == ori(timelock)" ] }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, { "before_preds": [ "ori(feeMax) one of [1000]" @@ -3647,6 +5227,16 @@ "ori(feeMax) one of [1000]" ] }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, { "before_preds": [ "ori(fee2) one of [3]" @@ -3679,6 +5269,16 @@ "ori(RestrictContractCall) == true" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ], + "after_preds": [ + "ori(earnLowerlimit) > 0", + "ori(earnLowerlimit) == 1000000000000000000000000" + ] + }, { "before_preds": [ "ori(earnLowerlimit) one of [1000000000000000000000000]" @@ -3711,6 +5311,16 @@ "ori(userDepoistTime[msg.sender]) one of [1612433282,1612399975,1612393607,1612518734,1612408564,1612024191]" ] }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, { "before_preds": [ "ori(fee3) one of [1]" @@ -3767,6 +5377,16 @@ "ori(_balances[msg.sender]) one of [499026405988,120385957836,4673850477,31826021584,19974784118,262979296856]" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -3799,6 +5419,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, { "before_preds": [ "ori(depositWithdrawInterval) one of [60]" @@ -3855,6 +5485,16 @@ "ori(_totalSupply) one of [1003539015686,1114072368810,1688930447121,1440140604945,1023513799804,1809316404957]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, { "before_preds": [ "ori(_decimals) one of [6]" @@ -3879,6 +5519,16 @@ "Sum(_balances[...]) one of [1408314583361,1003539015686,1189904041133,1688930447121,851093071954,998865165209]" ] }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, { "before_preds": [ "depositWithdrawInterval one of [60]" @@ -3887,6 +5537,16 @@ "depositWithdrawInterval one of [60]" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -3903,6 +5563,16 @@ "token != 0" ] }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, { "before_preds": [ "fee3 one of [1]" @@ -3975,6 +5645,16 @@ "timelock != 0" ] }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, { "before_preds": [ "fee2 one of [3]" @@ -4007,6 +5687,16 @@ "controller != 0" ] }, + { + "before_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ], + "after_preds": [ + "earnLowerlimit > 0", + "earnLowerlimit == 1000000000000000000000000" + ] + }, { "before_preds": [ "earnLowerlimit one of [1000000000000000000000000]" @@ -4015,6 +5705,16 @@ "earnLowerlimit one of [1000000000000000000000000]" ] }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, { "before_preds": [ "feeMax one of [1000]" @@ -4023,6 +5723,16 @@ "feeMax one of [1000]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, { "before_preds": [ "_decimals one of [6]" @@ -4079,6 +5789,30 @@ "governance != 0" ] }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, { "before_preds": [ "ori(RestrictContractCall) == RestrictContractCall" @@ -4087,6 +5821,18 @@ "ori(RestrictContractCall) == RestrictContractCall" ] }, + { + "before_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ], + "after_preds": [ + "ori(earnLowerlimit) == earnLowerlimit", + "ori(earnLowerlimit) >= earnLowerlimit", + "ori(earnLowerlimit) <= earnLowerlimit" + ] + }, { "before_preds": [ "ori(feeAddress) == feeAddress" @@ -4103,6 +5849,18 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) >= userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]" + ], + "after_preds": [ + "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) >= userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]" + ] + }, { "before_preds": [ "ori(governance) == governance" @@ -4127,6 +5885,16 @@ "timelock == ori(timelock)" ] }, + { + "before_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ], + "after_preds": [ + "ori(feeMax) > 0", + "ori(feeMax) == 1000" + ] + }, { "before_preds": [ "ori(feeMax) one of [1000]" @@ -4135,6 +5903,16 @@ "ori(feeMax) one of [1000]" ] }, + { + "before_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ], + "after_preds": [ + "ori(fee2) > 0", + "ori(fee2) == 3" + ] + }, { "before_preds": [ "ori(fee2) one of [3]" @@ -4175,6 +5953,16 @@ "ori(feeAddress) != 0" ] }, + { + "before_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ], + "after_preds": [ + "ori(fee3) > 0", + "ori(fee3) == 1" + ] + }, { "before_preds": [ "ori(fee3) one of [1]" @@ -4207,6 +5995,16 @@ "ori(controller) != 0" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -4223,6 +6021,16 @@ "ori(timelock) != 0" ] }, + { + "before_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ], + "after_preds": [ + "ori(depositWithdrawInterval) > 0", + "ori(depositWithdrawInterval) == 60" + ] + }, { "before_preds": [ "ori(depositWithdrawInterval) one of [60]" @@ -4247,6 +6055,16 @@ "ori(fee1) one of [10,5]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 6" + ] + }, { "before_preds": [ "ori(_decimals) one of [6]" @@ -4271,6 +6089,16 @@ "ori(earnLowerlimit) != ori(_totalSupply)" ] }, + { + "before_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ], + "after_preds": [ + "depositWithdrawInterval > 0", + "depositWithdrawInterval == 60" + ] + }, { "before_preds": [ "depositWithdrawInterval one of [60]" @@ -4279,6 +6107,16 @@ "depositWithdrawInterval one of [60]" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -4295,6 +6133,16 @@ "token != 0" ] }, + { + "before_preds": [ + "fee3 > 0", + "fee3 == 1" + ], + "after_preds": [ + "fee3 > 0", + "fee3 == 1" + ] + }, { "before_preds": [ "fee3 one of [1]" @@ -4319,6 +6167,16 @@ "timelock != 0" ] }, + { + "before_preds": [ + "fee2 > 0", + "fee2 == 3" + ], + "after_preds": [ + "fee2 > 0", + "fee2 == 3" + ] + }, { "before_preds": [ "fee2 one of [3]" @@ -4367,6 +6225,16 @@ "earnLowerlimit one of [50000000000,500000000000000000000000,1000000000000000000000000]" ] }, + { + "before_preds": [ + "feeMax > 0", + "feeMax == 1000" + ], + "after_preds": [ + "feeMax > 0", + "feeMax == 1000" + ] + }, { "before_preds": [ "feeMax one of [1000]" @@ -4375,6 +6243,16 @@ "feeMax one of [1000]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 6" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 6" + ] + }, { "before_preds": [ "_decimals one of [6]" @@ -4431,6 +6309,30 @@ "Sum(_balances[...]) != earnLowerlimit" ] }, + { + "before_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ], + "after_preds": [ + "ori(feeMax) == feeMax", + "ori(feeMax) >= feeMax", + "ori(feeMax) <= feeMax" + ] + }, + { + "before_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ], + "after_preds": [ + "ori(fee2) == fee2", + "ori(fee2) >= fee2", + "ori(fee2) <= fee2" + ] + }, { "before_preds": [ "ori(RestrictContractCall) == RestrictContractCall" @@ -4471,6 +6373,18 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ], + "after_preds": [ + "ori(fee3) == fee3", + "ori(fee3) >= fee3", + "ori(fee3) <= fee3" + ] + }, { "before_preds": [ "ori(controller) == controller" diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json index bc655d4..f9e0026 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-kept.json @@ -1,4 +1,14 @@ [ + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, { "before_preds": [ "ori(decimals) one of [18]" @@ -103,6 +113,18 @@ "ori(_totalSupply) >= ori(_balances[msg.sender])" ] }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, { "before_preds": [ "ori(_totalSupply) != ori(_guardCounter)" @@ -151,6 +173,16 @@ "ori(Sum(_balances[...])) != ori(_guardCounter)" ] }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, { "before_preds": [ "decimals one of [18]" @@ -231,6 +263,18 @@ "config != 0" ] }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, { "before_preds": [ "ori(glbDebtVal) != _totalSupply" @@ -359,6 +403,18 @@ "_totalSupply >= _balances[msg.sender]" ] }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, { "before_preds": [ "_totalSupply != glbDebtVal" @@ -495,6 +551,16 @@ "ori(_guardCounter) != glbDebtVal" ] }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, { "before_preds": [ "ori(decimals) one of [18]" @@ -503,6 +569,16 @@ "ori(decimals) one of [18]" ] }, + { + "before_preds": [ + "ori(glbDebtVal) > 0", + "ori(glbDebtVal) == 14854681992016139228071" + ], + "after_preds": [ + "ori(glbDebtVal) > 0", + "ori(glbDebtVal) == 14854681992016139228071" + ] + }, { "before_preds": [ "ori(glbDebtVal) one of [14854681992016139228071]" @@ -519,6 +595,16 @@ "ori(_owner) != 0" ] }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 20424063187886226982599" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 20424063187886226982599" + ] + }, { "before_preds": [ "ori(_totalSupply) one of [20424063187886226982599]" @@ -527,6 +613,16 @@ "ori(_totalSupply) one of [20424063187886226982599]" ] }, + { + "before_preds": [ + "ori(reservePool) > 0", + "ori(reservePool) == 148922433659474232" + ], + "after_preds": [ + "ori(reservePool) > 0", + "ori(reservePool) == 148922433659474232" + ] + }, { "before_preds": [ "ori(reservePool) one of [148922433659474232]" @@ -543,6 +639,16 @@ "msg.sender != 0" ] }, + { + "before_preds": [ + "ori(lastAccrueTime) > 0", + "ori(lastAccrueTime) == 1602231144" + ], + "after_preds": [ + "ori(lastAccrueTime) > 0", + "ori(lastAccrueTime) == 1602231144" + ] + }, { "before_preds": [ "ori(lastAccrueTime) one of [1602231144]" @@ -551,6 +657,16 @@ "ori(lastAccrueTime) one of [1602231144]" ] }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 20424063187886226982599" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 20424063187886226982599" + ] + }, { "before_preds": [ "ori(Sum(_balances[...])) one of [20424063187886226982599]" @@ -567,6 +683,16 @@ "_config != 0" ] }, + { + "before_preds": [ + "ori(nextPositionID) > 0", + "ori(nextPositionID) == 198" + ], + "after_preds": [ + "ori(nextPositionID) > 0", + "ori(nextPositionID) == 198" + ] + }, { "before_preds": [ "ori(nextPositionID) one of [198]" @@ -583,6 +709,16 @@ "ori(config) != 0" ] }, + { + "before_preds": [ + "ori(_guardCounter) > 0", + "ori(_guardCounter) == 376" + ], + "after_preds": [ + "ori(_guardCounter) > 0", + "ori(_guardCounter) == 376" + ] + }, { "before_preds": [ "ori(_guardCounter) one of [376]" @@ -591,6 +727,16 @@ "ori(_guardCounter) one of [376]" ] }, + { + "before_preds": [ + "ori(glbDebtShare) > 0", + "ori(glbDebtShare) == 14846441340661167278357" + ], + "after_preds": [ + "ori(glbDebtShare) > 0", + "ori(glbDebtShare) == 14846441340661167278357" + ] + }, { "before_preds": [ "ori(glbDebtShare) one of [14846441340661167278357]" @@ -623,6 +769,16 @@ "_config != ori(config)" ] }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, { "before_preds": [ "decimals one of [18]" @@ -639,6 +795,16 @@ "_owner != 0" ] }, + { + "before_preds": [ + "lastAccrueTime > 0", + "lastAccrueTime == 1602231144" + ], + "after_preds": [ + "lastAccrueTime > 0", + "lastAccrueTime == 1602231144" + ] + }, { "before_preds": [ "lastAccrueTime one of [1602231144]" @@ -647,6 +813,16 @@ "lastAccrueTime one of [1602231144]" ] }, + { + "before_preds": [ + "glbDebtShare > 0", + "glbDebtShare == 14846441340661167278357" + ], + "after_preds": [ + "glbDebtShare > 0", + "glbDebtShare == 14846441340661167278357" + ] + }, { "before_preds": [ "glbDebtShare one of [14846441340661167278357]" @@ -655,6 +831,16 @@ "glbDebtShare one of [14846441340661167278357]" ] }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 20424063187886226982599" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 20424063187886226982599" + ] + }, { "before_preds": [ "_totalSupply one of [20424063187886226982599]" @@ -663,6 +849,16 @@ "_totalSupply one of [20424063187886226982599]" ] }, + { + "before_preds": [ + "reservePool > 0", + "reservePool == 148922433659474232" + ], + "after_preds": [ + "reservePool > 0", + "reservePool == 148922433659474232" + ] + }, { "before_preds": [ "reservePool one of [148922433659474232]" @@ -687,6 +883,16 @@ "elem of _balances[...] is one of [0,207595542558178816,2499288059837974695884,4999207308361928720,76989635665897056757,2099694672502978261129,2499278042403573792,23994090941122685480,348905267647927528350,4057048061363058246,19994236218049902145,12008096684355041865,3498972866121430093,399952049758648104376,379892644249751734723,7331074273148906603,499926721158544918445,28995014649187331200,155534040163110543,3419055614113489263301,199945786064955255869,99984922215138066540,11940731249496242,9998648791479301808,99997986090636984,4999319919409024702,75278599312019471008,20004274794429721786,22994220695367180988,3998913359845597384,9497882822697579207,1849753685077835228080,1499693766495532245,9998132539448897243,2999161464973501151,122963923838163536554,9998602921031189222,249933540782134667412,8748256010480108303,199870887498978286782,74979877460347423478,2999622873234109207,74989718060626759416,1999465504916710427064,499908735865805608,1241962116152060713,401109492287907629,73980033536100457236,29886166173581944622,359442063782612289,39988232675288000305,999713726897813322,953321242468317018,22006669614395381074,330342581938126080214,401583241182296934,1999553099697343335,4998650914601382245,899807013883311181285,349967173402743561941,4999141914029901165,999808531376531825,19996452589694343531,2999199985428679028,100983359711349393234,86984751696672373087,299941269738273242381,2999577045009891728,2099550583177882008,156757421593122201,18497345372475515793,2999475445556411802,99980055585089435,282421952098266234655,99985734138462998901,499892501497066034892,37108231016789653399,7997832369182641578,1427667316733088179,2199682035744654782,499855855955010505,9997205556608119756,19994928949477146578,4018969067458326495,19995027751107133405,1999420721406120521858,177960697518442657180,39994654851654382555,999861461461553649,99985182676534263,1999560000545579004,29998406400582478834]" ] }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 20424063187886226982599" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 20424063187886226982599" + ] + }, { "before_preds": [ "Sum(_balances[...]) one of [20424063187886226982599]" @@ -695,6 +901,16 @@ "Sum(_balances[...]) one of [20424063187886226982599]" ] }, + { + "before_preds": [ + "nextPositionID > 0", + "nextPositionID == 198" + ], + "after_preds": [ + "nextPositionID > 0", + "nextPositionID == 198" + ] + }, { "before_preds": [ "nextPositionID one of [198]" @@ -703,6 +919,16 @@ "nextPositionID one of [198]" ] }, + { + "before_preds": [ + "_guardCounter > 0", + "_guardCounter == 376" + ], + "after_preds": [ + "_guardCounter > 0", + "_guardCounter == 376" + ] + }, { "before_preds": [ "_guardCounter one of [376]" @@ -719,6 +945,16 @@ "config != 0" ] }, + { + "before_preds": [ + "glbDebtVal > 0", + "glbDebtVal == 14854681992016139228071" + ], + "after_preds": [ + "glbDebtVal > 0", + "glbDebtVal == 14854681992016139228071" + ] + }, { "before_preds": [ "glbDebtVal one of [14854681992016139228071]" @@ -727,6 +963,30 @@ "glbDebtVal one of [14854681992016139228071]" ] }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, + { + "before_preds": [ + "ori(glbDebtVal) == glbDebtVal", + "ori(glbDebtVal) >= glbDebtVal", + "ori(glbDebtVal) <= glbDebtVal" + ], + "after_preds": [ + "ori(glbDebtVal) == glbDebtVal", + "ori(glbDebtVal) >= glbDebtVal", + "ori(glbDebtVal) <= glbDebtVal" + ] + }, { "before_preds": [ "ori(_owner) == _owner" @@ -735,6 +995,42 @@ "ori(_owner) == _owner" ] }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, + { + "before_preds": [ + "ori(reservePool) == reservePool", + "ori(reservePool) >= reservePool", + "ori(reservePool) <= reservePool" + ], + "after_preds": [ + "ori(reservePool) == reservePool", + "ori(reservePool) >= reservePool", + "ori(reservePool) <= reservePool" + ] + }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, { "before_preds": [ "_config == config" @@ -751,6 +1047,16 @@ "config != ori(config)" ] }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, { "before_preds": [ "ori(decimals) one of [18]" @@ -895,6 +1201,18 @@ "ori(glbDebtVal) != ori(Sum(_balances[...]))" ] }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, { "before_preds": [ "ori(reservePool) != ori(_balances[msg.sender])" @@ -903,6 +1221,16 @@ "ori(reservePool) != ori(_balances[msg.sender])" ] }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, { "before_preds": [ "decimals one of [18]" @@ -1007,6 +1335,18 @@ "glbDebtVal > 0" ] }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, { "before_preds": [ "ori(glbDebtVal) != _totalSupply" @@ -1047,6 +1387,18 @@ "ori(reservePool) != _balances[msg.sender]" ] }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, { "before_preds": [ "_totalSupply != glbDebtVal" @@ -1119,6 +1471,16 @@ "config == ori(config)" ] }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, { "before_preds": [ "ori(decimals) one of [18]" @@ -1343,6 +1705,16 @@ "ori(_guardCounter) != ori(glbDebtShare)" ] }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, { "before_preds": [ "decimals one of [18]" @@ -1439,6 +1811,18 @@ "positions[id].goblin == ori(positions[id].goblin)" ] }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, { "before_preds": [ "ori(glbDebtVal) != glbDebtShare" @@ -1479,6 +1863,18 @@ "ori(_owner) == _owner" ] }, + { + "before_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ], + "after_preds": [ + "ori(_totalSupply) == _totalSupply", + "ori(_totalSupply) >= _totalSupply", + "ori(_totalSupply) <= _totalSupply" + ] + }, { "before_preds": [ "ori(reservePool) <= reservePool" @@ -1599,6 +1995,18 @@ "ori(positions[id].owner) == positions[id].owner" ] }, + { + "before_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ], + "after_preds": [ + "ori(Sum(_balances[...])) == Sum(_balances[...])", + "ori(Sum(_balances[...])) >= Sum(_balances[...])", + "ori(Sum(_balances[...])) <= Sum(_balances[...])" + ] + }, { "before_preds": [ "loan != nextPositionID" @@ -1679,6 +2087,16 @@ "ori(glbDebtShare) != glbDebtVal" ] }, + { + "before_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ], + "after_preds": [ + "ori(decimals) > 0", + "ori(decimals) == 18" + ] + }, { "before_preds": [ "ori(decimals) one of [18]" @@ -1767,6 +2185,18 @@ "ori(_totalSupply) >= ori(reservePool)" ] }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, { "before_preds": [ "ori(_totalSupply) != ori(_guardCounter)" @@ -1839,6 +2269,16 @@ "ori(_guardCounter) != ori(glbDebtShare)" ] }, + { + "before_preds": [ + "decimals > 0", + "decimals == 18" + ], + "after_preds": [ + "decimals > 0", + "decimals == 18" + ] + }, { "before_preds": [ "decimals one of [18]" @@ -1911,6 +2351,18 @@ "config != 0" ] }, + { + "before_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ], + "after_preds": [ + "ori(decimals) == decimals", + "ori(decimals) >= decimals", + "ori(decimals) <= decimals" + ] + }, { "before_preds": [ "ori(glbDebtVal) != _totalSupply" @@ -2071,6 +2523,18 @@ "glbDebtShare <= glbDebtVal" ] }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, { "before_preds": [ "_totalSupply != glbDebtVal" diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json index 755b4a1..ecf9968 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6847259b2b3a4c17e7c43c54409810af48ba5210-kept.json @@ -7,6 +7,16 @@ "ori(devfund) != 0" ] }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, { "before_preds": [ "ori(split) one of [500]" @@ -39,6 +49,16 @@ "_converter != 0" ] }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, { "before_preds": [ "ori(convenienceFee) one of [100]" @@ -119,6 +139,16 @@ "governance != 0" ] }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, { "before_preds": [ "split one of [500]" @@ -167,6 +197,16 @@ "approvedJarConverters[_converter] == true" ] }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, { "before_preds": [ "convenienceFee one of [100]" @@ -223,6 +263,18 @@ "treasury == ori(treasury)" ] }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, { "before_preds": [ "strategist == ori(strategist)" @@ -263,6 +315,16 @@ "ori(devfund) != 0" ] }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, { "before_preds": [ "ori(split) one of [500]" @@ -295,6 +357,16 @@ "ori(approvedStrategies[_token][_strategy]) == false" ] }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, { "before_preds": [ "ori(convenienceFee) one of [100]" @@ -383,6 +455,16 @@ "governance != 0" ] }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, { "before_preds": [ "split one of [500]" @@ -423,6 +505,16 @@ "devfund != 0" ] }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, { "before_preds": [ "convenienceFee one of [100]" @@ -479,6 +571,18 @@ "treasury == ori(treasury)" ] }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, { "before_preds": [ "strategist == ori(strategist)" @@ -511,6 +615,16 @@ "ori(devfund) != 0" ] }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, { "before_preds": [ "ori(split) one of [500]" @@ -535,6 +649,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, { "before_preds": [ "ori(convenienceFee) one of [100]" @@ -631,6 +755,16 @@ "governance != 0" ] }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, { "before_preds": [ "split one of [500]" @@ -671,6 +805,16 @@ "devfund != 0" ] }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, { "before_preds": [ "convenienceFee one of [100]" @@ -735,6 +879,18 @@ "treasury == ori(treasury)" ] }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, { "before_preds": [ "strategist == ori(strategist)" @@ -767,6 +923,16 @@ "ori(devfund) != 0" ] }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, { "before_preds": [ "ori(split) one of [500]" @@ -799,6 +965,16 @@ "_jar != 0" ] }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, { "before_preds": [ "ori(convenienceFee) one of [100]" @@ -903,6 +1079,16 @@ "governance != 0" ] }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, { "before_preds": [ "split one of [500]" @@ -951,6 +1137,16 @@ "devfund != 0" ] }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, { "before_preds": [ "convenienceFee one of [100]" @@ -1039,6 +1235,18 @@ "_jar == jars[_token]" ] }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, { "before_preds": [ "strategist != ori(governance)" @@ -1095,6 +1303,16 @@ "ori(strategies[_token]) == 0" ] }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, { "before_preds": [ "ori(split) one of [500]" @@ -1127,6 +1345,16 @@ "ori(approvedStrategies[_token][_strategy]) == true" ] }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, { "before_preds": [ "ori(convenienceFee) one of [100]" @@ -1239,6 +1467,16 @@ "governance != 0" ] }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, { "before_preds": [ "split one of [500]" @@ -1287,6 +1525,16 @@ "devfund != 0" ] }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, { "before_preds": [ "convenienceFee one of [100]" @@ -1383,6 +1631,18 @@ "treasury == ori(treasury)" ] }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, { "before_preds": [ "strategist != ori(governance)" @@ -1423,6 +1683,16 @@ "ori(devfund) != 0" ] }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, { "before_preds": [ "ori(split) one of [500]" @@ -1447,6 +1717,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, { "before_preds": [ "ori(convenienceFee) one of [100]" @@ -1543,6 +1823,16 @@ "governance != 0" ] }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, { "before_preds": [ "split one of [500]" @@ -1583,6 +1873,16 @@ "devfund != 0" ] }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, { "before_preds": [ "convenienceFee one of [100]" @@ -1631,6 +1931,18 @@ "treasury == ori(treasury)" ] }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, { "before_preds": [ "strategist == ori(strategist)" @@ -1671,6 +1983,16 @@ "ori(devfund) != 0" ] }, + { + "before_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ], + "after_preds": [ + "ori(split) > 0", + "ori(split) == 500" + ] + }, { "before_preds": [ "ori(split) one of [500]" @@ -1679,6 +2001,16 @@ "ori(split) one of [500]" ] }, + { + "before_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ], + "after_preds": [ + "ori(convenienceFee) > 0", + "ori(convenienceFee) == 100" + ] + }, { "before_preds": [ "ori(convenienceFee) one of [100]" @@ -1743,6 +2075,16 @@ "governance != 0" ] }, + { + "before_preds": [ + "split > 0", + "split == 500" + ], + "after_preds": [ + "split > 0", + "split == 500" + ] + }, { "before_preds": [ "split one of [500]" @@ -1783,6 +2125,16 @@ "devfund != 0" ] }, + { + "before_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ], + "after_preds": [ + "convenienceFee > 0", + "convenienceFee == 100" + ] + }, { "before_preds": [ "convenienceFee one of [100]" @@ -1839,6 +2191,18 @@ "treasury == ori(treasury)" ] }, + { + "before_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ], + "after_preds": [ + "ori(convenienceFee) == convenienceFee", + "ori(convenienceFee) >= convenienceFee", + "ori(convenienceFee) <= convenienceFee" + ] + }, { "before_preds": [ "strategist != ori(governance)" diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json index 37502d4..8b97a14 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x6b7a87899490ece95443e979ca9485cbe7e71522-kept.json @@ -79,6 +79,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, { "before_preds": [ "ori(_newMPCEffectiveTime) one of [1624013046]" @@ -103,6 +113,16 @@ "_newMPC != 0" ] }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ] + }, { "before_preds": [ "_newMPCEffectiveTime one of [1624013046]" @@ -151,6 +171,16 @@ "token != 0" ] }, + { + "before_preds": [ + "toChainID > 0", + "toChainID == 56" + ], + "after_preds": [ + "toChainID > 0", + "toChainID == 56" + ] + }, { "before_preds": [ "toChainID one of [56]" @@ -159,6 +189,16 @@ "toChainID one of [56]" ] }, + { + "before_preds": [ + "amount > 0", + "amount == 390000000000" + ], + "after_preds": [ + "amount > 0", + "amount == 390000000000" + ] + }, { "before_preds": [ "amount one of [390000000000]" @@ -199,6 +239,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, { "before_preds": [ "ori(_newMPCEffectiveTime) one of [1624013046]" @@ -223,6 +273,16 @@ "_newMPC != 0" ] }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ] + }, { "before_preds": [ "_newMPCEffectiveTime one of [1624013046]" @@ -327,6 +387,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, { "before_preds": [ "ori(_newMPCEffectiveTime) one of [1624013046]" @@ -351,6 +421,16 @@ "_newMPC != 0" ] }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ] + }, { "before_preds": [ "_newMPCEffectiveTime one of [1624013046]" @@ -399,6 +479,16 @@ "ori(_newMPC) != 0" ] }, + { + "before_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ], + "after_preds": [ + "ori(_newMPCEffectiveTime) > 0", + "ori(_newMPCEffectiveTime) == 1624013046" + ] + }, { "before_preds": [ "ori(_newMPCEffectiveTime) one of [1624013046]" @@ -415,6 +505,16 @@ "_newMPC != 0" ] }, + { + "before_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ], + "after_preds": [ + "_newMPCEffectiveTime > 0", + "_newMPCEffectiveTime == 1624013046" + ] + }, { "before_preds": [ "_newMPCEffectiveTime one of [1624013046]" diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json index 5fb2450..96bafac 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x818e6fecd516ecc3849daf6845e3ec868087b755-kept.json @@ -1,4 +1,14 @@ [ + { + "before_preds": [ + "ori(Sum(decimals[...])) > 0", + "ori(Sum(decimals[...])) == 81" + ], + "after_preds": [ + "ori(Sum(decimals[...])) > 0", + "ori(Sum(decimals[...])) == 81" + ] + }, { "before_preds": [ "ori(Sum(decimals[...])) one of [81]" @@ -71,6 +81,16 @@ "ori(admin) != 0" ] }, + { + "before_preds": [ + "amount > 0", + "amount == 40963957051" + ], + "after_preds": [ + "amount > 0", + "amount == 40963957051" + ] + }, { "before_preds": [ "amount one of [40963957051]" @@ -119,6 +139,16 @@ "admin != 0" ] }, + { + "before_preds": [ + "Sum(decimals[...]) > 0", + "Sum(decimals[...]) == 81" + ], + "after_preds": [ + "Sum(decimals[...]) > 0", + "Sum(decimals[...]) == 81" + ] + }, { "before_preds": [ "Sum(decimals[...]) one of [81]" @@ -135,6 +165,18 @@ "kyberNetworkContract != 0" ] }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, { "before_preds": [ "ori(pendingAdmin) == pendingAdmin" @@ -311,6 +353,18 @@ "kyberNetworkContract != 0" ] }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, { "before_preds": [ "ori(pendingAdmin) != pendingAdmin" @@ -503,6 +557,18 @@ "kyberNetworkContract != 0" ] }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, { "before_preds": [ "ori(pendingAdmin) == pendingAdmin" @@ -687,6 +753,18 @@ "kyberNetworkContract != 0" ] }, + { + "before_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ], + "after_preds": [ + "ori(Sum(decimals[...])) == Sum(decimals[...])", + "ori(Sum(decimals[...])) >= Sum(decimals[...])", + "ori(Sum(decimals[...])) <= Sum(decimals[...])" + ] + }, { "before_preds": [ "_kyberNetworkContract == kyberNetworkContract" diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json index 8b510be..3964edc 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0x88093840aad42d2621e1a452bf5d7076ff804d61-kept.json @@ -71,6 +71,16 @@ "ori(_allowedFragments[msg.sender][spender]) one of [0]" ] }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000" + ] + }, { "before_preds": [ "ori(_totalSupply) one of [60000000000000]" @@ -111,6 +121,16 @@ "ori(monetaryPolicy) == 0" ] }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, { "before_preds": [ "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" @@ -119,6 +139,16 @@ "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" ] }, + { + "before_preds": [ + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, { "before_preds": [ "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]" @@ -191,6 +221,16 @@ "initializing == false" ] }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ] + }, { "before_preds": [ "_totalSupply one of [60000000000000]" @@ -239,6 +279,16 @@ "Sum(_allowedFragments[msg.sender][...]) one of [100000000000000,115792089237316195423570985008687907853269984665640564039457584007913129639935]" ] }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, { "before_preds": [ "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" @@ -255,6 +305,16 @@ "tokenPausedDeprecated == false" ] }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, { "before_preds": [ "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" @@ -319,6 +379,18 @@ "ori(initializing) == initializing" ] }, + { + "before_preds": [ + "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] >= Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] <= Sum(_allowedFragments[msg.sender][...])" + ], + "after_preds": [ + "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] >= Sum(_allowedFragments[msg.sender][...])", + "_allowedFragments[msg.sender][spender] <= Sum(_allowedFragments[msg.sender][...])" + ] + }, { "before_preds": [ "rebasePausedDeprecated == ori(rebasePausedDeprecated)" @@ -391,6 +463,16 @@ "ori(rebasePausedDeprecated) == false" ] }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 60000000000000" + ] + }, { "before_preds": [ "ori(_totalSupply) one of [60000000000000]" @@ -431,6 +513,16 @@ "ori(monetaryPolicy) == 0" ] }, + { + "before_preds": [ + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "ori(Sum(_gonBalances[...])) > 0", + "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, { "before_preds": [ "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" @@ -439,6 +531,16 @@ "ori(Sum(_gonBalances[...])) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" ] }, + { + "before_preds": [ + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "ori(_gonsPerFragment) > 0", + "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, { "before_preds": [ "ori(_gonsPerFragment) one of [1929868153955269923726183083478131797554499744427342733990959733]" @@ -495,6 +597,16 @@ "initializing == false" ] }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ] + }, { "before_preds": [ "_totalSupply one of [60000000000000]" @@ -527,6 +639,16 @@ "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" ] }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, { "before_preds": [ "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" @@ -543,6 +665,16 @@ "tokenPausedDeprecated == false" ] }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, { "before_preds": [ "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" @@ -843,6 +975,16 @@ "initializing == false" ] }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ] + }, { "before_preds": [ "_totalSupply one of [60000000000000]" @@ -875,6 +1017,16 @@ "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" ] }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, { "before_preds": [ "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" @@ -891,6 +1043,16 @@ "tokenPausedDeprecated == false" ] }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, { "before_preds": [ "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" @@ -1221,6 +1383,16 @@ "initializing == false" ] }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 60000000000000" + ] + }, { "before_preds": [ "_totalSupply one of [60000000000000]" @@ -1253,6 +1425,16 @@ "elem of _gonBalances[...] is one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" ] }, + { + "before_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ], + "after_preds": [ + "_gonsPerFragment > 0", + "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" + ] + }, { "before_preds": [ "_gonsPerFragment one of [1929868153955269923726183083478131797554499744427342733990959733]" @@ -1269,6 +1451,16 @@ "tokenPausedDeprecated == false" ] }, + { + "before_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ], + "after_preds": [ + "Sum(_gonBalances[...]) > 0", + "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + ] + }, { "before_preds": [ "Sum(_gonBalances[...]) one of [115792089237316195423570985008687907853269984665640564039457583980000000000000]" diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json index 6c352ec..2e7b0b6 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/kept/0xacd43e627e64355f1861cec6d3a6688b31a6f952-kept.json @@ -15,6 +15,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, { "before_preds": [ "ori(_decimals) one of [18]" @@ -47,6 +57,16 @@ "ori(_balances[msg.sender]) one of [0]" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -119,6 +139,18 @@ "ori(_totalSupply) >= ori(_balances[msg.sender])" ] }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, { "before_preds": [ "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" @@ -167,6 +199,16 @@ "Sum(_balances[...]) one of [142345985557645870700604,142449775039435131775208,100000000000000000000,141652622877015924045934]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, { "before_preds": [ "_decimals one of [18]" @@ -207,6 +249,16 @@ "controller != 0" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -223,6 +275,18 @@ "elem of _balances[...] is one of [142345985557645870700604]" ] }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, { "before_preds": [ "_totalSupply >= _balances[msg.sender]" @@ -239,6 +303,18 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, { "before_preds": [ "ori(_totalSupply) != _balances[msg.sender]" @@ -255,6 +331,18 @@ "Sum(_balances[...]) >= _balances[msg.sender]" ] }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, { "before_preds": [ "governance == ori(governance)" @@ -295,6 +383,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, { "before_preds": [ "ori(_decimals) one of [18]" @@ -319,6 +417,16 @@ "ori(_balances[msg.sender]) one of [0,90000000000000000000]" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -375,6 +483,18 @@ "ori(_totalSupply) >= ori(_balances[msg.sender])" ] }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, { "before_preds": [ "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" @@ -407,6 +527,16 @@ "Sum(_balances[...]) > 0" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, { "before_preds": [ "_decimals one of [18]" @@ -439,6 +569,16 @@ "controller != 0" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -455,6 +595,18 @@ "elem of _balances[...] is one of [134406668607338084218100]" ] }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, { "before_preds": [ "_totalSupply >= _balances[msg.sender]" @@ -471,6 +623,18 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, { "before_preds": [ "ori(_totalSupply) != _balances[msg.sender]" @@ -487,6 +651,18 @@ "Sum(_balances[...]) >= _balances[msg.sender]" ] }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, { "before_preds": [ "governance == ori(governance)" @@ -527,6 +703,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, { "before_preds": [ "ori(_decimals) one of [18]" @@ -551,6 +737,16 @@ "ori(_totalSupply) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -647,6 +843,16 @@ "Sum(_balances[...]) one of [100000000000000000000,96790505691543038844835,7682645945411942583280]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, { "before_preds": [ "_decimals one of [18]" @@ -687,6 +893,16 @@ "controller != 0" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -703,6 +919,30 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, { "before_preds": [ "governance == ori(governance)" @@ -743,6 +983,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, { "before_preds": [ "ori(_decimals) one of [18]" @@ -751,6 +1001,16 @@ "ori(_decimals) one of [18]" ] }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 142449775039435131775208" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 142449775039435131775208" + ] + }, { "before_preds": [ "ori(_totalSupply) one of [142449775039435131775208]" @@ -759,6 +1019,16 @@ "ori(_totalSupply) one of [142449775039435131775208]" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -775,6 +1045,16 @@ "ori(token) != 0" ] }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 142449775039435131775208" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 142449775039435131775208" + ] + }, { "before_preds": [ "ori(Sum(_balances[...])) one of [142449775039435131775208]" @@ -831,6 +1111,16 @@ "ori(governance) == msg.sender" ] }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 142449775039435131775208" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 142449775039435131775208" + ] + }, { "before_preds": [ "_totalSupply one of [142449775039435131775208]" @@ -847,6 +1137,16 @@ "token != 0" ] }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 142449775039435131775208" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 142449775039435131775208" + ] + }, { "before_preds": [ "Sum(_balances[...]) one of [142449775039435131775208]" @@ -855,6 +1155,16 @@ "Sum(_balances[...]) one of [142449775039435131775208]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, { "before_preds": [ "_decimals one of [18]" @@ -895,6 +1205,16 @@ "controller != 0" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -919,6 +1239,30 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, { "before_preds": [ "governance != ori(governance)" @@ -943,6 +1287,16 @@ "controller == ori(controller)" ] }, + { + "before_preds": [ + "_shares > 0", + "_shares == 10000000000000000000" + ], + "after_preds": [ + "_shares > 0", + "_shares == 10000000000000000000" + ] + }, { "before_preds": [ "_shares one of [10000000000000000000]" @@ -967,6 +1321,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, { "before_preds": [ "ori(_decimals) one of [18]" @@ -975,6 +1339,16 @@ "ori(_decimals) one of [18]" ] }, + { + "before_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ], + "after_preds": [ + "ori(_totalSupply) > 0", + "ori(_totalSupply) == 100000000000000000000" + ] + }, { "before_preds": [ "ori(_totalSupply) one of [100000000000000000000]" @@ -983,6 +1357,16 @@ "ori(_totalSupply) one of [100000000000000000000]" ] }, + { + "before_preds": [ + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000000000000" + ], + "after_preds": [ + "ori(_balances[msg.sender]) > 0", + "ori(_balances[msg.sender]) == 100000000000000000000" + ] + }, { "before_preds": [ "ori(_balances[msg.sender]) one of [100000000000000000000]" @@ -991,6 +1375,16 @@ "ori(_balances[msg.sender]) one of [100000000000000000000]" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -1007,6 +1401,16 @@ "ori(token) != 0" ] }, + { + "before_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ], + "after_preds": [ + "ori(Sum(_balances[...])) > 0", + "ori(Sum(_balances[...])) == 100000000000000000000" + ] + }, { "before_preds": [ "ori(Sum(_balances[...])) one of [100000000000000000000]" @@ -1039,6 +1443,52 @@ "ori(controller) != 0" ] }, + { + "before_preds": [ + "ori(_totalSupply) == ori(_balances[msg.sender])", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) <= ori(_balances[msg.sender])" + ], + "after_preds": [ + "ori(_totalSupply) == ori(_balances[msg.sender])", + "ori(_totalSupply) >= ori(_balances[msg.sender])", + "ori(_totalSupply) <= ori(_balances[msg.sender])" + ] + }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) >= ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" + ] + }, + { + "before_preds": [ + "_totalSupply > 0", + "_totalSupply == 90000000000000000000" + ], + "after_preds": [ + "_totalSupply > 0", + "_totalSupply == 90000000000000000000" + ] + }, { "before_preds": [ "_totalSupply one of [90000000000000000000]" @@ -1055,6 +1505,16 @@ "token != 0" ] }, + { + "before_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 90000000000000000000" + ], + "after_preds": [ + "Sum(_balances[...]) > 0", + "Sum(_balances[...]) == 90000000000000000000" + ] + }, { "before_preds": [ "Sum(_balances[...]) one of [90000000000000000000]" @@ -1063,6 +1523,16 @@ "Sum(_balances[...]) one of [90000000000000000000]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, { "before_preds": [ "_decimals one of [18]" @@ -1079,6 +1549,16 @@ "governance != 0" ] }, + { + "before_preds": [ + "_balances[msg.sender] > 0", + "_balances[msg.sender] == 90000000000000000000" + ], + "after_preds": [ + "_balances[msg.sender] > 0", + "_balances[msg.sender] == 90000000000000000000" + ] + }, { "before_preds": [ "_balances[msg.sender] one of [90000000000000000000]" @@ -1095,6 +1575,16 @@ "controller != 0" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -1111,6 +1601,30 @@ "elem of _balances[...] is one of [90000000000000000000]" ] }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, + { + "before_preds": [ + "_totalSupply == _balances[msg.sender]", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply <= _balances[msg.sender]" + ], + "after_preds": [ + "_totalSupply == _balances[msg.sender]", + "_totalSupply >= _balances[msg.sender]", + "_totalSupply <= _balances[msg.sender]" + ] + }, { "before_preds": [ "token == ori(token)" @@ -1119,6 +1633,30 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, { "before_preds": [ "governance == ori(governance)" @@ -1151,6 +1689,16 @@ "msg.value one of [0]" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, { "before_preds": [ "ori(_decimals) one of [18]" @@ -1191,6 +1739,16 @@ "ori(_balances[msg.sender]) one of [5464367604379091520527,29264013041526968930907]" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -1247,6 +1805,18 @@ "ori(controller) != 0" ] }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, { "before_preds": [ "_totalSupply > 0" @@ -1287,6 +1857,16 @@ "Sum(_balances[...]) one of [128942301002958992697573,99678287961432023766666]" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, { "before_preds": [ "_decimals one of [18]" @@ -1327,6 +1907,16 @@ "controller != 0" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -1343,6 +1933,18 @@ "elem of _balances[...] is one of [128942301002958992697573]" ] }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, { "before_preds": [ "token == ori(token)" @@ -1351,6 +1953,30 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, { "before_preds": [ "governance == ori(governance)" @@ -1367,6 +1993,16 @@ "controller == ori(controller)" ] }, + { + "before_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ], + "after_preds": [ + "ori(_decimals) > 0", + "ori(_decimals) == 18" + ] + }, { "before_preds": [ "ori(_decimals) one of [18]" @@ -1375,6 +2011,16 @@ "ori(_decimals) one of [18]" ] }, + { + "before_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ], + "after_preds": [ + "ori(min) > 0", + "ori(min) == 9500" + ] + }, { "before_preds": [ "ori(min) one of [9500]" @@ -1407,6 +2053,18 @@ "ori(controller) != 0" ] }, + { + "before_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ], + "after_preds": [ + "ori(_totalSupply) == ori(Sum(_balances[...]))", + "ori(_totalSupply) >= ori(Sum(_balances[...]))", + "ori(_totalSupply) <= ori(Sum(_balances[...]))" + ] + }, { "before_preds": [ "_totalSupply > 0" @@ -1431,6 +2089,16 @@ "Sum(_balances[...]) > 0" ] }, + { + "before_preds": [ + "_decimals > 0", + "_decimals == 18" + ], + "after_preds": [ + "_decimals > 0", + "_decimals == 18" + ] + }, { "before_preds": [ "_decimals one of [18]" @@ -1463,6 +2131,16 @@ "controller != 0" ] }, + { + "before_preds": [ + "min > 0", + "min == 9500" + ], + "after_preds": [ + "min > 0", + "min == 9500" + ] + }, { "before_preds": [ "min one of [9500]" @@ -1471,6 +2149,18 @@ "min one of [9500]" ] }, + { + "before_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ], + "after_preds": [ + "_totalSupply == Sum(_balances[...])", + "_totalSupply >= Sum(_balances[...])", + "_totalSupply <= Sum(_balances[...])" + ] + }, { "before_preds": [ "token == ori(token)" @@ -1479,6 +2169,30 @@ "token == ori(token)" ] }, + { + "before_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ], + "after_preds": [ + "ori(_decimals) == _decimals", + "ori(_decimals) >= _decimals", + "ori(_decimals) <= _decimals" + ] + }, + { + "before_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ], + "after_preds": [ + "ori(min) == min", + "ori(min) >= min", + "ori(min) <= min" + ] + }, { "before_preds": [ "controller == ori(controller)" diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json index 3afb914..e27e1de 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x39b1df026010b5aea781f90542ee19e900f2db15-removed.json @@ -1,14 +1,4 @@ [ - { - "before_preds": [ - "ori(Q112) == Q112", - "ori(Q112) >= Q112", - "ori(Q112) <= Q112" - ], - "after_preds": [ - "ori(Q112) == Q112" - ] - }, { "before_preds": [ "e10 == ori(e10)", @@ -19,26 +9,6 @@ "e10 == ori(e10)" ] }, - { - "before_preds": [ - "ori(length) == length", - "ori(length) >= length", - "ori(length) <= length" - ], - "after_preds": [ - "ori(length) == length" - ] - }, - { - "before_preds": [ - "ori(Q112) == Q112", - "ori(Q112) >= Q112", - "ori(Q112) <= Q112" - ], - "after_preds": [ - "ori(Q112) == Q112" - ] - }, { "before_preds": [ "e10 == ori(e10)", @@ -48,15 +18,5 @@ "after_preds": [ "e10 == ori(e10)" ] - }, - { - "before_preds": [ - "ori(length) == length", - "ori(length) >= length", - "ori(length) <= length" - ], - "after_preds": [ - "ori(length) == length" - ] } ] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json index a5309e0..3f1f0da 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x3ec4a6cfe803ee84009ce6e1ecf419c9cb1e8af0-removed.json @@ -1,121 +1,4 @@ [ - { - "before_preds": [ - "ori(feeMax) > 0", - "ori(feeMax) == 1000" - ], - "after_preds": [ - "ori(feeMax) == 1000" - ] - }, - { - "before_preds": [ - "amount > 0", - "amount == 79228162514000000000000000000" - ], - "after_preds": [ - "amount == 79228162514000000000000000000" - ] - }, - { - "before_preds": [ - "ori(fee2) > 0", - "ori(fee2) == 3" - ], - "after_preds": [ - "ori(fee2) == 3" - ] - }, - { - "before_preds": [ - "ori(fee3) > 0", - "ori(fee3) == 1" - ], - "after_preds": [ - "ori(fee3) == 1" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "ori(depositWithdrawInterval) > 0", - "ori(depositWithdrawInterval) == 60" - ], - "after_preds": [ - "ori(depositWithdrawInterval) == 60" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 6" - ], - "after_preds": [ - "ori(_decimals) == 6" - ] - }, - { - "before_preds": [ - "depositWithdrawInterval > 0", - "depositWithdrawInterval == 60" - ], - "after_preds": [ - "depositWithdrawInterval == 60" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" - ] - }, - { - "before_preds": [ - "fee3 > 0", - "fee3 == 1" - ], - "after_preds": [ - "fee3 == 1" - ] - }, - { - "before_preds": [ - "fee2 > 0", - "fee2 == 3" - ], - "after_preds": [ - "fee2 == 3" - ] - }, - { - "before_preds": [ - "feeMax > 0", - "feeMax == 1000" - ], - "after_preds": [ - "feeMax == 1000" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 6" - ], - "after_preds": [ - "_decimals == 6" - ] - }, { "before_preds": [ "Sum(_balances[...]) == ori(Sum(_balances[...]))", @@ -126,26 +9,6 @@ "Sum(_balances[...]) == ori(Sum(_balances[...]))" ] }, - { - "before_preds": [ - "ori(feeMax) == feeMax", - "ori(feeMax) >= feeMax", - "ori(feeMax) <= feeMax" - ], - "after_preds": [ - "ori(feeMax) == feeMax" - ] - }, - { - "before_preds": [ - "ori(fee2) == fee2", - "ori(fee2) >= fee2", - "ori(fee2) <= fee2" - ], - "after_preds": [ - "ori(fee2) == fee2" - ] - }, { "before_preds": [ "depositWithdrawInterval == ori(depositWithdrawInterval)", @@ -156,16 +19,6 @@ "depositWithdrawInterval == ori(depositWithdrawInterval)" ] }, - { - "before_preds": [ - "ori(earnLowerlimit) == earnLowerlimit", - "ori(earnLowerlimit) >= earnLowerlimit", - "ori(earnLowerlimit) <= earnLowerlimit" - ], - "after_preds": [ - "ori(earnLowerlimit) == earnLowerlimit" - ] - }, { "before_preds": [ "min == ori(min)", @@ -176,16 +29,6 @@ "min == ori(min)" ] }, - { - "before_preds": [ - "ori(fee3) == fee3", - "ori(fee3) >= fee3", - "ori(fee3) <= fee3" - ], - "after_preds": [ - "ori(fee3) == fee3" - ] - }, { "before_preds": [ "_totalSupply == ori(_totalSupply)", @@ -226,60 +69,6 @@ "_decimals == ori(_decimals)" ] }, - { - "before_preds": [ - "ori(feeMax) > 0", - "ori(feeMax) == 1000" - ], - "after_preds": [ - "ori(feeMax) == 1000" - ] - }, - { - "before_preds": [ - "ori(fee2) > 0", - "ori(fee2) == 3" - ], - "after_preds": [ - "ori(fee2) == 3" - ] - }, - { - "before_preds": [ - "ori(fee3) > 0", - "ori(fee3) == 1" - ], - "after_preds": [ - "ori(fee3) == 1" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "ori(depositWithdrawInterval) > 0", - "ori(depositWithdrawInterval) == 60" - ], - "after_preds": [ - "ori(depositWithdrawInterval) == 60" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 6" - ], - "after_preds": [ - "ori(_decimals) == 6" - ] - }, { "before_preds": [ "ori(Sum(_balances[...])) <= ori(earnLowerlimit)", @@ -287,7 +76,7 @@ "ori(Sum(_balances[...])) != ori(earnLowerlimit)" ], "after_preds": [ - "ori(Sum(_balances[...])) < ori(earnLowerlimit)" + "ori(Sum(_balances[...])) != ori(earnLowerlimit)" ] }, { @@ -307,7 +96,8 @@ "ori(earnLowerlimit) != ori(_balances[msg.sender])" ], "after_preds": [ - "ori(earnLowerlimit) > ori(_balances[msg.sender])" + "ori(earnLowerlimit) > ori(_balances[msg.sender])", + "ori(earnLowerlimit) != ori(_balances[msg.sender])" ] }, { @@ -317,61 +107,8 @@ "ori(earnLowerlimit) != ori(_totalSupply)" ], "after_preds": [ - "ori(earnLowerlimit) > ori(_totalSupply)" - ] - }, - { - "before_preds": [ - "depositWithdrawInterval > 0", - "depositWithdrawInterval == 60" - ], - "after_preds": [ - "depositWithdrawInterval == 60" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" - ] - }, - { - "before_preds": [ - "fee3 > 0", - "fee3 == 1" - ], - "after_preds": [ - "fee3 == 1" - ] - }, - { - "before_preds": [ - "fee2 > 0", - "fee2 == 3" - ], - "after_preds": [ - "fee2 == 3" - ] - }, - { - "before_preds": [ - "feeMax > 0", - "feeMax == 1000" - ], - "after_preds": [ - "feeMax == 1000" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 6" - ], - "after_preds": [ - "_decimals == 6" + "ori(earnLowerlimit) > ori(_totalSupply)", + "ori(earnLowerlimit) != ori(_totalSupply)" ] }, { @@ -381,7 +118,7 @@ "Sum(_balances[...]) != ori(Sum(_balances[...]))" ], "after_preds": [ - "Sum(_balances[...]) > ori(Sum(_balances[...]))" + "Sum(_balances[...]) != ori(Sum(_balances[...]))" ] }, { @@ -401,7 +138,7 @@ "Sum(_balances[...]) != ori(_balances[msg.sender])" ], "after_preds": [ - "Sum(_balances[...]) > ori(_balances[msg.sender])" + "Sum(_balances[...]) != ori(_balances[msg.sender])" ] }, { @@ -411,27 +148,7 @@ "Sum(_balances[...]) != ori(_totalSupply)" ], "after_preds": [ - "Sum(_balances[...]) > ori(_totalSupply)" - ] - }, - { - "before_preds": [ - "ori(feeMax) == feeMax", - "ori(feeMax) >= feeMax", - "ori(feeMax) <= feeMax" - ], - "after_preds": [ - "ori(feeMax) == feeMax" - ] - }, - { - "before_preds": [ - "ori(fee2) == fee2", - "ori(fee2) >= fee2", - "ori(fee2) <= fee2" - ], - "after_preds": [ - "ori(fee2) == fee2" + "Sum(_balances[...]) != ori(_totalSupply)" ] }, { @@ -441,7 +158,7 @@ "ori(Sum(_balances[...])) != _totalSupply" ], "after_preds": [ - "ori(Sum(_balances[...])) < _totalSupply" + "ori(Sum(_balances[...])) != _totalSupply" ] }, { @@ -451,7 +168,7 @@ "ori(Sum(_balances[...])) != earnLowerlimit" ], "after_preds": [ - "ori(Sum(_balances[...])) < earnLowerlimit" + "ori(Sum(_balances[...])) != earnLowerlimit" ] }, { @@ -464,16 +181,6 @@ "depositWithdrawInterval == ori(depositWithdrawInterval)" ] }, - { - "before_preds": [ - "ori(earnLowerlimit) == earnLowerlimit", - "ori(earnLowerlimit) >= earnLowerlimit", - "ori(earnLowerlimit) <= earnLowerlimit" - ], - "after_preds": [ - "ori(earnLowerlimit) == earnLowerlimit" - ] - }, { "before_preds": [ "min == ori(min)", @@ -491,7 +198,8 @@ "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])" ], "after_preds": [ - "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])" + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])" ] }, { @@ -501,7 +209,8 @@ "ori(userDepoistTime[msg.sender]) != userDepoistTime[msg.sender]" ], "after_preds": [ - "ori(userDepoistTime[msg.sender]) < userDepoistTime[msg.sender]" + "ori(userDepoistTime[msg.sender]) < userDepoistTime[msg.sender]", + "ori(userDepoistTime[msg.sender]) != userDepoistTime[msg.sender]" ] }, { @@ -521,7 +230,7 @@ "_balances[msg.sender] != ori(_balances[msg.sender])" ], "after_preds": [ - "_balances[msg.sender] > ori(_balances[msg.sender])" + "_balances[msg.sender] != ori(_balances[msg.sender])" ] }, { @@ -531,7 +240,8 @@ "_totalSupply != ori(_balances[msg.sender])" ], "after_preds": [ - "_totalSupply > ori(_balances[msg.sender])" + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" ] }, { @@ -541,7 +251,7 @@ "_totalSupply != ori(_totalSupply)" ], "after_preds": [ - "_totalSupply > ori(_totalSupply)" + "_totalSupply != ori(_totalSupply)" ] }, { @@ -551,7 +261,7 @@ "ori(_balances[msg.sender]) != earnLowerlimit" ], "after_preds": [ - "ori(_balances[msg.sender]) < earnLowerlimit" + "ori(_balances[msg.sender]) != earnLowerlimit" ] }, { @@ -561,7 +271,7 @@ "Sum(userDepoistTime[...]) != ori(Sum(userDepoistTime[...]))" ], "after_preds": [ - "Sum(userDepoistTime[...]) > ori(Sum(userDepoistTime[...]))" + "Sum(userDepoistTime[...]) != ori(Sum(userDepoistTime[...]))" ] }, { @@ -581,7 +291,8 @@ "earnLowerlimit != ori(_totalSupply)" ], "after_preds": [ - "earnLowerlimit > ori(_totalSupply)" + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)" ] }, { @@ -596,178 +307,114 @@ }, { "before_preds": [ - "ori(feeMax) > 0", - "ori(feeMax) == 1000" + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" ], "after_preds": [ - "ori(feeMax) == 1000" + "Sum(_balances[...]) == ori(Sum(_balances[...]))" ] }, { "before_preds": [ - "ori(fee2) > 0", - "ori(fee2) == 3" + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" ], "after_preds": [ - "ori(fee2) == 3" + "depositWithdrawInterval == ori(depositWithdrawInterval)" ] }, { "before_preds": [ - "ori(earnLowerlimit) > 0", - "ori(earnLowerlimit) == 1000000000000000000000000" + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" ], "after_preds": [ - "ori(earnLowerlimit) == 1000000000000000000000000" + "min == ori(min)" ] }, { "before_preds": [ - "ori(fee3) > 0", - "ori(fee3) == 1" + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" ], "after_preds": [ - "ori(fee3) == 1" + "_totalSupply == ori(_totalSupply)" ] }, { "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" ], "after_preds": [ - "ori(min) == 9500" + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" ] }, { "before_preds": [ - "ori(depositWithdrawInterval) > 0", - "ori(depositWithdrawInterval) == 60" + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" ], "after_preds": [ - "ori(depositWithdrawInterval) == 60" + "fee1 == ori(fee1)" ] }, { "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 6" + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" ], "after_preds": [ - "ori(_decimals) == 6" + "_decimals == ori(_decimals)" ] }, { "before_preds": [ - "depositWithdrawInterval > 0", - "depositWithdrawInterval == 60" + "ori(earnLowerlimit) <= _earnLowerlimit", + "ori(earnLowerlimit) < _earnLowerlimit", + "ori(earnLowerlimit) != _earnLowerlimit" ], "after_preds": [ - "depositWithdrawInterval == 60" + "ori(earnLowerlimit) < _earnLowerlimit", + "ori(earnLowerlimit) != _earnLowerlimit" ] }, { "before_preds": [ - "min > 0", - "min == 9500" + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" ], "after_preds": [ - "min == 9500" + "Sum(_balances[...]) == ori(Sum(_balances[...]))" ] }, { "before_preds": [ - "fee3 > 0", - "fee3 == 1" + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" ], "after_preds": [ - "fee3 == 1" + "depositWithdrawInterval == ori(depositWithdrawInterval)" ] }, { "before_preds": [ - "fee2 > 0", - "fee2 == 3" - ], - "after_preds": [ - "fee2 == 3" - ] - }, - { - "before_preds": [ - "earnLowerlimit > 0", - "earnLowerlimit == 1000000000000000000000000" - ], - "after_preds": [ - "earnLowerlimit == 1000000000000000000000000" - ] - }, - { - "before_preds": [ - "feeMax > 0", - "feeMax == 1000" - ], - "after_preds": [ - "feeMax == 1000" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 6" - ], - "after_preds": [ - "_decimals == 6" - ] - }, - { - "before_preds": [ - "Sum(_balances[...]) == ori(Sum(_balances[...]))", - "Sum(_balances[...]) >= ori(Sum(_balances[...]))", - "Sum(_balances[...]) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "Sum(_balances[...]) == ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(feeMax) == feeMax", - "ori(feeMax) >= feeMax", - "ori(feeMax) <= feeMax" - ], - "after_preds": [ - "ori(feeMax) == feeMax" - ] - }, - { - "before_preds": [ - "ori(fee2) == fee2", - "ori(fee2) >= fee2", - "ori(fee2) <= fee2" - ], - "after_preds": [ - "ori(fee2) == fee2" - ] - }, - { - "before_preds": [ - "depositWithdrawInterval == ori(depositWithdrawInterval)", - "depositWithdrawInterval >= ori(depositWithdrawInterval)", - "depositWithdrawInterval <= ori(depositWithdrawInterval)" - ], - "after_preds": [ - "depositWithdrawInterval == ori(depositWithdrawInterval)" - ] - }, - { - "before_preds": [ - "ori(earnLowerlimit) == earnLowerlimit", - "ori(earnLowerlimit) >= earnLowerlimit", - "ori(earnLowerlimit) <= earnLowerlimit" + "ori(earnLowerlimit) <= earnLowerlimit", + "ori(earnLowerlimit) < earnLowerlimit", + "ori(earnLowerlimit) != earnLowerlimit" ], "after_preds": [ - "ori(earnLowerlimit) == earnLowerlimit" + "ori(earnLowerlimit) < earnLowerlimit", + "ori(earnLowerlimit) != earnLowerlimit" ] }, { @@ -780,16 +427,6 @@ "min == ori(min)" ] }, - { - "before_preds": [ - "ori(fee3) == fee3", - "ori(fee3) >= fee3", - "ori(fee3) <= fee3" - ], - "after_preds": [ - "ori(fee3) == fee3" - ] - }, { "before_preds": [ "_totalSupply == ori(_totalSupply)", @@ -820,6 +457,16 @@ "fee1 == ori(fee1)" ] }, + { + "before_preds": [ + "_earnLowerlimit == earnLowerlimit", + "_earnLowerlimit >= earnLowerlimit", + "_earnLowerlimit <= earnLowerlimit" + ], + "after_preds": [ + "_earnLowerlimit == earnLowerlimit" + ] + }, { "before_preds": [ "_decimals == ori(_decimals)", @@ -832,208 +479,236 @@ }, { "before_preds": [ - "ori(feeMax) > 0", - "ori(feeMax) == 1000" + "ori(feeMax) >= ori(fee2)", + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)" ], "after_preds": [ - "ori(feeMax) == 1000" + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)" ] }, { "before_preds": [ - "ori(fee2) > 0", - "ori(fee2) == 3" + "ori(feeMax) >= ori(fee3)", + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)" ], "after_preds": [ - "ori(fee2) == 3" + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)" ] }, { "before_preds": [ - "ori(fee3) > 0", - "ori(fee3) == 1" + "ori(feeMax) >= ori(fee1)", + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)" ], "after_preds": [ - "ori(fee3) == 1" + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)" ] }, { "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" + "ori(fee2) >= ori(fee3)", + "ori(fee2) > ori(fee3)", + "ori(fee2) != ori(fee3)" ], "after_preds": [ - "ori(min) == 9500" + "ori(fee2) != ori(fee3)" ] }, { "before_preds": [ - "ori(depositWithdrawInterval) > 0", - "ori(depositWithdrawInterval) == 60" + "ori(fee2) <= ori(fee1)", + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)" ], "after_preds": [ - "ori(depositWithdrawInterval) == 60" + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)" ] }, { "before_preds": [ - "ori(fee1) > 0", - "ori(fee1) == 5" + "ori(fee3) <= ori(fee1)", + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" ], "after_preds": [ - "ori(fee1) == 5" + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" ] }, { "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 6" + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" ], "after_preds": [ - "ori(_decimals) == 6" + "Sum(_balances[...]) == ori(Sum(_balances[...]))" ] }, { "before_preds": [ - "ori(earnLowerlimit) <= _earnLowerlimit", - "ori(earnLowerlimit) < _earnLowerlimit", - "ori(earnLowerlimit) != _earnLowerlimit" + "ori(feeMax) >= fee3", + "ori(feeMax) > fee3", + "ori(feeMax) != fee3" ], "after_preds": [ - "ori(earnLowerlimit) < _earnLowerlimit" + "ori(feeMax) > fee3", + "ori(feeMax) != fee3" ] }, { "before_preds": [ - "depositWithdrawInterval > 0", - "depositWithdrawInterval == 60" + "ori(feeMax) >= fee2", + "ori(feeMax) > fee2", + "ori(feeMax) != fee2" ], "after_preds": [ - "depositWithdrawInterval == 60" + "ori(feeMax) > fee2", + "ori(feeMax) != fee2" ] }, { "before_preds": [ - "min > 0", - "min == 9500" + "ori(feeMax) >= fee1", + "ori(feeMax) > fee1", + "ori(feeMax) != fee1" ], "after_preds": [ - "min == 9500" + "ori(feeMax) > fee1", + "ori(feeMax) != fee1" ] }, { "before_preds": [ - "fee3 > 0", - "fee3 == 1" + "ori(fee2) >= fee3", + "ori(fee2) > fee3", + "ori(fee2) != fee3" ], "after_preds": [ - "fee3 == 1" + "ori(fee2) != fee3" ] }, { "before_preds": [ - "fee2 > 0", - "fee2 == 3" + "ori(fee2) <= fee1", + "ori(fee2) < fee1", + "ori(fee2) != fee1" ], "after_preds": [ - "fee2 == 3" + "ori(fee2) < fee1", + "ori(fee2) != fee1" ] }, { "before_preds": [ - "fee1 > 0", - "fee1 == 5" + "ori(fee2) <= feeMax", + "ori(fee2) < feeMax", + "ori(fee2) != feeMax" ], "after_preds": [ - "fee1 == 5" + "ori(fee2) != feeMax" ] }, { "before_preds": [ - "feeMax > 0", - "feeMax == 1000" + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" ], "after_preds": [ - "feeMax == 1000" + "depositWithdrawInterval == ori(depositWithdrawInterval)" ] }, { "before_preds": [ - "_decimals > 0", - "_decimals == 6" + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" ], "after_preds": [ - "_decimals == 6" + "min == ori(min)" ] }, { "before_preds": [ - "Sum(_balances[...]) == ori(Sum(_balances[...]))", - "Sum(_balances[...]) >= ori(Sum(_balances[...]))", - "Sum(_balances[...]) <= ori(Sum(_balances[...]))" + "ori(fee3) <= fee2", + "ori(fee3) < fee2", + "ori(fee3) != fee2" ], "after_preds": [ - "Sum(_balances[...]) == ori(Sum(_balances[...]))" + "ori(fee3) < fee2", + "ori(fee3) != fee2" ] }, { "before_preds": [ - "ori(feeMax) == feeMax", - "ori(feeMax) >= feeMax", - "ori(feeMax) <= feeMax" + "ori(fee3) <= fee1", + "ori(fee3) < fee1", + "ori(fee3) != fee1" ], "after_preds": [ - "ori(feeMax) == feeMax" + "ori(fee3) < fee1", + "ori(fee3) != fee1" ] }, { "before_preds": [ - "ori(fee2) == fee2", - "ori(fee2) >= fee2", - "ori(fee2) <= fee2" + "ori(fee3) <= feeMax", + "ori(fee3) < feeMax", + "ori(fee3) != feeMax" ], "after_preds": [ - "ori(fee2) == fee2" + "ori(fee3) != feeMax" ] }, { "before_preds": [ - "depositWithdrawInterval == ori(depositWithdrawInterval)", - "depositWithdrawInterval >= ori(depositWithdrawInterval)", - "depositWithdrawInterval <= ori(depositWithdrawInterval)" + "fee3 <= fee2", + "fee3 < fee2", + "fee3 != fee2" ], "after_preds": [ - "depositWithdrawInterval == ori(depositWithdrawInterval)" + "fee3 < fee2", + "fee3 != fee2" ] }, { "before_preds": [ - "ori(earnLowerlimit) <= earnLowerlimit", - "ori(earnLowerlimit) < earnLowerlimit", - "ori(earnLowerlimit) != earnLowerlimit" + "fee3 <= fee1", + "fee3 < fee1", + "fee3 != fee1" ], "after_preds": [ - "ori(earnLowerlimit) < earnLowerlimit" + "fee3 < fee1", + "fee3 != fee1" ] }, { "before_preds": [ - "min == ori(min)", - "min >= ori(min)", - "min <= ori(min)" + "fee3 <= feeMax", + "fee3 < feeMax", + "fee3 != feeMax" ], "after_preds": [ - "min == ori(min)" + "fee3 != feeMax" ] }, { "before_preds": [ - "ori(fee3) == fee3", - "ori(fee3) >= fee3", - "ori(fee3) <= fee3" + "fee3 <= ori(fee1)", + "fee3 < ori(fee1)", + "fee3 != ori(fee1)" ], "after_preds": [ - "ori(fee3) == fee3" + "fee3 < ori(fee1)", + "fee3 != ori(fee1)" ] }, { @@ -1058,858 +733,115 @@ }, { "before_preds": [ - "fee1 == ori(fee1)", - "fee1 >= ori(fee1)", - "fee1 <= ori(fee1)" + "fee2 <= fee1", + "fee2 < fee1", + "fee2 != fee1" ], "after_preds": [ - "fee1 == ori(fee1)" + "fee2 < fee1", + "fee2 != fee1" ] }, { "before_preds": [ - "_earnLowerlimit == earnLowerlimit", - "_earnLowerlimit >= earnLowerlimit", - "_earnLowerlimit <= earnLowerlimit" + "fee2 <= feeMax", + "fee2 < feeMax", + "fee2 != feeMax" ], "after_preds": [ - "_earnLowerlimit == earnLowerlimit" + "fee2 != feeMax" ] }, { "before_preds": [ - "_decimals == ori(_decimals)", - "_decimals >= ori(_decimals)", - "_decimals <= ori(_decimals)" + "fee2 <= ori(fee1)", + "fee2 < ori(fee1)", + "fee2 != ori(fee1)" ], "after_preds": [ - "_decimals == ori(_decimals)" + "fee2 < ori(fee1)", + "fee2 != ori(fee1)" ] }, { "before_preds": [ - "ori(feeMax) > 0", - "ori(feeMax) == 1000" + "fee1 <= feeMax", + "fee1 < feeMax", + "fee1 != feeMax" ], "after_preds": [ - "ori(feeMax) == 1000" + "fee1 != feeMax" ] }, { "before_preds": [ - "ori(fee2) > 0", - "ori(fee2) == 3" + "fee1 >= ori(fee1)", + "fee1 > ori(fee1)", + "fee1 != ori(fee1)" ], "after_preds": [ - "ori(fee2) == 3" + "fee1 != ori(fee1)" ] }, { "before_preds": [ - "ori(Sum(_balances[...])) > 0", - "ori(Sum(_balances[...])) == 1310289998969" + "feeMax >= ori(fee1)", + "feeMax > ori(fee1)", + "feeMax != ori(fee1)" ], "after_preds": [ - "ori(Sum(_balances[...])) == 1310289998969" + "feeMax > ori(fee1)", + "feeMax != ori(fee1)" ] }, { "before_preds": [ - "ori(earnLowerlimit) > 0", - "ori(earnLowerlimit) == 1000000000000000000000000" + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" ], "after_preds": [ - "ori(earnLowerlimit) == 1000000000000000000000000" + "_decimals == ori(_decimals)" ] }, { "before_preds": [ - "ori(fee3) > 0", - "ori(fee3) == 1" + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" ], "after_preds": [ - "ori(fee3) == 1" + "Sum(_balances[...]) == ori(Sum(_balances[...]))" ] }, { "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" ], "after_preds": [ - "ori(min) == 9500" + "depositWithdrawInterval == ori(depositWithdrawInterval)" ] }, { "before_preds": [ - "ori(depositWithdrawInterval) > 0", - "ori(depositWithdrawInterval) == 60" + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" ], "after_preds": [ - "ori(depositWithdrawInterval) == 60" + "min == ori(min)" ] }, { "before_preds": [ - "ori(fee1) > 0", - "ori(fee1) == 5" + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" ], "after_preds": [ - "ori(fee1) == 5" - ] - }, - { - "before_preds": [ - "ori(Sum(userDepoistTime[...])) > 0", - "ori(Sum(userDepoistTime[...])) == 41922035526" - ], - "after_preds": [ - "ori(Sum(userDepoistTime[...])) == 41922035526" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) > 0", - "ori(_totalSupply) == 1310289998969" - ], - "after_preds": [ - "ori(_totalSupply) == 1310289998969" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 6" - ], - "after_preds": [ - "ori(_decimals) == 6" - ] - }, - { - "before_preds": [ - "ori(feeMax) >= ori(fee2)", - "ori(feeMax) > ori(fee2)", - "ori(feeMax) != ori(fee2)" - ], - "after_preds": [ - "ori(feeMax) > ori(fee2)" - ] - }, - { - "before_preds": [ - "ori(feeMax) >= ori(fee3)", - "ori(feeMax) > ori(fee3)", - "ori(feeMax) != ori(fee3)" - ], - "after_preds": [ - "ori(feeMax) > ori(fee3)" - ] - }, - { - "before_preds": [ - "ori(feeMax) >= ori(fee1)", - "ori(feeMax) > ori(fee1)", - "ori(feeMax) != ori(fee1)" - ], - "after_preds": [ - "ori(feeMax) > ori(fee1)" - ] - }, - { - "before_preds": [ - "ori(fee2) >= ori(fee3)", - "ori(fee2) > ori(fee3)", - "ori(fee2) != ori(fee3)" - ], - "after_preds": [ - "ori(fee2) > ori(fee3)" - ] - }, - { - "before_preds": [ - "ori(fee2) <= ori(fee1)", - "ori(fee2) < ori(fee1)", - "ori(fee2) != ori(fee1)" - ], - "after_preds": [ - "ori(fee2) < ori(fee1)" - ] - }, - { - "before_preds": [ - "ori(fee3) <= ori(fee1)", - "ori(fee3) < ori(fee1)", - "ori(fee3) != ori(fee1)" - ], - "after_preds": [ - "ori(fee3) < ori(fee1)" - ] - }, - { - "before_preds": [ - "Sum(_balances[...]) > 0", - "Sum(_balances[...]) == 1310289998969" - ], - "after_preds": [ - "Sum(_balances[...]) == 1310289998969" - ] - }, - { - "before_preds": [ - "depositWithdrawInterval > 0", - "depositWithdrawInterval == 60" - ], - "after_preds": [ - "depositWithdrawInterval == 60" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" - ] - }, - { - "before_preds": [ - "fee3 > 0", - "fee3 == 1" - ], - "after_preds": [ - "fee3 == 1" - ] - }, - { - "before_preds": [ - "_totalSupply > 0", - "_totalSupply == 1310289998969" - ], - "after_preds": [ - "_totalSupply == 1310289998969" - ] - }, - { - "before_preds": [ - "Sum(userDepoistTime[...]) > 0", - "Sum(userDepoistTime[...]) == 41922035526" - ], - "after_preds": [ - "Sum(userDepoistTime[...]) == 41922035526" - ] - }, - { - "before_preds": [ - "fee2 > 0", - "fee2 == 3" - ], - "after_preds": [ - "fee2 == 3" - ] - }, - { - "before_preds": [ - "fee1 > 0", - "fee1 == 10" - ], - "after_preds": [ - "fee1 == 10" - ] - }, - { - "before_preds": [ - "earnLowerlimit > 0", - "earnLowerlimit == 1000000000000000000000000" - ], - "after_preds": [ - "earnLowerlimit == 1000000000000000000000000" - ] - }, - { - "before_preds": [ - "feeMax > 0", - "feeMax == 1000" - ], - "after_preds": [ - "feeMax == 1000" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 6" - ], - "after_preds": [ - "_decimals == 6" - ] - }, - { - "before_preds": [ - "Sum(_balances[...]) == ori(Sum(_balances[...]))", - "Sum(_balances[...]) >= ori(Sum(_balances[...]))", - "Sum(_balances[...]) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "Sum(_balances[...]) == ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(feeMax) >= fee3", - "ori(feeMax) > fee3", - "ori(feeMax) != fee3" - ], - "after_preds": [ - "ori(feeMax) > fee3" - ] - }, - { - "before_preds": [ - "ori(feeMax) >= fee2", - "ori(feeMax) > fee2", - "ori(feeMax) != fee2" - ], - "after_preds": [ - "ori(feeMax) > fee2" - ] - }, - { - "before_preds": [ - "ori(feeMax) >= fee1", - "ori(feeMax) > fee1", - "ori(feeMax) != fee1" - ], - "after_preds": [ - "ori(feeMax) > fee1" - ] - }, - { - "before_preds": [ - "ori(feeMax) == feeMax", - "ori(feeMax) >= feeMax", - "ori(feeMax) <= feeMax" - ], - "after_preds": [ - "ori(feeMax) == feeMax" - ] - }, - { - "before_preds": [ - "ori(fee2) >= fee3", - "ori(fee2) > fee3", - "ori(fee2) != fee3" - ], - "after_preds": [ - "ori(fee2) > fee3" - ] - }, - { - "before_preds": [ - "ori(fee2) == fee2", - "ori(fee2) >= fee2", - "ori(fee2) <= fee2" - ], - "after_preds": [ - "ori(fee2) == fee2" - ] - }, - { - "before_preds": [ - "ori(fee2) <= fee1", - "ori(fee2) < fee1", - "ori(fee2) != fee1" - ], - "after_preds": [ - "ori(fee2) < fee1" - ] - }, - { - "before_preds": [ - "ori(fee2) <= feeMax", - "ori(fee2) < feeMax", - "ori(fee2) != feeMax" - ], - "after_preds": [ - "ori(fee2) < feeMax" - ] - }, - { - "before_preds": [ - "depositWithdrawInterval == ori(depositWithdrawInterval)", - "depositWithdrawInterval >= ori(depositWithdrawInterval)", - "depositWithdrawInterval <= ori(depositWithdrawInterval)" - ], - "after_preds": [ - "depositWithdrawInterval == ori(depositWithdrawInterval)" - ] - }, - { - "before_preds": [ - "ori(earnLowerlimit) == earnLowerlimit", - "ori(earnLowerlimit) >= earnLowerlimit", - "ori(earnLowerlimit) <= earnLowerlimit" - ], - "after_preds": [ - "ori(earnLowerlimit) == earnLowerlimit" - ] - }, - { - "before_preds": [ - "min == ori(min)", - "min >= ori(min)", - "min <= ori(min)" - ], - "after_preds": [ - "min == ori(min)" - ] - }, - { - "before_preds": [ - "ori(fee3) == fee3", - "ori(fee3) >= fee3", - "ori(fee3) <= fee3" - ], - "after_preds": [ - "ori(fee3) == fee3" - ] - }, - { - "before_preds": [ - "ori(fee3) <= fee2", - "ori(fee3) < fee2", - "ori(fee3) != fee2" - ], - "after_preds": [ - "ori(fee3) < fee2" - ] - }, - { - "before_preds": [ - "ori(fee3) <= fee1", - "ori(fee3) < fee1", - "ori(fee3) != fee1" - ], - "after_preds": [ - "ori(fee3) < fee1" - ] - }, - { - "before_preds": [ - "ori(fee3) <= feeMax", - "ori(fee3) < feeMax", - "ori(fee3) != feeMax" - ], - "after_preds": [ - "ori(fee3) < feeMax" - ] - }, - { - "before_preds": [ - "fee3 <= fee2", - "fee3 < fee2", - "fee3 != fee2" - ], - "after_preds": [ - "fee3 < fee2" - ] - }, - { - "before_preds": [ - "fee3 <= fee1", - "fee3 < fee1", - "fee3 != fee1" - ], - "after_preds": [ - "fee3 < fee1" - ] - }, - { - "before_preds": [ - "fee3 <= feeMax", - "fee3 < feeMax", - "fee3 != feeMax" - ], - "after_preds": [ - "fee3 < feeMax" - ] - }, - { - "before_preds": [ - "fee3 <= ori(fee1)", - "fee3 < ori(fee1)", - "fee3 != ori(fee1)" - ], - "after_preds": [ - "fee3 < ori(fee1)" - ] - }, - { - "before_preds": [ - "_totalSupply == ori(_totalSupply)", - "_totalSupply >= ori(_totalSupply)", - "_totalSupply <= ori(_totalSupply)" - ], - "after_preds": [ - "_totalSupply == ori(_totalSupply)" - ] - }, - { - "before_preds": [ - "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", - "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", - "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" - ], - "after_preds": [ - "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" - ] - }, - { - "before_preds": [ - "fee2 <= fee1", - "fee2 < fee1", - "fee2 != fee1" - ], - "after_preds": [ - "fee2 < fee1" - ] - }, - { - "before_preds": [ - "fee2 <= feeMax", - "fee2 < feeMax", - "fee2 != feeMax" - ], - "after_preds": [ - "fee2 < feeMax" - ] - }, - { - "before_preds": [ - "fee2 <= ori(fee1)", - "fee2 < ori(fee1)", - "fee2 != ori(fee1)" - ], - "after_preds": [ - "fee2 < ori(fee1)" - ] - }, - { - "before_preds": [ - "fee1 <= feeMax", - "fee1 < feeMax", - "fee1 != feeMax" - ], - "after_preds": [ - "fee1 < feeMax" - ] - }, - { - "before_preds": [ - "fee1 >= ori(fee1)", - "fee1 > ori(fee1)", - "fee1 != ori(fee1)" - ], - "after_preds": [ - "fee1 > ori(fee1)" - ] - }, - { - "before_preds": [ - "feeMax >= ori(fee1)", - "feeMax > ori(fee1)", - "feeMax != ori(fee1)" - ], - "after_preds": [ - "feeMax > ori(fee1)" - ] - }, - { - "before_preds": [ - "_decimals == ori(_decimals)", - "_decimals >= ori(_decimals)", - "_decimals <= ori(_decimals)" - ], - "after_preds": [ - "_decimals == ori(_decimals)" - ] - }, - { - "before_preds": [ - "ori(feeMax) > 0", - "ori(feeMax) == 1000" - ], - "after_preds": [ - "ori(feeMax) == 1000" - ] - }, - { - "before_preds": [ - "ori(fee2) > 0", - "ori(fee2) == 3" - ], - "after_preds": [ - "ori(fee2) == 3" - ] - }, - { - "before_preds": [ - "ori(Sum(_balances[...])) > 0", - "ori(Sum(_balances[...])) == 851093071954" - ], - "after_preds": [ - "ori(Sum(_balances[...])) == 851093071954" - ] - }, - { - "before_preds": [ - "ori(earnLowerlimit) > 0", - "ori(earnLowerlimit) == 1000000000000000000000000" - ], - "after_preds": [ - "ori(earnLowerlimit) == 1000000000000000000000000" - ] - }, - { - "before_preds": [ - "ori(fee3) > 0", - "ori(fee3) == 1" - ], - "after_preds": [ - "ori(fee3) == 1" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "ori(depositWithdrawInterval) > 0", - "ori(depositWithdrawInterval) == 60" - ], - "after_preds": [ - "ori(depositWithdrawInterval) == 60" - ] - }, - { - "before_preds": [ - "ori(fee1) > 0", - "ori(fee1) == 5" - ], - "after_preds": [ - "ori(fee1) == 5" - ] - }, - { - "before_preds": [ - "ori(Sum(userDepoistTime[...])) > 0", - "ori(Sum(userDepoistTime[...])) == 32247272285" - ], - "after_preds": [ - "ori(Sum(userDepoistTime[...])) == 32247272285" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) > 0", - "ori(_totalSupply) == 851093071954" - ], - "after_preds": [ - "ori(_totalSupply) == 851093071954" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 6" - ], - "after_preds": [ - "ori(_decimals) == 6" - ] - }, - { - "before_preds": [ - "Sum(_balances[...]) > 0", - "Sum(_balances[...]) == 851093071954" - ], - "after_preds": [ - "Sum(_balances[...]) == 851093071954" - ] - }, - { - "before_preds": [ - "depositWithdrawInterval > 0", - "depositWithdrawInterval == 60" - ], - "after_preds": [ - "depositWithdrawInterval == 60" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" - ] - }, - { - "before_preds": [ - "fee3 > 0", - "fee3 == 1" - ], - "after_preds": [ - "fee3 == 1" - ] - }, - { - "before_preds": [ - "_totalSupply > 0", - "_totalSupply == 851093071954" - ], - "after_preds": [ - "_totalSupply == 851093071954" - ] - }, - { - "before_preds": [ - "Sum(userDepoistTime[...]) > 0", - "Sum(userDepoistTime[...]) == 32247272285" - ], - "after_preds": [ - "Sum(userDepoistTime[...]) == 32247272285" - ] - }, - { - "before_preds": [ - "fee2 > 0", - "fee2 == 3" - ], - "after_preds": [ - "fee2 == 3" - ] - }, - { - "before_preds": [ - "fee1 > 0", - "fee1 == 5" - ], - "after_preds": [ - "fee1 == 5" - ] - }, - { - "before_preds": [ - "earnLowerlimit > 0", - "earnLowerlimit == 1000000000000000000000000" - ], - "after_preds": [ - "earnLowerlimit == 1000000000000000000000000" - ] - }, - { - "before_preds": [ - "feeMax > 0", - "feeMax == 1000" - ], - "after_preds": [ - "feeMax == 1000" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 6" - ], - "after_preds": [ - "_decimals == 6" - ] - }, - { - "before_preds": [ - "Sum(_balances[...]) == ori(Sum(_balances[...]))", - "Sum(_balances[...]) >= ori(Sum(_balances[...]))", - "Sum(_balances[...]) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "Sum(_balances[...]) == ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(feeMax) == feeMax", - "ori(feeMax) >= feeMax", - "ori(feeMax) <= feeMax" - ], - "after_preds": [ - "ori(feeMax) == feeMax" - ] - }, - { - "before_preds": [ - "ori(fee2) == fee2", - "ori(fee2) >= fee2", - "ori(fee2) <= fee2" - ], - "after_preds": [ - "ori(fee2) == fee2" - ] - }, - { - "before_preds": [ - "depositWithdrawInterval == ori(depositWithdrawInterval)", - "depositWithdrawInterval >= ori(depositWithdrawInterval)", - "depositWithdrawInterval <= ori(depositWithdrawInterval)" - ], - "after_preds": [ - "depositWithdrawInterval == ori(depositWithdrawInterval)" - ] - }, - { - "before_preds": [ - "ori(earnLowerlimit) == earnLowerlimit", - "ori(earnLowerlimit) >= earnLowerlimit", - "ori(earnLowerlimit) <= earnLowerlimit" - ], - "after_preds": [ - "ori(earnLowerlimit) == earnLowerlimit" - ] - }, - { - "before_preds": [ - "min == ori(min)", - "min >= ori(min)", - "min <= ori(min)" - ], - "after_preds": [ - "min == ori(min)" - ] - }, - { - "before_preds": [ - "ori(fee3) == fee3", - "ori(fee3) >= fee3", - "ori(fee3) <= fee3" - ], - "after_preds": [ - "ori(fee3) == fee3" - ] - }, - { - "before_preds": [ - "_totalSupply == ori(_totalSupply)", - "_totalSupply >= ori(_totalSupply)", - "_totalSupply <= ori(_totalSupply)" - ], - "after_preds": [ - "_totalSupply == ori(_totalSupply)" + "_totalSupply == ori(_totalSupply)" ] }, { @@ -1942,60 +874,6 @@ "_decimals == ori(_decimals)" ] }, - { - "before_preds": [ - "ori(feeMax) > 0", - "ori(feeMax) == 1000" - ], - "after_preds": [ - "ori(feeMax) == 1000" - ] - }, - { - "before_preds": [ - "ori(fee2) > 0", - "ori(fee2) == 3" - ], - "after_preds": [ - "ori(fee2) == 3" - ] - }, - { - "before_preds": [ - "ori(fee3) > 0", - "ori(fee3) == 1" - ], - "after_preds": [ - "ori(fee3) == 1" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "ori(depositWithdrawInterval) > 0", - "ori(depositWithdrawInterval) == 60" - ], - "after_preds": [ - "ori(depositWithdrawInterval) == 60" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 6" - ], - "after_preds": [ - "ori(_decimals) == 6" - ] - }, { "before_preds": [ "ori(Sum(_balances[...])) >= ori(_balances[recipient])", @@ -2003,111 +881,37 @@ "ori(Sum(_balances[...])) != ori(_balances[recipient])" ], "after_preds": [ - "ori(Sum(_balances[...])) > ori(_balances[recipient])" - ] - }, - { - "before_preds": [ - "depositWithdrawInterval > 0", - "depositWithdrawInterval == 60" - ], - "after_preds": [ - "depositWithdrawInterval == 60" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" - ] - }, - { - "before_preds": [ - "fee3 > 0", - "fee3 == 1" - ], - "after_preds": [ - "fee3 == 1" - ] - }, - { - "before_preds": [ - "fee2 > 0", - "fee2 == 3" - ], - "after_preds": [ - "fee2 == 3" - ] - }, - { - "before_preds": [ - "feeMax > 0", - "feeMax == 1000" - ], - "after_preds": [ - "feeMax == 1000" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 6" - ], - "after_preds": [ - "_decimals == 6" - ] - }, - { - "before_preds": [ - "Sum(_balances[...]) == ori(Sum(_balances[...]))", - "Sum(_balances[...]) >= ori(Sum(_balances[...]))", - "Sum(_balances[...]) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "Sum(_balances[...]) == ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "Sum(_balances[...]) >= _balances[recipient]", - "Sum(_balances[...]) > _balances[recipient]", - "Sum(_balances[...]) != _balances[recipient]" - ], - "after_preds": [ - "Sum(_balances[...]) > _balances[recipient]" + "ori(Sum(_balances[...])) != ori(_balances[recipient])" ] }, { "before_preds": [ - "Sum(_balances[...]) >= ori(_balances[recipient])", - "Sum(_balances[...]) > ori(_balances[recipient])", - "Sum(_balances[...]) != ori(_balances[recipient])" + "Sum(_balances[...]) == ori(Sum(_balances[...]))", + "Sum(_balances[...]) >= ori(Sum(_balances[...]))", + "Sum(_balances[...]) <= ori(Sum(_balances[...]))" ], "after_preds": [ - "Sum(_balances[...]) > ori(_balances[recipient])" + "Sum(_balances[...]) == ori(Sum(_balances[...]))" ] }, { "before_preds": [ - "ori(feeMax) == feeMax", - "ori(feeMax) >= feeMax", - "ori(feeMax) <= feeMax" + "Sum(_balances[...]) >= _balances[recipient]", + "Sum(_balances[...]) > _balances[recipient]", + "Sum(_balances[...]) != _balances[recipient]" ], "after_preds": [ - "ori(feeMax) == feeMax" + "Sum(_balances[...]) != _balances[recipient]" ] }, { "before_preds": [ - "ori(fee2) == fee2", - "ori(fee2) >= fee2", - "ori(fee2) <= fee2" + "Sum(_balances[...]) >= ori(_balances[recipient])", + "Sum(_balances[...]) > ori(_balances[recipient])", + "Sum(_balances[...]) != ori(_balances[recipient])" ], "after_preds": [ - "ori(fee2) == fee2" + "Sum(_balances[...]) != ori(_balances[recipient])" ] }, { @@ -2117,7 +921,7 @@ "ori(Sum(_balances[...])) != _balances[recipient]" ], "after_preds": [ - "ori(Sum(_balances[...])) > _balances[recipient]" + "ori(Sum(_balances[...])) != _balances[recipient]" ] }, { @@ -2130,16 +934,6 @@ "depositWithdrawInterval == ori(depositWithdrawInterval)" ] }, - { - "before_preds": [ - "ori(earnLowerlimit) == earnLowerlimit", - "ori(earnLowerlimit) >= earnLowerlimit", - "ori(earnLowerlimit) <= earnLowerlimit" - ], - "after_preds": [ - "ori(earnLowerlimit) == earnLowerlimit" - ] - }, { "before_preds": [ "min == ori(min)", @@ -2157,17 +951,7 @@ "_balances[recipient] != ori(_balances[recipient])" ], "after_preds": [ - "_balances[recipient] > ori(_balances[recipient])" - ] - }, - { - "before_preds": [ - "ori(fee3) == fee3", - "ori(fee3) >= fee3", - "ori(fee3) <= fee3" - ], - "after_preds": [ - "ori(fee3) == fee3" + "_balances[recipient] != ori(_balances[recipient])" ] }, { @@ -2210,60 +994,6 @@ "_decimals == ori(_decimals)" ] }, - { - "before_preds": [ - "ori(feeMax) > 0", - "ori(feeMax) == 1000" - ], - "after_preds": [ - "ori(feeMax) == 1000" - ] - }, - { - "before_preds": [ - "ori(fee2) > 0", - "ori(fee2) == 3" - ], - "after_preds": [ - "ori(fee2) == 3" - ] - }, - { - "before_preds": [ - "ori(fee3) > 0", - "ori(fee3) == 1" - ], - "after_preds": [ - "ori(fee3) == 1" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "ori(depositWithdrawInterval) > 0", - "ori(depositWithdrawInterval) == 60" - ], - "after_preds": [ - "ori(depositWithdrawInterval) == 60" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 6" - ], - "after_preds": [ - "ori(_decimals) == 6" - ] - }, { "before_preds": [ "amount <= ori(Sum(_allowances[sender][...]))", @@ -2271,7 +1001,8 @@ "amount != ori(Sum(_allowances[sender][...]))" ], "after_preds": [ - "amount < ori(Sum(_allowances[sender][...]))" + "amount < ori(Sum(_allowances[sender][...]))", + "amount != ori(Sum(_allowances[sender][...]))" ] }, { @@ -2281,7 +1012,7 @@ "ori(Sum(_balances[...])) != ori(_balances[recipient])" ], "after_preds": [ - "ori(Sum(_balances[...])) > ori(_balances[recipient])" + "ori(Sum(_balances[...])) != ori(_balances[recipient])" ] }, { @@ -2291,61 +1022,7 @@ "ori(Sum(_balances[...])) != ori(_balances[sender])" ], "after_preds": [ - "ori(Sum(_balances[...])) > ori(_balances[sender])" - ] - }, - { - "before_preds": [ - "depositWithdrawInterval > 0", - "depositWithdrawInterval == 60" - ], - "after_preds": [ - "depositWithdrawInterval == 60" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" - ] - }, - { - "before_preds": [ - "fee3 > 0", - "fee3 == 1" - ], - "after_preds": [ - "fee3 == 1" - ] - }, - { - "before_preds": [ - "fee2 > 0", - "fee2 == 3" - ], - "after_preds": [ - "fee2 == 3" - ] - }, - { - "before_preds": [ - "feeMax > 0", - "feeMax == 1000" - ], - "after_preds": [ - "feeMax == 1000" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 6" - ], - "after_preds": [ - "_decimals == 6" + "ori(Sum(_balances[...])) != ori(_balances[sender])" ] }, { @@ -2355,7 +1032,7 @@ "Sum(_balances[...]) != _balances[sender]" ], "after_preds": [ - "Sum(_balances[...]) > _balances[sender]" + "Sum(_balances[...]) != _balances[sender]" ] }, { @@ -2375,7 +1052,7 @@ "Sum(_balances[...]) != _balances[recipient]" ], "after_preds": [ - "Sum(_balances[...]) > _balances[recipient]" + "Sum(_balances[...]) != _balances[recipient]" ] }, { @@ -2385,7 +1062,7 @@ "Sum(_balances[...]) != ori(_balances[recipient])" ], "after_preds": [ - "Sum(_balances[...]) > ori(_balances[recipient])" + "Sum(_balances[...]) != ori(_balances[recipient])" ] }, { @@ -2395,17 +1072,7 @@ "Sum(_balances[...]) != ori(_balances[sender])" ], "after_preds": [ - "Sum(_balances[...]) > ori(_balances[sender])" - ] - }, - { - "before_preds": [ - "ori(feeMax) == feeMax", - "ori(feeMax) >= feeMax", - "ori(feeMax) <= feeMax" - ], - "after_preds": [ - "ori(feeMax) == feeMax" + "Sum(_balances[...]) != ori(_balances[sender])" ] }, { @@ -2415,323 +1082,171 @@ "_balances[sender] != ori(Sum(_balances[...]))" ], "after_preds": [ - "_balances[sender] < ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "_balances[sender] <= _balances[recipient]", - "_balances[sender] < _balances[recipient]", - "_balances[sender] != _balances[recipient]" - ], - "after_preds": [ - "_balances[sender] < _balances[recipient]" - ] - }, - { - "before_preds": [ - "_balances[sender] <= ori(_balances[sender])", - "_balances[sender] < ori(_balances[sender])", - "_balances[sender] != ori(_balances[sender])" - ], - "after_preds": [ - "_balances[sender] < ori(_balances[sender])" - ] - }, - { - "before_preds": [ - "amount <= Sum(_allowances[sender][...])", - "amount < Sum(_allowances[sender][...])", - "amount != Sum(_allowances[sender][...])" - ], - "after_preds": [ - "amount < Sum(_allowances[sender][...])" - ] - }, - { - "before_preds": [ - "ori(fee2) == fee2", - "ori(fee2) >= fee2", - "ori(fee2) <= fee2" - ], - "after_preds": [ - "ori(fee2) == fee2" - ] - }, - { - "before_preds": [ - "Sum(_allowances[sender][...]) <= ori(Sum(_allowances[sender][...]))", - "Sum(_allowances[sender][...]) < ori(Sum(_allowances[sender][...]))", - "Sum(_allowances[sender][...]) != ori(Sum(_allowances[sender][...]))" - ], - "after_preds": [ - "Sum(_allowances[sender][...]) < ori(Sum(_allowances[sender][...]))" - ] - }, - { - "before_preds": [ - "depositWithdrawInterval == ori(depositWithdrawInterval)", - "depositWithdrawInterval >= ori(depositWithdrawInterval)", - "depositWithdrawInterval <= ori(depositWithdrawInterval)" - ], - "after_preds": [ - "depositWithdrawInterval == ori(depositWithdrawInterval)" - ] - }, - { - "before_preds": [ - "ori(Sum(_balances[...])) >= _balances[recipient]", - "ori(Sum(_balances[...])) > _balances[recipient]", - "ori(Sum(_balances[...])) != _balances[recipient]" - ], - "after_preds": [ - "ori(Sum(_balances[...])) > _balances[recipient]" - ] - }, - { - "before_preds": [ - "ori(earnLowerlimit) == earnLowerlimit", - "ori(earnLowerlimit) >= earnLowerlimit", - "ori(earnLowerlimit) <= earnLowerlimit" - ], - "after_preds": [ - "ori(earnLowerlimit) == earnLowerlimit" - ] - }, - { - "before_preds": [ - "min == ori(min)", - "min >= ori(min)", - "min <= ori(min)" - ], - "after_preds": [ - "min == ori(min)" - ] - }, - { - "before_preds": [ - "_balances[recipient] >= ori(_balances[recipient])", - "_balances[recipient] > ori(_balances[recipient])", - "_balances[recipient] != ori(_balances[recipient])" - ], - "after_preds": [ - "_balances[recipient] > ori(_balances[recipient])" - ] - }, - { - "before_preds": [ - "ori(fee3) == fee3", - "ori(fee3) >= fee3", - "ori(fee3) <= fee3" - ], - "after_preds": [ - "ori(fee3) == fee3" - ] - }, - { - "before_preds": [ - "_totalSupply == ori(_totalSupply)", - "_totalSupply >= ori(_totalSupply)", - "_totalSupply <= ori(_totalSupply)" - ], - "after_preds": [ - "_totalSupply == ori(_totalSupply)" - ] - }, - { - "before_preds": [ - "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", - "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", - "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" - ], - "after_preds": [ - "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" - ] - }, - { - "before_preds": [ - "fee1 == ori(fee1)", - "fee1 >= ori(fee1)", - "fee1 <= ori(fee1)" - ], - "after_preds": [ - "fee1 == ori(fee1)" - ] - }, - { - "before_preds": [ - "_decimals == ori(_decimals)", - "_decimals >= ori(_decimals)", - "_decimals <= ori(_decimals)" - ], - "after_preds": [ - "_decimals == ori(_decimals)" - ] - }, - { - "before_preds": [ - "ori(feeMax) > 0", - "ori(feeMax) == 1000" - ], - "after_preds": [ - "ori(feeMax) == 1000" - ] - }, - { - "before_preds": [ - "ori(fee2) > 0", - "ori(fee2) == 3" - ], - "after_preds": [ - "ori(fee2) == 3" + "_balances[sender] < ori(Sum(_balances[...]))", + "_balances[sender] != ori(Sum(_balances[...]))" ] }, { "before_preds": [ - "ori(earnLowerlimit) > 0", - "ori(earnLowerlimit) == 1000000000000000000000000" + "_balances[sender] <= _balances[recipient]", + "_balances[sender] < _balances[recipient]", + "_balances[sender] != _balances[recipient]" ], "after_preds": [ - "ori(earnLowerlimit) == 1000000000000000000000000" + "_balances[sender] < _balances[recipient]", + "_balances[sender] != _balances[recipient]" ] }, { "before_preds": [ - "ori(fee3) > 0", - "ori(fee3) == 1" + "_balances[sender] <= ori(_balances[sender])", + "_balances[sender] < ori(_balances[sender])", + "_balances[sender] != ori(_balances[sender])" ], "after_preds": [ - "ori(fee3) == 1" + "_balances[sender] != ori(_balances[sender])" ] }, { "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" + "amount <= Sum(_allowances[sender][...])", + "amount < Sum(_allowances[sender][...])", + "amount != Sum(_allowances[sender][...])" ], "after_preds": [ - "ori(min) == 9500" + "amount < Sum(_allowances[sender][...])", + "amount != Sum(_allowances[sender][...])" ] }, { "before_preds": [ - "ori(depositWithdrawInterval) > 0", - "ori(depositWithdrawInterval) == 60" + "Sum(_allowances[sender][...]) <= ori(Sum(_allowances[sender][...]))", + "Sum(_allowances[sender][...]) < ori(Sum(_allowances[sender][...]))", + "Sum(_allowances[sender][...]) != ori(Sum(_allowances[sender][...]))" ], "after_preds": [ - "ori(depositWithdrawInterval) == 60" + "Sum(_allowances[sender][...]) != ori(Sum(_allowances[sender][...]))" ] }, { "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 6" + "depositWithdrawInterval == ori(depositWithdrawInterval)", + "depositWithdrawInterval >= ori(depositWithdrawInterval)", + "depositWithdrawInterval <= ori(depositWithdrawInterval)" ], "after_preds": [ - "ori(_decimals) == 6" + "depositWithdrawInterval == ori(depositWithdrawInterval)" ] }, { "before_preds": [ - "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", - "ori(Sum(_balances[...])) > ori(_balances[msg.sender])", - "ori(Sum(_balances[...])) != ori(_balances[msg.sender])" + "ori(Sum(_balances[...])) >= _balances[recipient]", + "ori(Sum(_balances[...])) > _balances[recipient]", + "ori(Sum(_balances[...])) != _balances[recipient]" ], "after_preds": [ - "ori(Sum(_balances[...])) > ori(_balances[msg.sender])" + "ori(Sum(_balances[...])) != _balances[recipient]" ] }, { "before_preds": [ - "ori(Sum(_balances[...])) == ori(_totalSupply)", - "ori(Sum(_balances[...])) >= ori(_totalSupply)", - "ori(Sum(_balances[...])) <= ori(_totalSupply)" + "min == ori(min)", + "min >= ori(min)", + "min <= ori(min)" ], "after_preds": [ - "ori(Sum(_balances[...])) == ori(_totalSupply)" + "min == ori(min)" ] }, { "before_preds": [ - "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))", - "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))", - "ori(userDepoistTime[msg.sender]) != ori(Sum(userDepoistTime[...]))" + "_balances[recipient] >= ori(_balances[recipient])", + "_balances[recipient] > ori(_balances[recipient])", + "_balances[recipient] != ori(_balances[recipient])" ], "after_preds": [ - "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))" + "_balances[recipient] != ori(_balances[recipient])" ] }, { "before_preds": [ - "ori(_balances[msg.sender]) <= ori(_totalSupply)", - "ori(_balances[msg.sender]) < ori(_totalSupply)", - "ori(_balances[msg.sender]) != ori(_totalSupply)" + "_totalSupply == ori(_totalSupply)", + "_totalSupply >= ori(_totalSupply)", + "_totalSupply <= ori(_totalSupply)" ], "after_preds": [ - "ori(_balances[msg.sender]) < ori(_totalSupply)" + "_totalSupply == ori(_totalSupply)" ] }, { "before_preds": [ - "depositWithdrawInterval > 0", - "depositWithdrawInterval == 60" + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) >= ori(Sum(userDepoistTime[...]))", + "Sum(userDepoistTime[...]) <= ori(Sum(userDepoistTime[...]))" ], "after_preds": [ - "depositWithdrawInterval == 60" + "Sum(userDepoistTime[...]) == ori(Sum(userDepoistTime[...]))" ] }, { "before_preds": [ - "min > 0", - "min == 9500" + "fee1 == ori(fee1)", + "fee1 >= ori(fee1)", + "fee1 <= ori(fee1)" ], "after_preds": [ - "min == 9500" + "fee1 == ori(fee1)" ] }, { "before_preds": [ - "fee3 > 0", - "fee3 == 1" + "_decimals == ori(_decimals)", + "_decimals >= ori(_decimals)", + "_decimals <= ori(_decimals)" ], "after_preds": [ - "fee3 == 1" + "_decimals == ori(_decimals)" ] }, { "before_preds": [ - "fee2 > 0", - "fee2 == 3" + "ori(Sum(_balances[...])) >= ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) > ori(_balances[msg.sender])", + "ori(Sum(_balances[...])) != ori(_balances[msg.sender])" ], "after_preds": [ - "fee2 == 3" + "ori(Sum(_balances[...])) != ori(_balances[msg.sender])" ] }, { "before_preds": [ - "earnLowerlimit > 0", - "earnLowerlimit == 1000000000000000000000000" + "ori(Sum(_balances[...])) == ori(_totalSupply)", + "ori(Sum(_balances[...])) >= ori(_totalSupply)", + "ori(Sum(_balances[...])) <= ori(_totalSupply)" ], "after_preds": [ - "earnLowerlimit == 1000000000000000000000000" + "ori(Sum(_balances[...])) == ori(_totalSupply)" ] }, { "before_preds": [ - "feeMax > 0", - "feeMax == 1000" + "ori(userDepoistTime[msg.sender]) <= ori(Sum(userDepoistTime[...]))", + "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))", + "ori(userDepoistTime[msg.sender]) != ori(Sum(userDepoistTime[...]))" ], "after_preds": [ - "feeMax == 1000" + "ori(userDepoistTime[msg.sender]) < ori(Sum(userDepoistTime[...]))", + "ori(userDepoistTime[msg.sender]) != ori(Sum(userDepoistTime[...]))" ] }, { "before_preds": [ - "_decimals > 0", - "_decimals == 6" + "ori(_balances[msg.sender]) <= ori(_totalSupply)", + "ori(_balances[msg.sender]) < ori(_totalSupply)", + "ori(_balances[msg.sender]) != ori(_totalSupply)" ], "after_preds": [ - "_decimals == 6" + "ori(_balances[msg.sender]) != ori(_totalSupply)" ] }, { @@ -2741,7 +1256,7 @@ "Sum(_balances[...]) != ori(Sum(_balances[...]))" ], "after_preds": [ - "Sum(_balances[...]) < ori(Sum(_balances[...]))" + "Sum(_balances[...]) != ori(Sum(_balances[...]))" ] }, { @@ -2751,7 +1266,7 @@ "Sum(_balances[...]) != _balances[msg.sender]" ], "after_preds": [ - "Sum(_balances[...]) > _balances[msg.sender]" + "Sum(_balances[...]) != _balances[msg.sender]" ] }, { @@ -2771,7 +1286,7 @@ "Sum(_balances[...]) != ori(_balances[msg.sender])" ], "after_preds": [ - "Sum(_balances[...]) > ori(_balances[msg.sender])" + "Sum(_balances[...]) != ori(_balances[msg.sender])" ] }, { @@ -2781,27 +1296,7 @@ "Sum(_balances[...]) != ori(_totalSupply)" ], "after_preds": [ - "Sum(_balances[...]) < ori(_totalSupply)" - ] - }, - { - "before_preds": [ - "ori(feeMax) == feeMax", - "ori(feeMax) >= feeMax", - "ori(feeMax) <= feeMax" - ], - "after_preds": [ - "ori(feeMax) == feeMax" - ] - }, - { - "before_preds": [ - "ori(fee2) == fee2", - "ori(fee2) >= fee2", - "ori(fee2) <= fee2" - ], - "after_preds": [ - "ori(fee2) == fee2" + "Sum(_balances[...]) != ori(_totalSupply)" ] }, { @@ -2811,7 +1306,7 @@ "ori(Sum(_balances[...])) != _balances[msg.sender]" ], "after_preds": [ - "ori(Sum(_balances[...])) > _balances[msg.sender]" + "ori(Sum(_balances[...])) != _balances[msg.sender]" ] }, { @@ -2821,7 +1316,7 @@ "ori(Sum(_balances[...])) != _totalSupply" ], "after_preds": [ - "ori(Sum(_balances[...])) > _totalSupply" + "ori(Sum(_balances[...])) != _totalSupply" ] }, { @@ -2834,16 +1329,6 @@ "depositWithdrawInterval == ori(depositWithdrawInterval)" ] }, - { - "before_preds": [ - "ori(earnLowerlimit) == earnLowerlimit", - "ori(earnLowerlimit) >= earnLowerlimit", - "ori(earnLowerlimit) <= earnLowerlimit" - ], - "after_preds": [ - "ori(earnLowerlimit) == earnLowerlimit" - ] - }, { "before_preds": [ "min == ori(min)", @@ -2861,17 +1346,8 @@ "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])" ], "after_preds": [ - "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])" - ] - }, - { - "before_preds": [ - "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]", - "ori(userDepoistTime[msg.sender]) >= userDepoistTime[msg.sender]", - "ori(userDepoistTime[msg.sender]) <= userDepoistTime[msg.sender]" - ], - "after_preds": [ - "ori(userDepoistTime[msg.sender]) == userDepoistTime[msg.sender]" + "ori(userDepoistTime[msg.sender]) < Sum(userDepoistTime[...])", + "ori(userDepoistTime[msg.sender]) != Sum(userDepoistTime[...])" ] }, { @@ -2891,7 +1367,7 @@ "_balances[msg.sender] != _totalSupply" ], "after_preds": [ - "_balances[msg.sender] < _totalSupply" + "_balances[msg.sender] != _totalSupply" ] }, { @@ -2901,7 +1377,7 @@ "_balances[msg.sender] != ori(_balances[msg.sender])" ], "after_preds": [ - "_balances[msg.sender] < ori(_balances[msg.sender])" + "_balances[msg.sender] != ori(_balances[msg.sender])" ] }, { @@ -2911,7 +1387,7 @@ "_balances[msg.sender] != ori(_totalSupply)" ], "after_preds": [ - "_balances[msg.sender] < ori(_totalSupply)" + "_balances[msg.sender] != ori(_totalSupply)" ] }, { @@ -2921,7 +1397,8 @@ "_totalSupply != ori(_balances[msg.sender])" ], "after_preds": [ - "_totalSupply > ori(_balances[msg.sender])" + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" ] }, { @@ -2931,7 +1408,7 @@ "_totalSupply != ori(_totalSupply)" ], "after_preds": [ - "_totalSupply < ori(_totalSupply)" + "_totalSupply != ori(_totalSupply)" ] }, { @@ -2951,7 +1428,7 @@ "Sum(userDepoistTime[...]) != userDepoistTime[msg.sender]" ], "after_preds": [ - "Sum(userDepoistTime[...]) > userDepoistTime[msg.sender]" + "Sum(userDepoistTime[...]) != userDepoistTime[msg.sender]" ] }, { @@ -2981,61 +1458,7 @@ "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" ], "after_preds": [ - "ori(Sum(userDepoistTime[...])) > userDepoistTime[msg.sender]" - ] - }, - { - "before_preds": [ - "ori(feeMax) > 0", - "ori(feeMax) == 1000" - ], - "after_preds": [ - "ori(feeMax) == 1000" - ] - }, - { - "before_preds": [ - "ori(fee2) > 0", - "ori(fee2) == 3" - ], - "after_preds": [ - "ori(fee2) == 3" - ] - }, - { - "before_preds": [ - "ori(fee3) > 0", - "ori(fee3) == 1" - ], - "after_preds": [ - "ori(fee3) == 1" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "ori(depositWithdrawInterval) > 0", - "ori(depositWithdrawInterval) == 60" - ], - "after_preds": [ - "ori(depositWithdrawInterval) == 60" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 6" - ], - "after_preds": [ - "ori(_decimals) == 6" + "ori(Sum(userDepoistTime[...])) != userDepoistTime[msg.sender]" ] }, { @@ -3045,7 +1468,8 @@ "ori(feeMax) != ori(fee2)" ], "after_preds": [ - "ori(feeMax) > ori(fee2)" + "ori(feeMax) > ori(fee2)", + "ori(feeMax) != ori(fee2)" ] }, { @@ -3055,7 +1479,8 @@ "ori(feeMax) != ori(fee3)" ], "after_preds": [ - "ori(feeMax) > ori(fee3)" + "ori(feeMax) > ori(fee3)", + "ori(feeMax) != ori(fee3)" ] }, { @@ -3065,7 +1490,8 @@ "ori(feeMax) != ori(fee1)" ], "after_preds": [ - "ori(feeMax) > ori(fee1)" + "ori(feeMax) > ori(fee1)", + "ori(feeMax) != ori(fee1)" ] }, { @@ -3075,7 +1501,7 @@ "ori(fee2) != ori(fee3)" ], "after_preds": [ - "ori(fee2) > ori(fee3)" + "ori(fee2) != ori(fee3)" ] }, { @@ -3085,7 +1511,8 @@ "ori(fee2) != ori(fee1)" ], "after_preds": [ - "ori(fee2) < ori(fee1)" + "ori(fee2) < ori(fee1)", + "ori(fee2) != ori(fee1)" ] }, { @@ -3105,61 +1532,8 @@ "ori(fee3) != ori(fee1)" ], "after_preds": [ - "ori(fee3) < ori(fee1)" - ] - }, - { - "before_preds": [ - "depositWithdrawInterval > 0", - "depositWithdrawInterval == 60" - ], - "after_preds": [ - "depositWithdrawInterval == 60" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" - ] - }, - { - "before_preds": [ - "fee3 > 0", - "fee3 == 1" - ], - "after_preds": [ - "fee3 == 1" - ] - }, - { - "before_preds": [ - "fee2 > 0", - "fee2 == 3" - ], - "after_preds": [ - "fee2 == 3" - ] - }, - { - "before_preds": [ - "feeMax > 0", - "feeMax == 1000" - ], - "after_preds": [ - "feeMax == 1000" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 6" - ], - "after_preds": [ - "_decimals == 6" + "ori(fee3) < ori(fee1)", + "ori(fee3) != ori(fee1)" ] }, { @@ -3179,7 +1553,8 @@ "ori(feeMax) != fee3" ], "after_preds": [ - "ori(feeMax) > fee3" + "ori(feeMax) > fee3", + "ori(feeMax) != fee3" ] }, { @@ -3189,7 +1564,8 @@ "ori(feeMax) != fee2" ], "after_preds": [ - "ori(feeMax) > fee2" + "ori(feeMax) > fee2", + "ori(feeMax) != fee2" ] }, { @@ -3199,17 +1575,8 @@ "ori(feeMax) != fee1" ], "after_preds": [ - "ori(feeMax) > fee1" - ] - }, - { - "before_preds": [ - "ori(feeMax) == feeMax", - "ori(feeMax) >= feeMax", - "ori(feeMax) <= feeMax" - ], - "after_preds": [ - "ori(feeMax) == feeMax" + "ori(feeMax) > fee1", + "ori(feeMax) != fee1" ] }, { @@ -3219,17 +1586,7 @@ "ori(fee2) != fee3" ], "after_preds": [ - "ori(fee2) > fee3" - ] - }, - { - "before_preds": [ - "ori(fee2) == fee2", - "ori(fee2) >= fee2", - "ori(fee2) <= fee2" - ], - "after_preds": [ - "ori(fee2) == fee2" + "ori(fee2) != fee3" ] }, { @@ -3239,7 +1596,8 @@ "ori(fee2) != fee1" ], "after_preds": [ - "ori(fee2) < fee1" + "ori(fee2) < fee1", + "ori(fee2) != fee1" ] }, { @@ -3249,7 +1607,7 @@ "ori(fee2) != feeMax" ], "after_preds": [ - "ori(fee2) < feeMax" + "ori(fee2) != feeMax" ] }, { @@ -3259,7 +1617,7 @@ "ori(Sum(_balances[...])) != earnLowerlimit" ], "after_preds": [ - "ori(Sum(_balances[...])) < earnLowerlimit" + "ori(Sum(_balances[...])) != earnLowerlimit" ] }, { @@ -3282,16 +1640,6 @@ "min == ori(min)" ] }, - { - "before_preds": [ - "ori(fee3) == fee3", - "ori(fee3) >= fee3", - "ori(fee3) <= fee3" - ], - "after_preds": [ - "ori(fee3) == fee3" - ] - }, { "before_preds": [ "ori(fee3) <= fee2", @@ -3299,7 +1647,8 @@ "ori(fee3) != fee2" ], "after_preds": [ - "ori(fee3) < fee2" + "ori(fee3) < fee2", + "ori(fee3) != fee2" ] }, { @@ -3309,7 +1658,8 @@ "ori(fee3) != fee1" ], "after_preds": [ - "ori(fee3) < fee1" + "ori(fee3) < fee1", + "ori(fee3) != fee1" ] }, { @@ -3319,7 +1669,7 @@ "ori(fee3) != feeMax" ], "after_preds": [ - "ori(fee3) < feeMax" + "ori(fee3) != feeMax" ] }, { @@ -3329,7 +1679,8 @@ "fee3 != fee2" ], "after_preds": [ - "fee3 < fee2" + "fee3 < fee2", + "fee3 != fee2" ] }, { @@ -3339,7 +1690,8 @@ "fee3 != fee1" ], "after_preds": [ - "fee3 < fee1" + "fee3 < fee1", + "fee3 != fee1" ] }, { @@ -3349,7 +1701,7 @@ "fee3 != feeMax" ], "after_preds": [ - "fee3 < feeMax" + "fee3 != feeMax" ] }, { @@ -3359,7 +1711,8 @@ "fee3 != ori(fee1)" ], "after_preds": [ - "fee3 < ori(fee1)" + "fee3 < ori(fee1)", + "fee3 != ori(fee1)" ] }, { @@ -3369,7 +1722,8 @@ "fee2 != fee1" ], "after_preds": [ - "fee2 < fee1" + "fee2 < fee1", + "fee2 != fee1" ] }, { @@ -3379,7 +1733,7 @@ "fee2 != feeMax" ], "after_preds": [ - "fee2 < feeMax" + "fee2 != feeMax" ] }, { @@ -3389,7 +1743,8 @@ "fee2 != ori(fee1)" ], "after_preds": [ - "fee2 < ori(fee1)" + "fee2 < ori(fee1)", + "fee2 != ori(fee1)" ] }, { @@ -3399,7 +1754,7 @@ "fee1 != feeMax" ], "after_preds": [ - "fee1 < feeMax" + "fee1 != feeMax" ] }, { @@ -3409,7 +1764,8 @@ "earnLowerlimit != ori(_totalSupply)" ], "after_preds": [ - "earnLowerlimit > ori(_totalSupply)" + "earnLowerlimit > ori(_totalSupply)", + "earnLowerlimit != ori(_totalSupply)" ] }, { @@ -3419,7 +1775,8 @@ "feeMax != ori(fee1)" ], "after_preds": [ - "feeMax > ori(fee1)" + "feeMax > ori(fee1)", + "feeMax != ori(fee1)" ] }, { diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json index 37f22e4..ffd3c32 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x67b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a-removed.json @@ -1,42 +1,4 @@ [ - { - "before_preds": [ - "ori(decimals) > 0", - "ori(decimals) == 18" - ], - "after_preds": [ - "ori(decimals) == 18" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))", - "ori(_totalSupply) >= ori(Sum(_balances[...]))", - "ori(_totalSupply) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "decimals > 0", - "decimals == 18" - ], - "after_preds": [ - "decimals == 18" - ] - }, - { - "before_preds": [ - "ori(decimals) == decimals", - "ori(decimals) >= decimals", - "ori(decimals) <= decimals" - ], - "after_preds": [ - "ori(decimals) == decimals" - ] - }, { "before_preds": [ "ori(_totalSupply) <= _totalSupply", @@ -44,7 +6,8 @@ "ori(_totalSupply) != _totalSupply" ], "after_preds": [ - "ori(_totalSupply) < _totalSupply" + "ori(_totalSupply) < _totalSupply", + "ori(_totalSupply) != _totalSupply" ] }, { @@ -54,7 +17,8 @@ "ori(_totalSupply) != Sum(_balances[...])" ], "after_preds": [ - "ori(_totalSupply) < Sum(_balances[...])" + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" ] }, { @@ -64,7 +28,8 @@ "ori(reservePool) != _totalSupply" ], "after_preds": [ - "ori(reservePool) < _totalSupply" + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" ] }, { @@ -74,7 +39,8 @@ "ori(reservePool) != Sum(_balances[...])" ], "after_preds": [ - "ori(reservePool) < Sum(_balances[...])" + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" ] }, { @@ -94,7 +60,7 @@ "_totalSupply != reservePool" ], "after_preds": [ - "_totalSupply > reservePool" + "_totalSupply != reservePool" ] }, { @@ -104,7 +70,8 @@ "_totalSupply != ori(_balances[msg.sender])" ], "after_preds": [ - "_totalSupply > ori(_balances[msg.sender])" + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" ] }, { @@ -114,17 +81,8 @@ "_totalSupply != ori(Sum(_balances[...]))" ], "after_preds": [ - "_totalSupply > ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "_totalSupply == Sum(_balances[...])", - "_totalSupply >= Sum(_balances[...])", - "_totalSupply <= Sum(_balances[...])" - ], - "after_preds": [ - "_totalSupply == Sum(_balances[...])" + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" ] }, { @@ -134,7 +92,8 @@ "_totalSupply != _guardCounter" ], "after_preds": [ - "_totalSupply > _guardCounter" + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" ] }, { @@ -144,7 +103,8 @@ "_totalSupply != ori(_guardCounter)" ], "after_preds": [ - "_totalSupply > ori(_guardCounter)" + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" ] }, { @@ -154,7 +114,8 @@ "reservePool != Sum(_balances[...])" ], "after_preds": [ - "reservePool < Sum(_balances[...])" + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" ] }, { @@ -164,7 +125,8 @@ "ori(_balances[msg.sender]) != _balances[msg.sender]" ], "after_preds": [ - "ori(_balances[msg.sender]) < _balances[msg.sender]" + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" ] }, { @@ -174,7 +136,8 @@ "ori(_balances[msg.sender]) != Sum(_balances[...])" ], "after_preds": [ - "ori(_balances[msg.sender]) < Sum(_balances[...])" + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" ] }, { @@ -184,7 +147,8 @@ "ori(Sum(_balances[...])) != Sum(_balances[...])" ], "after_preds": [ - "ori(Sum(_balances[...])) < Sum(_balances[...])" + "ori(Sum(_balances[...])) < Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])" ] }, { @@ -194,7 +158,7 @@ "_balances[msg.sender] != _guardCounter" ], "after_preds": [ - "_balances[msg.sender] > _guardCounter" + "_balances[msg.sender] != _guardCounter" ] }, { @@ -204,7 +168,7 @@ "_balances[msg.sender] != ori(_guardCounter)" ], "after_preds": [ - "_balances[msg.sender] > ori(_guardCounter)" + "_balances[msg.sender] != ori(_guardCounter)" ] }, { @@ -214,7 +178,7 @@ "Sum(_balances[...]) != _guardCounter" ], "after_preds": [ - "Sum(_balances[...]) > _guardCounter" + "Sum(_balances[...]) != _guardCounter" ] }, { @@ -224,7 +188,7 @@ "Sum(_balances[...]) != ori(_guardCounter)" ], "after_preds": [ - "Sum(_balances[...]) > ori(_guardCounter)" + "Sum(_balances[...]) != ori(_guardCounter)" ] }, { @@ -244,209 +208,7 @@ "_guardCounter != ori(_guardCounter)" ], "after_preds": [ - "_guardCounter > ori(_guardCounter)" - ] - }, - { - "before_preds": [ - "ori(decimals) > 0", - "ori(decimals) == 18" - ], - "after_preds": [ - "ori(decimals) == 18" - ] - }, - { - "before_preds": [ - "ori(glbDebtVal) > 0", - "ori(glbDebtVal) == 14854681992016139228071" - ], - "after_preds": [ - "ori(glbDebtVal) == 14854681992016139228071" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) > 0", - "ori(_totalSupply) == 20424063187886226982599" - ], - "after_preds": [ - "ori(_totalSupply) == 20424063187886226982599" - ] - }, - { - "before_preds": [ - "ori(reservePool) > 0", - "ori(reservePool) == 148922433659474232" - ], - "after_preds": [ - "ori(reservePool) == 148922433659474232" - ] - }, - { - "before_preds": [ - "ori(lastAccrueTime) > 0", - "ori(lastAccrueTime) == 1602231144" - ], - "after_preds": [ - "ori(lastAccrueTime) == 1602231144" - ] - }, - { - "before_preds": [ - "ori(Sum(_balances[...])) > 0", - "ori(Sum(_balances[...])) == 20424063187886226982599" - ], - "after_preds": [ - "ori(Sum(_balances[...])) == 20424063187886226982599" - ] - }, - { - "before_preds": [ - "ori(nextPositionID) > 0", - "ori(nextPositionID) == 198" - ], - "after_preds": [ - "ori(nextPositionID) == 198" - ] - }, - { - "before_preds": [ - "ori(_guardCounter) > 0", - "ori(_guardCounter) == 376" - ], - "after_preds": [ - "ori(_guardCounter) == 376" - ] - }, - { - "before_preds": [ - "ori(glbDebtShare) > 0", - "ori(glbDebtShare) == 14846441340661167278357" - ], - "after_preds": [ - "ori(glbDebtShare) == 14846441340661167278357" - ] - }, - { - "before_preds": [ - "decimals > 0", - "decimals == 18" - ], - "after_preds": [ - "decimals == 18" - ] - }, - { - "before_preds": [ - "lastAccrueTime > 0", - "lastAccrueTime == 1602231144" - ], - "after_preds": [ - "lastAccrueTime == 1602231144" - ] - }, - { - "before_preds": [ - "glbDebtShare > 0", - "glbDebtShare == 14846441340661167278357" - ], - "after_preds": [ - "glbDebtShare == 14846441340661167278357" - ] - }, - { - "before_preds": [ - "_totalSupply > 0", - "_totalSupply == 20424063187886226982599" - ], - "after_preds": [ - "_totalSupply == 20424063187886226982599" - ] - }, - { - "before_preds": [ - "reservePool > 0", - "reservePool == 148922433659474232" - ], - "after_preds": [ - "reservePool == 148922433659474232" - ] - }, - { - "before_preds": [ - "Sum(_balances[...]) > 0", - "Sum(_balances[...]) == 20424063187886226982599" - ], - "after_preds": [ - "Sum(_balances[...]) == 20424063187886226982599" - ] - }, - { - "before_preds": [ - "nextPositionID > 0", - "nextPositionID == 198" - ], - "after_preds": [ - "nextPositionID == 198" - ] - }, - { - "before_preds": [ - "_guardCounter > 0", - "_guardCounter == 376" - ], - "after_preds": [ - "_guardCounter == 376" - ] - }, - { - "before_preds": [ - "glbDebtVal > 0", - "glbDebtVal == 14854681992016139228071" - ], - "after_preds": [ - "glbDebtVal == 14854681992016139228071" - ] - }, - { - "before_preds": [ - "ori(decimals) == decimals", - "ori(decimals) >= decimals", - "ori(decimals) <= decimals" - ], - "after_preds": [ - "ori(decimals) == decimals" - ] - }, - { - "before_preds": [ - "ori(glbDebtVal) == glbDebtVal", - "ori(glbDebtVal) >= glbDebtVal", - "ori(glbDebtVal) <= glbDebtVal" - ], - "after_preds": [ - "ori(glbDebtVal) == glbDebtVal" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) == _totalSupply", - "ori(_totalSupply) >= _totalSupply", - "ori(_totalSupply) <= _totalSupply" - ], - "after_preds": [ - "ori(_totalSupply) == _totalSupply" - ] - }, - { - "before_preds": [ - "ori(reservePool) == reservePool", - "ori(reservePool) >= reservePool", - "ori(reservePool) <= reservePool" - ], - "after_preds": [ - "ori(reservePool) == reservePool" + "_guardCounter != ori(_guardCounter)" ] }, { @@ -469,16 +231,6 @@ "glbDebtShare == ori(glbDebtShare)" ] }, - { - "before_preds": [ - "ori(Sum(_balances[...])) == Sum(_balances[...])", - "ori(Sum(_balances[...])) >= Sum(_balances[...])", - "ori(Sum(_balances[...])) <= Sum(_balances[...])" - ], - "after_preds": [ - "ori(Sum(_balances[...])) == Sum(_balances[...])" - ] - }, { "before_preds": [ "nextPositionID == ori(nextPositionID)", @@ -499,15 +251,6 @@ "_guardCounter == ori(_guardCounter)" ] }, - { - "before_preds": [ - "ori(decimals) > 0", - "ori(decimals) == 18" - ], - "after_preds": [ - "ori(decimals) == 18" - ] - }, { "before_preds": [ "ori(glbDebtVal) >= ori(reservePool)", @@ -515,7 +258,7 @@ "ori(glbDebtVal) != ori(reservePool)" ], "after_preds": [ - "ori(glbDebtVal) > ori(reservePool)" + "ori(glbDebtVal) != ori(reservePool)" ] }, { @@ -525,7 +268,8 @@ "ori(glbDebtVal) != ori(_balances[msg.sender])" ], "after_preds": [ - "ori(glbDebtVal) > ori(_balances[msg.sender])" + "ori(glbDebtVal) > ori(_balances[msg.sender])", + "ori(glbDebtVal) != ori(_balances[msg.sender])" ] }, { @@ -535,7 +279,8 @@ "ori(glbDebtVal) != ori(_guardCounter)" ], "after_preds": [ - "ori(glbDebtVal) > ori(_guardCounter)" + "ori(glbDebtVal) > ori(_guardCounter)", + "ori(glbDebtVal) != ori(_guardCounter)" ] }, { @@ -545,7 +290,7 @@ "ori(_totalSupply) != ori(reservePool)" ], "after_preds": [ - "ori(_totalSupply) > ori(reservePool)" + "ori(_totalSupply) != ori(reservePool)" ] }, { @@ -555,17 +300,8 @@ "ori(_totalSupply) != ori(_balances[msg.sender])" ], "after_preds": [ - "ori(_totalSupply) > ori(_balances[msg.sender])" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))", - "ori(_totalSupply) >= ori(Sum(_balances[...]))", - "ori(_totalSupply) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))" + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])" ] }, { @@ -575,7 +311,8 @@ "ori(_totalSupply) != ori(_guardCounter)" ], "after_preds": [ - "ori(_totalSupply) > ori(_guardCounter)" + "ori(_totalSupply) > ori(_guardCounter)", + "ori(_totalSupply) != ori(_guardCounter)" ] }, { @@ -585,7 +322,8 @@ "ori(reservePool) != ori(Sum(_balances[...]))" ], "after_preds": [ - "ori(reservePool) < ori(Sum(_balances[...]))" + "ori(reservePool) < ori(Sum(_balances[...]))", + "ori(reservePool) != ori(Sum(_balances[...]))" ] }, { @@ -595,7 +333,8 @@ "ori(reservePool) != ori(_guardCounter)" ], "after_preds": [ - "ori(reservePool) > ori(_guardCounter)" + "ori(reservePool) > ori(_guardCounter)", + "ori(reservePool) != ori(_guardCounter)" ] }, { @@ -605,7 +344,8 @@ "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" ], "after_preds": [ - "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))" + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" ] }, { @@ -615,7 +355,7 @@ "ori(_balances[msg.sender]) != ori(_guardCounter)" ], "after_preds": [ - "ori(_balances[msg.sender]) > ori(_guardCounter)" + "ori(_balances[msg.sender]) != ori(_guardCounter)" ] }, { @@ -625,26 +365,7 @@ "ori(Sum(_balances[...])) != ori(_guardCounter)" ], "after_preds": [ - "ori(Sum(_balances[...])) > ori(_guardCounter)" - ] - }, - { - "before_preds": [ - "decimals > 0", - "decimals == 18" - ], - "after_preds": [ - "decimals == 18" - ] - }, - { - "before_preds": [ - "ori(decimals) == decimals", - "ori(decimals) >= decimals", - "ori(decimals) <= decimals" - ], - "after_preds": [ - "ori(decimals) == decimals" + "ori(Sum(_balances[...])) != ori(_guardCounter)" ] }, { @@ -654,7 +375,7 @@ "ori(glbDebtVal) != reservePool" ], "after_preds": [ - "ori(glbDebtVal) > reservePool" + "ori(glbDebtVal) != reservePool" ] }, { @@ -664,7 +385,8 @@ "ori(glbDebtVal) != _balances[msg.sender]" ], "after_preds": [ - "ori(glbDebtVal) > _balances[msg.sender]" + "ori(glbDebtVal) > _balances[msg.sender]", + "ori(glbDebtVal) != _balances[msg.sender]" ] }, { @@ -674,7 +396,8 @@ "ori(glbDebtVal) != _guardCounter" ], "after_preds": [ - "ori(glbDebtVal) > _guardCounter" + "ori(glbDebtVal) > _guardCounter", + "ori(glbDebtVal) != _guardCounter" ] }, { @@ -684,7 +407,8 @@ "ori(glbDebtVal) != glbDebtVal" ], "after_preds": [ - "ori(glbDebtVal) < glbDebtVal" + "ori(glbDebtVal) < glbDebtVal", + "ori(glbDebtVal) != glbDebtVal" ] }, { @@ -694,7 +418,8 @@ "ori(_totalSupply) != _totalSupply" ], "after_preds": [ - "ori(_totalSupply) > _totalSupply" + "ori(_totalSupply) > _totalSupply", + "ori(_totalSupply) != _totalSupply" ] }, { @@ -704,7 +429,7 @@ "ori(_totalSupply) != reservePool" ], "after_preds": [ - "ori(_totalSupply) > reservePool" + "ori(_totalSupply) != reservePool" ] }, { @@ -714,7 +439,8 @@ "ori(_totalSupply) != _balances[msg.sender]" ], "after_preds": [ - "ori(_totalSupply) > _balances[msg.sender]" + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" ] }, { @@ -724,7 +450,8 @@ "ori(_totalSupply) != Sum(_balances[...])" ], "after_preds": [ - "ori(_totalSupply) > Sum(_balances[...])" + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" ] }, { @@ -734,7 +461,8 @@ "ori(_totalSupply) != _guardCounter" ], "after_preds": [ - "ori(_totalSupply) > _guardCounter" + "ori(_totalSupply) > _guardCounter", + "ori(_totalSupply) != _guardCounter" ] }, { @@ -744,7 +472,8 @@ "ori(reservePool) != _totalSupply" ], "after_preds": [ - "ori(reservePool) < _totalSupply" + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" ] }, { @@ -754,7 +483,8 @@ "ori(reservePool) != reservePool" ], "after_preds": [ - "ori(reservePool) < reservePool" + "ori(reservePool) < reservePool", + "ori(reservePool) != reservePool" ] }, { @@ -764,7 +494,8 @@ "ori(reservePool) != Sum(_balances[...])" ], "after_preds": [ - "ori(reservePool) < Sum(_balances[...])" + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" ] }, { @@ -774,7 +505,8 @@ "ori(reservePool) != _guardCounter" ], "after_preds": [ - "ori(reservePool) > _guardCounter" + "ori(reservePool) > _guardCounter", + "ori(reservePool) != _guardCounter" ] }, { @@ -784,7 +516,8 @@ "ori(reservePool) != glbDebtVal" ], "after_preds": [ - "ori(reservePool) < glbDebtVal" + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal" ] }, { @@ -794,7 +527,7 @@ "lastAccrueTime != ori(lastAccrueTime)" ], "after_preds": [ - "lastAccrueTime > ori(lastAccrueTime)" + "lastAccrueTime != ori(lastAccrueTime)" ] }, { @@ -814,7 +547,7 @@ "_totalSupply != reservePool" ], "after_preds": [ - "_totalSupply > reservePool" + "_totalSupply != reservePool" ] }, { @@ -824,7 +557,8 @@ "_totalSupply != ori(_balances[msg.sender])" ], "after_preds": [ - "_totalSupply > ori(_balances[msg.sender])" + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" ] }, { @@ -834,7 +568,8 @@ "_totalSupply != ori(Sum(_balances[...]))" ], "after_preds": [ - "_totalSupply < ori(Sum(_balances[...]))" + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" ] }, { @@ -844,17 +579,8 @@ "_totalSupply != _balances[msg.sender]" ], "after_preds": [ - "_totalSupply > _balances[msg.sender]" - ] - }, - { - "before_preds": [ - "_totalSupply == Sum(_balances[...])", - "_totalSupply >= Sum(_balances[...])", - "_totalSupply <= Sum(_balances[...])" - ], - "after_preds": [ - "_totalSupply == Sum(_balances[...])" + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" ] }, { @@ -864,7 +590,8 @@ "_totalSupply != _guardCounter" ], "after_preds": [ - "_totalSupply > _guardCounter" + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" ] }, { @@ -874,7 +601,8 @@ "_totalSupply != ori(_guardCounter)" ], "after_preds": [ - "_totalSupply > ori(_guardCounter)" + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" ] }, { @@ -884,7 +612,8 @@ "reservePool != ori(Sum(_balances[...]))" ], "after_preds": [ - "reservePool < ori(Sum(_balances[...]))" + "reservePool < ori(Sum(_balances[...]))", + "reservePool != ori(Sum(_balances[...]))" ] }, { @@ -894,7 +623,8 @@ "reservePool != Sum(_balances[...])" ], "after_preds": [ - "reservePool < Sum(_balances[...])" + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" ] }, { @@ -904,7 +634,8 @@ "reservePool != _guardCounter" ], "after_preds": [ - "reservePool > _guardCounter" + "reservePool > _guardCounter", + "reservePool != _guardCounter" ] }, { @@ -914,7 +645,8 @@ "reservePool != ori(_guardCounter)" ], "after_preds": [ - "reservePool > ori(_guardCounter)" + "reservePool > ori(_guardCounter)", + "reservePool != ori(_guardCounter)" ] }, { @@ -924,7 +656,8 @@ "reservePool != glbDebtVal" ], "after_preds": [ - "reservePool < glbDebtVal" + "reservePool < glbDebtVal", + "reservePool != glbDebtVal" ] }, { @@ -934,7 +667,8 @@ "ori(_balances[msg.sender]) != _balances[msg.sender]" ], "after_preds": [ - "ori(_balances[msg.sender]) > _balances[msg.sender]" + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" ] }, { @@ -944,7 +678,8 @@ "ori(_balances[msg.sender]) != Sum(_balances[...])" ], "after_preds": [ - "ori(_balances[msg.sender]) < Sum(_balances[...])" + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" ] }, { @@ -954,7 +689,7 @@ "ori(_balances[msg.sender]) != _guardCounter" ], "after_preds": [ - "ori(_balances[msg.sender]) > _guardCounter" + "ori(_balances[msg.sender]) != _guardCounter" ] }, { @@ -964,7 +699,7 @@ "ori(_balances[msg.sender]) != glbDebtVal" ], "after_preds": [ - "ori(_balances[msg.sender]) < glbDebtVal" + "ori(_balances[msg.sender]) != glbDebtVal" ] }, { @@ -974,7 +709,7 @@ "ori(Sum(_balances[...])) != _balances[msg.sender]" ], "after_preds": [ - "ori(Sum(_balances[...])) > _balances[msg.sender]" + "ori(Sum(_balances[...])) != _balances[msg.sender]" ] }, { @@ -984,7 +719,8 @@ "ori(Sum(_balances[...])) != Sum(_balances[...])" ], "after_preds": [ - "ori(Sum(_balances[...])) > Sum(_balances[...])" + "ori(Sum(_balances[...])) > Sum(_balances[...])", + "ori(Sum(_balances[...])) != Sum(_balances[...])" ] }, { @@ -994,7 +730,7 @@ "ori(Sum(_balances[...])) != _guardCounter" ], "after_preds": [ - "ori(Sum(_balances[...])) > _guardCounter" + "ori(Sum(_balances[...])) != _guardCounter" ] }, { @@ -1004,7 +740,8 @@ "_balances[msg.sender] != Sum(_balances[...])" ], "after_preds": [ - "_balances[msg.sender] < Sum(_balances[...])" + "_balances[msg.sender] < Sum(_balances[...])", + "_balances[msg.sender] != Sum(_balances[...])" ] }, { @@ -1014,7 +751,7 @@ "_balances[msg.sender] != glbDebtVal" ], "after_preds": [ - "_balances[msg.sender] < glbDebtVal" + "_balances[msg.sender] != glbDebtVal" ] }, { @@ -1024,7 +761,7 @@ "Sum(_balances[...]) != _guardCounter" ], "after_preds": [ - "Sum(_balances[...]) > _guardCounter" + "Sum(_balances[...]) != _guardCounter" ] }, { @@ -1034,7 +771,7 @@ "Sum(_balances[...]) != ori(_guardCounter)" ], "after_preds": [ - "Sum(_balances[...]) > ori(_guardCounter)" + "Sum(_balances[...]) != ori(_guardCounter)" ] }, { @@ -1054,7 +791,7 @@ "_guardCounter != ori(_guardCounter)" ], "after_preds": [ - "_guardCounter > ori(_guardCounter)" + "_guardCounter != ori(_guardCounter)" ] }, { @@ -1064,7 +801,7 @@ "_guardCounter != glbDebtVal" ], "after_preds": [ - "_guardCounter < glbDebtVal" + "_guardCounter != glbDebtVal" ] }, { @@ -1074,16 +811,7 @@ "ori(_guardCounter) != glbDebtVal" ], "after_preds": [ - "ori(_guardCounter) < glbDebtVal" - ] - }, - { - "before_preds": [ - "ori(decimals) > 0", - "ori(decimals) == 18" - ], - "after_preds": [ - "ori(decimals) == 18" + "ori(_guardCounter) != glbDebtVal" ] }, { @@ -1093,7 +821,7 @@ "id != ori(nextPositionID)" ], "after_preds": [ - "id < ori(nextPositionID)" + "id != ori(nextPositionID)" ] }, { @@ -1103,7 +831,8 @@ "id != ori(_guardCounter)" ], "after_preds": [ - "id < ori(_guardCounter)" + "id < ori(_guardCounter)", + "id != ori(_guardCounter)" ] }, { @@ -1113,36 +842,8 @@ "ori(nextPositionID) != ori(_guardCounter)" ], "after_preds": [ - "ori(nextPositionID) < ori(_guardCounter)" - ] - }, - { - "before_preds": [ - "decimals > 0", - "decimals == 18" - ], - "after_preds": [ - "decimals == 18" - ] - }, - { - "before_preds": [ - "ori(decimals) == decimals", - "ori(decimals) >= decimals", - "ori(decimals) <= decimals" - ], - "after_preds": [ - "ori(decimals) == decimals" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) == _totalSupply", - "ori(_totalSupply) >= _totalSupply", - "ori(_totalSupply) <= _totalSupply" - ], - "after_preds": [ - "ori(_totalSupply) == _totalSupply" + "ori(nextPositionID) < ori(_guardCounter)", + "ori(nextPositionID) != ori(_guardCounter)" ] }, { @@ -1152,7 +853,8 @@ "ori(reservePool) != glbDebtShare" ], "after_preds": [ - "ori(reservePool) < glbDebtShare" + "ori(reservePool) < glbDebtShare", + "ori(reservePool) != glbDebtShare" ] }, { @@ -1162,7 +864,8 @@ "ori(reservePool) != glbDebtVal" ], "after_preds": [ - "ori(reservePool) < glbDebtVal" + "ori(reservePool) < glbDebtVal", + "ori(reservePool) != glbDebtVal" ] }, { @@ -1172,7 +875,8 @@ "id != glbDebtShare" ], "after_preds": [ - "id < glbDebtShare" + "id < glbDebtShare", + "id != glbDebtShare" ] }, { @@ -1182,7 +886,7 @@ "id != nextPositionID" ], "after_preds": [ - "id < nextPositionID" + "id != nextPositionID" ] }, { @@ -1192,7 +896,8 @@ "id != _guardCounter" ], "after_preds": [ - "id < _guardCounter" + "id < _guardCounter", + "id != _guardCounter" ] }, { @@ -1202,7 +907,8 @@ "id != glbDebtVal" ], "after_preds": [ - "id < glbDebtVal" + "id < glbDebtVal", + "id != glbDebtVal" ] }, { @@ -1212,7 +918,7 @@ "glbDebtShare != reservePool" ], "after_preds": [ - "glbDebtShare > reservePool" + "glbDebtShare != reservePool" ] }, { @@ -1222,7 +928,7 @@ "glbDebtShare != nextPositionID" ], "after_preds": [ - "glbDebtShare > nextPositionID" + "glbDebtShare != nextPositionID" ] }, { @@ -1232,7 +938,8 @@ "glbDebtShare != _guardCounter" ], "after_preds": [ - "glbDebtShare > _guardCounter" + "glbDebtShare > _guardCounter", + "glbDebtShare != _guardCounter" ] }, { @@ -1242,7 +949,7 @@ "glbDebtShare != ori(nextPositionID)" ], "after_preds": [ - "glbDebtShare > ori(nextPositionID)" + "glbDebtShare != ori(nextPositionID)" ] }, { @@ -1252,7 +959,8 @@ "glbDebtShare != ori(_guardCounter)" ], "after_preds": [ - "glbDebtShare > ori(_guardCounter)" + "glbDebtShare > ori(_guardCounter)", + "glbDebtShare != ori(_guardCounter)" ] }, { @@ -1262,17 +970,8 @@ "reservePool != glbDebtVal" ], "after_preds": [ - "reservePool < glbDebtVal" - ] - }, - { - "before_preds": [ - "ori(Sum(_balances[...])) == Sum(_balances[...])", - "ori(Sum(_balances[...])) >= Sum(_balances[...])", - "ori(Sum(_balances[...])) <= Sum(_balances[...])" - ], - "after_preds": [ - "ori(Sum(_balances[...])) == Sum(_balances[...])" + "reservePool < glbDebtVal", + "reservePool != glbDebtVal" ] }, { @@ -1282,7 +981,8 @@ "nextPositionID != _guardCounter" ], "after_preds": [ - "nextPositionID < _guardCounter" + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter" ] }, { @@ -1292,7 +992,8 @@ "nextPositionID != glbDebtVal" ], "after_preds": [ - "nextPositionID < glbDebtVal" + "nextPositionID < glbDebtVal", + "nextPositionID != glbDebtVal" ] }, { @@ -1302,7 +1003,7 @@ "_guardCounter != ori(nextPositionID)" ], "after_preds": [ - "_guardCounter > ori(nextPositionID)" + "_guardCounter != ori(nextPositionID)" ] }, { @@ -1312,7 +1013,7 @@ "_guardCounter != ori(_guardCounter)" ], "after_preds": [ - "_guardCounter > ori(_guardCounter)" + "_guardCounter != ori(_guardCounter)" ] }, { @@ -1322,7 +1023,7 @@ "_guardCounter != glbDebtVal" ], "after_preds": [ - "_guardCounter < glbDebtVal" + "_guardCounter != glbDebtVal" ] }, { @@ -1332,7 +1033,8 @@ "ori(nextPositionID) != glbDebtVal" ], "after_preds": [ - "ori(nextPositionID) < glbDebtVal" + "ori(nextPositionID) < glbDebtVal", + "ori(nextPositionID) != glbDebtVal" ] }, { @@ -1342,45 +1044,7 @@ "ori(_guardCounter) != glbDebtVal" ], "after_preds": [ - "ori(_guardCounter) < glbDebtVal" - ] - }, - { - "before_preds": [ - "ori(decimals) > 0", - "ori(decimals) == 18" - ], - "after_preds": [ - "ori(decimals) == 18" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))", - "ori(_totalSupply) >= ori(Sum(_balances[...]))", - "ori(_totalSupply) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "decimals > 0", - "decimals == 18" - ], - "after_preds": [ - "decimals == 18" - ] - }, - { - "before_preds": [ - "ori(decimals) == decimals", - "ori(decimals) >= decimals", - "ori(decimals) <= decimals" - ], - "after_preds": [ - "ori(decimals) == decimals" + "ori(_guardCounter) != glbDebtVal" ] }, { @@ -1390,7 +1054,8 @@ "ori(reservePool) != _totalSupply" ], "after_preds": [ - "ori(reservePool) < _totalSupply" + "ori(reservePool) < _totalSupply", + "ori(reservePool) != _totalSupply" ] }, { @@ -1400,7 +1065,8 @@ "ori(reservePool) != Sum(_balances[...])" ], "after_preds": [ - "ori(reservePool) < Sum(_balances[...])" + "ori(reservePool) < Sum(_balances[...])", + "ori(reservePool) != Sum(_balances[...])" ] }, { @@ -1410,17 +1076,7 @@ "_totalSupply != reservePool" ], "after_preds": [ - "_totalSupply > reservePool" - ] - }, - { - "before_preds": [ - "_totalSupply == Sum(_balances[...])", - "_totalSupply >= Sum(_balances[...])", - "_totalSupply <= Sum(_balances[...])" - ], - "after_preds": [ - "_totalSupply == Sum(_balances[...])" + "_totalSupply != reservePool" ] }, { @@ -1430,7 +1086,8 @@ "_totalSupply != _guardCounter" ], "after_preds": [ - "_totalSupply > _guardCounter" + "_totalSupply > _guardCounter", + "_totalSupply != _guardCounter" ] }, { @@ -1440,7 +1097,8 @@ "_totalSupply != ori(_guardCounter)" ], "after_preds": [ - "_totalSupply > ori(_guardCounter)" + "_totalSupply > ori(_guardCounter)", + "_totalSupply != ori(_guardCounter)" ] }, { @@ -1450,7 +1108,8 @@ "reservePool != Sum(_balances[...])" ], "after_preds": [ - "reservePool < Sum(_balances[...])" + "reservePool < Sum(_balances[...])", + "reservePool != Sum(_balances[...])" ] }, { @@ -1460,7 +1119,7 @@ "Sum(_balances[...]) != _guardCounter" ], "after_preds": [ - "Sum(_balances[...]) > _guardCounter" + "Sum(_balances[...]) != _guardCounter" ] }, { @@ -1470,7 +1129,7 @@ "Sum(_balances[...]) != ori(_guardCounter)" ], "after_preds": [ - "Sum(_balances[...]) > ori(_guardCounter)" + "Sum(_balances[...]) != ori(_guardCounter)" ] }, { @@ -1480,7 +1139,8 @@ "nextPositionID != _guardCounter" ], "after_preds": [ - "nextPositionID < _guardCounter" + "nextPositionID < _guardCounter", + "nextPositionID != _guardCounter" ] }, { @@ -1490,7 +1150,7 @@ "_guardCounter != ori(nextPositionID)" ], "after_preds": [ - "_guardCounter > ori(nextPositionID)" + "_guardCounter != ori(nextPositionID)" ] } ] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json index 1f15e27..a5b82eb 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6847259b2b3a4c17e7c43c54409810af48ba5210-removed.json @@ -1,40 +1,4 @@ [ - { - "before_preds": [ - "ori(split) > 0", - "ori(split) == 500" - ], - "after_preds": [ - "ori(split) == 500" - ] - }, - { - "before_preds": [ - "ori(convenienceFee) > 0", - "ori(convenienceFee) == 100" - ], - "after_preds": [ - "ori(convenienceFee) == 100" - ] - }, - { - "before_preds": [ - "split > 0", - "split == 500" - ], - "after_preds": [ - "split == 500" - ] - }, - { - "before_preds": [ - "convenienceFee > 0", - "convenienceFee == 100" - ], - "after_preds": [ - "convenienceFee == 100" - ] - }, { "before_preds": [ "split == ori(split)", @@ -45,52 +9,6 @@ "split == ori(split)" ] }, - { - "before_preds": [ - "ori(convenienceFee) == convenienceFee", - "ori(convenienceFee) >= convenienceFee", - "ori(convenienceFee) <= convenienceFee" - ], - "after_preds": [ - "ori(convenienceFee) == convenienceFee" - ] - }, - { - "before_preds": [ - "ori(split) > 0", - "ori(split) == 500" - ], - "after_preds": [ - "ori(split) == 500" - ] - }, - { - "before_preds": [ - "ori(convenienceFee) > 0", - "ori(convenienceFee) == 100" - ], - "after_preds": [ - "ori(convenienceFee) == 100" - ] - }, - { - "before_preds": [ - "split > 0", - "split == 500" - ], - "after_preds": [ - "split == 500" - ] - }, - { - "before_preds": [ - "convenienceFee > 0", - "convenienceFee == 100" - ], - "after_preds": [ - "convenienceFee == 100" - ] - }, { "before_preds": [ "split == ori(split)", @@ -101,52 +19,6 @@ "split == ori(split)" ] }, - { - "before_preds": [ - "ori(convenienceFee) == convenienceFee", - "ori(convenienceFee) >= convenienceFee", - "ori(convenienceFee) <= convenienceFee" - ], - "after_preds": [ - "ori(convenienceFee) == convenienceFee" - ] - }, - { - "before_preds": [ - "ori(split) > 0", - "ori(split) == 500" - ], - "after_preds": [ - "ori(split) == 500" - ] - }, - { - "before_preds": [ - "ori(convenienceFee) > 0", - "ori(convenienceFee) == 100" - ], - "after_preds": [ - "ori(convenienceFee) == 100" - ] - }, - { - "before_preds": [ - "split > 0", - "split == 500" - ], - "after_preds": [ - "split == 500" - ] - }, - { - "before_preds": [ - "convenienceFee > 0", - "convenienceFee == 100" - ], - "after_preds": [ - "convenienceFee == 100" - ] - }, { "before_preds": [ "split == ori(split)", @@ -157,52 +29,6 @@ "split == ori(split)" ] }, - { - "before_preds": [ - "ori(convenienceFee) == convenienceFee", - "ori(convenienceFee) >= convenienceFee", - "ori(convenienceFee) <= convenienceFee" - ], - "after_preds": [ - "ori(convenienceFee) == convenienceFee" - ] - }, - { - "before_preds": [ - "ori(split) > 0", - "ori(split) == 500" - ], - "after_preds": [ - "ori(split) == 500" - ] - }, - { - "before_preds": [ - "ori(convenienceFee) > 0", - "ori(convenienceFee) == 100" - ], - "after_preds": [ - "ori(convenienceFee) == 100" - ] - }, - { - "before_preds": [ - "split > 0", - "split == 500" - ], - "after_preds": [ - "split == 500" - ] - }, - { - "before_preds": [ - "convenienceFee > 0", - "convenienceFee == 100" - ], - "after_preds": [ - "convenienceFee == 100" - ] - }, { "before_preds": [ "split == ori(split)", @@ -213,52 +39,6 @@ "split == ori(split)" ] }, - { - "before_preds": [ - "ori(convenienceFee) == convenienceFee", - "ori(convenienceFee) >= convenienceFee", - "ori(convenienceFee) <= convenienceFee" - ], - "after_preds": [ - "ori(convenienceFee) == convenienceFee" - ] - }, - { - "before_preds": [ - "ori(split) > 0", - "ori(split) == 500" - ], - "after_preds": [ - "ori(split) == 500" - ] - }, - { - "before_preds": [ - "ori(convenienceFee) > 0", - "ori(convenienceFee) == 100" - ], - "after_preds": [ - "ori(convenienceFee) == 100" - ] - }, - { - "before_preds": [ - "split > 0", - "split == 500" - ], - "after_preds": [ - "split == 500" - ] - }, - { - "before_preds": [ - "convenienceFee > 0", - "convenienceFee == 100" - ], - "after_preds": [ - "convenienceFee == 100" - ] - }, { "before_preds": [ "split == ori(split)", @@ -269,52 +49,6 @@ "split == ori(split)" ] }, - { - "before_preds": [ - "ori(convenienceFee) == convenienceFee", - "ori(convenienceFee) >= convenienceFee", - "ori(convenienceFee) <= convenienceFee" - ], - "after_preds": [ - "ori(convenienceFee) == convenienceFee" - ] - }, - { - "before_preds": [ - "ori(split) > 0", - "ori(split) == 500" - ], - "after_preds": [ - "ori(split) == 500" - ] - }, - { - "before_preds": [ - "ori(convenienceFee) > 0", - "ori(convenienceFee) == 100" - ], - "after_preds": [ - "ori(convenienceFee) == 100" - ] - }, - { - "before_preds": [ - "split > 0", - "split == 500" - ], - "after_preds": [ - "split == 500" - ] - }, - { - "before_preds": [ - "convenienceFee > 0", - "convenienceFee == 100" - ], - "after_preds": [ - "convenienceFee == 100" - ] - }, { "before_preds": [ "split == ori(split)", @@ -325,52 +59,6 @@ "split == ori(split)" ] }, - { - "before_preds": [ - "ori(convenienceFee) == convenienceFee", - "ori(convenienceFee) >= convenienceFee", - "ori(convenienceFee) <= convenienceFee" - ], - "after_preds": [ - "ori(convenienceFee) == convenienceFee" - ] - }, - { - "before_preds": [ - "ori(split) > 0", - "ori(split) == 500" - ], - "after_preds": [ - "ori(split) == 500" - ] - }, - { - "before_preds": [ - "ori(convenienceFee) > 0", - "ori(convenienceFee) == 100" - ], - "after_preds": [ - "ori(convenienceFee) == 100" - ] - }, - { - "before_preds": [ - "split > 0", - "split == 500" - ], - "after_preds": [ - "split == 500" - ] - }, - { - "before_preds": [ - "convenienceFee > 0", - "convenienceFee == 100" - ], - "after_preds": [ - "convenienceFee == 100" - ] - }, { "before_preds": [ "split == ori(split)", @@ -380,15 +68,5 @@ "after_preds": [ "split == ori(split)" ] - }, - { - "before_preds": [ - "ori(convenienceFee) == convenienceFee", - "ori(convenienceFee) >= convenienceFee", - "ori(convenienceFee) <= convenienceFee" - ], - "after_preds": [ - "ori(convenienceFee) == convenienceFee" - ] } ] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json index daca6e9..6852d59 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x6b7a87899490ece95443e979ca9485cbe7e71522-removed.json @@ -1,22 +1,4 @@ [ - { - "before_preds": [ - "ori(_newMPCEffectiveTime) > 0", - "ori(_newMPCEffectiveTime) == 1624013046" - ], - "after_preds": [ - "ori(_newMPCEffectiveTime) == 1624013046" - ] - }, - { - "before_preds": [ - "_newMPCEffectiveTime > 0", - "_newMPCEffectiveTime == 1624013046" - ], - "after_preds": [ - "_newMPCEffectiveTime == 1624013046" - ] - }, { "before_preds": [ "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", @@ -27,42 +9,6 @@ "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)" ] }, - { - "before_preds": [ - "toChainID > 0", - "toChainID == 56" - ], - "after_preds": [ - "toChainID == 56" - ] - }, - { - "before_preds": [ - "amount > 0", - "amount == 390000000000" - ], - "after_preds": [ - "amount == 390000000000" - ] - }, - { - "before_preds": [ - "ori(_newMPCEffectiveTime) > 0", - "ori(_newMPCEffectiveTime) == 1624013046" - ], - "after_preds": [ - "ori(_newMPCEffectiveTime) == 1624013046" - ] - }, - { - "before_preds": [ - "_newMPCEffectiveTime > 0", - "_newMPCEffectiveTime == 1624013046" - ], - "after_preds": [ - "_newMPCEffectiveTime == 1624013046" - ] - }, { "before_preds": [ "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", @@ -73,24 +19,6 @@ "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)" ] }, - { - "before_preds": [ - "ori(_newMPCEffectiveTime) > 0", - "ori(_newMPCEffectiveTime) == 1624013046" - ], - "after_preds": [ - "ori(_newMPCEffectiveTime) == 1624013046" - ] - }, - { - "before_preds": [ - "_newMPCEffectiveTime > 0", - "_newMPCEffectiveTime == 1624013046" - ], - "after_preds": [ - "_newMPCEffectiveTime == 1624013046" - ] - }, { "before_preds": [ "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", @@ -101,24 +29,6 @@ "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)" ] }, - { - "before_preds": [ - "ori(_newMPCEffectiveTime) > 0", - "ori(_newMPCEffectiveTime) == 1624013046" - ], - "after_preds": [ - "ori(_newMPCEffectiveTime) == 1624013046" - ] - }, - { - "before_preds": [ - "_newMPCEffectiveTime > 0", - "_newMPCEffectiveTime == 1624013046" - ], - "after_preds": [ - "_newMPCEffectiveTime == 1624013046" - ] - }, { "before_preds": [ "_newMPCEffectiveTime == ori(_newMPCEffectiveTime)", diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x818e6fecd516ecc3849daf6845e3ec868087b755-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x818e6fecd516ecc3849daf6845e3ec868087b755-removed.json deleted file mode 100644 index e4f9747..0000000 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x818e6fecd516ecc3849daf6845e3ec868087b755-removed.json +++ /dev/null @@ -1,69 +0,0 @@ -[ - { - "before_preds": [ - "ori(Sum(decimals[...])) > 0", - "ori(Sum(decimals[...])) == 81" - ], - "after_preds": [ - "ori(Sum(decimals[...])) == 81" - ] - }, - { - "before_preds": [ - "amount > 0", - "amount == 40963957051" - ], - "after_preds": [ - "amount == 40963957051" - ] - }, - { - "before_preds": [ - "Sum(decimals[...]) > 0", - "Sum(decimals[...]) == 81" - ], - "after_preds": [ - "Sum(decimals[...]) == 81" - ] - }, - { - "before_preds": [ - "ori(Sum(decimals[...])) == Sum(decimals[...])", - "ori(Sum(decimals[...])) >= Sum(decimals[...])", - "ori(Sum(decimals[...])) <= Sum(decimals[...])" - ], - "after_preds": [ - "ori(Sum(decimals[...])) == Sum(decimals[...])" - ] - }, - { - "before_preds": [ - "ori(Sum(decimals[...])) == Sum(decimals[...])", - "ori(Sum(decimals[...])) >= Sum(decimals[...])", - "ori(Sum(decimals[...])) <= Sum(decimals[...])" - ], - "after_preds": [ - "ori(Sum(decimals[...])) == Sum(decimals[...])" - ] - }, - { - "before_preds": [ - "ori(Sum(decimals[...])) == Sum(decimals[...])", - "ori(Sum(decimals[...])) >= Sum(decimals[...])", - "ori(Sum(decimals[...])) <= Sum(decimals[...])" - ], - "after_preds": [ - "ori(Sum(decimals[...])) == Sum(decimals[...])" - ] - }, - { - "before_preds": [ - "ori(Sum(decimals[...])) == Sum(decimals[...])", - "ori(Sum(decimals[...])) >= Sum(decimals[...])", - "ori(Sum(decimals[...])) <= Sum(decimals[...])" - ], - "after_preds": [ - "ori(Sum(decimals[...])) == Sum(decimals[...])" - ] - } -] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json index 5f210ab..67e16fd 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0x88093840aad42d2621e1a452bf5d7076ff804d61-removed.json @@ -1,31 +1,4 @@ [ - { - "before_preds": [ - "ori(_totalSupply) > 0", - "ori(_totalSupply) == 60000000000000" - ], - "after_preds": [ - "ori(_totalSupply) == 60000000000000" - ] - }, - { - "before_preds": [ - "ori(Sum(_gonBalances[...])) > 0", - "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" - ], - "after_preds": [ - "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" - ] - }, - { - "before_preds": [ - "ori(_gonsPerFragment) > 0", - "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" - ], - "after_preds": [ - "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" - ] - }, { "before_preds": [ "ori(Sum(_allowedFragments[msg.sender][...])) == ori(_allowedFragments[msg.sender][spender])", @@ -43,7 +16,7 @@ "ori(Sum(_allowedFragments[msg.sender][...])) != value" ], "after_preds": [ - "ori(Sum(_allowedFragments[msg.sender][...])) < value" + "ori(Sum(_allowedFragments[msg.sender][...])) != value" ] }, { @@ -53,34 +26,7 @@ "ori(_allowedFragments[msg.sender][spender]) != value" ], "after_preds": [ - "ori(_allowedFragments[msg.sender][spender]) < value" - ] - }, - { - "before_preds": [ - "_totalSupply > 0", - "_totalSupply == 60000000000000" - ], - "after_preds": [ - "_totalSupply == 60000000000000" - ] - }, - { - "before_preds": [ - "_gonsPerFragment > 0", - "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" - ], - "after_preds": [ - "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" - ] - }, - { - "before_preds": [ - "Sum(_gonBalances[...]) > 0", - "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" - ], - "after_preds": [ - "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" + "ori(_allowedFragments[msg.sender][spender]) != value" ] }, { @@ -90,17 +36,8 @@ "_allowedFragments[msg.sender][spender] != ori(Sum(_allowedFragments[msg.sender][...]))" ], "after_preds": [ - "_allowedFragments[msg.sender][spender] > ori(Sum(_allowedFragments[msg.sender][...]))" - ] - }, - { - "before_preds": [ - "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])", - "_allowedFragments[msg.sender][spender] >= Sum(_allowedFragments[msg.sender][...])", - "_allowedFragments[msg.sender][spender] <= Sum(_allowedFragments[msg.sender][...])" - ], - "after_preds": [ - "_allowedFragments[msg.sender][spender] == Sum(_allowedFragments[msg.sender][...])" + "_allowedFragments[msg.sender][spender] > ori(Sum(_allowedFragments[msg.sender][...]))", + "_allowedFragments[msg.sender][spender] != ori(Sum(_allowedFragments[msg.sender][...]))" ] }, { @@ -110,7 +47,7 @@ "_allowedFragments[msg.sender][spender] != ori(_allowedFragments[msg.sender][spender])" ], "after_preds": [ - "_allowedFragments[msg.sender][spender] > ori(_allowedFragments[msg.sender][spender])" + "_allowedFragments[msg.sender][spender] != ori(_allowedFragments[msg.sender][spender])" ] }, { @@ -130,7 +67,8 @@ "ori(Sum(_allowedFragments[msg.sender][...])) != Sum(_allowedFragments[msg.sender][...])" ], "after_preds": [ - "ori(Sum(_allowedFragments[msg.sender][...])) < Sum(_allowedFragments[msg.sender][...])" + "ori(Sum(_allowedFragments[msg.sender][...])) < Sum(_allowedFragments[msg.sender][...])", + "ori(Sum(_allowedFragments[msg.sender][...])) != Sum(_allowedFragments[msg.sender][...])" ] }, { @@ -150,7 +88,7 @@ "Sum(_allowedFragments[msg.sender][...]) != ori(_allowedFragments[msg.sender][spender])" ], "after_preds": [ - "Sum(_allowedFragments[msg.sender][...]) > ori(_allowedFragments[msg.sender][spender])" + "Sum(_allowedFragments[msg.sender][...]) != ori(_allowedFragments[msg.sender][spender])" ] }, { @@ -193,60 +131,6 @@ "_decimals == ori(_decimals)" ] }, - { - "before_preds": [ - "ori(_totalSupply) > 0", - "ori(_totalSupply) == 60000000000000" - ], - "after_preds": [ - "ori(_totalSupply) == 60000000000000" - ] - }, - { - "before_preds": [ - "ori(Sum(_gonBalances[...])) > 0", - "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" - ], - "after_preds": [ - "ori(Sum(_gonBalances[...])) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" - ] - }, - { - "before_preds": [ - "ori(_gonsPerFragment) > 0", - "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" - ], - "after_preds": [ - "ori(_gonsPerFragment) == 1929868153955269923726183083478131797554499744427342733990959733" - ] - }, - { - "before_preds": [ - "_totalSupply > 0", - "_totalSupply == 60000000000000" - ], - "after_preds": [ - "_totalSupply == 60000000000000" - ] - }, - { - "before_preds": [ - "_gonsPerFragment > 0", - "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" - ], - "after_preds": [ - "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" - ] - }, - { - "before_preds": [ - "Sum(_gonBalances[...]) > 0", - "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" - ], - "after_preds": [ - "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" - ] - }, { "before_preds": [ "_totalSupply == ori(_totalSupply)", @@ -287,33 +171,6 @@ "_decimals == ori(_decimals)" ] }, - { - "before_preds": [ - "_totalSupply > 0", - "_totalSupply == 60000000000000" - ], - "after_preds": [ - "_totalSupply == 60000000000000" - ] - }, - { - "before_preds": [ - "_gonsPerFragment > 0", - "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" - ], - "after_preds": [ - "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" - ] - }, - { - "before_preds": [ - "Sum(_gonBalances[...]) > 0", - "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" - ], - "after_preds": [ - "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" - ] - }, { "before_preds": [ "_totalSupply >= ori(_totalSupply)", @@ -321,7 +178,7 @@ "_totalSupply != ori(_totalSupply)" ], "after_preds": [ - "_totalSupply > ori(_totalSupply)" + "_totalSupply != ori(_totalSupply)" ] }, { @@ -331,7 +188,7 @@ "_gonsPerFragment != ori(_gonsPerFragment)" ], "after_preds": [ - "_gonsPerFragment > ori(_gonsPerFragment)" + "_gonsPerFragment != ori(_gonsPerFragment)" ] }, { @@ -341,7 +198,7 @@ "Sum(_gonBalances[...]) != ori(Sum(_gonBalances[...]))" ], "after_preds": [ - "Sum(_gonBalances[...]) > ori(Sum(_gonBalances[...]))" + "Sum(_gonBalances[...]) != ori(Sum(_gonBalances[...]))" ] }, { @@ -354,33 +211,6 @@ "_decimals == ori(_decimals)" ] }, - { - "before_preds": [ - "_totalSupply > 0", - "_totalSupply == 60000000000000" - ], - "after_preds": [ - "_totalSupply == 60000000000000" - ] - }, - { - "before_preds": [ - "_gonsPerFragment > 0", - "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" - ], - "after_preds": [ - "_gonsPerFragment == 1929868153955269923726183083478131797554499744427342733990959733" - ] - }, - { - "before_preds": [ - "Sum(_gonBalances[...]) > 0", - "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" - ], - "after_preds": [ - "Sum(_gonBalances[...]) == 115792089237316195423570985008687907853269984665640564039457583980000000000000" - ] - }, { "before_preds": [ "_totalSupply <= _gonsPerFragment", @@ -388,7 +218,8 @@ "_totalSupply != _gonsPerFragment" ], "after_preds": [ - "_totalSupply < _gonsPerFragment" + "_totalSupply < _gonsPerFragment", + "_totalSupply != _gonsPerFragment" ] }, { @@ -398,7 +229,7 @@ "_gonsPerFragment != ori(_totalSupply)" ], "after_preds": [ - "_gonsPerFragment > ori(_totalSupply)" + "_gonsPerFragment != ori(_totalSupply)" ] }, { diff --git a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json index 669fcbb..5d31f91 100644 --- a/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json +++ b/use-cases/dynamically-mined-invariant-denoising/output/sok/removed/0xacd43e627e64355f1861cec6d3a6688b31a6f952-removed.json @@ -1,50 +1,4 @@ [ - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 18" - ], - "after_preds": [ - "ori(_decimals) == 18" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))", - "ori(_totalSupply) >= ori(Sum(_balances[...]))", - "ori(_totalSupply) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 18" - ], - "after_preds": [ - "_decimals == 18" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" - ] - }, { "before_preds": [ "_totalSupply >= ori(_totalSupply)", @@ -52,7 +6,7 @@ "_totalSupply != ori(_totalSupply)" ], "after_preds": [ - "_totalSupply > ori(_totalSupply)" + "_totalSupply != ori(_totalSupply)" ] }, { @@ -62,17 +16,8 @@ "_totalSupply != ori(_balances[msg.sender])" ], "after_preds": [ - "_totalSupply > ori(_balances[msg.sender])" - ] - }, - { - "before_preds": [ - "_totalSupply == Sum(_balances[...])", - "_totalSupply >= Sum(_balances[...])", - "_totalSupply <= Sum(_balances[...])" - ], - "after_preds": [ - "_totalSupply == Sum(_balances[...])" + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" ] }, { @@ -82,17 +27,8 @@ "_totalSupply != ori(Sum(_balances[...]))" ], "after_preds": [ - "_totalSupply > ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(_decimals) == _decimals", - "ori(_decimals) >= _decimals", - "ori(_decimals) <= _decimals" - ], - "after_preds": [ - "ori(_decimals) == _decimals" + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" ] }, { @@ -102,7 +38,8 @@ "ori(_totalSupply) != Sum(_balances[...])" ], "after_preds": [ - "ori(_totalSupply) < Sum(_balances[...])" + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" ] }, { @@ -112,7 +49,8 @@ "ori(_balances[msg.sender]) != Sum(_balances[...])" ], "after_preds": [ - "ori(_balances[msg.sender]) < Sum(_balances[...])" + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" ] }, { @@ -122,7 +60,8 @@ "ori(_balances[msg.sender]) != _balances[msg.sender]" ], "after_preds": [ - "ori(_balances[msg.sender]) < _balances[msg.sender]" + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" ] }, { @@ -132,63 +71,7 @@ "Sum(_balances[...]) != ori(Sum(_balances[...]))" ], "after_preds": [ - "Sum(_balances[...]) > ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(min) == min", - "ori(min) >= min", - "ori(min) <= min" - ], - "after_preds": [ - "ori(min) == min" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 18" - ], - "after_preds": [ - "ori(_decimals) == 18" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))", - "ori(_totalSupply) >= ori(Sum(_balances[...]))", - "ori(_totalSupply) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 18" - ], - "after_preds": [ - "_decimals == 18" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" + "Sum(_balances[...]) != ori(Sum(_balances[...]))" ] }, { @@ -198,7 +81,7 @@ "_totalSupply != ori(_totalSupply)" ], "after_preds": [ - "_totalSupply > ori(_totalSupply)" + "_totalSupply != ori(_totalSupply)" ] }, { @@ -208,17 +91,8 @@ "_totalSupply != ori(_balances[msg.sender])" ], "after_preds": [ - "_totalSupply > ori(_balances[msg.sender])" - ] - }, - { - "before_preds": [ - "_totalSupply == Sum(_balances[...])", - "_totalSupply >= Sum(_balances[...])", - "_totalSupply <= Sum(_balances[...])" - ], - "after_preds": [ - "_totalSupply == Sum(_balances[...])" + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" ] }, { @@ -228,17 +102,8 @@ "_totalSupply != ori(Sum(_balances[...]))" ], "after_preds": [ - "_totalSupply > ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(_decimals) == _decimals", - "ori(_decimals) >= _decimals", - "ori(_decimals) <= _decimals" - ], - "after_preds": [ - "ori(_decimals) == _decimals" + "_totalSupply > ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" ] }, { @@ -248,7 +113,8 @@ "ori(_totalSupply) != Sum(_balances[...])" ], "after_preds": [ - "ori(_totalSupply) < Sum(_balances[...])" + "ori(_totalSupply) < Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" ] }, { @@ -258,7 +124,8 @@ "ori(_balances[msg.sender]) != Sum(_balances[...])" ], "after_preds": [ - "ori(_balances[msg.sender]) < Sum(_balances[...])" + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" ] }, { @@ -268,7 +135,8 @@ "ori(_balances[msg.sender]) != _balances[msg.sender]" ], "after_preds": [ - "ori(_balances[msg.sender]) < _balances[msg.sender]" + "ori(_balances[msg.sender]) < _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" ] }, { @@ -278,53 +146,7 @@ "Sum(_balances[...]) != ori(Sum(_balances[...]))" ], "after_preds": [ - "Sum(_balances[...]) > ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(min) == min", - "ori(min) >= min", - "ori(min) <= min" - ], - "after_preds": [ - "ori(min) == min" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 18" - ], - "after_preds": [ - "ori(_decimals) == 18" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 18" - ], - "after_preds": [ - "_decimals == 18" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" + "Sum(_balances[...]) != ori(Sum(_balances[...]))" ] }, { @@ -337,16 +159,6 @@ "_totalSupply == ori(_totalSupply)" ] }, - { - "before_preds": [ - "ori(_decimals) == _decimals", - "ori(_decimals) >= _decimals", - "ori(_decimals) <= _decimals" - ], - "after_preds": [ - "ori(_decimals) == _decimals" - ] - }, { "before_preds": [ "Sum(_balances[...]) == ori(Sum(_balances[...]))", @@ -357,88 +169,6 @@ "Sum(_balances[...]) == ori(Sum(_balances[...]))" ] }, - { - "before_preds": [ - "ori(min) == min", - "ori(min) >= min", - "ori(min) <= min" - ], - "after_preds": [ - "ori(min) == min" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 18" - ], - "after_preds": [ - "ori(_decimals) == 18" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) > 0", - "ori(_totalSupply) == 142449775039435131775208" - ], - "after_preds": [ - "ori(_totalSupply) == 142449775039435131775208" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "ori(Sum(_balances[...])) > 0", - "ori(Sum(_balances[...])) == 142449775039435131775208" - ], - "after_preds": [ - "ori(Sum(_balances[...])) == 142449775039435131775208" - ] - }, - { - "before_preds": [ - "_totalSupply > 0", - "_totalSupply == 142449775039435131775208" - ], - "after_preds": [ - "_totalSupply == 142449775039435131775208" - ] - }, - { - "before_preds": [ - "Sum(_balances[...]) > 0", - "Sum(_balances[...]) == 142449775039435131775208" - ], - "after_preds": [ - "Sum(_balances[...]) == 142449775039435131775208" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 18" - ], - "after_preds": [ - "_decimals == 18" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" - ] - }, { "before_preds": [ "_totalSupply == ori(_totalSupply)", @@ -449,16 +179,6 @@ "_totalSupply == ori(_totalSupply)" ] }, - { - "before_preds": [ - "ori(_decimals) == _decimals", - "ori(_decimals) >= _decimals", - "ori(_decimals) <= _decimals" - ], - "after_preds": [ - "ori(_decimals) == _decimals" - ] - }, { "before_preds": [ "Sum(_balances[...]) == ori(Sum(_balances[...]))", @@ -469,145 +189,6 @@ "Sum(_balances[...]) == ori(Sum(_balances[...]))" ] }, - { - "before_preds": [ - "ori(min) == min", - "ori(min) >= min", - "ori(min) <= min" - ], - "after_preds": [ - "ori(min) == min" - ] - }, - { - "before_preds": [ - "_shares > 0", - "_shares == 10000000000000000000" - ], - "after_preds": [ - "_shares == 10000000000000000000" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 18" - ], - "after_preds": [ - "ori(_decimals) == 18" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) > 0", - "ori(_totalSupply) == 100000000000000000000" - ], - "after_preds": [ - "ori(_totalSupply) == 100000000000000000000" - ] - }, - { - "before_preds": [ - "ori(_balances[msg.sender]) > 0", - "ori(_balances[msg.sender]) == 100000000000000000000" - ], - "after_preds": [ - "ori(_balances[msg.sender]) == 100000000000000000000" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "ori(Sum(_balances[...])) > 0", - "ori(Sum(_balances[...])) == 100000000000000000000" - ], - "after_preds": [ - "ori(Sum(_balances[...])) == 100000000000000000000" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) == ori(_balances[msg.sender])", - "ori(_totalSupply) >= ori(_balances[msg.sender])", - "ori(_totalSupply) <= ori(_balances[msg.sender])" - ], - "after_preds": [ - "ori(_totalSupply) == ori(_balances[msg.sender])" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))", - "ori(_totalSupply) >= ori(Sum(_balances[...]))", - "ori(_totalSupply) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))", - "ori(_balances[msg.sender]) >= ori(Sum(_balances[...]))", - "ori(_balances[msg.sender]) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "ori(_balances[msg.sender]) == ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "_totalSupply > 0", - "_totalSupply == 90000000000000000000" - ], - "after_preds": [ - "_totalSupply == 90000000000000000000" - ] - }, - { - "before_preds": [ - "Sum(_balances[...]) > 0", - "Sum(_balances[...]) == 90000000000000000000" - ], - "after_preds": [ - "Sum(_balances[...]) == 90000000000000000000" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 18" - ], - "after_preds": [ - "_decimals == 18" - ] - }, - { - "before_preds": [ - "_balances[msg.sender] > 0", - "_balances[msg.sender] == 90000000000000000000" - ], - "after_preds": [ - "_balances[msg.sender] == 90000000000000000000" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" - ] - }, { "before_preds": [ "_totalSupply <= ori(_totalSupply)", @@ -615,7 +196,7 @@ "_totalSupply != ori(_totalSupply)" ], "after_preds": [ - "_totalSupply < ori(_totalSupply)" + "_totalSupply != ori(_totalSupply)" ] }, { @@ -625,27 +206,8 @@ "_totalSupply != ori(_balances[msg.sender])" ], "after_preds": [ - "_totalSupply < ori(_balances[msg.sender])" - ] - }, - { - "before_preds": [ - "_totalSupply == Sum(_balances[...])", - "_totalSupply >= Sum(_balances[...])", - "_totalSupply <= Sum(_balances[...])" - ], - "after_preds": [ - "_totalSupply == Sum(_balances[...])" - ] - }, - { - "before_preds": [ - "_totalSupply == _balances[msg.sender]", - "_totalSupply >= _balances[msg.sender]", - "_totalSupply <= _balances[msg.sender]" - ], - "after_preds": [ - "_totalSupply == _balances[msg.sender]" + "_totalSupply < ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" ] }, { @@ -655,17 +217,8 @@ "_totalSupply != ori(Sum(_balances[...]))" ], "after_preds": [ - "_totalSupply < ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(_decimals) == _decimals", - "ori(_decimals) >= _decimals", - "ori(_decimals) <= _decimals" - ], - "after_preds": [ - "ori(_decimals) == _decimals" + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" ] }, { @@ -675,7 +228,8 @@ "ori(_totalSupply) != Sum(_balances[...])" ], "after_preds": [ - "ori(_totalSupply) > Sum(_balances[...])" + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" ] }, { @@ -685,7 +239,8 @@ "ori(_totalSupply) != _balances[msg.sender]" ], "after_preds": [ - "ori(_totalSupply) > _balances[msg.sender]" + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" ] }, { @@ -695,7 +250,8 @@ "ori(_balances[msg.sender]) != Sum(_balances[...])" ], "after_preds": [ - "ori(_balances[msg.sender]) > Sum(_balances[...])" + "ori(_balances[msg.sender]) > Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" ] }, { @@ -705,7 +261,8 @@ "ori(_balances[msg.sender]) != _balances[msg.sender]" ], "after_preds": [ - "ori(_balances[msg.sender]) > _balances[msg.sender]" + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" ] }, { @@ -725,17 +282,7 @@ "Sum(_balances[...]) != ori(Sum(_balances[...]))" ], "after_preds": [ - "Sum(_balances[...]) < ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(min) == min", - "ori(min) >= min", - "ori(min) <= min" - ], - "after_preds": [ - "ori(min) == min" + "Sum(_balances[...]) != ori(Sum(_balances[...]))" ] }, { @@ -745,25 +292,8 @@ "_balances[msg.sender] != ori(Sum(_balances[...]))" ], "after_preds": [ - "_balances[msg.sender] < ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 18" - ], - "after_preds": [ - "ori(_decimals) == 18" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" ] }, { @@ -773,17 +303,8 @@ "ori(_totalSupply) != ori(_balances[msg.sender])" ], "after_preds": [ - "ori(_totalSupply) > ori(_balances[msg.sender])" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))", - "ori(_totalSupply) >= ori(Sum(_balances[...]))", - "ori(_totalSupply) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))" + "ori(_totalSupply) > ori(_balances[msg.sender])", + "ori(_totalSupply) != ori(_balances[msg.sender])" ] }, { @@ -793,25 +314,8 @@ "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" ], "after_preds": [ - "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 18" - ], - "after_preds": [ - "_decimals == 18" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" + "ori(_balances[msg.sender]) < ori(Sum(_balances[...]))", + "ori(_balances[msg.sender]) != ori(Sum(_balances[...]))" ] }, { @@ -821,7 +325,7 @@ "_totalSupply != ori(_totalSupply)" ], "after_preds": [ - "_totalSupply < ori(_totalSupply)" + "_totalSupply != ori(_totalSupply)" ] }, { @@ -831,17 +335,8 @@ "_totalSupply != ori(_balances[msg.sender])" ], "after_preds": [ - "_totalSupply > ori(_balances[msg.sender])" - ] - }, - { - "before_preds": [ - "_totalSupply == Sum(_balances[...])", - "_totalSupply >= Sum(_balances[...])", - "_totalSupply <= Sum(_balances[...])" - ], - "after_preds": [ - "_totalSupply == Sum(_balances[...])" + "_totalSupply > ori(_balances[msg.sender])", + "_totalSupply != ori(_balances[msg.sender])" ] }, { @@ -851,7 +346,8 @@ "_totalSupply != _balances[msg.sender]" ], "after_preds": [ - "_totalSupply > _balances[msg.sender]" + "_totalSupply > _balances[msg.sender]", + "_totalSupply != _balances[msg.sender]" ] }, { @@ -861,17 +357,8 @@ "_totalSupply != ori(Sum(_balances[...]))" ], "after_preds": [ - "_totalSupply < ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(_decimals) == _decimals", - "ori(_decimals) >= _decimals", - "ori(_decimals) <= _decimals" - ], - "after_preds": [ - "ori(_decimals) == _decimals" + "_totalSupply < ori(Sum(_balances[...]))", + "_totalSupply != ori(Sum(_balances[...]))" ] }, { @@ -881,7 +368,8 @@ "ori(_totalSupply) != Sum(_balances[...])" ], "after_preds": [ - "ori(_totalSupply) > Sum(_balances[...])" + "ori(_totalSupply) > Sum(_balances[...])", + "ori(_totalSupply) != Sum(_balances[...])" ] }, { @@ -891,7 +379,8 @@ "ori(_totalSupply) != _balances[msg.sender]" ], "after_preds": [ - "ori(_totalSupply) > _balances[msg.sender]" + "ori(_totalSupply) > _balances[msg.sender]", + "ori(_totalSupply) != _balances[msg.sender]" ] }, { @@ -901,7 +390,8 @@ "ori(_balances[msg.sender]) != Sum(_balances[...])" ], "after_preds": [ - "ori(_balances[msg.sender]) < Sum(_balances[...])" + "ori(_balances[msg.sender]) < Sum(_balances[...])", + "ori(_balances[msg.sender]) != Sum(_balances[...])" ] }, { @@ -911,7 +401,8 @@ "ori(_balances[msg.sender]) != _balances[msg.sender]" ], "after_preds": [ - "ori(_balances[msg.sender]) > _balances[msg.sender]" + "ori(_balances[msg.sender]) > _balances[msg.sender]", + "ori(_balances[msg.sender]) != _balances[msg.sender]" ] }, { @@ -921,7 +412,7 @@ "Sum(_balances[...]) != _balances[msg.sender]" ], "after_preds": [ - "Sum(_balances[...]) > _balances[msg.sender]" + "Sum(_balances[...]) != _balances[msg.sender]" ] }, { @@ -931,17 +422,7 @@ "Sum(_balances[...]) != ori(Sum(_balances[...]))" ], "after_preds": [ - "Sum(_balances[...]) < ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(min) == min", - "ori(min) >= min", - "ori(min) <= min" - ], - "after_preds": [ - "ori(min) == min" + "Sum(_balances[...]) != ori(Sum(_balances[...]))" ] }, { @@ -951,83 +432,8 @@ "_balances[msg.sender] != ori(Sum(_balances[...]))" ], "after_preds": [ - "_balances[msg.sender] < ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "ori(_decimals) > 0", - "ori(_decimals) == 18" - ], - "after_preds": [ - "ori(_decimals) == 18" - ] - }, - { - "before_preds": [ - "ori(min) > 0", - "ori(min) == 9500" - ], - "after_preds": [ - "ori(min) == 9500" - ] - }, - { - "before_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))", - "ori(_totalSupply) >= ori(Sum(_balances[...]))", - "ori(_totalSupply) <= ori(Sum(_balances[...]))" - ], - "after_preds": [ - "ori(_totalSupply) == ori(Sum(_balances[...]))" - ] - }, - { - "before_preds": [ - "_decimals > 0", - "_decimals == 18" - ], - "after_preds": [ - "_decimals == 18" - ] - }, - { - "before_preds": [ - "min > 0", - "min == 9500" - ], - "after_preds": [ - "min == 9500" - ] - }, - { - "before_preds": [ - "_totalSupply == Sum(_balances[...])", - "_totalSupply >= Sum(_balances[...])", - "_totalSupply <= Sum(_balances[...])" - ], - "after_preds": [ - "_totalSupply == Sum(_balances[...])" - ] - }, - { - "before_preds": [ - "ori(_decimals) == _decimals", - "ori(_decimals) >= _decimals", - "ori(_decimals) <= _decimals" - ], - "after_preds": [ - "ori(_decimals) == _decimals" - ] - }, - { - "before_preds": [ - "ori(min) == min", - "ori(min) >= min", - "ori(min) <= min" - ], - "after_preds": [ - "ori(min) == min" + "_balances[msg.sender] < ori(Sum(_balances[...]))", + "_balances[msg.sender] != ori(Sum(_balances[...]))" ] } ] \ No newline at end of file diff --git a/use-cases/dynamically-mined-invariant-denoising/percentage_removed_comparison.png b/use-cases/dynamically-mined-invariant-denoising/percentage_removed_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..3fc57e77237f84df166bc80a46b814b337965e90 GIT binary patch literal 149612 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

y@C-99Er@_T#=r$R0J?HKshZ0;X_e?dqhY=q&> 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

FlgP5>2SK$t{}qNTE1 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 Date: Sat, 16 Aug 2025 11:30:00 +0200 Subject: [PATCH 7/7] Feature #67: Adding the analysis results (the plot comparing Sindi and its baseline, the light vesion) --- .../analysis.ipynb | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/use-cases/dynamically-mined-invariant-denoising/analysis.ipynb b/use-cases/dynamically-mined-invariant-denoising/analysis.ipynb index f9a619f..ae4eca9 100644 --- a/use-cases/dynamically-mined-invariant-denoising/analysis.ipynb +++ b/use-cases/dynamically-mined-invariant-denoising/analysis.ipynb @@ -510,6 +510,157 @@ "## Comparing Sindi's comparator and its light version with respect to the invariant denoising task" ] }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "

" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.patches import Patch, PathPatch\n", + "\n", + "# ----------------------------\n", + "# 1) Load JSON data\n", + "# ----------------------------\n", + "with open('output/erc20.json', 'r') as f:\n", + " erc20_data = json.load(f)\n", + "with open('output/sok.json', 'r') as f:\n", + " sok_data = json.load(f)\n", + "\n", + "with open('output_light/erc20.json', 'r') as f:\n", + " erc20_baseline_data = json.load(f)\n", + "with open('output_light/sok.json', 'r') as f:\n", + " sok_baseline_data = json.load(f)\n", + "\n", + "# ----------------------------\n", + "# 2) To DataFrames + labels\n", + "# ----------------------------\n", + "# Sindi data\n", + "erc20_df = pd.DataFrame(erc20_data)\n", + "erc20_df['Dataset'] = 'ERC20'\n", + "erc20_df['Experiment'] = 'Sindi'\n", + "\n", + "sok_df = pd.DataFrame(sok_data)\n", + "sok_df['Dataset'] = 'SoK'\n", + "sok_df['Experiment'] = 'Sindi'\n", + "\n", + "# Sindi Light data\n", + "erc20_baseline_df = pd.DataFrame(erc20_baseline_data)\n", + "erc20_baseline_df['Dataset'] = 'ERC20'\n", + "erc20_baseline_df['Experiment'] = 'Sindi Light'\n", + "\n", + "sok_baseline_df = pd.DataFrame(sok_baseline_data)\n", + "sok_baseline_df['Dataset'] = 'SoK'\n", + "sok_baseline_df['Experiment'] = 'Sindi Light'\n", + "\n", + "# ----------------------------\n", + "# 3) Combine\n", + "# ----------------------------\n", + "df = pd.concat([erc20_df, sok_df, erc20_baseline_df, sok_baseline_df], ignore_index=True)\n", + "\n", + "# ----------------------------\n", + "# 4) Compute metric\n", + "# ----------------------------\n", + "df['percentage_removed'] = (1 - df['reduction_ratio']) * 100\n", + "\n", + "# ----------------------------\n", + "# 5) Plot style\n", + "# ----------------------------\n", + "sns.set_context(\"paper\", font_scale=1)\n", + "sns.set_style(\"white\")\n", + "\n", + "# ----------------------------\n", + "# 6) Figure\n", + "# ----------------------------\n", + "plt.figure(figsize=(3.4, 2.4))\n", + "\n", + "# Fixed hue order so we always know which box is which within each category\n", + "hue_order = ['Sindi', 'Sindi Light']\n", + "palette = {'Sindi': '#639CD9', 'Sindi Light': '#D97C63'}\n", + "\n", + "ax = sns.boxplot(\n", + " x='Dataset',\n", + " y='percentage_removed',\n", + " hue='Experiment',\n", + " hue_order=hue_order,\n", + " data=df,\n", + " width=0.6,\n", + " palette=palette,\n", + " linewidth=0.9,\n", + " whiskerprops={'color': 'black', 'linewidth': 0.9},\n", + " capprops={'color': 'black', 'linewidth': 0.9},\n", + " medianprops={'color': 'black', 'linewidth': 0.9},\n", + " flierprops={'markeredgecolor': 'black', 'markersize': 3}\n", + ")\n", + "\n", + "# ----------------------------\n", + "# 7) Apply hatching robustly\n", + "# ----------------------------\n", + "# Seaborn stores box artists in ax.artists (most versions). As a fallback, derive from ax.patches.\n", + "boxes = list(ax.artists)\n", + "if not boxes:\n", + " boxes = [p for p in ax.patches if isinstance(p, PathPatch)]\n", + "\n", + "# There are len(hue_order) boxes per category (Dataset). We hatch the \"Sindi Light\" ones.\n", + "num_hue = len(hue_order) # 2\n", + "for i, box in enumerate(boxes):\n", + " # Within each x category, boxes appear in hue_order.\n", + " hue_index = i % num_hue\n", + " if hue_order[hue_index] == 'Sindi Light':\n", + " box.set_hatch('//')\n", + " else:\n", + " box.set_hatch('')\n", + " box.set_edgecolor('black')\n", + " box.set_alpha(1) # ensure solid fill so hatch renders crisply in vector outputs\n", + "\n", + "# ----------------------------\n", + "# 8) Axes cosmetics\n", + "# ----------------------------\n", + "for spine in ax.spines.values():\n", + " spine.set_visible(True)\n", + " spine.set_linewidth(0.5)\n", + " spine.set_edgecolor('black')\n", + "\n", + "plt.ylim(0, 100)\n", + "plt.xlabel(\"\")\n", + "plt.ylabel(\"Invariants Removed (%)\")\n", + "\n", + "# ----------------------------\n", + "# 9) Legend with matching hatch\n", + "# ----------------------------\n", + "handles, labels = ax.get_legend_handles_labels()\n", + "# Rebuild legend to ensure consistent hatching/edges\n", + "new_handles = []\n", + "for lab in labels:\n", + " if lab == 'Sindi Light':\n", + " new_handles.append(Patch(facecolor=palette[lab], edgecolor='black', hatch='//'))\n", + " else:\n", + " new_handles.append(Patch(facecolor=palette[lab], edgecolor='black'))\n", + "ax.legend(new_handles, labels, title='', frameon=False)\n", + "\n", + "plt.tight_layout()\n", + "\n", + "# ----------------------------\n", + "# 10) Save / Show\n", + "# ----------------------------\n", + "plt.savefig(\"paired_boxplot_invariants_removed.pdf\", dpi=300, bbox_inches='tight')\n", + "plt.show()\n" + ] + }, { "cell_type": "code", "execution_count": null,