This repository has been archived on 2020-12-03. You can view files and clone it, but cannot push or open issues or pull requests.
py-gva/pay.py

87 lines
1.9 KiB
Python
Executable File

#!/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