UNPKG

@ledgerhq/coin-filecoin

Version:
69 lines 2.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildSignOperation = void 0; const rxjs_1 = require("rxjs"); const logs_1 = require("@ledgerhq/logs"); const errors_1 = require("@ledgerhq/errors"); const buildOptimisticOperation_1 = require("./buildOptimisticOperation"); const serializer_1 = require("./serializer"); const utils_1 = require("../common-logic/utils"); const utils_2 = require("./utils"); const buildSignOperation = (signerContext) => ({ account, deviceId, transaction }) => new rxjs_1.Observable(o => { async function main() { const { method, version, nonce, gasFeeCap, gasLimit, gasPremium } = transaction; const { derivationPath } = (0, utils_1.getAddress)(account); const subAccount = (0, utils_1.getSubAccount)(account, transaction); const tokenAccountTxn = subAccount?.type === utils_2.AccountType.TokenAccount; if (!gasFeeCap.gt(0) || !gasLimit.gt(0)) { (0, logs_1.log)("debug", `signOperation missingData --> gasFeeCap=${gasFeeCap} gasLimit=${gasLimit}`); throw new errors_1.FeeNotLoaded(); } o.next({ type: "device-signature-requested", }); // Serialize tx const toCBORResponse = await (0, serializer_1.toCBOR)(account, transaction); const { txPayload, parsedSender, recipientToBroadcast, encodedParams, amountToBroadcast: finalAmount, } = toCBORResponse; (0, logs_1.log)("debug", `[signOperation] serialized CBOR tx: [${txPayload.toString("hex")}]`); // Sign by device const { r } = await signerContext(deviceId, async (signer) => { const r = await signer.sign(derivationPath, txPayload); return { r }; }); o.next({ type: "device-signature-granted", }); if (!r.signature_compact) { throw new Error("Signature compact is null"); } // build signature on the correct format const signature = `${Buffer.from(r.signature_compact).toString("base64")}`; const operation = await (0, buildOptimisticOperation_1.buildOptimisticOperation)(account, transaction, toCBORResponse); // Necessary for broadcast const additionalTxFields = { sender: parsedSender, recipient: recipientToBroadcast, params: encodedParams, gasLimit, gasFeeCap, gasPremium, method, version, nonce, signatureType: 1, tokenTransfer: tokenAccountTxn, value: finalAmount.toString(), }; o.next({ type: "signed", signedOperation: { operation, signature, rawData: additionalTxFields, }, }); } main().then(() => o.complete(), e => o.error(e)); }); exports.buildSignOperation = buildSignOperation; //# sourceMappingURL=signOperation.js.map