Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

Commit

Permalink
refactor(experimental): fix memo instructions in GraphQL
Browse files Browse the repository at this point in the history
  • Loading branch information
buffalojoec committed Jan 9, 2024
1 parent 2ae9134 commit 6a1d778
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 1 deletion.
3 changes: 3 additions & 0 deletions packages/rpc-graphql/src/__tests__/__setup__.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1385,6 +1385,9 @@ export const mockTransactionStake = {
},
};

// There's a memo instruction in this one
export const mockTransactionMemo = mockTransactionStake;

export const mockTransactionVote = {
blockTime: 1699617237,
meta: {
Expand Down
40 changes: 40 additions & 0 deletions packages/rpc-graphql/src/__tests__/transaction-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
mockTransactionBase58,
mockTransactionBase64,
mockTransactionGeneric,
mockTransactionMemo,
mockTransactionSystem,
mockTransactionToken,
mockTransactionVote,
Expand Down Expand Up @@ -562,6 +563,45 @@ describe('transaction', () => {
},
});
});
it('can get a `SplMemoInstruction` instruction', async () => {
expect.assertions(1);
fetchMock.mockOnce(JSON.stringify(mockRpcResponse(mockTransactionMemo)));
const source = /* GraphQL */ `
query testQuery {
transaction(signature: "${defaultTransactionSignature}") {
... on TransactionParsed {
data {
message {
instructions {
programId
... on SplMemoInstruction {
memo
}
}
}
}
}
}
}
`;
const result = await rpcGraphQL.query(source);
expect(result).toMatchObject({
data: {
transaction: {
data: {
message: {
instructions: expect.arrayContaining([
{
memo: 'fb_07ce1448',
programId: 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr',
},
]),
},
},
},
},
});
});
it('can get a `InitializeMint` instruction', async () => {
expect.assertions(1);
fetchMock.mockOnce(JSON.stringify(mockRpcResponse(mockTransactionToken)));
Expand Down
5 changes: 5 additions & 0 deletions packages/rpc-graphql/src/loaders/transformers/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

function transformParsedInstruction(parsedInstruction: any) {
if ('parsed' in parsedInstruction) {
if (typeof parsedInstruction.parsed === 'string' && parsedInstruction.program === 'spl-memo') {
const { parsed: memo, program: programName, programId } = parsedInstruction;
const instructionType = 'memo';
return { instructionType, memo, programId, programName };
}
const {
parsed: { info: data, type: instructionType },
program: programName,
Expand Down
2 changes: 1 addition & 1 deletion packages/rpc-graphql/src/schema/instruction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ export const instructionTypeDefs = /* GraphQL */ `
# SplMemo
type SplMemoInstruction implements TransactionInstruction {
programId: Address
data: String
memo: String
}
# SplToken: InitializeMint
Expand Down

0 comments on commit 6a1d778

Please sign in to comment.