Skip to content

Commit b046a3b

Browse files
authored
Merge pull request #5897 from BitGo/revert-5835-WP-3967/validate-staking-tx-before-signing
Revert "fix(sdk-core): validate unsigned staking transaction before sign"
2 parents 88646b0 + 75f7f6e commit b046a3b

File tree

5 files changed

+3
-384
lines changed

5 files changed

+3
-384
lines changed

modules/bitgo/test/v2/fixtures/staking/topethStakingFixtures.ts

Lines changed: 0 additions & 170 deletions
This file was deleted.

modules/bitgo/test/v2/unit/staking/stakingWalletNonTSS.ts

Lines changed: 2 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,8 @@ import * as _ from 'lodash';
22

33
import * as nock from 'nock';
44
import fixtures from '../../fixtures/staking/stakingWallet';
5-
import * as opethFixtures from '../../fixtures/staking/topethStakingFixtures';
6-
7-
import {
8-
Enterprise,
9-
Environments,
10-
Keychain,
11-
Keychains,
12-
PrebuildTransactionResult,
13-
StakingTransaction,
14-
StakingWallet,
15-
Wallet,
16-
WalletCoinSpecific,
17-
WalletData,
18-
} from '@bitgo/sdk-core';
5+
6+
import { Enterprise, Environments, Keychain, Keychains, StakingWallet, Wallet } from '@bitgo/sdk-core';
197
import { TestBitGo } from '@bitgo/sdk-test';
208
import { BitGo } from '../../../../src';
219
import * as sinon from 'sinon';
@@ -26,16 +14,13 @@ describe('non-TSS Staking Wallet', function () {
2614
let ethBaseCoin;
2715
let maticBaseCoin;
2816
let btcBaseCoin;
29-
let topethWctBaseCoin;
3017
let enterprise;
3118
let ethWalletData: any;
3219
let btcWalletData: any;
33-
let topethWctStakingWalletData: WalletData;
3420
let btcDescriptorWalletData: any;
3521
let ethStakingWallet: StakingWallet;
3622
let maticStakingWallet: StakingWallet;
3723
let btcStakingWallet: StakingWallet;
38-
let topethWctStakingWallet: StakingWallet;
3924

4025
before(function () {
4126
bitgo = TestBitGo.decorate(BitGo, { env: 'mock', microservicesUri } as any);
@@ -46,7 +31,6 @@ describe('non-TSS Staking Wallet', function () {
4631
maticBaseCoin.keychains();
4732
btcBaseCoin = bitgo.coin('btc');
4833
btcBaseCoin.keychains();
49-
topethWctBaseCoin = bitgo.coin('topeth:wct');
5034

5135
enterprise = new Enterprise(bitgo, ethBaseCoin, {
5236
id: '5cf940949449412d00f53b3d92dbcaa3',
@@ -79,30 +63,9 @@ describe('non-TSS Staking Wallet', function () {
7963
keys: ['5b3424f91bf349930e340175'],
8064
coinSpecific: {},
8165
};
82-
83-
topethWctStakingWalletData = {
84-
approvalsRequired: 0,
85-
balance: 0,
86-
balanceString: '',
87-
coinSpecific: {} as WalletCoinSpecific,
88-
confirmedBalance: 0,
89-
confirmedBalanceString: '',
90-
keys: [],
91-
label: '',
92-
multisigType: 'onchain',
93-
pendingApprovals: [],
94-
spendableBalance: 0,
95-
spendableBalanceString: '',
96-
id: 'topethWctStakingWalletId',
97-
coin: 'topeth:wct',
98-
enterprise: enterprise.id,
99-
};
100-
10166
const ethWallet = new Wallet(bitgo, ethBaseCoin, ethWalletData);
10267
const maticWallet = new Wallet(bitgo, maticBaseCoin, maticWalletData);
10368
const btcWallet = new Wallet(bitgo, btcBaseCoin, btcWalletData);
104-
topethWctStakingWallet = new Wallet(bitgo, topethWctBaseCoin, topethWctStakingWalletData).toStakingWallet();
105-
10669
ethStakingWallet = ethWallet.toStakingWallet();
10770
maticStakingWallet = maticWallet.toStakingWallet();
10871
btcStakingWallet = btcWallet.toStakingWallet();
@@ -169,16 +132,12 @@ describe('non-TSS Staking Wallet', function () {
169132
)
170133
.reply(200, transaction);
171134

172-
// skipping validation because mock data is not a valid transaction
173-
sinon.stub(StakingWallet.prototype, <any>'validateBuiltStakingTransaction').resolves();
174-
175135
const stakingTransaction = await ethStakingWallet.buildSignAndSend(
176136
{ walletPassphrase: walletPassphrase },
177137
transaction
178138
);
179139

180140
stakingTransaction.should.deepEqual(transaction);
181-
sinon.restore();
182141
});
183142

184143
it('should throw error when buildParams are not expanded', async function () {
@@ -262,15 +221,12 @@ describe('non-TSS Staking Wallet', function () {
262221
)
263222
.reply(200, transaction);
264223

265-
// skipping validation because mock data is not a valid transaction
266-
sinon.stub(StakingWallet.prototype, <any>'validateBuiltStakingTransaction').resolves();
267224
const stakingTransaction = await maticStakingWallet.buildSignAndSend(
268225
{ walletPassphrase: walletPassphrase },
269226
transaction
270227
);
271228

272229
stakingTransaction.should.deepEqual(transaction);
273-
sinon.restore();
274230
});
275231
});
276232

@@ -310,65 +266,4 @@ describe('non-TSS Staking Wallet', function () {
310266
prebuildTransaction.calledOnceWithExactly(transaction.buildParams).should.be.true;
311267
});
312268
});
313-
314-
describe('Opeth:WCT Staking', function () {
315-
it('should build and validate transaction', async function () {
316-
const unsignedTransaction: PrebuildTransactionResult = {
317-
walletId: topethWctStakingWallet.walletId,
318-
...opethFixtures.unsignedStakingTransaction,
319-
} as PrebuildTransactionResult;
320-
const stakingTransaction: StakingTransaction = opethFixtures.updatedStakingRequest;
321-
322-
nock(microservicesUri)
323-
.get(
324-
`/api/staking/v1/${topethWctStakingWallet.coin}/wallets/${topethWctStakingWallet.walletId}/requests/${stakingTransaction.stakingRequestId}/transactions/${stakingTransaction.id}`
325-
)
326-
.query({ expandBuildParams: true })
327-
.reply(200, stakingTransaction);
328-
329-
nock(microservicesUri)
330-
.get(`/api/v2/topeth/wallet/${topethWctStakingWallet.walletId}`)
331-
.reply(200, topethWctStakingWalletData);
332-
333-
nock(microservicesUri)
334-
.post(`/api/v2/topeth/wallet/${topethWctStakingWallet.walletId}/tx/build`)
335-
.reply(200, unsignedTransaction);
336-
337-
// tx validation happens before signing, so we can skip it
338-
sinon.stub(topethWctStakingWallet, 'sign').resolves();
339-
340-
await topethWctStakingWallet.buildAndSign({ walletPassphrase: 'passphrase' }, stakingTransaction);
341-
});
342-
343-
it('should fail to validate transaction if unsigned transaction does not match the staking transaction', async function () {
344-
const unsignedTransaction: PrebuildTransactionResult = {
345-
walletId: topethWctStakingWallet.walletId,
346-
...opethFixtures.unsignedStakingTransaction,
347-
txHex:
348-
'0x02f9019083aa37dc718206a882089e83030d40941d1a245741bd7d603747a23d30f4c91682a2992680b901643912521500000000000000000000000086bb6dca2cd6f9a0189c478bbb8f7ee2fef07c89000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000067ebedc3000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000044095ea7b3000000000000000000000000140d63efb5b24314f6f62dbadb383dba2e49d7ee0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0808080',
349-
} as PrebuildTransactionResult;
350-
const stakingTransaction: StakingTransaction = opethFixtures.updatedStakingRequest;
351-
352-
nock(microservicesUri)
353-
.get(
354-
`/api/staking/v1/${topethWctStakingWallet.coin}/wallets/${topethWctStakingWallet.walletId}/requests/${stakingTransaction.stakingRequestId}/transactions/${stakingTransaction.id}`
355-
)
356-
.query({ expandBuildParams: true })
357-
.reply(200, stakingTransaction);
358-
359-
nock(microservicesUri)
360-
.get(`/api/v2/topeth/wallet/${topethWctStakingWallet.walletId}`)
361-
.reply(200, topethWctStakingWalletData);
362-
363-
nock(microservicesUri)
364-
.post(`/api/v2/topeth/wallet/${topethWctStakingWallet.walletId}/tx/build`)
365-
.reply(200, unsignedTransaction);
366-
367-
await topethWctStakingWallet
368-
.buildAndSign({ walletPassphrase: 'passphrase' }, stakingTransaction)
369-
.should.be.rejectedWith(
370-
'Invalid recipient address: 0x86bb6dca2cd6f9a0189c478bbb8f7ee2fef07c89, Missing recipient address(es): 0x75bb6dca2cd6f9a0189c478bbb8f7ee2fef07c78'
371-
);
372-
});
373-
});
374269
});

modules/sdk-core/src/bitgo/staking/iStakingWallet.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -243,14 +243,9 @@ export interface StakingTransaction {
243243
gasPrice?: string;
244244
}
245245

246-
export type StakingTxRequestPrebuildTransactionResult = {
247-
walletId: string;
248-
txRequestId: string;
249-
};
250-
251246
export interface StakingPrebuildTransactionResult {
252247
transaction: StakingTransaction;
253-
result: PrebuildTransactionResult | StakingTxRequestPrebuildTransactionResult;
248+
result: PrebuildTransactionResult;
254249
}
255250

256251
export interface StakingSignedTransaction {

0 commit comments

Comments
 (0)