UNPKG

@tatumio/tatum-v1

Version:

Tatum API client allows browsers and Node.js clients to interact with Tatum API.

249 lines 20.2 kB
"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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