Skip to content
Snippets Groups Projects
Commit 94030462 authored by boo's avatar boo
Browse files

add mempool, net fee

parent 7d5d2822
No related branches found
No related tags found
No related merge requests found
......@@ -19,20 +19,23 @@ from .types import ticker, TSD
class CFDatum:
__slots__ = ["_origin_datum", "hash", "type", "created_at", "atom", "size", "version"]
# __slots__ = ["_origin_datum", "hash", "type", "created_at", "atom", "size", "version", "net"]
def __init__(self, atom: CFBlock | CFEvent, datum: Datum):
def __init__(self, atom: CFBlock | CFEvent | None, datum: Datum, net: CFNet | None = None):
self._origin_datum = datum
self.size = datum.getSize()
self.hash = str(datum.hash)
self.type = datum.getTypeStr()
self.version = datum.versionStr
self.size = datum.getSize()
try:
self.created_at = datum.tsCreated
except OSError:
self.created_at = datetime.fromtimestamp(0)
logIt.error(f"Datum [{datum.hash}] has invalid timestamp!")
self.type = datum.getTypeStr()
self.hash = str(datum.hash)
self.atom = atom
if atom is None and net is None:
raise AttributeError("A datum without a parent atom requires a net")
self.atom = atom # atom == None - datum in mempool
self.net = net
def get_sub_datum(
self) -> CFDatumTX | CFDatumToken | CFDatumEmission | CFDatumAnchor | CFDatumDecree | CFDatumCustom:
......@@ -53,6 +56,8 @@ class SubDatum:
@property
def net(self) -> 'CFNet':
if self._parent_datum.atom is None: # mempool datum
return self._parent_datum.net
return self._parent_datum.atom.chain.net
......@@ -70,6 +75,10 @@ class CFDatumTX(SubDatum):
self.ticker = ledger.get_tx_ticker(self)
self.accepted = bool(ticker)
@property
def items(self) -> list[CFItem]:
return self.get_items()
def get_items(self, filter_type: type[T] | None = None) -> list[T]:
from .mappings import CFItemMapper
all_items = [CFItemMapper.build(item, self.net) for item in self._origin_sub_datum.getItems()
......
......@@ -5,12 +5,24 @@ import traceback
from DAP.Core import logIt
from DAP.Crypto import HashFast
from CellFrame.Network import Net
from CellFrame.Chain import ChainAtomPtr, Ledger, ChainAddr
from CellFrame.Chain import ChainAtomPtr, Ledger, ChainAddr, Mempool
from .consensus import CFEvent, CFBlock
from .datums import CFDatum, CFDatumTX
from .types import CFNetState, ticker
from ..common.types import ChainTypes
from dataclasses import dataclass
class NetFee:
def __init__(self, net: 'CFNet'):
self.net = net
self.tx_fee = str(self.net._origin_net.txFee)
self.tx_fee_addr = str(self.net._origin_net.txFeeAddr)
self.validator_avg_fee = str(self.net._origin_net.validatorAverageFee)
self.validator_max_fee = str(self.net._origin_net.validatorMaxFee)
self.validator_min_fee = str(self.net._origin_net.validatorMinFee)
self.native_ticker = self.net._origin_net.nativeTicker
class CFNet:
......@@ -21,6 +33,7 @@ class CFNet:
raise RuntimeError(f"No such net: {name}")
self.main = CFChain(self, 'main')
self.zerochain = CFChain(self, 'zerochain')
self.fee_data = NetFee(self)
@property
def id(self) -> int:
......@@ -89,6 +102,9 @@ class CFChain:
if datum._origin_datum.isDatumTX():
yield datum.get_sub_datum()
def get_mempool(self) -> 'CFMempool':
return CFMempool(self)
def register_mempool_notification_callback(self, callback, *args, **kwargs):
def callback_wrapper(op_code, group, key, value, *other):
logIt.message(f"{other=}")
......@@ -140,3 +156,15 @@ class CFLedger:
callback(ledger, tx, *args, net=self.net, **kwargs)
self._origin_ledger.txAddNotify(callback_wrapper, (args, kwargs))
class CFMempool:
def __init__(self, chain: CFChain):
self.chain = chain
def get_datums(self) -> list[CFDatum]:
data = Mempool.list(self.chain.net._origin_net, self.chain._origin_chain)
logIt.message(f"{data.keys()=}")
return [CFDatum(None, datum, net=self.chain.net) for datum in data.values()]
# def emissionExtract
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment