UNPKG

@tatumio/tatum-v1

Version:

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

266 lines 30.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const blockchain_1 = require("../../blockchain"); const marketplace_1 = require("../../contracts/marketplace"); const model_1 = require("../../model"); const transaction_1 = require("../../transaction"); const nft_1 = require("../nft"); const listing_1 = require("./listing"); describe('Marketplace Listing tests', () => { jest.setTimeout(99999); describe('Marketplace Listing CELO transactions', () => { it('should deploy marketplace', async () => { const body = new model_1.DeployMarketplaceListing(); body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; body.feeRecipient = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.marketplaceFee = 150; body.feeCurrency = model_1.Currency.CUSD; body.chain = model_1.Currency.CELO; const test = await listing_1.deployMarketplaceListing(true, body, 'https://alfajores-forno.celo-testnet.org'); console.log(test); expect(test).toBeDefined(); }); it('should create listing native asset', async () => { const body = new model_1.CreateMarketplaceListing(); body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; body.contractAddress = '0xd093bEd4BC06403bfEABB54667B42C48533D3Fd9'; body.nftAddress = '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD'; body.tokenId = '33333'; body.listingId = '1'; body.isErc721 = true; body.price = '1'; body.seller = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f'; body.feeCurrency = model_1.Currency.CUSD; body.chain = model_1.Currency.CELO; console.log(await listing_1.sendMarketplaceCreateListing(true, body, 'https://alfajores-forno.celo-testnet.org')); }); it('should create listing erc20 asset', async () => { const body = new model_1.CreateMarketplaceListing(); body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236'; body.contractAddress = '0xd093bEd4BC06403bfEABB54667B42C48533D3Fd9'; body.nftAddress = '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD'; body.tokenId = '33334'; body.listingId = '2'; body.isErc721 = true; body.price = '1'; body.seller = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f'; body.erc20Address = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.feeCurrency = model_1.Currency.CUSD; body.chain = model_1.Currency.CELO; console.log(await listing_1.sendMarketplaceCreateListing(true, body, 'https://alfajores-forno.celo-testnet.org')); }); it('should get listing', async () => { const r = new model_1.SmartContractReadMethodInvocation(); r.contractAddress = '0xd093bEd4BC06403bfEABB54667B42C48533D3Fd9'; r.methodName = 'getListing'; r.methodABI = marketplace_1.listing.abi.find(a => a.name === r.methodName); r.params = ['1']; console.log(await transaction_1.sendCeloSmartContractReadMethodInvocationTransaction(true, r, 'https://alfajores-forno.celo-testnet.org')); }); it('should get marketplace fee', async () => { const r = new model_1.SmartContractReadMethodInvocation(); r.contractAddress = '0xd093bEd4BC06403bfEABB54667B42C48533D3Fd9'; r.methodName = 'getMarketplaceFee'; r.methodABI = marketplace_1.listing.abi.find(a => a.name === r.methodName); r.params = []; console.log(await transaction_1.sendCeloSmartContractReadMethodInvocationTransaction(true, r, 'https://alfajores-forno.celo-testnet.org')); }); it('should buy listing native', async () => { const body = new model_1.InvokeMarketplaceListingOperation(); body.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; body.contractAddress = '0xd093bEd4BC06403bfEABB54667B42C48533D3Fd9'; body.listingId = '1'; body.amount = '1.015'; body.feeCurrency = model_1.Currency.CELO; body.chain = model_1.Currency.CELO; console.log(await listing_1.sendMarketplaceBuyListing(true, body, 'https://alfajores-forno.celo-testnet.org')); }); it('should buy listing erc20', async () => { const approve = new model_1.ApproveErc20(); approve.contractAddress = '0x874069Fa1Eb16D44d622F2e0Ca25eeA172369bC1'; approve.spender = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; approve.chain = model_1.Currency.CELO; approve.feeCurrency = model_1.Currency.CELO; approve.amount = '1.015'; approve.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; approve.fee = { gasPrice: '5', gasLimit: '300000' }; console.log(await listing_1.sendMarketplaceApproveErc20Spending(true, approve, 'https://alfajores-forno.celo-testnet.org')); const body = new model_1.InvokeMarketplaceListingOperation(); body.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb'; body.contractAddress = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA'; body.listingId = '2'; body.amount = '1.015'; body.feeCurrency = model_1.Currency.CELO; body.chain = model_1.Currency.CELO; body.fee = { gasPrice: '5', gasLimit: '300000' }; console.log(await listing_1.sendMarketplaceBuyListing(true, body, 'https://alfajores-forno.celo-testnet.org')); }); }); describe('Marketplace Listing BSC transactions', () => { it('should deploy marketplace', async () => { const body = new model_1.DeployMarketplaceListing(); body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; body.feeRecipient = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'; body.marketplaceFee = 150; body.chain = model_1.Currency.BSC; const test = await listing_1.deployMarketplaceListing(true, body, 'https://data-seed-prebsc-2-s1.binance.org:8545'); console.log(test); expect(test).toBeDefined(); }); it('should create listing native asset', async () => { const body = new model_1.CreateMarketplaceListing(); body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; body.contractAddress = '0xc4585ec777bA6dc5d33524Ca72c425D512780C31'; body.nftAddress = '0x9b0eea3aa1e61b8ecb7d1c8260cd426eb2a9a698'; body.tokenId = '2'; body.listingId = '8'; body.isErc721 = true; body.price = '1'; body.seller = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'; body.chain = model_1.Currency.BSC; console.log(await listing_1.sendMarketplaceCreateListing(true, body, 'https://data-seed-prebsc-2-s1.binance.org:8545')); await new Promise(r => setTimeout(r, 10000)); console.log(await nft_1.transferNFT(true, { to: '0xc4585ec777bA6dc5d33524Ca72c425D512780C31', chain: model_1.Currency.BSC, tokenId: '2', fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', contractAddress: '0x9b0eea3aa1e61b8ecb7d1c8260cd426eb2a9a698' })); }); it('should get listing', async () => { const r = new model_1.SmartContractReadMethodInvocation(); r.contractAddress = '0xc4585ec777bA6dc5d33524Ca72c425D512780C31'; r.methodName = 'getListing'; r.methodABI = marketplace_1.listing.abi.find(a => a.name === r.methodName); r.params = ['6']; console.log(await transaction_1.sendBscSmartContractMethodInvocationTransaction(r, 'https://data-seed-prebsc-2-s1.binance.org:8545')); }); it('should get marketplace fee', async () => { const r = new model_1.SmartContractReadMethodInvocation(); r.contractAddress = '0xc4585ec777bA6dc5d33524Ca72c425D512780C31'; r.methodName = 'getMarketplaceFee'; r.methodABI = marketplace_1.listing.abi.find(a => a.name === r.methodName); r.params = []; console.log(await transaction_1.sendBscSmartContractReadMethodInvocationTransaction(r, 'https://data-seed-prebsc-2-s1.binance.org:8545')); }); it('should buy listing native', async () => { const body = new model_1.InvokeMarketplaceListingOperation(); body.fromPrivateKey = '0x3497eb7fa0fadf23da006c31f874a5aaed7da58c1caf3d84fa3387e1208ada39'; body.contractAddress = '0xc4585ec777bA6dc5d33524Ca72c425D512780C31'; body.listingId = '8'; body.amount = '1.015'; body.chain = model_1.Currency.BSC; console.log(await listing_1.sendMarketplaceBuyListing(true, body, 'https://data-seed-prebsc-2-s1.binance.org:8545')); }); }); describe('Marketplace Listing MATIC transactions', () => { it('should deploy marketplace', async () => { const body = new model_1.DeployMarketplaceListing(); body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; body.feeRecipient = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'; body.marketplaceFee = 150; body.chain = model_1.Currency.MATIC; const test = await listing_1.deployMarketplaceListing(true, body, 'https://rpc-mumbai.matic.today'); console.log(test); expect(test).toBeDefined(); }); it('should create listing native asset', async () => { const body = new model_1.CreateMarketplaceListing(); body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29'; body.contractAddress = '0xc4585ec777ba6dc5d33524ca72c425d512780c31'; body.nftAddress = '0x5d7d868ed584b04b922905a481f274206a42dd8a'; body.tokenId = '121'; body.listingId = '111'; body.isErc721 = true; body.price = '0.001'; body.seller = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'; body.chain = model_1.Currency.MATIC; console.log(await listing_1.sendMarketplaceCreateListing(true, body, 'https://rpc-mumbai.matic.today')); await new Promise(r => setTimeout(r, 5000)); console.log(await nft_1.transferNFT(true, { to: '0xc4585ec777ba6dc5d33524ca72c425d512780c31', chain: model_1.Currency.MATIC, tokenId: '121', fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29', contractAddress: '0x5d7d868ed584b04b922905a481f274206a42dd8a' })); }); it('should get listing', async () => { const r = new model_1.SmartContractReadMethodInvocation(); r.contractAddress = '0xc4585ec777ba6dc5d33524ca72c425d512780c31'; r.methodName = 'getListing'; r.methodABI = marketplace_1.listing.abi.find(a => a.name === r.methodName); r.params = ['8']; console.log(await transaction_1.sendPolygonSmartContractMethodInvocationTransaction(true, r, 'https://rpc-mumbai.matic.today')); }); it('should get marketplace fee', async () => { const r = new model_1.SmartContractReadMethodInvocation(); r.contractAddress = '0xc4585ec777ba6dc5d33524ca72c425d512780c31'; r.methodName = 'getMarketplaceFee'; r.methodABI = marketplace_1.listing.abi.find(a => a.name === r.methodName); r.params = []; console.log(await transaction_1.sendPolygonSmartContractReadMethodInvocationTransaction(true, r, 'https://rpc-mumbai.matic.today')); }); it('should buy listing native', async () => { const body = new model_1.InvokeMarketplaceListingOperation(); body.fromPrivateKey = '0x3497eb7fa0fadf23da006c31f874a5aaed7da58c1caf3d84fa3387e1208ada39'; body.contractAddress = '0xc4585ec777ba6dc5d33524ca72c425d512780c31'; body.listingId = '111'; body.amount = '0.0015'; body.chain = model_1.Currency.MATIC; console.log(await listing_1.sendMarketplaceBuyListing(true, body, 'https://rpc-mumbai.matic.today')); }); it('should approve erc20', async () => { const approve = new model_1.ApproveErc20(); approve.contractAddress = '0x326c977e6efc84e512bb9c30f76e30c160ed06fb'; approve.spender = '0x4153B909f55B0Ec43c11e980dF09b853477D9F79'; approve.chain = model_1.Currency.MATIC; approve.amount = '0.002'; approve.fromPrivateKey = '0xf09110a0aae3dddba3d722c6c629fb08082963d8ed38afaf25cfce084c22e3d2'; console.log(await listing_1.sendMarketplaceApproveErc20Spending(true, approve, 'https://rpc-mumbai.matic.today')); }); }); describe.skip('Marketplace Listing TRON transactions', () => { it('should deploy marketplace', async () => { const test = await listing_1.deployMarketplaceListing(true, { 'feeRecipient': 'TYMwiDu22V6XG3yk6W9cTVBz48okKLRczh', 'marketplaceFee': 250, 'chain': model_1.Currency.TRON, 'fromPrivateKey': '842E09EB40D8175979EFB0071B28163E11AED0F14BDD84090A4CEFB936EF5701', 'feeLimit': 500 }); console.log(test); expect(test).toBeDefined(); }); it('should create listing native asset', async () => { const txData = await listing_1.prepareMarketplaceCreateListing(true, { 'contractAddress': 'TXseqo4U5yZZgVjjDzodA3par23pxevvtD', 'nftAddress': 'TGXh2YJhfwchMGKuzfEJ27W1VEJRKnMdy9', 'tokenId': '1', 'listingId': '1', 'isErc721': true, 'price': '0.001', 'seller': 'TYMwiDu22V6XG3yk6W9cTVBz48okKLRczh', 'chain': model_1.Currency.TRON, 'fromPrivateKey': '842E09EB40D8175979EFB0071B28163E11AED0F14BDD84090A4CEFB936EF5701', 'feeLimit': 100 }); expect(txData).toContain('txID'); console.log(await blockchain_1.tronBroadcast(txData)); }); it('should buy listing native asset', async () => { const txData = await listing_1.prepareMarketplaceBuyListing(true, { 'contractAddress': 'TXseqo4U5yZZgVjjDzodA3par23pxevvtD', 'listingId': '1', 'amount': '0.002', 'chain': model_1.Currency.TRON, 'fromPrivateKey': '842E09EB40D8175979EFB0071B28163E11AED0F14BDD84090A4CEFB936EF5701', 'feeLimit': 100 }); expect(txData).toContain('txID'); console.log(await blockchain_1.tronBroadcast(txData)); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGluZy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25mdC9tYXJrZXRwbGFjZS9saXN0aW5nLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpREFBK0M7QUFDL0MsNkRBQW9EO0FBQ3BELHVDQUE2SztBQUM3SyxtREFNMkI7QUFDM0IsZ0NBQW1DO0FBQ25DLHVDQU9tQjtBQUVuQixRQUFRLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO0lBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdEIsUUFBUSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtRQUNuRCxFQUFFLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxnQ0FBd0IsRUFBRSxDQUFBO1lBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsb0VBQW9FLENBQUE7WUFDMUYsSUFBSSxDQUFDLFlBQVksR0FBRyw0Q0FBNEMsQ0FBQTtZQUNoRSxJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQTtZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLGdCQUFRLENBQUMsSUFBSSxDQUFBO1lBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsZ0JBQVEsQ0FBQyxJQUFJLENBQUE7WUFDMUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxrQ0FBd0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLDBDQUEwQyxDQUFDLENBQUE7WUFDbkcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDOUIsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxnQ0FBd0IsRUFBRSxDQUFBO1lBQzND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