diff --git a/api/src/instruction.rs b/api/src/instruction.rs index 5d00d43..bf0e6bd 100644 --- a/api/src/instruction.rs +++ b/api/src/instruction.rs @@ -50,8 +50,11 @@ pub enum OreInstruction { #[account(0, name = "ore_program", desc = "Ore program")] #[account(1, name = "signer", desc = "Signer", signer)] - #[account(2, name = "proof", desc = "Ore proof account", writable)] - #[account(3, name = "system_program", desc = "Solana system program")] + #[account(2, name = "miner", desc = "Address to be initialized as the miner")] + #[account(3, name = "payer", desc = "Account to pay for account creation", writable, signer)] + #[account(4, name = "proof", desc = "Ore proof account", writable)] + #[account(5, name = "system_program", desc = "Solana system program")] + #[account(6, name = "slot_hashes", desc = "Solana slot hashes sysvar")] Open = 4, #[account(0, name = "ore_program", desc = "Ore program")] diff --git a/program/src/open.rs b/program/src/open.rs index fc6e570..760642b 100644 --- a/program/src/open.rs +++ b/program/src/open.rs @@ -33,11 +33,13 @@ pub fn process_open<'a, 'info>( let args = OpenArgs::try_from_bytes(data)?; // Load accounts - let [signer, miner_info, proof_info, system_program, slot_hashes_info] = accounts else { + let [signer, miner_info, payer_info, proof_info, system_program, slot_hashes_info] = accounts + else { return Err(ProgramError::NotEnoughAccountKeys); }; load_signer(signer)?; load_system_account(miner_info, false)?; + load_signer(payer_info)?; load_uninitialized_pda( proof_info, &[PROOF, signer.key.as_ref()], @@ -54,7 +56,7 @@ pub fn process_open<'a, 'info>( 8 + size_of::(), &[PROOF, signer.key.as_ref(), &[args.bump]], system_program, - signer, + payer_info, )?; let clock = Clock::get().or(Err(ProgramError::InvalidAccountData))?; let mut proof_data = proof_info.data.borrow_mut();