@ledgerhq/coin-mina
Version:
72 lines • 3.03 kB
JavaScript
;
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