Compare commits

...

7 Commits

Author SHA1 Message Date
lash 63df6aa6c4
Fix wire generation bug 2022-05-10 19:00:37 +00:00
lash 11b7c4e4e8
Make status methods properties 2022-05-09 19:21:05 +00:00
lash 23ee2f4b09
Remove commented code 2022-05-09 18:48:49 +00:00
lash 883a931495
Add common tx result fields 2022-05-09 18:46:50 +00:00
lash 04a09334ea
WIP implement and test genertic tx, result, block 2022-05-09 10:00:58 +00:00
lash 45785c8e9e
Remove superfluous arguments for settings instantiation 2022-05-06 07:47:04 +00:00
lash b002976ebd
Upgrade hexathon 2022-05-04 18:13:30 +00:00
7 changed files with 107 additions and 38 deletions

View File

@ -1,3 +1,15 @@
- 0.2.1
* Fix bug in wire format generation for tx
- 0.2.0
* Consolidate genertic blcok, tx and tx result objects
- 0.1.3
* Remove superfluous arguments for chain settings instantiation
- 0.1.2
* Upgrade hexathon dep
- 0.1.1
* Add settings object
- 0.1.0
* Upgrade deps
- 0.0.23
* Configuration variable descriptions
* Arg flags to names listing method

View File

@ -2,7 +2,8 @@
import enum
# local imports
from chainlib.tx import Tx
from .tx import Tx
from .src import Src
class BlockSpec(enum.IntEnum):
@ -12,23 +13,24 @@ class BlockSpec(enum.IntEnum):
LATEST = 0
class Block:
class Block(Src):
"""Base class to extend for implementation specific block object.
"""
tx_generator = Tx
def __init__(self, src=None):
self.number = None
self.txs = []
self.author = None
def src(self):
"""Return implementation specific block representation.
self.get_tx = self.tx_index_by_hash
self.tx = self.tx_by_index
:rtype: dict
:returns: Block representation
"""
return self.block_src
super(Block, self).__init__(src=src)
def tx(self, idx):
def tx_by_index(self, idx):
"""Return transaction object for transaction data at given index.
:param idx: Transaction index
@ -39,28 +41,12 @@ class Block:
return self.tx_generator(self.txs[idx], self)
def tx_src(self, idx):
"""Return implementation specific transaction representation for transaction data at given index
:param idx: Transaction index
:type idx: int
:rtype: chainlib.tx.Tx
:returns: Transaction representation
"""
return self.txs[idx]
def tx_index_by_hash(self, hsh):
for tx in self.tx:
if tx == hsh:
return tx
return -1
def __str__(self):
return 'block {} {} ({} txs)'.format(self.number, self.hash, len(self.txs))
@classmethod
def from_src(cls, src):
"""Instantiate an implementation specific block object from the given block representation.
:param src: Block representation
:type src: dict
:rtype: chainlib.block.Block
:returns: Block object
"""
return cls(src)

View File

@ -4,7 +4,7 @@ from .chain import ChainSpec
class ChainSettings:
def __init__(self, include_sync=False, include_queue=False):
def __init__(self):
self.o = {}
self.get = self.o.get

View File

@ -4,6 +4,7 @@ import enum
class Status(enum.Enum):
"""Representation of transaction status in network.
"""
UNKNOWN = -1
PENDING = 0
SUCCESS = 1
ERROR = 2

View File

@ -1,4 +1,9 @@
class Tx:
# 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
@ -7,8 +12,73 @@ class Tx:
:type block: chainlib.block.Block
"""
def __init__(self, src, block=None):
self.src = src
def __init__(self, src=None, block=None, result=None, strict=False):
self.block = block
self.block_src = None
self.index = None
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)

View File

@ -1,4 +1,4 @@
funga~=0.5.2
pysha3==1.0.2
hexathon~=0.1.5
hexathon~=0.1.7
confini~=0.6.0

View File

@ -3,7 +3,7 @@ name=chainlib
license=WTFPL2
author_email=dev@holbrook.no
description=Generic blockchain access library and tooling
version=0.1.0
version=0.2.1
url=https://gitlab.com/chaintools/chainlib
author=Louis Holbrook