Source code for mythril.laser.ethereum.state.environment

"""This module contains the representation for an execution state's
environment."""
from typing import Dict

from z3 import ExprRef

from mythril.laser.ethereum.state.account import Account
from mythril.laser.ethereum.state.calldata import BaseCalldata
from mythril.laser.smt import symbol_factory


[docs]class Environment: """The environment class represents the current execution environment for the symbolic executor.""" def __init__( self, active_account: Account, sender: ExprRef, calldata: BaseCalldata, gasprice: ExprRef, callvalue: ExprRef, origin: ExprRef, basefee: ExprRef, code=None, static=False, ) -> None: """ :param active_account: :param sender: :param calldata: :param gasprice: :param callvalue: :param origin: :param code: :param static: Makes the environment static. """ # Metadata self.active_account = active_account self.active_function_name = "" self.address = active_account.address # TODO: Add tx_2 > tx_1 then block_no(tx_2) > block_no(tx_1) self.block_number = symbol_factory.BitVecSym("block_number", 256) self.chainid = symbol_factory.BitVecSym("chain_id", 256) # Ib self.code = active_account.code if code is None else code self.sender = sender self.calldata = calldata self.gasprice = gasprice self.origin = origin self.callvalue = callvalue self.static = static self.basefee = basefee def __str__(self) -> str: """ :return: """ return str(self.as_dict) @property def as_dict(self) -> Dict: """ :return: """ return dict( active_account=self.active_account, sender=self.sender, calldata=self.calldata, gasprice=self.gasprice, callvalue=self.callvalue, origin=self.origin, )