@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
JavaScript
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;
;