mirror of
https://github.com/aljazceru/hypergolic.git
synced 2025-12-18 14:04:21 +01:00
problem: pubkeys without votepwoer can vote
This commit is contained in:
@@ -10,11 +10,12 @@
|
||||
|
||||
import { Separator } from '$lib/components/ui/separator/index.js';
|
||||
import * as Table from '@/components/ui/table';
|
||||
import { RocketATagFilter } from '@/event_helpers/rockets';
|
||||
import { Rocket, RocketATagFilter } from '@/event_helpers/rockets';
|
||||
import { derived } from 'svelte/store';
|
||||
import { goto } from '$app/navigation';
|
||||
import { base } from '$app/paths';
|
||||
import { unixToRelativeTime } from '@/helpers';
|
||||
import RocketCard from './RocketCard.svelte';
|
||||
|
||||
export let merit: MeritRequest;
|
||||
export let rocket: NDKEvent;
|
||||
@@ -30,7 +31,7 @@
|
||||
let vMap = new Map<string, Vote>();
|
||||
for (let v of $_votes) {
|
||||
let vote = new Vote(v);
|
||||
if (vote.BasicValidation()) {
|
||||
if (vote.BasicValidation() && vote.ValidateAgainstRocket(new Rocket(rocket))) {
|
||||
vMap.set(vote.ID, vote);
|
||||
}
|
||||
}
|
||||
@@ -107,7 +108,7 @@
|
||||
console.log(vote.Event.rawEvent());
|
||||
goto(`${base}/rockets/merits/${vote.ID}`);
|
||||
}}
|
||||
class="cursor-pointer {vote.VoteDirection == "ratify"?"bg-lime-600":"bg-red-700"} "
|
||||
class="cursor-pointer {vote.VoteDirection == "ratify"?"bg-lime-600":"bg-red-700"} {vote.VoteDirection == "ratify"?"hover:bg-lime-700":"hover:bg-red-800"}"
|
||||
>
|
||||
<Table.Cell>
|
||||
<div class="flex flex-nowrap">
|
||||
@@ -135,6 +136,6 @@
|
||||
>
|
||||
</Card.Header>
|
||||
<Card.Footer class="flex flex-row items-center border-t px-6 py-3">
|
||||
<VoteOnMeritRequest {merit} {rocket} />
|
||||
<VoteOnMeritRequest {merit} rocket={new Rocket(rocket)} />
|
||||
</Card.Footer>
|
||||
</Card.Root>
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
<script lang="ts">
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { MeritRequest } from '@/event_helpers/merits';
|
||||
import type { Rocket } from '@/event_helpers/rockets';
|
||||
import { ndk } from '@/ndk';
|
||||
import { currentUser } from '@/stores/session';
|
||||
import { NDKEvent } from '@nostr-dev-kit/ndk';
|
||||
import type NDKSvelte from '@nostr-dev-kit/ndk-svelte';
|
||||
import { Name } from '@nostr-dev-kit/ndk-svelte-components';
|
||||
import Login from './Login.svelte';
|
||||
import { ndk } from '@/ndk';
|
||||
|
||||
export let merit: MeritRequest;
|
||||
export let rocket: NDKEvent;
|
||||
export let rocket: Rocket;
|
||||
|
||||
function publish(ndk: NDKSvelte, direction: string) {
|
||||
if (!ndk.signer) {
|
||||
@@ -22,7 +24,7 @@
|
||||
e.author = author;
|
||||
e.kind = 1410;
|
||||
e.created_at = Math.floor(new Date().getTime() / 1000);
|
||||
e.tags.push(['a', `31108:${rocket.pubkey}:${rocket.dTag}`]);
|
||||
e.tags.push(['a', `31108:${rocket.Event.pubkey}:${rocket.Event.dTag}`]);
|
||||
e.tags.push(['request', merit.ID]);
|
||||
e.tags.push(['e', merit.ID]);
|
||||
e.tags.push(['p', merit.Pubkey]);
|
||||
@@ -32,6 +34,16 @@
|
||||
console.log(x);
|
||||
});
|
||||
}
|
||||
|
||||
$:currentUserHasVotepower = false;
|
||||
|
||||
$:{
|
||||
if (currentUser && $currentUser) {
|
||||
currentUserHasVotepower = (rocket.VotePowerForPubkey($currentUser.pubkey) > 0)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
{#if $currentUser}
|
||||
@@ -39,14 +51,23 @@
|
||||
variant="default"
|
||||
class="m-2"
|
||||
on:click={() => {
|
||||
publish($ndk, 'ratify');
|
||||
if (currentUserHasVotepower) {
|
||||
publish($ndk, 'ratify');
|
||||
} else {
|
||||
alert(`Your pubkey does not have votepower in ${rocket.Name()}`)
|
||||
}
|
||||
|
||||
}}>Vote to Approve</Button
|
||||
>
|
||||
<Button
|
||||
variant="destructive"
|
||||
class="m-2"
|
||||
on:click={() => {
|
||||
publish($ndk, 'ratify');
|
||||
if (currentUserHasVotepower) {
|
||||
publish($ndk, 'blackball');
|
||||
} else {
|
||||
alert(`Your pubkey does not have votepower in ${rocket.Name()}`)
|
||||
}
|
||||
}}>Vote to Reject</Button
|
||||
>
|
||||
{:else}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { NDKEvent, NDKFilter, NDKTag } from '@nostr-dev-kit/ndk';
|
||||
import { getNumberFromTag, isValidUrl } from './rockets';
|
||||
import { Rocket, getNumberFromTag, isValidUrl } from './rockets';
|
||||
|
||||
export class MeritRequest {
|
||||
ID: string;
|
||||
@@ -30,7 +30,7 @@ export class MeritRequest {
|
||||
}
|
||||
return _solution;
|
||||
}
|
||||
IncludedInRocketState(rocket: NDKEvent): boolean {
|
||||
IncludedInRocketState(rocket: Rocket): boolean {
|
||||
return true;
|
||||
}
|
||||
BasicValidation(): boolean {
|
||||
@@ -105,6 +105,13 @@ export class Vote {
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
ValidateAgainstRocket(rocket:Rocket):boolean {
|
||||
let valid = true;
|
||||
if (!(rocket.VotePowerForPubkey(this.Pubkey) > 0)) {
|
||||
valid = false
|
||||
}
|
||||
return valid
|
||||
}
|
||||
RocketTag(): NDKTag | undefined {
|
||||
let tag: NDKTag | undefined = undefined;
|
||||
if (this.BasicValidation()) {
|
||||
|
||||
@@ -1,4 +1,22 @@
|
||||
import { NDKEvent, type NDKFilter, type NDKTag } from '@nostr-dev-kit/ndk';
|
||||
import { NDKEvent, type NDKTag } from '@nostr-dev-kit/ndk';
|
||||
|
||||
export class Rocket {
|
||||
Event: NDKEvent;
|
||||
Name():string {
|
||||
return this.Event.dTag!
|
||||
}
|
||||
VotePowerForPubkey(pubkey:string):number {
|
||||
let votepower = 0
|
||||
if (this.Event.pubkey == pubkey) {
|
||||
//todo: calculate votepower for pubkey based on approved merit requests
|
||||
votepower++
|
||||
}
|
||||
return votepower
|
||||
}
|
||||
constructor(event:NDKEvent) {
|
||||
this.Event = event;
|
||||
}
|
||||
}
|
||||
|
||||
export class RocketProduct {
|
||||
ID: string;
|
||||
|
||||
Reference in New Issue
Block a user