diff options
| author | Adam Soltys <[email protected]> | 2025-11-26 21:44:55 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-02-11 15:33:08 -0800 |
| commit | 3aab57df2063d913bd16b953187ced242421f66a (patch) | |
| tree | 9f8fcb8d266e00e1112af106d1480e9fc08e8b04 /src/lib | |
| parent | 68e7fe9655f94efc573f3aab7acf60d03c4162a0 (diff) | |
| download | coinos-ui-3aab57df2063d913bd16b953187ced242421f66a.tar.gz coinos-ui-3aab57df2063d913bd16b953187ced242421f66a.zip | |
ark stuff
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/ark.ts | 97 | ||||
| -rw-r--r-- | src/lib/parse.ts | 4 |
2 files changed, 7 insertions, 94 deletions
diff --git a/src/lib/ark.ts b/src/lib/ark.ts index 7649a6bf..487898ae 100644 --- a/src/lib/ark.ts +++ b/src/lib/ark.ts @@ -1,54 +1,13 @@ import { persistLocal } from "$lib/store"; -import { get } from "svelte/store"; import { SingleKey, Wallet } from "@arkade-os/sdk"; -import { bytesToHex, randomBytes } from "@noble/hashes/utils"; -import { nip19 } from "nostr-tools"; -import { hex } from "@scure/base"; +import { get } from "svelte/store"; export const arkServerUrl = "http://localhost:7070"; export const arkkey = persistLocal("arkkey", ""); -export const generateKey = (): string => { - const privateKey = bytesToHex(randomBytes(32)); - arkkey.set(privateKey); - return privateKey; -}; - -export const getKey = (): string => { - let key = get(arkkey); - if (!key) { - key = generateKey(); - } - return key; -}; - -export const hasKey = (): boolean => { - return !!get(arkkey); -}; - -export const clearKey = (): void => { - arkkey.set(""); -}; - -export const keyToNsec = (key?: string): string => { - const k = key || getKey(); - return nip19.nsecEncode(hex.decode(k)); -}; - -export const nsecToKey = (nsec: string): string => { - const { type, data } = nip19.decode(nsec); - if (type !== "nsec") throw new Error("Invalid nsec format"); - return bytesToHex(data); -}; - -export const restoreFromNsec = (nsec: string): string => { - const key = nsecToKey(nsec); - arkkey.set(key); - return key; -}; - export const getWallet = async () => { - const key = getKey(); + const key = get(arkkey); + if (!key) return; const identity = SingleKey.fromHex(key); return Wallet.create({ @@ -62,55 +21,7 @@ export const getAddress = async (): Promise<string> => { return wallet.getAddress(); }; -export const getBalance = async (): Promise<{ available: number; pending: number }> => { +export const getBalance = async (): Promise<{ available: number }> => { const wallet = await getWallet(); return wallet.getBalance(); }; - -export const syncArkAddress = async ( - currentAddress: string | undefined, - updateFn: (arkAddress: string) => Promise<void> -): Promise<string> => { - const address = await getAddress(); - if (address !== currentAddress) { - await updateFn(address); - } - return address; -}; - -export const sendArk = async (address: string, amount: number): Promise<string> => { - const wallet = await getWallet(); - const vtxos = await wallet.getVtxos(); - - // Sort by expiry (spend oldest first) - const sorted = vtxos.sort( - (a, b) => (a.virtualStatus.batchExpiry ?? 0) - (b.virtualStatus.batchExpiry ?? 0) - ); - - // Select inputs - const inputs = []; - let selectedAmount = 0; - for (const vtxo of sorted) { - if (selectedAmount >= amount) break; - inputs.push(vtxo); - selectedAmount += vtxo.value; - } - - if (selectedAmount < amount) { - throw new Error(`Insufficient funds: have ${selectedAmount}, need ${amount}`); - } - - // Build outputs - const outputs: { address: string; amount: bigint }[] = [ - { address, amount: BigInt(amount) } - ]; - - // Add change output if needed - const change = selectedAmount - amount; - if (change > 0) { - const changeAddress = await wallet.getAddress(); - outputs.push({ address: changeAddress, amount: BigInt(change) }); - } - - return wallet.settle({ inputs, outputs }); -}; diff --git a/src/lib/parse.ts b/src/lib/parse.ts index c69032d1..bbcab429 100644 --- a/src/lib/parse.ts +++ b/src/lib/parse.ts @@ -11,7 +11,9 @@ export default async (s, host, cookies) => { let invoice; let user; - if (t.startsWith("ark")) redirect(307, `/send/ark/${t}`); + if (t.startsWith("ark") || t.startsWith("tark")) + redirect(307, `/send/ark/${t}`); + if (t.startsWith("http")) redirect(307, t); if (t.startsWith(host)) redirect(307, `http://${t}`); |
