UNPKG

@ledgerhq/coin-celo

Version:
57 lines 2.6 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.prepareTransaction = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); const address_1 = require("@celo/utils/lib/address"); const getFeesForTransaction_1 = __importDefault(require("./getFeesForTransaction")); const index_1 = require("@ledgerhq/coin-framework/account/index"); const constants_1 = require("../constants"); const sdk_1 = require("../network/sdk"); const prepareTransaction = async (account, transaction) => { const kit = (0, sdk_1.celoKit)(); if (transaction.recipient && !(0, address_1.isValidAddress)(transaction.recipient)) return transaction; if (["send", "vote"].includes(transaction.mode) && !transaction.recipient) return transaction; if (transaction.mode === "vote" && !transaction.useAllAmount && new bignumber_js_1.default(transaction.amount).lte(0)) return transaction; const fees = await (0, getFeesForTransaction_1.default)({ account, transaction }); const tokenAccount = (0, index_1.findSubAccountById)(account, transaction.subAccountId || ""); const isTokenTransaction = tokenAccount?.type === "TokenAccount"; const amount = transaction.useAllAmount && isTokenTransaction ? tokenAccount.balance : transaction.amount; let token; if (isTokenTransaction) { if (constants_1.CELO_STABLE_TOKENS.includes(tokenAccount.token.id)) { token = await kit.contracts.getStableToken(); } else { token = await kit.contracts.getErc20(tokenAccount.token.contractAddress); } } else { token = await kit.contracts.getGoldToken(); } const block = await kit.connection.web3.eth.getBlock("latest"); const baseFee = BigInt(block.baseFeePerGas || constants_1.MAX_PRIORITY_FEE_PER_GAS); const maxFeePerGas = baseFee + constants_1.MAX_PRIORITY_FEE_PER_GAS; return { ...transaction, amount, fees, maxFeePerGas: maxFeePerGas.toString(), maxPriorityFeePerGas: await kit.connection.getMaxPriorityFeePerGas(), ...(isTokenTransaction ? { data: Buffer.from(token.transfer(transaction.recipient, amount.toFixed()).txo.encodeABI()), } : {}), }; }; exports.prepareTransaction = prepareTransaction; exports.default = exports.prepareTransaction; //# sourceMappingURL=prepareTransaction.js.map