hns-address-plugin/hns-address.py

140 lines
4.1 KiB
Python
Raw Normal View History

2025-01-29 12:25:51 +11:00
import json
import account
2025-01-29 12:25:51 +11:00
import requests
import os
import subprocess
# Plugin Data
info = {
"name": "HNS-Address Functions",
"description": "Run HNS-Address functions within FireWallet",
"version": "1.0",
"author": "Nathan.Woodburn/"
}
# Functions
functions = {
"generate": {
"name": "Generate HNS Addresses",
"type": "default",
"description": "Generate HNS addresses",
"params": {
"count": {
2025-01-29 12:38:15 +11:00
"name": "Number of Addresses to generate (default 1000)",
"type": "number"
2025-01-29 12:25:51 +11:00
},
"startIndex": {
2025-01-29 12:38:15 +11:00
"name": "Start Index of Addresses to generate (default 0)",
"type": "number"
2025-01-29 12:25:51 +11:00
},
"xpub": {
2025-01-29 12:38:15 +11:00
"name": "xPub of the account to generate addresses for (defaults to current account)",
"type": "text"
2025-01-29 12:25:51 +11:00
}
},
"returns": {
"result":
{
"name": "Result",
"type": "list"
}
}
2025-01-29 12:38:15 +11:00
},
"validate": {
"name": "Validate HNS Addresses",
"type": "default",
"description": "Validates if an addresses belongs to an xPub",
"params": {
"address": {
"name": "Address to validate",
"type": "text"
},
"xpub": {
"name": "xPub of the account to generate addresses for (defaults to current account)",
"type": "text"
}
},
"returns": {
"result":
{
"name": "Result",
"type": "text"
}
}
2025-01-29 12:25:51 +11:00
}
}
def initialize():
# Check if hns-address is installed
if not os.path.exists("hns-address"):
2025-01-29 12:25:51 +11:00
# Try to install hns-address
try:
print("Cloning hns-address...")
result = subprocess.run(["git", "clone", "https://git.woodburn.au/nathanwoodburn/hns-address.git"], capture_output=True, text=True)
if result.returncode != 0:
return -1
except:
return -1
# Check if npm install was successful
if not os.path.exists("hns-address/node_modules"):
path = os.path.realpath("hns-address")
2025-01-29 12:25:51 +11:00
try:
print("Installing hns-address dependencies...")
result = subprocess.run(["npm", "install"], cwd=path, capture_output=True, text=True)
2025-01-29 12:25:51 +11:00
if result.returncode != 0:
return -1
except:
return -1
return 0
def generate(params, authentication):
# Check if hns-address is installed
if (initialize() != 0):
return {"result": ["Failed to initialize hns-address"]}
count = params["count"]
startIndex = params["startIndex"]
xpub = params["xpub"]
if (count == None):
count = 1000
if (startIndex == None):
startIndex = 0
if (xpub == None):
xpub = account.getxPub(authentication)
2025-01-29 12:25:51 +11:00
result = subprocess.run(["node", "generate-address.js", "--xpub", xpub, "--number", str(count), "--startIndex", str(startIndex)], capture_output=True, text=True, cwd=os.path.realpath("hns-address"))
2025-01-29 12:25:51 +11:00
with open(f"{xpub}-addresses.txt", "w") as f:
f.write(result.stdout)
return {"result": result.stdout.split("\n")[2:-1]}
2025-01-29 12:38:15 +11:00
def validate(params, authentication):
# Check if hns-address is installed
if (initialize() != 0):
return {"result": ["Failed to initialize hns-address"]}
xpub = params["xpub"]
address = params["address"]
if (xpub == None):
xpub = account.getxPub(authentication)
if (address == None):
return {"result": "Address is required"}
result = subprocess.run(["node", "find-address.js", "--xpub", xpub, "--address", address, "--end", "10000"], capture_output=True, text=True, cwd=os.path.realpath("hns-address"))
return {"result": result.stdout}
2025-01-29 12:25:51 +11:00
if __name__ == "__main__":
print(generate({
"count": 1000,
"startIndex": 0,
"xpub": "xpub6BvF6DnLZRV6my62FuQ8nw5TRebL8qr9Wa7u2tE1aEedHWBt4XAfSaNTmP1SM2nXErGWSzxRAHVwqstPzRrsXtA2vn1a4KzLwAVEgLNmfca"
}, None))