UNPKG

@firefly-exchange/library-sui

Version:

Sui library housing helper methods, classes to interact with Bluefin protocol(s) deployed on Sui

171 lines (170 loc) 6.87 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSuiAddressFromPublicKey = exports.getSuiAddressFromSigPk = exports.parseSigPK = exports.getValue = exports.isEmpty = exports.hexToString = exports.encodeOrderFlags = exports.decodeOrderFlags = exports.SignedNumberToBaseNumber = exports.SignedNumberToBigNumberStr = exports.SignedNumberToBigNumber = exports.hexStrToUint8 = exports.base64ToUint8 = exports.base64ToHex = exports.base64ToBuffer = exports.hexToBuffer = exports.bnToHex = exports.bnToString = exports.bnDiv = exports.bnMul = exports.toBaseNumber = exports.usdcToBaseNumber = exports.bnToBaseStr = exports.toBigNumberStr = exports.toBigNumber = exports.bigNumber = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); const constants_1 = require("./constants"); const types_1 = require("./types"); const lodash_1 = __importDefault(require("lodash")); const toBnBase = (base) => { return new bignumber_js_1.default(1).shiftedBy(base); }; function bigNumber(val) { return new bignumber_js_1.default(val); } exports.bigNumber = bigNumber; function toBigNumber(val, base = constants_1.BASE_DECIMALS) { return new bignumber_js_1.default(val).multipliedBy(toBnBase(base)); } exports.toBigNumber = toBigNumber; function toBigNumberStr(val, base = constants_1.BASE_DECIMALS) { return toBigNumber(val, base).toFixed(0); } exports.toBigNumberStr = toBigNumberStr; function bnToBaseStr(val, decimals = constants_1.USDC_BASE_DECIMALS, base = constants_1.BASE_DECIMALS) { return bigNumber(val).shiftedBy(-base).toFixed(decimals); } exports.bnToBaseStr = bnToBaseStr; function usdcToBaseNumber(val, decimals = constants_1.USDC_BASE_DECIMALS) { return Number(new bignumber_js_1.default(val).shiftedBy(-constants_1.USDC_BASE_DECIMALS).toFixed(decimals)); } exports.usdcToBaseNumber = usdcToBaseNumber; function toBaseNumber(val, decimals = 3, base = constants_1.BASE_DECIMALS) { return Number(new bignumber_js_1.default(val).shiftedBy(-base).toFixed(decimals)); } exports.toBaseNumber = toBaseNumber; function bnMul(a, b, base = constants_1.BASE_DECIMALS) { return bigNumber(a).multipliedBy(bigNumber(b)).dividedBy(toBnBase(base)).toFixed(0); } exports.bnMul = bnMul; function bnDiv(a, b, base = constants_1.BASE_DECIMALS) { return bigNumber(a).multipliedBy(toBnBase(base)).dividedBy(bigNumber(b)).toFixed(0); } exports.bnDiv = bnDiv; function bnToString(val) { return new bignumber_js_1.default(val).toFixed(0); } exports.bnToString = bnToString; function bnToHex(bn, pad = 32) { // u128 on chain = 16 bytes = 32 hex characters (2 char / byte) // u64 on chain = 8 bytes = 16 hex characters (2 char / byte) // u8 on chain = 1 byte = 2 hex characters return bn.toString(16).padStart(pad, "0"); } exports.bnToHex = bnToHex; function hexToBuffer(hex) { if (hex?.toLowerCase().indexOf("x") !== -1) { hex = hex.substring(2); } return Buffer.from(hex, "hex"); } exports.hexToBuffer = hexToBuffer; function base64ToBuffer(data) { return Buffer.from(data, "base64"); } exports.base64ToBuffer = base64ToBuffer; function base64ToHex(data) { return Buffer.from(data, "base64").toString("hex"); } exports.base64ToHex = base64ToHex; function base64ToUint8(data) { return Uint8Array.from(atob(data), c => c.charCodeAt(0)); } exports.base64ToUint8 = base64ToUint8; function hexStrToUint8(data) { return Uint8Array.from(data.match(/.{1,2}/g)?.map(byte => parseInt(byte, 16)) || []); } exports.hexStrToUint8 = hexStrToUint8; function SignedNumberToBigNumber(number) { return new bignumber_js_1.default(number.sign ? number.value : -1 * Number(number.value)); } exports.SignedNumberToBigNumber = SignedNumberToBigNumber; function SignedNumberToBigNumberStr(number, decimals = 2) { return SignedNumberToBigNumber(number).toFixed(decimals); } exports.SignedNumberToBigNumberStr = SignedNumberToBigNumberStr; function SignedNumberToBaseNumber(number, decimals = 3) { return toBaseNumber(SignedNumberToBigNumber(number), decimals); } exports.SignedNumberToBaseNumber = SignedNumberToBaseNumber; function decodeOrderFlags(flagsValue) { const flags = { ioc: (flagsValue & 1) > 0, postOnly: (flagsValue & 2) > 0, reduceOnly: (flagsValue & 4) > 0, isBuy: (flagsValue & 8) > 0, orderbookOnly: (flagsValue & 16) > 0 }; return flags; } exports.decodeOrderFlags = decodeOrderFlags; function encodeOrderFlags(order) { // 0th bit = ioc // 1st bit = postOnly // 2nd bit = reduceOnly // 3rd bit = isBuy // 4th bit = orderbookOnly // e.g. 00000000 // all flags false // e.g. 00000001 // ioc order, sell side, can be executed by taker // e.e. 00010001 // same as above but can only be executed by settlement operator let value = 0; if (order.ioc) value += 1; if (order.postOnly) value += 2; if (order.reduceOnly) value += 4; if (order.isBuy) value += 8; if (order.orderbookOnly) value += 16; return value; } exports.encodeOrderFlags = encodeOrderFlags; function hexToString(hex) { let str = ""; for (let i = 0; i < hex.length; i += 2) { const hexValue = hex.substr(i, 2); const decimalValue = parseInt(hexValue, 16); str += String.fromCharCode(decimalValue); } return str; } exports.hexToString = hexToString; exports.isEmpty = lodash_1.default.isEmpty; function getValue(object, path, defaultValue) { return lodash_1.default.get(object, path, defaultValue); } exports.getValue = getValue; /** * Returns parsed { signature, publicKey} from a string containing signature followed by public key * @param signature string containing sigature and public key * @returns SigPK */ function parseSigPK(signature) { return { signature: signature.slice(0, 129), publicKey: signature.slice(129) }; } exports.parseSigPK = parseSigPK; function getSuiAddressFromSigPk(sigPk) { const isSecpWallet = sigPk.signature[sigPk.signature.length - 1] == "0"; return isSecpWallet ? getSuiAddressFromPublicKey(sigPk.publicKey, "Secp256k1") : getSuiAddressFromPublicKey(sigPk.publicKey, "ED25519"); } exports.getSuiAddressFromSigPk = getSuiAddressFromSigPk; function getSuiAddressFromPublicKey(publicKey, scheme) { switch (scheme) { case "ED25519": return new types_1.Ed25519PublicKey(publicKey).toSuiAddress(); case "Secp256k1": return new types_1.Secp256k1PublicKey(publicKey).toSuiAddress(); default: throw new Error("Provided scheme is invalid"); } } exports.getSuiAddressFromPublicKey = getSuiAddressFromPublicKey;