diff options
| author | Adam Soltys <[email protected]> | 2024-10-24 13:59:34 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-10-24 13:59:34 -0700 |
| commit | d09712ef8f8ea8218ce229b233fc0013e6c06f7a (patch) | |
| tree | ec0b548baef30c0b95b068ec8117672a49ccdd54 /lib | |
| parent | ac161f60e08e7e32c46d98aa3288f4f1b3d6e2d8 (diff) | |
| download | coinos-server-d09712ef8f8ea8218ce229b233fc0013e6c06f7a.tar.gz coinos-server-d09712ef8f8ea8218ce229b233fc0013e6c06f7a.zip | |
save ecash id
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/ecash.ts | 77 | ||||
| -rw-r--r-- | lib/ln.ts | 8 |
2 files changed, 54 insertions, 31 deletions
diff --git a/lib/ecash.ts b/lib/ecash.ts index 8f91e70c..d9d6728e 100644 --- a/lib/ecash.ts +++ b/lib/ecash.ts @@ -1,67 +1,92 @@ import config from "$config"; +import { g, s } from "$lib/db"; +import { lnb } from "$lib/ln"; +import { fail, wait } from "$lib/utils"; import { CashuMint, CashuWallet, + MintQuoteState, getDecodedToken, getEncodedToken, getEncodedTokenV4, } from "@cashu/cashu-ts"; -import { g, s } from "$lib/db"; -import { fail } from "$lib/utils"; -let m = new CashuMint(config.mintUrl); -let w = new CashuWallet(m); +const m = new CashuMint(config.mintUrl); +const w = new CashuWallet(m); -let enc = (proofs, v = 4) => +const enc = (proofs, v = 4) => (v === 4 ? getEncodedTokenV4 : getEncodedToken)({ token: [{ mint: config.mintUrl, proofs }], }); -let dec = (token) => getDecodedToken(token).token[0]; +const dec = (token) => getDecodedToken(token).token[0]; -let ext = async (mint) => { - let issuer = new CashuMint(mint); - let { pubkey: issuerPk } = await issuer.getInfo(); - let { pubkey: ourPk } = await m.getInfo(); +const ext = async (mint) => { + const issuer = new CashuMint(mint); + const { pubkey: issuerPk } = await issuer.getInfo(); + const { pubkey: ourPk } = await m.getInfo(); return issuerPk !== ourPk; }; export async function get(id, v = 4) { - let token = await g(`cash:${id}`); + const token = await g(`cash:${id}`); if (v < 4) return enc(dec(token).proofs, 3); return token; } export async function claim(token) { - let { proofs: current } = dec(await g(`cash`)); - let { mint } = dec(token); + const { proofs: current } = dec(await g("cash")); + const { mint } = dec(token); if (await ext(mint)) fail("Unable to receive from other mints"); - let rcvd = await w.receive(token); + const rcvd = await w.receive(token); - await s(`cash`, enc([...current, ...rcvd])); + await s("cash", enc([...current, ...rcvd])); return rcvd.reduce((a, b) => a + b.amount, 0); } export async function mint(amount, v = 4) { - let { proofs } = dec(await g(`cash`)); - let { send, returnChange } = await w.send(amount, proofs); - let rcvd = await w.receive(enc(send, v)); - let change = enc(returnChange, v); - await s(`cash`, change); + const { proofs } = dec(await g("cash")); + const { send, returnChange } = await w.send(amount, proofs); + const rcvd = await w.receive(enc(send, v)); + const change = enc(returnChange, v); + await s("cash", change); return enc(rcvd, v); } export async function check(token) { - let o = dec(token); - let { mint, proofs } = o; - let total = proofs.reduce((a, b) => a + b.amount, 0); + const o = dec(token); + const { mint, proofs } = o; + const total = proofs.reduce((a, b) => a + b.amount, 0); - let external = await ext(mint); + const external = await ext(mint); - let r = await w.checkProofsSpent(proofs); - let spent = r.reduce((a, b) => a + b.amount, 0); + const r = await w.checkProofsSpent(proofs); + const spent = r.reduce((a, b) => a + b.amount, 0); return { total, spent, mint, external }; } + +export async function init(amount = 10000) { + try { + await new Promise((r) => setTimeout(r, 2000)); + const { quote, request } = await w.createMintQuote(amount); + await lnb.pay(request); + + await wait(async () => { + const { state } = await w.checkMintQuote(quote); + return state === MintQuoteState.PAID; + }); + + const { proofs } = await w.mintTokens(amount, quote); + + const cash = getEncodedTokenV4({ + token: [{ mint: config.mintUrl, proofs }], + }); + + await s("cash", cash); + } catch (e) { + console.log(e); + } +} @@ -1,7 +1,5 @@ import config from "$config"; -let ln; -let { LightningClient } = (await import("clightning-client")).default; -ln = new LightningClient(config.lightning); - -export default ln; +const { LightningClient } = (await import("clightning-client")).default; +export default new LightningClient(config.lightning); +export const lnb = new LightningClient(config.lightningb); |
