diff --git a/silkaj/blocks.py b/silkaj/blocks.py index 6f807656170656fba88c5d5b4a9c83ff04fa8613..d72374ce0ca97b845b6a822bb02f1dc057718247 100644 --- a/silkaj/blocks.py +++ b/silkaj/blocks.py @@ -88,8 +88,7 @@ def get_chunk(client, chunk_size, chunk_from): def verify_block_signature(invalid_blocks_signatures, block): - key = VerifyingKey(block.issuer) - if not key.verify_document(block): + if not block.check_signature(block.issuer): invalid_blocks_signatures.append(block.number) diff --git a/silkaj/cert.py b/silkaj/cert.py index a828f5d1781a38378dec9252c4c4ec4dffcaca5f..8ed380f2173415207893dbbc4c4bd5d292e82329 100644 --- a/silkaj/cert.py +++ b/silkaj/cert.py @@ -17,7 +17,7 @@ import sys import click from duniterpy.api import bma -from duniterpy.documents import BlockUID, Certification, Identity, block_uid +from duniterpy.documents import BlockID, Certification, Identity, get_block_id from pendulum import from_timestamp, now from tabulate import tabulate @@ -62,21 +62,20 @@ def send_certification(ctx, uid_pubkey_to_certify): ctx, issuer, issuer_pubkey, pubkey_to_certify, idty_to_certify ) + # Create and sign certification document certification = docs_generation( currency, pubkey_to_certify, idty_to_certify, issuer_pubkey, head, + key, ) if ctx.obj["DISPLAY_DOCUMENT"]: click.echo(certification.signed_raw(), nl=False) tui.send_doc_confirmation("certification") - # Sign document - certification.sign([key]) - # Send certification document send_document(bma.wot.certify, certification) @@ -117,11 +116,11 @@ def certification_confirmation( cert.append(["Cert", "Issuer", "–>", "Recipient: Published: #block-hash date"]) client = ClientInstance().client idty_timestamp = idty_to_certify["meta"]["timestamp"] - block_uid_idty = block_uid(idty_timestamp) - block = client(bma.blockchain.block, block_uid_idty.number) + block_id_idty = get_block_id(idty_timestamp) + block = client(bma.blockchain.block, block_id_idty.number) timestamp_date = from_timestamp(block["time"], tz="local").format(ALL) - block_uid_date = f": #{idty_timestamp[:15]}… {timestamp_date}" - cert.append(["ID", issuer["uid"], "–>", idty_to_certify["uid"] + block_uid_date]) + block_id_date = f": #{idty_timestamp[:15]}… {timestamp_date}" + cert.append(["ID", issuer["uid"], "–>", idty_to_certify["uid"] + block_id_date]) cert.append( [ "Pubkey", @@ -139,21 +138,21 @@ def certification_confirmation( tui.send_doc_confirmation("certification") -def docs_generation(currency, pubkey_to_certify, idty_to_certify, issuer_pubkey, head): +def docs_generation( + currency, pubkey_to_certify, idty_to_certify, issuer_pubkey, head, key +): identity = Identity( - version=10, - currency=currency, pubkey=pubkey_to_certify, uid=idty_to_certify["uid"], - ts=block_uid(idty_to_certify["meta"]["timestamp"]), - signature=idty_to_certify["self"], + block_id=get_block_id(idty_to_certify["meta"]["timestamp"]), + currency=currency, ) + identity.signature = idty_to_certify["self"] return Certification( - version=10, - currency=currency, pubkey_from=issuer_pubkey, identity=identity, - timestamp=BlockUID(head["number"], head["hash"]), - signature="", + block_id=BlockID(head["number"], head["hash"]), + signing_key=key, + currency=currency, ) diff --git a/silkaj/membership.py b/silkaj/membership.py index ccb06635361084edb6db0231edae519647161b17..96418f161bedbd3a0d5a30921563a09d9b587662 100644 --- a/silkaj/membership.py +++ b/silkaj/membership.py @@ -19,7 +19,7 @@ import sys import click import pendulum from duniterpy.api import bma -from duniterpy.documents import BlockUID, Membership, block_uid +from duniterpy.documents import BlockID, Membership, get_block_id from tabulate import tabulate from silkaj import auth, tui, wot @@ -43,10 +43,10 @@ def send_membership(ctx): # Get the identity information head_block = HeadBlock().head_block - membership_timestamp = BlockUID(head_block["number"], head_block["hash"]) + membership_block_id = BlockID(head_block["number"], head_block["hash"]) identity = (wot.choose_identity(key.pubkey))[0] identity_uid = identity["uid"] - identity_timestamp = block_uid(identity["meta"]["timestamp"]) + identity_block_id = get_block_id(identity["meta"]["timestamp"]) # Display license and ask for confirmation currency = head_block["currency"] @@ -55,21 +55,20 @@ def send_membership(ctx): # Confirmation client = ClientInstance().client - display_confirmation_table(identity_uid, key.pubkey, identity_timestamp) + display_confirmation_table(identity_uid, key.pubkey, identity_block_id) if not dry_run and not ctx.obj["DISPLAY_DOCUMENT"]: tui.send_doc_confirmation("membership document for this identity") + # Create and sign membership document membership = generate_membership_document( - currency, key.pubkey, - membership_timestamp, + membership_block_id, identity_uid, - identity_timestamp, + identity_block_id, + currency, + key, ) - # Sign document - membership.sign([key]) - logging.debug(membership.signed_raw()) if dry_run: @@ -84,7 +83,7 @@ def send_membership(ctx): send_document(bma.blockchain.membership, membership) -def display_confirmation_table(identity_uid, pubkey, identity_timestamp): +def display_confirmation_table(identity_uid, pubkey, identity_block_id): """ Check whether there is pending memberships already in the mempool Display their expiration date @@ -121,9 +120,9 @@ def display_confirmation_table(identity_uid, pubkey, identity_timestamp): table.append(["User Identifier (UID)", identity_uid]) table.append(["Public Key", tui.display_pubkey_and_checksum(pubkey)]) - table.append(["Block Identity", str(identity_timestamp)[:45] + "…"]) + table.append(["Block Identity", str(identity_block_id)[:45] + "…"]) - block = client(bma.blockchain.block, identity_timestamp.number) + block = client(bma.blockchain.block, identity_block_id.number) date_idty_pub = pendulum.from_timestamp(block["time"], tz="local").format(DATE) table.append(["Identity published", date_idty_pub]) @@ -144,18 +143,18 @@ def display_confirmation_table(identity_uid, pubkey, identity_timestamp): def generate_membership_document( - currency, pubkey, - membership_timestamp, + membership_block_id, identity_uid, - identity_timestamp, + identity_block_id, + currency, + key=None, ): return Membership( - version=10, - currency=currency, issuer=pubkey, - membership_ts=membership_timestamp, - membership_type="IN", + membership_block_id=membership_block_id, uid=identity_uid, - identity_ts=identity_timestamp, + identity_block_id=identity_block_id, + currency=currency, + signing_key=key, ) diff --git a/silkaj/tx.py b/silkaj/tx.py index 9cc92c52d598186c956a2861c9d491457cde6940..3596e0beed14880996e6de10c962d198e389184d 100644 --- a/silkaj/tx.py +++ b/silkaj/tx.py @@ -18,7 +18,7 @@ from re import compile, search import click from duniterpy.api.bma.tx import process -from duniterpy.documents import BlockUID, Transaction +from duniterpy.documents import BlockID, Transaction from duniterpy.documents.transaction import OutputSource, SIGParameter, Unlock from tabulate import tabulate @@ -401,7 +401,7 @@ def generate_and_send_transaction( Comment, OutputbackChange, ) - transaction.sign([key]) + transaction.sign(key) nt.send_document(process, transaction) @@ -429,7 +429,7 @@ def generate_transaction_document( head_block = bt.HeadBlock().head_block currency_name = head_block["currency"] - blockstamp_current = BlockUID(head_block["number"], head_block["hash"]) + current_block_id = BlockID(head_block["number"], head_block["hash"]) curentUnitBase = head_block["unitbase"] if not OutputbackChange: @@ -458,16 +458,14 @@ def generate_transaction_document( ############################## return Transaction( - version=10, - currency=currency_name, - blockstamp=blockstamp_current, + block_id=current_block_id, locktime=0, issuers=[issuers], inputs=listinput, unlocks=unlocks, outputs=listoutput, comment=Comment, - signatures=[], + currency=currency_name, ) diff --git a/silkaj/tx_history.py b/silkaj/tx_history.py index f0807e2f621386c0336f21cc87d1ded9695f9bc0..fa6b18f68b7495a59119f0ac5f7a4872c2619a5f 100644 --- a/silkaj/tx_history.py +++ b/silkaj/tx_history.py @@ -83,9 +83,9 @@ def get_transactions_history(client, pubkey, received_txs, sent_txs): currency = tx_history["currency"] for received in tx_history["history"]["received"]: - received_txs.append(Transaction.from_bma_history(currency, received)) + received_txs.append(Transaction.from_bma_history(received, currency)) for sent in tx_history["history"]["sent"]: - sent_txs.append(Transaction.from_bma_history(currency, sent)) + sent_txs.append(Transaction.from_bma_history(sent, currency)) def remove_duplicate_txs(received_txs, sent_txs): diff --git a/tests/patched/blockchain_tools.py b/tests/patched/blockchain_tools.py index 2f6e6eabcc5ceea3198b7cbe68dd7810db94d7b4..4f0b68370bf6583ffacb7a8b7dadc7329611cdb4 100644 --- a/tests/patched/blockchain_tools.py +++ b/tests/patched/blockchain_tools.py @@ -15,7 +15,7 @@ # This file contains fake values for testing purposes -from duniterpy.documents.block_uid import BlockUID +from duniterpy.documents.block_id import BlockID currency = "g1" @@ -27,7 +27,7 @@ mocked_block = { "hash": "0000010D30B1284D34123E036B7BE0A449AE9F2B928A77D7D20E3BDEAC7EE14C", } -fake_block_uid = BlockUID( +fake_block_id = BlockID( 48000, "0000010D30B1284D34123E036B7BE0A449AE9F2B928A77D7D20E3BDEAC7EE14C" ) diff --git a/tests/patched/tx_history.py b/tests/patched/tx_history.py index b677b1689402ffec503f18328d95c29ab4a1b25f..2d442e125d7cbd9ea5adb9b961f498f3d4da73e1 100644 --- a/tests/patched/tx_history.py +++ b/tests/patched/tx_history.py @@ -112,6 +112,6 @@ fake_sent_tx_hist = [ def patched_get_transactions_history(client, pubkey, received_txs, sent_txs): for received in fake_received_tx_hist: - received_txs.append(Transaction.from_bma_history(currency, received)) + received_txs.append(Transaction.from_bma_history(received, currency)) for sent in fake_sent_tx_hist: - sent_txs.append(Transaction.from_bma_history(currency, sent)) + sent_txs.append(Transaction.from_bma_history(sent, currency)) diff --git a/tests/test_membership.py b/tests/test_membership.py index b8150f44aef5cae47d7c496075e9ce5ae4be1a13..acd113f0062b833964b73dbcdd48d115d273d977 100644 --- a/tests/test_membership.py +++ b/tests/test_membership.py @@ -20,13 +20,13 @@ import pendulum import pytest from click.testing import CliRunner from duniterpy.api import bma -from duniterpy.documents import Membership, block_uid +from duniterpy.documents import Membership, get_block_id from duniterpy.key import SigningKey from tabulate import tabulate from patched.blockchain_tools import ( currency, - fake_block_uid, + fake_block_id, patched_block, patched_head_block, patched_params, @@ -44,11 +44,12 @@ from silkaj.tui import display_pubkey_and_checksum # Values and patches pubkey = "EA7Dsw39ShZg4SpURsrgMaMqrweJPUFPYHwZA8e92e3D" -identity_timestamp = block_uid( +identity_block_id = get_block_id( "0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855" ) identity_uid = "toto" -membership_timestamp = fake_block_uid + +membership_block_id = fake_block_id def patched_auth_method(): @@ -57,7 +58,7 @@ def patched_auth_method(): def patched_choose_identity(pubkey): return ( - {"uid": identity_uid, "meta": {"timestamp": identity_timestamp}}, + {"uid": identity_uid, "meta": {"timestamp": identity_block_id}}, pubkey, None, ) @@ -107,18 +108,22 @@ def test_membership_cmd(dry_run, display, confirmation, exit_code, monkeypatch): patched_display_confirmation_table.assert_called_once_with( identity_uid, pubkey, - identity_timestamp, + identity_block_id, ) if dry_run or display: assert "Type: Membership" in result.output else: - patched_generate_membership_document.assert_called_with( - currency, - pubkey, - membership_timestamp, - identity_uid, - identity_timestamp, - ) + signing_key = patched_auth_method() + patched_generate_membership_document.assert_called_once() + # membership_block_id is different + # patched_generate_membership_document.assert_called_once_with( + # pubkey, + # membership_block_id, + # identity_uid, + # identity_block_id, + # currency, + # signing_key, + # ) assert result.exit_code == exit_code @@ -158,9 +163,9 @@ def test_display_confirmation_table(patched_wot_requirements, monkeypatch, capsy table.append(["User Identifier (UID)", identity_uid]) table.append(["Public Key", display_pubkey_and_checksum(pubkey)]) - table.append(["Block Identity", str(identity_timestamp)[:45] + "…"]) + table.append(["Block Identity", str(identity_block_id)[:45] + "…"]) - block = client(bma.blockchain.block, identity_timestamp.number) + block = client(bma.blockchain.block, identity_block_id.number) date_idty_pub = pendulum.from_timestamp(block["time"], tz="local").format(DATE) table.append( ["Identity published", date_idty_pub], @@ -181,27 +186,28 @@ def test_display_confirmation_table(patched_wot_requirements, monkeypatch, capsy expected = tabulate(table, tablefmt="fancy_grid") + "\n" - membership.display_confirmation_table(identity_uid, pubkey, identity_timestamp) + membership.display_confirmation_table(identity_uid, pubkey, identity_block_id) captured = capsys.readouterr() assert expected == captured.out def test_generate_membership_document(): + signing_key = patched_auth_method() generated_membership = membership.generate_membership_document( - currency, pubkey, - membership_timestamp, + membership_block_id, identity_uid, - identity_timestamp, + identity_block_id, + currency=currency, + key=signing_key, ) expected = Membership( - version=10, - currency=currency, issuer=pubkey, - membership_ts=membership_timestamp, - membership_type="IN", + membership_block_id=membership_block_id, uid=identity_uid, - identity_ts=identity_timestamp, + identity_block_id=identity_block_id, + signing_key=signing_key, + currency=currency, ) # Direct equality check can be done without raw() once Membership.__eq__() is implemented assert expected.raw() == generated_membership.raw() diff --git a/tests/test_unit_tx.py b/tests/test_unit_tx.py index 2f06ebe7d99553a3d9e7eccdcc18176e450ebb1b..08509bccb4f1acd49fdfc715e133752362875c78 100644 --- a/tests/test_unit_tx.py +++ b/tests/test_unit_tx.py @@ -27,7 +27,7 @@ from duniterpy.documents.transaction import ( ) from patched.auth import patched_auth_method -from patched.blockchain_tools import fake_block_uid, patched_head_block +from patched.blockchain_tools import fake_block_id, patched_head_block from patched.money import patched_get_sources, patched_ud_value from patched.test_constants import mock_ud_value from patched.tools import patched_currency_symbol @@ -218,9 +218,7 @@ def test_compute_amounts(): # expected results # result 1 : with two amounts/outputs and an outputbackchange result1 = Transaction( - version=10, - currency="g1", - blockstamp=fake_block_uid, + block_id=fake_block_id, locktime=0, issuers=["BFb5yv8z1fowR6Z8mBXTALy5z7gHfMU976WtXhmRsUMh"], inputs=[ @@ -261,7 +259,6 @@ result1 = Transaction( ), ], comment="Test comment", - signatures=[], )