Skip to content

Commit 974c63e

Browse files
committed
Fix for xfer txn
Signed-off-by: ArtObr <artemobruchnikov@gmail.com>
1 parent e67baf3 commit 974c63e

2 files changed

Lines changed: 39 additions & 3 deletions

File tree

sovtoken/sovtoken/request_handlers/write_request_handler/xfer_handler.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22
from sovtoken.exceptions import UTXOError
33

44
from indy_common.authorize.auth_actions import AuthActionAdd
5-
from sovtoken.constants import INPUTS, OUTPUTS, XFER_PUBLIC, TOKEN_LEDGER_ID, UTXO_CACHE_LABEL
5+
from sovtoken.constants import INPUTS, OUTPUTS, XFER_PUBLIC, TOKEN_LEDGER_ID, UTXO_CACHE_LABEL, SIGS
66
from sovtoken.messages.txn_validator import txn_xfer_public_validate
77
from sovtoken.request_handlers.token_utils import spend_input, add_new_output, sum_inputs, sum_outputs, \
88
validate_given_inputs_outputs
99
from sovtoken.types import Output
1010

11+
from plenum.common.constants import ED25519
1112
from plenum.common.exceptions import InvalidClientMessageException, InvalidClientRequest, OperationError
1213
from plenum.common.request import Request
13-
from plenum.common.txn_util import get_payload_data, get_seq_no
14+
from plenum.common.txn_util import get_payload_data, get_seq_no, add_sigs_to_txn
1415
from plenum.server.database_manager import DatabaseManager
1516
from plenum.server.request_handlers.handler_interfaces.write_request_handler import WriteRequestHandler
1617

@@ -63,6 +64,14 @@ def update_state(self, txn, prev_result, request, is_committed=False):
6364
error = 'Exception {} while updating state'.format(ex)
6465
raise OperationError(error)
6566

67+
def _req_to_txn(self, req: Request):
68+
sigs = req.operation.pop(SIGS)
69+
txn = super()._req_to_txn(req)
70+
req.operation[SIGS] = sigs
71+
sigs = [(i["address"], s) for i, s in zip(req.operation[INPUTS], sigs)]
72+
add_sigs_to_txn(txn, sigs, sig_type=ED25519)
73+
return txn
74+
6675
def _do_validate_inputs_ouputs(self, request):
6776
try:
6877
sum_in = sum_inputs(self.utxo_cache,

sovtoken/sovtoken/test/test_public_xfer_1.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from plenum.common.txn_util import get_seq_no
44
from plenum.common.exceptions import RequestNackedException
55
from plenum.common.types import OPERATION
6-
from sovtoken.constants import SIGS, ADDRESS, SEQNO, AMOUNT, OUTPUTS, PAYMENT_ADDRESS
6+
from sovtoken.constants import SIGS, ADDRESS, SEQNO, AMOUNT, OUTPUTS, PAYMENT_ADDRESS, INPUTS
77
from sovtoken.test.helper import user1_token_wallet
88

99

@@ -287,3 +287,30 @@ def test_multiple_inputs_outputs_with_change(
287287
assert address5_utxos[1][PAYMENT_ADDRESS] == address5
288288
assert address5_utxos[0][AMOUNT] == 100
289289
assert address5_utxos[1][AMOUNT] == 10
290+
291+
292+
def test_xfer_signatures_included_in_txn(
293+
helpers,
294+
addresses,
295+
initial_mint
296+
):
297+
[address1, address2, address3, address4, address5] = addresses
298+
299+
inputs = helpers.general.get_utxo_addresses([address1, address2, address3])
300+
inputs = [utxo for utxos in inputs for utxo in utxos]
301+
302+
outputs = [
303+
{"address": address4, "amount": 200},
304+
{"address": address5, "amount": 100},
305+
]
306+
307+
request = helpers.request.transfer(inputs, outputs)
308+
response = helpers.sdk.send_and_check_request_objects([request])
309+
310+
sigs = [(i["address"], s) for i, s in zip(request.operation[INPUTS], request.operation[SIGS])]
311+
request = response[0][0]
312+
sigs.append((request["identifier"], request["signature"]))
313+
314+
rep_sigs = [(v['from'], v['value']) for v in response[0][1]["result"]["reqSignature"]["values"]]
315+
316+
assert sorted(rep_sigs) == sorted(sigs)

0 commit comments

Comments
 (0)