@ledgerhq/coin-casper
Version:
Ledger Casper integration
98 lines • 4.57 kB
JavaScript
;
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