@tatumio/tatum-v1
Version:
Tatum API client allows browsers and Node.js clients to interact with Tatum API.
317 lines • 27.6 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 model_1 = require("../model");
const bsc_1 = require("./bsc");
const erc721Provenance_abi_1 = __importDefault(require("../contracts/erc721Provenance/erc721Provenance_abi"));
describe('BSC transactions', () => {
jest.setTimeout(19999);
const broadcast = async (txData) => {
const client = new web3_1.default('https://data-seed-prebsc-2-s1.binance.org:8545');
const result = 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}.`)));
});
return result;
};
it('should test valid transaction BSC data', async () => {
const body = new model_1.TransferBscBep20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '0';
body.currency = model_1.Currency.BSC;
body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
const txData = await bsc_1.prepareBscOrBep20SignedTransaction(body);
expect(txData).toContain('0x');
console.log(await broadcast(txData));
});
it('should test valid transaction ERC20 data', async () => {
const body = new model_1.TransferBscBep20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '0';
body.currency = model_1.Currency.BADA;
body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
const txData = await bsc_1.prepareBscOrBep20SignedTransaction(body);
expect(txData).toContain('0x');
console.log(await broadcast(txData));
});
it('should test valid custom transaction ERC20 data', async () => {
const body = new model_1.TransferErc20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '0';
body.contractAddress = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
body.digits = 10;
const txData = await bsc_1.prepareCustomBep20SignedTransaction(body);
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 = '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564';
body.symbol = 'SYMBOL';
body.name = 'Test_ERC20';
body.supply = '100';
body.address = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
body.digits = 10;
const txData = await bsc_1.prepareDeployBep20SignedTransaction(body);
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 bsc_1.prepareDeployBep20SignedTransaction(body);
fail('Validation did not pass.');
}
catch (e) {
console.error(e);
}
});
it('should test invalid custom transaction ERC20 data, missing digits', async () => {
const body = new model_1.TransferErc20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '0';
body.contractAddress = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
try {
await bsc_1.prepareCustomBep20SignedTransaction(body);
fail('Validation did not pass.');
}
catch (e) {
console.error(e);
}
});
it('should not test valid transaction data, missing currency', async () => {
const body = new model_1.TransferBscBep20();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.amount = '0';
body.to = '0x811DfbFF13ADFBC3Cf653dCc373C03616D3471c9';
try {
await bsc_1.prepareBscOrBep20SignedTransaction(body);
fail('Validation did not pass.');
}
catch (e) {
console.error(e);
}
});
it('should test ethGetGasPriceInWei', async () => {
const gasPrice = await bsc_1.bscGetGasPriceInWei();
expect(gasPrice).not.toBeNull();
});
it('should test read smart contract method invocation', async () => {
const result = await bsc_1.sendBscSmartContractReadMethodInvocationTransaction({
contractAddress: '0xae13d989dac2f0debff460ac112a837c89baa7cd',
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://data-seed-prebsc-2-s1.binance.org:8545');
console.log(result);
expect(result).not.toBeNull();
});
it('should test write smart contract method invocation', async () => {
const result = await bsc_1.sendBscSmartContractMethodInvocationTransaction({
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
contractAddress: '0xd7d3e5e2174b530fdfb6d680c07c8b34495e2195',
fee: { gasLimit: '40000', gasPrice: '200' },
methodName: 'transferFrom',
methodABI: {
constant: false,
inputs: [
{
name: 'from',
type: 'address',
},
{
name: 'to',
type: 'address',
},
{
name: 'value',
type: 'uint256',
},
],
name: 'transferFrom',
outputs: [
{
name: '',
type: 'bool',
},
],
payable: false,
stateMutability: 'nonpayable',
type: 'function',
},
params: ['0x811dfbff13adfbc3cf653dcc373c03616d3471c9', '0x8c76887d2e738371bd750362fb55887343472346', '1'],
});
expect(result).not.toBeNull();
});
it('should test bep 721 mint transaction', async () => {
try {
const tokenId = new Date().getTime().toString();
const mintedToken = await bsc_1.sendMintBep721Transaction({
to: '0x811dfbff13adfbc3cf653dcc373c03616d3471c9',
tokenId,
url: 'https://www.seznam.cz',
fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564',
chain: model_1.Currency.BSC,
contractAddress: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85',
});
console.log(tokenId);
expect(mintedToken).not.toBeNull();
}
catch (e) {
console.log(e);
}
});
it('should test bep 721 mint multiple transaction', async () => {
const firstTokenId = new Date().getTime();
const secondTokenId = firstTokenId + 1;
const mintedTokens = await bsc_1.sendMintMultipleBep721Transaction({
to: ['0x811dfbff13adfbc3cf653dcc373c03616d3471c9', '0x811dfbff13adfbc3cf653dcc373c03616d3471c9'],
tokenId: [firstTokenId.toString(), secondTokenId.toString()],
url: ['https://www.seznam.cz', 'https://www.seznam.cz'],
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.BSC,
contractAddress: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85',
fee: {
gasLimit: '50000',
gasPrice: '100',
},
});
expect(mintedTokens).not.toBeNull();
});
it('should test bep 721 burn transaction', async () => {
const burnBep721Token = await bsc_1.sendBurnBep721Transaction({
tokenId: '1615552558810',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.BSC,
contractAddress: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85',
fee: {
gasLimit: '5000000',
gasPrice: '110',
},
});
expect(burnBep721Token).not.toBeNull();
});
it('should test bep 721 send transaction', async () => {
const sendBep721Token = await bsc_1.sendBep721Transaction({
to: '0x811dfbff13adfbc3cf653dcc373c03616d3471c9',
tokenId: '1615546122766',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.BSC,
contractAddress: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85',
fee: {
gasLimit: '5000000',
gasPrice: '100',
},
});
expect(sendBep721Token).not.toBeNull();
});
it('should test bep 721 deploy transaction', async () => {
const deployBep721Token = await bsc_1.sendDeployBep721Transaction({
symbol: '1oido3id3',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.BSC,
name: '2123kd',
});
expect(deployBep721Token).not.toBeNull();
});
// BEP-721 Provenance
it('should test bep 721 deploy transaction', async () => {
const deployBep721Token = await bsc_1.prepareBscDeployBep721SignedTransaction({
symbol: 'test123',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.BSC,
name: 'test123',
provenance: true,
});
console.log(deployBep721Token);
expect(deployBep721Token).not.toBeNull();
});
it('should test bep 721 mint transaction', async () => {
try {
const mintedToken = await bsc_1.prepareBscMintBep721ProvenanceSignedTransaction({
to: '0x811dfbff13adfbc3cf653dcc373c03616d3471c9',
tokenId: '100',
url: 'https://www.seznam.cz',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.BSC,
contractAddress: '0x5ef08fba01e8d80ff18f4d98e31a43fbb01e7f8a',
});
console.log(mintedToken);
expect(mintedToken).not.toBeNull();
}
catch (e) {
console.log(e);
}
});
it('should test bep 721 mint multiple provenance token with cashback transaction', async () => {
const firstTokenId = new Date().getTime();
const secondTokenId = firstTokenId + 1;
const thirdTokenId = firstTokenId + 2;
const mintedTokens = await bsc_1.prepareBscMintMultipleBep721ProvenanceSignedTransaction({
to: ['0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF', '0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF', '0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF'],
tokenId: [firstTokenId.toString(), secondTokenId.toString(), thirdTokenId.toString()],
url: ['https://www.seznam.cz', 'https://www.seznam.cz', 'https://www.seznam.cz'],
cashbackValues: [['3'], ['4'], ['5']],
authorAddresses: [['0xD25031B1aB4D82e5fDFb700234b2a22e272232Be'], ['0xD25031B1aB4D82e5fDFb700234b2a22e272232Be'], ['0xD25031B1aB4D82e5fDFb700234b2a22e272232Be']],
fixedValues: [['10'], ['10'], ['10']],
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.BSC,
contractAddress: '0x5ef08fba01e8d80ff18f4d98e31a43fbb01e7f8a',
});
console.log(mintedTokens);
expect(mintedTokens).not.toBeNull();
});
it('should test bep 721 provenance send transaction', async () => {
const sendBep721Token = await bsc_1.prepareBscTransferBep721SignedTransaction({
to: '0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF',
tokenId: '100',
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.BSC,
provenanceData: 'send token X',
tokenPrice: '123',
provenance: true,
contractAddress: '0x5ef08fba01e8d80ff18f4d98e31a43fbb01e7f8a',
});
expect(sendBep721Token).not.toBeNull();
});
it('should test valid transfer data 721 transaction', async () => {
const body = new model_1.SmartContractReadMethodInvocation();
body.contractAddress = '0x5ef08fba01e8d80ff18f4d98e31a43fbb01e7f8a';
body.params = ['10'];
body.methodName = 'getTokenData';
body.methodABI = erc721Provenance_abi_1.default.find((a) => a.name === 'getTokenData');
const response = await bsc_1.sendBscSmartContractReadMethodInvocationTransaction(body);
// @ts-ignore
console.log(JSON.stringify(response));
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnNjLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vYnNjLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBd0I7QUFDeEIsb0NBQXFIO0FBQ3JILCtCQWdCZTtBQUNmLDhHQUFzRjtBQUV0RixRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLE1BQWMsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksY0FBSSxDQUFDLGdEQUFnRCxDQUFDLENBQUE7UUFDekUsTUFBTSxNQUFNLEdBQXFCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7aUJBQ3JDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ2xELEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNoRyxDQUFDLENBQUMsQ0FBQTtRQUNGLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQyxDQUFBO0lBQ0QsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksd0JBQWdCLEVBQUUsQ0FBQTtRQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLG9FQUFvRSxDQUFBO1FBQzFGLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFBO1FBQ2pC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