首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于权限提升,更改PDA拥有的令牌帐户权限失败

由于权限提升,更改PDA拥有的令牌帐户权限失败
EN

Stack Overflow用户
提问于 2021-10-07 11:10:50
回答 1查看 581关注 0票数 0

当我尝试更改SPL的权限时,我得到了一个权限提升错误(Hw5dRzdcUNHahscRYr1AtsS3t6KXoxyHiGaeShjF7Wq3's signer privilege escalated)。在以下代码中,Hw5dRzdcUNHahscRYr1AtsS3t6KXoxyHiGaeShjF7Wq3是escrow_signer的地址。

我可以确认SPL令牌帐户归PDA所有,因为我在另一项交易中更改了它的权限。

代码语言:javascript
复制
        token::set_authority(
            ctx.accounts.into(),
            AuthorityType::AccountOwner,
            Some(ctx.accounts.escrow_signer.key()),
        )?;
代码语言:javascript
复制
    pub fn terminate_escrow  (ctx: Context<Terminate>) -> ProgramResult {
        let seeds = &[
            ctx.accounts.escrow_signer.key.as_ref(),
            &[ctx.accounts.escrow_account.nonce],
        ];

        let cpi_accounts = SetAuthority {
            account_or_mint: ctx.accounts
                .initializer_lp_token_account
                .to_account_info()
                .clone(),
            current_authority: ctx.accounts.escrow_signer.clone(),
        };

        let cpi_program = ctx.accounts.token_program.clone();

        token::set_authority(
            CpiContext::new(cpi_program, cpi_accounts)
                .with_signer(&[&seeds[..]]),
            AuthorityType::AccountOwner,
            Some(ctx.accounts.initializer.key()),
        )?;
}

#[derive(Accounts)]
pub struct Terminate<'info> {
    ...
    #[account(
        seeds = [escrow_account.to_account_info().key.as_ref()],
        bump = escrow_account.nonce,
    )]
    pub escrow_signer: AccountInfo<'info>,
}

下面是我创建PDA地址的方法:

代码语言:javascript
复制
        const [_escrowSigner, _nonce] = await anchor.web3.PublicKey.findProgramAddress(
            [escrowAccount.publicKey.toBuffer()],
            program.programId
        );

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-10-13 21:56:43

你的种子应该是:

代码语言:javascript
复制
let seeds = &[
    ctx.accounts.escrow_account.key.as_ref(),
    &[ctx.accounts.escrow_account.nonce],
];

而不是签名者?

我想知道它们是不是被错误地传递了,所以escrow_signer实际上是escrow_account,它没有签署这条指令,这可以解释这个错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69480093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档