Skip to content

Commit 1d1507a

Browse files
Merge pull request #5934 from BitGo/SC-1534
feat(sdk-coin-sol): add support for marinade staking
2 parents 63603b3 + 9def25e commit 1d1507a

File tree

7 files changed

+232
-24
lines changed

7 files changed

+232
-24
lines changed

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,13 @@ export interface TokenTransfer {
7777

7878
export interface StakingActivate {
7979
type: InstructionBuilderTypes.StakingActivate;
80-
params: { fromAddress: string; stakingAddress: string; amount: string; validator: string };
80+
params: {
81+
fromAddress: string;
82+
stakingAddress: string;
83+
amount: string;
84+
validator: string;
85+
isMarinade?: boolean;
86+
};
8187
}
8288

8389
export interface StakingDelegate {
@@ -87,7 +93,12 @@ export interface StakingDelegate {
8793

8894
export interface StakingDeactivate {
8995
type: InstructionBuilderTypes.StakingDeactivate;
90-
params: { fromAddress: string; stakingAddress: string; amount?: string; unstakingAddress?: string };
96+
params: {
97+
fromAddress: string;
98+
stakingAddress: string;
99+
amount?: string;
100+
unstakingAddress?: string;
101+
};
91102
}
92103

93104
export interface StakingWithdraw {

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -325,10 +325,17 @@ interface StakingInstructions {
325325
function validateStakingInstructions(stakingInstructions: StakingInstructions) {
326326
if (!stakingInstructions.create) {
327327
throw new NotSupported('Invalid staking activate transaction, missing create stake account instruction');
328-
} else if (!stakingInstructions.initialize) {
329-
throw new NotSupported('Invalid staking activate transaction, missing initialize stake account instruction');
330-
} else if (!stakingInstructions.delegate) {
331-
throw new NotSupported('Invalid staking activate transaction, missing delegate instruction');
328+
}
329+
330+
if (!stakingInstructions.initialize && stakingInstructions.delegate) {
331+
return;
332+
} else if (!stakingInstructions.delegate && stakingInstructions.initialize) {
333+
return;
334+
} else if (!stakingInstructions.delegate && !stakingInstructions.initialize) {
335+
// If both are missing something is wrong
336+
throw new NotSupported(
337+
'Invalid staking activate transaction, missing initialize stake account/delegate instruction'
338+
);
332339
}
333340
}
334341

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

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -200,33 +200,44 @@ function createNonceAccountInstruction(data: WalletInit): TransactionInstruction
200200
*/
201201
function stakingInitializeInstruction(data: StakingActivate): TransactionInstruction[] {
202202
const {
203-
params: { fromAddress, stakingAddress, amount, validator },
203+
params: { fromAddress, stakingAddress, amount, validator, isMarinade },
204204
} = data;
205205
assert(fromAddress, 'Missing fromAddress param');
206206
assert(stakingAddress, 'Missing stakingAddress param');
207207
assert(amount, 'Missing amount param');
208208
assert(validator, 'Missing validator param');
209+
assert(isMarinade !== undefined, 'Missing isMarinade param');
209210

210211
const fromPubkey = new PublicKey(fromAddress);
211212
const stakePubkey = new PublicKey(stakingAddress);
212-
213+
const validatorPubkey = new PublicKey(validator);
213214
const tx = new Transaction();
214215

216+
const stakerPubkey = isMarinade ? validatorPubkey : fromPubkey;
215217
const walletInitStaking = StakeProgram.createAccount({
216218
fromPubkey,
217219
stakePubkey,
218-
authorized: new Authorized(fromPubkey, fromPubkey), // staker and withdrawer
219-
lockup: new Lockup(0, 0, fromPubkey), // Lookup sets the minimum epoch to withdraw, by default is 0,0 which means there's no minimum limit
220+
authorized: new Authorized(stakerPubkey, fromPubkey), // staker and withdrawer
221+
lockup: new Lockup(0, 0, fromPubkey), // No minimum epoch to withdraw
220222
lamports: new BigNumber(amount).toNumber(),
221223
});
222224
tx.add(walletInitStaking);
223225

224-
const delegateStaking = StakeProgram.delegate({
225-
stakePubkey: new PublicKey(stakingAddress),
226-
authorizedPubkey: new PublicKey(fromAddress),
227-
votePubkey: new PublicKey(validator),
228-
});
229-
tx.add(delegateStaking);
226+
if (isMarinade) {
227+
const initializeStaking = StakeProgram.initialize({
228+
stakePubkey,
229+
authorized: new Authorized(stakerPubkey, fromPubkey), // staker and withdrawer
230+
lockup: new Lockup(0, 0, fromPubkey), // No minimum epoch to withdraw
231+
});
232+
tx.add(initializeStaking);
233+
} else {
234+
const delegateStaking = StakeProgram.delegate({
235+
stakePubkey: new PublicKey(stakingAddress),
236+
authorizedPubkey: new PublicKey(fromAddress),
237+
votePubkey: new PublicKey(validator),
238+
});
239+
tx.add(delegateStaking);
240+
}
230241

231242
return tx.instructions;
232243
}
@@ -246,8 +257,8 @@ function stakingDeactivateInstruction(data: StakingDeactivate): TransactionInstr
246257

247258
if (data.params.amount && data.params.unstakingAddress) {
248259
const tx = new Transaction();
249-
250260
const unstakingAddress = new PublicKey(data.params.unstakingAddress);
261+
251262
const allocateAccount = SystemProgram.allocate({
252263
accountPubkey: unstakingAddress,
253264
space: StakeProgram.space,

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export class StakingActivateBuilder extends TransactionBuilder {
1212
protected _amount: string;
1313
protected _stakingAddress: string;
1414
protected _validator: string;
15+
protected _isMarinade = false;
1516

1617
constructor(_coinConfig: Readonly<CoinConfig>) {
1718
super(_coinConfig);
@@ -77,12 +78,23 @@ export class StakingActivateBuilder extends TransactionBuilder {
7778
return this;
7879
}
7980

81+
/**
82+
* Set isMarinade flag
83+
* @param {boolean} flag - true if the transaction is for Marinade, false by default if not set
84+
* @returns {StakingActivateBuilder} This staking builder
85+
*/
86+
isMarinade(flag: boolean): this {
87+
this._isMarinade = flag;
88+
return this;
89+
}
90+
8091
/** @inheritdoc */
8192
protected async buildImplementation(): Promise<Transaction> {
8293
assert(this._sender, 'Sender must be set before building the transaction');
8394
assert(this._stakingAddress, 'Staking Address must be set before building the transaction');
8495
assert(this._validator, 'Validator must be set before building the transaction');
8596
assert(this._amount, 'Amount must be set before building the transaction');
97+
assert(this._isMarinade !== undefined, 'isMarinade must be set before building the transaction');
8698

8799
if (this._sender === this._stakingAddress) {
88100
throw new BuildTransactionError('Sender address cannot be the same as the Staking address');
@@ -95,6 +107,7 @@ export class StakingActivateBuilder extends TransactionBuilder {
95107
stakingAddress: this._stakingAddress,
96108
amount: this._amount,
97109
validator: this._validator,
110+
isMarinade: this._isMarinade,
98111
},
99112
};
100113
this._instructionsData = [stakingAccountData];

modules/sdk-coin-sol/test/resources/sol.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,15 +149,27 @@ export const validator = {
149149
export const STAKING_ACTIVATE_SIGNED_TX =
150150
'AgqGWxEJnQ6oPZd9ysQx+RoWZiNC5caG1vZfCKihyobmUMA/mj7tUVV3j02GUl25Cm7letLefgUz9WB+kXAe4ABUzgW/NnG7GeZGxTVAsEWxGK93sc/cNVFODjkf97ap2bugoN48UG3jBA0JvcNa35xPVrJVdB8VW8dWe/jfxSgMAgAHCUXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBYnsvugEnYfm5Gbz5TLtMncgFHZ8JMpkxTTlJIzJovekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALH5eXiaHEfRPEjYei8nFxDrf5MmCVEXMWKQvWwp2vXZBqHYF5E3VCqYNDe9/ip6slV/U1yKeHIraKSdwAAAAAAGodgXpQIFC2gHkebObbiOHltxUPYfxnkKTrTRAAAAAAan1RcYx3TJKFZjmGkdXraLXrijm0ttXHNVWyEAAAAABqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGTWE0P7tm7NDHRMga+VEKBtXuFZsxTdf9AAAAOMy2vkvq+zotj/3pEAF5f39mvoVh1a2HFqV+QSzuNCBAwICAAE0AAAAAOCTBAAAAAAAyAAAAAAAAAAGodgXkTdUKpg0N73+KnqyVX9TXIp4citopJ3AAAAAAAQCAQd0AAAAAEXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0EAAAAAAAAAAAAAAAAAAAAAReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0EEBgEDBggFAAQCAAAA';
151151

152+
export const MARINADE_STAKING_ACTIVATE_SIGNED_TX =
153+
'Aodp9uNPAhWZ9SesBxRWoNmLjivx4i6F4fFRrMxY2xMNp1asK+QQeirVas40uHLJr8Athv/bjPwAn2GWSYRbMQdVB9LxO7+GcXyVuHKzDgkzJ2lbu/vLCdnc2xeTYPOUir1CNxut782E+xNIMRcso/h09jWT0Iyluulp1369rIoAAgADBUXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBYnsvugEnYfm5Gbz5TLtMncgFHZ8JMpkxTTlJIzJovekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAah2BeRN1QqmDQ3vf4qerJVf1NcinhyK2ikncAAAAAABqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAADjMtr5L6vs6LY/96RABeX9/Zr6FYdWthxalfkEs7jQgQMCAgABNAAAAADgkwQAAAAAAMgAAAAAAAAABqHYF5E3VCqYNDe9/ip6slV/U1yKeHIraKSdwAAAAAADAgEEdAAAAACx+Xl4mhxH0TxI2HovJxcQ63+TJglRFzFikL1sKdr12UXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBAAAAAAAAAAAAAAAAAAAAAEXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBAwIBBHQAAAAAsfl5eJocR9E8SNh6LycXEOt/kyYJURcxYpC9bCna9dlF5Xm8+SU89otH3/H7OjpcLCG6xbI8Ca4SpuBVa/CLQQAAAAAAAAAAAAAAAAAAAABF5Xm8+SU89otH3/H7OjpcLCG6xbI8Ca4SpuBVa/CLQQ==';
154+
152155
export const STAKING_ACTIVATE_SIGNED_TX_WITH_MEMO =
153156
'AsTWc6tgb0h6qBA/kcVgr35lpWYxit9d99IscSJ5OUHkTz4AUK0dI7MNX9kw1GMIvxGKg7uw709b/9K1CeUgRgHdrX1nKO30P/91RhNMJpknfdDHmq48duVvvPRhlXirbMNm0yqn2q4iEWk3U8pS4ASPAU2L0jlk1NSqnw5sxMcOAgAICkXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBYnsvugEnYfm5Gbz5TLtMncgFHZ8JMpkxTTlJIzJovekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALH5eXiaHEfRPEjYei8nFxDrf5MmCVEXMWKQvWwp2vXZBUpTWpkpIQZNJOhxYNo4fHw1td28kruB5B+oQEEFRI0GodgXkTdUKpg0N73+KnqyVX9TXIp4citopJ3AAAAAAAah2BelAgULaAeR5s5tuI4eW3FQ9h/GeQpOtNEAAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAGp9UXGSxcUSGMyUw9SvF/WNruCJuh/UTj29mKAAAAAAan1RcZNYTQ/u2bs0MdEyBr5UQoG1e4VmzFN1/0AAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEEAgIAATQAAAAA4JMEAAAAAADIAAAAAAAAAAah2BeRN1QqmDQ3vf4qerJVf1NcinhyK2ikncAAAAAABQIBCHQAAAAAReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0FF5Xm8+SU89otH3/H7OjpcLCG6xbI8Ca4SpuBVa/CLQQAAAAAAAAAAAAAAAAAAAABF5Xm8+SU89otH3/H7OjpcLCG6xbI8Ca4SpuBVa/CLQQUGAQMHCQYABAIAAAAEAAl0ZXN0IG1lbW8=';
154157

158+
export const MARINADE_STAKING_ACTIVATE_SIGNED_TX_WITH_MEMO =
159+
'AiriA0wy5ry4BSx6cdfDIs0qUwNL2UUzy7cxN7N2UpL2YVYzik46JhV/XoyVHlkojeGzS12dzX7SDqZladSAOAVqgKMwC62EhEiyQ7CtOcELPWhLpxhrxteoHWk0NqLVBytYKrbV8+HGu9hc7bWu9U6LSgsB4XyLVd/aFJKoHBAIAgAEBkXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBYnsvugEnYfm5Gbz5TLtMncgFHZ8JMpkxTTlJIzJovekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVKU1qZKSEGTSTocWDaOHx8NbXdvJK7geQfqEBBBUSNBqHYF5E3VCqYNDe9/ip6slV/U1yKeHIraKSdwAAAAAAGp9UXGSxcUSGMyUw9SvF/WNruCJuh/UTj29mKAAAAAOMy2vkvq+zotj/3pEAF5f39mvoVh1a2HFqV+QSzuNCBBAICAAE0AAAAAOCTBAAAAAAAyAAAAAAAAAAGodgXkTdUKpg0N73+KnqyVX9TXIp4citopJ3AAAAAAAQCAQV0AAAAALH5eXiaHEfRPEjYei8nFxDrf5MmCVEXMWKQvWwp2vXZReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0EAAAAAAAAAAAAAAAAAAAAAReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0EEAgEFdAAAAACx+Xl4mhxH0TxI2HovJxcQ63+TJglRFzFikL1sKdr12UXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBAAAAAAAAAAAAAAAAAAAAAEXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBAwAJdGVzdCBtZW1v';
160+
155161
export const STAKING_ACTIVATE_UNSIGNED_TX =
156162
'AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAHCUXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBYnsvugEnYfm5Gbz5TLtMncgFHZ8JMpkxTTlJIzJovekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALH5eXiaHEfRPEjYei8nFxDrf5MmCVEXMWKQvWwp2vXZBqHYF5E3VCqYNDe9/ip6slV/U1yKeHIraKSdwAAAAAAGodgXpQIFC2gHkebObbiOHltxUPYfxnkKTrTRAAAAAAan1RcYx3TJKFZjmGkdXraLXrijm0ttXHNVWyEAAAAABqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGTWE0P7tm7NDHRMga+VEKBtXuFZsxTdf9AAAAOMy2vkvq+zotj/3pEAF5f39mvoVh1a2HFqV+QSzuNCBAwICAAE0AAAAAOCTBAAAAAAAyAAAAAAAAAAGodgXkTdUKpg0N73+KnqyVX9TXIp4citopJ3AAAAAAAQCAQd0AAAAAEXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0EAAAAAAAAAAAAAAAAAAAAAReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0EEBgEDBggFAAQCAAAA';
157163

164+
export const MARINADE_STAKING_ACTIVATE_UNSIGNED_TX =
165+
'AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgADBUXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBYnsvugEnYfm5Gbz5TLtMncgFHZ8JMpkxTTlJIzJovekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAah2BeRN1QqmDQ3vf4qerJVf1NcinhyK2ikncAAAAAABqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAADjMtr5L6vs6LY/96RABeX9/Zr6FYdWthxalfkEs7jQgQMCAgABNAAAAADgkwQAAAAAAMgAAAAAAAAABqHYF5E3VCqYNDe9/ip6slV/U1yKeHIraKSdwAAAAAADAgEEdAAAAACx+Xl4mhxH0TxI2HovJxcQ63+TJglRFzFikL1sKdr12UXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBAAAAAAAAAAAAAAAAAAAAAEXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBAwIBBHQAAAAAsfl5eJocR9E8SNh6LycXEOt/kyYJURcxYpC9bCna9dlF5Xm8+SU89otH3/H7OjpcLCG6xbI8Ca4SpuBVa/CLQQAAAAAAAAAAAAAAAAAAAABF5Xm8+SU89otH3/H7OjpcLCG6xbI8Ca4SpuBVa/CLQQ==';
166+
158167
export const STAKING_ACTIVATE_UNSIGNED_TX_WITH_MEMO =
159168
'AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAICkXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBYnsvugEnYfm5Gbz5TLtMncgFHZ8JMpkxTTlJIzJovekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALH5eXiaHEfRPEjYei8nFxDrf5MmCVEXMWKQvWwp2vXZBUpTWpkpIQZNJOhxYNo4fHw1td28kruB5B+oQEEFRI0GodgXkTdUKpg0N73+KnqyVX9TXIp4citopJ3AAAAAAAah2BelAgULaAeR5s5tuI4eW3FQ9h/GeQpOtNEAAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAGp9UXGSxcUSGMyUw9SvF/WNruCJuh/UTj29mKAAAAAAan1RcZNYTQ/u2bs0MdEyBr5UQoG1e4VmzFN1/0AAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEEAgIAATQAAAAA4JMEAAAAAADIAAAAAAAAAAah2BeRN1QqmDQ3vf4qerJVf1NcinhyK2ikncAAAAAABQIBCHQAAAAAReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0FF5Xm8+SU89otH3/H7OjpcLCG6xbI8Ca4SpuBVa/CLQQAAAAAAAAAAAAAAAAAAAABF5Xm8+SU89otH3/H7OjpcLCG6xbI8Ca4SpuBVa/CLQQUGAQMHCQYABAIAAAAEAAl0ZXN0IG1lbW8=';
160169

170+
export const MARINADE_STAKING_ACTIVATE_UNSIGNED_TX_WITH_MEMO =
171+
'AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBkXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBYnsvugEnYfm5Gbz5TLtMncgFHZ8JMpkxTTlJIzJovekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVKU1qZKSEGTSTocWDaOHx8NbXdvJK7geQfqEBBBUSNBqHYF5E3VCqYNDe9/ip6slV/U1yKeHIraKSdwAAAAAAGp9UXGSxcUSGMyUw9SvF/WNruCJuh/UTj29mKAAAAAOMy2vkvq+zotj/3pEAF5f39mvoVh1a2HFqV+QSzuNCBBAICAAE0AAAAAOCTBAAAAAAAyAAAAAAAAAAGodgXkTdUKpg0N73+KnqyVX9TXIp4citopJ3AAAAAAAQCAQV0AAAAALH5eXiaHEfRPEjYei8nFxDrf5MmCVEXMWKQvWwp2vXZReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0EAAAAAAAAAAAAAAAAAAAAAReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0EEAgEFdAAAAACx+Xl4mhxH0TxI2HovJxcQ63+TJglRFzFikL1sKdr12UXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBAAAAAAAAAAAAAAAAAAAAAEXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBAwAJdGVzdCBtZW1v';
172+
161173
export const STAKING_DEACTIVATE_SIGNED_TX =
162174
'AUfyWtl4IUxhH21qX/H03hJZer1XxQaxL2r/uDTM/u1GzBIyePCHu78O2SkWGEYP6eDdiY3OLfJmUM1jiy8NCAoBAAIEReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0Fiey+6ASdh+bkZvPlMu0ydyAUdnwkymTFNOUkjMmi96Qah2BeRN1QqmDQ3vf4qerJVf1NcinhyK2ikncAAAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAADjMtr5L6vs6LY/96RABeX9/Zr6FYdWthxalfkEs7jQgQECAwEDAAQFAAAA';
163175

modules/sdk-coin-sol/test/unit/instructionParamsFactory.staking.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -275,14 +275,9 @@ describe('Instruction Parser Staking Tests: ', function () {
275275
}, 'Invalid staking activate transaction, missing create stake account instruction');
276276

277277
should.throws(() => {
278-
const instructions = [stakingActivateInstructions[0], ...stakingDelegateInstructions];
278+
const instructions = [stakingActivateInstructions[0]];
279279
instructionParamsFactory(TransactionType.StakingActivate, instructions);
280-
}, 'Invalid staking activate transaction, missing initialize stake account instruction');
281-
282-
should.throws(() => {
283-
const instructions = [...stakingActivateInstructions];
284-
instructionParamsFactory(TransactionType.StakingActivate, instructions);
285-
}, 'Invalid staking activate transaction, missing delegate instruction');
280+
}, 'Invalid staking activate transaction, missing initialize stake account/delegate instruction');
286281
});
287282
});
288283

0 commit comments

Comments
 (0)