From 2796f80a49bdffce25a89e7053d73e219d8405c2 Mon Sep 17 00:00:00 2001 From: Gabriele Picco Date: Thu, 27 Jun 2024 19:02:49 +0100 Subject: [PATCH] :sparkles: Add allow undelegation ix --- Cargo.lock | 16 +++- Cargo.toml | 2 +- clients/bolt-sdk/package.json | 2 +- clients/bolt-sdk/src/delegation/accounts.ts | 51 ------------ .../src/delegation/allow_undelegation.ts | 75 ++++++++++++++++++ clients/bolt-sdk/src/delegation/delegate.ts | 16 ++-- clients/bolt-sdk/src/index.ts | 2 +- clients/bolt-sdk/yarn.lock | 8 +- .../bolt-lang/attribute/delegate/src/lib.rs | 50 +++++++++++- crates/bolt-lang/src/lib.rs | 2 +- tests/bolt.ts | 9 ++- tests/fixtures/delegation.so | Bin 201256 -> 201256 bytes 12 files changed, 162 insertions(+), 71 deletions(-) delete mode 100644 clients/bolt-sdk/src/delegation/accounts.ts create mode 100644 clients/bolt-sdk/src/delegation/allow_undelegation.ts diff --git a/Cargo.lock b/Cargo.lock index ceb61607..0e8c694e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1587,14 +1587,26 @@ checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "delegation-program-sdk" -version = "0.0.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4c66a4e72ca5581f8f14cc69bcded51da1d1c8e548e2b394bc00bb76b0b7d" +checksum = "f8c618cde8084c987bdf7434d06253b5c79d032aa487fc996965d5dc59e3dbd6" dependencies = [ "borsh 0.10.3", + "delegation-sdk-attribute-delegate", "solana-program", ] +[[package]] +name = "delegation-sdk-attribute-delegate" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c95b9e42aee58a38bcd7f3f0014a832e66ea31157f4f8102ae85a4a37aa4eeb5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "der" version = "0.5.1" diff --git a/Cargo.toml b/Cargo.toml index 49b5acaa..c17803a8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,7 +51,7 @@ anyhow = "1.0.32" heck = "0.5.0" clap = { version = "4.2.4", features = ["derive"] } ahash = "=0.8.11" -delegation-program-sdk = "=0.0.2" +delegation-program-sdk = "=0.1.3" [profile.release] overflow-checks = true diff --git a/clients/bolt-sdk/package.json b/clients/bolt-sdk/package.json index 8db29a0b..b22dc9ef 100644 --- a/clients/bolt-sdk/package.json +++ b/clients/bolt-sdk/package.json @@ -8,7 +8,7 @@ "dependencies": { "@metaplex-foundation/beet": "^0.7.1", "@metaplex-foundation/beet-solana": "^0.4.0", - "@magicblock-labs/delegation-program": "0.1.1" + "@magicblock-labs/delegation-program": "0.1.3" }, "devDependencies": { "@metaplex-foundation/solita": "^0.20.1", diff --git a/clients/bolt-sdk/src/delegation/accounts.ts b/clients/bolt-sdk/src/delegation/accounts.ts deleted file mode 100644 index 96320b6f..00000000 --- a/clients/bolt-sdk/src/delegation/accounts.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { PublicKey } from "@solana/web3.js"; -import { - DELEGATED_ACCOUNT_SEEDS, - DELEGATION_PROGRAM_ID, - SEED_BUFFER_PDA, - SEED_COMMIT_STATE_RECORD_PDA, - SEED_DELEGATION_PDA, - SEED_STATE_DIFF_PDA, -} from "@magicblock-labs/delegation-program"; - -export function getDelegationAccounts( - accountToDelegate: PublicKey, - ownerProgram: PublicKey, - ownedBuffer: boolean = true -) { - const pdaBytes = accountToDelegate.toBytes(); - - const [delegationPda] = PublicKey.findProgramAddressSync( - [Buffer.from(SEED_DELEGATION_PDA), pdaBytes], - new PublicKey(DELEGATION_PROGRAM_ID) - ); - - const [delegatedAccountSeedsPda] = PublicKey.findProgramAddressSync( - [Buffer.from(DELEGATED_ACCOUNT_SEEDS), pdaBytes], - new PublicKey(DELEGATION_PROGRAM_ID) - ); - - const [bufferPda] = PublicKey.findProgramAddressSync( - [Buffer.from(SEED_BUFFER_PDA), pdaBytes], - ownedBuffer - ? new PublicKey(ownerProgram) - : new PublicKey(DELEGATION_PROGRAM_ID) - ); - - const [commitStateRecordPda] = PublicKey.findProgramAddressSync( - [Buffer.from(SEED_COMMIT_STATE_RECORD_PDA), pdaBytes], - new PublicKey(DELEGATION_PROGRAM_ID) - ); - - const [commitStatePda] = PublicKey.findProgramAddressSync( - [Buffer.from(SEED_STATE_DIFF_PDA), pdaBytes], - new PublicKey(DELEGATION_PROGRAM_ID) - ); - return { - delegationPda, - delegatedAccountSeedsPda, - bufferPda, - commitStateRecordPda, - commitStatePda, - }; -} diff --git a/clients/bolt-sdk/src/delegation/allow_undelegation.ts b/clients/bolt-sdk/src/delegation/allow_undelegation.ts new file mode 100644 index 00000000..c34f674c --- /dev/null +++ b/clients/bolt-sdk/src/delegation/allow_undelegation.ts @@ -0,0 +1,75 @@ +import * as beet from "@metaplex-foundation/beet"; +import * as web3 from "@solana/web3.js"; +import { + DelegateAccounts, + DELEGATION_PROGRAM_ID, +} from "@magicblock-labs/delegation-program"; + +export const allowUndelegationStruct = new beet.BeetArgsStruct<{ + instructionDiscriminator: number[] /* size: 8 */; +}>( + [["instructionDiscriminator", beet.uniformFixedSizeArray(beet.u8, 8)]], + "allowUndelegationInstructionArgs" +); + +export interface AllowUndelegationInstructionAccounts { + delegatedAccount: web3.PublicKey; + ownerProgram: web3.PublicKey; + buffer?: web3.PublicKey; +} + +export const allowUndelegateInstructionDiscriminator = [ + 255, 66, 82, 208, 247, 5, 210, 126, +]; + +/** + * Creates a Delegate instruction. + */ + +export function createAllowUndelegationInstruction( + accounts: AllowUndelegationInstructionAccounts +) { + const [data] = allowUndelegationStruct.serialize({ + instructionDiscriminator: allowUndelegateInstructionDiscriminator, + }); + + const { delegationPda, delegationMetadata, bufferPda } = DelegateAccounts( + accounts.delegatedAccount, + accounts.ownerProgram + ); + + const keys: web3.AccountMeta[] = [ + { + pubkey: accounts.delegatedAccount, + isWritable: false, + isSigner: false, + }, + { + pubkey: delegationPda, + isWritable: false, + isSigner: false, + }, + { + pubkey: delegationMetadata, + isWritable: true, + isSigner: false, + }, + { + pubkey: bufferPda, + isWritable: false, + isSigner: false, + }, + { + pubkey: new web3.PublicKey(DELEGATION_PROGRAM_ID), + isWritable: true, + isSigner: false, + }, + ]; + + const programId = accounts.ownerProgram; + return new web3.TransactionInstruction({ + programId, + keys, + data, + }); +} diff --git a/clients/bolt-sdk/src/delegation/delegate.ts b/clients/bolt-sdk/src/delegation/delegate.ts index 36aac8b9..9fe32852 100644 --- a/clients/bolt-sdk/src/delegation/delegate.ts +++ b/clients/bolt-sdk/src/delegation/delegate.ts @@ -1,7 +1,9 @@ import * as beet from "@metaplex-foundation/beet"; import * as web3 from "@solana/web3.js"; -import { getDelegationAccounts } from "./accounts"; -import { DELEGATION_PROGRAM_ID } from "@magicblock-labs/delegation-program"; +import { + DelegateAccounts, + DELEGATION_PROGRAM_ID, +} from "@magicblock-labs/delegation-program"; export interface DelegateInstructionArgs { validUntil: beet.bignum; @@ -33,7 +35,7 @@ export interface DelegateInstructionAccounts { ownerProgram: web3.PublicKey; buffer?: web3.PublicKey; delegationRecord?: web3.PublicKey; - delegateAccountSeeds?: web3.PublicKey; + delegationMetadata?: web3.PublicKey; delegationProgram?: web3.PublicKey; systemProgram?: web3.PublicKey; } @@ -58,8 +60,10 @@ export function createDelegateInstruction( commitFrequencyMs, }); - const { delegationPda, delegatedAccountSeedsPda, bufferPda } = - getDelegationAccounts(accounts.account, accounts.ownerProgram); + const { delegationPda, delegationMetadata, bufferPda } = DelegateAccounts( + accounts.account, + accounts.ownerProgram + ); const keys: web3.AccountMeta[] = [ { @@ -93,7 +97,7 @@ export function createDelegateInstruction( isSigner: false, }, { - pubkey: accounts.delegateAccountSeeds ?? delegatedAccountSeedsPda, + pubkey: accounts.delegationMetadata ?? delegationMetadata, isWritable: true, isSigner: false, }, diff --git a/clients/bolt-sdk/src/index.ts b/clients/bolt-sdk/src/index.ts index aacdf9bd..9f2fd65b 100644 --- a/clients/bolt-sdk/src/index.ts +++ b/clients/bolt-sdk/src/index.ts @@ -4,8 +4,8 @@ import { PROGRAM_ID } from "./generated"; export * from "./generated/accounts"; export * from "./generated/instructions"; export * from "./world/transactions"; -export * from "./delegation/accounts"; export * from "./delegation/delegate"; +export * from "./delegation/allow_undelegation"; export { createCommitInstruction, createUndelegateInstruction, diff --git a/clients/bolt-sdk/yarn.lock b/clients/bolt-sdk/yarn.lock index 123f69cc..8fe739d2 100644 --- a/clients/bolt-sdk/yarn.lock +++ b/clients/bolt-sdk/yarn.lock @@ -84,10 +84,10 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@magicblock-labs/delegation-program@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@magicblock-labs/delegation-program/-/delegation-program-0.1.1.tgz#71a5fb25ccf88ea7746ea70473fb109ff6b67433" - integrity sha512-4He8V7jkrGy8MTp6qAz2h5y70+6y4cmvQc+7Km6B7WDLODlymPu9zZEl1/bmY24bOeKVKfrEEE7pDVa8qr3BwQ== +"@magicblock-labs/delegation-program@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@magicblock-labs/delegation-program/-/delegation-program-0.1.2.tgz#7b298398259d80a368eb9e91cb911e5a6e542391" + integrity sha512-9EGtcBWGAXGCOjTJVyzxydMpM8GGk8QjzQlgpV0q96BAbmpEO9C6b/N3lvMRTR1FfDuBn43a3Pa5YEiHyUu8Eg== dependencies: "@metaplex-foundation/beet" "^0.7.2" "@solana/web3.js" "^1.92.3" diff --git a/crates/bolt-lang/attribute/delegate/src/lib.rs b/crates/bolt-lang/attribute/delegate/src/lib.rs index d74e4bc4..0fe25363 100644 --- a/crates/bolt-lang/attribute/delegate/src/lib.rs +++ b/crates/bolt-lang/attribute/delegate/src/lib.rs @@ -34,6 +34,7 @@ pub fn delegate(args: TokenStream, input: TokenStream) -> TokenStream { fn modify_component_module(mut module: ItemMod, component_type: &Type) -> ItemMod { let (delegate_fn, delegate_struct) = generate_delegate(component_type); let (undelegate_fn, undelegate_struct) = generate_undelegate(); + let (allow_undelegate_fn, allow_undelegate_struct) = generate_allow_undelegate(); module.content = module.content.map(|(brace, mut items)| { items.extend( vec![ @@ -41,6 +42,8 @@ fn modify_component_module(mut module: ItemMod, component_type: &Type) -> ItemMo delegate_struct, undelegate_fn, undelegate_struct, + allow_undelegate_fn, + allow_undelegate_struct, ] .into_iter() .map(|item| syn::parse2(item).unwrap()) @@ -51,6 +54,47 @@ fn modify_component_module(mut module: ItemMod, component_type: &Type) -> ItemMo module } +/// Generates the allow_undelegate function and struct. +fn generate_allow_undelegate() -> (TokenStream2, TokenStream2) { + ( + quote! { + #[automatically_derived] + pub fn allow_undelegation(ctx: Context) -> Result<()> { + ::bolt_lang::allow_undelegation( + &ctx.accounts.base_account, + &ctx.accounts.delegation_record, + &ctx.accounts.delegation_metadata, + &ctx.accounts.buffer, + &ctx.accounts.delegation_program, + &id(), + )?; + Ok(()) + } + }, + quote! { + #[automatically_derived] + #[derive(Accounts)] + pub struct AllowUndelegation<'info> { + #[account()] + /// CHECK: The delegated component + pub base_account: AccountInfo<'info>, + #[account()] + /// CHECK: delegation record + pub delegation_record: AccountInfo<'info>, + #[account(mut)] + /// CHECK: delegation metadata + pub delegation_metadata: AccountInfo<'info>, + #[account()] + /// CHECK: singer buffer to enforce CPI + pub buffer: AccountInfo<'info>, + #[account()] + /// CHECK:` + pub delegation_program: AccountInfo<'info>, + } + }, + ) +} + /// Generates the undelegate function and struct. fn generate_undelegate() -> (TokenStream2, TokenStream2) { ( @@ -63,7 +107,7 @@ fn generate_undelegate() -> (TokenStream2, TokenStream2) { &ctx.accounts.payer, &ctx.accounts.system_program, ]; - undelegate_account( + ::bolt_lang::undelegate_account( delegated_account, &id(), buffer, @@ -77,7 +121,7 @@ fn generate_undelegate() -> (TokenStream2, TokenStream2) { quote! { #[automatically_derived] #[derive(Accounts)] - pub struct InitializeAfterUndelegation<'info> { + pub struct InitializeAfterUndelegation<'info> { /// CHECK:` #[account(mut)] pub base_account: AccountInfo<'info>, @@ -115,7 +159,7 @@ fn generate_delegate(component_type: &Type) -> (TokenStream2, TokenStream2) { let pda_seeds: &[&[u8]] = &[<#component_type>::seed(), &entity.key.to_bytes()]; - delegate_account( + ::bolt_lang::delegate_account( payer, account, owner_program, diff --git a/crates/bolt-lang/src/lib.rs b/crates/bolt-lang/src/lib.rs index 891634eb..af54ac8b 100644 --- a/crates/bolt-lang/src/lib.rs +++ b/crates/bolt-lang/src/lib.rs @@ -20,7 +20,7 @@ pub use world; pub use world::program::World; pub use world::Entity; -pub use delegation_program_sdk::{delegate_account, undelegate_account}; +pub use delegation_program_sdk::{allow_undelegation, delegate_account, undelegate_account}; pub use serde; diff --git a/tests/bolt.ts b/tests/bolt.ts index 822caa85..8c9dfab2 100644 --- a/tests/bolt.ts +++ b/tests/bolt.ts @@ -19,6 +19,7 @@ import { InitializeComponent, InitializeNewWorld, ApplySystem, + createAllowUndelegationInstruction, } from "../clients/bolt-sdk"; enum Direction { @@ -514,13 +515,19 @@ describe("bolt", () => { }); it("Check component undelegation", async () => { + const allowUndelegateIx = createAllowUndelegationInstruction({ + delegatedAccount: componentPositionEntity1Pda, + ownerProgram: exampleComponentPosition.programId, + }); const delegateIx = createUndelegateInstruction({ payer: provider.wallet.publicKey, delegatedAccount: componentPositionEntity1Pda, ownerProgram: exampleComponentPosition.programId, reimbursement: provider.wallet.publicKey, }); - const tx = new anchor.web3.Transaction().add(delegateIx); + const tx = new anchor.web3.Transaction() + .add(allowUndelegateIx) + .add(delegateIx); await provider.sendAndConfirm(tx); const acc = await provider.connection.getAccountInfo( componentPositionEntity1Pda diff --git a/tests/fixtures/delegation.so b/tests/fixtures/delegation.so index c6d44abf18ecdaab4e11e33134f417331f9a9587..2e64d9bcde6d7b07f4b536791256f3145bd5851d 100644 GIT binary patch delta 39069 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 C1fH7! delta 43246 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