import json import account import os import time import datetime # Plugin Data info = { "name": "Multi Wallet Functions", "description": "Access and manage multiple wallets at once", "version": "1.0", "author": "Nathan.Woodburn/" } # Functions functions = { "balance": { "name": "Wallet Balances", "type": "default", "description": "List balances of all wallets", "params": {}, "returns": { "result": { "name": "Result", "type": "list" } } }, "domains": { "name": "Domains", "type": "default", "description": "List number of domains in each wallet", "params": {}, "returns": { "result": { "name": "Result", "type": "list" } } }, "expiring": { "name": "Expiring Domains", "type": "default", "description": "List domains that are expiring and their wallet", "params": { "days": { "name": "Days until expiry (default 30)", "type": "number" } }, "returns": { "result": { "name": "Result", "type": "text" } } }, "export": { "name": "Export Domains", "type": "default", "description": "Export domains to a file", "params": { }, "returns": { "result": { "name": "result.csv", "type": "file" } } }, "dash": { "name": "Dashboard widget", "type": "dashboard", "description": "List total balance of all wallets on your dashboard", "params": {}, "returns": { "result": { "name": "Total Holdings", "type": "text" } } }, "enable": { "name": "Enable Dashboard widget", "type": "default", "description": "Enable the dashboard widget", "params": {}, "returns": { "result": { "name": "Result", "type": "text" } } }, "disable": { "name": "Disable Dashboard widget", "type": "default", "description": "Disable the dashboard widget", "params": {}, "returns": { "result": { "name": "Result", "type": "text" } } } } if not os.path.exists("user_data/multiwallet.json"): with open("user_data/multiwallet.json", "w") as f: json.dump({ "enabled": False, "lastUpdate": 0 }, f) def balance(params, authentication): wallets = account.listWallets() balances = [] total = 0 available = 0 for wallet in wallets: info = account.getBalance(wallet) balances.append(f"{wallet}: Available: {info['available']:,.2f} HNS, Total: {info['total']:,.2f} HNS") total += info['total'] available += info['available'] balances.append(f"Total: Available: {available:,.2f} HNS, Total: {total:,.2f} HNS") return {"result": balances} def expiring(params, authentication): days = params['days'] if days == None or days == '': days = 30 else: days = int(days) wallets = account.listWallets() expiring = '' for wallet in wallets: walletExpiring = [] domains = account.getDomains(wallet) for domain in domains: if 'stats' in domain and 'daysUntilExpire' in domain['stats']: if domain['stats']['daysUntilExpire'] <= days: walletExpiring.append({"domain": domain['name'], "wallet": wallet, "days": domain['stats']['daysUntilExpire']}) if len(walletExpiring) > 0: expiring += f"

Expiring Domains in {wallet}

" for domain in walletExpiring: expiring += f"" expiring += "
DomainDays Until Expiration
{domain['domain']}{domain['days']}
" return {"result": expiring} def BlocksToDate(blocks): date = datetime.datetime.now() + datetime.timedelta(minutes=blocks*10) return date.strftime("%Y-%m-%d %H:%M:%S") def export(params, authentication): wallets = account.listWallets() result = "name,expiry,expiryBlock,value,wallet" currentBlock = account.getBlockHeight() for wallet in wallets: domains = account.getDomains(wallet) for domain in domains: if 'stats' in domain and 'renewalPeriodEnd' in domain['stats']: expiryBlock = domain['stats']['renewalPeriodEnd'] result += f"\n{domain['name']},{BlocksToDate(expiryBlock - currentBlock)},{expiryBlock},{domain['value']/1000000},{wallet}" else: result += f"\n{domain['name']},N/A,N/A,{domain['value']/1000000},{wallet}" return {"result": result} def dash(params, authentication): with open("user_data/multiwallet.json", "r") as f: multiwallet = json.load(f) if multiwallet['enabled'] == False: return {"result": None} # Check time currentTime = int(time.time()) if currentTime - multiwallet['lastUpdate'] < 60*10: return {"result": f"Available: {multiwallet['total']['available']:,.2f} HNS
Total: {multiwallet['total']['total']:,.2f} HNS"} wallets = account.listWallets() total = 0 available = 0 for wallet in wallets: info = account.getBalance(wallet) total += info['total'] available += info['available'] multiwallet['total'] = { "available": available, "total": total } multiwallet['lastUpdate'] = currentTime with open("user_data/multiwallet.json", "w") as f: json.dump(multiwallet, f) return {"result": f"Available: {available:,.2f} HNS
Total: {total:,.2f} HNS"} def domains(params, authentication): wallets = account.listWallets() domains = [] total = 0 for wallet in wallets: numDomains = len(account.getDomains(wallet)) domains.append(f"{wallet}: {numDomains}") total += numDomains domains.append(f"Total: {total}") return {"result": domains} def enable(params, authentication): with open("user_data/multiwallet.json", "r") as f: multiwallet = json.load(f) multiwallet['enabled'] = True with open("user_data/multiwallet.json", "w") as f: json.dump(multiwallet, f) return {"result": "Success"} def disable(params, authentication): with open("user_data/multiwallet.json", "r") as f: multiwallet = json.load(f) multiwallet['enabled'] = False with open("user_data/multiwallet.json", "w") as f: json.dump(multiwallet, f) return {"result": "Success"}