Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions modules/sdk-coin-sol/src/lib/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export enum ValidInstructionTypesEnum {
Assign = 'Assign',
Split = 'Split',
Authorize = 'Authorize',
SetComputeUnitLimit = 'SetComputeUnitLimit',
SetPriorityFee = 'SetPriorityFee',
MintTo = 'MintTo',
Burn = 'Burn',
Expand All @@ -57,6 +58,7 @@ export enum InstructionBuilderTypes {
TokenTransfer = 'TokenTransfer',
StakingAuthorize = 'Authorize',
StakingDelegate = 'Delegate',
SetComputeUnitLimit = 'SetComputeUnitLimit',
SetPriorityFee = 'SetPriorityFee',
MintTo = 'MintTo',
Burn = 'Burn',
Expand All @@ -83,6 +85,7 @@ export const VALID_SYSTEM_INSTRUCTION_TYPES: ValidInstructionTypes[] = [
ValidInstructionTypesEnum.Assign,
ValidInstructionTypesEnum.Split,
ValidInstructionTypesEnum.Authorize,
ValidInstructionTypesEnum.SetComputeUnitLimit,
ValidInstructionTypesEnum.SetPriorityFee,
ValidInstructionTypesEnum.MintTo,
ValidInstructionTypesEnum.Burn,
Expand Down
9 changes: 9 additions & 0 deletions modules/sdk-coin-sol/src/lib/iface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export type InstructionParams =
| Nonce
| Memo
| WalletInit
| SetComputeUnitLimit
| SetPriorityFee
| Transfer
| StakingActivate
Expand Down Expand Up @@ -188,6 +189,13 @@ export interface StakingAuthorize {
};
}

export interface SetComputeUnitLimit {
type: InstructionBuilderTypes.SetComputeUnitLimit;
params: {
units: number;
};
}

export interface SetPriorityFee {
type: InstructionBuilderTypes.SetPriorityFee;
params: {
Expand Down Expand Up @@ -221,6 +229,7 @@ export type ValidInstructionTypes =
| 'CloseAssociatedTokenAccount'
| DecodedCloseAccountInstruction
| 'TokenTransfer'
| 'SetComputeUnitLimit'
| 'SetPriorityFee'
| 'MintTo'
| 'Burn'
Expand Down
37 changes: 35 additions & 2 deletions modules/sdk-coin-sol/src/lib/instructionParamsFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import {
TokenTransfer,
Transfer,
WalletInit,
SetComputeUnitLimit,
SetPriorityFee,
CustomInstruction,
Approve,
Expand Down Expand Up @@ -138,9 +139,31 @@ function parseSendInstructions(
instructions: TransactionInstruction[],
instructionMetadata?: InstructionParams[],
_useTokenAddressTokenName?: boolean
): Array<Nonce | Memo | Transfer | TokenTransfer | AtaInit | AtaClose | SetPriorityFee | MintTo | Burn | Approve> {
): Array<
| Nonce
| Memo
| Transfer
| TokenTransfer
| AtaInit
| AtaClose
| SetComputeUnitLimit
| SetPriorityFee
| MintTo
| Burn
| Approve
> {
const instructionData: Array<
Nonce | Memo | Transfer | TokenTransfer | AtaInit | AtaClose | SetPriorityFee | MintTo | Burn | Approve
| Nonce
| Memo
| Transfer
| TokenTransfer
| AtaInit
| AtaClose
| SetComputeUnitLimit
| SetPriorityFee
| MintTo
| Burn
| Approve
> = [];
for (const instruction of instructions) {
const type = getInstructionType(instruction);
Expand Down Expand Up @@ -252,6 +275,16 @@ function parseSendInstructions(
};
instructionData.push(ataClose);
break;
case ValidInstructionTypesEnum.SetComputeUnitLimit:
const setComputeUnitLimitParams = ComputeBudgetInstruction.decodeSetComputeUnitLimit(instruction);
const setComputeUnitLimit: SetComputeUnitLimit = {
type: InstructionBuilderTypes.SetComputeUnitLimit,
params: {
units: setComputeUnitLimitParams.units,
},
};
instructionData.push(setComputeUnitLimit);
break;
case ValidInstructionTypesEnum.SetPriorityFee:
const setComputeUnitPriceParams = ComputeBudgetInstruction.decodeSetComputeUnitPrice(instruction);
const setPriorityFee: SetPriorityFee = {
Expand Down
11 changes: 11 additions & 0 deletions modules/sdk-coin-sol/src/lib/solInstructionFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import {
TokenTransfer,
Transfer,
WalletInit,
SetComputeUnitLimit,
SetPriorityFee,
CustomInstruction,
Approve,
Expand Down Expand Up @@ -82,6 +83,8 @@ export function solInstructionFactory(instructionToBuild: InstructionParams): Tr
return stakingAuthorizeInstruction(instructionToBuild);
case InstructionBuilderTypes.StakingDelegate:
return stakingDelegateInstruction(instructionToBuild);
case InstructionBuilderTypes.SetComputeUnitLimit:
return setComputeUnitLimitInstruction(instructionToBuild);
case InstructionBuilderTypes.SetPriorityFee:
return fetchPriorityFeeInstruction(instructionToBuild);
case InstructionBuilderTypes.MintTo:
Expand Down Expand Up @@ -114,6 +117,14 @@ function advanceNonceInstruction(data: Nonce): TransactionInstruction[] {
return [nonceInstruction];
}

function setComputeUnitLimitInstruction(instructionToBuild: SetComputeUnitLimit): TransactionInstruction[] {
const setComputeUnitLimit = ComputeBudgetProgram.setComputeUnitLimit({
units: instructionToBuild.params.units,
});

return [setComputeUnitLimit];
}

function fetchPriorityFeeInstruction(instructionToBuild: SetPriorityFee): TransactionInstruction[] {
const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({
microLamports: instructionToBuild.params.fee,
Expand Down
2 changes: 2 additions & 0 deletions modules/sdk-coin-sol/src/lib/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,8 @@ export class Transaction extends BaseTransaction {
break;
case InstructionBuilderTypes.StakingDelegate:
break;
case InstructionBuilderTypes.SetComputeUnitLimit:
break;
case InstructionBuilderTypes.SetPriorityFee:
break;
case InstructionBuilderTypes.CustomInstruction:
Expand Down
4 changes: 4 additions & 0 deletions modules/sdk-coin-sol/src/lib/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import {
SystemInstruction,
SystemProgram,
TransactionInstruction,
ComputeBudgetInstruction,
} from '@solana/web3.js';
import assert from 'assert';
import BigNumber from 'bignumber.js';
Expand Down Expand Up @@ -403,6 +404,9 @@ export function getInstructionType(instruction: TransactionInstruction): ValidIn
);
}
case COMPUTE_BUDGET:
if (ComputeBudgetInstruction.decodeInstructionType(instruction) === 'SetComputeUnitLimit') {
return 'SetComputeUnitLimit';
}
return 'SetPriorityFee';
default:
return 'CustomInstruction';
Expand Down
21 changes: 20 additions & 1 deletion modules/sdk-coin-sol/test/unit/utils.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import should from 'should';
import { Utils } from '../../src/lib';
import * as testData from '../resources/sol';
import { Lockup, PublicKey, StakeProgram, SystemProgram, TransactionInstruction } from '@solana/web3.js';
import {
ComputeBudgetProgram,
Lockup,
PublicKey,
StakeProgram,
SystemProgram,
TransactionInstruction,
} from '@solana/web3.js';
import {
MEMO_PROGRAM_PK,
stakingActivateInstructionsIndexes,
Expand Down Expand Up @@ -244,6 +251,18 @@ describe('SOL util library', function () {
});
Utils.getInstructionType(invalidInstruction).should.equal('CustomInstruction');
});
it('should succeed for ComputeBudget SetComputeUnitLimit instruction', function () {
const setComputeUnitLimitInstruction = ComputeBudgetProgram.setComputeUnitLimit({
units: 300000,
});
Utils.getInstructionType(setComputeUnitLimitInstruction).should.equal('SetComputeUnitLimit');
});
it('should succeed for ComputeBudget SetComputeUnitPrice instruction', function () {
const setComputeUnitPriceInstruction = ComputeBudgetProgram.setComputeUnitPrice({
microLamports: 100000,
});
Utils.getInstructionType(setComputeUnitPriceInstruction).should.equal('SetPriorityFee');
});
});

describe('validateIntructionTypes', function () {
Expand Down