Пример #1
0
 def __init__(self,
              address,
              balance=None,
              code=None,
              nonce=None,
              storage=None):
     self.address = address
     self.balance = balance if balance is not None else rndval.RndHexInt(
         _min=2**24 - 1)
     self.code = code if code is not None else ''
     self.nonce = nonce
     self.storage = storage if storage is not None else {}
Пример #2
0
    def __init__(self,
                 nonce=None,
                 codegenerators={},
                 datalength=None,
                 fill_prestate_for_tx_to=True,
                 fill_prestate_for_args=False,
                 _config=None):
        ### global settings
        self._nonce = nonce if nonce is not None else str(rndval.RndV())
        self._config = _config

        ### set by setters below
        self._codegenerators = None  # default
        self._codegenerators_weighted = None
        self._datalength = None

        self._fill_prestate_for_tx_to = fill_prestate_for_tx_to
        self._fill_prestate_for_args = fill_prestate_for_args

        ## set the using a defined interface
        self.codegens = codegenerators  # sets _codegenerators and _codegenerators_weighted
        self.datalength = datalength  # sets _datalength

        ### info
        self._info = SimpleNamespace(fuzzer="evmlab",
                                     comment="evmlab",
                                     filledwith="evmlab randomfuzz")

        ### env
        self._env = SimpleNamespace(currentCoinbase=rndval.RndAddress(),
                                    currentDifficulty="0x20000",
                                    currentGasLimit="0x1312D00",
                                    currentNumber="1",
                                    currentTimestamp="1000",
                                    previousHash=rndval.RndHash32())

        ### post
        self._post = {
            "Byzantium": [{  # dummy to make statetests happy
                "hash":
                "0x00000000000000000000000000000000000000000000000000000000deadc0de",
                "logs":
                "0x00000000000000000000000000000000000000000000000000000000deadbeef",
                "indexes": {
                    "data": 0,
                    "gas": 0,
                    "value": 0
                }
            }]
        }

        ### pre
        self._pre = {}

        ### transaction
        self._transaction = SimpleNamespace(
            secretKey=
            "0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
            data=[
                self.pick_codegen(
                    rndval.RndCodeBytes).generate(length=self._datalength)
            ],
            gasLimit=[rndval.RndTransactionGasLimit(_min=34 * 14000)],
            gasPrice=rndval.RndGasPrice(),
            nonce=self._nonce,
            to=rndval.RndDestAddressOrZero(),
            value=[rndval.RndHexInt(_min=0, _max=max(0, 2**24))])
Пример #3
0
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Author : <github.com/tintinweb>
from evmlab.tools.statetests import rndval

rnd_nonce = str(rndval.RndV())
rnd_balance = rndval.RndHexInt(_min=2**24-1)
rnd_send_value = rndval.RndHexInt(_min=0, _max=max(0,2**24))  # reserve for exec/gas.
rnd_code_flags = set([rndval.RndCode.FLAG_FOCUS_CONSTANTINOPLE,])  # indicate that we want to blend in more CONSTANTINOPLE instructions.

# https://github.com/ethereum/testeth/blob/develop/test/tools/fuzzTesting/createRandomTest.cpp#L241
TEMPLATE_RandomStateTest = {
    "randomStatetest": {
        "_fuzz": {
            "compressed_random_state": rndval.RandomSeed(),
        },
        "_info": {
            "comment": "This test was generated from Evmlab",
            "filledwith": "evmlab",
            "lllcversion": "not available",
            "source": "not available",
            "sourceHash": "not available"
        },
        "env": {
            "currentCoinbase": rndval.RndAddress(),
            "currentDifficulty": "0x20000",
            "currentGasLimit": "0x1312D00", # Set to 20M for now
            "currentNumber": "1",
            "currentTimestamp": "1000",
            "previousHash": rndval.RndHash32()
        },
Пример #4
0
 "randomStatetest": {
     "_fuzz": {
         "compressed_random_state": rndval.RandomSeed(),
     },
     "env": {
         "currentCoinbase": rndval.RndAddress(),
         "currentDifficulty": "0x20000",
         "currentGasLimit": rndval.RndBlockGasLimit(),
         "currentNumber": "1",
         "currentTimestamp": "1000",
         "previousHash": rndval.RndHash32()
     },
     "post": {"Byzantium" : [{ "logs" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"}]},  # dummy to make statetests happy
     "pre": {
         "ffffffffffffffffffffffffffffffffffffffff": {
             "balance": rndval.RndHexInt(),
             "code": rndval.RndCode(),
             "nonce": rnd_nonce,
             "storage": {
             }
         },
         "1000000000000000000000000000000000000000": {
             "balance": rndval.RndHexInt(),
             "code": rndval.RndCode(),
             "nonce": rnd_nonce,
             "storage": {
             }
         },
         "b94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
             "balance": rndval.RndHexInt(),
             "code": rndval.RndCode(),