Skip to content

Commit

Permalink
refactor(experimental): graphql: token-2022 extensions: initialize-pe…
Browse files Browse the repository at this point in the history
…rmanent-delegate

This PR adds support for Token-2022's `InitializePermanentDelegate` extension
in the GraphQL schema.

cc @Hrushi20.

Continuing work on #2406.
  • Loading branch information
buffalojoec committed Apr 22, 2024
1 parent 2026500 commit 8a8ce1e
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 15 deletions.
90 changes: 90 additions & 0 deletions packages/rpc-graphql/src/__tests__/transaction-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
mockTransactionMemo,
mockTransactionSystem,
mockTransactionToken,
mockTransactionToken2022AllExtensions,
mockTransactionVote,
} from './__setup__';

Expand Down Expand Up @@ -656,5 +657,94 @@ describe('transaction', () => {
});
});
});
describe('token-2022 extensions', () => {
beforeEach(() => {
mockRpcTransport.mockResolvedValueOnce(mockTransactionToken2022AllExtensions);
});
it('initialize-mint-close-authority', async () => {
expect.assertions(1);
const source = /* GraphQL */ `
query testQuery($signature: Signature!) {
transaction(signature: $signature) {
message {
instructions {
programId
... on SplTokenInitializeMintCloseAuthorityInstruction {
mint {
address
}
newAuthority {
address
}
}
}
}
}
}
`;
const result = await rpcGraphQL.query(source, { signature });
expect(result).toMatchObject({
data: {
transaction: {
message: {
instructions: expect.arrayContaining([
{
mint: {
address: expect.any(String),
},
newAuthority: {
address: expect.any(String),
},
programId: 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb',
},
]),
},
},
},
});
});
it('initialize-permanent-delegate', async () => {
expect.assertions(1);
const source = /* GraphQL */ `
query testQuery($signature: Signature!) {
transaction(signature: $signature) {
message {
instructions {
programId
... on SplTokenInitializePermanentDelegateInstruction {
delegate {
address
}
mint {
address
}
}
}
}
}
}
`;
const result = await rpcGraphQL.query(source, { signature });
expect(result).toMatchObject({
data: {
transaction: {
message: {
instructions: expect.arrayContaining([
{
delegate: {
address: expect.any(String),
},
mint: {
address: expect.any(String),
},
programId: 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb',
},
]),
},
},
},
});
});
});
});
});
7 changes: 7 additions & 0 deletions packages/rpc-graphql/src/resolvers/instruction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,10 @@ export const instructionResolvers = {
multisig: resolveAccount('multisig'),
rentSysvar: resolveAccount('rentSysvar'),
},
SplTokenInitializePermanentDelegateInstruction: {
delegate: resolveAccount('delegate'),
mint: resolveAccount('mint'),
},
SplTokenMintToCheckedInstruction: {
account: resolveAccount('account'),
authority: resolveAccount('authority'),
Expand Down Expand Up @@ -524,6 +528,9 @@ export const instructionResolvers = {
if (jsonParsedConfigs.instructionType === 'initializeMintCloseAuthority') {
return 'SplTokenInitializeMintCloseAuthorityInstruction';
}
if (jsonParsedConfigs.instructionType === 'initializePermanentDelegate') {
return 'SplTokenInitializePermanentDelegateInstruction';
}
}
if (jsonParsedConfigs.programName === 'stake') {
if (jsonParsedConfigs.instructionType === 'initialize') {
Expand Down
26 changes: 11 additions & 15 deletions packages/rpc-graphql/src/schema/instruction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -504,29 +504,25 @@ export const instructionTypeDefs = /* GraphQL */ `
}
"""
SplToken: InitializeMintCloseAuthority instruction
SplToken-2022: InitializeMintCloseAuthority instruction
"""
type SplTokenInitializeMintCloseAuthorityInstruction implements TransactionInstruction {
programId: Address
mint: Account
newAuthority: Account
}
"""
SplToken-2022: InitializePermanentDelegate instruction
"""
type SplTokenInitializePermanentDelegateInstruction implements TransactionInstruction {
programId: Address
delegate: Account
mint: Account
}
# TODO: Extensions!
# - TransferFeeExtension
# - ConfidentialTransferFeeExtension
# - DefaultAccountStateExtension
# - Reallocate
# - MemoTransferExtension
# - CreateNativeMint
# - InitializeNonTransferableMint
# - InterestBearingMintExtension
# - CpiGuardExtension
# - InitializePermanentDelegate
# - TransferHookExtension
# - ConfidentialTransferFeeExtension
# - WithdrawExcessLamports
# - MetadataPointerExtension
# ...
type Lockup {
custodian: Account
Expand Down

0 comments on commit 8a8ce1e

Please sign in to comment.