PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-sol/test/unit/transactionBuilder
Просмотр файла: stakingAuthorizeBuilder.ts
import should from 'should';
import * as testData from '../../resources/sol';
import { getBuilderFactory } from '../getBuilderFactory';
import { KeyPair, Utils } from '../../../src';
describe('Sol Staking Authorize Builder', () => {
const factory = getBuilderFactory('tsol');
const stakingBuilder = () => {
const txBuilder = factory.getStakingAuthorizeBuilder();
txBuilder.nonce(recentBlockHash);
txBuilder.sender(wallet.pub);
return txBuilder;
};
// not valid data
const invalidPubKey = testData.pubKeys.invalidPubKeys[0];
const wrongAccount = new KeyPair({ prv: testData.prvKeys.prvKey1.base58 }).getKeys();
// valid data
const wallet = new KeyPair(testData.authAccount2).getKeys();
const stakeAccount = new KeyPair(testData.stakeAccount).getKeys();
const oldAuthorizedAccount = new KeyPair(testData.authAccount).getKeys();
const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
describe('Succeed', () => {
it('build a create staking authorization signed tx', async () => {
const txBuilder = factory.getStakingAuthorizeBuilder();
txBuilder
.sender(wallet.pub)
.stakingAddress(stakeAccount.pub)
.nonce(recentBlockHash)
.newAuthorizedAddress(wallet.pub)
.oldAuthorizedAddress(oldAuthorizedAccount.pub);
txBuilder.sign({ key: wallet.prv });
txBuilder.sign({ key: oldAuthorizedAccount.prv });
const tx = await txBuilder.build();
tx.inputs.length.should.equal(0);
tx.outputs.length.should.equal(0);
const rawTx = tx.toBroadcastFormat();
should.equal(Utils.isValidRawTransaction(rawTx), true);
should.equal(rawTx, testData.STAKING_AUTHORIZE_SIGNED_TX);
});
it('build a create and delegate staking unsigned tx', async () => {
const txBuilder = factory.getStakingAuthorizeBuilder();
txBuilder
.sender(wallet.pub)
.stakingAddress(stakeAccount.pub)
.nonce(recentBlockHash)
.newAuthorizedAddress(wallet.pub)
.oldAuthorizedAddress(oldAuthorizedAccount.pub);
const tx = await txBuilder.build();
tx.inputs.length.should.equal(0);
tx.outputs.length.should.equal(0);
const rawTx = tx.toBroadcastFormat();
should.equal(Utils.isValidRawTransaction(rawTx), true);
should.equal(rawTx, testData.STAKING_AUTHORIZE_UNSIGNED_TX);
});
});
describe('Fail', () => {
it('for invalid sender address', () => {
const txBuilder = stakingBuilder();
should(() => txBuilder.sender(invalidPubKey)).throwError('Invalid or missing sender, got: ' + invalidPubKey);
});
it('for invalid staking address', () => {
const txBuilder = stakingBuilder();
should(() => txBuilder.stakingAddress(invalidPubKey)).throwError(
'Invalid or missing stakingAddress, got: ' + invalidPubKey
);
});
it('build when nonce is not provided', async () => {
const txBuilder = factory.getStakingActivateBuilder();
txBuilder.sender(wallet.pub);
txBuilder.stakingAddress(stakeAccount.pub);
txBuilder.sign({ key: wallet.prv });
await txBuilder.build().should.rejectedWith('Invalid transaction: missing nonce blockhash');
});
it('build when sender is not provided', async () => {
const txBuilder = factory.getStakingActivateBuilder();
txBuilder.stakingAddress(stakeAccount.pub);
txBuilder.nonce(recentBlockHash);
txBuilder.sign({ key: wallet.prv });
await txBuilder.build().should.rejectedWith('Invalid transaction: missing sender');
});
it('build when stakingAddress is not provided', async () => {
const txBuilder = factory.getStakingActivateBuilder();
txBuilder.sender(wallet.pub);
txBuilder.nonce(recentBlockHash);
txBuilder.sign({ key: wallet.prv });
await txBuilder.build().should.rejectedWith('Staking Address must be set before building the transaction');
});
it('to sign twice with the same key', () => {
const txBuilder = factory.from(testData.STAKING_ACTIVATE_UNSIGNED_TX);
txBuilder.sign({ key: wallet.prv });
should(() => txBuilder.sign({ key: wallet.prv })).throwError('Duplicated signer: ' + wallet.prv?.toString());
});
});
describe('From and sign', () => {
describe('Succeed', () => {
it('build from an unsigned staking activate and sign it', async () => {
const txBuilder = factory.from(testData.STAKING_AUTHORIZE_UNSIGNED_TX);
txBuilder.sign({ key: wallet.prv });
txBuilder.sign({ key: oldAuthorizedAccount.prv });
const tx = await txBuilder.build();
tx.inputs.length.should.equal(0);
tx.outputs.length.should.equal(0);
const rawTx = tx.toBroadcastFormat();
should.equal(Utils.isValidRawTransaction(rawTx), true);
should.equal(rawTx, testData.STAKING_AUTHORIZE_SIGNED_TX);
});
});
describe('Fail', () => {
it('build from an unsigned staking activate and fail to sign it', async () => {
const txBuilder = factory.from(testData.STAKING_ACTIVATE_UNSIGNED_TX);
txBuilder.sign({ key: wrongAccount.prv });
await txBuilder.build().should.rejectedWith('unknown signer: CP5Dpaa42RtJmMuKqCQsLwma5Yh3knuvKsYDFX85F41S');
});
it('build from a signed staking activate and fail to sign it', async () => {
const txBuilder = factory.from(testData.STAKING_ACTIVATE_SIGNED_TX);
txBuilder.sign({ key: wrongAccount.prv });
await txBuilder.build().should.rejectedWith('unknown signer: CP5Dpaa42RtJmMuKqCQsLwma5Yh3knuvKsYDFX85F41S');
});
});
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!