Compare commits

..

4 Commits

Author SHA1 Message Date
2595503dc0
Merge branch 'dev'
All checks were successful
Build Docker / Build Image (push) Successful in 39s
2024-11-21 16:22:07 +11:00
0be6b8b435
fix: Remove unused imports
All checks were successful
Build Docker / Build Image (push) Successful in 39s
2024-11-21 16:21:20 +11:00
00379aaa8f
feat: Add new batch renewal plugin
All checks were successful
Build Docker / Build Image (push) Successful in 1m18s
2024-11-21 16:10:28 +11:00
da9354cb23
fix: Hide expired domains
All checks were successful
Build Docker / Build Image (push) Successful in 43s
2024-11-21 15:40:02 +11:00
3 changed files with 117 additions and 6 deletions

View File

@ -15,6 +15,9 @@ ip = os.getenv("hsd_ip")
if ip is None: if ip is None:
ip = "localhost" ip = "localhost"
show_expired = os.getenv("show_expired")
if show_expired is None:
show_expired = False
hsd = api.hsd(APIKEY,ip) hsd = api.hsd(APIKEY,ip)
hsw = api.hsw(APIKEY,ip) hsw = api.hsw(APIKEY,ip)
@ -179,8 +182,22 @@ def getDomains(account,own=True):
else: else:
response = requests.get(f"http://x:{APIKEY}@{ip}:12039/wallet/{account}/name") response = requests.get(f"http://x:{APIKEY}@{ip}:12039/wallet/{account}/name")
info = response.json() info = response.json()
if show_expired:
return info return info
# Remove any expired domains
domains = []
for domain in info:
if 'stats' in domain:
if 'daysUntilExpire' in domain['stats']:
if domain['stats']['daysUntilExpire'] < 0:
continue
domains.append(domain)
return domains
def getTransactions(account): def getTransactions(account):
# Get the transactions # Get the transactions
info = hsw.getWalletTxHistory(account) info = hsw.getWalletTxHistory(account)
@ -239,10 +256,6 @@ def check_hip2(domain: str):
def send(account,address,amount): def send(account,address,amount):
account_name = check_account(account) account_name = check_account(account)
password = ":".join(account.split(":")[1:]) password = ":".join(account.split(":")[1:])
response = hsw.rpc_selectWallet(account_name) response = hsw.rpc_selectWallet(account_name)
if response['error'] is not None: if response['error'] is not None:
return { return {

View File

@ -1,3 +1,4 @@
hsd_api=123480615465636893475aCwyaae6s45 hsd_api=123480615465636893475aCwyaae6s45
hsd_ip=localhost hsd_ip=localhost
theme=black theme=black
show_expired=false

97
plugins/renewal.py Normal file
View File

@ -0,0 +1,97 @@
import json
import account
import requests
import os
# Plugin Data
info = {
"name": "Batch Renew Domains",
"description": "Renew the next 100 domains",
"version": "1.0",
"author": "Nathan.Woodburn/"
}
# Functions
functions = {
"main":{
"name": "Renew",
"type": "default",
"description": "Renew the next 100 domains in one transaction. Please wait for at least 1 block confirmation before renewing the next 100 domains",
"params": {},
"returns": {
"status":
{
"name": "Status of the function",
"type": "text"
},
"transaction":
{
"name": "Transaction ID",
"type": "tx"
}
}
}
}
def main(params, authentication):
password = authentication.split(":")[1]
wallet = authentication.split(":")[0]
domains = account.getDomains(wallet)
domains = sorted(domains, key=lambda k: k['renewal'])
names = []
for domain in domains:
name = domain["name"]
names.append(name)
# Split names into batches of 100
batches = []
for i in range(0, len(names), 100):
batches.append(names[i:i+100])
# Unlock wallet
api_key = os.getenv("hsd_api")
if api_key is None:
print("API key not set")
return {"status": "API key not set", "transaction": "None"}
response = requests.post(f'http://x:{api_key}@127.0.0.1:12039/wallet/{wallet}/unlock',
json={'passphrase': password, 'timeout': 600})
if response.status_code != 200:
print("Failed to unlock wallet")
print(f'Status code: {response.status_code}')
print(f'Response: {response.text}')
return {"status": "Failed unlocking wallet", "transaction": "None"}
tx = "None"
for batch in batches:
batch = []
for domain in names:
batch.append(f'["RENEW", "{domain}"]')
batchTX = "[" + ", ".join(batch) + "]"
responseContent = f'{{"method": "sendbatch","params":[ {batchTX} ]}}'
response = requests.post(f'http://x:{api_key}@127.0.0.1:12039', data=responseContent)
if response.status_code != 200:
print("Failed to create batch")
print(f'Status code: {response.status_code}')
print(f'Response: {response.text}')
return {"status": "Failed", "transaction": "None"}
batch = response.json()
# Verify the batch
print("Verifying tx...")
if batch["error"]:
if batch["error"] != "":
print("Failed to verify batch")
print(batch["error"]["message"])
return {"status": "Failed", "transaction": "None"}
if 'result' in batch:
if batch['result'] != None:
tx = batch['result']['hash']
return {"status": "Success", "transaction": tx}
# Note only one batch can be sent at a time