Skip to content

Commit 4f5d026

Browse files
authored
Merge pull request #6024 from BitGo/fix-marinade-stake-flow
fix(sdk-coin-sol): set isMarinade flag during from raw build
2 parents c438f17 + 7a0f381 commit 4f5d026

File tree

5 files changed

+38
-8
lines changed

5 files changed

+38
-8
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,11 @@ function parseStakingActivateInstructions(
267267
fromAddress: stakingInstructions.create?.fromPubkey.toString() || '',
268268
stakingAddress: stakingInstructions.initialize?.stakePubkey.toString() || '',
269269
amount: stakingInstructions.create?.lamports.toString() || '',
270-
validator: stakingInstructions.delegate?.votePubkey.toString() || '',
270+
validator:
271+
stakingInstructions.delegate?.votePubkey.toString() ||
272+
stakingInstructions.initialize?.authorized.staker.toString() ||
273+
'',
274+
isMarinade: stakingInstructions.delegate === undefined,
271275
},
272276
};
273277
instructionData.push(stakingActivate);

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,8 @@ export class StakingActivateBuilder extends TransactionBuilder {
3131
this.sender(activateInstruction.params.fromAddress);
3232
this.stakingAddress(activateInstruction.params.stakingAddress);
3333
this.amount(activateInstruction.params.amount);
34-
if (activateInstruction.params.validator && activateInstruction.params.validator !== '') {
35-
this.validator(activateInstruction.params.validator);
36-
}
34+
this.validator(activateInstruction.params.validator);
35+
this.isMarinade(activateInstruction.params.isMarinade ?? false);
3736
}
3837
}
3938
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ describe('Instruction Parser Staking Tests: ', function () {
6666
stakingAddress: stakingAccount.toString(),
6767
validator: validator.toString(),
6868
amount,
69+
isMarinade: false,
6970
},
7071
};
7172

@@ -135,6 +136,7 @@ describe('Instruction Parser Staking Tests: ', function () {
135136
stakingAddress: stakingAccount.toString(),
136137
validator: validator.toString(),
137138
amount,
139+
isMarinade: false,
138140
},
139141
};
140142

@@ -186,6 +188,7 @@ describe('Instruction Parser Staking Tests: ', function () {
186188
stakingAddress: stakingAccount.toString(),
187189
validator: validator.toString(),
188190
amount,
191+
isMarinade: false,
189192
},
190193
};
191194

@@ -232,6 +235,7 @@ describe('Instruction Parser Staking Tests: ', function () {
232235
stakingAddress: stakingAccount.toString(),
233236
validator: validator.toString(),
234237
amount,
238+
isMarinade: false,
235239
},
236240
};
237241

modules/sdk-coin-sol/test/unit/transactionBuilder/stakingActivateBuilder.ts

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ describe('Sol Staking Activate Builder', () => {
7575
fromAddress: wallet.pub,
7676
stakingAddress: stakeAccount.pub,
7777
amount: amount,
78-
validator: '',
78+
validator: validator.pub,
79+
isMarinade: true,
7980
},
8081
},
8182
]);
@@ -151,7 +152,8 @@ describe('Sol Staking Activate Builder', () => {
151152
fromAddress: wallet.pub,
152153
stakingAddress: stakeAccount.pub,
153154
amount: amount,
154-
validator: '',
155+
validator: validator.pub,
156+
isMarinade: true,
155157
},
156158
},
157159
]);
@@ -211,7 +213,8 @@ describe('Sol Staking Activate Builder', () => {
211213
fromAddress: wallet.pub,
212214
stakingAddress: stakeAccount.pub,
213215
amount: amount,
214-
validator: '',
216+
validator: validator.pub,
217+
isMarinade: true,
215218
},
216219
},
217220
]);
@@ -274,7 +277,8 @@ describe('Sol Staking Activate Builder', () => {
274277
fromAddress: wallet.pub,
275278
stakingAddress: stakeAccount.pub,
276279
amount: amount,
277-
validator: '',
280+
validator: validator.pub,
281+
isMarinade: true,
278282
},
279283
},
280284
]);
@@ -413,6 +417,24 @@ describe('Sol Staking Activate Builder', () => {
413417
should.equal(rawTx, testData.STAKING_ACTIVATE_SIGNED_TX);
414418
});
415419

420+
it('Marinade: build from an unsigned staking activate and sign it', async () => {
421+
const txBuilder = factory.from(testData.MARINADE_STAKING_ACTIVATE_UNSIGNED_TX);
422+
423+
txBuilder.sign({ key: wallet.prv });
424+
txBuilder.sign({ key: stakeAccount.prv });
425+
const tx = await txBuilder.build();
426+
tx.inputs.length.should.equal(1);
427+
tx.inputs[0].should.deepEqual({
428+
address: wallet.pub,
429+
value: amount,
430+
coin: 'tsol',
431+
});
432+
tx.outputs.length.should.equal(1);
433+
const rawTx = tx.toBroadcastFormat();
434+
should.equal(Utils.isValidRawTransaction(rawTx), true);
435+
should.equal(rawTx, testData.MARINADE_STAKING_ACTIVATE_SIGNED_TX);
436+
});
437+
416438
it('build from an unsigned staking activate with memo and sign it', async () => {
417439
const txBuilder = factory.from(testData.STAKING_ACTIVATE_UNSIGNED_TX_WITH_MEMO);
418440
txBuilder.sign({ key: wallet.prv });

modules/sdk-coin-sol/test/unit/transactionBuilder/transactionBuilder.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ describe('Sol Transaction Builder', async () => {
107107
stakingAddress: '7dRuGFbU2y2kijP6o1LYNzVyz4yf13MooqoionCzv5Za',
108108
amount: '300000',
109109
validator: 'CyjoLt3kjqB57K7ewCBHmnHq3UgEj3ak6A7m6EsBsuhA',
110+
isMarinade: false,
110111
},
111112
},
112113
]);

0 commit comments

Comments
 (0)