UNPKG

@tatumio/tatum-v1

Version:

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

501 lines 57.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const celo_ethers_wrapper_1 = require("@celo-tools/celo-ethers-wrapper"); const blockchain_1 = require("../blockchain"); const custodial_1 = require("../contracts/custodial"); const model_1 = require("../model"); const transaction_1 = require("../transaction"); const custodial_2 = require("./custodial"); const tatum_1 = require("../connector/tatum"); describe('Custodial wallet tests', () => { process.env.TRON_PRO_API_KEY = 'b35409b4-7d11-491e-8760-32d2506a90b5'; jest.setTimeout(99999); describe('Feature enablement logic - deprecated', () => { it('should deploy all batch', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = true; body.enableFungibleTokens = true; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = true; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.CustodialFullTokenWalletWithBatch.abi); }); it('should deploy all', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = false; body.enableFungibleTokens = true; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = true; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.CustodialFullTokenWallet.abi); }); it('should deploy 20 batch', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = true; body.enableFungibleTokens = true; body.enableNonFungibleTokens = false; body.enableSemiFungibleTokens = false; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_20_TokenWalletWithBatch.abi); }); it('should deploy 20', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = false; body.enableFungibleTokens = true; body.enableNonFungibleTokens = false; body.enableSemiFungibleTokens = false; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_20_TokenWallet.abi); }); it('should deploy 721 batch', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = true; body.enableFungibleTokens = false; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = false; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_721_TokenWalletWithBatch.abi); }); it('should deploy 721', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = false; body.enableFungibleTokens = false; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = false; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_721_TokenWallet.abi); }); it('should deploy 1155 batch', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = true; body.enableFungibleTokens = false; body.enableNonFungibleTokens = false; body.enableSemiFungibleTokens = true; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_1155_TokenWalletWithBatch.abi); }); it('should deploy 1155', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = false; body.enableFungibleTokens = false; body.enableNonFungibleTokens = false; body.enableSemiFungibleTokens = true; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_1155_TokenWallet.abi); }); it('should deploy 20_721 batch', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = true; body.enableFungibleTokens = true; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = false; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_20_721_TokenWalletWithBatch.abi); }); it('should deploy 20_721', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = false; body.enableFungibleTokens = true; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = false; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_20_721_TokenWallet.abi); }); it('should deploy 20_1155 batch', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = true; body.enableFungibleTokens = true; body.enableNonFungibleTokens = false; body.enableSemiFungibleTokens = true; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_20_1155_TokenWalletWithBatch.abi); }); it('should deploy 20_1155', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = false; body.enableFungibleTokens = true; body.enableNonFungibleTokens = false; body.enableSemiFungibleTokens = true; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_20_1155_TokenWallet.abi); }); it('should deploy 721_1155 batch', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = true; body.enableFungibleTokens = false; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = true; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_721_1155_TokenWalletWithBatch.abi); }); it('should deploy 721_1155', () => { const body = new model_1.GenerateCustodialAddress(); body.enableBatchTransactions = false; body.enableFungibleTokens = false; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = true; const { abi } = custodial_2.obtainCustodialAddressType(body); expect(abi).toBe(custodial_1.Custodial_721_1155_TokenWallet.abi); }); }); describe('Deploy batch address', () => { it('should create on CELO', async () => { const body = new model_1.GenerateCustodialAddressBatch(); body.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; body.chain = model_1.Currency.CELO; body.feeCurrency = model_1.Currency.CUSD; body.batchCount = 200; body.owner = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; const txData = await custodial_2.generateCustodialWalletBatch(true, body, 'https://alfajores-forno.celo-testnet.org'); expect(txData.txId).toContain('0x'); console.log(txData.txId); }); it('should create on CELO - feesCovered set to false', async () => { const body = new model_1.GenerateCustodialAddressBatch(); body.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; body.chain = model_1.Currency.CELO; body.feesCovered = false; body.feeCurrency = model_1.Currency.CUSD; body.batchCount = 200; body.owner = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; const txData = await custodial_2.generateCustodialWalletBatch(true, body, 'https://alfajores-forno.celo-testnet.org'); expect(txData.txId).toContain('0x'); console.log(txData.txId); }); it('should fail on CELO - feesCovered entered with wrong validation', async () => { const body = new model_1.GenerateCustodialAddressBatch(); body.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; body.feesCovered = true; body.chain = model_1.Currency.CELO; body.feeCurrency = model_1.Currency.CUSD; body.batchCount = 200; body.owner = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; await custodial_2.generateCustodialWalletBatch(true, body, 'https://alfajores-forno.celo-testnet.org'); fail('Should fail on validation'); }); it('should OK on CELO - feesCovered entered without OK or signatureId', async () => { const body = new model_1.GenerateCustodialAddressBatch(); body.feesCovered = true; body.chain = model_1.Currency.CELO; body.feeCurrency = model_1.Currency.CUSD; body.batchCount = 200; body.owner = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; await tatum_1.validateBody(body, model_1.GenerateCustodialAddressBatch); }); it('should create on MATIC', async () => { const body = new model_1.GenerateCustodialAddressBatch(); body.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; body.chain = model_1.Currency.MATIC; body.batchCount = 200; body.owner = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; const txData = await custodial_2.generateCustodialWalletBatch(true, body); expect(txData.txId).toContain('0x'); console.log(txData.txId); }); }); describe('Deploy address', () => { it('should create on CELO no batch', async () => { const body = new model_1.GenerateCustodialAddress(); body.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; body.chain = model_1.Currency.CELO; body.feeCurrency = model_1.Currency.CUSD; body.enableFungibleTokens = true; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = false; body.enableBatchTransactions = false; const txData = await transaction_1.sendCeloGenerateCustodialWalletSignedTransaction(true, body, 'https://alfajores-forno.celo-testnet.org'); expect(txData.txId).toContain('0x'); console.log(txData.txId); }); it('should create on BSC batch', async () => { const body = new model_1.GenerateCustodialAddress(); body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; body.chain = model_1.Currency.BSC; body.enableFungibleTokens = true; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = true; body.enableBatchTransactions = true; const txData = await transaction_1.sendBscGenerateCustodialWalletSignedTransaction(body, 'https://data-seed-prebsc-2-s1.binance.org:8545'); expect(txData.txId).toContain('0x'); console.log(txData.txId); }); it('should create on ETH no batch', async () => { const body = new model_1.GenerateCustodialAddress(); body.fromPrivateKey = '0xd3d46d51fa3780cd952821498951e07307dfcfbbf2937d1c54123d6582032fa6'; body.chain = model_1.Currency.ETH; body.enableFungibleTokens = true; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = false; body.enableBatchTransactions = false; const txData = await transaction_1.sendEthGenerateCustodialWalletSignedTransaction(body); expect(txData.txId).toContain('0x'); console.log(txData.txId); }); it('should create on ETH no batch KMS', async () => { const body = new model_1.GenerateCustodialAddress(); body.signatureId = '96e13f7f-393e-4f64-8fde-17bd90ce2c5b'; body.chain = model_1.Currency.ETH; body.enableFungibleTokens = true; body.enableNonFungibleTokens = true; body.enableSemiFungibleTokens = false; body.enableBatchTransactions = false; const txData = await transaction_1.prepareEthGenerateCustodialWalletSignedTransaction(body); expect(txData).toContain('0x'); }); it('should create on TRON', async () => { const body = new model_1.GenerateCustodialAddressBatch(); body.fromPrivateKey = '842E09EB40D8175979EFB0071B28163E11AED0F14BDD84090A4CEFB936EF5701'; body.chain = model_1.Currency.TRON; body.feeLimit = 500; body.owner = 'TYMwiDu22V6XG3yk6W9cTVBz48okKLRczh'; body.batchCount = 10; try { const txData = await custodial_2.generateCustodialWalletBatch(true, body); expect(txData.txId).toBeDefined(); console.log(txData.txId); } catch (e) { console.error(e); } }); it('should create on TRON no batch', async () => { const body = new model_1.GenerateTronCustodialAddress(); body.fromPrivateKey = '842E09EB40D8175979EFB0071B28163E11AED0F14BDD84090A4CEFB936EF5701'; body.chain = model_1.Currency.TRON; body.enableFungibleTokens = true; body.enableNonFungibleTokens = true; body.feeLimit = 500; body.enableSemiFungibleTokens = false; body.enableBatchTransactions = true; const txData = await transaction_1.sendTronGenerateCustodialWalletSignedTransaction(true, body); expect(txData.txId).toBeDefined(); console.log(txData.txId); }); it('should fail create on TRON no batch - 1155', async () => { const body = new model_1.GenerateTronCustodialAddress(); body.fromPrivateKey = '842E09EB40D8175979EFB0071B28163E11AED0F14BDD84090A4CEFB936EF5701'; body.chain = model_1.Currency.TRON; body.enableFungibleTokens = true; body.enableNonFungibleTokens = true; body.feeLimit = 500; body.enableSemiFungibleTokens = true; body.enableBatchTransactions = true; const t = async () => await transaction_1.sendTronGenerateCustodialWalletSignedTransaction(true, body); await expect(t()).rejects.toThrow(); }); it('should fail create on TRON no batch KMS - missing FROM', async () => { const body = new model_1.GenerateTronCustodialAddress(); body.signatureId = '96e13f7f-393e-4f64-8fde-17bd90ce2c5b'; body.chain = model_1.Currency.TRON; body.enableFungibleTokens = true; body.enableNonFungibleTokens = true; body.feeLimit = 500; body.enableSemiFungibleTokens = false; body.enableBatchTransactions = true; const t = async () => await transaction_1.sendTronGenerateCustodialWalletSignedTransaction(true, body); await expect(t()).rejects.toThrow(); }); }); describe('Transfer from address CELO', () => { it('should transfer CEUR no batch', async () => { const body = new model_1.TransferFromCustodialAddress(); body.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; body.chain = model_1.Currency.CELO; body.feeCurrency = model_1.Currency.CELO; body.contractType = model_1.ContractType.FUNGIBLE_TOKEN; body.custodialAddress = '0xA16B57eaFA0Ae9d3E57D6b513E9f353eb40dbBB5'; body.tokenAddress = '0x10c892a6ec43a53e45d0b916b4b7d383b1b78c0f'; // CEUR ERC20 body.recipient = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.amount = '1'; const txData = await custodial_2.prepareTransferFromCustodialWallet(true, body); expect(txData).toContain('0x'); const provider = new celo_ethers_wrapper_1.CeloProvider('https://alfajores-forno.celo-testnet.org'); await provider.ready; console.log(await provider.sendTransaction(txData)); }); }); describe('Transfer from address BSC', () => { it('should transfer BSC on BSC', async () => { const body = new model_1.TransferFromCustodialAddress(); body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; body.chain = model_1.Currency.BSC; body.contractType = model_1.ContractType.NATIVE_ASSET; body.custodialAddress = '0x009bc01b990e2781e8a961fd792f4ebb12a683b4'; body.recipient = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.amount = '0.0000001'; const txData = await custodial_2.prepareTransferFromCustodialWallet(true, body); expect(txData).toContain('0x'); console.log(await blockchain_1.bscBroadcast(txData)); }); it('should transfer 20 on BSC', async () => { const body = new model_1.TransferFromCustodialAddress(); body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; body.chain = model_1.Currency.BSC; body.contractType = model_1.ContractType.FUNGIBLE_TOKEN; body.custodialAddress = '0x009bc01b990e2781e8a961fd792f4ebb12a683b4'; body.tokenAddress = '0xec5dcb5dbf4b114c9d0f65bccab49ec54f6a0867'; body.recipient = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.amount = '1'; const txData = await custodial_2.prepareTransferFromCustodialWallet(true, body); expect(txData).toContain('0x'); console.log(await blockchain_1.bscBroadcast(txData)); }); it('should transfer 721 on BSC', async () => { const body = new model_1.TransferFromCustodialAddress(); body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; body.chain = model_1.Currency.BSC; body.contractType = model_1.ContractType.NON_FUNGIBLE_TOKEN; body.custodialAddress = '0x009bc01b990e2781e8a961fd792f4ebb12a683b4'; body.tokenAddress = '0x9b0eea3aa1e61b8ecb7d1c8260cd426eb2a9a698'; body.recipient = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.tokenId = '20'; const txData = await custodial_2.prepareTransferFromCustodialWallet(true, body); expect(txData).toContain('0x'); console.log(await blockchain_1.bscBroadcast(txData)); }); it('should transfer 1155 on BSC', async () => { const body = new model_1.TransferFromCustodialAddress(); body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; body.chain = model_1.Currency.BSC; body.contractType = model_1.ContractType.SEMI_FUNGIBLE_TOKEN; body.custodialAddress = '0x009bc01b990e2781e8a961fd792f4ebb12a683b4'; body.tokenAddress = '0x0fd723c4db392f4bc4b999eaacd2b4a8099fefa3'; body.recipient = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.tokenId = '1'; body.amount = '1'; const txData = await custodial_2.prepareTransferFromCustodialWallet(true, body); expect(txData).toContain('0x'); console.log(await blockchain_1.bscBroadcast(txData)); }); it('should approve 20 on BSC', async () => { const body = new model_1.ApproveCustodialTransfer(); body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; body.chain = model_1.Currency.BSC; body.contractType = model_1.ContractType.FUNGIBLE_TOKEN; body.custodialAddress = '0x95abdd7406a6aca49797e833bacc3edaa394853a'; body.tokenAddress = '0xec5dcb5dbf4b114c9d0f65bccab49ec54f6a0867'; body.spender = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.amount = '1'; const txData = await custodial_2.prepareApproveFromCustodialWallet(true, body); expect(txData).toContain('0x'); console.log(await blockchain_1.bscBroadcast(txData)); }); it('should approve 721 on BSC', async () => { const body = new model_1.ApproveCustodialTransfer(); body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; body.chain = model_1.Currency.BSC; body.contractType = model_1.ContractType.NON_FUNGIBLE_TOKEN; body.custodialAddress = '0x95abdd7406a6aca49797e833bacc3edaa394853a'; body.tokenAddress = '0x9b0eea3aa1e61b8ecb7d1c8260cd426eb2a9a698'; body.spender = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.tokenId = '10'; const txData = await custodial_2.prepareApproveFromCustodialWallet(true, body); expect(txData).toContain('0x'); console.log(await blockchain_1.bscBroadcast(txData)); }); it('should approve 1155 on BSC', async () => { const body = new model_1.ApproveCustodialTransfer(); body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; body.chain = model_1.Currency.BSC; body.contractType = model_1.ContractType.SEMI_FUNGIBLE_TOKEN; body.custodialAddress = '0x95abdd7406a6aca49797e833bacc3edaa394853a'; body.tokenAddress = '0x0fd723c4db392f4bc4b999eaacd2b4a8099fefa3'; body.spender = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.tokenId = '1'; body.amount = '1'; const txData = await custodial_2.prepareApproveFromCustodialWallet(true, body); expect(txData).toContain('0x'); console.log(await blockchain_1.bscBroadcast(txData)); }); it('should transfer all batch on BSC', async () => { const body = new model_1.TransferFromCustodialAddressBatch(); body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; body.chain = model_1.Currency.BSC; body.contractType = [model_1.ContractType.FUNGIBLE_TOKEN, model_1.ContractType.NON_FUNGIBLE_TOKEN, model_1.ContractType.SEMI_FUNGIBLE_TOKEN, model_1.ContractType.NATIVE_ASSET]; body.custodialAddress = '0x009bc01b990e2781e8a961fd792f4ebb12a683b4'; body.tokenAddress = ['0xec5dcb5dbf4b114c9d0f65bccab49ec54f6a0867', '0x9b0eea3aa1e61b8ecb7d1c8260cd426eb2a9a698', '0x0fd723c4db392f4bc4b999eaacd2b4a8099fefa3', '0']; body.recipient = ['0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA', '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA', '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA', '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA']; body.tokenId = ['0', '200', '1', '0']; body.amount = ['1', '0', '1', '0.00001']; const txData = await custodial_2.prepareBatchTransferFromCustodialWallet(true, body); expect(txData).toContain('0x'); console.log(await blockchain_1.bscBroadcast(txData)); }); it('should transfer 2 NFTs batch on CELO', async () => { const body = new model_1.TransferFromCustodialAddressBatch(); body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab'; body.chain = model_1.Currency.CELO; body.contractType = [model_1.ContractType.NON_FUNGIBLE_TOKEN, model_1.ContractType.NON_FUNGIBLE_TOKEN]; body.custodialAddress = '0x7d0964ec4cd1817b8ad4830122f99b258fec1102'; body.tokenAddress = ['0x4f54fAD27F7F46C102Cd49b8E75C5593397cd9c3', '0x4f54fAD27F7F46C102Cd49b8E75C5593397cd9c3']; body.recipient = ['0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA', '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA']; body.tokenId = ['61', '62']; body.amount = ['0', '0']; const txData = await custodial_2.prepareBatchTransferFromCustodialWallet(true, body); expect(txData).toContain('0x'); console.log(txData); const provider = new celo_ethers_wrapper_1.CeloProvider('https://alfajores-forno.celo-testnet.org'); await provider.ready; console.log(await provider.sendTransaction(txData)); }); }); describe('Transfer from address TRON', () => { it('should transfer TRON on TRON', async () => { const body = new model_1.TransferFromTronCustodialAddress(); body.feeLimit = 100; body.fromPrivateKey = '842E09EB40D8175979EFB0071B28163E11AED0F14BDD84090A4CEFB936EF5701'; body.chain = model_1.Currency.TRON; body.contractType = model_1.ContractType.NATIVE_ASSET; body.custodialAddress = 'TKogX3qk6E8tRYtqNUSVa9PsZHWwL3a7q8'; body.recipient = 'TYMwiDu22V6XG3yk6W9cTVBz48okKLRczh'; body.amount = '1.9'; const txData = await custodial_2.prepareTransferFromCustodialWallet(true, body); expect(txData).toBeDefined(); console.log(await blockchain_1.tronBroadcast(txData)); }); it('should transfer 20 on TRON', async () => { const body = new model_1.TransferFromTronCustodialAddress(); body.feeLimit = 100; body.fromPrivateKey = '842E09EB40D8175979EFB0071B28163E11AED0F14BDD84090A4CEFB936EF5701'; body.chain = model_1.Currency.TRON; body.contractType = model_1.ContractType.FUNGIBLE_TOKEN; body.custodialAddress = 'TKogX3qk6E8tRYtqNUSVa9PsZHWwL3a7q8'; body.tokenAddress = 'TWgHeettKLgq1hCdEUPaZNCM6hPg8JkG2X'; body.recipient = 'TYMwiDu22V6XG3yk6W9cTVBz48okKLRczh'; body.amount = '1'; const txData = await custodial_2.prepareTransferFromCustodialWallet(true, body); expect(txData).toBeDefined(); console.log(await blockchain_1.tronBroadcast(txData)); }); it('should transfer 721 on TRON', async () => { const body = new model_1.TransferFromTronCustodialAddress(); body.feeLimit = 100; body.fromPrivateKey = '842E09EB40D8175979EFB0071B28163E11AED0F14BDD84090A4CEFB936EF5701'; body.chain = model_1.Currency.TRON; body.contractType = model_1.ContractType.NON_FUNGIBLE_TOKEN; body.custodialAddress = 'TKogX3qk6E8tRYtqNUSVa9PsZHWwL3a7q8'; body.tokenAddress = 'TERXc8ZZbrKokDR8BVi8XCwEZBp83ewVgg'; body.recipient = 'TYMwiDu22V6XG3yk6W9cTVBz48okKLRczh'; body.tokenId = '1111'; const txData = await custodial_2.prepareTransferFromCustodialWallet(true, body); expect(txData).toBeDefined(); console.log(await blockchain_1.tronBroadcast(txData)); }); it('should transfer all batch on TRON', async () => { const body = new model_1.TransferFromTronCustodialAddressBatch(); body.fromPrivateKey = '842E09EB40D8175979EFB0071B28163E11AED0F14BDD84090A4CEFB936EF5701'; body.chain = model_1.Currency.TRON; body.feeLimit = 100; body.contractType = [model_1.ContractType.FUNGIBLE_TOKEN, model_1.ContractType.NON_FUNGIBLE_TOKEN, model_1.ContractType.NATIVE_ASSET]; body.custodialAddress = 'TKogX3qk6E8tRYtqNUSVa9PsZHWwL3a7q8'; body.tokenAddress = ['TWgHeettKLgq1hCdEUPaZNCM6hPg8JkG2X', 'TERXc8ZZbrKokDR8BVi8XCwEZBp83ewVgg', '0']; body.recipient = ['TYMwiDu22V6XG3yk6W9cTVBz48okKLRczh', 'TYMwiDu22V6XG3yk6W9cTVBz48okKLRczh', 'TYMwiDu22V6XG3yk6W9cTVBz48okKLRczh']; body.tokenId = ['0', '1112', '0']; body.amount = ['1', '0', '0.00001']; const txData = await custodial_2.prepareBatchTransferFromCustodialWallet(true, body); expect(txData).toBeDefined(); console.log(await blockchain_1.tronBroadcast(txData)); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9kaWFsLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2FsbGV0L2N1c3RvZGlhbC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUVBQStEO0FBQy9ELDhDQUE0RDtBQUM1RCxzREFlZ0M7QUFDaEMsb0NBV2tCO0FBQ2xCLGdEQU13QjtBQUN4QiwyQ0FNcUI7QUFDckIsOENBQWlEO0FBRWpELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFFdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxzQ0FBc0MsQ0FBQztJQUN0RSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZCLFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7UUFDckQsRUFBRSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtZQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLGdDQUF3QixFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztZQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFBO1lBQ2hDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUE7WUFDbkMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQTtZQUNwQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsc0NBQTBCLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDaEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyw2Q0FBaUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6RCxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxnQ0FBd0IsRUFBRSxDQUFBO1lBQzNDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUE7WUFDcEMsSUFBSSxD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