UNPKG

@ledgerhq/coin-mina

Version:
72 lines 3.03 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildSignOperation = exports.buildOptimisticOperation = void 0; const bignumber_js_1 = require("bignumber.js"); const rxjs_1 = require("rxjs"); const errors_1 = require("@ledgerhq/errors"); const operation_1 = require("@ledgerhq/coin-framework/operation"); const buildTransaction_1 = require("./buildTransaction"); const common_logic_1 = require("../common-logic"); const invariant_1 = __importDefault(require("invariant")); const buildOptimisticOperation = (account, transaction, fee) => { let value = new bignumber_js_1.BigNumber(transaction.amount).plus(fee); if (transaction.fees?.accountCreationFee.gt(0)) { value = value.minus(transaction.fees.accountCreationFee); } const type = "OUT"; const operation = { id: (0, operation_1.encodeOperationId)(account.id, "", type), hash: "", type, value, fee, blockHash: null, blockHeight: null, senders: [account.freshAddress], recipients: [transaction.recipient].filter(Boolean), accountId: account.id, date: new Date(), extra: { memo: transaction.memo, accountCreationFee: transaction.fees.accountCreationFee.toString(), }, }; return operation; }; exports.buildOptimisticOperation = buildOptimisticOperation; /** * Sign Transaction with Ledger hardware */ const buildSignOperation = (signerContext) => ({ account, transaction, deviceId, }) => new rxjs_1.Observable(o => { async function main() { o.next({ type: "device-signature-requested" }); if (!transaction.fees) { throw new errors_1.FeeNotLoaded(); } const unsigned = await (0, buildTransaction_1.buildTransaction)(account, transaction); const { signature } = (await signerContext(deviceId, signer => signer.signTransaction(unsigned))); (0, invariant_1.default)(signature, "signature should be defined if user accepted"); const encodedSignature = (0, common_logic_1.reEncodeRawSignature)(signature); const signedTransaction = { transaction: unsigned, signature: encodedSignature, }; o.next({ type: "device-signature-granted" }); const operation = (0, exports.buildOptimisticOperation)(account, transaction, transaction.fees.fee ?? new bignumber_js_1.BigNumber(0)); const signedSerializedTx = JSON.stringify(signedTransaction); o.next({ type: "signed", signedOperation: { operation, signature: signedSerializedTx, }, }); } main().then(() => o.complete(), e => o.error(e)); }); exports.buildSignOperation = buildSignOperation; exports.default = exports.buildSignOperation; //# sourceMappingURL=signOperation.js.map