Skip to content
Snippets Groups Projects
Commit 4b4cd080 authored by Dmitry Puzyrkov's avatar Dmitry Puzyrkov
Browse files

[+] necessary fixes & vrappers for bridge verificator.

parent d513d6b6
No related branches found
No related tags found
1 merge request!6Feature 10361
from CellFrame.Chain import ChainAddr
from pycfhelpers.node.net import CFNetID
class CFWalletAddress:
def __init__(self, addr_string: str):
self._original_addr = ChainAddr.fromStr(addr_string)
def net_id(self):
return CFNetID(self._original_addr.getNetId())
\ No newline at end of file
......@@ -53,11 +53,20 @@ class CFDatum:
class CFSubDatum:
def __init__(self, parent_datum: CFDatum,
sub_datum: DatumTx | DatumToken | DatumEmission | DatumDecree | DatumAnchor | bytes):
sub_datum: DatumTx | DatumToken | DatumEmission | DatumDecree | DatumAnchor | bytes,
net : 'CFNet' | None = None):
self._parent_datum = parent_datum
self._origin_sub_datum = sub_datum
self.hash = str(sub_datum.hash)
self.type = "DEFAULT"
if self._parent_datum and self._parent_datum.atom is None: # mempool datum
self._net = self._parent_datum.net
elif self._parent_datum: #from chains
self._net = self._parent_datum.atom.chain.net
else: # some custom created emission with no parent.
self._net = net
if sub_datum is None:
self.hash = parent_datum.hash
self.type = "CORRUPTED"
......@@ -65,17 +74,15 @@ class CFSubDatum:
@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
return self._net
T = TypeVar('T', bound=CFItem)
class CFDatumTX(CFSubDatum):
def __init__(self, parent_datum: CFDatum, sub_datum: DatumTx):
super().__init__(parent_datum, sub_datum)
def __init__(self, parent_datum: CFDatum, sub_datum: DatumTx, net : 'CFNet' | None = None):
super().__init__(parent_datum, sub_datum, net=net)
if self.type == "CORRUPTED":
return
......@@ -114,8 +121,8 @@ class CFDatumToken(CFSubDatum):
self.signs = []
class CFDatumEmission(CFSubDatum):
def __init__(self, parent_datum: CFDatum, sub_datum: DatumEmission):
super().__init__(parent_datum, sub_datum)
def __init__(self, parent_datum: CFDatum, sub_datum: DatumEmission, net:'CFNet' | None = None):
super().__init__(parent_datum, sub_datum, net=net)
if self.type == "CORRUPTED":
return
......@@ -124,7 +131,7 @@ class CFDatumEmission(CFSubDatum):
self.ticker = sub_datum.ticker
self.address = str(sub_datum.addr)
# TODO: Math --> CFMath
self.value = sub_datum.value.coins
self.value = sub_datum.value
if self.type == "TOKEN_EMISSION_TYPE_AUTH":
self.data = [CFSign(sign, self.net) for sign in sub_datum.signs]
else:
......
......@@ -31,14 +31,14 @@ class CFTxOut(CFItem):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.address = str(self._origin_item.addr)
self.value = self._origin_item.value.coins
self.value = self._origin_item.value
class CFTxOutCond(CFItem):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.expires = self._origin_item.tsExpires
self.value = self._origin_item.value.coins
self.value = self._origin_item.value
self.subtype = str(self._origin_item.typeSubtype)
......@@ -70,7 +70,7 @@ class CFTxOutExt(CFItem):
super().__init__(*args, **kwargs)
self.address = str(self._origin_item.addr)
self.ticker = self._origin_item.token
self.value = self._origin_item.value.coins
self.value = self._origin_item.value
class CFTxTSD(CFItem):
......@@ -89,7 +89,7 @@ class CFTxOutCondSubtypeSrvStakeLock(CFItem):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.unlock = self._origin_item.timeUnlock
self.value = self._origin_item.value.coins
self.value = self._origin_item.value
self.reinvest_percent = self._origin_item.reinvestPercent
......
from DAP.Core import Math
......@@ -4,7 +4,7 @@ import traceback
from pycfhelpers.logger import log
from DAP.Crypto import HashFast, Cert
from CellFrame.Network import Net
from CellFrame.Network import Net, NetID
from CellFrame.Chain import ChainAtomPtr, Ledger, ChainAddr, Mempool
from .consensus import CFEvent, CFBlock
......@@ -24,14 +24,29 @@ class NetFee:
self.validator_min_fee = str(self.net._origin_net.validatorMinFee)
self.native_ticker = self.net._origin_net.nativeTicker
class CFNetID:
def __init__(self, str_or_origin : str | NetID):
if isinstance(str_or_origin, NetID):
self._origin_net_id = str_or_origin
if isinstance(str_or_origin, str):
self._origin_net_id = NetID.fromStr(str_or_origin)
@property
def long(self):
return self._origin_net_id.long()
class CFNet:
def __init__(self, name: str):
self.name = name
self._origin_net = Net.byName(name)
if not self._origin_net:
raise RuntimeError(f"No such net: {name}")
def __init__(self, name_or_id: str | CFNetID ):
if isinstance(name_or_id, str):
self._origin_net = Net.byName(name_or_id)
if isinstance(name_or_id, CFNetID):
self._origin_net = Net.byId(name_or_id._origin_net_id)
if not self._origin_net:
raise RuntimeError(f"No such net: {name_or_id}")
self.name = self._origin_net.getName()
self.address = str(self._origin_net.getCurAddr())
self.main = CFChain(self, 'main')
self.zerochain = CFChain(self, 'zerochain')
......@@ -43,12 +58,12 @@ class CFNet:
return [CFNet(n.getName()) for n in Net.getNets()]
@staticmethod
def net_id_from_wallet(wallet) -> int:
def net_id_from_wallet_str(wallet: str) -> int:
return ChainAddr.fromStr(str(wallet)).getNetId().long()
@property
def id(self) -> int:
return self._origin_net.id.long()
def id(self) -> CFNetID:
return CFNetID(self._origin_net.id)
@property
def chains(self) -> list['CFChain']:
......@@ -112,10 +127,16 @@ class CFChain:
atom, size = self._origin_chain.atomIterGetNext(iterator)
def get_datums(self) -> Iterator[CFDatum]:
def get_datums(self, type : CFSubDatum | None = None) -> Iterator[CFDatum]:
for atom in self.get_atoms():
for datum in atom.get_datums():
yield datum
if type is None:
yield datum
elif isinstance(datum, type):
yield datum
else:
continue
def get_transactions(self) -> Iterator[CFDatumTX]:
for datum in self.get_datums():
......@@ -208,10 +229,16 @@ class CFLedger:
return False
return True
def get_emission(self, emission_hash: str) -> CFDatumEmission:
"""
Get emission from ledger
"""
return CFDatumEmission(None, self._origin_ledger.tokenEmissionFind(HashFast.fromString(emission_hash)),net=self.net)
def tx_by_hash(self, hash: str) -> CFDatumTX:
hf = HashFast.fromString(hash)
tx = CFDatumTX(self._origin_ledger.txFindByHash(hf))
tx = CFDatumTX(None, self._origin_ledger.txFindByHash(hf), net=self.net)
return tx
......
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