@pioneer-platform/helpers 0.0.0-development.114 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/lib/helpers/asset.d.ts +36 -0
  2. package/lib/helpers/asset.js +270 -0
  3. package/lib/helpers/liquidity.d.ts +58 -0
  4. package/lib/helpers/liquidity.js +112 -0
  5. package/lib/helpers/memo.d.ts +46 -0
  6. package/lib/helpers/memo.js +46 -0
  7. package/lib/helpers/others.d.ts +3 -0
  8. package/lib/helpers/others.js +24 -0
  9. package/lib/helpers/request.d.ts +5 -0
  10. package/lib/helpers/request.js +74 -0
  11. package/lib/helpers/validators.d.ts +1 -0
  12. package/lib/helpers/validators.js +17 -0
  13. package/lib/index.d.ts +15 -0
  14. package/lib/index.js +31 -0
  15. package/lib/modules/__tests__/assetValue.test.d.ts +1 -0
  16. package/lib/modules/__tests__/assetValue.test.js +399 -0
  17. package/lib/modules/__tests__/swapKitNumber.test.d.ts +1 -0
  18. package/lib/modules/__tests__/swapKitNumber.test.js +425 -0
  19. package/lib/modules/assetValue.d.ts +55 -0
  20. package/lib/modules/assetValue.js +389 -0
  21. package/lib/modules/bigIntArithmetics.d.ts +58 -0
  22. package/lib/modules/bigIntArithmetics.js +344 -0
  23. package/lib/modules/swapKitError.d.ts +64 -0
  24. package/lib/modules/swapKitError.js +90 -0
  25. package/lib/modules/swapKitNumber.d.ts +6 -0
  26. package/lib/modules/swapKitNumber.js +36 -0
  27. package/package.json +20 -33
  28. package/src/helpers/asset.ts +232 -0
  29. package/src/helpers/liquidity.ts +174 -0
  30. package/src/helpers/memo.ts +90 -0
  31. package/src/helpers/others.ts +20 -0
  32. package/src/helpers/request.ts +33 -0
  33. package/src/helpers/validators.ts +17 -0
  34. package/src/index.ts +16 -6
  35. package/src/modules/assetValue.ts +358 -0
  36. package/src/modules/bigIntArithmetics.ts +416 -0
  37. package/src/{exceptions/SwapKitError.ts → modules/swapKitError.ts} +15 -4
  38. package/src/modules/swapKitNumber.ts +16 -0
  39. package/tsconfig.json +13 -0
  40. package/src/__tests__/asset.test.ts +0 -33
  41. package/src/__tests__/derivationPath.test.ts +0 -16
  42. package/src/amount.ts +0 -29
  43. package/src/asset.ts +0 -13
  44. package/src/derivationPath.ts +0 -5
  45. package/src/exceptions/index.ts +0 -1
  46. package/src/fees.ts +0 -13
  47. package/src/request.ts +0 -34
@@ -0,0 +1,36 @@
1
+ import { Chain, FeeOption } from '@coinmasters/types';
2
+ export type CommonAssetString = 'MAYA.MAYA' | 'ETH.THOR' | 'ETH.vTHOR' | Chain;
3
+ export declare const getDecimal: ({ chain, symbol }: {
4
+ chain: Chain;
5
+ symbol: string;
6
+ }) => Promise<any>;
7
+ export declare const gasFeeMultiplier: Record<FeeOption, number>;
8
+ export declare const isGasAsset: ({ chain, symbol }: {
9
+ chain: Chain;
10
+ symbol: string;
11
+ }) => boolean | undefined;
12
+ export declare const getCommonAssetInfo: (assetString: CommonAssetString) => {
13
+ identifier: string;
14
+ decimal: number;
15
+ };
16
+ export declare const getAssetType: ({ chain, symbol }: {
17
+ chain: Chain;
18
+ symbol: string;
19
+ }) => Chain.Avalanche | Chain.Cosmos | Chain.Kujira | "Synth" | "Native" | "BEP2" | "BEP20" | "ERC20" | "POLYGON" | "ARBITRUM" | "OPTIMISM" | undefined;
20
+ export declare const assetFromString: (assetString: string) => {
21
+ chain: Chain;
22
+ symbol: string;
23
+ ticker: string;
24
+ synth: boolean;
25
+ };
26
+ export declare const filterAssets: (tokens: {
27
+ value: string;
28
+ decimal: number;
29
+ chain: Chain;
30
+ symbol: string;
31
+ }[]) => {
32
+ value: string;
33
+ decimal: number;
34
+ chain: Chain;
35
+ symbol: string;
36
+ }[];
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var _a;
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.filterAssets = exports.assetFromString = exports.getAssetType = exports.getCommonAssetInfo = exports.isGasAsset = exports.gasFeeMultiplier = exports.getDecimal = void 0;
41
+ var types_1 = require("@coinmasters/types");
42
+ var index_1 = require("../index");
43
+ var getDecimalMethodHex = '0x313ce567';
44
+ var getContractDecimals = function (_a) {
45
+ var chain = _a.chain, to = _a.to;
46
+ return __awaiter(void 0, void 0, void 0, function () {
47
+ var result, error_1;
48
+ return __generator(this, function (_b) {
49
+ switch (_b.label) {
50
+ case 0:
51
+ _b.trys.push([0, 2, , 3]);
52
+ return [4 /*yield*/, index_1.RequestClient.post(types_1.ChainToRPC[chain], {
53
+ headers: {
54
+ accept: '*/*',
55
+ 'content-type': 'application/json',
56
+ 'cache-control': 'no-cache',
57
+ },
58
+ body: JSON.stringify({
59
+ id: 44,
60
+ jsonrpc: '2.0',
61
+ method: 'eth_call',
62
+ params: [{ to: to.toLowerCase(), data: getDecimalMethodHex }, 'latest'],
63
+ }),
64
+ })];
65
+ case 1:
66
+ result = (_b.sent()).result;
67
+ return [2 /*return*/, parseInt(BigInt(result).toString())];
68
+ case 2:
69
+ error_1 = _b.sent();
70
+ console.error(error_1);
71
+ // @ts-ignore
72
+ return [2 /*return*/, types_1.BaseDecimal[chain]];
73
+ case 3: return [2 /*return*/];
74
+ }
75
+ });
76
+ });
77
+ };
78
+ var getETHAssetDecimal = function (symbol) { return __awaiter(void 0, void 0, void 0, function () {
79
+ var _a, address;
80
+ return __generator(this, function (_b) {
81
+ if (symbol === types_1.Chain.Ethereum)
82
+ return [2 /*return*/, types_1.BaseDecimal.ETH];
83
+ _a = symbol.split('-'), address = _a[1];
84
+ return [2 /*return*/, (address === null || address === void 0 ? void 0 : address.startsWith('0x'))
85
+ ? getContractDecimals({ chain: types_1.Chain.Ethereum, to: address })
86
+ : types_1.BaseDecimal.ETH];
87
+ });
88
+ }); };
89
+ var getAVAXAssetDecimal = function (symbol) { return __awaiter(void 0, void 0, void 0, function () {
90
+ var _a, address;
91
+ return __generator(this, function (_b) {
92
+ _a = symbol.split('-'), address = _a[1];
93
+ return [2 /*return*/, (address === null || address === void 0 ? void 0 : address.startsWith('0x'))
94
+ ? getContractDecimals({ chain: types_1.Chain.Avalanche, to: address.toLowerCase() })
95
+ : types_1.BaseDecimal.AVAX];
96
+ });
97
+ }); };
98
+ var getBSCAssetDecimal = function (symbol) { return __awaiter(void 0, void 0, void 0, function () {
99
+ return __generator(this, function (_a) {
100
+ if (symbol === types_1.Chain.BinanceSmartChain)
101
+ return [2 /*return*/, types_1.BaseDecimal.BSC];
102
+ return [2 /*return*/, types_1.BaseDecimal.BSC];
103
+ });
104
+ }); };
105
+ var getDecimal = function (_a) {
106
+ var chain = _a.chain, symbol = _a.symbol;
107
+ return __awaiter(void 0, void 0, void 0, function () {
108
+ return __generator(this, function (_b) {
109
+ switch (chain) {
110
+ case types_1.Chain.Ethereum:
111
+ return [2 /*return*/, getETHAssetDecimal(symbol)];
112
+ case types_1.Chain.Avalanche:
113
+ return [2 /*return*/, getAVAXAssetDecimal(symbol)];
114
+ case types_1.Chain.BinanceSmartChain:
115
+ return [2 /*return*/, getBSCAssetDecimal(symbol)];
116
+ default:
117
+ // @ts-ignore
118
+ return [2 /*return*/, types_1.BaseDecimal[chain]];
119
+ }
120
+ return [2 /*return*/];
121
+ });
122
+ });
123
+ };
124
+ exports.getDecimal = getDecimal;
125
+ exports.gasFeeMultiplier = (_a = {},
126
+ _a[types_1.FeeOption.Average] = 1.2,
127
+ _a[types_1.FeeOption.Fast] = 1.5,
128
+ _a[types_1.FeeOption.Fastest] = 2,
129
+ _a);
130
+ var isGasAsset = function (_a) {
131
+ var chain = _a.chain, symbol = _a.symbol;
132
+ switch (chain) {
133
+ case types_1.Chain.Bitcoin:
134
+ case types_1.Chain.BitcoinCash:
135
+ case types_1.Chain.Dash:
136
+ case types_1.Chain.Digibyte:
137
+ case types_1.Chain.Zcash:
138
+ case types_1.Chain.Ripple:
139
+ case types_1.Chain.Litecoin:
140
+ case types_1.Chain.Dogecoin:
141
+ case types_1.Chain.Binance:
142
+ case types_1.Chain.Ethereum:
143
+ case types_1.Chain.Avalanche:
144
+ return symbol === chain;
145
+ case types_1.Chain.Arbitrum:
146
+ case types_1.Chain.Optimism:
147
+ case types_1.Chain.Base:
148
+ return 'ETH' === symbol;
149
+ // @ts-ignore
150
+ case types_1.Chain.Mayachain:
151
+ return symbol === 'CACAO';
152
+ case types_1.Chain.Kujira:
153
+ return symbol === 'KUJI';
154
+ case types_1.Chain.Cosmos:
155
+ return symbol === 'ATOM';
156
+ case types_1.Chain.Polygon:
157
+ return symbol === 'MATIC';
158
+ case types_1.Chain.BinanceSmartChain:
159
+ return symbol === 'BNB';
160
+ case types_1.Chain.THORChain:
161
+ return symbol === 'RUNE';
162
+ }
163
+ };
164
+ exports.isGasAsset = isGasAsset;
165
+ var getCommonAssetInfo = function (assetString) {
166
+ switch (assetString) {
167
+ case 'ETH.THOR':
168
+ return { identifier: 'ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044', decimal: 18 };
169
+ case 'ETH.vTHOR':
170
+ return { identifier: 'ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d', decimal: 18 };
171
+ case types_1.Chain.Cosmos:
172
+ return { identifier: 'GAIA.ATOM', decimal: types_1.BaseDecimal[assetString] };
173
+ case types_1.Chain.THORChain:
174
+ return { identifier: 'THOR.RUNE', decimal: types_1.BaseDecimal[assetString] };
175
+ case types_1.Chain.BinanceSmartChain:
176
+ return { identifier: 'BSC.BNB', decimal: types_1.BaseDecimal[assetString] };
177
+ // @ts-ignore
178
+ case types_1.Chain.Mayachain:
179
+ return { identifier: 'MAYA.CACAO', decimal: types_1.BaseDecimal.MAYA };
180
+ case 'MAYA.MAYA':
181
+ return { identifier: 'MAYA.MAYA', decimal: 4 };
182
+ case types_1.Chain.Arbitrum:
183
+ return { identifier: 'ARB.ETH', decimal: 18 };
184
+ case types_1.Chain.Base:
185
+ return { identifier: 'BASE.ETH', decimal: 18 };
186
+ case types_1.Chain.Optimism:
187
+ return { identifier: 'OP.ETH', decimal: 18 };
188
+ case types_1.Chain.Avalanche:
189
+ return { identifier: 'AVAX.ETH', decimal: 18 };
190
+ case types_1.Chain.Ripple:
191
+ case types_1.Chain.Kujira:
192
+ case types_1.Chain.BitcoinCash:
193
+ case types_1.Chain.Zcash:
194
+ case types_1.Chain.Dash:
195
+ case types_1.Chain.Litecoin:
196
+ case types_1.Chain.Dogecoin:
197
+ case types_1.Chain.Binance:
198
+ case types_1.Chain.Polygon:
199
+ case types_1.Chain.Bitcoin:
200
+ case types_1.Chain.Ethereum:
201
+ return { identifier: "".concat(assetString, ".").concat(assetString), decimal: types_1.BaseDecimal[assetString] };
202
+ }
203
+ };
204
+ exports.getCommonAssetInfo = getCommonAssetInfo;
205
+ var getAssetType = function (_a) {
206
+ var chain = _a.chain, symbol = _a.symbol;
207
+ if (symbol.includes('/'))
208
+ return 'Synth';
209
+ switch (chain) {
210
+ case types_1.Chain.Bitcoin:
211
+ case types_1.Chain.BitcoinCash:
212
+ case types_1.Chain.Dogecoin:
213
+ case types_1.Chain.Dash:
214
+ case types_1.Chain.Zcash:
215
+ case types_1.Chain.Litecoin:
216
+ // @ts-ignore
217
+ case types_1.Chain.Mayachain:
218
+ case types_1.Chain.THORChain:
219
+ return 'Native';
220
+ case types_1.Chain.Osmosis:
221
+ return 'Native';
222
+ case types_1.Chain.Cosmos:
223
+ return symbol === 'ATOM' ? 'Native' : types_1.Chain.Cosmos;
224
+ case types_1.Chain.Kujira:
225
+ return symbol === types_1.Chain.Kujira ? 'Native' : types_1.Chain.Kujira;
226
+ case types_1.Chain.Binance:
227
+ return symbol === types_1.Chain.Binance ? 'Native' : 'BEP2';
228
+ case types_1.Chain.BinanceSmartChain:
229
+ return symbol === types_1.Chain.Binance ? 'Native' : 'BEP20';
230
+ case types_1.Chain.Ethereum:
231
+ return symbol === types_1.Chain.Ethereum ? 'Native' : 'ERC20';
232
+ case types_1.Chain.Avalanche:
233
+ return symbol === types_1.Chain.Avalanche ? 'Native' : types_1.Chain.Avalanche;
234
+ case types_1.Chain.Polygon:
235
+ return symbol === types_1.Chain.Polygon ? 'Native' : 'POLYGON';
236
+ case types_1.Chain.Base:
237
+ return symbol === types_1.Chain.Ethereum ? 'Native' : 'ERC20';
238
+ case types_1.Chain.Arbitrum:
239
+ return [types_1.Chain.Ethereum, types_1.Chain.Arbitrum].includes(symbol) ? 'Native' : 'ARBITRUM';
240
+ case types_1.Chain.Optimism:
241
+ return [types_1.Chain.Ethereum, types_1.Chain.Optimism].includes(symbol) ? 'Native' : 'OPTIMISM';
242
+ }
243
+ };
244
+ exports.getAssetType = getAssetType;
245
+ var assetFromString = function (assetString) {
246
+ var _a;
247
+ var _b = assetString.split('.'), chain = _b[0], symbolArray = _b.slice(1);
248
+ var synth = assetString.includes('/');
249
+ var symbol = symbolArray.join('.');
250
+ var ticker = (_a = symbol === null || symbol === void 0 ? void 0 : symbol.split('-')) === null || _a === void 0 ? void 0 : _a[0];
251
+ return { chain: chain, symbol: symbol, ticker: ticker, synth: synth };
252
+ };
253
+ exports.assetFromString = assetFromString;
254
+ var potentialScamRegex = new RegExp(/(.)\1{6}|\.ORG|\.NET|\.FINANCE|\.COM|WWW|HTTP|\\\\|\/\/|[\s$%:[\]]/, 'gmi');
255
+ var evmAssetHasAddress = function (assetString) {
256
+ var _a = assetString.split('.'), chain = _a[0], symbol = _a[1];
257
+ if (!types_1.EVMChainList.includes(chain))
258
+ return true;
259
+ var _b = symbol.split('-'), address = _b[1];
260
+ return (0, exports.isGasAsset)({ chain: chain, symbol: symbol }) || !!address;
261
+ };
262
+ var filterAssets = function (tokens) {
263
+ return tokens.filter(function (token) {
264
+ var assetString = "".concat(token.chain, ".").concat(token.symbol);
265
+ return (!potentialScamRegex.test(assetString) &&
266
+ evmAssetHasAddress(assetString) &&
267
+ token.value !== '0');
268
+ });
269
+ };
270
+ exports.filterAssets = filterAssets;
@@ -0,0 +1,58 @@
1
+ import { SwapKitNumber } from '../index';
2
+ type ShareParams<T = {}> = T & {
3
+ liquidityUnits: string;
4
+ poolUnits: string;
5
+ };
6
+ type PoolParams<T = {}> = T & {
7
+ runeAmount: string;
8
+ assetAmount: string;
9
+ runeDepth: string;
10
+ assetDepth: string;
11
+ };
12
+ /**
13
+ * Ref: https://gitlab.com/thorchain/thornode/-/issues/657
14
+ * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3
15
+ * s = stakeUnits for member (after factoring in withdrawBasisPoints)
16
+ * T = totalPoolUnits for pool
17
+ * A = assetDepth to be withdrawn
18
+ *
19
+ * Formula:
20
+ * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3
21
+ * (part1 * (part2 - part3 + part4)) / part5
22
+ */
23
+ export declare const getAsymmetricRuneShare: ({ liquidityUnits, poolUnits, runeDepth, }: ShareParams<{
24
+ runeDepth: string;
25
+ }>) => SwapKitNumber;
26
+ export declare const getAsymmetricAssetShare: ({ liquidityUnits, poolUnits, assetDepth, }: ShareParams<{
27
+ assetDepth: string;
28
+ }>) => SwapKitNumber;
29
+ export declare const getAsymmetricRuneWithdrawAmount: ({ percent, runeDepth, liquidityUnits, poolUnits, }: ShareParams<{
30
+ percent: number;
31
+ runeDepth: string;
32
+ }>) => SwapKitNumber;
33
+ export declare const getAsymmetricAssetWithdrawAmount: ({ percent, assetDepth, liquidityUnits, poolUnits, }: ShareParams<{
34
+ percent: number;
35
+ assetDepth: string;
36
+ }>) => SwapKitNumber;
37
+ export declare const getSymmetricPoolShare: ({ liquidityUnits, poolUnits, runeDepth, assetDepth, }: ShareParams<{
38
+ runeDepth: string;
39
+ assetDepth: string;
40
+ }>) => {
41
+ assetAmount: SwapKitNumber;
42
+ runeAmount: SwapKitNumber;
43
+ };
44
+ export declare const getSymmetricWithdraw: ({ liquidityUnits, poolUnits, runeDepth, assetDepth, percent, }: ShareParams<{
45
+ runeDepth: string;
46
+ assetDepth: string;
47
+ percent: number;
48
+ }>) => {
49
+ [k: string]: SwapKitNumber;
50
+ };
51
+ export declare const getEstimatedPoolShare: ({ runeDepth, poolUnits, assetDepth, liquidityUnits, runeAmount, assetAmount, }: ShareParams<{
52
+ runeAmount: string;
53
+ assetAmount: string;
54
+ runeDepth: string;
55
+ assetDepth: string;
56
+ }>) => number;
57
+ export declare const getLiquiditySlippage: ({ runeAmount, assetAmount, runeDepth, assetDepth, }: PoolParams) => number;
58
+ export {};
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLiquiditySlippage = exports.getEstimatedPoolShare = exports.getSymmetricWithdraw = exports.getSymmetricPoolShare = exports.getAsymmetricAssetWithdrawAmount = exports.getAsymmetricRuneWithdrawAmount = exports.getAsymmetricAssetShare = exports.getAsymmetricRuneShare = void 0;
4
+ var types_1 = require("@coinmasters/types");
5
+ var index_1 = require("../index");
6
+ /**
7
+ * Ref: https://gitlab.com/thorchain/thornode/-/issues/657
8
+ * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3
9
+ * s = stakeUnits for member (after factoring in withdrawBasisPoints)
10
+ * T = totalPoolUnits for pool
11
+ * A = assetDepth to be withdrawn
12
+ *
13
+ * Formula:
14
+ * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3
15
+ * (part1 * (part2 - part3 + part4)) / part5
16
+ */
17
+ var getAsymmetricRuneShare = function (_a) {
18
+ var liquidityUnits = _a.liquidityUnits, poolUnits = _a.poolUnits, runeDepth = _a.runeDepth;
19
+ var s = toTCSwapKitNumber(liquidityUnits);
20
+ var T = toTCSwapKitNumber(poolUnits);
21
+ var A = toTCSwapKitNumber(runeDepth);
22
+ var part1 = s.mul(A);
23
+ var part2 = T.mul(T).mul(2);
24
+ var part3 = T.mul(s).mul(2);
25
+ var part4 = s.mul(s);
26
+ var part5 = T.mul(T).mul(T);
27
+ var numerator = part1.mul(part2.sub(part3).add(part4));
28
+ return numerator.div(part5);
29
+ };
30
+ exports.getAsymmetricRuneShare = getAsymmetricRuneShare;
31
+ var getAsymmetricAssetShare = function (_a) {
32
+ var liquidityUnits = _a.liquidityUnits, poolUnits = _a.poolUnits, assetDepth = _a.assetDepth;
33
+ var s = toTCSwapKitNumber(liquidityUnits);
34
+ var T = toTCSwapKitNumber(poolUnits);
35
+ var A = toTCSwapKitNumber(assetDepth);
36
+ var part1 = s.mul(A);
37
+ var part2 = T.mul(T).mul(2);
38
+ var part3 = T.mul(s).mul(2);
39
+ var part4 = s.mul(s);
40
+ var numerator = part1.mul(part2.sub(part3).add(part4));
41
+ var part5 = T.mul(T).mul(T);
42
+ return numerator.div(part5);
43
+ };
44
+ exports.getAsymmetricAssetShare = getAsymmetricAssetShare;
45
+ var getAsymmetricRuneWithdrawAmount = function (_a) {
46
+ var percent = _a.percent, runeDepth = _a.runeDepth, liquidityUnits = _a.liquidityUnits, poolUnits = _a.poolUnits;
47
+ return (0, exports.getAsymmetricRuneShare)({ runeDepth: runeDepth, liquidityUnits: liquidityUnits, poolUnits: poolUnits }).mul(percent);
48
+ };
49
+ exports.getAsymmetricRuneWithdrawAmount = getAsymmetricRuneWithdrawAmount;
50
+ var getAsymmetricAssetWithdrawAmount = function (_a) {
51
+ var percent = _a.percent, assetDepth = _a.assetDepth, liquidityUnits = _a.liquidityUnits, poolUnits = _a.poolUnits;
52
+ return (0, exports.getAsymmetricAssetShare)({ assetDepth: assetDepth, liquidityUnits: liquidityUnits, poolUnits: poolUnits }).mul(percent);
53
+ };
54
+ exports.getAsymmetricAssetWithdrawAmount = getAsymmetricAssetWithdrawAmount;
55
+ var toTCSwapKitNumber = function (value) {
56
+ return index_1.SwapKitNumber.fromBigInt(BigInt(value), types_1.BaseDecimal.THOR);
57
+ };
58
+ var getSymmetricPoolShare = function (_a) {
59
+ var liquidityUnits = _a.liquidityUnits, poolUnits = _a.poolUnits, runeDepth = _a.runeDepth, assetDepth = _a.assetDepth;
60
+ return ({
61
+ assetAmount: toTCSwapKitNumber(assetDepth).mul(liquidityUnits).div(poolUnits),
62
+ runeAmount: toTCSwapKitNumber(runeDepth).mul(liquidityUnits).div(poolUnits),
63
+ });
64
+ };
65
+ exports.getSymmetricPoolShare = getSymmetricPoolShare;
66
+ var getSymmetricWithdraw = function (_a) {
67
+ var liquidityUnits = _a.liquidityUnits, poolUnits = _a.poolUnits, runeDepth = _a.runeDepth, assetDepth = _a.assetDepth, percent = _a.percent;
68
+ return Object.fromEntries(Object.entries((0, exports.getSymmetricPoolShare)({ liquidityUnits: liquidityUnits, poolUnits: poolUnits, runeDepth: runeDepth, assetDepth: assetDepth })).map(function (_a) {
69
+ var name = _a[0], value = _a[1];
70
+ return [name, value.mul(percent)];
71
+ }));
72
+ };
73
+ exports.getSymmetricWithdraw = getSymmetricWithdraw;
74
+ var getEstimatedPoolShare = function (_a) {
75
+ var runeDepth = _a.runeDepth, poolUnits = _a.poolUnits, assetDepth = _a.assetDepth, liquidityUnits = _a.liquidityUnits, runeAmount = _a.runeAmount, assetAmount = _a.assetAmount;
76
+ var R = new index_1.SwapKitNumber({ value: runeDepth, decimal: 8 });
77
+ var A = new index_1.SwapKitNumber({ value: assetDepth, decimal: 8 });
78
+ var P = new index_1.SwapKitNumber({ value: poolUnits, decimal: 8 });
79
+ var runeAddAmount = new index_1.SwapKitNumber({ value: runeAmount, decimal: 8 });
80
+ var assetAddAmount = new index_1.SwapKitNumber({ value: assetAmount, decimal: 8 });
81
+ // liquidityUnits = P * (r*A + a*R + 2*r*a) / (r*A + a*R + 2*R*A)
82
+ var rA = runeAddAmount.mul(A);
83
+ var aR = assetAddAmount.mul(R);
84
+ var ra = runeAddAmount.mul(assetAddAmount);
85
+ var RA = R.mul(A);
86
+ var numerator = P.mul(rA.add(aR.add(ra.mul(2))));
87
+ var denominator = rA.add(aR.add(RA.mul(2)));
88
+ var liquidityUnitsAfterAdd = numerator.div(denominator);
89
+ var estimatedLiquidityUnits = toTCSwapKitNumber(liquidityUnits).add(liquidityUnitsAfterAdd);
90
+ if (liquidityUnitsAfterAdd.getBaseValue('number') === 0) {
91
+ return estimatedLiquidityUnits.div(P).getBaseValue('number');
92
+ }
93
+ // get pool units after add
94
+ var newPoolUnits = P.add(estimatedLiquidityUnits);
95
+ return estimatedLiquidityUnits.div(newPoolUnits).getBaseValue('number');
96
+ };
97
+ exports.getEstimatedPoolShare = getEstimatedPoolShare;
98
+ var getLiquiditySlippage = function (_a) {
99
+ var runeAmount = _a.runeAmount, assetAmount = _a.assetAmount, runeDepth = _a.runeDepth, assetDepth = _a.assetDepth;
100
+ if (runeAmount === '0' || assetAmount === '0' || runeDepth === '0' || assetDepth === '0')
101
+ return 0;
102
+ // formula: (t * R - T * r)/ (T*r + R*T)
103
+ var R = toTCSwapKitNumber(runeDepth);
104
+ var T = toTCSwapKitNumber(assetDepth);
105
+ var assetAddAmount = toTCSwapKitNumber(assetAmount);
106
+ var runeAddAmount = toTCSwapKitNumber(runeAmount);
107
+ var numerator = assetAddAmount.mul(R).sub(T.mul(runeAddAmount));
108
+ var denominator = T.mul(runeAddAmount).add(R.mul(T));
109
+ // set absolute value of percent, no negative allowed
110
+ return Math.abs(numerator.div(denominator).getBaseValue('number'));
111
+ };
112
+ exports.getLiquiditySlippage = getLiquiditySlippage;
@@ -0,0 +1,46 @@
1
+ import type { Chain } from '@coinmasters/types';
2
+ import { MemoType } from '@coinmasters/types';
3
+ export type ThornameRegisterParam = {
4
+ name: string;
5
+ chain: string;
6
+ address: string;
7
+ owner?: string;
8
+ preferredAsset?: string;
9
+ expiryBlock?: string;
10
+ };
11
+ type WithAddress<T = {}> = T & {
12
+ address: string;
13
+ };
14
+ type WithChain<T = {}> = T & {
15
+ chain: Chain;
16
+ };
17
+ export type MemoOptions<T extends MemoType> = {
18
+ [MemoType.BOND]: WithAddress;
19
+ [MemoType.LEAVE]: WithAddress;
20
+ [MemoType.CLOSE_LOAN]: WithAddress<{
21
+ asset: string;
22
+ minAmount?: string;
23
+ }>;
24
+ [MemoType.OPEN_LOAN]: WithAddress<{
25
+ asset: string;
26
+ minAmount?: string;
27
+ }>;
28
+ [MemoType.UNBOND]: WithAddress<{
29
+ unbondAmount: number;
30
+ }>;
31
+ [MemoType.DEPOSIT]: WithChain<{
32
+ symbol: string;
33
+ address?: string;
34
+ singleSide?: boolean;
35
+ }>;
36
+ [MemoType.WITHDRAW]: WithChain<{
37
+ ticker: string;
38
+ symbol: string;
39
+ basisPoints: number;
40
+ targetAssetString?: string;
41
+ singleSide?: boolean;
42
+ }>;
43
+ [MemoType.THORNAME_REGISTER]: Omit<ThornameRegisterParam, 'preferredAsset' | 'expiryBlock'>;
44
+ }[T];
45
+ export declare const getMemoFor: <T extends MemoType>(memoType: T, options: MemoOptions<T>) => string;
46
+ export {};
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMemoFor = void 0;
4
+ var types_1 = require("@coinmasters/types");
5
+ var getShortenedSymbol = function (_a) {
6
+ var symbol = _a.symbol, ticker = _a.ticker, chain = _a.chain;
7
+ return (chain === 'ETH' && ticker !== 'ETH' ? "".concat(ticker, "-").concat(symbol.slice(-3)) : symbol);
8
+ };
9
+ var getMemoFor = function (memoType, options) {
10
+ switch (memoType) {
11
+ case types_1.MemoType.LEAVE:
12
+ case types_1.MemoType.BOND: {
13
+ var address = options.address;
14
+ return "".concat(memoType, ":").concat(address);
15
+ }
16
+ case types_1.MemoType.UNBOND: {
17
+ var _a = options, address = _a.address, unbondAmount = _a.unbondAmount;
18
+ return "".concat(memoType, ":").concat(address, ":").concat(unbondAmount * Math.pow(10, 8));
19
+ }
20
+ case types_1.MemoType.THORNAME_REGISTER: {
21
+ var _b = options, name_1 = _b.name, chain = _b.chain, address = _b.address, owner = _b.owner;
22
+ return "".concat(memoType, ":").concat(name_1, ":").concat(chain, ":").concat(address).concat(owner ? ":".concat(owner) : '');
23
+ }
24
+ case types_1.MemoType.DEPOSIT: {
25
+ var _c = options, chain = _c.chain, symbol = _c.symbol, address = _c.address, singleSide = _c.singleSide;
26
+ return singleSide
27
+ ? "".concat(memoType, ":").concat(chain, "/").concat(symbol, "::t:0")
28
+ : "".concat(memoType, ":").concat(chain, ".").concat(symbol, ":").concat(address || '', ":t:0");
29
+ }
30
+ case types_1.MemoType.WITHDRAW: {
31
+ var _d = options, chain = _d.chain, ticker = _d.ticker, symbol = _d.symbol, basisPoints = _d.basisPoints, targetAssetString = _d.targetAssetString, singleSide = _d.singleSide;
32
+ var target = !singleSide && targetAssetString ? ":".concat(targetAssetString) : '';
33
+ var shortenedSymbol = getShortenedSymbol({ chain: chain, symbol: symbol, ticker: ticker });
34
+ var assetDivider = singleSide ? '/' : '.';
35
+ return "".concat(memoType, ":").concat(chain).concat(assetDivider).concat(shortenedSymbol, ":").concat(basisPoints).concat(target);
36
+ }
37
+ case types_1.MemoType.OPEN_LOAN:
38
+ case types_1.MemoType.CLOSE_LOAN: {
39
+ var _e = options, asset = _e.asset, address = _e.address;
40
+ return "".concat(memoType, ":").concat(asset, ":").concat(address); //:${minAmount ? `${minAmount}` : ''}:t:0`;
41
+ }
42
+ default:
43
+ return '';
44
+ }
45
+ };
46
+ exports.getMemoFor = getMemoFor;
@@ -0,0 +1,3 @@
1
+ export declare const getTHORNameCost: (year: number) => number;
2
+ export declare const validateTHORName: (name: string) => boolean;
3
+ export declare const derivationPathToString: ([network, chainId, account, change, index]: number[]) => string;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.derivationPathToString = exports.validateTHORName = exports.getTHORNameCost = void 0;
4
+ // 10 rune for register, 1 rune per year
5
+ // MINIMUM_REGISTRATION_FEE = 11
6
+ var getTHORNameCost = function (year) {
7
+ if (year < 0)
8
+ throw new Error('Invalid number of year');
9
+ return 10 + year;
10
+ };
11
+ exports.getTHORNameCost = getTHORNameCost;
12
+ var validateTHORName = function (name) {
13
+ if (name.length > 30)
14
+ return false;
15
+ var regex = /^[a-zA-Z0-9+_-]+$/g;
16
+ return !!name.match(regex);
17
+ };
18
+ exports.validateTHORName = validateTHORName;
19
+ var derivationPathToString = function (_a) {
20
+ var network = _a[0], chainId = _a[1], account = _a[2], change = _a[3], index = _a[4];
21
+ var shortPath = typeof index !== 'number';
22
+ return "".concat(network, "'/").concat(chainId, "'/").concat(account, "'/").concat(change).concat(shortPath ? '' : "/".concat(index));
23
+ };
24
+ exports.derivationPathToString = derivationPathToString;
@@ -0,0 +1,5 @@
1
+ import { type Options } from 'ky';
2
+ export declare const RequestClient: {
3
+ get: <T>(url: string | URL | Request, options?: Options) => Promise<T>;
4
+ post: <T_1>(url: string | URL | Request, options?: Options) => Promise<T_1>;
5
+ };