2024-11-28 08:39:48 +01:00
import argparse
import asyncio
2024-08-19 13:25:03 +02:00
from pathlib import Path
import dotenv
2024-11-06 10:54:09 +01:00
from nostr_sdk import PublicKey , Keys
2024-08-19 13:25:03 +02:00
from nostr_dvm . utils . dvmconfig import DVMConfig
2024-11-06 10:54:09 +01:00
from nostr_dvm . utils . nostr_utils import check_and_set_private_key
2024-08-19 13:25:03 +02:00
from nostr_dvm . utils . nut_wallet_utils import NutZapWallet
# Run with params for test functions or set the default here
parser = argparse . ArgumentParser ( description = ' Nutzaps ' )
parser . add_argument ( " --mint " , type = bool , default = False )
parser . add_argument ( " --zap " , type = bool , default = True )
parser . add_argument ( " --melt " , type = bool , default = False )
args = parser . parse_args ( )
async def test ( relays , mints ) :
nutzap_wallet = NutZapWallet ( )
update_wallet_info = False # leave this on false except when you manually changed relays/mints/keys
2024-11-06 10:54:09 +01:00
keys = Keys . parse ( check_and_set_private_key ( " TEST_ACCOUNT_PK_TEST " ) )
client = await nutzap_wallet . client_connect ( relays , keys )
2024-08-19 13:25:03 +02:00
set_profile = False # Attention, this overwrites your current profile if on True, do not set if you use an non-test account
if set_profile :
lud16 = " hype@bitcoinfixesthis.org " #overwrite with your ln address
await nutzap_wallet . set_profile ( " Test " , " I ' m a nutsack test account " , lud16 , " https://i.nostr.build/V4FwExrV5aXHNm70.jpg " , client , keys )
# Test 1 Config: Mint Tokens
mint_to_wallet = args . mint # Test function to mint 5 sats on the mint in your list with given index below
mint_index = 0 # Index of mint in mints list to mint a token
mint_amount = 10 # Amount to mint
# Test 2 Config: Send Nutzap
send_test = args . zap # Send a Nutzap
send_zap_amount = 3
send_zap_message = " From my nutsack "
2024-11-06 10:54:09 +01:00
send_reveiver = " npub1dvwp6k3l4362ray6z3rk5u2va3ffstlsydqphj7ht6ca7s7kuy4syhug83 " # keys.public_key().to_bech32() # This is ourself, for testing purposes, some other people to nutzap: #npub1nxa4tywfz9nqp7z9zp7nr7d4nchhclsf58lcqt5y782rmf2hefjquaa6q8 # dbth #npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft # pablof7z
2024-08-19 13:25:03 +02:00
send_zapped_event = None # None, or zap an event like this: Nip19Event.from_nostr_uri("nostr:nevent1qqsxq59mhz8s6aj9jzltcmqmmv3eutsfcpkeny2x755vdu5dtq44ldqpz3mhxw309ucnydewxqhrqt338g6rsd3e9upzp75cf0tahv5z7plpdeaws7ex52nmnwgtwfr2g3m37r844evqrr6jqvzqqqqqqyqtxyr6").event_id().to_hex()
# Test 3 Config: Melt to ln address
melt = args . melt
melt_amount = 6
print ( " PrivateKey: " + keys . secret_key ( ) . to_bech32 ( ) + " PublicKey: " + keys . public_key ( ) . to_bech32 ( ) )
# See if we already have a wallet and fetch it
nut_wallet = await nutzap_wallet . get_nut_wallet ( client , keys )
# If we have a wallet but want to maually update the info..
if nut_wallet is not None and update_wallet_info :
await nutzap_wallet . update_nut_wallet ( nut_wallet , mints , client , keys )
await nutzap_wallet . announce_nutzap_info_event ( nut_wallet , client , keys )
# If we don't have a wallet, we create one, fetch it and announce our info
if nut_wallet is None :
await nutzap_wallet . create_new_nut_wallet ( mints , relays , client , keys , " Test " , " My Nutsack " )
nut_wallet = await nutzap_wallet . get_nut_wallet ( client , keys )
if nut_wallet is not None :
await nutzap_wallet . announce_nutzap_info_event ( nut_wallet , client , keys )
else :
print ( " Couldn ' t fetch wallet, please restart and see if it is there " )
# Test 1: We mint to our own wallet
if mint_to_wallet :
await nutzap_wallet . mint_cashu ( nut_wallet , mints [ mint_index ] , client , keys , mint_amount )
nut_wallet = await nutzap_wallet . get_nut_wallet ( client , keys )
# Test 2: We send a nutzap to someone (can be ourselves)
if send_test :
zapped_event_id_hex = send_zapped_event
zapped_user_hex = PublicKey . parse ( send_reveiver ) . to_hex ( )
await nutzap_wallet . send_nut_zap ( send_zap_amount , send_zap_message , nut_wallet , zapped_event_id_hex , zapped_user_hex , client ,
keys )
#Test 3: Melt back to lightning:
if melt :
# you can overwrite the lu16 and/or npub, otherwise it's fetched from the profile (set it once by setting set_profile to True)
lud16 = None
npub = None
await nutzap_wallet . melt_cashu ( nut_wallet , mints [ mint_index ] , melt_amount , client , keys , lud16 , npub )
await nutzap_wallet . get_nut_wallet ( client , keys )
if __name__ == ' __main__ ' :
env_path = Path ( ' .env ' )
if env_path . is_file ( ) :
print ( f ' loading environment from { env_path . resolve ( ) } ' )
dotenv . load_dotenv ( env_path , verbose = True , override = True )
else :
raise FileNotFoundError ( f ' .env file not found at { env_path } ' )
show_history = True
asyncio . run ( test ( DVMConfig ( ) . NUTZAP_RELAYS , DVMConfig ( ) . NUZAP_MINTS ) )