PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-apt/test/unit/transactionBuilder
Просмотр файла: transferBuilder.ts
import { coins } from '@bitgo/statics';
import { TransactionBuilderFactory, TransferTransaction } from '../../../src';
import * as testData from '../../resources/apt';
import { TransactionType } from '@bitgo/sdk-core';
import should from 'should';
describe('Apt Transfer Transaction', () => {
const factory = new TransactionBuilderFactory(coins.get('tapt'));
describe('Aptos Coin Transfer Transaction', () => {
describe('Succeed', () => {
it('should build a transfer tx', async function () {
const transaction = new TransferTransaction(coins.get('tapt'));
const txBuilder = factory.getTransferBuilder(transaction);
txBuilder.sender(testData.sender2.address);
txBuilder.recipients(testData.recipients);
txBuilder.gasData({
maxGasAmount: 200000,
gasUnitPrice: 100,
});
txBuilder.sequenceNumber(14);
txBuilder.expirationTime(1736246155);
txBuilder.addFeePayerAddress(testData.feePayer.address);
txBuilder.setIsSimulateTxn(true);
const tx = (await txBuilder.build()) as TransferTransaction;
should.equal(tx.sender, testData.sender2.address);
should.equal(tx.recipients[0].address, testData.recipients[0].address);
should.equal(tx.recipients[0].amount, testData.recipients[0].amount);
should.equal(tx.recipient.address, testData.recipients[0].address);
should.equal(tx.recipients[0].amount, testData.recipients[0].amount);
should.equal(tx.recipient.amount, testData.recipients[0].amount);
should.equal(tx.maxGasAmount, 200000);
should.equal(tx.gasUnitPrice, 100);
should.equal(tx.sequenceNumber, 14);
should.equal(tx.expirationTime, 1736246155);
should.equal(tx.type, TransactionType.Send);
tx.inputs.length.should.equal(1);
tx.inputs[0].should.deepEqual({
address: testData.sender2.address,
value: testData.recipients[0].amount,
coin: 'tapt',
});
tx.outputs.length.should.equal(1);
tx.outputs[0].should.deepEqual({
address: testData.recipients[0].address,
value: testData.recipients[0].amount,
coin: 'tapt',
});
const rawTx = tx.toBroadcastFormat();
should.equal(txBuilder.isValidRawTransaction(rawTx), true);
rawTx.should.equal(
'0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e740e7472616e736665725f636f696e73010700000000000000000000000000000000000000000000000000000000000000010a6170746f735f636f696e094170746f73436f696e000220f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad908e803000000000000400d03000000000064000000000000008b037d67000000000203040000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f204'
);
});
it('should build and send a signed tx', async function () {
const txBuilder = factory.from(testData.TRANSACTION_USING_TRANSFER_COINS);
txBuilder.getSequenceNumber().should.equal(146);
const tx = (await txBuilder.build()) as TransferTransaction;
should.equal(tx.type, TransactionType.Send);
tx.inputs.length.should.equal(1);
tx.inputs[0].should.deepEqual({
address: testData.sender2.address,
value: testData.recipients[0].amount,
coin: 'tapt',
});
tx.outputs.length.should.equal(1);
tx.outputs[0].should.deepEqual({
address: testData.recipients[0].address,
value: testData.recipients[0].amount,
coin: 'tapt',
});
should.equal(tx.id, '0x249289a8178e4b9cdb89fad6e8e436ccc435753e4ea3c9d50e0c8b525582e90d');
should.equal(tx.maxGasAmount, 200000);
should.equal(tx.gasUnitPrice, 100);
should.equal(tx.sequenceNumber, 146);
should.equal(tx.expirationTime, 1737528215);
should.equal(tx.type, TransactionType.Send);
const rawTx = tx.toBroadcastFormat();
should.equal(txBuilder.isValidRawTransaction(rawTx), true);
should.equal(rawTx, testData.TRANSACTION_USING_TRANSFER_COINS);
});
it('should succeed to validate a valid signablePayload', async function () {
const transaction = new TransferTransaction(coins.get('tapt'));
const txBuilder = factory.getTransferBuilder(transaction);
txBuilder.sender(testData.sender2.address);
txBuilder.recipients(testData.recipients);
txBuilder.gasData({
maxGasAmount: 200000,
gasUnitPrice: 100,
});
txBuilder.sequenceNumber(14);
txBuilder.expirationTime(1736246155);
txBuilder.addFeePayerAddress(testData.feePayer.address);
const tx = (await txBuilder.build()) as TransferTransaction;
const signablePayload = tx.signablePayload;
should.equal(
signablePayload.toString('hex'),
'5efa3c4f02f83a0f4b2d69fc95c607cc02825cc4e7be536ef0992df050d9e67c011aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e740e7472616e736665725f636f696e73010700000000000000000000000000000000000000000000000000000000000000010a6170746f735f636f696e094170746f73436f696e000220f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad908e803000000000000400d03000000000064000000000000008b037d67000000000200dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f2'
);
});
it('should build a unsigned tx and validate its toJson', async function () {
const transaction = new TransferTransaction(coins.get('tapt'));
const txBuilder = factory.getTransferBuilder(transaction);
txBuilder.sender(testData.sender2.address);
txBuilder.recipients(testData.recipients);
txBuilder.gasData({
maxGasAmount: 200000,
gasUnitPrice: 100,
});
txBuilder.sequenceNumber(14);
txBuilder.expirationTime(1736246155);
txBuilder.addFeePayerAddress(testData.feePayer.address);
const tx = (await txBuilder.build()) as TransferTransaction;
const toJson = tx.toJson();
should.equal(toJson.sender, testData.sender2.address);
should.deepEqual(toJson.recipients, [
{
address: testData.recipients[0].address,
amount: testData.recipients[0].amount,
},
]);
should.deepEqual(toJson.recipient, {
address: testData.recipients[0].address,
amount: testData.recipients[0].amount,
});
should.equal(toJson.sequenceNumber, 14);
should.equal(toJson.maxGasAmount, 200000);
should.equal(toJson.gasUnitPrice, 100);
should.equal(toJson.expirationTime, 1736246155);
should.equal(toJson.feePayer, testData.feePayer.address);
});
it('should build a signed tx and validate its toJson', async function () {
const txBuilder = factory.from(testData.TRANSACTION_USING_TRANSFER_COINS);
const tx = (await txBuilder.build()) as TransferTransaction;
const toJson = tx.toJson();
should.equal(toJson.id, '0x249289a8178e4b9cdb89fad6e8e436ccc435753e4ea3c9d50e0c8b525582e90d');
should.equal(toJson.sender, '0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a372449');
should.deepEqual(toJson.recipients, [
{
address: '0xf7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad9',
amount: '1000',
},
]);
should.deepEqual(toJson.recipient, {
address: '0xf7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad9',
amount: '1000',
});
should.equal(toJson.sequenceNumber, 146);
should.equal(toJson.maxGasAmount, 200000);
should.equal(toJson.gasUnitPrice, 100);
should.equal(toJson.expirationTime, 1737528215);
});
});
describe('Fail', () => {
it('should fail for invalid sender', async function () {
const transaction = new TransferTransaction(coins.get('tapt'));
const builder = factory.getTransferBuilder(transaction);
should(() => builder.sender('randomString')).throwError('Invalid address randomString');
});
it('should fail for invalid recipient', async function () {
const builder = factory.getTransferBuilder();
should(() => builder.recipients([testData.invalidRecipients[0]])).throwError('Invalid address randomString');
should(() => builder.recipients([testData.invalidRecipients[1]])).throwError('Value cannot be less than zero');
should(() => builder.recipients([testData.invalidRecipients[2]])).throwError('Invalid amount format');
});
it('should fail for invalid gas amount', async function () {
const builder = factory.getTransferBuilder();
should(() => builder.gasData({ maxGasAmount: -1, gasUnitPrice: 100 })).throwError(
'Value cannot be less than zero'
);
should(() => builder.gasData({ maxGasAmount: 200000, gasUnitPrice: -1 })).throwError(
'Value cannot be less than zero'
);
});
});
});
describe('Legacy Coin Transfer Transaction', () => {
it('should build a coinz (legacy coin) transfer tx', async function () {
const transaction = new TransferTransaction(coins.get('tapt'));
const txBuilder = factory.getTransferBuilder(transaction);
txBuilder.sender(testData.sender2.address);
txBuilder.recipients(testData.recipients);
txBuilder.gasData({
maxGasAmount: 200000,
gasUnitPrice: 100,
});
txBuilder.sequenceNumber(14);
txBuilder.expirationTime(1736246155);
txBuilder.assetId(testData.LEGACY_COIN);
txBuilder.addFeePayerAddress(testData.feePayer.address);
txBuilder.setIsSimulateTxn(true);
const tx = (await txBuilder.build()) as TransferTransaction;
should.equal(tx.sender, testData.sender2.address);
should.equal(tx.recipients[0].address, testData.recipients[0].address);
should.equal(tx.recipients[0].amount, testData.recipients[0].amount);
should.equal(tx.maxGasAmount, 200000);
should.equal(tx.gasUnitPrice, 100);
should.equal(tx.sequenceNumber, 14);
should.equal(tx.expirationTime, 1736246155);
should.equal(tx.type, TransactionType.Send);
tx.inputs.length.should.equal(1);
tx.inputs[0].should.deepEqual({
address: testData.sender2.address,
value: testData.recipients[0].amount,
coin: 'tapt',
});
tx.outputs.length.should.equal(1);
tx.outputs[0].should.deepEqual({
address: testData.recipients[0].address,
value: testData.recipients[0].amount,
coin: 'tapt',
});
const rawTx = tx.toBroadcastFormat();
should.equal(txBuilder.isValidRawTransaction(rawTx), true);
rawTx.should.equal(
'0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e740e7472616e736665725f636f696e7301074fb379c10c763a13e724064ecfb7d946690bea519ba982c81b518d1c11dd23fe0766615f7465737405436f696e7a000220f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad908e803000000000000400d03000000000064000000000000008b037d67000000000203040000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f204'
);
});
it('should succeed to validate a valid signablePayload for coinz (legacy coin)', async function () {
const transaction = new TransferTransaction(coins.get('tapt'));
const txBuilder = factory.getTransferBuilder(transaction);
txBuilder.sender(testData.sender2.address);
txBuilder.recipients(testData.recipients);
txBuilder.gasData({
maxGasAmount: 200000,
gasUnitPrice: 100,
});
txBuilder.sequenceNumber(14);
txBuilder.expirationTime(1736246155);
txBuilder.assetId(testData.LEGACY_COIN);
txBuilder.addFeePayerAddress(testData.feePayer.address);
const tx = (await txBuilder.build()) as TransferTransaction;
const signablePayload = tx.signablePayload;
should.equal(
signablePayload.toString('hex'),
'5efa3c4f02f83a0f4b2d69fc95c607cc02825cc4e7be536ef0992df050d9e67c011aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e740e7472616e736665725f636f696e7301074fb379c10c763a13e724064ecfb7d946690bea519ba982c81b518d1c11dd23fe0766615f7465737405436f696e7a000220f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad908e803000000000000400d03000000000064000000000000008b037d67000000000200dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f2'
);
});
it('should build a coinz (legacy coin) unsigned tx and validate its toJson', async function () {
const transaction = new TransferTransaction(coins.get('tapt'));
const txBuilder = factory.getTransferBuilder(transaction);
txBuilder.sender(testData.sender2.address);
txBuilder.recipients(testData.recipients);
txBuilder.gasData({
maxGasAmount: 200000,
gasUnitPrice: 100,
});
txBuilder.sequenceNumber(14);
txBuilder.expirationTime(1736246155);
txBuilder.assetId(testData.LEGACY_COIN);
txBuilder.addFeePayerAddress(testData.feePayer.address);
const tx = (await txBuilder.build()) as TransferTransaction;
const toJson = tx.toJson();
should.equal(toJson.sender, testData.sender2.address);
should.deepEqual(toJson.recipients, [
{
address: testData.recipients[0].address,
amount: testData.recipients[0].amount,
},
]);
should.equal(toJson.sequenceNumber, 14);
should.equal(toJson.maxGasAmount, 200000);
should.equal(toJson.gasUnitPrice, 100);
should.equal(toJson.expirationTime, 1736246155);
should.equal(toJson.feePayer, testData.feePayer.address);
});
});
describe('should test for deprecated field recipient in building transaction, without usage of recipients', () => {
it('should build a transfer tx', async function () {
const transaction = new TransferTransaction(coins.get('tapt'));
const txBuilder = factory.getTransferBuilder(transaction);
txBuilder.sender(testData.sender2.address);
txBuilder.recipient(testData.recipients[0]);
txBuilder.gasData({
maxGasAmount: 200000,
gasUnitPrice: 100,
});
txBuilder.sequenceNumber(14);
txBuilder.expirationTime(1736246155);
txBuilder.addFeePayerAddress(testData.feePayer.address);
txBuilder.setIsSimulateTxn(true);
const tx = (await txBuilder.build()) as TransferTransaction;
should.equal(tx.sender, testData.sender2.address);
should.equal(tx.recipient.address, testData.recipients[0].address);
should.equal(tx.recipient.amount, testData.recipients[0].amount);
should.equal(tx.maxGasAmount, 200000);
should.equal(tx.gasUnitPrice, 100);
should.equal(tx.sequenceNumber, 14);
should.equal(tx.expirationTime, 1736246155);
should.equal(tx.type, TransactionType.Send);
tx.inputs.length.should.equal(1);
tx.inputs[0].should.deepEqual({
address: testData.sender2.address,
value: testData.recipients[0].amount,
coin: 'tapt',
});
tx.outputs.length.should.equal(1);
tx.outputs[0].should.deepEqual({
address: testData.recipients[0].address,
value: testData.recipients[0].amount,
coin: 'tapt',
});
const rawTx = tx.toBroadcastFormat();
should.equal(txBuilder.isValidRawTransaction(rawTx), true);
rawTx.should.equal(
'0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e740e7472616e736665725f636f696e73010700000000000000000000000000000000000000000000000000000000000000010a6170746f735f636f696e094170746f73436f696e000220f7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad908e803000000000000400d03000000000064000000000000008b037d67000000000203040000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f204'
);
const toJson = tx.toJson();
should.equal(toJson.sender, testData.sender2.address);
should.deepEqual(toJson.recipient, {
address: testData.recipients[0].address,
amount: testData.recipients[0].amount,
});
should.equal(toJson.sequenceNumber, 14);
should.equal(toJson.maxGasAmount, 200000);
should.equal(toJson.gasUnitPrice, 100);
should.equal(toJson.expirationTime, 1736246155);
should.equal(toJson.feePayer, testData.feePayer.address);
});
it('should build and send a signed tx', async function () {
const txBuilder = factory.from(testData.TRANSACTION_USING_TRANSFER_COINS);
txBuilder.getSequenceNumber().should.equal(146);
const tx = (await txBuilder.build()) as TransferTransaction;
should.equal(tx.type, TransactionType.Send);
tx.inputs.length.should.equal(1);
tx.inputs[0].should.deepEqual({
address: testData.sender2.address,
value: testData.recipients[0].amount,
coin: 'tapt',
});
tx.outputs.length.should.equal(1);
tx.outputs[0].should.deepEqual({
address: testData.recipients[0].address,
value: testData.recipients[0].amount,
coin: 'tapt',
});
should.equal(tx.id, '0x249289a8178e4b9cdb89fad6e8e436ccc435753e4ea3c9d50e0c8b525582e90d');
should.equal(tx.maxGasAmount, 200000);
should.equal(tx.gasUnitPrice, 100);
should.equal(tx.sequenceNumber, 146);
should.equal(tx.expirationTime, 1737528215);
should.equal(tx.type, TransactionType.Send);
const rawTx = tx.toBroadcastFormat();
should.equal(txBuilder.isValidRawTransaction(rawTx), true);
should.equal(rawTx, testData.TRANSACTION_USING_TRANSFER_COINS);
const toJson = tx.toJson();
should.equal(toJson.id, '0x249289a8178e4b9cdb89fad6e8e436ccc435753e4ea3c9d50e0c8b525582e90d');
should.equal(toJson.sender, '0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a372449');
should.deepEqual(toJson.recipient, {
address: '0xf7405c28a02cf5bab4ea4498240bb3579db45951794eb1c843bef0534c093ad9',
amount: '1000',
});
should.equal(toJson.sequenceNumber, 146);
should.equal(toJson.maxGasAmount, 200000);
should.equal(toJson.gasUnitPrice, 100);
should.equal(toJson.expirationTime, 1737528215);
});
});
describe('Batch Transfer', () => {
it('should build a batch transfer tx', async function () {
const transaction = new TransferTransaction(coins.get('tapt'));
const txBuilder = factory.getTransferBuilder(transaction);
txBuilder.sender(testData.sender2.address);
txBuilder.recipients(testData.batchRecipients);
txBuilder.gasData({
maxGasAmount: 200000,
gasUnitPrice: 100,
});
txBuilder.sequenceNumber(14);
txBuilder.expirationTime(1736246155);
txBuilder.addFeePayerAddress(testData.feePayer.address);
txBuilder.setIsSimulateTxn(true);
const tx = (await txBuilder.build()) as TransferTransaction;
should.equal(tx.sender, '0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a372449');
should.equal(tx.recipients[0].address, '0xdd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b849');
should.equal(tx.recipients[0].amount, '1000');
should.equal(tx.recipients[1].address, '0x2a81760d52db9a96df2609860218214b6d1012e77e84a3fed5145a9a65bf6932');
should.equal(tx.recipients[1].amount, '1000');
should.equal(tx.maxGasAmount, 200000);
should.equal(tx.gasUnitPrice, 100);
should.equal(tx.sequenceNumber, 14);
should.equal(tx.expirationTime, 1736246155);
should.equal(tx.type, TransactionType.Send);
tx.inputs.length.should.equal(1);
tx.inputs[0].should.deepEqual({
address: '0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a372449',
value: '2000',
coin: 'tapt',
});
tx.outputs.length.should.equal(2);
tx.outputs[0].should.deepEqual({
address: '0xdd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b849',
value: '1000',
coin: 'tapt',
});
tx.outputs[1].should.deepEqual({
address: '0x2a81760d52db9a96df2609860218214b6d1012e77e84a3fed5145a9a65bf6932',
value: '1000',
coin: 'tapt',
});
const rawTx = tx.toBroadcastFormat();
should.equal(txBuilder.isValidRawTransaction(rawTx), true);
should.equal(
rawTx,
'0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e741462617463685f7472616e736665725f636f696e73010700000000000000000000000000000000000000000000000000000000000000010a6170746f735f636f696e094170746f73436f696e00024102dd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b8492a81760d52db9a96df2609860218214b6d1012e77e84a3fed5145a9a65bf69321102e803000000000000e803000000000000400d03000000000064000000000000008b037d67000000000203040000dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f204'
);
});
it('should succeed to validate a valid signablePayload', async function () {
const transaction = new TransferTransaction(coins.get('tapt'));
const txBuilder = factory.getTransferBuilder(transaction);
txBuilder.sender(testData.sender2.address);
txBuilder.recipients(testData.batchRecipients);
txBuilder.gasData({
maxGasAmount: 200000,
gasUnitPrice: 100,
});
txBuilder.sequenceNumber(14);
txBuilder.expirationTime(1736246155);
txBuilder.addFeePayerAddress(testData.feePayer.address);
const tx = (await txBuilder.build()) as TransferTransaction;
const signablePayload = tx.signablePayload;
should.equal(
signablePayload.toString('hex'),
'5efa3c4f02f83a0f4b2d69fc95c607cc02825cc4e7be536ef0992df050d9e67c011aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a3724490e000000000000000200000000000000000000000000000000000000000000000000000000000000010d6170746f735f6163636f756e741462617463685f7472616e736665725f636f696e73010700000000000000000000000000000000000000000000000000000000000000010a6170746f735f636f696e094170746f73436f696e00024102dd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b8492a81760d52db9a96df2609860218214b6d1012e77e84a3fed5145a9a65bf69321102e803000000000000e803000000000000400d03000000000064000000000000008b037d67000000000200dbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f2'
);
});
it('should build a unsigned tx and validate its toJson', async function () {
const transaction = new TransferTransaction(coins.get('tapt'));
const txBuilder = factory.getTransferBuilder(transaction);
txBuilder.sender(testData.sender2.address);
txBuilder.recipients(testData.batchRecipients);
txBuilder.gasData({
maxGasAmount: 200000,
gasUnitPrice: 100,
});
txBuilder.sequenceNumber(14);
txBuilder.expirationTime(1736246155);
txBuilder.addFeePayerAddress(testData.feePayer.address);
const tx = (await txBuilder.build()) as TransferTransaction;
const toJson = tx.toJson();
should.equal(toJson.sender, '0x1aed808916ab9b1b30b07abb53561afd46847285ce28651221d406173a372449');
should.deepEqual(toJson.recipients, [
{
address: '0xdd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b849',
amount: '1000',
},
{
address: '0x2a81760d52db9a96df2609860218214b6d1012e77e84a3fed5145a9a65bf6932',
amount: '1000',
},
]);
should.equal(toJson.sequenceNumber, 14);
should.equal(toJson.maxGasAmount, 200000);
should.equal(toJson.gasUnitPrice, 100);
should.equal(toJson.gasUsed, 0);
should.equal(toJson.expirationTime, 1736246155);
should.equal(toJson.feePayer, '0xdbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f2');
should.equal(toJson.assetId, '0x1::aptos_coin::AptosCoin');
});
it('should build and send a signed tx', async function () {
const txBuilder = factory.from(testData.COIN_BATCH_TRANSFER);
const tx = (await txBuilder.build()) as TransferTransaction;
should.equal(tx.type, TransactionType.Send);
tx.inputs.length.should.equal(1);
tx.inputs[0].should.deepEqual({
address: '0xc8f02d25aa698b3e9fbd8a08e8da4c8ee261832a25a4cde8731b5ec356537d09',
value: '2000',
coin: 'tapt',
});
tx.outputs.length.should.equal(2);
tx.outputs[0].should.deepEqual({
address: '0xdd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b849',
value: '1000',
coin: 'tapt',
});
tx.outputs[1].should.deepEqual({
address: '0x2a81760d52db9a96df2609860218214b6d1012e77e84a3fed5145a9a65bf6932',
value: '1000',
coin: 'tapt',
});
should.equal(tx.id, '0xf885489e4737a7ed2773bc11ba95994f2b2edc7d6b67d58e39bad76dd5d71c0c');
should.equal(tx.maxGasAmount, 200000);
should.equal(tx.gasUnitPrice, 100);
should.equal(tx.sequenceNumber, 81);
should.equal(tx.expirationTime, 1743442953);
should.equal(tx.type, TransactionType.Send);
const rawTx = tx.toBroadcastFormat();
should.equal(txBuilder.isValidRawTransaction(rawTx), true);
const toJson = tx.toJson();
should.equal(toJson.id, '0xf885489e4737a7ed2773bc11ba95994f2b2edc7d6b67d58e39bad76dd5d71c0c');
should.equal(toJson.sender, '0xc8f02d25aa698b3e9fbd8a08e8da4c8ee261832a25a4cde8731b5ec356537d09');
should.deepEqual(toJson.recipient, {
address: '0xdd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b849',
amount: '1000',
});
should.deepEqual(toJson.recipients, [
{
address: '0xdd52c0b72a73696b867d6571a308c413e43bff8f44956a5991abc4d50db0b849',
amount: '1000',
},
{
address: '0x2a81760d52db9a96df2609860218214b6d1012e77e84a3fed5145a9a65bf6932',
amount: '1000',
},
]);
should.equal(toJson.sequenceNumber, 81);
should.equal(toJson.maxGasAmount, 200000);
should.equal(toJson.gasUnitPrice, 100);
should.equal(toJson.expirationTime, 1743442953);
should.equal(toJson.feePayer, '0xdbc87a1c816d9bcd06b683c37e80c7162e4d48da7812198b830e4d5d8e0629f2');
should.equal(toJson.assetId, '0x1::aptos_coin::AptosCoin');
});
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!