@velocity-exchange/sdk 0.4.0 → 0.6.1
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 +3 -3
- package/lib/browser/adminClient.d.ts +52 -0
- package/lib/browser/adminClient.js +97 -0
- package/lib/browser/config.js +6 -7
- package/lib/browser/constants/numericConstants.d.ts +1 -1
- package/lib/browser/constants/numericConstants.js +1 -1
- package/lib/browser/decode/user.js +5 -1
- package/lib/browser/idl/velocity.d.ts +191 -15
- package/lib/browser/idl/velocity.json +192 -16
- package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +1 -0
- package/lib/browser/orderSubscriber/OrderSubscriber.js +10 -4
- package/lib/browser/pyth/pythLazerSubscriber.js +37 -27
- package/lib/browser/types.d.ts +6 -0
- package/lib/browser/user.d.ts +20 -3
- package/lib/browser/user.js +52 -4
- package/lib/browser/velocityClient.d.ts +46 -10
- package/lib/browser/velocityClient.js +107 -35
- package/lib/node/adminClient.d.ts +52 -0
- package/lib/node/adminClient.d.ts.map +1 -1
- package/lib/node/adminClient.js +97 -0
- package/lib/node/config.d.ts.map +1 -1
- package/lib/node/config.js +6 -7
- package/lib/node/constants/numericConstants.d.ts +1 -1
- package/lib/node/constants/numericConstants.d.ts.map +1 -1
- package/lib/node/constants/numericConstants.js +1 -1
- package/lib/node/decode/user.d.ts.map +1 -1
- package/lib/node/decode/user.js +5 -1
- package/lib/node/idl/velocity.d.ts +191 -15
- package/lib/node/idl/velocity.d.ts.map +1 -1
- package/lib/node/idl/velocity.json +192 -16
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts +1 -0
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
- package/lib/node/orderSubscriber/OrderSubscriber.js +10 -4
- package/lib/node/pyth/pythLazerSubscriber.d.ts.map +1 -1
- package/lib/node/pyth/pythLazerSubscriber.js +37 -27
- package/lib/node/types.d.ts +6 -0
- package/lib/node/types.d.ts.map +1 -1
- package/lib/node/user.d.ts +20 -3
- package/lib/node/user.d.ts.map +1 -1
- package/lib/node/user.js +52 -4
- package/lib/node/velocityClient.d.ts +46 -10
- package/lib/node/velocityClient.d.ts.map +1 -1
- package/lib/node/velocityClient.js +107 -35
- package/package.json +7 -3
- package/.prettierignore +0 -1
- package/CHANGELOG.md +0 -132
- package/build-browser.js +0 -58
- package/bunfig.toml +0 -3
- package/esbuild-shims.js +0 -12
- package/scripts/deposit-isolated-positions.ts +0 -110
- package/scripts/find-flagged-users.ts +0 -213
- package/scripts/grpc-client-test-comparison.ts +0 -372
- package/scripts/grpc-multiuser-client-test-comparison.ts +0 -158
- package/scripts/postbuild.js +0 -95
- package/scripts/single-grpc-client-test.ts +0 -284
- package/scripts/withdraw-isolated-positions.ts +0 -174
- package/src/accounts/README_WebSocketAccountSubscriberV2.md +0 -95
- package/src/accounts/README_WebSocketProgramAccountSubscriberV2.md +0 -135
- package/src/accounts/basicUserAccountSubscriber.ts +0 -79
- package/src/accounts/basicUserStatsAccountSubscriber.ts +0 -87
- package/src/accounts/bulkAccountLoader.ts +0 -358
- package/src/accounts/bulkUserStatsSubscription.ts +0 -40
- package/src/accounts/bulkUserSubscription.ts +0 -39
- package/src/accounts/customizedCadenceBulkAccountLoader.ts +0 -250
- package/src/accounts/fetch.ts +0 -200
- package/src/accounts/grpcAccountSubscriber.ts +0 -225
- package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +0 -73
- package/src/accounts/grpcMultiAccountSubscriber.ts +0 -566
- package/src/accounts/grpcMultiUserAccountSubscriber.ts +0 -328
- package/src/accounts/grpcProgramAccountSubscriber.ts +0 -264
- package/src/accounts/grpcUserAccountSubscriber.ts +0 -63
- package/src/accounts/grpcUserStatsAccountSubscriber.ts +0 -65
- package/src/accounts/grpcVelocityClientAccountSubscriber.ts +0 -257
- package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +0 -941
- package/src/accounts/laserProgramAccountSubscriber.ts +0 -266
- package/src/accounts/oneShotUserAccountSubscriber.ts +0 -88
- package/src/accounts/oneShotUserStatsAccountSubscriber.ts +0 -94
- package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +0 -223
- package/src/accounts/pollingOracleAccountSubscriber.ts +0 -151
- package/src/accounts/pollingTokenAccountSubscriber.ts +0 -147
- package/src/accounts/pollingUserAccountSubscriber.ts +0 -198
- package/src/accounts/pollingUserStatsAccountSubscriber.ts +0 -180
- package/src/accounts/pollingVelocityClientAccountSubscriber.ts +0 -774
- package/src/accounts/testBulkAccountLoader.ts +0 -59
- package/src/accounts/types.ts +0 -428
- package/src/accounts/utils.ts +0 -90
- package/src/accounts/webSocketAccountSubscriber.ts +0 -304
- package/src/accounts/webSocketAccountSubscriberV2.ts +0 -536
- package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +0 -171
- package/src/accounts/webSocketProgramAccountSubscriber.ts +0 -244
- package/src/accounts/webSocketProgramAccountSubscriberV2.ts +0 -1048
- package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +0 -1042
- package/src/accounts/webSocketUserAccountSubscriber.ts +0 -139
- package/src/accounts/webSocketUserStatsAccountSubsriber.ts +0 -131
- package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +0 -865
- package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +0 -897
- package/src/accounts/websocketProgramUserAccountSubscriber.ts +0 -127
- package/src/addresses/marketAddresses.ts +0 -28
- package/src/addresses/pda.ts +0 -620
- package/src/adminClient.ts +0 -8136
- package/src/assert/assert.ts +0 -5
- package/src/auctionSubscriber/auctionSubscriber.ts +0 -86
- package/src/auctionSubscriber/auctionSubscriberGrpc.ts +0 -99
- package/src/auctionSubscriber/index.ts +0 -9
- package/src/auctionSubscriber/types.ts +0 -30
- package/src/bankrun/bankrunConnection.ts +0 -630
- package/src/blockhashSubscriber/BlockhashSubscriber.ts +0 -160
- package/src/blockhashSubscriber/index.ts +0 -6
- package/src/blockhashSubscriber/types.ts +0 -13
- package/src/clock/clockSubscriber.ts +0 -146
- package/src/config.ts +0 -312
- package/src/constants/index.ts +0 -9
- package/src/constants/numericConstants.ts +0 -194
- package/src/constants/perpMarkets.ts +0 -127
- package/src/constants/spotMarkets.ts +0 -104
- package/src/constants/txConstants.ts +0 -2
- package/src/constituentMap/constituentMap.ts +0 -305
- package/src/constituentMap/pollingConstituentAccountSubscriber.ts +0 -99
- package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +0 -121
- package/src/core/VelocityCore.ts +0 -606
- package/src/core/index.ts +0 -12
- package/src/core/instructions/deposit.ts +0 -64
- package/src/core/instructions/fill.ts +0 -51
- package/src/core/instructions/funding.ts +0 -33
- package/src/core/instructions/liquidation.ts +0 -55
- package/src/core/instructions/orders.ts +0 -84
- package/src/core/instructions/perpOrders.ts +0 -312
- package/src/core/instructions/settlement.ts +0 -40
- package/src/core/instructions/trigger.ts +0 -41
- package/src/core/instructions/withdraw.ts +0 -65
- package/src/core/remainingAccounts.ts +0 -320
- package/src/core/signedMsg.ts +0 -109
- package/src/decode/customCoder.ts +0 -148
- package/src/decode/user.ts +0 -401
- package/src/dlob/DLOB.ts +0 -2793
- package/src/dlob/DLOBNode.ts +0 -305
- package/src/dlob/DLOBSubscriber.ts +0 -269
- package/src/dlob/NodeList.ts +0 -244
- package/src/dlob/orderBookLevels.ts +0 -695
- package/src/dlob/types.ts +0 -37
- package/src/events/eventList.ts +0 -114
- package/src/events/eventSubscriber.ts +0 -521
- package/src/events/eventsServerLogProvider.ts +0 -189
- package/src/events/fetchLogs.ts +0 -219
- package/src/events/parse.ts +0 -271
- package/src/events/pollingLogProvider.ts +0 -113
- package/src/events/sort.ts +0 -51
- package/src/events/txEventCache.ts +0 -92
- package/src/events/types.ts +0 -337
- package/src/events/webSocketLogProvider.ts +0 -152
- package/src/factory/bigNum.ts +0 -709
- package/src/factory/oracleClient.ts +0 -73
- package/src/idl/pyth.json +0 -142
- package/src/idl/pyth.ts +0 -97
- package/src/idl/pyth_solana_receiver.json +0 -628
- package/src/idl/token_faucet.json +0 -229
- package/src/idl/token_faucet.ts +0 -197
- package/src/idl/velocity.json +0 -23974
- package/src/idl/velocity.ts +0 -23980
- package/src/index.ts +0 -150
- package/src/indicative-quotes/indicativeQuotesSender.ts +0 -233
- package/src/isomorphic/README.md +0 -19
- package/src/isomorphic/anchor.browser.ts +0 -44
- package/src/isomorphic/anchor.node.ts +0 -1
- package/src/isomorphic/anchor.ts +0 -1
- package/src/isomorphic/anchor29.browser.ts +0 -24
- package/src/isomorphic/anchor29.node.ts +0 -1
- package/src/isomorphic/anchor29.ts +0 -1
- package/src/isomorphic/grpc.browser.ts +0 -4
- package/src/isomorphic/grpc.node.ts +0 -130
- package/src/isomorphic/grpc.ts +0 -1
- package/src/jupiter/jupiterClient.ts +0 -502
- package/src/keypair.ts +0 -32
- package/src/margin/README.md +0 -138
- package/src/marginCalculation.ts +0 -407
- package/src/marinade/idl/idl.json +0 -1962
- package/src/marinade/index.ts +0 -73
- package/src/marinade/types.ts +0 -3925
- package/src/math/amm.ts +0 -1758
- package/src/math/auction.ts +0 -480
- package/src/math/bankruptcy.ts +0 -138
- package/src/math/builder.ts +0 -130
- package/src/math/conversion.ts +0 -45
- package/src/math/exchangeStatus.ts +0 -261
- package/src/math/funding.ts +0 -498
- package/src/math/insurance.ts +0 -171
- package/src/math/liquidation.ts +0 -433
- package/src/math/margin.ts +0 -327
- package/src/math/market.ts +0 -487
- package/src/math/oracles.ts +0 -477
- package/src/math/orders.ts +0 -500
- package/src/math/position.ts +0 -381
- package/src/math/repeg.ts +0 -223
- package/src/math/spotBalance.ts +0 -996
- package/src/math/spotMarket.ts +0 -115
- package/src/math/spotPosition.ts +0 -263
- package/src/math/state.ts +0 -71
- package/src/math/superStake.ts +0 -602
- package/src/math/tiers.ts +0 -73
- package/src/math/trade.ts +0 -879
- package/src/math/utils.ts +0 -183
- package/src/memcmp.ts +0 -279
- package/src/oracles/oracleClientCache.ts +0 -41
- package/src/oracles/oracleId.ts +0 -99
- package/src/oracles/prelaunchOracleClient.ts +0 -63
- package/src/oracles/pythClient.ts +0 -125
- package/src/oracles/pythLazerClient.ts +0 -141
- package/src/oracles/quoteAssetOracleClient.ts +0 -43
- package/src/oracles/strictOraclePrice.ts +0 -40
- package/src/oracles/types.ts +0 -82
- package/src/oracles/utils.ts +0 -45
- package/src/orderParams.ts +0 -117
- package/src/orderSubscriber/OrderSubscriber.ts +0 -378
- package/src/orderSubscriber/PollingSubscription.ts +0 -50
- package/src/orderSubscriber/WebsocketSubscription.ts +0 -137
- package/src/orderSubscriber/grpcSubscription.ts +0 -155
- package/src/orderSubscriber/index.ts +0 -7
- package/src/orderSubscriber/types.ts +0 -64
- package/src/priorityFee/averageOverSlotsStrategy.ts +0 -17
- package/src/priorityFee/averageStrategy.ts +0 -13
- package/src/priorityFee/ewmaStrategy.ts +0 -51
- package/src/priorityFee/heliusPriorityFeeMethod.ts +0 -68
- package/src/priorityFee/index.ts +0 -16
- package/src/priorityFee/maxOverSlotsStrategy.ts +0 -18
- package/src/priorityFee/maxStrategy.ts +0 -8
- package/src/priorityFee/priorityFeeSubscriber.ts +0 -328
- package/src/priorityFee/priorityFeeSubscriberMap.ts +0 -134
- package/src/priorityFee/solanaPriorityFeeMethod.ts +0 -46
- package/src/priorityFee/types.ts +0 -82
- package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -53
- package/src/pyth/constants.ts +0 -9
- package/src/pyth/index.ts +0 -15
- package/src/pyth/pythLazerSubscriber.ts +0 -365
- package/src/pyth/types.ts +0 -4451
- package/src/pyth/utils.ts +0 -13
- package/src/slot/SlotSubscriber.ts +0 -126
- package/src/slot/SlothashSubscriber.ts +0 -163
- package/src/swap/UnifiedSwapClient.ts +0 -315
- package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +0 -81
- package/src/swift/index.ts +0 -10
- package/src/swift/signedMsgUserAccountSubscriber.ts +0 -251
- package/src/swift/swiftOrderSubscriber.ts +0 -351
- package/src/testClient.ts +0 -42
- package/src/titan/titanClient.ts +0 -438
- package/src/token/index.ts +0 -13
- package/src/tokenFaucet.ts +0 -296
- package/src/tx/baseTxSender.ts +0 -651
- package/src/tx/blockhashFetcher/baseBlockhashFetcher.ts +0 -31
- package/src/tx/blockhashFetcher/cachedBlockhashFetcher.ts +0 -105
- package/src/tx/blockhashFetcher/types.ts +0 -9
- package/src/tx/fastSingleTxSender.ts +0 -200
- package/src/tx/forwardOnlyTxSender.ts +0 -193
- package/src/tx/priorityFeeCalculator.ts +0 -117
- package/src/tx/reportTransactionError.ts +0 -176
- package/src/tx/retryTxSender.ts +0 -177
- package/src/tx/txHandler.ts +0 -1009
- package/src/tx/txParamProcessor.ts +0 -225
- package/src/tx/types.ts +0 -117
- package/src/tx/utils.ts +0 -133
- package/src/tx/whileValidTxSender.ts +0 -377
- package/src/types.ts +0 -2575
- package/src/user.ts +0 -5316
- package/src/userConfig.ts +0 -38
- package/src/userMap/PollingSubscription.ts +0 -61
- package/src/userMap/WebsocketSubscription.ts +0 -93
- package/src/userMap/grpcSubscription.ts +0 -93
- package/src/userMap/referrerMap.ts +0 -360
- package/src/userMap/revenueShareEscrowMap.ts +0 -342
- package/src/userMap/userMap.ts +0 -784
- package/src/userMap/userMapConfig.ts +0 -82
- package/src/userMap/userStatsMap.ts +0 -393
- package/src/userName.ts +0 -37
- package/src/userStats.ts +0 -159
- package/src/userStatsConfig.ts +0 -35
- package/src/util/TransactionConfirmationManager.ts +0 -333
- package/src/util/chainClock.ts +0 -65
- package/src/util/computeUnits.ts +0 -101
- package/src/util/digest.ts +0 -33
- package/src/util/ed25519Utils.ts +0 -95
- package/src/util/promiseTimeout.ts +0 -23
- package/src/velocityClient.ts +0 -14802
- package/src/velocityClientConfig.ts +0 -119
- package/src/wallet.ts +0 -91
- package/tests/VelocityCore/builder_escrow.test.ts +0 -121
- package/tests/VelocityCore/decode.test.ts +0 -16
- package/tests/VelocityCore/fill_trigger.test.ts +0 -73
- package/tests/VelocityCore/instructions.test.ts +0 -46
- package/tests/VelocityCore/pdas.test.ts +0 -30
- package/tests/VelocityCore/perp_orders.test.ts +0 -205
- package/tests/VelocityCore/remainingAccounts.test.ts +0 -72
- package/tests/VelocityCore/settlement_liquidation.test.ts +0 -69
- package/tests/accounts/customizedCadenceBulkAccountLoader.test.ts +0 -211
- package/tests/amm/test.ts +0 -2402
- package/tests/auctions/test.ts +0 -81
- package/tests/bn/test.ts +0 -355
- package/tests/builder/builderFee.test.ts +0 -42
- package/tests/ci/verifyConstants.ts +0 -393
- package/tests/decode/test.ts +0 -262
- package/tests/decode/userAccountBufferStrings.ts +0 -102
- package/tests/dlob/helpers.ts +0 -748
- package/tests/dlob/test.ts +0 -6969
- package/tests/dlob/tickSizeStandardization.ts +0 -545
- package/tests/events/parseLogsForCuUsage.ts +0 -139
- package/tests/exchangeStatus/test.ts +0 -45
- package/tests/insurance/test.ts +0 -40
- package/tests/liquidation/test.ts +0 -125
- package/tests/oracles/mmOracleGate.test.ts +0 -379
- package/tests/oracles/pythPegSnap.test.ts +0 -76
- package/tests/sdkParity/enumParity.test.ts +0 -84
- package/tests/sdkParity/marginCategoryFill.test.ts +0 -143
- package/tests/sdkParity/memcmpOffsets.test.ts +0 -139
- package/tests/spot/test.ts +0 -281
- package/tests/tx/TransactionConfirmationManager.test.ts +0 -312
- package/tests/tx/cachedBlockhashFetcher.test.ts +0 -96
- package/tests/tx/priorityFeeCalculator.ts +0 -77
- package/tests/tx/priorityFeeStrategy.ts +0 -95
- package/tests/user/bankruptcy.ts +0 -165
- package/tests/user/feeAndWithdrawLimits.ts +0 -284
- package/tests/user/getMarginCalculation.ts +0 -586
- package/tests/user/helpers.ts +0 -184
- package/tests/user/liquidations.ts +0 -129
- package/tests/user/marginCalculations.test.ts +0 -321
- package/tests/user/test.ts +0 -833
- package/tsconfig.browser.json +0 -18
- package/tsconfig.json +0 -36
|
@@ -1,630 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
TransactionConfirmationStatus,
|
|
3
|
-
AccountInfo,
|
|
4
|
-
Keypair,
|
|
5
|
-
PublicKey,
|
|
6
|
-
Transaction,
|
|
7
|
-
RpcResponseAndContext,
|
|
8
|
-
Commitment,
|
|
9
|
-
TransactionSignature,
|
|
10
|
-
SignatureStatusConfig,
|
|
11
|
-
SignatureStatus,
|
|
12
|
-
GetVersionedTransactionConfig,
|
|
13
|
-
GetTransactionConfig,
|
|
14
|
-
VersionedTransaction,
|
|
15
|
-
SimulateTransactionConfig,
|
|
16
|
-
SimulatedTransactionResponse,
|
|
17
|
-
TransactionReturnData,
|
|
18
|
-
TransactionError,
|
|
19
|
-
SignatureResultCallback,
|
|
20
|
-
Connection as SolanaConnection,
|
|
21
|
-
SystemProgram,
|
|
22
|
-
Blockhash,
|
|
23
|
-
LogsFilter,
|
|
24
|
-
LogsCallback,
|
|
25
|
-
AccountChangeCallback,
|
|
26
|
-
LAMPORTS_PER_SOL,
|
|
27
|
-
AddressLookupTableAccount,
|
|
28
|
-
} from '@solana/web3.js';
|
|
29
|
-
import {
|
|
30
|
-
ProgramTestContext,
|
|
31
|
-
BanksClient,
|
|
32
|
-
BanksTransactionResultWithMeta,
|
|
33
|
-
Clock,
|
|
34
|
-
} from 'solana-bankrun';
|
|
35
|
-
import { BankrunProvider } from 'anchor-bankrun';
|
|
36
|
-
import bs58 from 'bs58';
|
|
37
|
-
import { BN, Wallet } from '../isomorphic/anchor';
|
|
38
|
-
import { Account, unpackAccount } from '@solana/spl-token';
|
|
39
|
-
import { isVersionedTransaction } from '../tx/utils';
|
|
40
|
-
|
|
41
|
-
export type ClientSubscriptionId = number;
|
|
42
|
-
export type Connection = SolanaConnection | BankrunConnection;
|
|
43
|
-
|
|
44
|
-
type BankrunTransactionMetaNormalized = {
|
|
45
|
-
logMessages: string[];
|
|
46
|
-
err: TransactionError | null;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
type BankrunTransactionRespose = {
|
|
50
|
-
slot: number;
|
|
51
|
-
meta: BankrunTransactionMetaNormalized;
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export class BankrunContextWrapper {
|
|
55
|
-
public readonly connection: BankrunConnection;
|
|
56
|
-
public readonly context: ProgramTestContext;
|
|
57
|
-
public readonly provider: BankrunProvider;
|
|
58
|
-
public readonly commitment: Commitment = 'confirmed';
|
|
59
|
-
|
|
60
|
-
constructor(context: ProgramTestContext, verifySignatures = true) {
|
|
61
|
-
this.context = context;
|
|
62
|
-
this.provider = new BankrunProvider(context);
|
|
63
|
-
this.connection = new BankrunConnection(
|
|
64
|
-
this.context.banksClient,
|
|
65
|
-
this.context,
|
|
66
|
-
verifySignatures
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
async sendTransaction(
|
|
71
|
-
tx: Transaction | VersionedTransaction,
|
|
72
|
-
additionalSigners?: Keypair[]
|
|
73
|
-
): Promise<TransactionSignature> {
|
|
74
|
-
const isVersioned = isVersionedTransaction(tx);
|
|
75
|
-
if (!additionalSigners) {
|
|
76
|
-
additionalSigners = [];
|
|
77
|
-
}
|
|
78
|
-
if (isVersioned) {
|
|
79
|
-
tx = tx as VersionedTransaction;
|
|
80
|
-
tx.message.recentBlockhash = await this.getLatestBlockhash();
|
|
81
|
-
if (!additionalSigners) {
|
|
82
|
-
additionalSigners = [];
|
|
83
|
-
}
|
|
84
|
-
tx.sign([this.context.payer, ...additionalSigners]);
|
|
85
|
-
} else {
|
|
86
|
-
tx = tx as Transaction;
|
|
87
|
-
tx.recentBlockhash = await this.getLatestBlockhash();
|
|
88
|
-
tx.feePayer = this.context.payer.publicKey;
|
|
89
|
-
tx.sign(this.context.payer, ...additionalSigners);
|
|
90
|
-
}
|
|
91
|
-
return await this.connection.sendTransaction(tx);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
async getMinimumBalanceForRentExemption(_: number): Promise<number> {
|
|
95
|
-
return 10 * LAMPORTS_PER_SOL;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
async fundKeypair(
|
|
99
|
-
keypair: Keypair | Wallet,
|
|
100
|
-
lamports: number | bigint
|
|
101
|
-
): Promise<TransactionSignature> {
|
|
102
|
-
const ixs = [
|
|
103
|
-
SystemProgram.transfer({
|
|
104
|
-
fromPubkey: this.context.payer.publicKey,
|
|
105
|
-
toPubkey: keypair.publicKey,
|
|
106
|
-
lamports,
|
|
107
|
-
}),
|
|
108
|
-
];
|
|
109
|
-
const tx = new Transaction().add(...ixs);
|
|
110
|
-
return await this.sendTransaction(tx);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
async getLatestBlockhash(): Promise<Blockhash> {
|
|
114
|
-
const blockhash = await this.connection.getLatestBlockhash('finalized');
|
|
115
|
-
|
|
116
|
-
return blockhash.blockhash;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
printTxLogs(signature: string): void {
|
|
120
|
-
this.connection.printTxLogs(signature);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
async moveTimeForward(increment: number): Promise<void> {
|
|
124
|
-
const approxSlots = increment / 0.4;
|
|
125
|
-
const slot = await this.connection.getSlot();
|
|
126
|
-
this.context.warpToSlot(BigInt(Math.floor(Number(slot) + approxSlots)));
|
|
127
|
-
|
|
128
|
-
const currentClock = await this.context.banksClient.getClock();
|
|
129
|
-
const newUnixTimestamp = currentClock.unixTimestamp + BigInt(increment);
|
|
130
|
-
const newClock = new Clock(
|
|
131
|
-
currentClock.slot,
|
|
132
|
-
currentClock.epochStartTimestamp,
|
|
133
|
-
currentClock.epoch,
|
|
134
|
-
currentClock.leaderScheduleEpoch,
|
|
135
|
-
newUnixTimestamp
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
await this.context.setClock(newClock);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
async setTimestamp(unix_timestamp: number): Promise<void> {
|
|
142
|
-
const currentClock = await this.context.banksClient.getClock();
|
|
143
|
-
const newUnixTimestamp = BigInt(unix_timestamp);
|
|
144
|
-
const newClock = new Clock(
|
|
145
|
-
currentClock.slot,
|
|
146
|
-
currentClock.epochStartTimestamp,
|
|
147
|
-
currentClock.epoch,
|
|
148
|
-
currentClock.leaderScheduleEpoch,
|
|
149
|
-
newUnixTimestamp
|
|
150
|
-
);
|
|
151
|
-
await this.context.setClock(newClock);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export class BankrunConnection {
|
|
156
|
-
private readonly _banksClient: BanksClient;
|
|
157
|
-
private readonly context: ProgramTestContext;
|
|
158
|
-
private transactionToMeta: Map<
|
|
159
|
-
TransactionSignature,
|
|
160
|
-
BanksTransactionResultWithMeta
|
|
161
|
-
> = new Map();
|
|
162
|
-
private _clock?: Clock;
|
|
163
|
-
private get clock(): Clock {
|
|
164
|
-
if (!this._clock) {
|
|
165
|
-
throw new Error(
|
|
166
|
-
'BankrunConnection: clock accessed before updateSlotAndClock()'
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
return this._clock;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
private nextClientSubscriptionId = 0;
|
|
173
|
-
private onLogCallbacks = new Map<number, LogsCallback>();
|
|
174
|
-
private onAccountChangeCallbacks = new Map<
|
|
175
|
-
number,
|
|
176
|
-
[PublicKey, AccountChangeCallback]
|
|
177
|
-
>();
|
|
178
|
-
|
|
179
|
-
private verifySignatures: boolean;
|
|
180
|
-
|
|
181
|
-
constructor(
|
|
182
|
-
banksClient: BanksClient,
|
|
183
|
-
context: ProgramTestContext,
|
|
184
|
-
verifySignatures = true
|
|
185
|
-
) {
|
|
186
|
-
this._banksClient = banksClient;
|
|
187
|
-
this.context = context;
|
|
188
|
-
this.verifySignatures = verifySignatures;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
getSlot(): Promise<bigint> {
|
|
192
|
-
return this._banksClient.getSlot();
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
toConnection(): SolanaConnection {
|
|
196
|
-
return this as unknown as SolanaConnection;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
async getTokenAccount(publicKey: PublicKey): Promise<Account> {
|
|
200
|
-
const info = await this.getAccountInfo(publicKey);
|
|
201
|
-
if (info === null) {
|
|
202
|
-
throw new Error(`Account not found: ${publicKey.toBase58()}`);
|
|
203
|
-
}
|
|
204
|
-
return unpackAccount(publicKey, info, info.owner);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Mirrors the drift-vaults bankrun helper: returns the decoded SPL token
|
|
208
|
-
// Account (with .amount), not web3.js's { value: { amount } } shape. The
|
|
209
|
-
// vaults tests read `.amount` off the result directly.
|
|
210
|
-
async getTokenAccountBalance(
|
|
211
|
-
publicKey: PublicKey,
|
|
212
|
-
_commitment?: Commitment
|
|
213
|
-
): Promise<Account> {
|
|
214
|
-
return this.getTokenAccount(publicKey);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// SOL lamport balance, straight off the BanksClient. Returns a bigint like
|
|
218
|
-
// the drift-vaults bankrun helper (callers wrap with Number()).
|
|
219
|
-
async getBalance(publicKey: PublicKey): Promise<bigint> {
|
|
220
|
-
return this._banksClient.getBalance(publicKey);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
async getMultipleAccountsInfo(
|
|
224
|
-
publicKeys: PublicKey[],
|
|
225
|
-
_commitmentOrConfig?: Commitment
|
|
226
|
-
): Promise<(AccountInfo<Buffer> | null)[]> {
|
|
227
|
-
const accountInfos = [];
|
|
228
|
-
|
|
229
|
-
for (const publicKey of publicKeys) {
|
|
230
|
-
const accountInfo = await this.getAccountInfo(publicKey);
|
|
231
|
-
accountInfos.push(accountInfo);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
return accountInfos;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
async getAccountInfo(
|
|
238
|
-
publicKey: PublicKey
|
|
239
|
-
): Promise<null | AccountInfo<Buffer>> {
|
|
240
|
-
const parsedAccountInfo = await this.getParsedAccountInfo(publicKey);
|
|
241
|
-
return parsedAccountInfo ? parsedAccountInfo.value : null;
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
async getAccountInfoAndContext(
|
|
245
|
-
publicKey: PublicKey,
|
|
246
|
-
_commitment?: Commitment
|
|
247
|
-
): Promise<RpcResponseAndContext<null | AccountInfo<Buffer>>> {
|
|
248
|
-
return await this.getParsedAccountInfo(publicKey);
|
|
249
|
-
}
|
|
250
|
-
async sendRawTransaction(
|
|
251
|
-
rawTransaction: Buffer | Uint8Array | Array<number>,
|
|
252
|
-
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
253
|
-
_options?: any
|
|
254
|
-
): Promise<TransactionSignature> {
|
|
255
|
-
// Raw bytes may encode either a legacy or a versioned (v0) transaction.
|
|
256
|
-
// sendTransaction handles both, but they must be deserialized with the
|
|
257
|
-
// matching type: legacy parses with Transaction.from, versioned needs
|
|
258
|
-
// VersionedTransaction.deserialize. Versioned-tx clients (e.g. the vaults
|
|
259
|
-
// VaultClient) always send v0, so fall back when the legacy parse throws.
|
|
260
|
-
let tx: Transaction | VersionedTransaction;
|
|
261
|
-
try {
|
|
262
|
-
tx = Transaction.from(rawTransaction);
|
|
263
|
-
} catch (e) {
|
|
264
|
-
tx = VersionedTransaction.deserialize(rawTransaction as Uint8Array);
|
|
265
|
-
}
|
|
266
|
-
const signature = await this.sendTransaction(tx);
|
|
267
|
-
return signature;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
async sendTransaction(
|
|
271
|
-
tx: Transaction | VersionedTransaction
|
|
272
|
-
): Promise<TransactionSignature> {
|
|
273
|
-
const isVersioned = isVersionedTransaction(tx);
|
|
274
|
-
const serialized = isVersioned
|
|
275
|
-
? tx.serialize()
|
|
276
|
-
: tx.serialize({
|
|
277
|
-
verifySignatures: this.verifySignatures,
|
|
278
|
-
});
|
|
279
|
-
// @ts-ignore
|
|
280
|
-
const internal = this._banksClient.inner;
|
|
281
|
-
const inner = isVersioned
|
|
282
|
-
? await internal.tryProcessVersionedTransaction(serialized)
|
|
283
|
-
: await internal.tryProcessLegacyTransaction(serialized);
|
|
284
|
-
const banksTransactionMeta = new BanksTransactionResultWithMeta(inner);
|
|
285
|
-
|
|
286
|
-
let signature: string;
|
|
287
|
-
if (isVersioned) {
|
|
288
|
-
signature = bs58.encode((tx as VersionedTransaction).signatures[0]);
|
|
289
|
-
} else {
|
|
290
|
-
const legacySignature = (tx as Transaction).signatures[0].signature;
|
|
291
|
-
if (legacySignature === null) {
|
|
292
|
-
throw new Error(
|
|
293
|
-
'BankrunConnection: transaction is missing its first signature'
|
|
294
|
-
);
|
|
295
|
-
}
|
|
296
|
-
signature = bs58.encode(legacySignature);
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
if (banksTransactionMeta.result) {
|
|
300
|
-
if (
|
|
301
|
-
!banksTransactionMeta.result
|
|
302
|
-
.toString()
|
|
303
|
-
.includes('This transaction has already been processed')
|
|
304
|
-
) {
|
|
305
|
-
throw new Error(banksTransactionMeta.result);
|
|
306
|
-
} else {
|
|
307
|
-
console.log(
|
|
308
|
-
`Tx already processed (sig: ${signature}): ${JSON.stringify(
|
|
309
|
-
banksTransactionMeta
|
|
310
|
-
)}`,
|
|
311
|
-
banksTransactionMeta,
|
|
312
|
-
banksTransactionMeta.result
|
|
313
|
-
);
|
|
314
|
-
console.log(tx);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
if (!this.transactionToMeta.has(signature)) {
|
|
318
|
-
this.transactionToMeta.set(signature, banksTransactionMeta);
|
|
319
|
-
}
|
|
320
|
-
let finalizedCount = 0;
|
|
321
|
-
while (finalizedCount < 10) {
|
|
322
|
-
const statusValue = (await this.getSignatureStatus(signature)).value;
|
|
323
|
-
if (statusValue === null) {
|
|
324
|
-
throw new Error(
|
|
325
|
-
`BankrunConnection: no signature status for ${signature}`
|
|
326
|
-
);
|
|
327
|
-
}
|
|
328
|
-
const signatureStatus = statusValue.confirmationStatus;
|
|
329
|
-
if (signatureStatus?.toString() == '"finalized"') {
|
|
330
|
-
finalizedCount += 1;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
// update the clock slot/timestamp
|
|
335
|
-
// sometimes race condition causes failures so we retry
|
|
336
|
-
try {
|
|
337
|
-
await this.updateSlotAndClock();
|
|
338
|
-
} catch (e) {
|
|
339
|
-
await this.updateSlotAndClock();
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
if (this.onLogCallbacks.size > 0) {
|
|
343
|
-
const transaction = await this.getTransaction(signature);
|
|
344
|
-
|
|
345
|
-
if (transaction !== null) {
|
|
346
|
-
const context = { slot: transaction.slot };
|
|
347
|
-
const logs = {
|
|
348
|
-
logs: transaction.meta.logMessages,
|
|
349
|
-
err: transaction.meta.err,
|
|
350
|
-
signature,
|
|
351
|
-
};
|
|
352
|
-
for (const logCallback of this.onLogCallbacks.values()) {
|
|
353
|
-
logCallback(logs, context);
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
for (const [
|
|
359
|
-
publicKey,
|
|
360
|
-
callback,
|
|
361
|
-
] of this.onAccountChangeCallbacks.values()) {
|
|
362
|
-
const accountInfo = await this.getParsedAccountInfo(publicKey);
|
|
363
|
-
if (accountInfo.value === null) {
|
|
364
|
-
continue;
|
|
365
|
-
}
|
|
366
|
-
callback(accountInfo.value, accountInfo.context);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
return signature;
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
async updateSlotAndClock() {
|
|
373
|
-
const currentSlot = await this.getSlot();
|
|
374
|
-
const nextSlot = currentSlot + BigInt(1);
|
|
375
|
-
this.context.warpToSlot(nextSlot);
|
|
376
|
-
const currentClock = await this._banksClient.getClock();
|
|
377
|
-
const newClock = new Clock(
|
|
378
|
-
nextSlot,
|
|
379
|
-
currentClock.epochStartTimestamp,
|
|
380
|
-
currentClock.epoch,
|
|
381
|
-
currentClock.leaderScheduleEpoch,
|
|
382
|
-
currentClock.unixTimestamp + BigInt(1)
|
|
383
|
-
);
|
|
384
|
-
this.context.setClock(newClock);
|
|
385
|
-
this._clock = newClock;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
getTime(): number {
|
|
389
|
-
return Number(this.clock.unixTimestamp);
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
async getParsedAccountInfo(
|
|
393
|
-
publicKey: PublicKey
|
|
394
|
-
): Promise<RpcResponseAndContext<null | AccountInfo<Buffer>>> {
|
|
395
|
-
const accountInfoBytes = await this._banksClient.getAccount(publicKey);
|
|
396
|
-
if (accountInfoBytes === null) {
|
|
397
|
-
return {
|
|
398
|
-
context: { slot: Number(await this._banksClient.getSlot()) },
|
|
399
|
-
value: null,
|
|
400
|
-
};
|
|
401
|
-
}
|
|
402
|
-
accountInfoBytes.data = Buffer.from(accountInfoBytes.data);
|
|
403
|
-
const accountInfoBuffer = accountInfoBytes as AccountInfo<Buffer>;
|
|
404
|
-
return {
|
|
405
|
-
context: { slot: Number(await this._banksClient.getSlot()) },
|
|
406
|
-
value: accountInfoBuffer,
|
|
407
|
-
};
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
async getLatestBlockhash(commitment?: Commitment): Promise<
|
|
411
|
-
Readonly<{
|
|
412
|
-
blockhash: string;
|
|
413
|
-
lastValidBlockHeight: number;
|
|
414
|
-
}>
|
|
415
|
-
> {
|
|
416
|
-
const blockhashAndBlockheight = await this._banksClient.getLatestBlockhash(
|
|
417
|
-
commitment
|
|
418
|
-
);
|
|
419
|
-
if (blockhashAndBlockheight === null) {
|
|
420
|
-
throw new Error('Failed to get latest blockhash');
|
|
421
|
-
}
|
|
422
|
-
return {
|
|
423
|
-
blockhash: blockhashAndBlockheight[0],
|
|
424
|
-
lastValidBlockHeight: Number(blockhashAndBlockheight[1]),
|
|
425
|
-
};
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
async getAddressLookupTable(
|
|
429
|
-
accountKey: PublicKey
|
|
430
|
-
): Promise<RpcResponseAndContext<null | AddressLookupTableAccount>> {
|
|
431
|
-
const { context, value: accountInfo } = await this.getParsedAccountInfo(
|
|
432
|
-
accountKey
|
|
433
|
-
);
|
|
434
|
-
let value = null;
|
|
435
|
-
if (accountInfo !== null) {
|
|
436
|
-
value = new AddressLookupTableAccount({
|
|
437
|
-
key: accountKey,
|
|
438
|
-
state: AddressLookupTableAccount.deserialize(accountInfo.data),
|
|
439
|
-
});
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
return {
|
|
443
|
-
context,
|
|
444
|
-
value,
|
|
445
|
-
};
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
async getSignatureStatus(
|
|
449
|
-
signature: string,
|
|
450
|
-
_config?: SignatureStatusConfig
|
|
451
|
-
): Promise<RpcResponseAndContext<null | SignatureStatus>> {
|
|
452
|
-
const transactionStatus = await this._banksClient.getTransactionStatus(
|
|
453
|
-
signature
|
|
454
|
-
);
|
|
455
|
-
if (transactionStatus === null) {
|
|
456
|
-
return {
|
|
457
|
-
context: { slot: Number(await this._banksClient.getSlot()) },
|
|
458
|
-
value: null,
|
|
459
|
-
};
|
|
460
|
-
}
|
|
461
|
-
return {
|
|
462
|
-
context: { slot: Number(await this._banksClient.getSlot()) },
|
|
463
|
-
value: {
|
|
464
|
-
slot: Number(transactionStatus.slot),
|
|
465
|
-
confirmations: Number(transactionStatus.confirmations),
|
|
466
|
-
err: transactionStatus.err,
|
|
467
|
-
confirmationStatus:
|
|
468
|
-
transactionStatus.confirmationStatus as TransactionConfirmationStatus,
|
|
469
|
-
},
|
|
470
|
-
};
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
/**
|
|
474
|
-
* There's really no direct equivalent to getTransaction exposed by SolanaProgramTest, so we do the best that we can here - it's a little hacky.
|
|
475
|
-
*/
|
|
476
|
-
async getTransaction(
|
|
477
|
-
signature: string,
|
|
478
|
-
_rawConfig?: GetTransactionConfig | GetVersionedTransactionConfig
|
|
479
|
-
): Promise<BankrunTransactionRespose | null> {
|
|
480
|
-
const txMeta = this.transactionToMeta.get(
|
|
481
|
-
signature as TransactionSignature
|
|
482
|
-
);
|
|
483
|
-
if (txMeta === undefined) {
|
|
484
|
-
return null;
|
|
485
|
-
}
|
|
486
|
-
const transactionStatus = await this._banksClient.getTransactionStatus(
|
|
487
|
-
signature
|
|
488
|
-
);
|
|
489
|
-
if (transactionStatus === null) {
|
|
490
|
-
throw new Error(`tx has no status: ${signature}`);
|
|
491
|
-
}
|
|
492
|
-
if (txMeta.meta === null) {
|
|
493
|
-
throw new Error(`tx has no meta: ${JSON.stringify(txMeta)}`);
|
|
494
|
-
}
|
|
495
|
-
const meta: BankrunTransactionMetaNormalized = {
|
|
496
|
-
logMessages: txMeta.meta.logMessages,
|
|
497
|
-
err: txMeta.result,
|
|
498
|
-
};
|
|
499
|
-
return {
|
|
500
|
-
slot: Number(transactionStatus.slot),
|
|
501
|
-
meta,
|
|
502
|
-
};
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
private getTransactionMetaOrThrow(
|
|
506
|
-
signature: string
|
|
507
|
-
): NonNullable<BanksTransactionResultWithMeta['meta']> {
|
|
508
|
-
const txMeta = this.transactionToMeta.get(
|
|
509
|
-
signature as TransactionSignature
|
|
510
|
-
);
|
|
511
|
-
if (txMeta === undefined) {
|
|
512
|
-
throw new Error('Transaction not found');
|
|
513
|
-
}
|
|
514
|
-
if (txMeta.meta === null) {
|
|
515
|
-
throw new Error(`tx has no meta: ${JSON.stringify(txMeta)}`);
|
|
516
|
-
}
|
|
517
|
-
return txMeta.meta;
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
findComputeUnitConsumption(signature: string): bigint {
|
|
521
|
-
return this.getTransactionMetaOrThrow(signature).computeUnitsConsumed;
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
printTxLogs(signature: string): void {
|
|
525
|
-
console.log(this.getTransactionMetaOrThrow(signature).logMessages);
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
async simulateTransaction(
|
|
529
|
-
transaction: Transaction | VersionedTransaction,
|
|
530
|
-
_config?: SimulateTransactionConfig
|
|
531
|
-
): Promise<RpcResponseAndContext<SimulatedTransactionResponse>> {
|
|
532
|
-
const simulationResult = await this._banksClient.simulateTransaction(
|
|
533
|
-
transaction
|
|
534
|
-
);
|
|
535
|
-
const meta = simulationResult.meta;
|
|
536
|
-
if (meta === null) {
|
|
537
|
-
throw new Error('BankrunConnection: simulation returned no meta');
|
|
538
|
-
}
|
|
539
|
-
let returnData: TransactionReturnData | undefined;
|
|
540
|
-
if (meta.returnData !== null) {
|
|
541
|
-
const returnDataNormalized = Buffer.from(meta.returnData.data).toString(
|
|
542
|
-
'base64'
|
|
543
|
-
);
|
|
544
|
-
returnData = {
|
|
545
|
-
programId: meta.returnData.programId.toBase58(),
|
|
546
|
-
data: [returnDataNormalized, 'base64'],
|
|
547
|
-
};
|
|
548
|
-
}
|
|
549
|
-
return {
|
|
550
|
-
context: { slot: Number(await this._banksClient.getSlot()) },
|
|
551
|
-
value: {
|
|
552
|
-
err: simulationResult.result,
|
|
553
|
-
logs: meta.logMessages,
|
|
554
|
-
accounts: undefined,
|
|
555
|
-
unitsConsumed: Number(meta.computeUnitsConsumed),
|
|
556
|
-
returnData,
|
|
557
|
-
},
|
|
558
|
-
};
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
onSignature(
|
|
562
|
-
signature: string,
|
|
563
|
-
callback: SignatureResultCallback,
|
|
564
|
-
commitment?: Commitment
|
|
565
|
-
): ClientSubscriptionId {
|
|
566
|
-
const txMeta = this.transactionToMeta.get(
|
|
567
|
-
signature as TransactionSignature
|
|
568
|
-
);
|
|
569
|
-
this._banksClient.getSlot(commitment).then((slot) => {
|
|
570
|
-
if (txMeta) {
|
|
571
|
-
callback({ err: txMeta.result }, { slot: Number(slot) });
|
|
572
|
-
}
|
|
573
|
-
});
|
|
574
|
-
return 0;
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
async removeSignatureListener(_clientSubscriptionId: number): Promise<void> {
|
|
578
|
-
// Nothing actually has to happen here! Pretty cool, huh?
|
|
579
|
-
// This function signature only exists to match the web3js interface
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
onLogs(
|
|
583
|
-
filter: LogsFilter,
|
|
584
|
-
callback: LogsCallback,
|
|
585
|
-
_commitment?: Commitment
|
|
586
|
-
): ClientSubscriptionId {
|
|
587
|
-
const subscriptId = this.nextClientSubscriptionId;
|
|
588
|
-
|
|
589
|
-
this.onLogCallbacks.set(subscriptId, callback);
|
|
590
|
-
|
|
591
|
-
this.nextClientSubscriptionId += 1;
|
|
592
|
-
|
|
593
|
-
return subscriptId;
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
async removeOnLogsListener(
|
|
597
|
-
clientSubscriptionId: ClientSubscriptionId
|
|
598
|
-
): Promise<void> {
|
|
599
|
-
this.onLogCallbacks.delete(clientSubscriptionId);
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
onAccountChange(
|
|
603
|
-
publicKey: PublicKey,
|
|
604
|
-
callback: AccountChangeCallback,
|
|
605
|
-
// @ts-ignore
|
|
606
|
-
_commitment?: Commitment
|
|
607
|
-
): ClientSubscriptionId {
|
|
608
|
-
const subscriptId = this.nextClientSubscriptionId;
|
|
609
|
-
|
|
610
|
-
this.onAccountChangeCallbacks.set(subscriptId, [publicKey, callback]);
|
|
611
|
-
|
|
612
|
-
this.nextClientSubscriptionId += 1;
|
|
613
|
-
|
|
614
|
-
return subscriptId;
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
async removeAccountChangeListener(
|
|
618
|
-
clientSubscriptionId: ClientSubscriptionId
|
|
619
|
-
): Promise<void> {
|
|
620
|
-
this.onAccountChangeCallbacks.delete(clientSubscriptionId);
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
async getMinimumBalanceForRentExemption(_: number): Promise<number> {
|
|
624
|
-
return 10 * LAMPORTS_PER_SOL;
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
export function asBN(value: number | bigint): BN {
|
|
629
|
-
return new BN(Number(value));
|
|
630
|
-
}
|