From 5bd0309f66638d8d6dbff075daff6896885565b8 Mon Sep 17 00:00:00 2001 From: Alan O'Donnell Date: Tue, 21 Sep 2021 12:14:15 -0700 Subject: [PATCH] lang: Use Expr for init payer. (#772) --- lang/syn/src/lib.rs | 4 ++-- tests/misc/programs/misc/src/context.rs | 8 ++++++++ tests/misc/programs/misc/src/lib.rs | 7 +++++++ tests/misc/tests/misc.js | 25 +++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/lang/syn/src/lib.rs b/lang/syn/src/lib.rs index cb95f50e0..31feac683 100644 --- a/lang/syn/src/lib.rs +++ b/lang/syn/src/lib.rs @@ -611,7 +611,7 @@ pub enum ConstraintRentExempt { #[derive(Debug, Clone)] pub struct ConstraintInitGroup { pub seeds: Option, - pub payer: Option, + pub payer: Option, pub space: Option, pub kind: InitKind, } @@ -638,7 +638,7 @@ pub struct ConstraintState { #[derive(Debug, Clone)] pub struct ConstraintPayer { - pub target: Ident, + pub target: Expr, } #[derive(Debug, Clone)] diff --git a/tests/misc/programs/misc/src/context.rs b/tests/misc/programs/misc/src/context.rs index d228bdb63..f0cc9bceb 100644 --- a/tests/misc/programs/misc/src/context.rs +++ b/tests/misc/programs/misc/src/context.rs @@ -185,3 +185,11 @@ pub struct TestInitToken<'info> { pub system_program: AccountInfo<'info>, pub token_program: AccountInfo<'info>, } + +#[derive(Accounts)] +pub struct TestCompositePayer<'info> { + pub composite: TestInit<'info>, + #[account(init, payer = composite.payer, space = 8 + size_of::())] + pub data: Account<'info, Data>, + pub system_program: Program<'info, System>, +} diff --git a/tests/misc/programs/misc/src/lib.rs b/tests/misc/programs/misc/src/lib.rs index 227ec8378..91c2e85fa 100644 --- a/tests/misc/programs/misc/src/lib.rs +++ b/tests/misc/programs/misc/src/lib.rs @@ -152,4 +152,11 @@ pub mod misc { assert!(ctx.accounts.token.mint == ctx.accounts.mint.key()); Ok(()) } + + pub fn test_composite_payer(ctx: Context) -> ProgramResult { + ctx.accounts.composite.data.data = 1; + ctx.accounts.data.udata = 2; + ctx.accounts.data.idata = 3; + Ok(()) + } } diff --git a/tests/misc/tests/misc.js b/tests/misc/tests/misc.js index 602328039..e14f72214 100644 --- a/tests/misc/tests/misc.js +++ b/tests/misc/tests/misc.js @@ -578,4 +578,29 @@ describe("misc", () => { assert.ok(account.owner.equals(program.provider.wallet.publicKey)); assert.ok(account.mint.equals(mint.publicKey)); }); + + it("Can initialize multiple accounts via a composite payer", async () => { + const data1 = anchor.web3.Keypair.generate(); + const data2 = anchor.web3.Keypair.generate(); + + const tx = await program.rpc.testCompositePayer({ + accounts: { + composite: { + data: data1.publicKey, + payer: program.provider.wallet.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + }, + data: data2.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + }, + signers: [data1, data2] + }); + + const account1 = await program.account.dataI8.fetch(data1.publicKey); + assert.equal(account1.data, 1); + + const account2 = await program.account.data.fetch(data2.publicKey); + assert.equal(account2.udata, 2); + assert.equal(account2.idata, 3); + }); });