@huma-finance/sdk 0.0.75-beta.981 → 0.0.75-beta.986

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/API.md CHANGED
@@ -72,6 +72,9 @@ Note that this does not approve a creditline in Huma's pools and an approve call
72
72
  <dd><p>Get the chain ID from a signer or provider object.</p></dd>
73
73
  <dt><a href="#getPoolInfo">getPoolInfo(poolName, poolType)</a> ⇒ <code>PoolInfoType</code> | <code>undefined</code></dt>
74
74
  <dd><p>Returns the pool info based on the provided pool name and type, using the same chain ID as the provider/signer given</p></dd>
75
+ <dt><a href="#isSetComputeLimitInstruction">isSetComputeLimitInstruction()</a></dt>
76
+ <dd><p>Check if a given instruction is a SetComputeUnitLimit instruction
77
+ See https://github.com/solana-program/compute-budget/blob/main/clients/js/src/generated/programs/computeBudget.ts#L29</p></dd>
75
78
  </dl>
76
79
 
77
80
  ## Typedefs
@@ -919,6 +922,13 @@ Note that this does not approve a creditline in Huma's pools and an approve call
919
922
  | poolName | <code>POOL\_NAME</code> | <p>The name of the pool.</p> |
920
923
  | poolType | <code>POOL\_TYPE</code> | <p>The type of the pool.</p> |
921
924
 
925
+ <a name="isSetComputeLimitInstruction"></a>
926
+
927
+ ## isSetComputeLimitInstruction()
928
+ <p>Check if a given instruction is a SetComputeUnitLimit instruction
929
+ See https://github.com/solana-program/compute-budget/blob/main/clients/js/src/generated/programs/computeBudget.ts#L29</p>
930
+
931
+ **Kind**: global function
922
932
  <a name="IrysConstructorArgs"></a>
923
933
 
924
934
  ## IrysConstructorArgs : <code>Object</code>
@@ -3,5 +3,13 @@ import { SolanaChainEnum } from '@huma-finance/shared';
3
3
  import { HumaSolanaContext } from '../../helpers';
4
4
  export declare function extractWritableAccounts(tx: Transaction): PublicKey[];
5
5
  export type HeliusPriorityLevel = 'Min' | 'Low' | 'Medium' | 'High' | 'VeryHigh' | 'UnsafeMax';
6
- export declare function buildOptimalTransaction(tx: Transaction, txAccounts: PublicKey[], context: HumaSolanaContext, heliusPriorityLevel?: HeliusPriorityLevel): Promise<Transaction>;
7
- export declare function buildOptimalTransactionFromConnection(tx: Transaction, txAccounts: PublicKey[], connection: Connection, chainId: SolanaChainEnum, signer: PublicKey, heliusPriorityLevel?: HeliusPriorityLevel, heliusApiKey?: string | null): Promise<Transaction>;
6
+ export declare function buildOptimalTransaction(tx: Transaction, txAccounts: PublicKey[], context: HumaSolanaContext, heliusPriorityLevel?: HeliusPriorityLevel): Promise<{
7
+ tx: Transaction;
8
+ unitsConsumed: number | undefined;
9
+ fee: number | undefined;
10
+ }>;
11
+ export declare function buildOptimalTransactionFromConnection(tx: Transaction, txAccounts: PublicKey[], connection: Connection, chainId: SolanaChainEnum, signer: PublicKey, heliusPriorityLevel?: HeliusPriorityLevel, heliusApiKey?: string | null): Promise<{
12
+ tx: Transaction;
13
+ unitsConsumed: number | undefined;
14
+ fee: number | undefined;
15
+ }>;
@@ -50,24 +50,38 @@ async function getPriorityFeeEstimate(priorityLevel, tx, txAccounts, chainEnum,
50
50
  return null;
51
51
  }
52
52
  }
53
+ /**
54
+ * Check if a given instruction is a SetComputeUnitLimit instruction
55
+ * See https://github.com/solana-program/compute-budget/blob/main/clients/js/src/generated/programs/computeBudget.ts#L29
56
+ */
57
+ function isSetComputeLimitInstruction(ix) {
58
+ return (ix.programId.equals(web3_js_1.ComputeBudgetProgram.programId) && ix.data[0] === 2 // opcode for setComputeUnitLimit is 2
59
+ );
60
+ }
53
61
  async function buildOptimalTransactionImpl(tx, txAccounts, connection, chainEnum, signer, heliusPriority = 'Medium', heliusApiKey) {
54
- // Calculate compute unit limit
55
- const testInstructions = [
56
- web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: 1400000 }),
57
- ...tx.instructions,
58
- ];
59
- const testTransaction = new web3_js_1.VersionedTransaction(new web3_js_1.TransactionMessage({
60
- instructions: testInstructions,
61
- payerKey: signer,
62
- recentBlockhash: (await connection.getLatestBlockhash()).blockhash,
63
- }).compileToV0Message([]));
64
- const rpcResponse = await connection.simulateTransaction(testTransaction, {
65
- replaceRecentBlockhash: true,
66
- sigVerify: false,
67
- });
68
- const { unitsConsumed } = rpcResponse.value;
69
- if (unitsConsumed) {
70
- tx.instructions.unshift(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: unitsConsumed * 1.2 }));
62
+ let unitsConsumed;
63
+ const computeLimitIndex = tx.instructions.findIndex(isSetComputeLimitInstruction);
64
+ // Calculate compute unit limit if it doesn't exist
65
+ if (computeLimitIndex === -1) {
66
+ const testInstructions = [
67
+ web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: 1400000 }),
68
+ ...tx.instructions,
69
+ ];
70
+ const testTransaction = new web3_js_1.VersionedTransaction(new web3_js_1.TransactionMessage({
71
+ instructions: testInstructions,
72
+ payerKey: signer,
73
+ recentBlockhash: (await connection.getLatestBlockhash()).blockhash,
74
+ }).compileToV0Message([]));
75
+ const rpcResponse = await connection.simulateTransaction(testTransaction, {
76
+ replaceRecentBlockhash: true,
77
+ sigVerify: false,
78
+ });
79
+ unitsConsumed = rpcResponse.value.unitsConsumed;
80
+ if (unitsConsumed) {
81
+ tx.instructions.unshift(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
82
+ units: unitsConsumed * 1.2,
83
+ }));
84
+ }
71
85
  }
72
86
  // Calculate compute unit priority fee
73
87
  const heliusPriorityFeeEstimateRes = await getPriorityFeeEstimate(heliusPriority, tx, txAccounts, chainEnum, heliusApiKey);
@@ -76,7 +90,7 @@ async function buildOptimalTransactionImpl(tx, txAccounts, connection, chainEnum
76
90
  tx.instructions.unshift(web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
77
91
  microLamports: chosenFee,
78
92
  }));
79
- return tx;
93
+ return { tx, unitsConsumed, fee: chosenFee };
80
94
  }
81
95
  async function buildOptimalTransaction(tx, txAccounts, context, heliusPriorityLevel) {
82
96
  return buildOptimalTransactionImpl(tx, txAccounts, context.connection, context.chainId, context.publicKey, heliusPriorityLevel, context.heliusApiKey);
@@ -1 +1 @@
1
- {"version":3,"file":"buildOptimalTransaction.js","sourceRoot":"","sources":["../../../../src/utils/solana/buildOptimalTransaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildOptimalTransaction.js","sourceRoot":"","sources":["../../../../src/utils/solana/buildOptimalTransaction.ts"],"names":[],"mappings":"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"}