UNPKG

@tatumio/tatum-v1

Version:

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

317 lines 27.6 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 bsc_1 = require("./bsc"); const erc721Provenance_abi_1 = __importDefault(require("../contracts/erc721Provenance/erc721Provenance_abi")); describe('BSC transactions', () => { jest.setTimeout(19999); const broadcast = async (txData) => { const client = new web3_1.default('https://data-seed-prebsc-2-s1.binance.org:8545'); 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 BSC data', async () => { const body = new model_1.TransferBscBep20(); body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; body.amount = '0'; body.currency = model_1.Currency.BSC; body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9'; const txData = await bsc_1.prepareBscOrBep20SignedTransaction(body); expect(txData).toContain('0x'); console.log(await broadcast(txData)); }); it('should test valid transaction ERC20 data', async () => { const body = new model_1.TransferBscBep20(); body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; body.amount = '0'; body.currency = model_1.Currency.BADA; body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9'; const txData = await bsc_1.prepareBscOrBep20SignedTransaction(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 = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9'; body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9'; body.digits = 10; const txData = await bsc_1.prepareCustomBep20SignedTransaction(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 = '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564'; body.symbol = 'SYMBOL'; body.name = 'Test_ERC20'; body.supply = '100'; body.address = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9'; body.digits = 10; const txData = await bsc_1.prepareDeployBep20SignedTransaction(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 = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9'; body.digits = 10; try { await bsc_1.prepareDeployBep20SignedTransaction(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 = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9'; body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9'; try { await bsc_1.prepareCustomBep20SignedTransaction(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.TransferBscBep20(); body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; body.amount = '0'; body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9'; try { await bsc_1.prepareBscOrBep20SignedTransaction(body); fail('Validation did not pass.'); } catch (e) { console.error(e); } }); it('should test ethGetGasPriceInWei', async () => { const gasPrice = await bsc_1.bscGetGasPriceInWei(); expect(gasPrice).not.toBeNull(); }); it('should test read smart contract method invocation', async () => { const result = await bsc_1.sendBscSmartContractReadMethodInvocationTransaction({ contractAddress: '0xae13d989dac2f0debff460ac112a837c89baa7cd', methodName: 'balanceOf', methodABI: { constant: true, inputs: [ { name: 'owner', type: 'address', }, ], name: 'balanceOf', outputs: [ { name: '', type: 'uint256', }, ], payable: false, stateMutability: 'view', type: 'function', }, params: ['0x9ac64cc6e4415144c455bd8e4837fea55603e5c3'], }, 'https://data-seed-prebsc-2-s1.binance.org:8545'); console.log(result); expect(result).not.toBeNull(); }); it('should test write smart contract method invocation', async () => { const result = await bsc_1.sendBscSmartContractMethodInvocationTransaction({ fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', contractAddress: '0xd7d3e5e2174b530fdfb6d680c07c8b34495e2195', 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: ['0x811dfbff13adfbc3cf653dcc373c03616d3471c9', '0x8c76887d2e738371bd750362fb55887343472346', '1'], }); expect(result).not.toBeNull(); }); it('should test bep 721 mint transaction', async () => { try { const tokenId = new Date().getTime().toString(); const mintedToken = await bsc_1.sendMintBep721Transaction({ to: '0x811dfbff13adfbc3cf653dcc373c03616d3471c9', tokenId, url: 'https://www.seznam.cz', fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564', chain: model_1.Currency.BSC, contractAddress: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85', }); console.log(tokenId); expect(mintedToken).not.toBeNull(); } catch (e) { console.log(e); } }); it('should test bep 721 mint multiple transaction', async () => { const firstTokenId = new Date().getTime(); const secondTokenId = firstTokenId + 1; const mintedTokens = await bsc_1.sendMintMultipleBep721Transaction({ to: ['0x811dfbff13adfbc3cf653dcc373c03616d3471c9', '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'], tokenId: [firstTokenId.toString(), secondTokenId.toString()], url: ['https://www.seznam.cz', 'https://www.seznam.cz'], fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', chain: model_1.Currency.BSC, contractAddress: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85', fee: { gasLimit: '50000', gasPrice: '100', }, }); expect(mintedTokens).not.toBeNull(); }); it('should test bep 721 burn transaction', async () => { const burnBep721Token = await bsc_1.sendBurnBep721Transaction({ tokenId: '1615552558810', fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', chain: model_1.Currency.BSC, contractAddress: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85', fee: { gasLimit: '5000000', gasPrice: '110', }, }); expect(burnBep721Token).not.toBeNull(); }); it('should test bep 721 send transaction', async () => { const sendBep721Token = await bsc_1.sendBep721Transaction({ to: '0x811dfbff13adfbc3cf653dcc373c03616d3471c9', tokenId: '1615546122766', fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', chain: model_1.Currency.BSC, contractAddress: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85', fee: { gasLimit: '5000000', gasPrice: '100', }, }); expect(sendBep721Token).not.toBeNull(); }); it('should test bep 721 deploy transaction', async () => { const deployBep721Token = await bsc_1.sendDeployBep721Transaction({ symbol: '1oido3id3', fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', chain: model_1.Currency.BSC, name: '2123kd', }); expect(deployBep721Token).not.toBeNull(); }); // BEP-721 Provenance it('should test bep 721 deploy transaction', async () => { const deployBep721Token = await bsc_1.prepareBscDeployBep721SignedTransaction({ symbol: 'test123', fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', chain: model_1.Currency.BSC, name: 'test123', provenance: true, }); console.log(deployBep721Token); expect(deployBep721Token).not.toBeNull(); }); it('should test bep 721 mint transaction', async () => { try { const mintedToken = await bsc_1.prepareBscMintBep721ProvenanceSignedTransaction({ to: '0x811dfbff13adfbc3cf653dcc373c03616d3471c9', tokenId: '100', url: 'https://www.seznam.cz', fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', chain: model_1.Currency.BSC, contractAddress: '0x5ef08fba01e8d80ff18f4d98e31a43fbb01e7f8a', }); console.log(mintedToken); expect(mintedToken).not.toBeNull(); } catch (e) { console.log(e); } }); it('should test bep 721 mint multiple provenance token with cashback transaction', async () => { const firstTokenId = new Date().getTime(); const secondTokenId = firstTokenId + 1; const thirdTokenId = firstTokenId + 2; const mintedTokens = await bsc_1.prepareBscMintMultipleBep721ProvenanceSignedTransaction({ to: ['0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF', '0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF', '0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF'], tokenId: [firstTokenId.toString(), secondTokenId.toString(), thirdTokenId.toString()], url: ['https://www.seznam.cz', 'https://www.seznam.cz', 'https://www.seznam.cz'], cashbackValues: [['3'], ['4'], ['5']], authorAddresses: [['0xD25031B1aB4D82e5fDFb700234b2a22e272232Be'], ['0xD25031B1aB4D82e5fDFb700234b2a22e272232Be'], ['0xD25031B1aB4D82e5fDFb700234b2a22e272232Be']], fixedValues: [['10'], ['10'], ['10']], fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', chain: model_1.Currency.BSC, contractAddress: '0x5ef08fba01e8d80ff18f4d98e31a43fbb01e7f8a', }); console.log(mintedTokens); expect(mintedTokens).not.toBeNull(); }); it('should test bep 721 provenance send transaction', async () => { const sendBep721Token = await bsc_1.prepareBscTransferBep721SignedTransaction({ to: '0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF', tokenId: '100', fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', chain: model_1.Currency.BSC, provenanceData: 'send token X', tokenPrice: '123', provenance: true, contractAddress: '0x5ef08fba01e8d80ff18f4d98e31a43fbb01e7f8a', }); expect(sendBep721Token).not.toBeNull(); }); it('should test valid transfer data 721 transaction', async () => { const body = new model_1.SmartContractReadMethodInvocation(); body.contractAddress = '0x5ef08fba01e8d80ff18f4d98e31a43fbb01e7f8a'; body.params = ['10']; body.methodName = 'getTokenData'; body.methodABI = erc721Provenance_abi_1.default.find((a) => a.name === 'getTokenData'); const response = await bsc_1.sendBscSmartContractReadMethodInvocationTransaction(body); // @ts-ignore console.log(JSON.stringify(response)); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnNjLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vYnNjLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBd0I7QUFDeEIsb0NBQXFIO0FBQ3JILCtCQWdCZTtBQUNmLDhHQUFzRjtBQUV0RixRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLE1BQWMsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksY0FBSSxDQUFDLGdEQUFnRCxDQUFDLENBQUE7UUFDekUsTUFBTSxNQUFNLEdBQXFCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7aUJBQ3JDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ2xELEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNoRyxDQUFDLENBQUMsQ0FBQTtRQUNGLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQyxDQUFBO0lBQ0QsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksd0JBQWdCLEVBQUUsQ0FBQTtRQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLG9FQUFvRSxDQUFBO1FBQzFGLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFBO1FBQ2pC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