@nosana/kit 1.0.10 → 2.0.10
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/README.md +539 -152
- package/dist/NosanaClient.d.ts +58 -0
- package/dist/NosanaClient.js +103 -0
- package/dist/NosanaClient.js.map +1 -0
- package/dist/config/defaultConfigs.d.ts +2 -1
- package/dist/config/defaultConfigs.js +4 -4
- package/dist/config/defaultConfigs.js.map +1 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.js +1 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +41 -33
- package/dist/config/types.js +14 -13
- package/dist/config/types.js.map +1 -0
- package/dist/config/utils.d.ts +2 -2
- package/dist/config/utils.js +11 -4
- package/dist/config/utils.js.map +1 -0
- package/dist/errors/NosanaError.d.ts +1 -0
- package/dist/errors/NosanaError.js +2 -0
- package/dist/errors/NosanaError.js.map +1 -0
- package/dist/generated_clients/jobs/accounts/index.d.ts +5 -5
- package/dist/generated_clients/jobs/accounts/index.js +6 -5
- package/dist/generated_clients/jobs/accounts/index.js.map +1 -0
- package/dist/generated_clients/jobs/accounts/jobAccount.d.ts +10 -6
- package/dist/generated_clients/jobs/accounts/jobAccount.js +6 -2
- package/dist/generated_clients/jobs/accounts/jobAccount.js.map +1 -0
- package/dist/generated_clients/jobs/accounts/marketAccount.d.ts +6 -2
- package/dist/generated_clients/jobs/accounts/marketAccount.js +6 -2
- package/dist/generated_clients/jobs/accounts/marketAccount.js.map +1 -0
- package/dist/generated_clients/jobs/accounts/runAccount.d.ts +10 -6
- package/dist/generated_clients/jobs/accounts/runAccount.js +6 -2
- package/dist/generated_clients/jobs/accounts/runAccount.js.map +1 -0
- package/dist/generated_clients/jobs/errors/index.d.ts +3 -3
- package/dist/generated_clients/jobs/errors/index.js +4 -3
- package/dist/generated_clients/jobs/errors/index.js.map +1 -0
- package/dist/generated_clients/jobs/errors/nosanaJobs.d.ts +2 -2
- package/dist/generated_clients/jobs/errors/nosanaJobs.js +4 -3
- package/dist/generated_clients/jobs/errors/nosanaJobs.js.map +1 -0
- package/dist/generated_clients/jobs/index.d.ts +7 -7
- package/dist/generated_clients/jobs/index.js +8 -7
- package/dist/generated_clients/jobs/index.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/assign.d.ts +14 -14
- package/dist/generated_clients/jobs/instructions/assign.js +8 -8
- package/dist/generated_clients/jobs/instructions/assign.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/claim.d.ts +13 -13
- package/dist/generated_clients/jobs/instructions/claim.js +8 -8
- package/dist/generated_clients/jobs/instructions/claim.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/clean.d.ts +10 -10
- package/dist/generated_clients/jobs/instructions/clean.js +8 -8
- package/dist/generated_clients/jobs/instructions/clean.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/cleanAdmin.d.ts +11 -11
- package/dist/generated_clients/jobs/instructions/cleanAdmin.js +8 -8
- package/dist/generated_clients/jobs/instructions/cleanAdmin.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/close.d.ts +11 -11
- package/dist/generated_clients/jobs/instructions/close.js +8 -8
- package/dist/generated_clients/jobs/instructions/close.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/closeAdmin.d.ts +11 -11
- package/dist/generated_clients/jobs/instructions/closeAdmin.js +8 -8
- package/dist/generated_clients/jobs/instructions/closeAdmin.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/complete.d.ts +11 -11
- package/dist/generated_clients/jobs/instructions/complete.js +9 -12
- package/dist/generated_clients/jobs/instructions/complete.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/delist.d.ts +11 -11
- package/dist/generated_clients/jobs/instructions/delist.js +8 -8
- package/dist/generated_clients/jobs/instructions/delist.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/end.d.ts +11 -11
- package/dist/generated_clients/jobs/instructions/end.js +8 -8
- package/dist/generated_clients/jobs/instructions/end.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/extend.d.ts +12 -12
- package/dist/generated_clients/jobs/instructions/extend.js +8 -8
- package/dist/generated_clients/jobs/instructions/extend.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/finish.d.ts +23 -20
- package/dist/generated_clients/jobs/instructions/finish.js +15 -12
- package/dist/generated_clients/jobs/instructions/finish.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/index.d.ts +21 -21
- package/dist/generated_clients/jobs/instructions/index.js +22 -21
- package/dist/generated_clients/jobs/instructions/index.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/list.d.ts +14 -14
- package/dist/generated_clients/jobs/instructions/list.js +8 -8
- package/dist/generated_clients/jobs/instructions/list.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/open.d.ts +12 -12
- package/dist/generated_clients/jobs/instructions/open.js +8 -8
- package/dist/generated_clients/jobs/instructions/open.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/quit.d.ts +11 -11
- package/dist/generated_clients/jobs/instructions/quit.js +8 -8
- package/dist/generated_clients/jobs/instructions/quit.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/quitAdmin.d.ts +11 -11
- package/dist/generated_clients/jobs/instructions/quitAdmin.js +8 -8
- package/dist/generated_clients/jobs/instructions/quitAdmin.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/recover.d.ts +11 -11
- package/dist/generated_clients/jobs/instructions/recover.js +8 -8
- package/dist/generated_clients/jobs/instructions/recover.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/stop.d.ts +11 -11
- package/dist/generated_clients/jobs/instructions/stop.js +8 -8
- package/dist/generated_clients/jobs/instructions/stop.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/update.d.ts +11 -11
- package/dist/generated_clients/jobs/instructions/update.js +8 -8
- package/dist/generated_clients/jobs/instructions/update.js.map +1 -0
- package/dist/generated_clients/jobs/instructions/work.d.ts +13 -13
- package/dist/generated_clients/jobs/instructions/work.js +8 -8
- package/dist/generated_clients/jobs/instructions/work.js.map +1 -0
- package/dist/generated_clients/jobs/programs/index.d.ts +3 -3
- package/dist/generated_clients/jobs/programs/index.js +4 -3
- package/dist/generated_clients/jobs/programs/index.js.map +1 -0
- package/dist/generated_clients/jobs/programs/nosanaJobs.d.ts +52 -50
- package/dist/generated_clients/jobs/programs/nosanaJobs.js +30 -31
- package/dist/generated_clients/jobs/programs/nosanaJobs.js.map +1 -0
- package/dist/generated_clients/jobs/shared/index.d.ts +5 -5
- package/dist/generated_clients/jobs/shared/index.js +4 -3
- package/dist/generated_clients/jobs/shared/index.js.map +1 -0
- package/dist/generated_clients/jobs/types/index.d.ts +5 -5
- package/dist/generated_clients/jobs/types/index.js +6 -5
- package/dist/generated_clients/jobs/types/index.js.map +1 -0
- package/dist/generated_clients/jobs/types/jobState.d.ts +12 -11
- package/dist/generated_clients/jobs/types/jobState.js +8 -8
- package/dist/generated_clients/jobs/types/jobState.js.map +1 -0
- package/dist/generated_clients/jobs/types/jobType.d.ts +15 -14
- package/dist/generated_clients/jobs/types/jobType.js +11 -11
- package/dist/generated_clients/jobs/types/jobType.js.map +1 -0
- package/dist/generated_clients/jobs/types/queueType.d.ts +12 -11
- package/dist/generated_clients/jobs/types/queueType.js +8 -8
- package/dist/generated_clients/jobs/types/queueType.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/accounts/claimStatus.d.ts +10 -6
- package/dist/generated_clients/merkle_distributor/accounts/claimStatus.js +6 -2
- package/dist/generated_clients/merkle_distributor/accounts/claimStatus.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/accounts/index.d.ts +4 -4
- package/dist/generated_clients/merkle_distributor/accounts/index.js +5 -4
- package/dist/generated_clients/merkle_distributor/accounts/index.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/accounts/merkleDistributor.d.ts +10 -6
- package/dist/generated_clients/merkle_distributor/accounts/merkleDistributor.js +6 -2
- package/dist/generated_clients/merkle_distributor/accounts/merkleDistributor.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/errors/index.d.ts +3 -3
- package/dist/generated_clients/merkle_distributor/errors/index.js +4 -3
- package/dist/generated_clients/merkle_distributor/errors/index.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/errors/merkleDistributor.d.ts +2 -2
- package/dist/generated_clients/merkle_distributor/errors/merkleDistributor.js +4 -3
- package/dist/generated_clients/merkle_distributor/errors/merkleDistributor.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/index.d.ts +6 -6
- package/dist/generated_clients/merkle_distributor/index.js +7 -6
- package/dist/generated_clients/merkle_distributor/index.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/instructions/claimLocked.d.ts +11 -11
- package/dist/generated_clients/merkle_distributor/instructions/claimLocked.js +8 -8
- package/dist/generated_clients/merkle_distributor/instructions/claimLocked.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/instructions/clawback.d.ts +11 -11
- package/dist/generated_clients/merkle_distributor/instructions/clawback.js +8 -8
- package/dist/generated_clients/merkle_distributor/instructions/clawback.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/instructions/closeClaimStatus.d.ts +11 -11
- package/dist/generated_clients/merkle_distributor/instructions/closeClaimStatus.js +8 -8
- package/dist/generated_clients/merkle_distributor/instructions/closeClaimStatus.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/instructions/closeDistributor.d.ts +11 -11
- package/dist/generated_clients/merkle_distributor/instructions/closeDistributor.js +8 -8
- package/dist/generated_clients/merkle_distributor/instructions/closeDistributor.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/instructions/index.d.ts +11 -11
- package/dist/generated_clients/merkle_distributor/instructions/index.js +12 -11
- package/dist/generated_clients/merkle_distributor/instructions/index.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/instructions/newClaim.d.ts +8 -8
- package/dist/generated_clients/merkle_distributor/instructions/newClaim.js +8 -8
- package/dist/generated_clients/merkle_distributor/instructions/newClaim.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/instructions/newDistributor.d.ts +11 -11
- package/dist/generated_clients/merkle_distributor/instructions/newDistributor.js +8 -8
- package/dist/generated_clients/merkle_distributor/instructions/newDistributor.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/instructions/setAdmin.d.ts +11 -11
- package/dist/generated_clients/merkle_distributor/instructions/setAdmin.js +8 -8
- package/dist/generated_clients/merkle_distributor/instructions/setAdmin.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/instructions/setClawbackReceiver.d.ts +11 -11
- package/dist/generated_clients/merkle_distributor/instructions/setClawbackReceiver.js +8 -8
- package/dist/generated_clients/merkle_distributor/instructions/setClawbackReceiver.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/instructions/setEnableSlot.d.ts +11 -11
- package/dist/generated_clients/merkle_distributor/instructions/setEnableSlot.js +9 -12
- package/dist/generated_clients/merkle_distributor/instructions/setEnableSlot.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/programs/index.d.ts +3 -3
- package/dist/generated_clients/merkle_distributor/programs/index.js +4 -3
- package/dist/generated_clients/merkle_distributor/programs/index.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/programs/merkleDistributor.d.ts +29 -27
- package/dist/generated_clients/merkle_distributor/programs/merkleDistributor.js +18 -19
- package/dist/generated_clients/merkle_distributor/programs/merkleDistributor.js.map +1 -0
- package/dist/generated_clients/merkle_distributor/shared/index.d.ts +5 -5
- package/dist/generated_clients/merkle_distributor/shared/index.js +4 -3
- package/dist/generated_clients/merkle_distributor/shared/index.js.map +1 -0
- package/dist/generated_clients/staking/accounts/index.d.ts +4 -4
- package/dist/generated_clients/staking/accounts/index.js +5 -4
- package/dist/generated_clients/staking/accounts/index.js.map +1 -0
- package/dist/generated_clients/staking/accounts/settingsAccount.d.ts +9 -6
- package/dist/generated_clients/staking/accounts/settingsAccount.js +6 -2
- package/dist/generated_clients/staking/accounts/settingsAccount.js.map +1 -0
- package/dist/generated_clients/staking/accounts/stakeAccount.d.ts +9 -6
- package/dist/generated_clients/staking/accounts/stakeAccount.js +6 -2
- package/dist/generated_clients/staking/accounts/stakeAccount.js.map +1 -0
- package/dist/generated_clients/staking/errors/index.d.ts +3 -3
- package/dist/generated_clients/staking/errors/index.js +4 -3
- package/dist/generated_clients/staking/errors/index.js.map +1 -0
- package/dist/generated_clients/staking/errors/nosanaStaking.d.ts +2 -2
- package/dist/generated_clients/staking/errors/nosanaStaking.js +4 -3
- package/dist/generated_clients/staking/errors/nosanaStaking.js.map +1 -0
- package/dist/generated_clients/staking/index.d.ts +6 -6
- package/dist/generated_clients/staking/index.js +7 -6
- package/dist/generated_clients/staking/index.js.map +1 -0
- package/dist/generated_clients/staking/instructions/close.d.ts +11 -11
- package/dist/generated_clients/staking/instructions/close.js +8 -8
- package/dist/generated_clients/staking/instructions/close.js.map +1 -0
- package/dist/generated_clients/staking/instructions/extend.d.ts +11 -11
- package/dist/generated_clients/staking/instructions/extend.js +9 -12
- package/dist/generated_clients/staking/instructions/extend.js.map +1 -0
- package/dist/generated_clients/staking/instructions/index.d.ts +12 -12
- package/dist/generated_clients/staking/instructions/index.js +13 -12
- package/dist/generated_clients/staking/instructions/index.js.map +1 -0
- package/dist/generated_clients/staking/instructions/init.d.ts +11 -11
- package/dist/generated_clients/staking/instructions/init.js +8 -8
- package/dist/generated_clients/staking/instructions/init.js.map +1 -0
- package/dist/generated_clients/staking/instructions/restake.d.ts +11 -11
- package/dist/generated_clients/staking/instructions/restake.js +8 -8
- package/dist/generated_clients/staking/instructions/restake.js.map +1 -0
- package/dist/generated_clients/staking/instructions/slash.d.ts +11 -11
- package/dist/generated_clients/staking/instructions/slash.js +8 -8
- package/dist/generated_clients/staking/instructions/slash.js.map +1 -0
- package/dist/generated_clients/staking/instructions/stake.d.ts +11 -11
- package/dist/generated_clients/staking/instructions/stake.js +8 -8
- package/dist/generated_clients/staking/instructions/stake.js.map +1 -0
- package/dist/generated_clients/staking/instructions/topup.d.ts +11 -11
- package/dist/generated_clients/staking/instructions/topup.js +8 -8
- package/dist/generated_clients/staking/instructions/topup.js.map +1 -0
- package/dist/generated_clients/staking/instructions/unstake.d.ts +11 -11
- package/dist/generated_clients/staking/instructions/unstake.js +8 -8
- package/dist/generated_clients/staking/instructions/unstake.js.map +1 -0
- package/dist/generated_clients/staking/instructions/updateSettings.d.ts +11 -11
- package/dist/generated_clients/staking/instructions/updateSettings.js +8 -8
- package/dist/generated_clients/staking/instructions/updateSettings.js.map +1 -0
- package/dist/generated_clients/staking/instructions/withdraw.d.ts +11 -11
- package/dist/generated_clients/staking/instructions/withdraw.js +8 -8
- package/dist/generated_clients/staking/instructions/withdraw.js.map +1 -0
- package/dist/generated_clients/staking/programs/index.d.ts +3 -3
- package/dist/generated_clients/staking/programs/index.js +4 -3
- package/dist/generated_clients/staking/programs/index.js.map +1 -0
- package/dist/generated_clients/staking/programs/nosanaStaking.d.ts +33 -31
- package/dist/generated_clients/staking/programs/nosanaStaking.js +20 -21
- package/dist/generated_clients/staking/programs/nosanaStaking.js.map +1 -0
- package/dist/generated_clients/staking/shared/index.d.ts +5 -5
- package/dist/generated_clients/staking/shared/index.js +4 -3
- package/dist/generated_clients/staking/shared/index.js.map +1 -0
- package/dist/index.d.ts +13 -32
- package/dist/index.js +13 -37
- package/dist/index.js.map +1 -0
- package/dist/logger/Logger.d.ts +4 -4
- package/dist/logger/Logger.js +7 -2
- package/dist/logger/Logger.js.map +1 -0
- package/dist/services/SolanaService.d.ts +49 -26
- package/dist/services/SolanaService.js +191 -133
- package/dist/services/SolanaService.js.map +1 -0
- package/dist/services/TokenService.d.ts +41 -0
- package/dist/services/TokenService.js +136 -0
- package/dist/services/TokenService.js.map +1 -0
- package/dist/services/programs/JobsProgram.d.ts +106 -0
- package/dist/services/programs/JobsProgram.js +584 -0
- package/dist/services/programs/JobsProgram.js.map +1 -0
- package/dist/services/programs/MerkleDistributorProgram.d.ts +101 -0
- package/dist/services/programs/MerkleDistributorProgram.js +343 -0
- package/dist/services/programs/MerkleDistributorProgram.js.map +1 -0
- package/dist/services/programs/StakeProgram.d.ts +46 -0
- package/dist/services/programs/StakeProgram.js +87 -0
- package/dist/services/programs/StakeProgram.js.map +1 -0
- package/dist/types.d.ts +17 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/convertBigIntToNumber.d.ts +19 -0
- package/dist/utils/convertBigIntToNumber.js +15 -0
- package/dist/utils/convertBigIntToNumber.js.map +1 -0
- package/dist/utils/getStaticAccounts.d.ts +23 -0
- package/dist/utils/getStaticAccounts.js +39 -0
- package/dist/utils/getStaticAccounts.js.map +1 -0
- package/dist/utils/index.d.ts +3 -20
- package/dist/utils/index.js +5 -16
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/walletToAuthorizationSigner.d.ts +10 -0
- package/dist/utils/walletToAuthorizationSigner.js +42 -0
- package/dist/utils/walletToAuthorizationSigner.js.map +1 -0
- package/package.json +17 -14
- package/dist/ipfs/IPFS.d.ts +0 -50
- package/dist/ipfs/IPFS.js +0 -149
- package/dist/programs/BaseProgram.d.ts +0 -20
- package/dist/programs/BaseProgram.js +0 -31
- package/dist/programs/JobsProgram.d.ts +0 -129
- package/dist/programs/JobsProgram.js +0 -559
- package/dist/programs/MerkleDistributorProgram.d.ts +0 -115
- package/dist/programs/MerkleDistributorProgram.js +0 -337
- package/dist/programs/StakeProgram.d.ts +0 -29
- package/dist/programs/StakeProgram.js +0 -91
- package/dist/services/NosService.d.ts +0 -48
- package/dist/services/NosService.js +0 -139
- package/dist/utils/walletConverter.d.ts +0 -9
- package/dist/utils/walletConverter.js +0 -141
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Address } from '@solana/kit';
|
|
2
|
+
import { Logger } from '../logger/Logger.js';
|
|
3
|
+
export interface TokenAccount {
|
|
4
|
+
pubkey: Address;
|
|
5
|
+
owner: Address;
|
|
6
|
+
mint: Address;
|
|
7
|
+
amount: bigint;
|
|
8
|
+
decimals: number;
|
|
9
|
+
}
|
|
10
|
+
export interface TokenAccountWithBalance extends TokenAccount {
|
|
11
|
+
uiAmount: number;
|
|
12
|
+
}
|
|
13
|
+
import type { SolanaService } from './SolanaService.js';
|
|
14
|
+
/**
|
|
15
|
+
* Dependencies for TokenService
|
|
16
|
+
*/
|
|
17
|
+
export interface TokenServiceDeps {
|
|
18
|
+
logger: Logger;
|
|
19
|
+
solana: SolanaService;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Config for TokenService
|
|
23
|
+
*/
|
|
24
|
+
export interface TokenServiceConfig {
|
|
25
|
+
tokenAddress: Address;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* TokenService interface
|
|
29
|
+
*/
|
|
30
|
+
export interface TokenService {
|
|
31
|
+
getAllTokenHolders(options?: {
|
|
32
|
+
includeZeroBalance?: boolean;
|
|
33
|
+
excludePdaAccounts?: boolean;
|
|
34
|
+
}): Promise<TokenAccountWithBalance[]>;
|
|
35
|
+
getTokenAccountForAddress(owner: string | Address): Promise<TokenAccountWithBalance | null>;
|
|
36
|
+
getBalance(owner: string | Address): Promise<number>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Creates a TokenService instance.
|
|
40
|
+
*/
|
|
41
|
+
export declare function createTokenService(deps: TokenServiceDeps, config: TokenServiceConfig): TokenService;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { address } from '@solana/kit';
|
|
2
|
+
import { NosanaError, ErrorCodes } from '../errors/NosanaError.js';
|
|
3
|
+
import { TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';
|
|
4
|
+
// Standard SPL token account size
|
|
5
|
+
const TOKEN_ACCOUNT_SIZE = 165;
|
|
6
|
+
// Offset of mint address in token account data structure
|
|
7
|
+
const MINT_OFFSET = 0;
|
|
8
|
+
/**
|
|
9
|
+
* Creates a TokenService instance.
|
|
10
|
+
*/
|
|
11
|
+
export function createTokenService(deps, config) {
|
|
12
|
+
return {
|
|
13
|
+
/**
|
|
14
|
+
* Retrieve all token accounts for all token holders
|
|
15
|
+
* Uses a single RPC call to fetch all accounts holding the token
|
|
16
|
+
*
|
|
17
|
+
* @param options - Optional configuration
|
|
18
|
+
* @param options.includeZeroBalance - Whether to include accounts with zero balance (default: false)
|
|
19
|
+
* @param options.excludePdaAccounts - Whether to exclude PDA (Program Derived Address) accounts owned by smart contracts (default: false)
|
|
20
|
+
* @returns Array of token accounts with their balances
|
|
21
|
+
*/
|
|
22
|
+
async getAllTokenHolders(options) {
|
|
23
|
+
try {
|
|
24
|
+
const tokenMint = config.tokenAddress;
|
|
25
|
+
deps.logger.debug(`Fetching all token holders for mint: ${tokenMint}`);
|
|
26
|
+
// Use getProgramAccounts to fetch all token accounts for the token mint
|
|
27
|
+
const accounts = await deps.solana.rpc
|
|
28
|
+
.getProgramAccounts(TOKEN_PROGRAM_ADDRESS, {
|
|
29
|
+
encoding: 'jsonParsed',
|
|
30
|
+
filters: [
|
|
31
|
+
{
|
|
32
|
+
dataSize: BigInt(TOKEN_ACCOUNT_SIZE),
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
memcmp: {
|
|
36
|
+
offset: BigInt(MINT_OFFSET),
|
|
37
|
+
bytes: tokenMint.toString(),
|
|
38
|
+
encoding: 'base58',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
})
|
|
43
|
+
.send();
|
|
44
|
+
deps.logger.info(`Found ${accounts.length} token accounts`);
|
|
45
|
+
// Parse the response
|
|
46
|
+
const allAccounts = accounts.map((accountInfo) => {
|
|
47
|
+
const parsed = accountInfo.account.data.parsed.info;
|
|
48
|
+
return {
|
|
49
|
+
pubkey: accountInfo.pubkey,
|
|
50
|
+
owner: parsed.owner,
|
|
51
|
+
mint: parsed.mint,
|
|
52
|
+
amount: BigInt(parsed.tokenAmount.amount),
|
|
53
|
+
decimals: parsed.tokenAmount.decimals,
|
|
54
|
+
uiAmount: parsed.tokenAmount.uiAmount ?? 0,
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
// Apply filters
|
|
58
|
+
const includeZeroBalance = options?.includeZeroBalance ?? false;
|
|
59
|
+
const excludePdaAccounts = options?.excludePdaAccounts ?? false;
|
|
60
|
+
let filteredAccounts = allAccounts;
|
|
61
|
+
// Filter out zero balance accounts unless explicitly included
|
|
62
|
+
if (!includeZeroBalance) {
|
|
63
|
+
filteredAccounts = filteredAccounts.filter((account) => account.uiAmount > 0);
|
|
64
|
+
}
|
|
65
|
+
// Filter out PDA accounts (where token account equals owner, indicating smart contract ownership)
|
|
66
|
+
if (excludePdaAccounts) {
|
|
67
|
+
const beforePdaFilter = filteredAccounts.length;
|
|
68
|
+
filteredAccounts = filteredAccounts.filter((account) => account.pubkey !== account.owner);
|
|
69
|
+
const pdaCount = beforePdaFilter - filteredAccounts.length;
|
|
70
|
+
deps.logger.debug(`Filtered out ${pdaCount} PDA accounts`);
|
|
71
|
+
}
|
|
72
|
+
const filterInfo = [];
|
|
73
|
+
if (!includeZeroBalance)
|
|
74
|
+
filterInfo.push('excluding zero balances');
|
|
75
|
+
if (excludePdaAccounts)
|
|
76
|
+
filterInfo.push('excluding PDA accounts');
|
|
77
|
+
const filterText = filterInfo.length > 0 ? ` (${filterInfo.join(', ')})` : '';
|
|
78
|
+
deps.logger.info(`Returning ${filteredAccounts.length} token holders${filterText}`);
|
|
79
|
+
return filteredAccounts;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
deps.logger.error(`Failed to fetch token holders: ${error}`);
|
|
83
|
+
throw new NosanaError('Failed to fetch token holders', ErrorCodes.RPC_ERROR, error);
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
/**
|
|
87
|
+
* Retrieve the token account for a specific owner address
|
|
88
|
+
*
|
|
89
|
+
* @param owner - The owner address to query
|
|
90
|
+
* @returns The token account with balance, or null if no account exists
|
|
91
|
+
*/
|
|
92
|
+
async getTokenAccountForAddress(owner) {
|
|
93
|
+
try {
|
|
94
|
+
const ownerAddr = typeof owner === 'string' ? address(owner) : owner;
|
|
95
|
+
const tokenMint = config.tokenAddress;
|
|
96
|
+
deps.logger.debug(`Fetching token account for owner: ${ownerAddr}`);
|
|
97
|
+
// Use getTokenAccountsByOwner to fetch token accounts for this owner filtered by token mint
|
|
98
|
+
const response = await deps.solana.rpc
|
|
99
|
+
.getTokenAccountsByOwner(ownerAddr, { mint: tokenMint }, { encoding: 'jsonParsed' })
|
|
100
|
+
.send();
|
|
101
|
+
if (response.value.length === 0) {
|
|
102
|
+
deps.logger.debug(`No token account found for owner: ${ownerAddr}`);
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
// Typically there should only be one token account per owner per mint
|
|
106
|
+
const accountInfo = response.value[0];
|
|
107
|
+
const parsed = accountInfo.account.data.parsed.info;
|
|
108
|
+
deps.logger.info(`Found token account for owner ${ownerAddr}: balance = ${parsed.tokenAmount.uiAmount}`);
|
|
109
|
+
return {
|
|
110
|
+
pubkey: accountInfo.pubkey,
|
|
111
|
+
owner: parsed.owner,
|
|
112
|
+
mint: parsed.mint,
|
|
113
|
+
amount: BigInt(parsed.tokenAmount.amount),
|
|
114
|
+
decimals: parsed.tokenAmount.decimals,
|
|
115
|
+
uiAmount: parsed.tokenAmount.uiAmount ?? 0,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
deps.logger.error(`Failed to fetch token account for owner: ${error}`);
|
|
120
|
+
throw new NosanaError('Failed to fetch token account', ErrorCodes.RPC_ERROR, error);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
/**
|
|
124
|
+
* Get the token balance for a specific owner address
|
|
125
|
+
* Convenience method that returns just the balance
|
|
126
|
+
*
|
|
127
|
+
* @param owner - The owner address to query
|
|
128
|
+
* @returns The token balance as a UI amount (with decimals), or 0 if no account exists
|
|
129
|
+
*/
|
|
130
|
+
async getBalance(owner) {
|
|
131
|
+
const account = await this.getTokenAccountForAddress(owner);
|
|
132
|
+
return account ? account.uiAmount : 0;
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=TokenService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenService.js","sourceRoot":"","sources":["../../src/services/TokenService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Address } from '@solana/kit';
|
|
2
|
+
import type { ProgramDeps } from '../../types.js';
|
|
3
|
+
import * as programClient from '../../generated_clients/jobs/index.js';
|
|
4
|
+
import { ConvertTypesForDb } from '../../utils/index.js';
|
|
5
|
+
export declare enum JobState {
|
|
6
|
+
QUEUED = 0,
|
|
7
|
+
RUNNING = 1,
|
|
8
|
+
COMPLETED = 2,
|
|
9
|
+
STOPPED = 3
|
|
10
|
+
}
|
|
11
|
+
export declare enum MarketQueueType {
|
|
12
|
+
JOB_QUEUE = 0,
|
|
13
|
+
NODE_QUEUE = 1
|
|
14
|
+
}
|
|
15
|
+
export type Job = Omit<ConvertTypesForDb<programClient.JobAccountArgs>, 'state'> & {
|
|
16
|
+
address: Address;
|
|
17
|
+
state: JobState;
|
|
18
|
+
};
|
|
19
|
+
export type Market = Omit<ConvertTypesForDb<programClient.MarketAccountArgs>, 'queueType'> & {
|
|
20
|
+
address: Address;
|
|
21
|
+
queueType: MarketQueueType;
|
|
22
|
+
};
|
|
23
|
+
export type Run = ConvertTypesForDb<programClient.RunAccountArgs> & {
|
|
24
|
+
address: Address;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Jobs program interface
|
|
28
|
+
*/
|
|
29
|
+
export interface JobsProgram {
|
|
30
|
+
/**
|
|
31
|
+
* Fetch a job account by address
|
|
32
|
+
*/
|
|
33
|
+
get(addr: Address, checkRun?: boolean): Promise<Job>;
|
|
34
|
+
/**
|
|
35
|
+
* Fetch a run account by address
|
|
36
|
+
*/
|
|
37
|
+
run(addr: Address): Promise<Run>;
|
|
38
|
+
/**
|
|
39
|
+
* Fetch a market account by address
|
|
40
|
+
*/
|
|
41
|
+
market(addr: Address): Promise<Market>;
|
|
42
|
+
/**
|
|
43
|
+
* Fetch multiple job accounts by address
|
|
44
|
+
*/
|
|
45
|
+
multiple(addresses: Address[], checkRuns?: boolean): Promise<Job[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Fetch all job accounts
|
|
48
|
+
*/
|
|
49
|
+
all(filters?: {
|
|
50
|
+
state?: JobState;
|
|
51
|
+
market?: Address;
|
|
52
|
+
node?: Address;
|
|
53
|
+
project?: Address;
|
|
54
|
+
}, checkRuns?: boolean): Promise<Job[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Fetch all run accounts
|
|
57
|
+
*/
|
|
58
|
+
runs(filters?: {
|
|
59
|
+
node?: Address;
|
|
60
|
+
job?: Address;
|
|
61
|
+
}): Promise<Run[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Fetch all market accounts
|
|
64
|
+
*/
|
|
65
|
+
markets(): Promise<Market[]>;
|
|
66
|
+
/**
|
|
67
|
+
* Post a new job to the marketplace
|
|
68
|
+
*/
|
|
69
|
+
post(params: {
|
|
70
|
+
market: Address;
|
|
71
|
+
timeout: number | bigint;
|
|
72
|
+
ipfsHash: string;
|
|
73
|
+
node?: Address;
|
|
74
|
+
}): Promise<ReturnType<typeof programClient.getListInstruction>>;
|
|
75
|
+
/**
|
|
76
|
+
* Monitor program account updates using callback functions
|
|
77
|
+
*/
|
|
78
|
+
monitor(options?: {
|
|
79
|
+
onJobAccount?: (jobAccount: Job) => Promise<void> | void;
|
|
80
|
+
onMarketAccount?: (marketAccount: Market) => Promise<void> | void;
|
|
81
|
+
onRunAccount?: (runAccount: Run) => Promise<void> | void;
|
|
82
|
+
onError?: (error: Error, accountType?: string) => Promise<void> | void;
|
|
83
|
+
}): Promise<() => void>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Creates a new JobsProgram instance.
|
|
87
|
+
*
|
|
88
|
+
* @param deps - Program dependencies (config, logger, solana service, wallet getter)
|
|
89
|
+
* @returns A JobsProgram instance with methods to interact with the jobs program
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* import { createJobsProgram } from '@nosana/kit';
|
|
94
|
+
*
|
|
95
|
+
* const jobsProgram = createJobsProgram({
|
|
96
|
+
* config,
|
|
97
|
+
* logger,
|
|
98
|
+
* solana,
|
|
99
|
+
* getWallet,
|
|
100
|
+
* });
|
|
101
|
+
*
|
|
102
|
+
* const job = await jobsProgram.get('job-address');
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
import type { ProgramConfig } from '../../config/types.js';
|
|
106
|
+
export declare function createJobsProgram(deps: ProgramDeps, config: ProgramConfig): JobsProgram;
|