UNPKG

@ledgerhq/coin-casper

Version:
98 lines 4.57 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createNewTransaction = exports.mapTxToOps = exports.getUnit = void 0; const cryptoassets_1 = require("@ledgerhq/cryptoassets"); const errors_1 = require("@ledgerhq/errors"); const logs_1 = require("@ledgerhq/logs"); const bignumber_js_1 = __importDefault(require("bignumber.js")); const casper_js_sdk_1 = require("casper-js-sdk"); const operation_1 = require("@ledgerhq/coin-framework/operation"); const consts_1 = require("../../consts"); const addresses_1 = require("./addresses"); const fee_1 = require("./fee"); const invariant_1 = __importDefault(require("invariant")); const api_1 = require("../../api"); const getUnit = () => (0, cryptoassets_1.getCryptoCurrencyById)("casper").units[0]; exports.getUnit = getUnit; function mapTxToOps(accountId, addressHash, fees = (0, fee_1.getEstimatedFees)()) { return (tx) => { try { const ops = []; const { timestamp, caller_public_key, args: txArgs, deploy_hash, error_message } = tx; const fromAccount = (0, addresses_1.casperAccountHashFromPublicKey)(caller_public_key); let toAccount; if (txArgs.target.cl_type === "PublicKey") { toAccount = (0, addresses_1.casperAccountHashFromPublicKey)(txArgs.target.parsed); } else { toAccount = txArgs.target.parsed; } (0, invariant_1.default)(toAccount, "toAccount is required"); (0, invariant_1.default)(fromAccount, "fromAccount is required"); const date = new Date(timestamp); const value = new bignumber_js_1.default(txArgs.amount.parsed); const feeToUse = fees; const isSending = addressHash.toLowerCase() === fromAccount.toLowerCase(); const isReceiving = addressHash.toLowerCase() === toAccount.toLowerCase(); if (isSending) { ops.push({ id: (0, operation_1.encodeOperationId)(accountId, deploy_hash, "OUT"), hash: deploy_hash, type: "OUT", value: value.plus(feeToUse), fee: feeToUse, blockHeight: 1, hasFailed: error_message ? true : false, blockHash: null, accountId, senders: [fromAccount], recipients: [toAccount], date, extra: { transferId: txArgs.id.parsed?.toString(), }, }); } if (isReceiving) { ops.push({ id: (0, operation_1.encodeOperationId)(accountId, deploy_hash, "IN"), hash: deploy_hash, type: "IN", value, fee: feeToUse, blockHeight: 1, blockHash: null, hasFailed: error_message ? true : false, accountId, senders: [fromAccount], recipients: [toAccount], date, extra: { transferId: txArgs.id.parsed?.toString(), }, }); } return ops; } catch (err) { (0, logs_1.log)("warn", `mapTxToOps failed for casper, skipping operation`, err); return []; } }; } exports.mapTxToOps = mapTxToOps; const createNewTransaction = async (sender, recipient, amount, fees, transferId, network = consts_1.CASPER_NETWORK) => { (0, logs_1.log)("debug", `Creating new Transaction: ${sender}, ${recipient}, ${network}`); if (recipient && !(0, addresses_1.isAddressValid)(recipient)) { throw (0, errors_1.InvalidAddress)(`Invalid recipient Address ${recipient}`); } const client = (0, api_1.getCasperNodeRpcClient)(); const helper = await casper_js_sdk_1.CasperNetwork.create(client); const tx = helper.createTransferTransaction(casper_js_sdk_1.PublicKey.fromHex(sender), casper_js_sdk_1.PublicKey.fromHex(recipient), network, amount.toString(), fees.toNumber(), consts_1.CASPER_DEFAULT_TTL, parseInt(transferId ?? "0")); return tx; }; exports.createNewTransaction = createNewTransaction; //# sourceMappingURL=txn.js.map