@tatumio/tatum-v1
Version:
Tatum API client allows browsers and Node.js clients to interact with Tatum API.
321 lines • 31.4 kB
JavaScript
"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 polygon_1 = require("./polygon");
describe('MATIC transactions', () => {
jest.setTimeout(99999);
const broadcast = async (txData) => {
const client = new web3_1.default('https://matic-mumbai.chainstacklabs.com/');
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('MATIC common transactions', () => {
it('should test valid transaction MATIC data', async () => {
const body = new model_1.TransferErc20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '0.0001';
body.currency = model_1.Currency.MATIC;
body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
const txData = await polygon_1.preparePolygonSignedTransaction(true, body, 'https://matic-mumbai.chainstacklabs.com/');
expect(txData).toContain('0x');
console.log(await broadcast(txData));
});
it('should test valid transaction MATIC store data', async () => {
const body = new model_1.CreateRecord();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.data = 'Hello hi';
body.chain = model_1.Currency.MATIC;
const txData = await polygon_1.preparePolygonStoreDataTransaction(true, body, 'https://matic-mumbai.chainstacklabs.com/');
expect(txData).toContain('0x');
console.log(await broadcast(txData));
});
it('should test ethGetGasPriceInWei', async () => {
const gasPrice = await polygon_1.polygonGetGasPriceInWei();
expect(gasPrice).not.toBeNull();
});
it('should test read smart contract method invocation', async () => {
const result = await polygon_1.sendPolygonSmartContractReadMethodInvocationTransaction(true, {
contractAddress: '0x0b9808fce74030c87aae334a30f6c8f6c66b090d',
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://matic-mumbai.chainstacklabs.com/');
console.log(result);
expect(result).not.toBeNull();
});
it('should test write smart contract method invocation', async () => {
const result = await polygon_1.preparePolygonSmartContractWriteMethodInvocation(true, {
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
contractAddress: '0x0b9808fce74030c87aae334a30f6c8f6c66b090d',
fee: { gasLimit: '100000', gasPrice: '3' },
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://matic-mumbai.chainstacklabs.com/');
expect(result).not.toBeNull();
console.log(await broadcast(result));
});
});
describe('MATIC ERC20 transactions', () => {
it('should test valid custom transaction ERC20 data', async () => {
const body = new model_1.TransferErc20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '10';
body.contractAddress = '0x0b9808fce74030c87aae334a30f6c8f6c66b090d';
body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
body.digits = 10;
const txData = await polygon_1.preparePolygonTransferErc20SignedTransaction(true, body, 'https://matic-mumbai.chainstacklabs.com/');
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 = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.symbol = 'SYMBOL';
body.name = 'Test_ERC20';
body.supply = '100';
body.address = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
body.digits = 10;
const txData = await polygon_1.preparePolygonDeployErc20SignedTransaction(true, body, 'https://matic-mumbai.chainstacklabs.com/');
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 polygon_1.preparePolygonDeployErc20SignedTransaction(true, body, 'https://matic-mumbai.chainstacklabs.com/');
fail('Validation did not pass.');
}
catch (e) {
console.error(e);
}
});
});
describe('MATIC 721 transactions', () => {
it('should test 721 deploy transaction', async () => {
const deployBep721Token = await polygon_1.preparePolygonDeployErc721SignedTransaction(true, {
symbol: '1oido3id3',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.MATIC,
name: '2123kd',
}, 'https://matic-mumbai.chainstacklabs.com/');
expect(deployBep721Token).not.toBeNull();
console.log(await broadcast(deployBep721Token));
});
it('should test 721 mint transaction', async () => {
try {
const tokenId = new Date().getTime().toString();
const mintedToken = await polygon_1.preparePolygonMintErc721SignedTransaction(true, {
to: '0x811dfbff13adfbc3cf653dcc373c03616d3471c9',
tokenId,
url: 'https://www.seznam.cz',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.MATIC,
contractAddress: '0x5d7d868ed584b04b922905a481f274206a42dd8a',
}, 'https://matic-mumbai.chainstacklabs.com/');
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 polygon_1.preparePolygonMintMultipleErc721SignedTransaction(true, {
to: ['0x811dfbff13adfbc3cf653dcc373c03616d3471c9', '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'],
tokenId: [firstTokenId.toString(), secondTokenId.toString()],
url: ['https://www.seznam.cz', 'https://www.seznam.cz'],
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.MATIC,
contractAddress: '0x5d7d868ed584b04b922905a481f274206a42dd8a',
}, 'https://matic-mumbai.chainstacklabs.com/');
expect(mintedTokens).not.toBeNull();
console.log(await broadcast(mintedTokens));
});
it('should test 721 burn transaction', async () => {
const burnBep721Token = await polygon_1.preparePolygonBurnErc721SignedTransaction(true, {
tokenId: '1626437687633',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.MATIC,
contractAddress: '0x5d7d868ed584b04b922905a481f274206a42dd8a',
}, 'https://matic-mumbai.chainstacklabs.com/');
expect(burnBep721Token).not.toBeNull();
console.log(await broadcast(burnBep721Token));
});
it('should test 721 send transaction', async () => {
const sendBep721Token = await polygon_1.preparePolygonTransferErc721SignedTransaction(true, {
to: '0x811dfbff13adfbc3cf653dcc373c03616d3471c9',
tokenId: '1626437745973',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.MATIC,
contractAddress: '0x5d7d868ed584b04b922905a481f274206a42dd8a',
}, 'https://matic-mumbai.chainstacklabs.com/');
expect(sendBep721Token).not.toBeNull();
console.log(await broadcast(sendBep721Token));
});
});
describe('MATIC 721 provenance transactions', () => {
it('should test 721 deploy transaction', async () => {
const deployBep721Token = await polygon_1.preparePolygonDeployErc721SignedTransaction(true, {
symbol: '1oido3id3',
fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564',
chain: model_1.Currency.MATIC,
provenance: true,
name: '2123kd',
}, 'https://matic-mumbai.chainstacklabs.com/');
expect(deployBep721Token).not.toBeNull();
console.log(await broadcast(deployBep721Token));
});
it('should test 721 provenance mint transaction', async () => {
try {
const tokenId = new Date().getTime().toString();
const mintedToken = await polygon_1.preparePolygonMintErc721ProvenanceSignedTransaction(true, {
to: '0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF',
tokenId,
url: 'https://www.seznam.cz',
fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564',
chain: model_1.Currency.MATIC,
contractAddress: '0x8D2A0dd3855ECA8591756a606DA9829f703cA26B',
}, 'https://matic-mumbai.chainstacklabs.com/');
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 polygon_1.preparePolygonMintErc721ProvenanceSignedTransaction(true, {
to: '0x80D8BAc9a6901698b3749Fe336bBd1385C1f98f2',
tokenId: '12',
url: 'https://www.seznam.cz',
fromPrivateKey: '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab',
authorAddresses: ['0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF'],
cashbackValues: ['2'],
fixedValues: ['0.01'],
chain: model_1.Currency.MATIC,
contractAddress: '0x44ef7a380c34E76a39Cb00410956dE2aeeaf3B1B',
}, 'https://matic-mumbai.chainstacklabs.com/');
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 polygon_1.preparePolygonMintMultipleErc721ProvenanceSignedTransaction(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.MATIC,
contractAddress: '0xe54a147b6ebe25bda0eec07e8a0051c1b9d08338',
}, 'https://matic-mumbai.chainstacklabs.com/');
expect(mintedTokens).not.toBeNull();
console.log(await broadcast(mintedTokens));
});
it('should test 721 send transaction', async () => {
const senderc721Token = await polygon_1.preparePolygonTransferErc721SignedTransaction(true, {
to: '0xD25031B1aB4D82e5fDFb700234b2a22e272232Be',
tokenId: '12',
fromPrivateKey: '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab',
chain: model_1.Currency.MATIC,
provenance: true,
provenanceData: 'testMatic',
tokenPrice: '1.5',
value: '2',
fee: {
gasLimit: '1200000',
gasPrice: '3',
},
contractAddress: '0x44ef7a380c34E76a39Cb00410956dE2aeeaf3B1B',
}, 'https://matic-mumbai.chainstacklabs.com/');
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 polygon_1.sendPolygonSmartContractReadMethodInvocationTransaction(true, body, 'https://matic-mumbai.chainstacklabs.com/');
// @ts-ignore
console.log(JSON.stringify(response));
});
it('should test 721 burn transaction', async () => {
const burnBep721Token = await polygon_1.preparePolygonBurnErc721SignedTransaction(true, {
tokenId: '5',
fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564',
chain: model_1.Currency.MATIC,
contractAddress: '0xe54a147b6ebe25bda0eec07e8a0051c1b9d08338',
}, 'https://matic-mumbai.chainstacklabs.com/');
expect(burnBep721Token).not.toBeNull();
// console.log(await broadcast(burnBep721Token))
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbi5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3BvbHlnb24uc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdEQUF3QjtBQUN4Qiw4R0FBc0Y7QUFDdEYsb0NBQWlIO0FBQ2pILHVDQWVtQjtBQUVuQixRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLE1BQWMsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksY0FBSSxDQUFDLDBDQUEwQyxDQUFDLENBQUE7UUFDbkUsT0FBTyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDO2lCQUNyQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUNsRCxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDaEcsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7SUFFRCxRQUFRLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1FBQ3pDLEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLHFCQUFhLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLG9FQUFvRSxDQUFDO1lBQzNGLElBQUksQ0FBQyxNQUFNLEdBQUcs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