Skip to content

Commit 3487704

Browse files
committed
feat(sdk-coin-sol): use sol intent staking type from public types
BREAKING CHANGE: txBuilder.stakingType now uses SolStakingTypeEnum from public-types instead of StakingType from BitGoJS. Ticket: SC-2789
1 parent dcb75c5 commit 3487704

File tree

11 files changed

+89
-86
lines changed

11 files changed

+89
-86
lines changed

modules/sdk-coin-sol/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
]
4141
},
4242
"dependencies": {
43+
"@bitgo/public-types": "5.18.0",
4344
"@bitgo/sdk-core": "^36.3.0",
4445
"@bitgo/sdk-lib-mpc": "^10.6.0",
4546
"@bitgo/statics": "^57.3.0",

modules/sdk-coin-sol/src/lib/iface.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { SolStakingTypeEnum } from '@bitgo/public-types';
12
import { TransactionExplanation as BaseTransactionExplanation, Recipient, SolInstruction } from '@bitgo/sdk-core';
23
import { DecodedCloseAccountInstruction } from '@solana/spl-token';
34
import { Blockhash, StakeInstructionType, SystemInstructionType, TransactionSignature } from '@solana/web3.js';
@@ -120,12 +121,6 @@ export interface Approve {
120121
};
121122
}
122123

123-
export enum StakingType {
124-
NATIVE = 'NATIVE',
125-
MARINADE = 'MARINADE',
126-
JITO = 'JITO',
127-
}
128-
129124
export interface JitoStakingActivateParams {
130125
stakePoolData: DepositSolStakePoolData;
131126
}
@@ -139,7 +134,7 @@ export interface StakingActivate {
139134
stakingAddress: string;
140135
amount: string;
141136
validator: string;
142-
stakingType: StakingType;
137+
stakingType: SolStakingTypeEnum;
143138
extraParams?: StakingActivateExtraParams;
144139
};
145140
}
@@ -164,7 +159,7 @@ export interface StakingDeactivate {
164159
stakingAddress: string;
165160
amount?: string;
166161
unstakingAddress?: string;
167-
stakingType: StakingType;
162+
stakingType: SolStakingTypeEnum;
168163
extraParams?: StakingDeactivateExtraParams;
169164
recipients?: Recipient[];
170165
};

modules/sdk-coin-sol/src/lib/instructionParamsFactory.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
ComputeBudgetInstruction,
2525
} from '@solana/web3.js';
2626

27+
import { SolStakingTypeEnum } from '@bitgo/public-types';
2728
import { NotSupported, TransactionType } from '@bitgo/sdk-core';
2829
import { coins, SolCoin } from '@bitgo/statics';
2930
import assert from 'assert';
@@ -47,7 +48,6 @@ import {
4748
SetPriorityFee,
4849
CustomInstruction,
4950
Approve,
50-
StakingType,
5151
} from './iface';
5252
import { getInstructionType } from './utils';
5353
import { DepositSolParams, WithdrawStakeParams } from '@solana/spl-stake-pool';
@@ -359,14 +359,14 @@ function isNativeStakingInstructions(si: StakingInstructions): si is NativeStaki
359359
return si.create !== undefined && si.initialize !== undefined && si.delegate !== undefined;
360360
}
361361

362-
function getStakingTypeFromStakingInstructions(si: StakingInstructions): StakingType {
362+
function getStakingTypeFromStakingInstructions(si: StakingInstructions): SolStakingTypeEnum {
363363
const isJito = isJitoStakingInstructions(si);
364364
const isMarinade = isMarinadeStakingInstructions(si);
365365
const isNative = isNativeStakingInstructions(si);
366366
assert([isJito, isMarinade, isNative].filter((x) => x).length === 1, 'StakingType is ambiguous');
367-
if (isJito) return StakingType.JITO;
368-
if (isMarinade) return StakingType.MARINADE;
369-
if (isNative) return StakingType.NATIVE;
367+
if (isJito) return SolStakingTypeEnum.JITO;
368+
if (isMarinade) return SolStakingTypeEnum.MARINADE;
369+
if (isNative) return SolStakingTypeEnum.NATIVE;
370370
assert(false, 'No StakingType found');
371371
}
372372

@@ -439,7 +439,7 @@ function parseStakingActivateInstructions(
439439
let stakingActivate: StakingActivate | undefined;
440440

441441
switch (stakingType) {
442-
case StakingType.JITO: {
442+
case SolStakingTypeEnum.JITO: {
443443
assert(isJitoStakingInstructions(stakingInstructions));
444444
const { depositSol } = stakingInstructions;
445445
stakingActivate = {
@@ -462,7 +462,7 @@ function parseStakingActivateInstructions(
462462
break;
463463
}
464464

465-
case StakingType.MARINADE: {
465+
case SolStakingTypeEnum.MARINADE: {
466466
assert(isMarinadeStakingInstructions(stakingInstructions));
467467
const { create, initialize } = stakingInstructions;
468468
stakingActivate = {
@@ -478,7 +478,7 @@ function parseStakingActivateInstructions(
478478
break;
479479
}
480480

481-
case StakingType.NATIVE: {
481+
case SolStakingTypeEnum.NATIVE: {
482482
assert(isNativeStakingInstructions(stakingInstructions));
483483
const { create, initialize, delegate } = stakingInstructions;
484484
stakingActivate = {
@@ -595,14 +595,14 @@ function isNativeUnstakingInstructions(ui: UnstakingInstructions): ui is NativeU
595595
return ui.deactivate !== undefined;
596596
}
597597

598-
function getStakingTypeFromUnstakingInstructions(ui: UnstakingInstructions): StakingType {
598+
function getStakingTypeFromUnstakingInstructions(ui: UnstakingInstructions): SolStakingTypeEnum {
599599
const isJito = isJitoUnstakingInstructions(ui);
600600
const isMarinade = isMarinadeUnstakingInstructions(ui);
601601
const isNative = isNativeUnstakingInstructions(ui);
602602
assert([isJito, isMarinade, isNative].filter((x) => x).length === 1, 'StakingType is ambiguous');
603-
if (isJito) return StakingType.JITO;
604-
if (isMarinade) return StakingType.MARINADE;
605-
if (isNative) return StakingType.NATIVE;
603+
if (isJito) return SolStakingTypeEnum.JITO;
604+
if (isMarinade) return SolStakingTypeEnum.MARINADE;
605+
if (isNative) return SolStakingTypeEnum.NATIVE;
606606
assert(false, 'No StakingType found');
607607
}
608608

@@ -739,7 +739,7 @@ function parseStakingDeactivateInstructions(
739739
let stakingDeactivate: StakingDeactivate | undefined;
740740

741741
switch (stakingType) {
742-
case StakingType.JITO: {
742+
case SolStakingTypeEnum.JITO: {
743743
assert(isJitoUnstakingInstructions(unstakingInstruction));
744744
const { withdrawStake } = unstakingInstruction;
745745
stakingDeactivate = {
@@ -764,7 +764,7 @@ function parseStakingDeactivateInstructions(
764764
break;
765765
}
766766

767-
case StakingType.MARINADE: {
767+
case SolStakingTypeEnum.MARINADE: {
768768
assert(isMarinadeUnstakingInstructions(unstakingInstruction));
769769
const { transfer } = unstakingInstruction;
770770

@@ -785,7 +785,7 @@ function parseStakingDeactivateInstructions(
785785
break;
786786
}
787787

788-
case StakingType.NATIVE: {
788+
case SolStakingTypeEnum.NATIVE: {
789789
assert(isNativeUnstakingInstructions(unstakingInstruction));
790790
const { deactivate, split } = unstakingInstruction;
791791
stakingDeactivate = {

modules/sdk-coin-sol/src/lib/solInstructionFactory.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { SolStakingTypeEnum } from '@bitgo/public-types';
12
import { SolCoin } from '@bitgo/statics';
23
import {
34
createAssociatedTokenAccountInstruction,
@@ -41,7 +42,6 @@ import {
4142
SetPriorityFee,
4243
CustomInstruction,
4344
Approve,
44-
StakingType,
4545
} from './iface';
4646
import { getSolTokenFromTokenName, isValidBase64, isValidHex } from './utils';
4747
import { depositSolInstructions, withdrawStakeInstructions } from './jitoStakePoolOperations';
@@ -288,7 +288,7 @@ function stakingInitializeInstruction(data: StakingActivate): TransactionInstruc
288288
const tx = new Transaction();
289289

290290
switch (stakingType) {
291-
case StakingType.JITO: {
291+
case SolStakingTypeEnum.JITO: {
292292
assert(extraParams !== undefined, 'Missing extraParams param');
293293
const instructions = depositSolInstructions(
294294
{
@@ -302,7 +302,7 @@ function stakingInitializeInstruction(data: StakingActivate): TransactionInstruc
302302
break;
303303
}
304304

305-
case StakingType.MARINADE: {
305+
case SolStakingTypeEnum.MARINADE: {
306306
const walletInitStaking = StakeProgram.createAccount({
307307
fromPubkey,
308308
stakePubkey,
@@ -314,7 +314,7 @@ function stakingInitializeInstruction(data: StakingActivate): TransactionInstruc
314314
break;
315315
}
316316

317-
case StakingType.NATIVE: {
317+
case SolStakingTypeEnum.NATIVE: {
318318
const walletInitStaking = StakeProgram.createAccount({
319319
fromPubkey,
320320
stakePubkey,
@@ -355,7 +355,7 @@ function stakingDeactivateInstruction(data: StakingDeactivate): TransactionInstr
355355
assert(fromAddress, 'Missing fromAddress param');
356356

357357
switch (stakingType) {
358-
case StakingType.JITO: {
358+
case SolStakingTypeEnum.JITO: {
359359
assert(stakingAddress, 'Missing stakingAddress param');
360360
assert(unstakingAddress, 'Missing unstakingAddress param');
361361
assert(amount, 'Missing amount param');
@@ -378,7 +378,7 @@ function stakingDeactivateInstruction(data: StakingDeactivate): TransactionInstr
378378
return tx.instructions;
379379
}
380380

381-
case StakingType.MARINADE: {
381+
case SolStakingTypeEnum.MARINADE: {
382382
assert(recipients, 'Missing recipients param');
383383

384384
const tx = new Transaction();
@@ -393,7 +393,7 @@ function stakingDeactivateInstruction(data: StakingDeactivate): TransactionInstr
393393
return tx.instructions;
394394
}
395395

396-
case StakingType.NATIVE: {
396+
case SolStakingTypeEnum.NATIVE: {
397397
assert(stakingAddress, 'Missing stakingAddress param');
398398

399399
if (data.params.amount && data.params.unstakingAddress) {

modules/sdk-coin-sol/src/lib/stakingActivateBuilder.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1+
import { SolStakingTypeEnum } from '@bitgo/public-types';
12
import { BaseCoin as CoinConfig } from '@bitgo/statics';
23
import { BuildTransactionError, TransactionType } from '@bitgo/sdk-core';
34
import { Transaction } from './transaction';
45
import { TransactionBuilder } from './transactionBuilder';
56
import { InstructionBuilderTypes } from './constants';
67

78
import assert from 'assert';
8-
import { StakingActivate, StakingActivateExtraParams, StakingType } from './iface';
9+
import { StakingActivate, StakingActivateExtraParams } from './iface';
910
import { isValidStakingAmount, validateAddress } from './utils';
1011

1112
export class StakingActivateBuilder extends TransactionBuilder {
1213
protected _amount: string;
1314
protected _stakingAddress: string;
1415
protected _validator: string;
15-
protected _stakingType: StakingType = StakingType.NATIVE;
16+
protected _stakingType: SolStakingTypeEnum = SolStakingTypeEnum.NATIVE;
1617
protected _extraParams?: StakingActivateExtraParams;
1718

1819
constructor(_coinConfig: Readonly<CoinConfig>) {
@@ -84,10 +85,10 @@ export class StakingActivateBuilder extends TransactionBuilder {
8485
/**
8586
* Set staking type.
8687
*
87-
* @param {StakingType} stakingType a staking type.
88+
* @param {SolStakingType} stakingType a staking type.
8889
* @returns {StakingActivateBuilder} This staking builder.
8990
*/
90-
stakingType(stakingType: StakingType): this {
91+
stakingType(stakingType: SolStakingTypeEnum): this {
9192
this._stakingType = stakingType;
9293
return this;
9394
}

modules/sdk-coin-sol/src/lib/stakingDeactivateBuilder.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
import { SolStakingTypeEnum } from '@bitgo/public-types';
12
import { BaseCoin as CoinConfig } from '@bitgo/statics';
23
import assert from 'assert';
34

45
import { BuildTransactionError, Recipient, TransactionType } from '@bitgo/sdk-core';
56
import { InstructionBuilderTypes, STAKE_ACCOUNT_RENT_EXEMPT_AMOUNT } from './constants';
6-
import { StakingDeactivate, StakingDeactivateExtraParams, StakingType, Transfer } from './iface';
7+
import { StakingDeactivate, StakingDeactivateExtraParams, Transfer } from './iface';
78
import { Transaction } from './transaction';
89
import { TransactionBuilder } from './transactionBuilder';
910
import { isValidStakingAmount, validateAddress } from './utils';
@@ -14,7 +15,7 @@ export class StakingDeactivateBuilder extends TransactionBuilder {
1415
protected _amount?: string;
1516
protected _unstakingAddress: string;
1617
protected _recipients: Recipient[];
17-
protected _stakingType: StakingType = StakingType.NATIVE;
18+
protected _stakingType: SolStakingTypeEnum = SolStakingTypeEnum.NATIVE;
1819
protected _extraParams?: StakingDeactivateExtraParams;
1920

2021
constructor(_coinConfig: Readonly<CoinConfig>) {
@@ -36,7 +37,7 @@ export class StakingDeactivateBuilder extends TransactionBuilder {
3637
stakingAddresses.push(deactivateInstruction.params.stakingAddress);
3738

3839
// Marinade staking also cares about sender.
39-
if (deactivateInstruction.params.stakingType !== StakingType.MARINADE) {
40+
if (deactivateInstruction.params.stakingType !== SolStakingTypeEnum.MARINADE) {
4041
this.sender(deactivateInstruction.params.fromAddress);
4142
}
4243

@@ -61,7 +62,7 @@ export class StakingDeactivateBuilder extends TransactionBuilder {
6162
if (stakingAddresses.length > 1) {
6263
this.stakingAddresses(stakingAddresses);
6364
} else {
64-
if (this._stakingType !== StakingType.MARINADE) {
65+
if (this._stakingType !== SolStakingTypeEnum.MARINADE) {
6566
this.stakingAddress(stakingAddresses[0]);
6667
}
6768
}
@@ -143,10 +144,10 @@ export class StakingDeactivateBuilder extends TransactionBuilder {
143144
/**
144145
* Set staking type.
145146
*
146-
* @param {StakingType} stakingType a staking type.
147+
* @param {SolStakingType} stakingType a staking type.
147148
* @returns {StakingDeactivateBuilder} This staking builder.
148149
*/
149-
stakingType(stakingType: StakingType): this {
150+
stakingType(stakingType: SolStakingTypeEnum): this {
150151
this._stakingType = stakingType;
151152
return this;
152153
}
@@ -174,13 +175,13 @@ export class StakingDeactivateBuilder extends TransactionBuilder {
174175
params: {
175176
fromAddress: this._sender,
176177
stakingAddress: stakingAddress,
177-
stakingType: StakingType.NATIVE,
178+
stakingType: SolStakingTypeEnum.NATIVE,
178179
},
179180
};
180181
this._instructionsData.push(stakingDeactivateData);
181182
}
182183
} else {
183-
if (this._stakingType === StakingType.NATIVE) {
184+
if (this._stakingType === SolStakingTypeEnum.NATIVE) {
184185
// we don't need stakingAddress in marinade staking deactivate txn
185186
assert(this._stakingAddress, 'Staking address must be set before building the transaction');
186187
}
@@ -189,15 +190,15 @@ export class StakingDeactivateBuilder extends TransactionBuilder {
189190
throw new BuildTransactionError('Sender address cannot be the same as the Staking address');
190191
}
191192

192-
if (this._stakingType === StakingType.NATIVE && this._amount) {
193+
if (this._stakingType === SolStakingTypeEnum.NATIVE && this._amount) {
193194
assert(
194195
this._unstakingAddress,
195196
'When partially unstaking the unstaking address must be set before building the transaction'
196197
);
197198
}
198199

199200
this._instructionsData = [];
200-
if (this._stakingType === StakingType.NATIVE && this._unstakingAddress) {
201+
if (this._stakingType === SolStakingTypeEnum.NATIVE && this._unstakingAddress) {
201202
assert(
202203
this._amount,
203204
'If an unstaking address is given then a partial amount to unstake must also be set before building the transaction'

0 commit comments

Comments
 (0)