@ledgerhq/coin-celo
Version:
57 lines • 2.6 kB
JavaScript
;
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