@ledgerhq/coin-filecoin
Version:
Ledger Filecoin Coin integration
55 lines • 2.46 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.toCBOR = void 0;
const index_1 = require("../common-logic/index");
const network_1 = require("../network");
const message_1 = require("iso-filecoin/message");
const tokenAccounts_1 = require("../erc20/tokenAccounts");
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const utils_1 = require("./utils");
const toCBOR = async (account, tx) => {
const { address: from } = (0, index_1.getAddress)(account);
const { method, version, nonce, gasLimit, gasPremium, gasFeeCap, amount, recipient } = tx;
const recipientValidation = (0, network_1.validateAddress)(recipient);
const fromValidation = (0, network_1.validateAddress)(from);
const subAccount = (0, index_1.getSubAccount)(account, tx);
const tokenTransfer = subAccount && subAccount.type === utils_1.AccountType.TokenAccount;
const params = tokenTransfer ? (0, tokenAccounts_1.encodeTxnParams)(tx.params ?? "") : undefined;
if (!recipientValidation.isValid || !fromValidation.isValid)
throw new Error("recipient and/or from address are not valid");
let finalRecipient;
if (tokenTransfer) {
const validated = (0, network_1.validateAddress)(subAccount.token.contractAddress);
if (!validated.isValid)
throw new Error("token contract address is not valid");
finalRecipient = validated.parsedAddress.toString();
}
else {
finalRecipient = recipientValidation.parsedAddress.toString();
}
const finalAmount = tokenTransfer ? "0" : amount.toString();
const message = new message_1.Message({
to: finalRecipient,
from: fromValidation.parsedAddress.toString(),
gasFeeCap: gasFeeCap.toString(),
gasLimit: gasLimit.toNumber(),
gasPremium: gasPremium.toString(),
method,
nonce,
params,
version: version === 0 ? 0 : undefined,
value: finalAmount,
});
return {
txPayload: message.serialize(),
recipientToBroadcast: finalRecipient,
parsedSender: fromValidation.parsedAddress.toString(),
encodedParams: params ?? "",
amountToBroadcast: new bignumber_js_1.default(finalAmount),
};
};
exports.toCBOR = toCBOR;
//# sourceMappingURL=serializer.js.map
;