@tatumio/tatum-v1
Version:
Tatum API client allows browsers and Node.js clients to interact with Tatum API.
249 lines • 20.2 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 web3_1 = __importDefault(require("web3"));
const model_1 = require("../model");
const xdc_1 = require("./xdc");
describe('XDC transactions', () => {
jest.setTimeout(19999);
const providerAddr = 'https://rpc.apothem.network/';
const broadcast = async (txData) => {
const client = new web3_1.default(providerAddr);
const result = await new Promise((resolve, reject) => {
client.eth.sendSignedTransaction(txData)
.once('transactionHash', txId => resolve({ txId }))
.on('error', e => reject(new Error(`Unable to broadcast transaction due to ${e.message}.`)));
});
return result;
};
it('should test valid transaction XDC data', async () => {
const body = new model_1.TransferErc20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '0';
body.to = 'xdc811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
const txData = await xdc_1.prepareXdcOrErc20SignedTransaction(body);
expect(txData).toContain('0x');
// console.log(await broadcast(txData));
});
it('should test valid transaction ERC20 data', async () => {
const body = new model_1.TransferErc20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '0';
body.to = 'xdc811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
const txData = await xdc_1.prepareXdcOrErc20SignedTransaction(body);
expect(txData).toContain('0x');
// console.log(await broadcast(txData));
});
it('should test valid custom transaction ERC20 data', async () => {
const body = new model_1.TransferErc20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '0';
body.contractAddress = 'xdc811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
body.to = 'xdc811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
body.digits = 10;
const txData = await xdc_1.prepareXdcCustomErc20SignedTransaction(body);
expect(txData).toContain('0x');
// console.log(await broadcast(txData));
});
it('should test valid custom deployment ERC20', async () => {
const body = new model_1.DeployErc20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.symbol = 'SYMBOL';
body.name = 'Test_ERC20';
body.supply = '100';
body.address = 'xdc811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
body.digits = 10;
const txData = await xdc_1.prepareXdcDeployErc20SignedTransaction(body);
expect(txData).toContain('0x');
// console.log(await broadcast(txData));
});
it('should test invalid custom deployment ERC20, missing supply', async () => {
const body = new model_1.DeployErc20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.symbol = 'SYMBOL';
body.name = 'Test_ERC20';
body.address = 'xdc811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
body.digits = 10;
try {
await xdc_1.prepareXdcDeployErc20SignedTransaction(body);
fail('Validation did not pass.');
}
catch (e) {
console.error(e);
}
});
it('should test invalid custom transaction ERC20 data, missing digits', async () => {
const body = new model_1.TransferErc20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '0';
body.contractAddress = 'xdc811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
body.to = 'xdc811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
try {
await xdc_1.prepareXdcCustomErc20SignedTransaction(body);
fail('Validation did not pass.');
}
catch (e) {
console.error(e);
}
});
it('should not test valid transaction data, missing currency', async () => {
const body = new model_1.TransferErc20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '0';
body.to = 'xdc811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
try {
await xdc_1.prepareXdcOrErc20SignedTransaction(body);
fail('Validation did not pass.');
}
catch (e) {
console.error(e);
}
});
it('should test ethGetGasPriceInWei', async () => {
const gasPrice = await xdc_1.xdcGetGasPriceInWei();
expect(gasPrice).not.toBeNull();
});
it('should test read smart contract method invocation', async () => {
const result = await xdc_1.sendXdcSmartContractReadMethodInvocationTransaction({
contractAddress: 'xdc595bad1621784e9b0161d909be0117f17a5d37ca',
methodName: 'balanceOf',
methodABI: {
constant: true,
inputs: [
{
name: 'owner',
type: 'address',
},
],
name: 'balanceOf',
outputs: [
{
name: '',
type: 'uint256',
},
],
payable: false,
stateMutability: 'view',
type: 'function',
},
params: ['xdc8c76887d2e738371bd750362fb55887343472346'],
});
console.log(result);
expect(result).not.toBeNull();
});
it('should test write smart contract method invocation', async () => {
const result = await xdc_1.sendXdcSmartContractMethodInvocationTransaction({
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
contractAddress: 'xdcd7d3e5e2174b530fdfb6d680c07c8b34495e2195',
fee: { gasLimit: '40000', gasPrice: '200' },
methodName: 'transferFrom',
methodABI: {
constant: false,
inputs: [
{
name: 'from',
type: 'address',
},
{
name: 'to',
type: 'address',
},
{
name: 'value',
type: 'uint256',
},
],
name: 'transferFrom',
outputs: [
{
name: '',
type: 'bool',
},
],
payable: false,
stateMutability: 'nonpayable',
type: 'function',
},
params: ['xdc811dfbff13adfbc3cf653dcc373c03616d3471c9', 'xdc8c76887d2e738371bd750362fb55887343472346', '1'],
});
expect(result).not.toBeNull();
});
it('should test ERC 721 mint transaction', async () => {
try {
const tokenId = new Date().getTime().toString();
const mintedToken = await xdc_1.sendXdcMintErc721Transaction({
to: 'xdc811dfbff13adfbc3cf653dcc373c03616d3471c9',
tokenId,
url: 'https://www.seznam.cz',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.XDC,
contractAddress: 'xdc687422eEA2cB73B5d3e242bA5456b782919AFc85',
fee: {
gasLimit: '50000',
gasPrice: '110'
}
});
console.log(tokenId);
expect(mintedToken).not.toBeNull();
}
catch (e) {
console.log(e);
}
});
it('should test ERC 721 mint multiple transaction', async () => {
const firstTokenId = new Date().getTime();
const secondTokenId = firstTokenId + 1;
const mintedTokens = await xdc_1.sendXdcMintMultipleErc721Transaction({
to: ['xdc811dfbff13adfbc3cf653dcc373c03616d3471c9', 'xdc811dfbff13adfbc3cf653dcc373c03616d3471c9'],
tokenId: [firstTokenId.toString(), secondTokenId.toString()],
url: ['https://www.seznam.cz', 'https://www.seznam.cz'],
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.XDC,
contractAddress: 'xdc687422eEA2cB73B5d3e242bA5456b782919AFc85',
fee: {
gasLimit: '50000',
gasPrice: '100'
}
});
expect(mintedTokens).not.toBeNull();
});
it('should test ERC 721 burn transaction', async () => {
const burnErc721Token = await xdc_1.sendXdcBurnErc721Transaction({
tokenId: '1615552558810',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.XDC,
contractAddress: 'xdc687422eEA2cB73B5d3e242bA5456b782919AFc85',
fee: {
gasLimit: '5000000',
gasPrice: '110'
},
});
expect(burnErc721Token).not.toBeNull();
});
it('should test ERC 721 send transaction', async () => {
const sendErc721Token = await xdc_1.sendXdcErc721Transaction({
to: 'xdc811dfbff13adfbc3cf653dcc373c03616d3471c9',
tokenId: '1615546122766',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.XDC,
contractAddress: 'xdc687422eEA2cB73B5d3e242bA5456b782919AFc85',
fee: {
gasLimit: '5000000',
gasPrice: '100'
}
});
expect(sendErc721Token).not.toBeNull();
});
it('should test ERC 721 deploy transaction', async () => {
const deployErc721Token = await xdc_1.sendXdcDeployErc721Transaction({
symbol: '1oido3id3',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.XDC,
name: '2123kd',
});
expect(deployErc721Token).not.toBeNull();
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGRjLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24veGRjLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBd0I7QUFDeEIsb0NBQThEO0FBQzlELCtCQVllO0FBRWYsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3RCLE1BQU0sWUFBWSxHQUFHLDhCQUE4QixDQUFBO0lBQ25ELE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNyQyxNQUFNLE1BQU0sR0FBcUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuRSxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztpQkFDbkMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztpQkFDaEQsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3BHLENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxNQUFNLENBQUE7SUFDakIsQ0FBQyxDQUFBO0lBRUQsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3BELE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQWEsRUFBRSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsb0VBQW9FLENBQUE7UUFDMUYsSUFBSSxDQUFDLE1BQU0sR0FB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