def _check_updated(self, path): path = self._path(path) if path not in self.tests or not self.tests[path]["isolated"]: return False if CONFIG.argv["coverage"] and not self.tests[path]["coverage"]: return False for txhash in self.tests[path]["txhash"]: coverage._check_cached(txhash, False) return True
def __init__( self, txid: Union[str, bytes], sender: Any = None, silent: bool = False, name: str = "", revert_data: Optional[Tuple] = None, ) -> None: """Instantiates a new TransactionReceipt object. Args: txid: hexstring transaction ID sender: sender as a hex string or Account object silent: toggles console verbosity name: contract function being called revert_data: (revert string, program counter, revert type) """ if isinstance(txid, bytes): txid = txid.hex() if not silent: print( f"{color['key']}Transaction sent{color}: {color['value']}{txid}{color}" ) history._add_tx(self) self._raw_trace = None self._trace = None self._events = None self._return_value = None self._revert_msg = None self._modified_state = None self._confirmed = threading.Event() self.sender = sender self.status = -1 self.txid = txid self.fn_name = name if name and "." in name: self.contract_name, self.fn_name = name.split(".", maxsplit=1) # avoid querying the trace to get the revert string if possible revert_msg, self._revert_pc, revert_type = revert_data or (None, None, None) if revert_msg: # revert message was returned self._revert_msg = revert_msg elif revert_type in ("revert", "invalid opcode"): # check for dev revert string as a comment self._revert_msg = build._get_dev_revert(self._revert_pc) else: self._revert_msg = revert_type # threaded to allow impatient users to ctrl-c to stop waiting in the console confirm_thread = threading.Thread(target=self._await_confirmation, args=(silent, ), daemon=True) confirm_thread.start() try: confirm_thread.join() if ARGV["cli"] == "console": return # if coverage evaluation is active, evaluate the trace if ARGV["coverage"] and not coverage._check_cached( self.coverage_hash) and self.trace: self._expand_trace() if not self.status: if self._revert_msg is None: # no revert message and unable to check dev string - have to get trace self._expand_trace() # raise from a new function to reduce pytest traceback length _raise( self._revert_msg or "", self._traceback_string() if ARGV["revert"] else self._error_string(1), ) except KeyboardInterrupt: if ARGV["cli"] != "console": raise
def __init__( self, txid: Union[str, bytes], sender: Any = None, silent: bool = False, name: str = "", revert_data: Optional[Tuple] = None, ) -> None: """Instantiates a new TransactionReceipt object. Args: txid: hexstring transaction ID sender: sender as a hex string or Account object silent: toggles console verbosity name: contract function being called revert_data: (revert string, program counter, revert type) """ if CONFIG.mode == "test": silent = True if isinstance(txid, bytes): txid = txid.hex() if not silent: print(f"Transaction sent: {color('bright blue')}{txid}{color}") history._add_tx(self) self._trace_origin = None self._raw_trace = None self._trace = None self._call_cost = 0 self._events = None self._return_value = None self._revert_msg = None self._modified_state = None self._new_contracts = None self._internal_transfers = None self._confirmed = threading.Event() self.sender = sender self.status = -1 self.txid = txid self.fn_name = name if name and "." in name: self.contract_name, self.fn_name = name.split(".", maxsplit=1) # avoid querying the trace to get the revert string if possible self._revert_msg, self._revert_pc, revert_type = revert_data or (None, None, None) if self._revert_msg is None and revert_type not in ("revert", "invalid_opcode"): self._revert_msg = revert_type # threaded to allow impatient users to ctrl-c to stop waiting in the console confirm_thread = threading.Thread( target=self._await_confirmation, args=(silent,), daemon=True ) confirm_thread.start() try: confirm_thread.join() # if coverage evaluation is active, evaluate the trace if ( CONFIG.argv["coverage"] and not coverage._check_cached(self.coverage_hash) and self.trace ): self._expand_trace() except KeyboardInterrupt: if CONFIG.mode != "console": raise
def __init__( self, txid: Union[str, bytes], sender: Any = None, silent: bool = True, required_confs: int = 1, name: str = "", revert_data: Optional[Tuple] = None, ) -> None: """Instantiates a new TransactionReceipt object. Args: txid: hexstring transaction ID sender: sender as a hex string or Account object required_confs: the number of required confirmations before processing the receipt silent: toggles console verbosity (default True) name: contract function being called revert_data: (revert string, program counter, revert type) """ self._silent = silent if isinstance(txid, bytes): txid = HexBytes(txid).hex() if not self._silent: print(f"Transaction sent: {color('bright blue')}{txid}{color}") # internal attributes self._trace_exc = None self._trace_origin = None self._raw_trace = None self._trace = None self._call_cost = 0 self._events = None self._return_value = None self._revert_msg = None self._modified_state = None self._new_contracts = None self._internal_transfers = None self._subcalls: Optional[List[Dict]] = None self._confirmed = threading.Event() # attributes that can be set immediately self.sender = sender self.status = -1 self.txid = txid self.contract_name = None self.fn_name = name if name and "." in name: self.contract_name, self.fn_name = name.split(".", maxsplit=1) # avoid querying the trace to get the revert string if possible self._revert_msg, self._revert_pc, revert_type = revert_data or (None, None, None) if self._revert_msg is None and revert_type not in ("revert", "invalid_opcode"): self._revert_msg = revert_type #self._await_transaction(required_confs) # if coverage evaluation is active, evaluate the trace if (CONFIG.argv["coverage"] and not coverage._check_cached(self.coverage_hash) and self.trace): self._expand_trace()