Skip to content
Snippets Groups Projects
Commit 0f87d806 authored by inso's avatar inso
Browse files

Block parsing

parent 5e162333
No related branches found
No related tags found
No related merge requests found
......@@ -4,11 +4,13 @@ Created on 3 déc. 2014
@author: inso
'''
import base58
import time
import re
from ..key import Base58Encoder
class Document:
RE_VERSION = re.compile("Version: ([0-9]+)\n")
def __init__(self, version):
self.version = version
......
......@@ -6,6 +6,11 @@ Created on 2 déc. 2014
from .. import PROTOCOL_VERSION
from . import Document
from .certification import SelfCertification, Certification
from .membership import Membership
from .transaction import Transaction
import re
class Block(Document):
......@@ -48,7 +53,27 @@ COMPACT_TRANSACTION
BOTTOM_SIGNATURE
'''
def __init__(self, currency, noonce, number, powmin, time,
re_currency = re.compile("Currency: ([0-9a-zA-Z_\-]+)\n")
re_noonce = re.compile("Nonce: ([0-9]+)\n")
re_number = re.compile("Number: ([0-9]+)\n")
re_powmin = re.compile("PoWMin: ([0-9]+)\n")
re_time = re.compile("Time: ([0-9]+)\n")
re_mediantime = re.compile("MedianTime: ([0-9]+)\n")
re_universaldividend = re.compile("UniversalDividend: ([0-9]+)\n")
re_issuer = re.compile("Issuer: ([1-9A-Za-z][^OIl]{43,45})\n")
re_previoushash = re.compile("PreviousHash: ([0-9a-fA-F]{5,40})\n")
re_previousissuer = re.compile("PreviousIssuer: ([1-9A-Za-z][^OIl]{43,45})\n")
re_parameters = re.compile("Parameters: ([0-9]+\.[0-9]+)(:[0-9]+){10}\n")
re_memberscount = re.compile("MembersCount: ([0-9]+)\n")
re_identities = re.compile("Identities:\n")
re_joiners = re.compile("Joiners:\n")
re_actives = re.compile("Actives:\n")
re_leavers = re.compile("Leavers:\n")
re_excluded = re.compile("Excluded:\n")
re_certifications = re.compile("Certifications:\n")
re_transactions = re.compile("Transactions:\n")
def __init__(self, version, currency, noonce, number, powmin, time,
mediantime, ud, issuer, prev_hash, prev_issuer,
parameters, members_count, identities, joiners,
actives, leavers, excluded, certifications,
......@@ -56,6 +81,7 @@ BOTTOM_SIGNATURE
'''
Constructor
'''
super(version)
self.currency = currency
self.noonce = noonce
self.number = number
......@@ -82,59 +108,106 @@ BOTTOM_SIGNATURE
lines = raw.splitlines(True)
n = 0
version_re = re.compile("Version: ([0-9]+)\n")
version = version_re.match(lines[n])
version = Block.RE_VERSION.match(lines[n])
n = 1
currency_re = re.compile("Currency: ([0-9a-zA-Z_\-]+)\n"
currency = currency_re.match(lines[n])
currency = Block.re_currency.match(lines[n])
n = 2
noonce_re = re.compile("Nonce: ([0-9]+)\n")
noonce = nonce_re.match(lines[n])
noonce = int(Block.re_noonce.match(lines[n]))
n = 3
number_re = re.compile("Number: ([0-9]+)\n")
number = number_re.match(lines[n])
number = int(Block.re_number.match(lines[n]))
n = 4
powmin_re = re.compile("PoWMin: ([0-9]+)\n")
powmin = powmin.match(lines[n])
powmin = int(Block.re_powmin.match(lines[n]))
n = 5
time_re = re.compile("Time: ([0-9]+)\n")
time = time.match(lines[n])
time = int(Block.re_time.match(lines[n]))
n = 6
mediantime_re = re.compile("MedianTime: ([0-9]+)\n")
mediantime = mediantime_re.match(line[n])
mediantime = int(Block.re_mediantime.match(lines[n]))
n = 7
ud_re = re.compile("UniversalDividend: ([0-9]+)\n")
ud = ud_re.match(line[n])
n = 8
issuer_re = re.compile("Issuer: ([1-9A-Za-z][^OIl]{43,45})\n")
issuer = issuer_re.match(line[n])
n = 9
previoushash_re = re.compile("PreviousHash: ([0-9a-fA-F]{5,40})\n")
prev_hash = previoushash_re.match(line[n])
n = 10
previousissuer_re = re.compile("PreviousIssuer: ([1-9A-Za-z][^OIl]{43,45})\n")
prev_issuer = previousissuer_re.match(line[n])
parameters = ""
members_count = ""
identities = ""
joiners = ""
actives = ""
leavers = ""
excluded = ""
certifications = ""
transactions = ""
return cls([])
ud = Block.re_universaldividend.match(lines[n])
if ud is not None:
ud = int(ud)
n = n + 1
issuer = Block.re_issuer.match(lines[n])
n = n + 1
prev_hash = Block.re_previoushash.match(lines[n])
n = n + 1()
prev_issuer = Block.re_previousissuer.match(lines[n])
n = n + 1
if number == 0:
parameters = Block.re_parameters.match(lines[n])
n = n + 1
members_count = int(Block.re_memberscount.match(lines[n]))
n = n + 1
identities = []
joiners = []
actives = []
leavers = []
excluded = []
certifications = []
transactions = []
if Block.re_identities.match(lines[n]) is not None:
while Block.re_joiners.match(lines[n]) is None:
selfcert = SelfCertification.from_inline(lines[n])
if selfcert is None:
return None
else:
identities.append(selfcert)
lines = lines + 1
if Block.re_joiners.match(lines[n]) is not None:
while Block.re_actives.match(lines[n]) is None:
membership = Membership.from_inline(lines[n])
joiners.append(membership)
lines = lines + 1
if Block.re_actives.match(lines[n]) is not None:
while Block.re_leavers.match(lines[n]) is None:
membership = Membership.from_inline(lines[n])
actives.append(membership)
lines = lines + 1
if Block.re_leavers.match(lines[n]) is not None:
while Block.re_excluded.match(lines[n]) is None:
membership = Membership.from_inline(lines[n])
leavers.append(membership)
lines = lines + 1
if Block.re_excluded.match(lines[n]) is not None:
while Block.re_certifications.match(lines[n]) is None:
membership = Membership.from_inline(lines[n])
excluded.append(membership)
lines = lines + 1
if Block.re_certifications.match(lines[n]) is not None:
while Block.re_transactions.match(lines[n]) is None:
certification = Certification.from_inline(lines[n])
certifications.append(certification)
lines = lines + 1
if Block.re_transactions.match(lines[n]) is not None:
while Block.re_transactions.match(lines[n]) is None:
transaction = Transaction.from_compact(lines[n])
transactions.append(transaction)
lines = lines + 1
return cls(version, currency, noonce, number, powmin, time,
mediantime, ud, issuer, prev_hash, prev_issuer,
parameters, members_count, identities, joiners,
actives, leavers, excluded, certifications, transactions)
def content(self):
doc = """
......
......@@ -11,9 +11,13 @@ class SelfCertification(Document):
A document discribing a self certification.
'''
def __init__(self, ts, identifier):
super(ts)
self.identifier = identifier
self.timestamp = timestamp
self.timestamp = ts
@classmethod
def from_inline(cls, inline):
#TODO : Parsing
return cls()
@classmethod
def from_raw(cls, raw):
......@@ -42,6 +46,9 @@ class Certification(Document):
self.selfcert = selfcert
self.blockid = blockid
@classmethod
def from_inline(cls, inline):
return cls()
@classmethod
def from_raw(cls, raw):
......
......@@ -32,14 +32,16 @@ class Membership(object):
self.userid = userid
self.cert_ts = cert_ts
@classmethod
def from_inline(cls, inline):
#TODO: Parsing
return None
@classmethod
def from_raw(cls, raw):
#TODO : Parsing
return cls()
def content(self):
return """
Version: {0}
......
......@@ -37,6 +37,10 @@ SIGNATURES
self.outputs = outputs
self.comment = comment
@classmethod
def from_compact(cls, compact):
return None
@classmethod
def from_raw(cls, raw):
#TODO : Parsing
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment