PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-stx/test/unit/transactionBuilder
Просмотр файла: sendmanyBuilder.ts
import should from 'should';
import { StacksTestnet, StacksMainnet } from '@stacks/network';
import { pubKeyfromPrivKey, publicKeyToString } from '@stacks/transactions';
import { principalToString } from '@stacks/transactions/dist/clarity/types/principalCV';
import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test';
import { BitGoAPI } from '@bitgo/sdk-api';
import { coins } from '@bitgo/statics';
import { Stx, Tstx, StxLib } from '../../../src';
import * as testData from '../resources';
describe('Stacks: Send Many Builder', function () {
const coinName = 'stx';
const coinNameTest = 'tstx';
let bitgo: TestBitGoAPI;
before(function () {
bitgo = TestBitGo.decorate(BitGoAPI, {
env: 'mock',
});
bitgo.initializeTestVars();
bitgo.safeRegister('stx', Stx.createInstance);
bitgo.safeRegister('tstx', Tstx.createInstance);
});
describe('Stx Send Many Builder', () => {
const factory = new StxLib.TransactionBuilderFactory(coins.get(coinNameTest));
const factoryProd = new StxLib.TransactionBuilderFactory(coins.get(coinName));
const initTxBuilder = () => {
const txBuilder = factory.getSendmanyBuilder();
txBuilder.fee({ fee: '532' });
txBuilder.nonce(45);
return txBuilder;
};
it('should select the right network', function () {
should.equal(factory.getSendmanyBuilder().coinName(), 'tstx');
should.equal(factoryProd.getSendmanyBuilder().coinName(), 'stx');
// used type any to access protected properties
const txBuilder: any = factory.getSendmanyBuilder();
const txBuilderProd: any = factoryProd.getSendmanyBuilder();
txBuilder._network.should.deepEqual(new StacksTestnet());
txBuilderProd._network.should.deepEqual(new StacksMainnet());
});
describe('should build ', function () {
it('a multisig send many transaction with memo', async () => {
const builder = initTxBuilder();
// corresponding public keys
const pubKeys = testData.prvKeysString.map(pubKeyfromPrivKey);
const pubKeyStrings = pubKeys.map(publicKeyToString);
builder.fromPubKey(pubKeyStrings);
for (const recipient of testData.sendManyRecipients) {
builder.send(recipient);
}
builder.sign({ key: testData.prvKeysString[0] });
builder.sign({ key: testData.prvKeysString[1] });
const tx = await builder.build();
const txJson = tx.toJson();
txJson.id.should.equal('01793eeb993d15791ea9af8910d867407803fe4c7d1db2dac592a2e8200de12a');
txJson.fee.should.equal('532');
txJson.from.should.equal('SN3KT9DVM9TCTAHV0S9VEAKTDG7JBC0K26ZMWEBNT');
txJson.nonce.should.equal(45);
const { contractName, contractAddress, functionName, functionArgs } = txJson.payload;
contractAddress.should.equal(testData.SEND_MANY_CONTRACT_ADDRESS_WITH_MEMO);
contractName.should.equal(testData.SEND_MANY_CONTRACT_NAME_WITH_MEMO);
functionName.should.equal(testData.SEND_MANY_CONTRACT_FUNCTION_NAME_WITH_MEMO);
functionArgs.length.should.equal(1);
functionArgs[0].should.have.property('list');
const { list } = functionArgs[0];
list.length.should.equal(testData.sendManyRecipients.length);
for (let i = 0; i < testData.sendManyRecipients.length; i++) {
list[i].data.should.have.properties(['to', 'ustx', 'memo']);
principalToString(list[i].data.to).should.equal(testData.sendManyRecipients[i].address);
list[i].data.memo.buffer.toString('ascii').should.equal(testData.sendManyRecipients[i].memo);
list[i].data.ustx.value.should.equal(testData.sendManyRecipients[i].amount);
}
tx.outputs.length.should.equal(testData.sendManyRecipients.length);
for (let i = 0; i < testData.sendManyRecipients.length; i++) {
tx.outputs[i].address.should.equal(testData.sendManyRecipients[i].address);
tx.outputs[i].value.should.equal(testData.sendManyRecipients[i].amount);
}
tx.inputs.length.should.equal(1);
tx.inputs[0].address.should.equal('SN3KT9DVM9TCTAHV0S9VEAKTDG7JBC0K26ZMWEBNT');
tx.inputs[0].value.should.equal('6000000');
should.deepEqual(tx.toBroadcastFormat(), testData.SIGNED_SEND_MANY_WITH_MEMO);
});
it('a multisig send-many unsigned transfer transaction with memo from raw tx', async () => {
const builder = factory.from(testData.UNSIGNED_SEND_MANY_WITH_MEMO);
const tx = await builder.build();
tx.toBroadcastFormat().should.equal(testData.UNSIGNED_SEND_MANY_WITH_MEMO);
});
it('a unsigned send-many signed transfer transaction with memo from raw tx', async () => {
const builder = factory.from(testData.SIGNED_SEND_MANY_WITH_MEMO);
const tx = await builder.build();
tx.toBroadcastFormat().should.equal(testData.SIGNED_SEND_MANY_WITH_MEMO);
});
it('sign an unsigned tx from a raw tx', async () => {
const builder = factory.from(testData.UNSIGNED_SEND_MANY_WITH_MEMO);
builder.sign({ key: testData.prvKeysString[0] });
builder.sign({ key: testData.prvKeysString[1] });
const tx = await builder.build();
tx.toBroadcastFormat().should.equal(testData.SIGNED_SEND_MANY_WITH_MEMO);
});
});
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!