UNPKG

@bitgo/utxo-ord

Version:

Utilities for building ordinals with BitGo utxo-lib

48 lines (45 loc) 4.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseSatPoint = parseSatPoint; exports.formatSatPoint = formatSatPoint; exports.isSatPoint = isSatPoint; /* https://github.com/casey/ord/blob/master/bip.mediawiki#terminology-and-notation > A satpoint may be used to indicate the location of a sat within an output. > A satpoint consists of an outpoint, i.e., a transaction ID and output index, with the addition of > the offset of the ordinal within that output. For example, if the sat in question is at offset 6 > in the first output of a transaction, its satpoint is: > `680df1e4d43016571e504b0b142ee43c5c0b83398a97bdcfd94ea6f287322d22:0:6` */ const utxo_lib_1 = require("@bitgo/utxo-lib"); function parseSatPoint(p) { const parts = p.split(':'); if (parts.length !== 3) { throw new Error(`expected format txid:vout:sat`); } const [txid, vout, offsetStr] = parts; const offset = BigInt(offsetStr); if (offset.toString() !== offsetStr) { throw new Error(`SatPoint offset must be base-10`); } if (offset < 0) { throw new Error(`SatPoint offset must be positive`); } return { ...utxo_lib_1.bitgo.parseOutputId([txid, vout].join(':')), offset, }; } function formatSatPoint(p) { return `${p.txid}:${p.vout}:${p.offset}`; } function isSatPoint(v) { try { parseSatPoint(v); return true; } catch { return false; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2F0UG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2F0UG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSxzQ0FpQkM7QUFFRCx3Q0FFQztBQUVELGdDQU9DO0FBN0NEOzs7Ozs7Ozs7O0VBVUU7QUFDRiw4Q0FBd0M7QUFJeEMsU0FBZ0IsYUFBYSxDQUFDLENBQVc7SUFDdkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE9BQU87UUFDTCxHQUFHLGdCQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQUMsQ0FBaUQ7SUFDOUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFXLENBQUM7QUFDcEQsQ0FBQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxDQUFTO0lBQ2xDLElBQUksQ0FBQztRQUNILGFBQWEsQ0FBQyxDQUFhLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcblxuaHR0cHM6Ly9naXRodWIuY29tL2Nhc2V5L29yZC9ibG9iL21hc3Rlci9iaXAubWVkaWF3aWtpI3Rlcm1pbm9sb2d5LWFuZC1ub3RhdGlvblxuXG4+IEEgc2F0cG9pbnQgbWF5IGJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGxvY2F0aW9uIG9mIGEgc2F0IHdpdGhpbiBhbiBvdXRwdXQuXG4+IEEgc2F0cG9pbnQgY29uc2lzdHMgb2YgYW4gb3V0cG9pbnQsIGkuZS4sIGEgdHJhbnNhY3Rpb24gSUQgYW5kIG91dHB1dCBpbmRleCwgd2l0aCB0aGUgYWRkaXRpb24gb2Zcbj4gdGhlIG9mZnNldCBvZiB0aGUgb3JkaW5hbCB3aXRoaW4gdGhhdCBvdXRwdXQuIEZvciBleGFtcGxlLCBpZiB0aGUgc2F0IGluIHF1ZXN0aW9uIGlzIGF0IG9mZnNldCA2XG4+IGluIHRoZSBmaXJzdCBvdXRwdXQgb2YgYSB0cmFuc2FjdGlvbiwgaXRzIHNhdHBvaW50IGlzOlxuPiBgNjgwZGYxZTRkNDMwMTY1NzFlNTA0YjBiMTQyZWU0M2M1YzBiODMzOThhOTdiZGNmZDk0ZWE2ZjI4NzMyMmQyMjowOjZgXG5cbiovXG5pbXBvcnQgeyBiaXRnbyB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmV4cG9ydCB0eXBlIFNhdFBvaW50ID0gYCR7c3RyaW5nfToke251bWJlcn06JHtiaWdpbnR9YDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2F0UG9pbnQocDogU2F0UG9pbnQpOiB7IHR4aWQ6IHN0cmluZzsgdm91dDogbnVtYmVyOyBvZmZzZXQ6IGJpZ2ludCB9IHtcbiAgY29uc3QgcGFydHMgPSBwLnNwbGl0KCc6Jyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGZvcm1hdCB0eGlkOnZvdXQ6c2F0YCk7XG4gIH1cbiAgY29uc3QgW3R4aWQsIHZvdXQsIG9mZnNldFN0cl0gPSBwYXJ0cztcbiAgY29uc3Qgb2Zmc2V0ID0gQmlnSW50KG9mZnNldFN0cik7XG4gIGlmIChvZmZzZXQudG9TdHJpbmcoKSAhPT0gb2Zmc2V0U3RyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTYXRQb2ludCBvZmZzZXQgbXVzdCBiZSBiYXNlLTEwYCk7XG4gIH1cbiAgaWYgKG9mZnNldCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNhdFBvaW50IG9mZnNldCBtdXN0IGJlIHBvc2l0aXZlYCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5iaXRnby5wYXJzZU91dHB1dElkKFt0eGlkLCB2b3V0XS5qb2luKCc6JykpLFxuICAgIG9mZnNldCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFNhdFBvaW50KHA6IHsgdHhpZDogc3RyaW5nOyB2b3V0OiBudW1iZXI7IG9mZnNldDogYmlnaW50IH0pOiBTYXRQb2ludCB7XG4gIHJldHVybiBgJHtwLnR4aWR9OiR7cC52b3V0fToke3Aub2Zmc2V0fWAgYXMgY29uc3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhdFBvaW50KHY6IHN0cmluZyk6IHYgaXMgU2F0UG9pbnQge1xuICB0cnkge1xuICAgIHBhcnNlU2F0UG9pbnQodiBhcyBTYXRQb2ludCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19