Solana Anchor:如何为/读取关联帐户创建#[account(seeds)]?
Solana Anchor: How to make #[account(seeds)] for/ read associated accounts?
在 project-serum/anchor 存储库的 Basic-5 教程中
我如何替换#[associated]
像这样:
#[account(seeds = [user_data.deposit_last.as_ref(), &[user_data.__nonce]])]
上面有些地方不对,Anchor无法读取关联账户的值
const userData = await program.account.userData.associated(wallet1, usdcMint);
那么在关联帐户结构之上替换这个即将被弃用的#[associated] 的正确方法是什么?
#[associated]
#[derive(Default)]
pub struct UserData {
pub authority: Pubkey,
pub deposit_last: i64,
pub shares: u64,
pub reward_debt: u64,
}
//UserData is initialized here first
#[derive(Accounts)]
pub struct Initialize<'info> {
#[account(init, associated = authority, with = usdc_mint)]
pub user_data: ProgramAccount<'info, UserData>,
...
}
所以种子方法是一个 PDA,这实际上是 #associated 在幕后使用的东西
您将需要一个函数来初始化具有以下 init
和 payer
特征的种子。 payer
也应该是实际为交易付款的用户。
请注意,#[instruction(bump: u8]
与此处的函数签名匹配,因此您需要将签名中的 bump 作为第一个参数传入。
#[instruction(bump: u8)]
pub struct Ctx<'info> {
#[account(init, seeds = [user_data.deposit_last.as_ref(), &[bump]], payer = payer)]
pub user_data = ProgramAccount<'info, UserData>,
}
以后其他功能如果只想看账本,就用
#[account(seeds = [user_data.deposit_last.as_ref(), &[user_data.__nonce]])]
pub user_data = ProgramAccount<'info, UserData>,
更改您的帐户数据以使用#[account] 而不是#[associated]
#[account]
#[derive(Default)]
pub struct UserData {
pub authority: Pubkey,
pub deposit_last: i64,
pub shares: u64,
pub reward_debt: u64,
}
这是一个例子https://github.com/project-serum/anchor/blob/master/examples/misc/programs/misc/src/context.rs#L10
在 project-serum/anchor 存储库的 Basic-5 教程中 我如何替换#[associated] 像这样:
#[account(seeds = [user_data.deposit_last.as_ref(), &[user_data.__nonce]])]
上面有些地方不对,Anchor无法读取关联账户的值
const userData = await program.account.userData.associated(wallet1, usdcMint);
那么在关联帐户结构之上替换这个即将被弃用的#[associated] 的正确方法是什么?
#[associated]
#[derive(Default)]
pub struct UserData {
pub authority: Pubkey,
pub deposit_last: i64,
pub shares: u64,
pub reward_debt: u64,
}
//UserData is initialized here first
#[derive(Accounts)]
pub struct Initialize<'info> {
#[account(init, associated = authority, with = usdc_mint)]
pub user_data: ProgramAccount<'info, UserData>,
...
}
所以种子方法是一个 PDA,这实际上是 #associated 在幕后使用的东西
您将需要一个函数来初始化具有以下 init
和 payer
特征的种子。 payer
也应该是实际为交易付款的用户。
请注意,#[instruction(bump: u8]
与此处的函数签名匹配,因此您需要将签名中的 bump 作为第一个参数传入。
#[instruction(bump: u8)]
pub struct Ctx<'info> {
#[account(init, seeds = [user_data.deposit_last.as_ref(), &[bump]], payer = payer)]
pub user_data = ProgramAccount<'info, UserData>,
}
以后其他功能如果只想看账本,就用
#[account(seeds = [user_data.deposit_last.as_ref(), &[user_data.__nonce]])]
pub user_data = ProgramAccount<'info, UserData>,
更改您的帐户数据以使用#[account] 而不是#[associated]
#[account]
#[derive(Default)]
pub struct UserData {
pub authority: Pubkey,
pub deposit_last: i64,
pub shares: u64,
pub reward_debt: u64,
}
这是一个例子https://github.com/project-serum/anchor/blob/master/examples/misc/programs/misc/src/context.rs#L10