85 lines
1.9 KiB
Python
85 lines
1.9 KiB
Python
# local imports
|
|
from .status import Status
|
|
from .src import Src
|
|
|
|
|
|
class Tx(Src):
|
|
"""Base class to extend for implementation specific transaction objects.
|
|
|
|
:param src: Transaction representation source
|
|
:type src: dict
|
|
:param block: Block in which transaction has been included
|
|
:type block: chainlib.block.Block
|
|
"""
|
|
|
|
def __init__(self, src=None, block=None, result=None, strict=False):
|
|
self.block = block
|
|
self.index = -1
|
|
|
|
self.fee_limit = None
|
|
self.fee_price = None
|
|
|
|
self.nonce = None
|
|
self.value = 0
|
|
|
|
self.outputs = []
|
|
self.inputs = []
|
|
self.payload = None
|
|
|
|
self.result = None
|
|
|
|
super(Tx, self).__init__(src)
|
|
|
|
if block != None:
|
|
self.apply_block(block)
|
|
|
|
if result != None:
|
|
self.apply_result(result)
|
|
|
|
|
|
def apply_result(self, result):
|
|
self.result = result
|
|
|
|
|
|
def apply_block(self, block):
|
|
self.block = block
|
|
|
|
|
|
@property
|
|
def status(self):
|
|
if self.result == None:
|
|
return None
|
|
return self.result.status
|
|
|
|
|
|
@property
|
|
def status_name(self):
|
|
if self.result == None:
|
|
return None
|
|
return self.result.status.name
|
|
|
|
|
|
def generate_wire(self, chain_spec):
|
|
pass
|
|
|
|
|
|
def as_dict(self):
|
|
raise NotImplementedError()
|
|
|
|
|
|
def __str__(self):
|
|
if self.block != None:
|
|
return 'tx {} status {} block {} index {}'.format(self.display_hash(), self.status_name(), self.block.number, self.index)
|
|
else:
|
|
return 'tx {} status {}'.format(self.display_hash(), self.hash, self.status_name())
|
|
|
|
|
|
class TxResult(Src):
|
|
|
|
def __init__(self, src=None):
|
|
self.status = Status.UNKNOWN
|
|
self.tx_index = None
|
|
self.block_hash = None
|
|
self.fee_cost = 0
|
|
super(TxResult, self).__init__(src=src)
|