@tatumio/nft-connector
Version:
NFT Connector for Tatum API
767 lines (766 loc) • 37.8 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NftService = void 0;
const axios_1 = __importDefault(require("axios"));
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const fcl = __importStar(require("@onflow/fcl"));
const sdk = __importStar(require("@onflow/sdk"));
const tatum_solana_1 = require("@tatumio/tatum-solana");
const tatum_kcs_1 = require("@tatumio/tatum-kcs");
const js_1 = require("@metaplex/js");
const NftError_1 = require("./NftError");
const crypto_1 = require("@harmony-js/crypto");
const erc721Provenance_abi_1 = __importDefault(require("@tatumio/tatum/dist/src/contracts/erc721Provenance/erc721Provenance_abi"));
const erc721_abi_1 = __importDefault(require("@tatumio/tatum/dist/src/contracts/erc721/erc721_abi"));
const web3_1 = __importDefault(require("web3"));
const flow_1 = require("@tatumio/tatum/dist/src/transaction/flow");
const one_1 = require("@tatumio/tatum/dist/src/transaction/one");
const tatum_1 = require("@tatumio/tatum");
class NftService {
constructor(logger) {
this.logger = logger;
}
async getMetadataErc721(chain, token, contractAddress, account, nonce) {
if (chain === tatum_1.Currency.FLOW) {
if (!account) {
throw new NftError_1.NftError(`Account address must be present.`, 'nft.erc721.failed');
}
try {
return { data: await tatum_1.getFlowNftMetadata(await this.isTestnet(), account, token, contractAddress) };
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError(`Unable to obtain information for token. ${e}`, 'nft.erc721.failed');
}
}
else if (chain === tatum_1.Currency.TRON) {
const client = await this.getClient(chain, await this.isTestnet());
client.setAddress(contractAddress);
const c = await client.contract().at(contractAddress);
try {
return { data: await c.tokenURI(token).call() };
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError(`Unable to obtain information for token. ${e}`, 'nft.erc721.failed');
}
}
else if (chain === tatum_1.Currency.EGLD) {
return await this.getElrondNftDataForAddress(chain, token, contractAddress, nonce, await this.isTestnet());
}
else if (chain === tatum_1.Currency.SOL.toString()) {
const connection = new js_1.Connection((await this.getNodesUrl(tatum_1.Currency.SOL, await this.isTestnet()))[0]);
const metadata = await js_1.programs.metadata.Metadata.findMany(connection, { mint: contractAddress });
if ((metadata === null || metadata === void 0 ? void 0 : metadata.length) > 0) {
return { onchainData: metadata[0].data };
}
throw new NftError_1.NftError(`Unable to obtain information for token.`, 'nft.erc721.failed');
}
const c = new (await this.getClient(chain, await this.isTestnet())).eth.Contract(erc721_abi_1.default, chain === tatum_1.Currency.ONE ? new crypto_1.HarmonyAddress(contractAddress).basicHex : contractAddress);
try {
return { data: await c.methods.tokenURI(token).call() };
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError(`Unable to obtain information for token. ${e}`, 'nft.erc721.failed');
}
}
async getRoyaltyErc721(chain, token, contractAddress, nonce) {
if (chain === tatum_1.Currency.FLOW) {
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
}
else if (chain === tatum_1.Currency.TRON) {
const client = await this.getClient(chain, await this.isTestnet());
client.setAddress(contractAddress);
const c = await client.contract().at(contractAddress);
try {
const [addresses, values] = await Promise.all([c.tokenCashbackRecipients(token).call(), c.tokenCashbackValues(token).call()]);
return {
addresses: addresses.map(a => tatum_1.convertAddressFromHex(a)),
values: values.map(c => new bignumber_js_1.default(c._hex).dividedBy(1e6).toString(10))
};
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError(`Unable to obtain information for token. ${e}`, 'nft.erc721.failed');
}
}
else if (chain === tatum_1.Currency.EGLD) {
const data = await this.getElrondNftDataForAddress(chain, token, contractAddress, nonce, await this.isTestnet());
return { addresses: [token], values: [data === null || data === void 0 ? void 0 : data.royalties] };
}
else if (chain === tatum_1.Currency.SOL.toString()) {
const connection = new js_1.Connection((await this.getNodesUrl(tatum_1.Currency.SOL, await this.isTestnet()))[0]);
const metadata = await js_1.programs.metadata.Metadata.findMany(connection, { mint: contractAddress });
if ((metadata === null || metadata === void 0 ? void 0 : metadata.length) > 0) {
const creators = metadata[0].data.data.creators || [];
return { addresses: creators.map(c => c.address), values: creators.map(c => c.share.toString()) };
}
throw new NftError_1.NftError(`Unable to obtain information for token.`, 'nft.erc721.failed');
}
const c = new (await this.getClient(chain, await this.isTestnet())).eth.Contract(erc721_abi_1.default, chain === tatum_1.Currency.ONE ? new crypto_1.HarmonyAddress(contractAddress).basicHex : contractAddress);
try {
const [addresses, values] = await Promise.all([c.methods.tokenCashbackRecipients(token).call(), c.methods.tokenCashbackValues(token, `0x${new bignumber_js_1.default(1).multipliedBy(1e18).toString(16)}`).call()]);
return { addresses, values: values.map(c => new bignumber_js_1.default(c).dividedBy(1e18).toString(10)) };
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError(`Unable to obtain information for token. ${e}`, 'nft.erc721.failed');
}
}
async getProvenanceData(chain, contractAddress, tokenId) {
try {
const testnet = await this.isTestnet();
const provider = (await this.getNodesUrl(chain, testnet))[0];
const body = new tatum_1.SmartContractReadMethodInvocation();
const result = [];
let txData;
body.contractAddress = contractAddress;
body.params = [tokenId];
body.methodName = 'getTokenData';
body.methodABI = erc721Provenance_abi_1.default.find((a) => a.name === 'getTokenData');
switch (chain) {
case tatum_1.Currency.ETH:
txData = await tatum_1.sendSmartContractReadMethodInvocationTransaction(body);
break;
case tatum_1.Currency.CELO:
txData = await tatum_1.sendCeloSmartContractReadMethodInvocationTransaction(testnet, body, provider);
break;
case tatum_1.Currency.BSC:
txData = await tatum_1.sendBscSmartContractReadMethodInvocationTransaction(body);
break;
case tatum_1.Currency.ONE:
txData = await tatum_1.sendOneSmartContractReadMethodInvocationTransaction(testnet, body, provider);
break;
case tatum_1.Currency.MATIC:
txData = await tatum_1.sendPolygonSmartContractReadMethodInvocationTransaction(testnet, body, provider);
break;
default:
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
}
for (let i = 0; i < txData.data.length; i++) {
const t = txData.data[i].split("'''###'''", 2);
result.push({ provenanceData: t[0], tokenPrice: t[1] });
}
return result;
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError(`Unable to obtain information for token. ${e}`, 'nft.erc721.failed');
}
}
async getTokensOfOwner(chain, address, contractAddress, nonce) {
var _a;
if (chain === tatum_1.Currency.FLOW) {
try {
return (await tatum_1.getFlowNftTokenByAddress(await this.isTestnet(), address, contractAddress)).map(e => `${e}`);
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError(`Unable to obtain information for token. ${e}`, 'nft.erc721.failed');
}
}
else if (chain === tatum_1.Currency.TRON) {
const client = await this.getClient(chain, await this.isTestnet());
client.setAddress(contractAddress);
const c = await client.contract().at(contractAddress);
try {
return { data: (await c.tokensOfOwner(address).call()).map(c => new bignumber_js_1.default(c._hex).toString(10)) };
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError(`Unable to obtain information for token. ${e}`, 'nft.erc721.failed');
}
}
else if (chain === tatum_1.Currency.EGLD) {
return { data: [(_a = (await this.getElrondNftDataForAddress(chain, address, contractAddress, nonce, await this.isTestnet()))) === null || _a === void 0 ? void 0 : _a.creator] };
}
const c = new (await this.getClient(chain, await this.isTestnet())).eth.Contract(erc721_abi_1.default, chain === tatum_1.Currency.ONE ? new crypto_1.HarmonyAddress(contractAddress).basicHex : contractAddress);
try {
return { data: await c.methods.tokensOfOwner(address).call() };
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError(`Unable to obtain information for token. ${e}`, 'nft.erc721.failed');
}
}
async getContractAddress(chain, txId) {
if (chain === tatum_1.Currency.FLOW) {
try {
await this.getClient(chain, await this.isTestnet());
const tx = await sdk.send(sdk.build([sdk.getTransaction(txId)]));
const { args } = await sdk.decode(tx);
if (args && args.length) {
return { contractAddress: args[0].value };
}
}
catch (e) {
this.logger.error(e);
}
throw new NftError_1.NftError('Transaction not found. Possible not exists or is still pending.', 'tx.not.found');
}
else if (chain === tatum_1.Currency.TRON) {
try {
const tx = await (await this.getClient(chain, await this.isTestnet())).trx.getTransactionInfo(txId);
return { contractAddress: tatum_1.convertAddressFromHex(tx.contract_address) };
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError('Transaction not found. Possible not exists or is still pending.', 'tx.not.found');
}
}
else if (chain === tatum_1.Currency.EGLD) {
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
}
try {
const web3 = await this.getClient(chain, await this.isTestnet());
const { contractAddress } = await web3.eth.getTransactionReceipt(txId);
return { contractAddress };
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError('Transaction not found. Possible not exists or is still pending.', 'tx.not.found');
}
}
async getTransaction(chain, txId) {
if (chain === tatum_1.Currency.FLOW) {
try {
await this.getClient(chain, await this.isTestnet());
const tx = await sdk.send(sdk.build([sdk.getTransaction(txId)]));
const decoded = await sdk.decode(tx);
try {
const txStatus = await sdk.send(sdk.build([sdk.getTransactionStatus(txId)]));
return { ...decoded, ...await sdk.decode(txStatus) };
}
catch (e) {
this.logger.warn(e);
}
return decoded;
}
catch (e) {
this.logger.error(e);
}
throw new NftError_1.NftError('Transaction not found. Possible not exists or is still pending.', 'tx.not.found');
}
else if (chain === tatum_1.Currency.TRON) {
try {
return await (await this.getClient(chain, await this.isTestnet())).trx.getTransactionInfo(txId);
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError('Transaction not found. Possible not exists or is still pending.', 'tx.not.found');
}
}
else if (chain === tatum_1.Currency.EGLD) {
try {
return await tatum_1.egldGetTransaction(txId);
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError('Transaction not found. Possible not exists or is still pending.', 'tx.not.found');
}
}
try {
const web3 = await this.getClient(chain, await this.isTestnet());
const { r, s, v, hash, ...transaction } = (await web3.eth.getTransaction(txId));
let receipt = undefined;
try {
receipt = await web3.eth.getTransactionReceipt(hash);
}
catch (_) {
transaction.transactionHash = hash;
}
return { ...transaction, ...receipt };
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError('Transaction not found. Possible not exists or is still pending.', 'tx.not.found');
}
}
async transferErc721(body) {
const testnet = await this.isTestnet();
let txData;
const { chain } = body;
const provider = (await this.getNodesUrl(chain, testnet))[0];
switch (chain) {
case tatum_1.Currency.ETH:
txData = await tatum_1.prepareEthTransferErc721SignedTransaction(body, provider);
break;
case tatum_1.Currency.ONE:
txData = await one_1.prepareOneTransfer721SignedTransaction(testnet, body, provider);
break;
case tatum_1.Currency.MATIC:
txData = await tatum_1.preparePolygonTransferErc721SignedTransaction(testnet, body, provider);
break;
case tatum_1.Currency.KCS:
txData = await tatum_kcs_1.prepareTransferErc721SignedTransaction(body, provider);
break;
case tatum_1.Currency.SOL.toString():
txData = await tatum_solana_1.transferNft(body, provider);
if (body.signatureId) {
txData = JSON.stringify(txData);
}
break;
case tatum_1.Currency.TRON:
await this.getClient(chain, await this.isTestnet());
txData = await tatum_1.prepareTronTransferTrc721SignedTransaction(testnet, body);
break;
case tatum_1.Currency.BSC:
txData = await tatum_1.prepareBscTransferBep721SignedTransaction(body, provider);
break;
case tatum_1.Currency.CELO:
txData = await tatum_1.prepareCeloTransferErc721SignedTransaction(testnet, body, provider);
break;
case tatum_1.Currency.EGLD:
txData = await tatum_1.prepareEgldTransferNftSignedTransaction(body, provider);
break;
case tatum_1.Currency.FLOW:
if (body.signatureId) {
txData = JSON.stringify({ type: flow_1.FlowTxType.TRANSFER_NFT, body });
}
else {
return this.wrapFlowCall(async (proposer, payer) => await tatum_1.sendFlowNftTransferToken(testnet, body, proposer, payer));
}
break;
case tatum_1.Currency.ALGO:
txData = await tatum_1.prepareAlgoTransferNFTSignedTransaction(testnet, body, provider);
break;
default:
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
}
if (body.signatureId) {
return { signatureId: await this.storeKMSTransaction(txData, chain, [body.signatureId], body.index) };
}
else {
return this.broadcast(chain, txData);
}
}
async mintErc721(body) {
const testnet = await this.isTestnet();
let txData;
const { chain } = body;
const provider = (await this.getNodesUrl(chain, testnet))[0];
switch (chain) {
case tatum_1.Currency.ETH: {
const builtInBody = await this.getMintBuiltInData(body);
if (body.provenance) {
txData = await tatum_1.prepareEthMintErc721ProvenanceSignedTransaction((builtInBody || body), provider);
}
else {
if (!body.authorAddresses) {
txData = await tatum_1.prepareEthMintErc721SignedTransaction((builtInBody || body), provider);
}
else {
txData = await tatum_1.prepareEthMintCashbackErc721SignedTransaction((builtInBody || body), provider);
}
}
break;
}
case tatum_1.Currency.MATIC: {
const builtInBody = await this.getMintBuiltInData(body);
if (body.provenance) {
txData = await tatum_1.preparePolygonMintErc721ProvenanceSignedTransaction(testnet, (builtInBody || body), provider);
}
else {
if (!body.authorAddresses) {
txData = await tatum_1.preparePolygonMintErc721SignedTransaction(testnet, (builtInBody || body), provider);
}
else {
txData = await tatum_1.preparePolygonMintCashbackErc721SignedTransaction(testnet, (builtInBody || body), provider);
}
}
break;
}
case tatum_1.Currency.KCS: {
const builtInBody = await this.getMintBuiltInData(body);
if (body.provenance) {
}
else {
if (!body.authorAddresses) {
txData = await tatum_kcs_1.prepareMintErc721SignedTransaction((builtInBody || body), provider);
}
else {
}
}
break;
}
case tatum_1.Currency.ONE: {
const builtInBody = await this.getMintBuiltInData(body);
if (body.provenance) {
txData = await tatum_1.prepareOneMint721ProvenanceSignedTransaction(testnet, (builtInBody || body), provider);
}
else {
if (!body.authorAddresses) {
txData = await one_1.prepareOneMint721SignedTransaction(testnet, (builtInBody || body), provider);
}
else {
txData = await one_1.prepareOneMintCashback721SignedTransaction(testnet, (builtInBody || body), provider);
}
}
break;
}
case tatum_1.Currency.BSC: {
const builtInBody = await this.getMintBuiltInData(body);
if (body.provenance) {
txData = await tatum_1.prepareBscMintBep721ProvenanceSignedTransaction((builtInBody || body), provider);
}
else {
if (!body.authorAddresses) {
txData = await tatum_1.prepareBscMintBep721SignedTransaction((builtInBody || body), provider);
}
else {
txData = await tatum_1.prepareBscMintBepCashback721SignedTransaction((builtInBody || body), provider);
}
}
break;
}
case tatum_1.Currency.TRON:
await this.getClient(tatum_1.Currency.TRON, await this.isTestnet());
if (!body.authorAddresses) {
txData = await tatum_1.prepareTronMintTrc721SignedTransaction(testnet, body);
}
else {
txData = await tatum_1.prepareTronMintCashbackTrc721SignedTransaction(testnet, body);
}
break;
case tatum_1.Currency.CELO: {
const builtInBody = await this.getMintBuiltInData(body);
if (body.provenance) {
txData = await tatum_1.prepareCeloMintErc721ProvenanceSignedTransaction(testnet, (builtInBody || body), provider);
}
else {
if (!body.authorAddresses) {
txData = await tatum_1.prepareCeloMintErc721SignedTransaction(testnet, (builtInBody || body), provider);
}
else {
txData = await tatum_1.prepareCeloMintCashbackErc721SignedTransaction(testnet, (builtInBody || body), provider);
}
}
break;
}
case tatum_1.Currency.EGLD:
txData = await tatum_1.prepareEgldCreateNftOrSftSignedTransaction(body, provider);
break;
case tatum_1.Currency.SOL:
txData = await tatum_solana_1.mintNft(body, provider);
if (body.signatureId) {
txData = JSON.stringify(txData);
}
break;
case tatum_1.Currency.FLOW:
if (body.signatureId) {
txData = JSON.stringify({ type: flow_1.FlowTxType.MINT_NFT, body });
}
else {
return this.wrapFlowCall(async (proposer, payer) => await tatum_1.sendFlowNftMintToken(testnet, body, proposer, payer));
}
break;
default:
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
}
if (body.signatureId) {
return { signatureId: await this.storeKMSTransaction(txData, chain, [body.signatureId], body.index) };
}
else {
return this.broadcast(chain, txData);
}
}
async addMinter(body) {
const testnet = await this.isTestnet();
const { chain } = body;
const provider = (await this.getNodesUrl(chain, testnet))[0];
const txData = await tatum_1.prepareAddNFTMinter(testnet, body, provider);
if (body.signatureId) {
return { signatureId: await this.storeKMSTransaction(txData, chain, [body.signatureId], body.index) };
}
else {
return this.broadcast(chain, txData);
}
}
async mintMultipleErc721(body) {
const testnet = await this.isTestnet();
let txData;
const { chain } = body;
const provider = (await this.getNodesUrl(chain, testnet))[0];
switch (chain) {
case tatum_1.Currency.ETH:
if (body.provenance) {
txData = await tatum_1.prepareEthMintMultipleErc721ProvenanceSignedTransaction(body, provider);
}
else {
if (!body.authorAddresses) {
txData = await tatum_1.prepareEthMintMultipleErc721SignedTransaction(body, provider);
}
else {
txData = await tatum_1.prepareEthMintMultipleCashbackErc721SignedTransaction(body, provider);
}
}
break;
case tatum_1.Currency.MATIC:
if (body.provenance) {
txData = await tatum_1.preparePolygonMintMultipleErc721ProvenanceSignedTransaction(testnet, body, provider);
}
else {
if (!body.authorAddresses) {
txData = await tatum_1.preparePolygonMintMultipleErc721SignedTransaction(testnet, body, provider);
}
else {
txData = await tatum_1.preparePolygonMintMultipleCashbackErc721SignedTransaction(testnet, body, provider);
}
}
break;
case tatum_1.Currency.ONE:
if (body.provenance) {
txData = await tatum_1.prepareOneMintMultiple721ProvenanceSignedTransaction(testnet, body, provider);
}
else {
if (!body.authorAddresses) {
txData = await one_1.prepareOneMintMultiple721SignedTransaction(testnet, body, provider);
}
else {
txData = await one_1.prepareOneMintMultipleCashback721SignedTransaction(testnet, body, provider);
}
}
break;
case tatum_1.Currency.TRON:
await this.getClient(chain, await this.isTestnet());
if (!body.authorAddresses) {
txData = await tatum_1.prepareTronMintMultipleTrc721SignedTransaction(testnet, body);
}
else {
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
}
break;
case tatum_1.Currency.BSC:
if (body.provenance) {
txData = await tatum_1.prepareBscMintMultipleBep721ProvenanceSignedTransaction(body, provider);
}
else {
if (!body.authorAddresses) {
txData = await tatum_1.prepareBscMintMultipleBep721SignedTransaction(body, provider);
}
else {
txData = await tatum_1.prepareBscMintMultipleCashbackBep721SignedTransaction(body, provider);
}
}
break;
case tatum_1.Currency.CELO:
if (body.provenance) {
txData = await tatum_1.prepareCeloMintMultipleErc721ProvenanceSignedTransaction(testnet, body, provider);
}
else {
if (!body.authorAddresses) {
txData = await tatum_1.prepareCeloMintMultipleErc721SignedTransaction(testnet, body, provider);
}
else {
txData = await tatum_1.prepareCeloMintMultipleCashbackErc721SignedTransaction(testnet, body, provider);
}
}
break;
case tatum_1.Currency.EGLD:
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
case tatum_1.Currency.FLOW:
if (body.signatureId) {
txData = JSON.stringify({ type: flow_1.FlowTxType.MINT_MULTIPLE_NFT, body });
}
else {
return this.wrapFlowCall(async (proposer, payer) => await tatum_1.sendFlowNftMintMultipleToken(testnet, body, proposer, payer));
}
break;
default:
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
}
if (body.signatureId) {
return { signatureId: await this.storeKMSTransaction(txData, chain, [body.signatureId], body.index) };
}
else {
return this.broadcast(chain, txData);
}
}
async updateCashbackForAuthor(body) {
const testnet = await this.isTestnet();
let txData;
const { chain } = body;
switch (chain) {
case tatum_1.Currency.ETH:
txData = await tatum_1.prepareEthUpdateCashbackForAuthorErc721SignedTransaction(body, (await this.getNodesUrl(chain, testnet))[0]);
break;
case tatum_1.Currency.MATIC:
txData = await tatum_1.preparePolygonUpdateCashbackForAuthorErc721SignedTransaction(testnet, body, (await this.getNodesUrl(chain, testnet))[0]);
break;
case tatum_1.Currency.KCS:
txData = await tatum_kcs_1.prepareUpdateCashbackForAuthorErc721SignedTransaction(body, (await this.getNodesUrl(chain, testnet))[0]);
break;
case tatum_1.Currency.ONE:
txData = await one_1.prepareOneUpdateCashbackForAuthor721SignedTransaction(testnet, body, (await this.getNodesUrl(chain, testnet))[0]);
break;
case tatum_1.Currency.TRON:
await this.getClient(chain, await this.isTestnet());
txData = await tatum_1.prepareTronUpdateCashbackForAuthorTrc721SignedTransaction(testnet, body);
break;
case tatum_1.Currency.BSC:
txData = await tatum_1.prepareBscUpdateCashbackForAuthorErc721SignedTransaction(body, (await this.getNodesUrl(chain, testnet))[0]);
break;
case tatum_1.Currency.CELO:
txData = await tatum_1.prepareCeloUpdateCashbackForAuthorErc721SignedTransaction(testnet, body, (await this.getNodesUrl(chain, testnet))[0]);
break;
case tatum_1.Currency.EGLD:
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
default:
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
}
if (body.signatureId) {
return { signatureId: await this.storeKMSTransaction(txData, chain, [body.signatureId], body.index) };
}
else {
return this.broadcast(chain, txData);
}
}
async burnErc721(body) {
const testnet = await this.isTestnet();
let txData;
const { chain } = body;
const provider = (await this.getNodesUrl(chain, testnet))[0];
switch (chain) {
case tatum_1.Currency.ETH:
txData = await tatum_1.prepareEthBurnErc721SignedTransaction(body, provider);
break;
case tatum_1.Currency.MATIC:
txData = await tatum_1.preparePolygonBurnErc721SignedTransaction(testnet, body, provider);
break;
case tatum_1.Currency.KCS:
txData = await tatum_kcs_1.prepareBurnErc721SignedTransaction(body, provider);
break;
case tatum_1.Currency.ONE:
txData = await one_1.prepareOneBurn721SignedTransaction(testnet, body, provider);
break;
case tatum_1.Currency.TRON:
await this.getClient(chain, await this.isTestnet());
txData = await tatum_1.prepareTronBurnTrc721SignedTransaction(testnet, body);
break;
case tatum_1.Currency.BSC:
txData = await tatum_1.prepareBscBurnBep721SignedTransaction(body, provider);
break;
case tatum_1.Currency.CELO:
txData = await tatum_1.prepareCeloBurnErc721SignedTransaction(testnet, body, provider);
break;
case tatum_1.Currency.EGLD:
txData = await tatum_1.prepareEgldAddOrBurnNftQuantitySignedTransaction(body, provider);
break;
case tatum_1.Currency.FLOW:
if (body.signatureId) {
txData = JSON.stringify({ type: flow_1.FlowTxType.BURN_NFT, body });
}
else {
return this.wrapFlowCall(async (proposer, payer) => await tatum_1.sendFlowNftBurnToken(testnet, body, proposer, payer));
}
break;
case tatum_1.Currency.ALGO:
txData = await tatum_1.prepareAlgoBurnNFTSignedTransaction(testnet, body, provider);
break;
default:
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
}
if (body.signatureId) {
return { signatureId: await this.storeKMSTransaction(txData, chain, [body.signatureId], body.index) };
}
else {
return this.broadcast(chain, txData);
}
}
async deployErc721(body) {
const testnet = await this.isTestnet();
let txData;
const { chain } = body;
const provider = (await this.getNodesUrl(chain, testnet))[0];
switch (chain) {
case tatum_1.Currency.ETH:
txData = await tatum_1.prepareEthDeployErc721SignedTransaction(body, provider);
break;
case tatum_1.Currency.MATIC:
txData = await tatum_1.preparePolygonDeployErc721SignedTransaction(testnet, body, provider);
break;
case tatum_1.Currency.KCS:
txData = await tatum_kcs_1.prepareDeployErc721SignedTransaction(body, provider);
break;
case tatum_1.Currency.ONE:
txData = await one_1.prepareOneDeploy721SignedTransaction(testnet, body, provider);
break;
case tatum_1.Currency.BSC:
txData = await tatum_1.prepareBscDeployBep721SignedTransaction(body, provider);
break;
case tatum_1.Currency.TRON:
await this.getClient(chain, await this.isTestnet());
txData = await tatum_1.prepareTronDeployTrc721SignedTransaction(testnet, body);
break;
case tatum_1.Currency.CELO:
txData = await tatum_1.prepareCeloDeployErc721SignedTransaction(testnet, body, provider);
break;
case tatum_1.Currency.EGLD:
txData = await tatum_1.prepareEgldDeployNftOrSftSignedTransaction(body, provider);
break;
case tatum_1.Currency.FLOW:
return await this.deployFlowNft(testnet, body);
break;
case tatum_1.Currency.ALGO:
txData = await tatum_1.prepareAlgoCreateNFTSignedTransaction(testnet, body, provider);
break;
default:
throw new NftError_1.NftError(`Unsupported chain ${chain}.`, 'unsupported.chain');
}
if (body.signatureId) {
return { signatureId: await this.storeKMSTransaction(txData, chain, [body.signatureId], body.index) };
}
else {
return await this.broadcast(chain, txData);
}
}
async getElrondNftDataForAddress(chain, address, contractAddress, nonce, testnet) {
const provider = (await this.getNodesUrl(chain, testnet))[0];
try {
const { tokenData } = (await axios_1.default.get(`${provider}/address/${address}/nft/${contractAddress}/nonce/${nonce}`, { headers: { 'Content-Type': 'application/json' } })).data.data;
return { data: tokenData };
}
catch (e) {
this.logger.error(e);
throw new NftError_1.NftError('Get NFT data for an address not found.', 'nft.not.found');
}
}
async getClient(chain, testnet) {
const url = (await this.getNodesUrl(chain, testnet))[0];
if (chain === tatum_1.Currency.FLOW) {
fcl.config().put('accessNode.api', url);
return;
}
else if (chain === tatum_1.Currency.TRON) {
return this.getTronClient(testnet);
}
else if (chain === tatum_1.Currency.ALGO) {
return await tatum_1.getAlgoClient(await this.isTestnet(), (await this.getNodesUrl(chain, testnet))[0]);
}
return new web3_1.default(url);
}
}
exports.NftService = NftService;