@ledgerhq/coin-mina
Version:
91 lines • 3.81 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getNonce = exports.getFees = exports.broadcastTransaction = exports.getTransactions = exports.getBlockInfo = exports.getAccount = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const rosetta_1 = require("./rosetta");
const consts_1 = require("../consts");
const common_logic_1 = require("../common-logic");
const logs_1 = require("@ledgerhq/logs");
const getAccount = async (address) => {
const networkStatus = await (0, rosetta_1.fetchNetworkStatus)();
let balance = new bignumber_js_1.default(0);
let spendableBalance = new bignumber_js_1.default(0);
try {
const resp = await (0, rosetta_1.fetchAccountBalance)(address);
balance = new bignumber_js_1.default(resp.balances[0].metadata.total_balance);
spendableBalance = new bignumber_js_1.default(resp.balances[0].metadata.liquid_balance);
}
catch (e) {
(0, logs_1.log)("info", "[mina] getAccount error:", {
address,
error: e,
});
// fail is expected for when account has no balance and no transactions
/* empty */
}
return {
blockHeight: networkStatus.current_block_identifier.index,
balance,
spendableBalance,
};
};
exports.getAccount = getAccount;
const getBlockInfo = async (blockHeight) => {
const data = await (0, rosetta_1.rosettaGetBlockInfo)(blockHeight);
return data;
};
exports.getBlockInfo = getBlockInfo;
const getTransactions = async (address, offset = 0) => {
const txns = await (0, rosetta_1.fetchAccountTransactions)(address, offset);
return txns.sort((a, b) => b.timestamp - a.timestamp);
};
exports.getTransactions = getTransactions;
const broadcastTransaction = async (txn) => {
const { nonce, receiverAddress, amount, fee, memo, senderAddress } = txn.transaction;
const blob = {
signature: txn.signature,
payment: {
to: receiverAddress,
from: senderAddress,
fee: fee.toFixed(),
token: consts_1.MINA_TOKEN_ID,
nonce: nonce.toFixed(),
memo: memo ?? null,
amount: amount.toFixed(),
valid_until: null,
},
stake_delegation: null,
};
const { data } = await (0, rosetta_1.rosettaSubmitTransaction)(JSON.stringify(blob));
return data.transaction_identifier.hash;
};
exports.broadcastTransaction = broadcastTransaction;
const getFees = async (txn, address) => {
if (!txn.amount || !txn.recipient || !(0, common_logic_1.isValidAddress)(txn.recipient)) {
return { fee: txn.fees.fee, accountCreationFee: new bignumber_js_1.default(0) };
}
const { data } = await (0, rosetta_1.fetchTransactionMetadata)(address, txn.recipient, txn.fees.fee.toNumber(), txn.amount.toNumber());
const accountCreationFee = data.metadata.account_creation_fee
? new bignumber_js_1.default(data.metadata.account_creation_fee)
: new bignumber_js_1.default(0);
return {
fee: new bignumber_js_1.default(data.suggested_fee[0].value),
accountCreationFee,
};
};
exports.getFees = getFees;
const getNonce = async (txn, address) => {
if (!txn.recipient || !(0, common_logic_1.isValidAddress)(txn.recipient)) {
return txn.nonce;
}
if (!txn.amount || !txn.fees) {
return txn.nonce;
}
const { data } = await (0, rosetta_1.fetchTransactionMetadata)(address, txn.recipient, txn.fees.fee.toNumber(), txn.amount.toNumber());
return parseInt(data.metadata.nonce);
};
exports.getNonce = getNonce;
//# sourceMappingURL=index.js.map