Created
November 27, 2021 01:18
-
-
Save cqfd/ffbdebbbcd3460ec822c3e63572cc282 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pub fn goofy(ctx: Context<Goofy>) -> ProgramResult { | |
// Manually pay the fresh account some money | |
**ctx | |
.accounts | |
.payer // some account owned by us, with some money | |
.to_account_info() | |
.try_borrow_mut_lamports()? -= 2000000; // random big-enough amount | |
**ctx.accounts.new_account.try_borrow_mut_lamports()? += 2000000; | |
// Allocate the new_account some space (it has money now). | |
let mut allocate_ix = anchor_lang::solana_program::system_instruction::allocate( | |
ctx.accounts.new_account.key, | |
128, | |
); | |
// Horrible hack, need to do this b/c of basically a bug in solana | |
// the payer account shouldn't need to go here | |
allocate_ix.accounts.push(AccountMeta { | |
pubkey: ctx.accounts.payer.key(), | |
is_signer: false, | |
is_writable: false, | |
}); | |
anchor_lang::solana_program::program::invoke( | |
&allocate_ix, | |
&[ | |
ctx.accounts.new_account.to_account_info(), | |
// Need to pass the payer here too, due to horrible hack/bug mentioned above | |
ctx.accounts.payer.to_account_info(), | |
], | |
)?; | |
let mut ownership_ix = anchor_lang::solana_program::system_instruction::assign( | |
ctx.accounts.new_account.key, | |
&ID, | |
); | |
// Same horrible hack/bug as above | |
ownership_ix.accounts.push(AccountMeta { | |
pubkey: ctx.accounts.payer.key(), | |
is_signer: false, | |
is_writable: false, | |
}); | |
anchor_lang::solana_program::program::invoke( | |
&ownership_ix, | |
&[ | |
ctx.accounts.new_account.to_account_info(), | |
// Same horrible/hack as above, gotta pass this irrelevant account. | |
ctx.accounts.payer.to_account_info(), | |
], | |
)?; | |
Ok(()) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment