UNPKG

@tatumio/tatum-v1

Version:

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

317 lines 30.7 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 erc721Provenance_abi_1 = __importDefault(require("../contracts/erc721Provenance/erc721Provenance_abi")); const model_1 = require("../model"); const klaytn_1 = require("./klaytn"); describe('KLAY transactions', () => { jest.setTimeout(99999); const broadcast = async (txData) => { const client = new web3_1.default('https://api.baobab.klaytn.net:8651/'); return 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}.`))); }); }; describe('KLAY common transactions', () => { it('should test valid transaction KLAY data', async () => { const body = new model_1.TransferErc20(); body.fromPrivateKey = '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c'; body.amount = '0.0001'; body.currency = model_1.Currency.KLAY; body.to = '0xf7a771bb9f013381f388abe12b38e3634c4a8f89'; const txData = await klaytn_1.prepareKlaytnSignedTransaction(true, body, 'https://api.baobab.klaytn.net:8651/'); expect(txData).toContain('0x'); console.log(await broadcast(txData)); }); it('should test valid transaction KLAY store data', async () => { const body = new model_1.CreateRecord(); body.fromPrivateKey = '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c'; body.data = 'Hello hi'; body.chain = model_1.Currency.KLAY; const txData = await klaytn_1.prepareKlaytnStoreDataTransaction(true, body, 'https://api.baobab.klaytn.net:8651/'); expect(txData).toContain('0x'); console.log(await broadcast(txData)); }); it('should test read smart contract method invocation', async () => { const result = await klaytn_1.sendKlaytnSmartContractReadMethodInvocationTransaction(true, { contractAddress: '0xb506267c2f2976fc6b7e72e5d9d322916c32df98', methodName: 'balanceOf', methodABI: { constant: true, inputs: [ { name: 'owner', type: 'address', }, ], name: 'balanceOf', outputs: [ { name: '', type: 'uint256', }, ], payable: false, stateMutability: 'view', type: 'function', }, params: ['0xf7a771bb9f013381f388abe12b38e3634c4a8f89'], }, 'https://api.baobab.klaytn.net:8651/'); console.log(result); expect(result).not.toBeNull(); }); it('should test write smart contract method invocation', async () => { const result = await klaytn_1.prepareKlaytnSmartContractWriteMethodInvocation(true, { fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c', contractAddress: '0xb506267c2f2976fc6b7e72e5d9d322916c32df98', fee: { gasLimit: '100000', gasPrice: '25' }, methodName: 'transfer', methodABI: { constant: false, inputs: [ { name: 'to', type: 'address', }, { name: 'value', type: 'uint256', }, ], name: 'transfer', outputs: [ { name: '', type: 'bool', }, ], payable: false, stateMutability: 'nonpayable', type: 'function', }, params: ['0x8c76887d2e738371bd750362fb55887343472346', '1'], }, 'https://api.baobab.klaytn.net:8651/'); expect(result).not.toBeNull(); console.log(await broadcast(result)); }); }); describe('KLAY ERC20 transactions', () => { it('should test valid custom transaction ERC20 data', async () => { const body = new model_1.TransferErc20(); body.fromPrivateKey = '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c'; body.amount = '10'; body.contractAddress = '0xb506267c2f2976fc6b7e72e5d9d322916c32df98'; body.to = '0xf7a771bb9f013381f388abe12b38e3634c4a8f89'; body.digits = 10; const txData = await klaytn_1.prepareKlaytnTransferErc20SignedTransaction(true, body, 'https://api.baobab.klaytn.net:8651/'); 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 = '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c'; body.symbol = 'SYMBOL'; body.name = 'Test_ERC20'; body.supply = '100'; body.address = '0xf7a771bb9f013381f388abe12b38e3634c4a8f89'; body.digits = 10; const txData = await klaytn_1.prepareKlaytnDeployErc20SignedTransaction(true, body, 'https://api.baobab.klaytn.net:8651/'); 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 = '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c'; body.symbol = 'SYMBOL'; body.name = 'Test_ERC20'; body.address = '0xf7a771bb9f013381f388abe12b38e3634c4a8f89'; body.digits = 10; try { await klaytn_1.prepareKlaytnDeployErc20SignedTransaction(true, body, 'https://api.baobab.klaytn.net:8651/'); fail('Validation did not pass.'); } catch (e) { console.error(e); } }); }); describe('KLAY 721 transactions', () => { it('should test 721 deploy transaction', async () => { const deploy721Token = await klaytn_1.prepareKlaytnDeployErc721SignedTransaction(true, { symbol: '1oido3id3', fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c', chain: model_1.Currency.KLAY, name: '2123kd', }, 'https://api.baobab.klaytn.net:8651/'); expect(deploy721Token).not.toBeNull(); console.log(await broadcast(deploy721Token)); }); it('should test 721 mint transaction', async () => { try { const tokenId = new Date().getTime().toString(); const mintedToken = await klaytn_1.prepareKlaytnMintErc721SignedTransaction(true, { to: '0xf7a771bb9f013381f388abe12b38e3634c4a8f89', tokenId, url: 'https://www.seznam.cz', fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c', chain: model_1.Currency.KLAY, contractAddress: '0x989b4b92c81abb963e1dcec5b46ac8a5c9f1431b', }, 'https://api.baobab.klaytn.net:8651/'); console.log(tokenId); expect(mintedToken).not.toBeNull(); console.log(await broadcast(mintedToken)); } catch (e) { console.log(e); } }); it('should test 721 mint multiple transaction', async () => { const firstTokenId = new Date().getTime(); const secondTokenId = firstTokenId + 1; const mintedTokens = await klaytn_1.prepareKlaytnMintMultipleErc721SignedTransaction(true, { to: ['0xf7a771bb9f013381f388abe12b38e3634c4a8f89', '0xf7a771bb9f013381f388abe12b38e3634c4a8f89'], tokenId: [firstTokenId.toString(), secondTokenId.toString()], url: ['https://www.seznam.cz', 'https://www.seznam.cz'], fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c', chain: model_1.Currency.KLAY, contractAddress: '0x989b4b92c81abb963e1dcec5b46ac8a5c9f1431b', }, 'https://api.baobab.klaytn.net:8651/'); expect(mintedTokens).not.toBeNull(); console.log(await broadcast(mintedTokens)); }); it('should test 721 burn transaction', async () => { const burn721Token = await klaytn_1.prepareKlaytnBurnErc721SignedTransaction(true, { tokenId: '1626437687633', fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c', chain: model_1.Currency.KLAY, contractAddress: '0x989b4b92c81abb963e1dcec5b46ac8a5c9f1431b', }, 'https://api.baobab.klaytn.net:8651/'); expect(burn721Token).not.toBeNull(); console.log(await broadcast(burn721Token)); }); it('should test 721 send transaction', async () => { const send721Token = await klaytn_1.prepareKlaytnTransferErc721SignedTransaction(true, { to: '0xf7a771bb9f013381f388abe12b38e3634c4a8f89', tokenId: '1626437745973', fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c', chain: model_1.Currency.KLAY, contractAddress: '0x989b4b92c81abb963e1dcec5b46ac8a5c9f1431b', }, 'https://api.baobab.klaytn.net:8651/'); expect(send721Token).not.toBeNull(); console.log(await broadcast(send721Token)); }); }); describe('KLAY 721 provenance transactions', () => { it('should test 721 deploy transaction', async () => { const deploy721Token = await klaytn_1.prepareKlaytnDeployErc721SignedTransaction(true, { symbol: '1oido3id3', fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564', chain: model_1.Currency.KLAY, provenance: true, name: '2123kd', }, 'https://api.baobab.klaytn.net:8651/'); expect(deploy721Token).not.toBeNull(); console.log(await broadcast(deploy721Token)); }); it('should test 721 provenance mint transaction', async () => { try { const tokenId = new Date().getTime().toString(); const mintedToken = await klaytn_1.prepareKlaytnMintErc721ProvenanceSignedTransaction(true, { to: '0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF', tokenId, url: 'https://www.seznam.cz', fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564', chain: model_1.Currency.KLAY, contractAddress: '0x8D2A0dd3855ECA8591756a606DA9829f703cA26B', }, 'https://api.baobab.klaytn.net:8651/'); console.log(tokenId); expect(mintedToken).not.toBeNull(); console.log(await broadcast(mintedToken)); } catch (e) { console.log(e); } }); it('should test 721 provenance mint with cashback transaction', async () => { try { const mintedToken = await klaytn_1.prepareKlaytnMintErc721ProvenanceSignedTransaction(true, { to: '0x80D8BAc9a6901698b3749Fe336bBd1385C1f98f2', tokenId: '12', url: 'https://www.seznam.cz', fromPrivateKey: '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab', authorAddresses: ['0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF'], cashbackValues: ['2'], fixedValues: ['0.01'], chain: model_1.Currency.KLAY, contractAddress: '0x44ef7a380c34E76a39Cb00410956dE2aeeaf3B1B', }, 'https://api.baobab.klaytn.net:8651/'); expect(mintedToken).not.toBeNull(); console.log(await broadcast(mintedToken)); } catch (e) { console.log(e); } }); it('should test 721 mint multiple with cashback transaction', async () => { const mintedTokens = await klaytn_1.prepareKlaytnMintMultipleErc721ProvenanceSignedTransaction(true, { to: ['0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF', '0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF'], tokenId: ['5', '6'], url: ['https://www.seznam.cz', 'https://www.seznam.cz'], authorAddresses: [['0xD25031B1aB4D82e5fDFb700234b2a22e272232Be'], ['0xD25031B1aB4D82e5fDFb700234b2a22e272232Be']], cashbackValues: [['1'], ['1']], fixedValues: [['1'], ['1']], fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564', chain: model_1.Currency.KLAY, contractAddress: '0xe54a147b6ebe25bda0eec07e8a0051c1b9d08338', }, 'https://api.baobab.klaytn.net:8651/'); expect(mintedTokens).not.toBeNull(); console.log(await broadcast(mintedTokens)); }); it('should test 721 send transaction', async () => { const senderc721Token = await klaytn_1.prepareKlaytnTransferErc721SignedTransaction(true, { to: '0xD25031B1aB4D82e5fDFb700234b2a22e272232Be', tokenId: '12', fromPrivateKey: '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab', chain: model_1.Currency.KLAY, provenance: true, provenanceData: 'testMatic', tokenPrice: '1.5', value: '2', fee: { gasLimit: '1200000', gasPrice: '3', }, contractAddress: '0x44ef7a380c34E76a39Cb00410956dE2aeeaf3B1B', }, 'https://api.baobab.klaytn.net:8651/'); console.log(senderc721Token); expect(senderc721Token).not.toBeNull(); console.log(await broadcast(senderc721Token)); }); it('should test valid transfer data 721 transaction', async () => { const body = new model_1.SmartContractReadMethodInvocation(); body.contractAddress = '0xe54a147b6ebe25bda0eec07e8a0051c1b9d08338'; body.params = ['1634501273645']; body.methodName = 'getTokenData'; body.methodABI = erc721Provenance_abi_1.default.find((a) => a.name === 'getTokenData'); const response = await klaytn_1.sendKlaytnSmartContractReadMethodInvocationTransaction(true, body, 'https://api.baobab.klaytn.net:8651/'); // @ts-ignore console.log(JSON.stringify(response)); }); it('should test 721 burn transaction', async () => { const burn721Token = await klaytn_1.prepareKlaytnBurnErc721SignedTransaction(true, { tokenId: '5', fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564', chain: model_1.Currency.KLAY, contractAddress: '0xe54a147b6ebe25bda0eec07e8a0051c1b9d08338', }, 'https://api.baobab.klaytn.net:8651/'); expect(burn721Token).not.toBeNull(); // console.log(await broadcast(burn721Token)) }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2xheXRuLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24va2xheXRuLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBd0I7QUFDeEIsOEdBQXNGO0FBQ3RGLG9DQUFpSDtBQUNqSCxxQ0Fja0I7QUFFbEIsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtJQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3RCLE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO1FBQzlELE9BQU8sTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztpQkFDckMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDbEQsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2hHLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0lBRUQsUUFBUSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtRQUN4QyxFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxxQkFBYSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxvRUFBb0UsQ0FBQztZQUMzRixJQUFJLENBQUMsTUFBTSxHQUFHLFFB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