#!/usr/bin/env python3 import sys, os.path, json from shutil import copyfile if not os.path.isfile("userEnv.py"): copyfile("userEnv.py.template", "userEnv.py") from userEnv import issuer, dunikey, node from natools import fmt, sign, get_privkey from gql import gql, Client from gql.transport.aiohttp import AIOHTTPTransport if not (issuer) or not (dunikey): print("Please set your pubkey and path to you pubsec keychain in userEnv.py file.") sys.exit(1) # Define Duniter GVA node transport = AIOHTTPTransport(url=node) client = Client(transport=transport, fetch_schema_from_transport=True) recipient = sys.argv[1] amount = int(sys.argv[2]) comment = sys.argv[3] ## GraphQL queries # Build the TX Document queryBuild = gql( """ query ($recipient: String!, $issuer: String!, $amount: Int!, $comment: String!){ genTxs( amount: $amount comment: $comment issuer: $issuer recipient: $recipient ) } """ ) paramsBuild = { "recipient": recipient, "issuer": issuer, "amount": amount, "comment": comment } # Send TX document try: txDoc = str(client.execute(queryBuild, variable_values=paramsBuild))[13:-3].replace('\\n','\n').encode() print("Document généré avec succès.") except Exception as e: print("Echec d'obtention du document de transaction:" + str(e)) sys.exit(1) # Sign TX document signature = fmt["64"](sign(txDoc, get_privkey(dunikey, "pubsec"))[:-len(txDoc)]) signedDoc = txDoc.decode() + signature.decode() #print(signedDoc) # For debug querySign = gql( """ mutation ($signedDoc: String!){ tx( rawTx: $signedDoc ) { version issuers outputs } } """ ) paramsSign = { "signedDoc": signedDoc } # Send TX Signed document try: sentTX = client.execute(querySign, variable_values=paramsSign) print("Transaction effectué avec succès !") except Exception as e: print("Echec de la transaction:" + str(e)) sys.exit(1) #print(sentTX) #For debug