problem: incorrect satflow calculation

This commit is contained in:
gsovereignty
2024-08-04 17:26:26 +08:00
parent 65881e87a4
commit 9c7a6e56e5
6 changed files with 41 additions and 34 deletions

View File

@@ -103,6 +103,7 @@
<Table.Head class="hidden text-left md:table-cell">Problem</Table.Head>
<Table.Head class="table-cell">Amount (Sats)</Table.Head>
<Table.Head class="table-cell">Merits</Table.Head>
<Table.Head class="hidden text-center md:table-cell">Status</Table.Head>
<Table.Head class="hidden text-right md:table-cell">When</Table.Head>
</Table.Row>
</Table.Header>
@@ -119,12 +120,12 @@
<Avatar
ndk={$ndk}
pubkey={merit.Pubkey}
class="h-10 w-10 flex-none rounded-full object-cover"
class="h-8 w-8 flex-none rounded-full object-cover"
/>
<Name
ndk={$ndk}
pubkey={merit.Pubkey}
class="hidden max-w-32 truncate p-2 md:inline-block"
class="hidden max-w-32 truncate p-1 md:inline-block"
/>
</div>
</Table.Cell>
@@ -133,10 +134,11 @@
</Table.Cell>
<Table.Cell class="table-cell">{merit.Sats}</Table.Cell>
<Table.Cell class="table-cell">{merit.Merits}</Table.Cell>
<Table.Cell class="table-cell text-center">{status(merit).toUpperCase()}</Table.Cell>
<Table.Cell class="hidden text-right md:table-cell"
>{unixToRelativeTime(merit.TimeStamp * 1000)}</Table.Cell
>
<Table.Cell class="table-cell">{status(merit).toUpperCase()}</Table.Cell>
</Table.Row>
{/each}
{#if $merits.size > $meritsTruncated.length}

View File

@@ -8,17 +8,25 @@
import { Avatar, Name } from '@nostr-dev-kit/ndk-svelte-components';
import { ndk } from '@/ndk';
export let rocket: NDKEvent;
export let unratifiedZaps:number = 0;
export let rocket: Rocket;
export let unratifiedZaps: Map<string, number>;
let parsedRocket = new Rocket(rocket);
let unratifiedZapsAmount = 0;
$: {
unratifiedZapsAmount = 0;
for (let [_, a] of unratifiedZaps) {
unratifiedZapsAmount += a / 1000;
}
unratifiedZapsAmount = unratifiedZapsAmount;
}
let _merits: { pubkey: string; merits: number; sats: number }[] = [];
let merits = writable(_merits);
$: {
let m = new Map<string, { merits: number; sats: number }>();
for (let [_, amr] of parsedRocket.ApprovedMeritRequests()) {
for (let [_, amr] of rocket.ApprovedMeritRequests()) {
let existing = m.get(amr.Pubkey);
if (!existing) {
existing = { merits: 0, sats: 0 };
@@ -29,12 +37,12 @@
}
//calculate percentage ownership of each pubkey and divide the unratified sats among them (round up to nearest sat):
let satsPerMeritPercentage = unratifiedZaps/100
let totalMerits = parsedRocket.TotalMerits()
let satsPerMeritPercentage = unratifiedZapsAmount / 100;
let totalMerits = rocket.TotalMerits();
for (let [id, _m] of m) {
_m.sats += (((_m.merits/totalMerits)*100)*satsPerMeritPercentage)
_m.sats = Math.round(_m.sats)
m.set(id, _m)
_m.sats += (_m.merits / totalMerits) * 100 * satsPerMeritPercentage;
_m.sats = Math.round(_m.sats);
m.set(id, _m);
}
let _merits: { pubkey: string; merits: number; sats: number }[] = [];
@@ -42,16 +50,16 @@
_merits.push({ pubkey: pubkey, merits: _m.merits, sats: _m.sats });
}
if (_merits.length == 0) {
_merits.push({pubkey: rocket.pubkey, merits: 1, sats: 0})
_merits.push({ pubkey: rocket.Event.pubkey, merits: 1, sats: 0 });
}
merits.set(_merits);
}
const COLORS = ["bg-pink-800", 'bg-red-800', 'bg-purple-800', 'bg-blue-800'];
const COLORS = ['bg-pink-800', 'bg-red-800', 'bg-purple-800', 'bg-blue-800'];
function c(i: number) {
return COLORS[i]
return COLORS[i];
}
</script>
@@ -60,13 +68,13 @@
<Card.Title>Merits and Satflow</Card.Title>
<Card.Description class="grid grid-cols-2">
<div class=" grid-cols-1">
This graph displays the Meritization of equity in {rocket.getMatchingTags('d')[0][1]}
This graph displays the Meritization of equity in {rocket.Name()}
<Pie data={$merits} />
</div>
<div class=" grid-cols-1">
<Table.Root>
<Table.Header>
<Table.Row>
<Table.Row class="">
<Table.Head>Participant</Table.Head>
<Table.Head class="hidden md:table-cell">Merits</Table.Head>
<Table.Head class="text-right">Revenue (Sats)</Table.Head>
@@ -80,12 +88,12 @@
<Avatar
ndk={$ndk}
{pubkey}
class="h-10 w-10 flex-none rounded-full object-cover"
class="h-8 w-8 flex-none rounded-full object-cover"
/>
<Name
ndk={$ndk}
{pubkey}
class="hidden max-w-32 truncate p-2 md:inline-block"
class="hidden max-w-32 truncate p-1 md:inline-block"
/>
</div>
</Table.Cell>

View File

@@ -11,7 +11,7 @@
import { ChevronLeft, ChevronRight } from 'lucide-svelte';
export let rocket: Rocket;
export let unratifiedZaps = 0;
export let unratifiedZaps:Map<string, number>;
let products = writable(new Map<string, Product>());

View File

@@ -1,18 +1,17 @@
<script lang="ts">
import * as Table from '@/components/ui/table';
import { Product, Rocket, ValidateZapPublisher, ZapPurchase, type RocketProduct } from '@/event_helpers/rockets';
import { Product, Rocket, ValidateZapPublisher, ZapPurchase } from '@/event_helpers/rockets';
import { unixToRelativeTime } from '@/helpers';
import { ndk } from '@/ndk';
import { NDKEvent } from '@nostr-dev-kit/ndk';
import { Avatar, Name } from '@nostr-dev-kit/ndk-svelte-components';
import { onDestroy, onMount } from 'svelte';
import { onDestroy } from 'svelte';
import { derived, writable } from 'svelte/store';
export let products: Product[];
//export let products: Product[];
export let rocket: Rocket;
export let unratifiedZaps:number = 0; //todo upstream bind this and parse outstanding zaps to merits and satflow component.
export let unratifiedZaps:Map<string, number>; //todo upstream bind this and pass outstanding zaps to merits and satflow component.
let zaps = $ndk.storeSubscribe(
[{ '#a': [`31108:${rocket.Event.author.pubkey}:${rocket.Event.dTag}`], kinds: [9735] }],
@@ -90,11 +89,10 @@
});
validatedZapsNotInRocket.subscribe(zaps=>{
let total = 0
for (let [_, z] of zaps) {
total += z.Amount
unratifiedZaps.set(z.ZapReceipt.id, z.Amount)
}
unratifiedZaps = total/1000
unratifiedZaps = unratifiedZaps
})
//todo: get existing purchases from rocket and render them
@@ -127,12 +125,12 @@
<Avatar
ndk={$ndk}
pubkey={purchase.BuyerPubkey}
class="h-10 w-10 flex-none rounded-full object-cover"
class="h-8 w-8 flex-none rounded-full object-cover"
/>
<Name
ndk={$ndk}
pubkey={purchase.BuyerPubkey}
class="inline-block max-w-32 truncate p-2"
class="inline-block max-w-32 truncate p-1"
/>
</div>
</Table.Cell>

View File

@@ -16,7 +16,7 @@
export let rocket: NDKEvent;
$: unratifiedZaps = 0
$: unratifiedZaps = new Map<string, number>()
</script>
@@ -37,7 +37,7 @@
<main
class="grid flex-1 items-start gap-4 p-4 sm:px-6 sm:py-0 md:gap-2 lg:grid-cols-3 xl:grid-cols-3"
>
<MeritsAndSatflow {unratifiedZaps} {rocket} />
<MeritsAndSatflow {unratifiedZaps} rocket={new Rocket(rocket)} />
<ProductFomo bind:unratifiedZaps rocket={new Rocket(rocket)} />

View File

@@ -18,7 +18,6 @@
for (let e of $rockets) {
let existing = _r.get(`${e.pubkey}${e.dTag}`)
if (!existing) {
console.log(e)
existing = new Rocket(e)
}
if (existing.Event.created_at <= e.created_at) {