@tatumio/transaction-simulator
Version:
Transaction Simulation Extension
147 lines • 6.42 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const tatum_1 = require("@tatumio/tatum");
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const extension_1 = require("./extension");
const testData = [{
network: tatum_1.Network.ETHEREUM,
native: {
fromAddress: '0xDce92f40cAdDE2C4e3EA78b8892c540e6bFe2f81',
toAddress: '0x0Ae9E7437092BB7E7Bd6Eccf0eF1ad05591f5B47'
},
token: {
fromAddress: '0xDce92f40cAdDE2C4e3EA78b8892c540e6bFe2f81',
toAddress: '0xaf758da9f7bdaa7590175193388e9c99427cc2d2',
tokenContractAddress: '0xdac17f958d2ee523a2206206994597c13d831ec7',
data: '0xa9059cbb000000000000000000000000af758da9f7bdaa7590175193388e9c99427cc2d200000000000000000000000000000000000000000000000000000000001e8480',
details: {
name: 'TetherUSD',
symbol: 'USDT',
decimals: 6,
}
}
},
{
network: tatum_1.Network.CHILIZ,
native: {
fromAddress: '0x72917f88100893b3ba5a3d338c9176621ac3a01d',
toAddress: '0x3a7927bf4870309efc957b30ef9a655292369515'
},
token: {
fromAddress: '0xaaADB5a0bD733CDb9c1f61Be20Ed648D2809b476',
toAddress: '0xce04d9bcfe631fdfc1ba23c42b5c72a2f2c3872d',
tokenContractAddress: '0xd1723eb9e7c6ee7c7e2d421b2758dc0f2166eddc',
data: '0xa9059cbb000000000000000000000000ce04d9bcfe631fdfc1ba23c42b5c72a2f2c3872d0000000000000000000000000000000000000000000000000000000000000002',
details: {
name: 'Flamengo',
symbol: 'MENGO',
decimals: 0,
}
}
}
];
describe.each(testData)('Transaction Simulator - $network', (testData) => {
let tatumSdk;
beforeAll(async () => {
tatumSdk = await tatum_1.TatumSDK.init({
network: testData.network,
configureExtensions: [extension_1.TransactionSimulator],
verbose: true,
});
});
afterAll(async () => {
await tatumSdk.destroy();
});
describe('simulateTransfer', () => {
it('should simulate native transaction', async () => {
const fromAddress = testData.native.fromAddress;
const toAddress = testData.native.toAddress;
const value = 10000;
const txRequest = {
from: fromAddress,
to: toAddress,
value: value,
};
const result = await tatumSdk.extension(extension_1.TransactionSimulator).simulateTransfer(txRequest);
expect(result).toEqual({
transactionDetails: {
from: fromAddress,
to: toAddress,
value: value,
gasLimit: expect.any(Number),
gasPrice: expect.any(Number),
},
status: 'success',
balanceChanges: {
[fromAddress]: {
from: expect.any(bignumber_js_1.default),
to: expect.any(bignumber_js_1.default),
},
[toAddress]: {
from: expect.any(bignumber_js_1.default),
to: expect.any(bignumber_js_1.default),
},
},
});
expect(result.balanceChanges[fromAddress].from.minus(result.balanceChanges[fromAddress].to).toNumber()).toBeGreaterThanOrEqual(value);
expect(result.balanceChanges[toAddress].to.minus(result.balanceChanges[toAddress].from).toNumber()).toBe(value);
});
});
describe('simulateTransferErc20', () => {
it('should simulate token transaction', async () => {
const fromAddress = testData.token.fromAddress;
const toAddress = testData.token.toAddress;
const value = 2;
const tokenContractAddress = testData.token.tokenContractAddress;
const txRequest = {
from: fromAddress,
to: toAddress,
value: value,
tokenContractAddress: tokenContractAddress,
};
const result = await tatumSdk.extension(extension_1.TransactionSimulator).simulateTransferErc20(txRequest);
expect(result).toEqual({
transactionDetails: {
from: fromAddress,
to: toAddress,
data: testData.token.data,
gasLimit: expect.any(Number),
gasPrice: expect.any(Number),
tokenContractAddress: tokenContractAddress,
},
status: 'success',
balanceChanges: {
[fromAddress]: {
from: expect.any(bignumber_js_1.default),
to: expect.any(bignumber_js_1.default),
},
},
tokenTransfers: {
[tokenContractAddress]: {
name: testData.token.details.name,
symbol: testData.token.details.symbol,
decimals: testData.token.details.decimals,
[fromAddress]: {
from: expect.any(bignumber_js_1.default),
to: expect.any(bignumber_js_1.default),
},
[toAddress]: {
from: expect.any(bignumber_js_1.default),
to: expect.any(bignumber_js_1.default),
},
},
},
});
expect(result.tokenTransfers[tokenContractAddress][fromAddress].from
.minus(result.tokenTransfers[tokenContractAddress][fromAddress].to)
.toNumber()).toBe(value);
expect(result.tokenTransfers[tokenContractAddress][toAddress].to
.minus(result.tokenTransfers[tokenContractAddress][toAddress].from)
.toNumber()).toBe(value);
});
});
});
//# sourceMappingURL=extension.spec.js.map