@tatumio/tatum-v1
Version:
Tatum API client allows browsers and Node.js clients to interact with Tatum API.
317 lines • 30.7 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 klaytn_1 = require("./klaytn");
describe('KLAY transactions', () => {
jest.setTimeout(99999);
const broadcast = async (txData) => {
const client = new web3_1.default('https://api.baobab.klaytn.net:8651/');
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('KLAY common transactions', () => {
it('should test valid transaction KLAY data', async () => {
const body = new model_1.TransferErc20();
body.fromPrivateKey = '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c';
body.amount = '0.0001';
body.currency = model_1.Currency.KLAY;
body.to = '0xf7a771bb9f013381f388abe12b38e3634c4a8f89';
const txData = await klaytn_1.prepareKlaytnSignedTransaction(true, body, 'https://api.baobab.klaytn.net:8651/');
expect(txData).toContain('0x');
console.log(await broadcast(txData));
});
it('should test valid transaction KLAY store data', async () => {
const body = new model_1.CreateRecord();
body.fromPrivateKey = '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c';
body.data = 'Hello hi';
body.chain = model_1.Currency.KLAY;
const txData = await klaytn_1.prepareKlaytnStoreDataTransaction(true, body, 'https://api.baobab.klaytn.net:8651/');
expect(txData).toContain('0x');
console.log(await broadcast(txData));
});
it('should test read smart contract method invocation', async () => {
const result = await klaytn_1.sendKlaytnSmartContractReadMethodInvocationTransaction(true, {
contractAddress: '0xb506267c2f2976fc6b7e72e5d9d322916c32df98',
methodName: 'balanceOf',
methodABI: {
constant: true,
inputs: [
{
name: 'owner',
type: 'address',
},
],
name: 'balanceOf',
outputs: [
{
name: '',
type: 'uint256',
},
],
payable: false,
stateMutability: 'view',
type: 'function',
},
params: ['0xf7a771bb9f013381f388abe12b38e3634c4a8f89'],
}, 'https://api.baobab.klaytn.net:8651/');
console.log(result);
expect(result).not.toBeNull();
});
it('should test write smart contract method invocation', async () => {
const result = await klaytn_1.prepareKlaytnSmartContractWriteMethodInvocation(true, {
fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c',
contractAddress: '0xb506267c2f2976fc6b7e72e5d9d322916c32df98',
fee: { gasLimit: '100000', gasPrice: '25' },
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://api.baobab.klaytn.net:8651/');
expect(result).not.toBeNull();
console.log(await broadcast(result));
});
});
describe('KLAY ERC20 transactions', () => {
it('should test valid custom transaction ERC20 data', async () => {
const body = new model_1.TransferErc20();
body.fromPrivateKey = '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c';
body.amount = '10';
body.contractAddress = '0xb506267c2f2976fc6b7e72e5d9d322916c32df98';
body.to = '0xf7a771bb9f013381f388abe12b38e3634c4a8f89';
body.digits = 10;
const txData = await klaytn_1.prepareKlaytnTransferErc20SignedTransaction(true, body, 'https://api.baobab.klaytn.net:8651/');
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 = '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c';
body.symbol = 'SYMBOL';
body.name = 'Test_ERC20';
body.supply = '100';
body.address = '0xf7a771bb9f013381f388abe12b38e3634c4a8f89';
body.digits = 10;
const txData = await klaytn_1.prepareKlaytnDeployErc20SignedTransaction(true, body, 'https://api.baobab.klaytn.net:8651/');
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 = '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c';
body.symbol = 'SYMBOL';
body.name = 'Test_ERC20';
body.address = '0xf7a771bb9f013381f388abe12b38e3634c4a8f89';
body.digits = 10;
try {
await klaytn_1.prepareKlaytnDeployErc20SignedTransaction(true, body, 'https://api.baobab.klaytn.net:8651/');
fail('Validation did not pass.');
}
catch (e) {
console.error(e);
}
});
});
describe('KLAY 721 transactions', () => {
it('should test 721 deploy transaction', async () => {
const deploy721Token = await klaytn_1.prepareKlaytnDeployErc721SignedTransaction(true, {
symbol: '1oido3id3',
fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c',
chain: model_1.Currency.KLAY,
name: '2123kd',
}, 'https://api.baobab.klaytn.net:8651/');
expect(deploy721Token).not.toBeNull();
console.log(await broadcast(deploy721Token));
});
it('should test 721 mint transaction', async () => {
try {
const tokenId = new Date().getTime().toString();
const mintedToken = await klaytn_1.prepareKlaytnMintErc721SignedTransaction(true, {
to: '0xf7a771bb9f013381f388abe12b38e3634c4a8f89',
tokenId,
url: 'https://www.seznam.cz',
fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c',
chain: model_1.Currency.KLAY,
contractAddress: '0x989b4b92c81abb963e1dcec5b46ac8a5c9f1431b',
}, 'https://api.baobab.klaytn.net:8651/');
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 klaytn_1.prepareKlaytnMintMultipleErc721SignedTransaction(true, {
to: ['0xf7a771bb9f013381f388abe12b38e3634c4a8f89', '0xf7a771bb9f013381f388abe12b38e3634c4a8f89'],
tokenId: [firstTokenId.toString(), secondTokenId.toString()],
url: ['https://www.seznam.cz', 'https://www.seznam.cz'],
fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c',
chain: model_1.Currency.KLAY,
contractAddress: '0x989b4b92c81abb963e1dcec5b46ac8a5c9f1431b',
}, 'https://api.baobab.klaytn.net:8651/');
expect(mintedTokens).not.toBeNull();
console.log(await broadcast(mintedTokens));
});
it('should test 721 burn transaction', async () => {
const burn721Token = await klaytn_1.prepareKlaytnBurnErc721SignedTransaction(true, {
tokenId: '1626437687633',
fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c',
chain: model_1.Currency.KLAY,
contractAddress: '0x989b4b92c81abb963e1dcec5b46ac8a5c9f1431b',
}, 'https://api.baobab.klaytn.net:8651/');
expect(burn721Token).not.toBeNull();
console.log(await broadcast(burn721Token));
});
it('should test 721 send transaction', async () => {
const send721Token = await klaytn_1.prepareKlaytnTransferErc721SignedTransaction(true, {
to: '0xf7a771bb9f013381f388abe12b38e3634c4a8f89',
tokenId: '1626437745973',
fromPrivateKey: '0xcf3b62b29d73b94d78a893e3cef81d9020cd2a50c3f9be770ead5824a5faee3c',
chain: model_1.Currency.KLAY,
contractAddress: '0x989b4b92c81abb963e1dcec5b46ac8a5c9f1431b',
}, 'https://api.baobab.klaytn.net:8651/');
expect(send721Token).not.toBeNull();
console.log(await broadcast(send721Token));
});
});
describe('KLAY 721 provenance transactions', () => {
it('should test 721 deploy transaction', async () => {
const deploy721Token = await klaytn_1.prepareKlaytnDeployErc721SignedTransaction(true, {
symbol: '1oido3id3',
fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564',
chain: model_1.Currency.KLAY,
provenance: true,
name: '2123kd',
}, 'https://api.baobab.klaytn.net:8651/');
expect(deploy721Token).not.toBeNull();
console.log(await broadcast(deploy721Token));
});
it('should test 721 provenance mint transaction', async () => {
try {
const tokenId = new Date().getTime().toString();
const mintedToken = await klaytn_1.prepareKlaytnMintErc721ProvenanceSignedTransaction(true, {
to: '0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF',
tokenId,
url: 'https://www.seznam.cz',
fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564',
chain: model_1.Currency.KLAY,
contractAddress: '0x8D2A0dd3855ECA8591756a606DA9829f703cA26B',
}, 'https://api.baobab.klaytn.net:8651/');
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 klaytn_1.prepareKlaytnMintErc721ProvenanceSignedTransaction(true, {
to: '0x80D8BAc9a6901698b3749Fe336bBd1385C1f98f2',
tokenId: '12',
url: 'https://www.seznam.cz',
fromPrivateKey: '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab',
authorAddresses: ['0x75Bd6dFA13C0086b9C8C4b510b1F758c720B79BF'],
cashbackValues: ['2'],
fixedValues: ['0.01'],
chain: model_1.Currency.KLAY,
contractAddress: '0x44ef7a380c34E76a39Cb00410956dE2aeeaf3B1B',
}, 'https://api.baobab.klaytn.net:8651/');
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 klaytn_1.prepareKlaytnMintMultipleErc721ProvenanceSignedTransaction(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.KLAY,
contractAddress: '0xe54a147b6ebe25bda0eec07e8a0051c1b9d08338',
}, 'https://api.baobab.klaytn.net:8651/');
expect(mintedTokens).not.toBeNull();
console.log(await broadcast(mintedTokens));
});
it('should test 721 send transaction', async () => {
const senderc721Token = await klaytn_1.prepareKlaytnTransferErc721SignedTransaction(true, {
to: '0xD25031B1aB4D82e5fDFb700234b2a22e272232Be',
tokenId: '12',
fromPrivateKey: '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab',
chain: model_1.Currency.KLAY,
provenance: true,
provenanceData: 'testMatic',
tokenPrice: '1.5',
value: '2',
fee: {
gasLimit: '1200000',
gasPrice: '3',
},
contractAddress: '0x44ef7a380c34E76a39Cb00410956dE2aeeaf3B1B',
}, 'https://api.baobab.klaytn.net:8651/');
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 klaytn_1.sendKlaytnSmartContractReadMethodInvocationTransaction(true, body, 'https://api.baobab.klaytn.net:8651/');
// @ts-ignore
console.log(JSON.stringify(response));
});
it('should test 721 burn transaction', async () => {
const burn721Token = await klaytn_1.prepareKlaytnBurnErc721SignedTransaction(true, {
tokenId: '5',
fromPrivateKey: '0xf17abcb517d759efee24bc4859183c7219c588540754318baebb3f9c31449564',
chain: model_1.Currency.KLAY,
contractAddress: '0xe54a147b6ebe25bda0eec07e8a0051c1b9d08338',
}, 'https://api.baobab.klaytn.net:8651/');
expect(burn721Token).not.toBeNull();
// console.log(await broadcast(burn721Token))
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2xheXRuLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24va2xheXRuLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBd0I7QUFDeEIsOEdBQXNGO0FBQ3RGLG9DQUFpSDtBQUNqSCxxQ0Fja0I7QUFFbEIsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtJQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3RCLE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO1FBQzlELE9BQU8sTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztpQkFDckMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDbEQsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2hHLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0lBRUQsUUFBUSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtRQUN4QyxFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxxQkFBYSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxvRUFBb0UsQ0FBQztZQUMzRixJQUFJLENBQUMsTUFBTSxHQUFHLFFB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