From 25cd10deb546f4d8e06227d4f34dfcfd3a738868 Mon Sep 17 00:00:00 2001 From: crypto-vincent Date: Thu, 5 Feb 2026 15:36:49 +0900 Subject: [PATCH] first-exploration --- .../programs/solana-coordinator/src/client.rs | 2 ++ .../solana-coordinator/src/instance_state.rs | 16 +++++++++------- .../solana-coordinator/src/logic/join_run.rs | 7 ++++--- .../src/logic/participant_claim.rs | 9 ++++----- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/client.rs b/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/client.rs index d13ece0a0..cb076a4ed 100644 --- a/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/client.rs +++ b/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/client.rs @@ -25,6 +25,8 @@ use ts_rs::TS; #[ts(rename = "SolanaClient")] pub struct Client { pub id: ClientId, + #[ts(type = "number[]")] + pub claimer: Pubkey, pub _unused: [u8; 8], pub earned: u64, pub slashed: u64, diff --git a/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/instance_state.rs b/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/instance_state.rs index 029b40fad..16afdfeb2 100644 --- a/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/instance_state.rs +++ b/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/instance_state.rs @@ -1,28 +1,28 @@ use anchor_lang::prelude::*; use bytemuck::Pod; use bytemuck::Zeroable; +use psyche_coordinator::model::HubRepo; +use psyche_coordinator::model::Model; use psyche_coordinator::ClientState; use psyche_coordinator::Coordinator; use psyche_coordinator::CoordinatorConfig; use psyche_coordinator::CoordinatorProgress; use psyche_coordinator::HealthChecks; use psyche_coordinator::RunState; -use psyche_coordinator::SOLANA_MAX_STRING_LEN; use psyche_coordinator::TickResult; use psyche_coordinator::Witness; -use psyche_coordinator::model::HubRepo; -use psyche_coordinator::model::Model; +use psyche_coordinator::SOLANA_MAX_STRING_LEN; +use psyche_core::sha256v; use psyche_core::FixedString; use psyche_core::SmallBoolean; -use psyche_core::sha256v; use serde::Deserialize; use serde::Serialize; use ts_rs::TS; -use crate::ClientId; -use crate::ProgramError; use crate::client::Client; use crate::clients_state::ClientsState; +use crate::ClientId; +use crate::ProgramError; #[derive( Debug, @@ -323,7 +323,7 @@ impl CoordinatorInstanceState { Ok(()) } - pub fn join_run(&mut self, id: ClientId) -> Result<()> { + pub fn join_run(&mut self, id: ClientId, claimer: Pubkey) -> Result<()> { let existing = match self .clients_state .clients @@ -335,6 +335,7 @@ impl CoordinatorInstanceState { return err!(ProgramError::ClientIdMismatch); } client.id = id; // IMPORTANT. Equality is on wallet key but includes ephemeral p2p key + client.claimer = claimer; client.active = self.clients_state.next_active; msg!("Existing client {} re-joined", id.signer); true @@ -352,6 +353,7 @@ impl CoordinatorInstanceState { let new_client = Client { id, + claimer, earned: 0, slashed: 0, active: self.clients_state.next_active, diff --git a/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/logic/join_run.rs b/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/logic/join_run.rs index 7b4da055f..a6bf1fc6e 100644 --- a/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/logic/join_run.rs +++ b/architectures/decentralized/solana-coordinator/programs/solana-coordinator/src/logic/join_run.rs @@ -1,11 +1,11 @@ use anchor_lang::prelude::*; use psyche_solana_authorizer::state::Authorization; +use crate::bytes_from_string; +use crate::program_error::ProgramError; use crate::ClientId; use crate::CoordinatorAccount; use crate::CoordinatorInstance; -use crate::bytes_from_string; -use crate::program_error::ProgramError; pub const JOIN_RUN_AUTHORIZATION_SCOPE: &[u8] = b"CoordinatorJoinRun"; @@ -44,6 +44,7 @@ pub struct JoinRunAccounts<'info> { #[derive(AnchorSerialize, AnchorDeserialize, Clone)] pub struct JoinRunParams { pub client_id: ClientId, + pub claimer: Pubkey, } pub fn join_run_processor( @@ -55,5 +56,5 @@ pub fn join_run_processor( } let mut account = context.accounts.coordinator_account.load_mut()?; account.increment_nonce(); - account.state.join_run(params.client_id) + account.state.join_run(params.client_id, params.claimer) } diff --git a/architectures/decentralized/solana-treasurer/programs/solana-treasurer/src/logic/participant_claim.rs b/architectures/decentralized/solana-treasurer/programs/solana-treasurer/src/logic/participant_claim.rs index d59a7bd5e..90a635521 100644 --- a/architectures/decentralized/solana-treasurer/programs/solana-treasurer/src/logic/participant_claim.rs +++ b/architectures/decentralized/solana-treasurer/programs/solana-treasurer/src/logic/participant_claim.rs @@ -1,13 +1,13 @@ use anchor_lang::prelude::*; +use anchor_spl::token::transfer; use anchor_spl::token::Token; use anchor_spl::token::TokenAccount; use anchor_spl::token::Transfer; -use anchor_spl::token::transfer; use psyche_solana_coordinator::CoordinatorAccount; -use crate::ProgramError; use crate::state::Participant; use crate::state::Run; +use crate::ProgramError; #[derive(Accounts)] #[instruction(params: ParticipantClaimParams)] @@ -75,9 +75,8 @@ pub fn participant_claim_processor( .clients .iter() { - if client.id.signer == context.accounts.user.key() { - participant_earned_points = client.earned; - break; + if client.claimer == context.accounts.user.key() { + participant_earned_points += client.earned; } }