2
2
Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
3
3
exports . depositStake = void 0 ;
4
4
const web3_js_1 = require ( "@solana/web3.js" ) ;
5
- const spl_stake_pool_1 = require ( "@solana/spl-stake-pool" ) ;
6
5
const generated_1 = require ( "./generated" ) ;
7
6
const spl_token_1 = require ( "@solana/spl-token" ) ;
7
+ const borsh_1 = require ( "@coral-xyz/borsh" ) ;
8
+ /**
9
+ * Copied from @solana/spl-stake-pool for compatibility reasons.
10
+ * Source: https://github.com/solana-labs/solana-program-library/blob/b7dd8fee/stake-pool/js/src/index.ts
11
+ */
12
+ const STAKE_POOL_PROGRAM_ID = new web3_js_1 . PublicKey ( "SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy" ) ;
13
+ const StakePoolLayout = ( 0 , borsh_1 . struct ) ( [
14
+ ( 0 , borsh_1 . u8 ) ( 'accountType' ) ,
15
+ ( 0 , borsh_1 . publicKey ) ( 'manager' ) ,
16
+ ( 0 , borsh_1 . publicKey ) ( 'staker' ) ,
17
+ ( 0 , borsh_1 . publicKey ) ( 'stakeDepositAuthority' ) ,
18
+ ( 0 , borsh_1 . u8 ) ( 'stakeWithdrawBumpSeed' ) ,
19
+ ( 0 , borsh_1 . publicKey ) ( 'validatorList' ) ,
20
+ ( 0 , borsh_1 . publicKey ) ( 'reserveStake' ) ,
21
+ ( 0 , borsh_1 . publicKey ) ( 'poolMint' ) ,
22
+ ( 0 , borsh_1 . publicKey ) ( 'managerFeeAccount' ) ,
23
+ ( 0 , borsh_1 . publicKey ) ( 'tokenProgramId' ) ,
24
+ ( 0 , borsh_1 . u64 ) ( 'totalLamports' ) ,
25
+ ( 0 , borsh_1 . u64 ) ( 'poolTokenSupply' ) ,
26
+ ( 0 , borsh_1 . u64 ) ( 'lastUpdateEpoch' ) ,
27
+ ] ) ;
28
+ const getStakePoolAccount = async ( connection , stakePoolAddress ) => {
29
+ const account = await connection . getAccountInfo ( stakePoolAddress ) ;
30
+ if ( ! account )
31
+ throw new Error ( "Stake pool account not found" ) ;
32
+ const data = StakePoolLayout . decode ( account . data ) ;
33
+ return {
34
+ pubkey : stakePoolAddress ,
35
+ account : {
36
+ data
37
+ }
38
+ } ;
39
+ } ;
8
40
/**
9
41
* Creates instructions required to deposit stake to stake pool via
10
42
* Stake Deposit Interceptor.
@@ -16,12 +48,13 @@ const spl_token_1 = require("@solana/spl-token");
16
48
* @param validatorVote
17
49
* @param depositStake
18
50
* @param poolTokenReceiverAccount
51
+ * @param remainingAccounts - optional additional accounts to append to the instruction
19
52
*/
20
- const depositStake = async ( connection , payer , stakePoolAddress , authorizedPubkey , validatorVote , depositStake , poolTokenReceiverAccount ) => {
21
- const stakePool = await ( 0 , spl_stake_pool_1 . getStakePoolAccount ) ( connection , stakePoolAddress ) ;
53
+ const depositStake = async ( connection , payer , stakePoolAddress , authorizedPubkey , validatorVote , depositStake , poolTokenReceiverAccount , remainingAccounts ) => {
54
+ const stakePool = await getStakePoolAccount ( connection , stakePoolAddress ) ;
22
55
const stakePoolDepositAuthority = await generated_1 . StakePoolDepositStakeAuthority . fromAccountAddress ( connection , stakePool . account . data . stakeDepositAuthority ) ;
23
- const withdrawAuthority = await findWithdrawAuthorityProgramAddress ( spl_stake_pool_1 . STAKE_POOL_PROGRAM_ID , stakePoolAddress ) ;
24
- const validatorStake = await findStakeProgramAddress ( spl_stake_pool_1 . STAKE_POOL_PROGRAM_ID , validatorVote , stakePoolAddress ) ;
56
+ const withdrawAuthority = await findWithdrawAuthorityProgramAddress ( STAKE_POOL_PROGRAM_ID , stakePoolAddress ) ;
57
+ const validatorStake = await findStakeProgramAddress ( STAKE_POOL_PROGRAM_ID , validatorVote , stakePoolAddress ) ;
25
58
const instructions = [ ] ;
26
59
const signers = [ ] ;
27
60
const base = web3_js_1 . Keypair . generate ( ) ;
@@ -58,7 +91,7 @@ const depositStake = async (connection, payer, stakePoolAddress, authorizedPubke
58
91
} ;
59
92
const depositStakeIxAccounts = {
60
93
payer,
61
- stakePoolProgram : spl_stake_pool_1 . STAKE_POOL_PROGRAM_ID ,
94
+ stakePoolProgram : STAKE_POOL_PROGRAM_ID ,
62
95
depositReceipt : depositReceiptAddress ,
63
96
stakePool : stakePoolAddress ,
64
97
validatorStakeList : stakePool . account . data . validatorList ,
@@ -79,6 +112,10 @@ const depositStake = async (connection, payer, stakePoolAddress, authorizedPubke
79
112
systemProgram : web3_js_1 . SystemProgram . programId ,
80
113
} ;
81
114
const depositStakeIx = ( 0 , generated_1 . createDepositStakeInstruction ) ( depositStakeIxAccounts , depositStakeIxArgs ) ;
115
+ // Add any remaining accounts to the instruction
116
+ if ( remainingAccounts ?. length ) {
117
+ depositStakeIx . keys . push ( ...remainingAccounts ) ;
118
+ }
82
119
instructions . push ( depositStakeIx ) ;
83
120
return {
84
121
instructions,
0 commit comments