PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-near/test/unit/transactionBuilder
Просмотр файла: transactionBuilder.ts
import assert from 'assert';
import should from 'should';
import { getBuilderFactory } from '../getBuilderFactory';
import { TransactionType } from '@bitgo/sdk-core';
import * as testData from '../../resources/near';
describe('NEAR Transaction Builder', async () => {
let builders;
const factory = getBuilderFactory('tnear');
beforeEach(function (done) {
builders = [factory.getTransferBuilder()];
done();
});
it('start and build an empty a transfer tx', async () => {
const txBuilder = factory.getTransferBuilder();
txBuilder.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey);
txBuilder.nonce(1);
txBuilder.receiverId(testData.accounts.account2.address);
txBuilder.recentBlockHash(testData.blockHash.block1);
txBuilder.amount(testData.AMOUNT);
const tx = await txBuilder.build();
should.equal(tx.type, TransactionType.Send);
const txBroadcast = tx.toBroadcastFormat();
should.equal(txBroadcast, testData.rawTx.transfer.unsigned);
});
it('build and sign a transfer tx', async () => {
const txBuilder = factory.getTransferBuilder();
txBuilder.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey);
txBuilder.nonce(1);
txBuilder.receiverId(testData.accounts.account2.address);
txBuilder.recentBlockHash(testData.blockHash.block1);
txBuilder.amount(testData.AMOUNT);
txBuilder.sign({ key: testData.accounts.account1.secretKey });
const tx = await txBuilder.build();
should.equal(tx.type, TransactionType.Send);
const txBroadcast = tx.toBroadcastFormat();
should.equal(txBroadcast, testData.rawTx.transfer.signed);
});
it('should fail to build if missing sender', async () => {
for (const txBuilder of builders) {
txBuilder.nonce(1);
txBuilder.receiverId(testData.accounts.account2.address);
txBuilder.recentBlockHash(testData.blockHash.block1);
txBuilder.amount(testData.AMOUNT);
await txBuilder.build().should.rejectedWith('sender is required before building');
}
});
it('build a send from rawTx', async () => {
const txBuilder = factory.from(testData.rawTx.transfer.unsigned);
const builtTx = await txBuilder.build();
should.equal(builtTx.type, TransactionType.Send);
should.equal(builtTx.id, '5jTEPuDcMCeEgp1iyEbNBKsnhYz4F4c1EPDtRmxm3wCw');
builtTx.inputs.length.should.equal(1);
builtTx.inputs[0].should.deepEqual({
address: testData.accounts.account1.address,
value: testData.AMOUNT,
coin: 'tnear',
});
builtTx.outputs.length.should.equal(1);
builtTx.outputs[0].should.deepEqual({
address: testData.accounts.account2.address,
value: testData.AMOUNT,
coin: 'tnear',
});
const jsonTx = builtTx.toJson();
jsonTx.signerId.should.equal(testData.accounts.account1.address);
});
it('build a send from signed rawTx', async () => {
const txBuilder = factory.from(testData.rawTx.transfer.signed);
const builtTx = await txBuilder.build();
should.equal(builtTx.type, TransactionType.Send);
should.equal(builtTx.id, '5jTEPuDcMCeEgp1iyEbNBKsnhYz4F4c1EPDtRmxm3wCw');
builtTx.inputs.length.should.equal(1);
builtTx.inputs[0].should.deepEqual({
address: testData.accounts.account1.address,
value: testData.AMOUNT,
coin: 'tnear',
});
builtTx.outputs.length.should.equal(1);
builtTx.outputs[0].should.deepEqual({
address: testData.accounts.account2.address,
value: testData.AMOUNT,
coin: 'tnear',
});
const jsonTx = builtTx.toJson();
jsonTx.signerId.should.equal(testData.accounts.account1.address);
});
it('should fail to build if have invalid blockHash', async () => {
for (const txBuilder of builders) {
txBuilder.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey);
txBuilder.nonce(1);
txBuilder.receiverId(testData.accounts.account2.address);
assert.throws(
() => txBuilder.recentBlockHash(testData.errorBlockHash.block1),
new RegExp('Invalid blockHash CDEwwp7TjjahErrorriSvX3457qZ5uF3TtgEZHj7o5ssKFNs9')
);
}
});
it('should fail to build if have invalid nonce', async () => {
for (const txBuilder of builders) {
txBuilder.sender(testData.accounts.account1.address, testData.accounts.account1.publicKey);
assert.throws(() => txBuilder.nonce(-1), /Invalid nonce: -1/);
}
});
it('should fail to build if have undefined address', async () => {
for (const txBuilder of builders) {
assert.throws(
() => txBuilder.sender(testData.accounts.account1.publicKey),
new RegExp('Invalid or missing pubKey, got: undefined')
);
}
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!