diff --git a/tuktuk-cli/src/cmd/task_queue.rs b/tuktuk-cli/src/cmd/task_queue.rs index 947237a..0df7d34 100644 --- a/tuktuk-cli/src/cmd/task_queue.rs +++ b/tuktuk-cli/src/cmd/task_queue.rs @@ -6,7 +6,7 @@ use solana_sdk::{ instruction::Instruction, pubkey::Pubkey, signer::Signer, system_instruction::transfer, }; use tuktuk::task_queue_name_mapping_key; -use tuktuk_program::{TaskQueueV0, TuktukConfigV0}; +use tuktuk_program::TaskQueueV0; use tuktuk_sdk::prelude::*; use crate::{ diff --git a/tuktuk-sdk/src/lib.rs b/tuktuk-sdk/src/lib.rs index 9093ac7..981b355 100644 --- a/tuktuk-sdk/src/lib.rs +++ b/tuktuk-sdk/src/lib.rs @@ -7,6 +7,8 @@ pub mod pubsub_client; pub mod tuktuk; pub mod watcher; +pub use tuktuk_program; + pub mod prelude { pub use anchor_lang::prelude::*; diff --git a/tuktuk-sdk/src/tuktuk.rs b/tuktuk-sdk/src/tuktuk.rs index 63e0170..c1f614a 100644 --- a/tuktuk-sdk/src/tuktuk.rs +++ b/tuktuk-sdk/src/tuktuk.rs @@ -32,6 +32,14 @@ pub fn task_queue_name_mapping_key(config_key: &Pubkey, name: &str) -> Pubkey { .0 } +pub fn custom_signer_key(task_queue: &Pubkey, signer_seeds: &[&[u8]]) -> Pubkey { + Pubkey::find_program_address( + &[&[b"custom", task_queue.as_ref()], signer_seeds].concat(), + &tuktuk::ID, + ) + .0 +} + #[derive(Debug)] pub struct TaskQueueUpdate { pub task_queues: Vec<(Pubkey, Option)>, @@ -380,7 +388,23 @@ pub mod task_queue { use self::tuktuk::types::InitializeTaskQueueArgsV0; use super::*; - use crate::client::GetAnchorAccount; + use crate::{ + client::GetAnchorAccount, + compiled_transaction::next_available_task_ids_excluding_in_progress, + }; + + pub fn next_available_task_ids( + task_queue: &tuktuk::accounts::TaskQueueV0, + n: u8, + ) -> Result, Error> { + next_available_task_ids_excluding_in_progress( + task_queue.capacity, + &task_queue.task_bitmap, + n, + &Default::default(), + rand::random_range(0..task_queue.task_bitmap.len()), + ) + } pub fn key(config_key: &Pubkey, next_task_queue_id: u32) -> Pubkey { Pubkey::find_program_address( @@ -406,6 +430,10 @@ pub mod task_queue { .0 } + pub fn queue_authority_key(program_id: &Pubkey) -> Pubkey { + Pubkey::find_program_address(&[b"queue_authority"], program_id).0 + } + pub fn keys(config_key: &Pubkey, config: &TuktukConfigV0) -> Result, Error> { let queue_ids = 0..config.next_task_queue_id; let queue_keys = queue_ids.map(|id| self::key(config_key, id)).collect_vec();