PHP WebShell
Текущая директория: /opt/BitGoJS/modules/bitgo/test/v2/unit/staking
Просмотр файла: stakingWalletTSS.ts
import * as _ from 'lodash';
import * as nock from 'nock';
import fixtures from '../../fixtures/staking/stakingWallet';
import { Enterprise, Environments, Keychain, Keychains, StakingWallet, TssUtils, Wallet } from '@bitgo/sdk-core';
import { TestBitGo } from '@bitgo/sdk-test';
import { BitGo } from '../../../../src';
import * as sinon from 'sinon';
describe('TSS Staking Wallet', function () {
const microservicesUri = Environments['mock'].uri;
let bitgo;
let nearBaseCoin;
let ethBaseCoin;
let atomBaseCoin;
let enterprise;
let ethWalletData: any;
let nearStakingWallet: StakingWallet;
let ethStakingWallet: StakingWallet;
let atomStakingWallet: StakingWallet;
before(function () {
bitgo = TestBitGo.decorate(BitGo, { env: 'mock', microservicesUri } as any);
bitgo.initializeTestVars();
nearBaseCoin = bitgo.coin('near');
nearBaseCoin.keychains();
ethBaseCoin = bitgo.coin('eth');
ethBaseCoin.keychains();
atomBaseCoin = bitgo.coin('atom');
atomBaseCoin.keychains();
enterprise = new Enterprise(bitgo, nearBaseCoin, {
id: '5cf940949449412d00f53b3d92dbcaa3',
name: 'TSS Test Enterprise',
});
const tssWalletData = {
id: 'walletIdTss',
coin: 'near',
enterprise: enterprise.id,
keys: ['5b3424f91bf349930e340175'],
};
const nearWallet = new Wallet(bitgo, nearBaseCoin, tssWalletData);
nearStakingWallet = nearWallet.toStakingWallet();
ethWalletData = {
id: 'walletId',
coin: 'eth',
enterprise: enterprise.id,
keys: ['5b3424f91bf349930e340175'],
coinSpecific: { walletVersion: 3 },
};
const ethWallet = new Wallet(bitgo, ethBaseCoin, ethWalletData);
ethStakingWallet = ethWallet.toStakingWallet();
const atomWallet = new Wallet(bitgo, atomBaseCoin, { ...tssWalletData, coin: 'atom' });
atomStakingWallet = atomWallet.toStakingWallet();
});
describe('buildSignAndSend', function () {
const sandbox = sinon.createSandbox();
afterEach(function () {
sandbox.verifyAndRestore();
});
it('should throw error when txRequestId is not defined', async function () {
const transaction = fixtures.transaction('READY');
transaction.txRequestId = undefined;
await nearStakingWallet
.buildSignAndSend({ walletPassphrase: 'passphrase' }, transaction)
.should.rejectedWith('txRequestId is required to sign and send');
});
it('should build, sign and send transaction', async function () {
const walletPassphrase = 'passphrase';
const transaction = fixtures.transaction('READY');
const deleteSignatureShares = sandbox.stub(TssUtils.prototype, 'deleteSignatureShares');
deleteSignatureShares.resolves([]);
deleteSignatureShares.calledOnceWithExactly(transaction.id);
const getKeysForSigning = sandbox.stub(Keychains.prototype, 'getKeysForSigning');
const keyChain: Keychain = {
id: 'id',
pub: 'pub',
type: 'tss',
};
getKeysForSigning.resolves([keyChain]);
getKeysForSigning.calledOnce;
const signTransaction = sandbox.stub(Wallet.prototype, 'signTransaction');
signTransaction.resolves({ txRequestId: fixtures.txRequestId });
signTransaction.calledOnceWithExactly({
txPrebuild: {
txRequestId: fixtures.txRequestId,
},
walletPassphrase: walletPassphrase,
keychain: keyChain,
});
nock(microservicesUri)
.post(
`/api/staking/v1/${nearStakingWallet.coin}/wallets/${nearStakingWallet.walletId}/requests/${transaction.stakingRequestId}/transactions/${transaction.id}`,
_.matches({ txRequestId: fixtures.txRequestId })
)
.reply(200, transaction);
const stakingTransaction = await nearStakingWallet.buildSignAndSend(
{ walletPassphrase: walletPassphrase },
transaction
);
stakingTransaction.should.deepEqual(transaction);
});
it('should build and sign but not send transaction for ETH TSS or ECDSA based TSS Coin', async function () {
[ethStakingWallet, atomStakingWallet].forEach(async (ecdsaStakingWallet) => {
const walletPassphrase = 'passphrase';
const transaction = fixtures.transaction('READY');
const deleteSignatureShares = sandbox.stub(TssUtils.prototype, 'deleteSignatureShares');
deleteSignatureShares.resolves([]);
deleteSignatureShares.calledOnceWithExactly(transaction.id);
const getKeysForSigning = sandbox.stub(Keychains.prototype, 'getKeysForSigning');
const keyChain: Keychain = {
id: 'id',
pub: 'pub',
type: 'tss',
};
getKeysForSigning.resolves([keyChain]);
getKeysForSigning.calledOnce;
const signTransaction = sandbox.stub(Wallet.prototype, 'signTransaction');
signTransaction.resolves({ txRequestId: fixtures.txRequestId });
signTransaction.calledOnceWithExactly({
txPrebuild: {
txRequestId: fixtures.txRequestId,
},
walletPassphrase: walletPassphrase,
keychain: keyChain,
});
const stakingTransaction = await ecdsaStakingWallet.buildSignAndSend(
{ walletPassphrase: walletPassphrase },
transaction
);
stakingTransaction.should.deepEqual(transaction);
});
});
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!