Skip to content
Snippets Groups Projects
Commit fd141ce3 authored by Vincent Texier's avatar Vincent Texier
Browse files

[enh] format files with black

parent 3d1325ea
Branches
Tags
No related merge requests found
......@@ -9,6 +9,3 @@ class Cert:
written_on = attr.ib()
block = attr.ib()
mediantime = attr.ib()
......@@ -7,6 +7,3 @@ class UD:
base = attr.ib(repr=True)
block_number = attr.ib()
time = attr.ib()
......@@ -19,4 +19,3 @@ class UserIdentity:
tx_sent = attr.ib(default=attr.Factory(list))
tx_received = attr.ib(default=attr.Factory(list))
ud_generated = attr.ib(default=attr.Factory(list))
from duniterpy.documents import Block, BlockUID, Certification, Identity, Membership, \
Revocation, Transaction, InputSource
from duniterpy.documents import (
Block,
BlockUID,
Certification,
Identity,
Membership,
Revocation,
Transaction,
InputSource,
)
from duniterpy.key import SigningKey
import time
import attr
......@@ -16,13 +24,20 @@ class BlockForge:
"""
The block forge generates a blockchain with a PoW of 1
"""
currency = attr.ib(validator=attr.validators.instance_of(str))
key = attr.ib(validator=attr.validators.instance_of(SigningKey))
pool = attr.ib(default=attr.Factory(list), validator=attr.validators.instance_of(list))
blocks = attr.ib(default=attr.Factory(list), validator=attr.validators.instance_of(list))
user_identities = attr.ib(default=attr.Factory(dict), validator=attr.validators.instance_of(dict))
pool = attr.ib(
default=attr.Factory(list), validator=attr.validators.instance_of(list)
)
blocks = attr.ib(
default=attr.Factory(list), validator=attr.validators.instance_of(list)
)
user_identities = attr.ib(
default=attr.Factory(dict), validator=attr.validators.instance_of(dict)
)
_ud = attr.ib(default=False, validator=attr.validators.instance_of(bool))
_logger = attr.ib(default=attr.Factory(lambda: logging.getLogger('mirage')))
_logger = attr.ib(default=attr.Factory(lambda: logging.getLogger("mirage")))
@classmethod
def start(cls, currency, salt, password, scrypt_params):
......@@ -67,17 +82,39 @@ class BlockForge:
return [r for r in self.pool if type(r) is Revocation]
def joiners(self):
return [d for d in self.pool if type(d) is Membership and d.membership_type == 'IN'
and ((d.issuer in self.user_identities and not self.user_identities[d.issuer].member)
or d.issuer in [d.pubkey for d in self.pool if type(d) is Identity])]
return [
d
for d in self.pool
if type(d) is Membership
and d.membership_type == "IN"
and (
(
d.issuer in self.user_identities
and not self.user_identities[d.issuer].member
)
or d.issuer in [d.pubkey for d in self.pool if type(d) is Identity]
)
]
def actives(self):
return [d for d in self.pool if type(d) is Membership and d.membership_type == 'IN'
and d.issuer in self.user_identities and self.user_identities[d.issuer].member]
return [
d
for d in self.pool
if type(d) is Membership
and d.membership_type == "IN"
and d.issuer in self.user_identities
and self.user_identities[d.issuer].member
]
def leavers(self):
return [d for d in self.pool if type(d) is Membership and d.membership_type == 'OUT'
and d.issuer in self.user_identities and self.user_identities[d.issuer].member]
return [
d
for d in self.pool
if type(d) is Membership
and d.membership_type == "OUT"
and d.issuer in self.user_identities
and self.user_identities[d.issuer].member
]
def excluded(self):
# for pylint
......@@ -93,8 +130,28 @@ class BlockForge:
def parameters(self):
if not self.blocks:
return 0.1, 86400, 100000, 10800, 40, 2629800, 31557600, 1, 604800, 604800,\
0.9, 15778800, 5, 12, 300, 25, 0.66, 1488970800, 1490094000, 15778800
return (
0.1,
86400,
100000,
10800,
40,
2629800,
31557600,
1,
604800,
604800,
0.9,
15778800,
5,
12,
300,
25,
0.66,
1488970800,
1490094000,
15778800,
)
return None
def monetary_mass(self, number=None):
......@@ -105,10 +162,15 @@ class BlockForge:
return mass
def set_member(self, pubkey, member):
self._logger.info("Set {0} ({1}) as member : {2}".format(self.user_identities[pubkey].uid,
pubkey[:5], member))
self._logger.info(
"Set {0} ({1}) as member : {2}".format(
self.user_identities[pubkey].uid, pubkey[:5], member
)
)
self.user_identities[pubkey].member = member
self.user_identities[pubkey].was_member = self.user_identities[pubkey].was_member or member
self.user_identities[pubkey].was_member = (
self.user_identities[pubkey].was_member or member
)
def generate_dividend(self):
self._logger.info("Generate dividend")
......@@ -128,13 +190,35 @@ class BlockForge:
certifications = self.certifications()
transactions = self.transactions()
block = Block(10, self.currency, len(self.blocks), 1, int(time.time()),
int(time.time()), self.next_dividend(), 0,
self.key.pubkey, 5, 5, 5, previous_hash, previous_issuer,
parameters, members_count, identities,
joiners, actives, leavers,
revocations, excluded, certifications,
transactions, "", 0, None)
block = Block(
10,
self.currency,
len(self.blocks),
1,
int(time.time()),
int(time.time()),
self.next_dividend(),
0,
self.key.pubkey,
5,
5,
5,
previous_hash,
previous_issuer,
parameters,
members_count,
identities,
joiners,
actives,
leavers,
revocations,
excluded,
certifications,
transactions,
"",
0,
None,
)
block.inner_hash = block.computed_inner_hash()
return block
......@@ -147,62 +231,94 @@ class BlockForge:
self.blocks.append(block)
for identity in block.identities:
self.user_identities[identity.pubkey] = UserIdentity(pubkey=identity.pubkey, uid=identity.uid,
self.user_identities[identity.pubkey] = UserIdentity(
pubkey=identity.pubkey,
uid=identity.uid,
blockstamp=identity.timestamp,
signature=identity.signatures[0],
was_member=True,
member=True)
self._logger.info("New identity : {0}".format(self.user_identities[identity.pubkey]))
member=True,
)
self._logger.info(
"New identity : {0}".format(self.user_identities[identity.pubkey])
)
if block.ud:
for identity in self.user_identities.values():
if identity.member:
identity.sources.append(InputSource(block.ud, block.unit_base, 'D', identity.pubkey, block.number))
identity.ud_generated.append(UD(amount=block.ud,
identity.sources.append(
InputSource(
block.ud,
block.unit_base,
"D",
identity.pubkey,
block.number,
)
)
identity.ud_generated.append(
UD(
amount=block.ud,
base=block.unit_base,
block_number=block.number,
time=block.mediantime))
time=block.mediantime,
)
)
for certification in block.certifications:
cert = Cert(from_identity=self.user_identities[certification.pubkey_from],
cert = Cert(
from_identity=self.user_identities[certification.pubkey_from],
to_identity=self.user_identities[certification.pubkey_to],
signature=certification.signatures[0],
written_on=block.blockUID,
block=certification.timestamp.number,
mediantime=next(b.mediantime
for b in self.blocks if b.number == certification.timestamp.number))
mediantime=next(
b.mediantime
for b in self.blocks
if b.number == certification.timestamp.number
),
)
self.user_identities[certification.pubkey_from].certs_sent.append(cert)
self.user_identities[certification.pubkey_to].certs_received.append(cert)
for membership in block.joiners + block.actives + block.leavers:
self.user_identities[membership.issuer].memberships.append(MS(pubkey=membership.issuer,
self.user_identities[membership.issuer].memberships.append(
MS(
pubkey=membership.issuer,
type=membership.membership_type,
written_on=block.number,
blockstamp=membership.membership_ts,
timestamp=block.mediantime))
timestamp=block.mediantime,
)
)
for tx in block.transactions:
receivers = [o.conditions.left.pubkey for o in tx.outputs
if o.conditions.left.pubkey != tx.issuers[0]]
receivers = [
o.conditions.left.pubkey
for o in tx.outputs
if o.conditions.left.pubkey != tx.issuers[0]
]
self.user_identities[tx.issuers[0]].tx_sent.append(tx)
for input_source in tx.inputs:
for s in self.user_identities[tx.issuers[0]].sources:
if s.origin_id == input_source.origin_id and s.index == input_source.index:
if (
s.origin_id == input_source.origin_id
and s.index == input_source.index
):
self.user_identities[tx.issuers[0]].sources.remove(s)
for i, output in enumerate(tx.outputs):
if output.conditions.left.pubkey == tx.issuers[0]:
self.user_identities[tx.issuers[0]].sources.append(InputSource(output.amount,
output.base,
'T', tx.sha_hash, i))
self.user_identities[tx.issuers[0]].sources.append(
InputSource(output.amount, output.base, "T", tx.sha_hash, i)
)
self.user_identities[tx.issuers[0]].tx_received.append(tx)
if len(receivers) > 0:
for i, output in enumerate(tx.outputs):
if output.conditions.left.pubkey == receivers[0]:
self.user_identities[receivers[0]].sources.append(InputSource(output.amount,
output.base,
'T', tx.sha_hash, i))
self.user_identities[receivers[0]].sources.append(
InputSource(output.amount, output.base, "T", tx.sha_hash, i)
)
self.user_identities[receivers[0]].tx_received.append(tx)
self.pool = []
......@@ -12,7 +12,7 @@ class Request:
def find_unused_port():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 0))
s.bind(("127.0.0.1", 0))
port = s.getsockname()[1]
s.close()
return port
......@@ -37,10 +37,13 @@ class HTTPServer:
resp = await handler(request)
return resp
except web.HTTPNotFound:
return web.Response(status=404, body=bytes(json.dumps({"ucode":1001,
"message": "404 error"}),
"utf-8"),
headers={'Content-Type': 'application/json'})
return web.Response(
status=404,
body=bytes(
json.dumps({"ucode": 1001, "message": "404 error"}), "utf-8"
),
headers={"Content-Type": "application/json"},
)
return middleware_handler
......@@ -48,24 +51,26 @@ class HTTPServer:
await request.read()
self.requests.append(Request(request.method, request.path, request.content))
json_data, http_code = await handle(request)
return web.Response(body=bytes(json.dumps(json_data), "utf-8"),
headers={'Content-Type': 'application/json'},
status=http_code)
return web.Response(
body=bytes(json.dumps(json_data), "utf-8"),
headers={"Content-Type": "application/json"},
status=http_code,
)
def add_route(self, req_type, url, handle):
self.app.router.add_route(req_type, url,
lambda request: self._handler(request, handle))
self.app.router.add_route(
req_type, url, lambda request: self._handler(request, handle)
)
async def create_server(self, ssl_ctx=None):
self.handler = self.app.make_handler(
keep_alive_on=False,
access_log=log.access_logger,
keep_alive_on=False, access_log=log.access_logger,
)
self.port = find_unused_port()
self.runner = web.AppRunner(self.app)
await self.runner.setup()
site = web.TCPSite(self.runner, '127.0.0.1', self.port)
site = web.TCPSite(self.runner, "127.0.0.1", self.port)
await site.start()
protocol = "https" if ssl_ctx else "http"
......
This diff is collapsed.
import attr
import logging
from duniterpy.documents import Identity, Membership, BlockUID, Certification, \
OutputSource, Transaction, Unlock, SIGParameter
from duniterpy.documents import (
Identity,
Membership,
BlockUID,
Certification,
OutputSource,
Transaction,
Unlock,
SIGParameter,
)
from duniterpy.documents.transaction import reduce_base
from duniterpy.grammars import output
from duniterpy.key import SigningKey
......@@ -30,12 +38,17 @@ def outputs_from_sources(amount, sources):
test_sources = result_sources + [s]
# if we have to compute an overhead
if current_value(test_sources, overheads) > amount * (10 ** amount_base):
overhead = current_value(test_sources, overheads) - int(amount) * (10 ** amount_base)
overhead = current_value(test_sources, overheads) - int(amount) * (
10 ** amount_base
)
# we round the overhead in the current base
# exemple : 12 in base 1 -> 1*10^1
overhead = int(round(float(overhead) / (10 ** current_base)))
source_value = s.amount * (10 ** s.base)
out = int((source_value - (overhead * (10 ** current_base))) / (10 ** current_base))
out = int(
(source_value - (overhead * (10 ** current_base)))
/ (10 ** current_base)
)
if out * (10 ** current_base) <= amount * (10 ** amount_base):
result_sources.append(s)
buf_sources.remove(s)
......@@ -58,6 +71,7 @@ class User:
"""
The user generates identities documents and sign them
"""
SCRYPT_PARAMS = ScryptParams(2 ** 12, 16, 1)
currency = attr.ib(validator=attr.validators.instance_of(str))
......@@ -66,33 +80,59 @@ class User:
salt = attr.ib(validator=attr.validators.instance_of(str))
password = attr.ib(validator=attr.validators.instance_of(str))
blockstamp = attr.ib(validator=attr.validators.instance_of(BlockUID))
_logger = attr.ib(default=attr.Factory(lambda: logging.getLogger('mirage')))
_logger = attr.ib(default=attr.Factory(lambda: logging.getLogger("mirage")))
@classmethod
def create(cls, currency, uid, salt, password, blockstamp):
return cls(currency, uid, SigningKey.from_credentials(salt, password, User.SCRYPT_PARAMS), salt, password,
blockstamp)
return cls(
currency,
uid,
SigningKey.from_credentials(salt, password, User.SCRYPT_PARAMS),
salt,
password,
blockstamp,
)
def identity(self):
identity = Identity(10, self.currency, self.key.pubkey, self.uid, self.blockstamp, None)
identity = Identity(
10, self.currency, self.key.pubkey, self.uid, self.blockstamp, None
)
identity.sign([self.key])
return identity
def join(self, blockstamp):
ms_doc = Membership(10, self.currency, self.key.pubkey, blockstamp,
'IN', self.uid, self.blockstamp, None)
ms_doc = Membership(
10,
self.currency,
self.key.pubkey,
blockstamp,
"IN",
self.uid,
self.blockstamp,
None,
)
ms_doc.sign([self.key])
return ms_doc
def leave(self, blockstamp):
ms_doc = Membership(10, self.currency, self.key.pubkey, blockstamp,
'OUT', self.uid, self.blockstamp, None)
ms_doc = Membership(
10,
self.currency,
self.key.pubkey,
blockstamp,
"OUT",
self.uid,
self.blockstamp,
None,
)
ms_doc.sign([self.key])
return ms_doc
def certify(self, other, blockstamp):
cert = Certification(10, self.currency, self.key.pubkey, other.identity(), blockstamp, None)
cert = Certification(
10, self.currency, self.key.pubkey, other.identity(), blockstamp, None
)
cert.sign([self.key])
return cert
......@@ -104,8 +144,15 @@ class User:
for o in outputs:
if o[1] == base:
output_sum += o[0]
total.append(OutputSource(output_sum, base, output.Condition.token(output.SIG.token(receiver.key.pubkey))
.compose(output.Condition())))
total.append(
OutputSource(
output_sum,
base,
output.Condition.token(
output.SIG.token(receiver.key.pubkey)
).compose(output.Condition()),
)
)
overheads_bases = set(o[1] for o in overheads)
for base in overheads_bases:
......@@ -113,8 +160,15 @@ class User:
for o in overheads:
if o[1] == base:
overheads_sum += o[0]
total.append(OutputSource(overheads_sum, base, output.Condition.token(output.SIG.token(self.key.pubkey))
.compose(output.Condition())))
total.append(
OutputSource(
overheads_sum,
base,
output.Condition.token(output.SIG.token(self.key.pubkey)).compose(
output.Condition()
),
)
)
return total
......@@ -130,8 +184,17 @@ class User:
unlocks.append(Unlock(i, [SIGParameter(0)]))
outputs = self.tx_outputs(receiver, computed_outputs, overheads)
tx = Transaction(3, self.currency, blockstamp, 0,
[self.key.pubkey], inputs, unlocks,
outputs, message, [])
tx = Transaction(
3,
self.currency,
blockstamp,
0,
[self.key.pubkey],
inputs,
unlocks,
outputs,
message,
[],
)
tx.sign([self.key])
return tx
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment