def build_computation(self, message: Message, transaction: BaseTransaction) -> BaseComputation: """Apply the message to the VM.""" transaction_context = self.vm_state.get_transaction_context( transaction) if message.is_create: is_collision = self.vm_state.account_db.account_has_code_or_nonce( message.storage_address) if is_collision: # The address of the newly created contract has *somehow* collided # with an existing contract address. computation = self.vm_state.get_computation( message, transaction_context) computation._error = ContractCreationCollision( "Address collision while creating contract: {0}".format( encode_hex(message.storage_address), )) self.vm_state.logger.trace( "Address collision while creating contract: %s", encode_hex(message.storage_address), ) else: computation = self.vm_state.get_computation( message, transaction_context, ).apply_create_message() else: computation = self.vm_state.get_computation( message, transaction_context).apply_message() return computation
def build_computation(self, message: MessageAPI, transaction: SignedTransactionAPI) -> ComputationAPI: transaction_context = self.vm_state.get_transaction_context( transaction) if message.is_create: is_collision = self.vm_state.has_code_or_nonce( message.storage_address) if is_collision: # The address of the newly created contract has *somehow* collided # with an existing contract address. computation = self.vm_state.get_computation( message, transaction_context) computation.error = ContractCreationCollision( f"Address collision while creating contract: " f"{encode_hex(message.storage_address)}") self.vm_state.logger.debug2( "Address collision while creating contract: %s", encode_hex(message.storage_address), ) else: computation = self.vm_state.computation_class.apply_create_message( self.vm_state, message, transaction_context, ) else: computation = self.vm_state.computation_class.apply_message( self.vm_state, message, transaction_context, ) return computation