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/lib/balancelib.py

79 lines
2.3 KiB
Python

#!/usr/bin/env python3
import sys, re, os.path, json, ast
from termcolor import colored
from lib.natools import fmt, sign, get_privkey
from gql import gql, Client
from gql.transport.aiohttp import AIOHTTPTransport
PUBKEY_REGEX = "(?![OIl])[1-9A-Za-z]{42,45}"
class Balance:
def __init__(self, dunikey, node, pubkey, useMempool=False):
self.dunikey = dunikey
self.pubkey = pubkey if pubkey else get_privkey(dunikey, "pubsec").pubkey
self.useMempool = useMempool
if not re.match(PUBKEY_REGEX, self.pubkey) or len(self.pubkey) > 45:
sys.stderr.write("La clé publique n'est pas au bon format.\n")
sys.exit(1)
# Define Duniter GVA node
transport = AIOHTTPTransport(url=node)
self.client = Client(transport=transport, fetch_schema_from_transport=True)
def sendDoc(self):
# Build TX generation document
queryBuild = gql(
"""
query ($pubkey: String!){
transactionsHistory(pubkey: $pubkey) {
received {
outputs
}
sent {
outputs
}
}
}
"""
)
paramsBuild = {
"pubkey": self.pubkey
}
# Send TX document
try:
self.historyDoc = self.client.execute(queryBuild, variable_values=paramsBuild)
except Exception as e:
message = ast.literal_eval(str(e))["message"]
sys.stderr.write("Echec de récupération de l'historique:\n" + message + "\n")
sys.exit(1)
res = self.historyDoc['transactionsHistory']['received']
amount=[]
for i in res:
for output in i['outputs']:
if re.search(self.pubkey, output):
amount.append(int(output.split(':')[0]))
receivedTotal = sum(amount)
res = self.historyDoc['transactionsHistory']['sent']
amount=[]
for i in res:
for output in i['outputs']:
if not re.search(self.pubkey, output):
amount.append(int(output.split(':')[0]))
sentTotal = sum(amount)
# TODO: Get all UD from pubkey
total = (receivedTotal-sentTotal)/100
print(total)
def balance(self):
self.sendDoc()