diff --git a/cli/src/main.rs b/cli/src/main.rs index 081fb14..7d7eb08 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -84,6 +84,9 @@ async fn main() { "migrate" => { migrate(&rpc, &payer).await.unwrap(); } + "migrate_all" => { + migrate_all(&rpc, &payer).await.unwrap(); + } "benchmark" => { benchmark_keccak().await.unwrap(); } @@ -269,7 +272,7 @@ async fn migrate_all( miner_address ); let ix = ore_api::sdk::migrate_miner_account(payer.pubkey(), *miner_address); - simulate_transaction(rpc, payer, &[ix]).await; + let sig = submit_transaction(rpc, payer, &[ix]).await?; } Ok(()) } diff --git a/program/src/migrate_miner_account.rs b/program/src/migrate_miner_account.rs index ef8d769..3f766da 100644 --- a/program/src/migrate_miner_account.rs +++ b/program/src/migrate_miner_account.rs @@ -1,7 +1,7 @@ use std::mem::size_of; use ore_api::prelude::*; -use solana_program::log::sol_log; +use solana_program::{log::sol_log, rent::Rent}; use steel::*; /// Migrates a miner account from the old format to the new format. @@ -28,6 +28,12 @@ pub fn process_migrate_miner_account(accounts: &[AccountInfo<'_>], _data: &[u8]) // Reallocate new account. miner_info.realloc(8 + size_of::(), false)?; + // Transfer min required rent. + let rent = Rent::get()?; + let min_rent = rent.minimum_balance(8 + size_of::()); + let lamport_delta = min_rent.saturating_sub(miner_info.lamports()); + miner_info.collect(lamport_delta, signer_info)?; + // Copy new data. let miner = miner_info.as_account_mut::(&ore_api::ID)?; miner.authority = authority;