mirror of
https://github.com/believethehype/nostrdvm.git
synced 2025-03-17 21:31:52 +01:00
78 lines
2.8 KiB
Python
78 lines
2.8 KiB
Python
import asyncio
|
|
import json
|
|
from datetime import timedelta
|
|
|
|
from nostr_sdk import PublicKey, Options, Keys, Client, NostrSigner
|
|
|
|
from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface
|
|
from nostr_dvm.utils.dvmconfig import DVMConfig
|
|
from nostr_dvm.utils.nip89_utils import NIP89Config, nip89_fetch_events_pubkey
|
|
from nostr_dvm.utils.output_utils import PostProcessFunctionType
|
|
|
|
|
|
async def build_client(config):
|
|
keys = Keys.parse(config.PRIVATE_KEY)
|
|
client = Client(NostrSigner.keys(keys))
|
|
|
|
for relay in config.RELAY_LIST:
|
|
await client.add_relay(relay)
|
|
await client.connect()
|
|
return client
|
|
|
|
|
|
def build_external_dvm(pubkey, task, kind, fix_cost, per_unit_cost, config,
|
|
external_post_process=PostProcessFunctionType.NONE):
|
|
pubkey = PublicKey.parse(pubkey).to_hex()
|
|
dvm_config = DVMConfig()
|
|
dvm_config.PUBLIC_KEY = pubkey
|
|
dvm_config.FIX_COST = fix_cost
|
|
dvm_config.PER_UNIT_COST = per_unit_cost
|
|
dvm_config.EXTERNAL_POST_PROCESS_TYPE = external_post_process
|
|
|
|
client = asyncio.run(build_client(config))
|
|
|
|
nip89content_str = asyncio.run(nip89_fetch_events_pubkey(client, pubkey, kind))
|
|
name = "External DVM"
|
|
image = "https://image.nostr.build/c33ca6fc4cc038ca4adb46fdfdfda34951656f87ee364ef59095bae1495ce669.jpg"
|
|
about = "An External DVM with no info"
|
|
nip90params = {}
|
|
encryption_supported = False
|
|
cashu_accepted = False
|
|
|
|
if nip89content_str is not None:
|
|
print(nip89content_str)
|
|
nip89content = json.loads(nip89content_str)
|
|
if nip89content.get("name"):
|
|
name = nip89content.get("name")
|
|
if nip89content.get("picture"):
|
|
image = nip89content.get("picture")
|
|
elif nip89content.get("image"):
|
|
image = nip89content.get("image")
|
|
if nip89content.get("about"):
|
|
about = nip89content.get("about")
|
|
if nip89content.get("nip90Params"):
|
|
nip90params = nip89content["nip90Params"]
|
|
if nip89content.get("supportsEncryption"):
|
|
encryption_supported = nip89content["supportsEncryption"]
|
|
if nip89content.get("acceptsNutZaps"):
|
|
cashu_accepted = nip89content["acceptsNutZaps"]
|
|
else:
|
|
print("No NIP89 set for " + name)
|
|
nip89info = {
|
|
"name": name,
|
|
"picture": image,
|
|
"about": about,
|
|
"supportsEncryption": encryption_supported,
|
|
"acceptsNutZaps": cashu_accepted,
|
|
"nip90Params": nip90params
|
|
}
|
|
nip89config = NIP89Config()
|
|
nip89config.KIND = kind
|
|
nip89config.CONTENT = json.dumps(nip89info)
|
|
|
|
interface = DVMTaskInterface(name=name, dvm_config=dvm_config, nip89config=nip89config, task=task)
|
|
interface.SUPPORTS_ENCRYPTION = encryption_supported
|
|
interface.ACCEPTS_CASHU = cashu_accepted
|
|
|
|
return interface
|