@tatumio/tatum-v1
Version:
Tatum API client allows browsers and Node.js clients to interact with Tatum API.
266 lines • 30.3 kB
JavaScript
;
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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