Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor token to proof #78

Merged
merged 2 commits into from
Apr 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/comp/elements/CoinSelection.svelte
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<script lang="ts">
import type { Mint } from '../../model/mint';
import type { Token } from '../../model/token';
import AvailableTokensTable from '../tokens/AvailableTokensTable.svelte';
import { getAmountForTokenSet } from '../util/walletUtils';
import type { Proof } from "@cashu/cashu-ts";

export let mint: Mint;
export let amount: number = 0;
export let selectedTokens: Token[] = [];
export let selectedTokens: Proof[] = [];

export let isCoinSelection = false;
</script>
Expand Down
4 changes: 2 additions & 2 deletions src/comp/elements/ScanLN.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

let qrScanner: Html5QrcodeScanner;

function onScanSuccess(decodedText, decodedResult) {
function onScanSuccess(decodedText:string, decodedResult: any) {
// handle the scanned code as you like, for example:
scannedlnInvoice = decodedText;
if (browser) {
Expand All @@ -17,7 +17,7 @@
active = 'melt';
}

function onScanFailure(error) {}
function onScanFailure(error: any) {}
onDestroy(() => {
{
if (browser) {
Expand Down
4 changes: 2 additions & 2 deletions src/comp/elements/ScanNpub.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

let qrScanner: Html5QrcodeScanner;

function onScanSuccess(decodedText, decodedResult) {
function onScanSuccess(decodedText: string, decodedResult:any) {
// handle the scanned code as you like, for example:
scannedNpub = decodedText;
if (browser) {
Expand All @@ -17,7 +17,7 @@
element?.click();
}
}
function onScanFailure(error) {}
function onScanFailure(error: any) {}

onDestroy(() => {
{
Expand Down
4 changes: 2 additions & 2 deletions src/comp/history/HistoryRow.svelte
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script lang="ts">
import type { HistoryData } from 'src/model/data/HistoryData';
import type { HistoryItem } from 'src/model/historyItem';
import type { HistoryData } from '../../model/data/HistoryData';
import type { HistoryItem } from '../../model/historyItem';
import HistoryIcon from './HistoryIcon.svelte';

export let historyItem: HistoryItem<HistoryData>;
Expand Down
56 changes: 1 addition & 55 deletions src/comp/mint/Mint.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@
import { onMount } from 'svelte';
import { page } from '$app/stores';
let mintURL = '';
let mintAPIRoot = '';
let mintPort = '';
let showAdvanced = false;
let isLoading = false;
let isAddMintPing = false;

Expand All @@ -40,8 +37,7 @@

const addMint = async () => {
isAddMintPing = false;
console.log(mintURL, mintPort, mintAPIRoot);
const mint = new CashuMint(mintURL, mintAPIRoot, mintPort);
const mint = new CashuMint(mintURL);
try {
if ($mints.filter((m) => m.mintURL === mint.mintUrl).length > 0) {
toast('warning', 'this mint has already been added.', "Didn't add mint!");
Expand Down Expand Up @@ -76,9 +72,6 @@
isLoading = false;
}
};
const toggleAdvanced = () => {
showAdvanced = !showAdvanced;
};
</script>

{#if active === 'base'}
Expand Down Expand Up @@ -166,53 +159,6 @@
class="input w-full input-primary col-span-4"
/>
</div>
<!-- svelte-ignore a11y-click-events-have-key-events -->
<div class="divider col-span-5 cursor-pointer" on:click={toggleAdvanced}>
{#if showAdvanced}
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-6 h-6"
>
<path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5" />
</svg>
{:else}
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-6 h-6"
>
<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 8.25l-7.5 7.5-7.5-7.5" />
</svg>
{/if}
Advanced
</div>
{#if showAdvanced}
<div class="col-span-5 grid grid-cols-5 items-center">
<label for="mint-port-input"> Mint Port: </label>
<input
id="mint-port-input"
type="number"
bind:value={mintPort}
class="input w-full input-primary col-span-4"
/>
</div>
<div class="col-span-5 grid grid-cols-5">
<label for="mint-api-input w-32"> Mint API root: </label>
<input
id="mint-api-input"
type="text"
bind:value={mintAPIRoot}
class="input w-full input-primary col-span-4"
/>
</div>
{/if}
{#if isLoading}
<LoadingCenter />
{:else}
Expand Down
9 changes: 3 additions & 6 deletions src/comp/mint/MintRow.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
import { toast } from '../../stores/toasts';
import { CashuMint } from '@cashu/cashu-ts';
import { browser } from '$app/environment';
import { page } from '$app/stores';


export let mintIndex: number;
export let mint: Mint;
export let activeMint;
Expand Down Expand Up @@ -57,11 +56,9 @@
};

const copyShareLink = () => {
const text = encodeURI($page.url.host + '/?mint=' + mint.mintURL);
const text = encodeURI('https://wallet.nutstash.app'+ '/?mint=' + mint.mintURL);
if (browser) {
if (window.clipboardData && window.clipboardData.setData) {
return window.clipboardData.setData('Text', text);
} else if (document.queryCommandSupported && document.queryCommandSupported('copy')) {
if (document.queryCommandSupported && document.queryCommandSupported('copy')) {
var textarea = document.createElement('textarea');
textarea.textContent = text;
textarea.style.position = 'fixed';
Expand Down
6 changes: 3 additions & 3 deletions src/comp/mint/Minting.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
import { browser } from '$app/environment';
import { toast } from '../../stores/toasts';
import { token } from '../../stores/tokens';
import type { Token } from '../../model/token';
import { history } from '../../stores/history';
import { HistoryItemType } from '../../model/historyItem';
import { getKeysetsOfTokens } from '../util/walletUtils';
import { mintRequests } from '../../stores/mintReqs';
import { onMount } from 'svelte';
import type { Proof } from "@cashu/cashu-ts";

export let mint: Mint;
export let active;
Expand Down Expand Up @@ -57,7 +57,7 @@
mintingHash = hash;
qrCode = pr;
mintRequests.update((state) => [
{ invoice: qrCode, mintUrl: mint.mintURL, isCompleted: false, paymentHash: mintingHash },
{ invoice: qrCode??'', mintUrl: mint.mintURL, isCompleted: false, paymentHash: mintingHash??'' },
...state
]);
await mintTokens();
Expand All @@ -72,7 +72,7 @@
try {
if (wallet && mintingHash) {
isPolling = true;
const tokens: Array<Token> = await wallet.requestTokens(mintAmount, mintingHash);
const tokens: Array<Proof> = await wallet.requestTokens(mintAmount, mintingHash);
console.log(tokens);
token.update((state) => [...state, ...tokens]);

Expand Down
4 changes: 2 additions & 2 deletions src/comp/plugin/NostrSocket.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

const getPubKey = async (): Promise<string> => {
return $useExternalNostrKey
? // @ts-expect-error
?
await window.nostr.getPublicKey()
: await Promise.resolve($nostrPubKey);
};
Expand Down Expand Up @@ -92,7 +92,7 @@
return;
}
const decodedMessage = $useExternalNostrKey
? // @ts-expect-error
?
await window.nostr.nip04.decrypt(event.pubkey, event.content)
: await nostrTools.nip04.decrypt($nostrPrivKey, event.pubkey, event.content);

Expand Down
5 changes: 4 additions & 1 deletion src/comp/plugin/StorageManager.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
//todo update stores without reloading window
if (browser) {
window.addEventListener('storage', (e) => {
if (!e.key ) {
return
}
console.log(`Key Changed: ${e.key}`);
console.log(`New Value: ${e.newValue}`);
window.localStorage.setItem(e.key, e.newValue);
window.localStorage.setItem(e.key, e.newValue??'');
window.location.reload();
});
}
Expand Down
7 changes: 3 additions & 4 deletions src/comp/tokens/AvailableTokensTable.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
import type { Mint } from '../../model/mint';
import { pendingTokens } from '../../stores/pendingtokens';
import TokenRow from './TokenRow.svelte';
import type { Token } from '../../model/token';

import type { Proof } from '@cashu/cashu-ts';
export let mint: Mint | undefined = undefined;
export let selectedTokens: Token[] = [];
export let selectedTokens: Proof[] = [];

$: selectedTokensBool = [];

Expand All @@ -15,7 +14,7 @@
$: page = 20;
$: tokenSelection = isPending ? $pendingTokens : $token;
$: tokenFromMint = mint
? tokenSelection.filter((t: Token) => mint?.keysets.includes(t.id))
? tokenSelection.filter((t: Proof) => mint?.keysets.includes(t.id))
: tokenSelection;
$: tokenSub = tokenFromMint.slice(0, page);
$: selectedTokens = tokenSub.filter((t, i) => selectedTokensBool[i]);
Expand Down
1 change: 0 additions & 1 deletion src/comp/tokens/InboxRow.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
getMintForToken,
validateMintKeys
} from '../util/walletUtils';
import type { Token } from '../../model/token';
import { token } from '../../stores/tokens';
import { toast } from '../../stores/toasts';
import { history } from '../../stores/history';
Expand Down
4 changes: 2 additions & 2 deletions src/comp/tokens/TokenRow.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<script lang="ts">
import { CashuMint, CashuWallet, getEncodedToken } from '@cashu/cashu-ts';
import { mints } from '../../stores/mints';
import type { Token } from '../../model/token';
import type { Proof } from '@cashu/cashu-ts';
import { getMintForToken, getTokenSubset } from '../util/walletUtils';
import TokenIcon from './TokenIcon.svelte';
import { toast } from '../../stores/toasts';
Expand All @@ -13,7 +13,7 @@
export let mint: Mint | undefined;
export let isSelected = false;

export let token: Token;
export let token: Proof;

export let i: number;

Expand Down
21 changes: 11 additions & 10 deletions src/comp/util/walletUtils.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import type { Mint } from 'src/model/mint';
import type { Token } from 'src/model/token';
import type { Mint } from '../../../src/model/mint';
import type { Proof } from '@cashu/cashu-ts';


/**
* returns a subset of tokens, so that not all tokens are sent to mint for smaller amounts.
* @param amount
* @param tokens
* @returns
*/
const getTokensToSend = (amount: number, tokens: Array<Token>) => {
const getTokensToSend = (amount: number, tokens: Array<Proof>) => {
let tokenAmount = 0;
const tokenSubset: Array<Token> = tokens.filter((token) => {
const tokenSubset = tokens.filter((token) => {
if (tokenAmount < amount) {
tokenAmount += token.amount;
return true;
Expand All @@ -30,8 +31,8 @@ const validateMintKeys = (keys: object): boolean => {
if (allKeys.length < 1) {
return false;
}

allKeys.forEach((k) => {
//try parse int?
if (isNaN(k)) {
isValid = false;
}
Expand All @@ -55,7 +56,7 @@ const isPow2 = (number: number) => {
* @param tokens
* @returns
*/
const getTokensForMint = (mint: Mint, tokens: Array<Token>) => {
const getTokensForMint = (mint: Mint, tokens: Array<Proof>) => {
const tokenSubset = tokens.filter((token) => {
if (mint?.keysets.includes(token.id)) {
return true;
Expand All @@ -77,11 +78,11 @@ const isValidToken = (obj: any) => {
* @param tokensToRemove
* @returns
*/
const getTokenSubset = (tokens: Array<Token>, tokensToRemove: Array<Token>) => {
const getTokenSubset = (tokens: Array<Proof>, tokensToRemove: Array<Proof>) => {
return tokens.filter((token) => !tokensToRemove.includes(token));
};

const getMintForToken = (token: Token, mints: Array<Mint>): Mint | undefined => {
const getMintForToken = (token: Proof, mints: Array<Mint>): Mint | undefined => {
let mint: Mint | undefined = undefined;
mints.forEach((m) => {
if (m.keysets.includes(token.id)) {
Expand All @@ -91,13 +92,13 @@ const getMintForToken = (token: Token, mints: Array<Mint>): Mint | undefined =>
return mint;
};

const getAmountForTokenSet = (tokens: Array<Token>): number => {
const getAmountForTokenSet = (tokens: Array<Proof>): number => {
return tokens.reduce((acc, t) => {
return acc + t.amount;
}, 0);
};

const getKeysetsOfTokens = (tokens: Array<Token>) => {
const getKeysetsOfTokens = (tokens: Array<Proof>) => {
return removeDuplicatesFromArray(
tokens.map((t) => {
return t.id;
Expand Down
5 changes: 2 additions & 3 deletions src/comp/wallet/Melting.svelte
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
<script lang="ts">
import { CashuMint, CashuWallet } from '@cashu/cashu-ts';
import { CashuMint, CashuWallet, Proof } from '@cashu/cashu-ts';
import LoadingCenter from '../LoadingCenter.svelte';
import { decode } from '@gandlaf21/bolt11-decode';
import { toast } from '../../stores/toasts';
import { token } from '../../stores/tokens';
import { mints } from '../../stores/mints';
import type { Token } from '../../model/token';
import {
getAmountForTokenSet,
getKeysetsOfTokens,
Expand Down Expand Up @@ -80,7 +79,7 @@

const cashuWallet: CashuWallet = new CashuWallet(mint.keys, cashuMint);

let tokensToSend: Array<Token> = [];
let tokensToSend: Array<Proof> = [];

if (isCoinSelection) {
tokensToSend = selectedTokens;
Expand Down
1 change: 0 additions & 1 deletion src/comp/wallet/Receiving.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import { toast } from '../../stores/toasts';
import { mints } from '../../stores/mints';
import LoadingCenter from '../LoadingCenter.svelte';
import type { Token } from '../../model/token';
import { token } from '../../stores/tokens';
import type { Mint } from '../../model/mint';
import { history } from '../../stores/history';
Expand Down