SolanaFees
Defined in: atomiq-chain-solana/src/solana/chain/modules/SolanaFees.ts:43
Fee estimation service for the Solana network. Uses client-side fee estimation algorithm by default, which
fetches a bunch (default 8) random blocks in the past period (default 150) and computes the average fee. It
automatically detects whether the underlying RPC endpoint is a Helius one which features the getPriorityFeeEstimate
endpoint, and if available uses that one.
Constructors
Constructor
new SolanaFees(
connection,
maxFeeMicroLamports,
numSamples,
period,
useHeliusApi,
heliusFeeLevel,
getStaticFee?,
bribeData?): SolanaFees;
Defined in: atomiq-chain-solana/src/solana/chain/modules/SolanaFees.ts:77
Parameters
| Parameter | Type | Default value | Description |
|---|---|---|---|
connection | Connection | undefined | Underlying Solana network connection to use for read access to Solana |
maxFeeMicroLamports | number | 250000 | Maximum allowed fee in microLamports/CU (1/1,000,000 of a lamport per compute unit) |
numSamples | number | 8 | Number of samples to use when estimating the global fee on the client-side, this many blocks are sampled from the last period blocks to estimate an average fee rate |
period | number | 150 | Period of past blocks to sample random blocks from when estimating the global fee on the client-side |
useHeliusApi | "yes" | "no" | "auto" | "auto" | Whether to use the helius API or not, default to "auto", which automatically detects if the underlying RPC supports Helius's getPriorityFeeEstimate RPC call |
heliusFeeLevel | "min" | "low" | "medium" | "high" | "veryHigh" | "unsafeMax" | "veryHigh" | Fee level to use when fetching the fee rate from Helius's getPriorityFeeEstimate RPC endpoint, for the meaning of the different levels refer to https://www.helius.dev/docs/priority-fee-api#priority-levels-explained |
getStaticFee? | (feeRate) => bigint | undefined | Optional function for adding a base fee to transactions (this function returns the base fee in lamports to be added to the transaction) - this fee doesn't scale with CUs of the transaction and is instead applied as-is |
bribeData? | FeeBribeData | undefined | Bribe fee configuration (used for e.g. Jito tips) |
Returns
SolanaFees
Methods
applyFeeRateBegin()
static applyFeeRateBegin(
tx,
computeBudget,
feeRate): void;
Defined in: atomiq-chain-solana/src/solana/chain/modules/SolanaFees.ts:428
Applies fee rate to a transaction, should be called before adding instructions to the transaction, specifically it adds the setComputeUnitLimit & setComputeUnitPrice instruction.
Parameters
| Parameter | Type | Description |
|---|---|---|
tx | Transaction | |
computeBudget | number | |
feeRate | string |
Returns
void
Example
const feeRate = solanaFees.getFeeRate([...writeableAccounts]);
const tx = new Transaction();
//Apply the fee rate part at the beginning of the transaction (specifically setComputeUnitLimit & setComputeUnitPrice)
SolanaFees.applyFeeRateBegin(tx, feeRate);
//Add instructions here
tx.add(instruction1);
tx.add(instruction2);
//Set the fee payer
tx.feePayer = feePayerPublicKey;
//Apply the fee rate part at the end of the transaction (specifically the transfer to the bribe account, e.g. Jito tip)
SolanaFees.applyFeeRateEnd(tx, feeRate);
applyFeeRateEnd()
static applyFeeRateEnd(
tx,
computeBudget,
feeRate): void;
Defined in: atomiq-chain-solana/src/solana/chain/modules/SolanaFees.ts:481
Applies fee rate to a transaction, should be called after adding instructions to the transaction, specifically it adds the adds the bribe SystemProgram.transfer instruction.
Parameters
| Parameter | Type | Description |
|---|---|---|
tx | Transaction | |
computeBudget | number | |
feeRate | string |
Returns
void
Example
const feeRate = solanaFees.getFeeRate([...writeableAccounts]);
const tx = new Transaction();
//Apply the fee rate part at the beginning of the transaction (specifically setComputeUnitLimit & setComputeUnitPrice)
SolanaFees.applyFeeRateBegin(tx, feeRate);
//Add instructions here
tx.add(instruction1);
tx.add(instruction2);
//Set the fee payer
tx.feePayer = feePayerPublicKey;
//Apply the fee rate part at the end of the transaction (specifically the transfer to the bribe account, e.g. Jito tip)
SolanaFees.applyFeeRateEnd(tx, feeRate);
getGlobalFeeRate()
getGlobalFeeRate(): Promise<bigint>;
Defined in: atomiq-chain-solana/src/solana/chain/modules/SolanaFees.ts:341
Gets global fee rate, with caching
Returns
Promise<bigint>
global fee rate microLamports/CU
getPriorityFee()
getPriorityFee(
computeUnits,
feeRate,
includeStaticFee): bigint;
Defined in: atomiq-chain-solana/src/solana/chain/modules/SolanaFees.ts:390
Calculates the total priority fee paid for a given compute budget at a given fee rate
Parameters
| Parameter | Type | Default value | Description |
|---|---|---|---|
computeUnits | number | undefined | |
feeRate | string | undefined | |
includeStaticFee | boolean | true | whether the include the static/base part of the fee rate |
Returns
bigint
submitTx()
submitTx(tx, options?): Promise<string>;
Defined in: atomiq-chain-solana/src/solana/chain/modules/SolanaFees.ts:513
Checks if the transaction should be submitted over Jito and if yes submits it
Parameters
| Parameter | Type | Description |
|---|---|---|
tx | Buffer | Raw signed transaction to be attempted to be sent over Jito |
options? | SendOptions | Send options for the sendTransaction RPC call |
Returns
Promise<string>
null if the transaction was not sent over Jito, tx signature when tx was sent over Jito