From 550a0a68ef939224ead2d747ed83ddc5663eff30 Mon Sep 17 00:00:00 2001 From: poka Date: Thu, 19 Nov 2020 02:51:35 +0100 Subject: [PATCH] Changes transactions supported --- libs/paylib.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/libs/paylib.py b/libs/paylib.py index e429959..aade4c8 100644 --- a/libs/paylib.py +++ b/libs/paylib.py @@ -19,12 +19,13 @@ transport = AIOHTTPTransport(url=node) client = Client(transport=transport, fetch_schema_from_transport=True) -class Transaction(): +class Transaction: def __init__(self, recipient, amount, comment=''): self.recipient = recipient self.amount = amount self.comment = comment self.issuer = get_privkey(dunikey, "pubsec").pubkey + self.isChange = False if not re.match(r"(?![OIl])[1-9A-Za-z]{42,45}", self.recipient): sys.stderr.write("Issuer pubkey is not to good format.\n") @@ -34,11 +35,12 @@ class Transaction(): # Build TX generation document queryBuild = gql( """ - query ($recipient: String!, $issuer: String!, $amount: Int!, $comment: String!){ genTxs( + query ($recipient: String!, $issuer: String!, $amount: Int!, $comment: String!, $isChange: Boolean!){ genTxs( amount: $amount comment: $comment issuer: $issuer recipient: $recipient + useMempoolSources: $isChange ) } """ @@ -47,7 +49,8 @@ class Transaction(): "recipient": self.recipient, "issuer": self.issuer, "amount": self.amount, - "comment": self.comment + "comment": self.comment, + "isChange": self.isChange } # Send TX document @@ -73,12 +76,19 @@ class Transaction(): if re.search("Comment:", line): commentRaw = line.split(': ', 1)[1] - if issuerRaw != self.issuer or int(outAmount) != self.amount or outPubkey != self.recipient or commentRaw != self.comment: + # Check if is change transaction + if issuerRaw == outPubkey: + print("Ce document contient une transaction de change") + self.isChange = True + + # Check validity of the document + elif issuerRaw != self.issuer or int(outAmount) != self.amount or outPubkey != self.recipient or commentRaw != self.comment: sys.stderr.write(colored("Le document généré est corrompu !\nNe fait plus confiance au noeud " + node + "\n", 'red')) sys.stderr.write(colored(issuerRaw + " envoi " + outAmount + " vers " + outPubkey + " with comment: " + commentRaw + "\n", "yellow")) sys.exit(1) else: print("Le document généré est conforme.") + self.isChange = False return self.txDoc @@ -109,13 +119,19 @@ class Transaction(): # Send TX Signed document try: - client.execute(querySign, variable_values=paramsSign) - print(colored("Transaction effectué avec succès !", "green")) + txResult = str(client.execute(querySign, variable_values=paramsSign)) except Exception as e: message = ast.literal_eval(str(e))["message"] sys.stderr.write("Echec de la transaction:\n" + message + "\n") sys.exit(1) - + else: +# print(txResult) + if self.isChange: + self.send() + else: + print(colored("Transaction effectué avec succès !", "green")) + return txResult + def send(self): self.genDoc() self.checkTXDoc()