PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-bld/test/unit/transactionBuilder
Просмотр файла: StakingWithdrawRewardsBuilder.ts
import { toHex, TransactionType } from '@bitgo/sdk-core';
import { fromBase64 } from '@cosmjs/encoding';
import should from 'should';
import { BitGoAPI } from '@bitgo/sdk-api';
import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test';
import { Bld, Tbld } from '../../../src';
import * as testData from '../../resources/bld';
describe('Bld WithdrawRewards txn Builder', () => {
let bitgo: TestBitGoAPI;
let basecoin;
let factory;
let testTx;
before(function () {
bitgo = TestBitGo.decorate(BitGoAPI, { env: 'mock' });
bitgo.safeRegister('bld', Bld.createInstance);
bitgo.safeRegister('tbld', Tbld.createInstance);
bitgo.initializeTestVars();
basecoin = bitgo.coin('tbld');
factory = basecoin.getBuilder();
testTx = testData.TEST_WITHDRAW_REWARDS_TX;
});
it('should build a WithdrawRewards tx with signature', async function () {
const txBuilder = factory.getStakingWithdrawRewardsBuilder();
txBuilder.sequence(testTx.sequence);
txBuilder.gasBudget(testTx.gasBudget);
txBuilder.messages([testTx.sendMessage.value]);
txBuilder.publicKey(toHex(fromBase64(testTx.pubKey)));
txBuilder.addSignature({ pub: toHex(fromBase64(testTx.pubKey)) }, Buffer.from(testTx.signature, 'base64'));
const tx = await txBuilder.build();
const json = await (await txBuilder.build()).toJson();
should.equal(tx.type, TransactionType.StakingWithdraw);
should.deepEqual(json.gasBudget, testTx.gasBudget);
should.deepEqual(json.sendMessages, [testTx.sendMessage]);
should.deepEqual(json.publicKey, toHex(fromBase64(testTx.pubKey)));
should.deepEqual(json.sequence, testTx.sequence);
const rawTx = tx.toBroadcastFormat();
should.equal(rawTx, testTx.signedTxBase64);
should.deepEqual(tx.inputs, [
{
address: testData.TEST_WITHDRAW_REWARDS_TX.delegator,
value: 'UNAVAILABLE',
coin: basecoin.getChain(),
},
]);
should.deepEqual(tx.outputs, [
{
address: testData.TEST_WITHDRAW_REWARDS_TX.validator,
value: 'UNAVAILABLE',
coin: basecoin.getChain(),
},
]);
});
it('should build a WithdrawRewards tx without signature', async function () {
const txBuilder = factory.getStakingWithdrawRewardsBuilder();
txBuilder.sequence(testTx.sequence);
txBuilder.gasBudget(testTx.gasBudget);
txBuilder.messages([testTx.sendMessage.value]);
txBuilder.publicKey(toHex(fromBase64(testTx.pubKey)));
const tx = await txBuilder.build();
const json = await (await txBuilder.build()).toJson();
should.equal(tx.type, TransactionType.StakingWithdraw);
should.deepEqual(json.gasBudget, testTx.gasBudget);
should.deepEqual(json.sendMessages, [testTx.sendMessage]);
should.deepEqual(json.publicKey, toHex(fromBase64(testTx.pubKey)));
should.deepEqual(json.sequence, testTx.sequence);
tx.toBroadcastFormat();
should.deepEqual(tx.inputs, [
{
address: testData.TEST_WITHDRAW_REWARDS_TX.delegator,
value: 'UNAVAILABLE',
coin: basecoin.getChain(),
},
]);
should.deepEqual(tx.outputs, [
{
address: testData.TEST_WITHDRAW_REWARDS_TX.validator,
value: 'UNAVAILABLE',
coin: basecoin.getChain(),
},
]);
});
it('should sign a WithdrawRewards tx', async function () {
const txBuilder = factory.getStakingWithdrawRewardsBuilder();
txBuilder.sequence(testTx.sequence);
txBuilder.gasBudget(testTx.gasBudget);
txBuilder.messages([testTx.sendMessage.value]);
txBuilder.accountNumber(testTx.accountNumber);
txBuilder.chainId(testTx.chainId);
txBuilder.sign({ key: toHex(fromBase64(testTx.privateKey)) });
const tx = await txBuilder.build();
const json = await (await txBuilder.build()).toJson();
should.equal(tx.type, TransactionType.StakingWithdraw);
should.deepEqual(json.gasBudget, testTx.gasBudget);
should.deepEqual(json.sendMessages, [testTx.sendMessage]);
should.deepEqual(json.publicKey, toHex(fromBase64(testTx.pubKey)));
should.deepEqual(json.sequence, testTx.sequence);
const rawTx = tx.toBroadcastFormat();
should.equal(tx.signature[0], toHex(fromBase64(testTx.signature)));
should.equal(rawTx, testTx.signedTxBase64);
should.deepEqual(tx.inputs, [
{
address: testData.TEST_WITHDRAW_REWARDS_TX.delegator,
value: 'UNAVAILABLE',
coin: basecoin.getChain(),
},
]);
should.deepEqual(tx.outputs, [
{
address: testData.TEST_WITHDRAW_REWARDS_TX.validator,
value: 'UNAVAILABLE',
coin: basecoin.getChain(),
},
]);
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!