我有这个账户:
#[derive(Accounts)]
pub struct SignupEmployee<'info> {
#[account(init, payer = company_account, space = 8 + 32 + 32)]
pub employee_account: Account<'info, EmployeeState>,
#[account(mut)]
pub company_account: Signer<'info>,
#[account(mut)]
pub authority: Signer<'info>,
pub system_program: Program<'info, System>,
}
这个测试函数
const employeeAccount = anchor.web3.Keypair.generate();
await program.rpc.signupEmployee({
accounts: {
authority: provider.wallet.publicKey,
companyAccount: companyAccount.publicKey,
employeeAccount: employeeAccount.publicKey,
systemProgram: SystemProgram.programId,
},
signers: [employeeAccount, companyAccount],
});
我想实现的是让公司为员工注册支付费用。
基本上在我的系统中,我将同时拥有公司的钥匙和员工的钥匙。
员工将用他的钥匙注册,公司必须为交易支付费用。
我看到签名者是一个数组,所以我想象我可以同时输入公司和员工帐户。
我怎样才能做到这一点?
solana web3包中的Transaction对象有一个feePayer字段,您应该将其设置为希望为事务支付的帐户的公钥。然后,该帐户也需要签署交易。请随意查看Transaction类的文档
在您的指示中,您已经将company_account指定为新帐户初始化的付款人,因此我假设您想知道如何使用同一帐户支付gas费。您可以使用program.instruction.signupEmployee,它将输出交易指令,您可以将该指令添加到自定义交易中,其中可以指定汽油费支付者。这样,您就需要使用自定义代码签名和发送交易。