solana-program-library/token-upgrade/program/src/lib.rs

61 lines
1.6 KiB
Rust

//! Convention for upgrading tokens from one program to another
#![deny(missing_docs)]
#![forbid(unsafe_code)]
mod entrypoint;
pub mod error;
pub mod instruction;
pub mod processor;
// Export current SDK types for downstream users building with a different SDK version
pub use solana_program;
use solana_program::pubkey::Pubkey;
solana_program::declare_id!("TkupDoNseygccBCjSsrSpMccjwHfTYwcrjpnDSrFDhC");
const TOKEN_ESCROW_AUTHORITY_SEED: &[u8] = b"token-escrow-authority";
/// Get the upgrade token account authority
pub fn get_token_upgrade_authority_address(
original_mint: &Pubkey,
new_mint: &Pubkey,
program_id: &Pubkey,
) -> Pubkey {
get_token_upgrade_authority_address_and_bump_seed(original_mint, new_mint, program_id).0
}
pub(crate) fn get_token_upgrade_authority_address_and_bump_seed(
original_mint: &Pubkey,
new_mint: &Pubkey,
program_id: &Pubkey,
) -> (Pubkey, u8) {
Pubkey::find_program_address(
&collect_token_upgrade_authority_seeds(original_mint, new_mint),
program_id,
)
}
pub(crate) fn collect_token_upgrade_authority_seeds<'a>(
original_mint: &'a Pubkey,
new_mint: &'a Pubkey,
) -> [&'a [u8]; 3] {
[
TOKEN_ESCROW_AUTHORITY_SEED,
original_mint.as_ref(),
new_mint.as_ref(),
]
}
pub(crate) fn collect_token_upgrade_authority_signer_seeds<'a>(
original_mint: &'a Pubkey,
new_mint: &'a Pubkey,
bump_seed: &'a [u8],
) -> [&'a [u8]; 4] {
[
TOKEN_ESCROW_AUTHORITY_SEED,
original_mint.as_ref(),
new_mint.as_ref(),
bump_seed,
]
}