@d8x/perpetuals-sdk 0.1.12 → 0.2.0
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.
- package/dist/cjs/abi/testnet/IPerpetualManager.json +5215 -0
- package/dist/cjs/abi/testnet/LimitOrderBook.json +1075 -0
- package/dist/cjs/abi/zkevmTestnet/IPerpetualManager.json +5215 -0
- package/dist/cjs/abi/zkevmTestnet/LimitOrderBook.json +1075 -0
- package/dist/cjs/abi/zkevmTestnet/LimitOrderBookFactory.json +135 -0
- package/dist/cjs/accountTrade.js +441 -0
- package/dist/cjs/accountTrade.js.map +1 -0
- package/dist/{src → cjs}/brokerTool.js +31 -84
- package/dist/cjs/brokerTool.js.map +1 -0
- package/dist/cjs/config/defaultConfig.json +47 -0
- package/dist/cjs/config/mockSwap.json +4 -0
- package/dist/cjs/config/priceFeedConfig.json +104 -0
- package/dist/cjs/config/symbolList.json +13 -0
- package/dist/cjs/d8XMath.js.map +1 -0
- package/dist/cjs/index.js +29 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/liquidatorTool.js +287 -0
- package/dist/cjs/liquidatorTool.js.map +1 -0
- package/dist/{src → cjs}/liquidityProviderTool.js +12 -65
- package/dist/cjs/liquidityProviderTool.js.map +1 -0
- package/dist/{src → cjs}/marketData.js +52 -134
- package/dist/cjs/marketData.js.map +1 -0
- package/dist/{src → cjs}/nodeSDKTypes.d.ts +5 -5
- package/dist/cjs/nodeSDKTypes.js +64 -0
- package/dist/cjs/nodeSDKTypes.js.map +1 -0
- package/dist/{src → cjs}/orderReferrerTool.d.ts +12 -5
- package/dist/{src → cjs}/orderReferrerTool.js +114 -112
- package/dist/cjs/orderReferrerTool.js.map +1 -0
- package/dist/{src → cjs}/perpetualDataHandler.d.ts +1 -1
- package/dist/{src → cjs}/perpetualDataHandler.js +47 -109
- package/dist/cjs/perpetualDataHandler.js.map +1 -0
- package/dist/{src → cjs}/perpetualEventHandler.d.ts +3 -3
- package/dist/{src → cjs}/perpetualEventHandler.js +12 -74
- package/dist/cjs/perpetualEventHandler.js.map +1 -0
- package/dist/cjs/priceFeeds.js +466 -0
- package/dist/cjs/priceFeeds.js.map +1 -0
- package/dist/{src → cjs}/traderDigests.js +7 -43
- package/dist/cjs/traderDigests.js.map +1 -0
- package/dist/{src → cjs}/traderInterface.js +13 -66
- package/dist/cjs/traderInterface.js.map +1 -0
- package/dist/{src → cjs}/triangulator.js +2 -17
- package/dist/cjs/triangulator.js.map +1 -0
- package/dist/{src → cjs}/utils.js +3 -29
- package/dist/cjs/utils.js.map +1 -0
- package/dist/cjs/version.d.ts +1 -0
- package/dist/{src → cjs}/version.js +1 -1
- package/dist/cjs/version.js.map +1 -0
- package/dist/{src → cjs}/writeAccessHandler.js +12 -65
- package/dist/cjs/writeAccessHandler.js.map +1 -0
- package/dist/esm/abi/ERC20.json +288 -0
- package/dist/esm/abi/MockTokenSwap.json +186 -0
- package/dist/{abi/testnet → esm/abi/central-park}/IPerpetualManager.json +404 -214
- package/dist/{abi/testnet → esm/abi/central-park}/LimitOrderBook.json +197 -15
- package/dist/esm/abi/central-park/LimitOrderBookFactory.json +135 -0
- package/dist/esm/abi/testnet/IPerpetualManager.json +5215 -0
- package/dist/esm/abi/testnet/LimitOrderBook.json +1075 -0
- package/dist/esm/abi/testnet/LimitOrderBookFactory.json +135 -0
- package/dist/esm/abi/zkevmTestnet/IPerpetualManager.json +5215 -0
- package/dist/esm/abi/zkevmTestnet/LimitOrderBook.json +1075 -0
- package/dist/esm/abi/zkevmTestnet/LimitOrderBookFactory.json +135 -0
- package/dist/esm/accountTrade.d.ts +221 -0
- package/dist/{src → esm}/accountTrade.js +22 -93
- package/dist/esm/accountTrade.js.map +1 -0
- package/dist/esm/brokerTool.d.ts +318 -0
- package/dist/esm/brokerTool.js +572 -0
- package/dist/esm/brokerTool.js.map +1 -0
- package/dist/esm/config/defaultConfig.json +47 -0
- package/dist/esm/config/mockSwap.json +4 -0
- package/dist/esm/config/priceFeedConfig.json +104 -0
- package/dist/esm/config/symbolList.json +13 -0
- package/dist/esm/d8XMath.d.ts +122 -0
- package/dist/esm/d8XMath.js +247 -0
- package/dist/esm/d8XMath.js.map +1 -0
- package/{src/index.ts → dist/esm/index.d.ts} +1 -15
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/liquidatorTool.d.ts +158 -0
- package/dist/{src → esm}/liquidatorTool.js +10 -65
- package/dist/esm/liquidatorTool.js.map +1 -0
- package/dist/esm/liquidityProviderTool.d.ts +126 -0
- package/dist/esm/liquidityProviderTool.js +218 -0
- package/dist/esm/liquidityProviderTool.js.map +1 -0
- package/dist/esm/marketData.d.ts +309 -0
- package/dist/esm/marketData.js +1007 -0
- package/dist/esm/marketData.js.map +1 -0
- package/dist/esm/nodeSDKTypes.d.ts +266 -0
- package/dist/esm/nodeSDKTypes.js +60 -0
- package/dist/esm/nodeSDKTypes.js.map +1 -0
- package/dist/esm/orderReferrerTool.d.ts +196 -0
- package/dist/esm/orderReferrerTool.js +491 -0
- package/dist/esm/orderReferrerTool.js.map +1 -0
- package/dist/esm/perpetualDataHandler.d.ts +220 -0
- package/dist/esm/perpetualDataHandler.js +1060 -0
- package/dist/esm/perpetualDataHandler.js.map +1 -0
- package/dist/esm/perpetualEventHandler.d.ts +179 -0
- package/dist/esm/perpetualEventHandler.js +435 -0
- package/dist/esm/perpetualEventHandler.js.map +1 -0
- package/dist/esm/priceFeeds.d.ts +115 -0
- package/dist/{src → esm}/priceFeeds.js +16 -83
- package/dist/esm/priceFeeds.js.map +1 -0
- package/dist/esm/traderDigests.d.ts +21 -0
- package/dist/esm/traderDigests.js +80 -0
- package/dist/esm/traderDigests.js.map +1 -0
- package/dist/esm/traderInterface.d.ts +79 -0
- package/dist/esm/traderInterface.js +196 -0
- package/dist/esm/traderInterface.js.map +1 -0
- package/dist/esm/triangulator.d.ts +27 -0
- package/dist/esm/triangulator.js +110 -0
- package/dist/esm/triangulator.js.map +1 -0
- package/dist/esm/utils.d.ts +59 -0
- package/dist/esm/utils.js +138 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/version.d.ts +1 -0
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/esm/writeAccessHandler.d.ts +50 -0
- package/dist/esm/writeAccessHandler.js +157 -0
- package/dist/esm/writeAccessHandler.js.map +1 -0
- package/package.json +16 -26
- package/dist/bundle.js +0 -36793
- package/dist/config/defaultConfig.json +0 -47
- package/dist/config/mockSwap.json +0 -4
- package/dist/config/priceFeedConfig.json +0 -104
- package/dist/config/symbolList.json +0 -13
- package/dist/src/index.js +0 -45
- package/dist/src/nodeSDKTypes.js +0 -115
- package/dist/src/version.d.ts +0 -1
- package/module.d.ts +0 -1
- package/src/accountTrade.ts +0 -392
- package/src/brokerTool.ts +0 -507
- package/src/d8XMath.ts +0 -319
- package/src/liquidatorTool.ts +0 -258
- package/src/liquidityProviderTool.ts +0 -186
- package/src/marketData.ts +0 -946
- package/src/nodeSDKTypes.ts +0 -293
- package/src/orderReferrerTool.ts +0 -389
- package/src/perpetualDataHandler.ts +0 -1061
- package/src/perpetualEventHandler.ts +0 -455
- package/src/priceFeeds.ts +0 -381
- package/src/traderDigests.ts +0 -91
- package/src/traderInterface.ts +0 -159
- package/src/triangulator.ts +0 -105
- package/src/utils.ts +0 -134
- package/src/version.ts +0 -1
- package/src/writeAccessHandler.ts +0 -127
- /package/dist/{abi → cjs/abi}/ERC20.json +0 -0
- /package/dist/{abi → cjs/abi}/MockTokenSwap.json +0 -0
- /package/dist/{abi → cjs/abi}/central-park/IPerpetualManager.json +0 -0
- /package/dist/{abi → cjs/abi}/central-park/LimitOrderBook.json +0 -0
- /package/dist/{abi → cjs/abi}/central-park/LimitOrderBookFactory.json +0 -0
- /package/dist/{abi → cjs/abi}/testnet/LimitOrderBookFactory.json +0 -0
- /package/dist/{src → cjs}/accountTrade.d.ts +0 -0
- /package/dist/{src → cjs}/brokerTool.d.ts +0 -0
- /package/dist/{src → cjs}/d8XMath.d.ts +0 -0
- /package/dist/{src → cjs}/d8XMath.js +0 -0
- /package/dist/{src → cjs}/index.d.ts +0 -0
- /package/dist/{src → cjs}/liquidatorTool.d.ts +0 -0
- /package/dist/{src → cjs}/liquidityProviderTool.d.ts +0 -0
- /package/dist/{src → cjs}/marketData.d.ts +0 -0
- /package/dist/{src → cjs}/priceFeeds.d.ts +0 -0
- /package/dist/{src → cjs}/traderDigests.d.ts +0 -0
- /package/dist/{src → cjs}/traderInterface.d.ts +0 -0
- /package/dist/{src → cjs}/triangulator.d.ts +0 -0
- /package/dist/{src → cjs}/utils.d.ts +0 -0
- /package/dist/{src → cjs}/writeAccessHandler.d.ts +0 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
2
|
+
var Triangulator = /** @class */ (function () {
|
|
3
|
+
function Triangulator() {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Find all possible triangulation paths
|
|
7
|
+
* @param ccyBase array of base currencies ['BTC', 'ETH', 'MATIC', ...]
|
|
8
|
+
* @param ccyQuote array of quote currencies corresponding to base ['USD', 'USD', ...]
|
|
9
|
+
* @param pair pair we want to calculate, e.g. BTC-USDC
|
|
10
|
+
* @returns array of different paths for which multiplication leads to
|
|
11
|
+
* desired pair, e.g. [['MATIC-USD'], ['MATIC-ETH', 'ETH-USD']]
|
|
12
|
+
*/
|
|
13
|
+
Triangulator.findPath = function (ccyBase, ccyQuote, pair) {
|
|
14
|
+
var _a = __read(pair.split("-"), 2), base = _a[0], quote = _a[1];
|
|
15
|
+
var paths = new Array();
|
|
16
|
+
for (var k = 0; k < ccyBase.length; k++) {
|
|
17
|
+
var currentPath = [];
|
|
18
|
+
if (ccyBase[k] == base) {
|
|
19
|
+
currentPath.push(ccyBase[k] + "-" + ccyQuote[k]);
|
|
20
|
+
if (ccyQuote[k] == quote) {
|
|
21
|
+
// we are done
|
|
22
|
+
paths.push(currentPath);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// find path for ccyQuote[k]-quote without the currency
|
|
26
|
+
var newBase = new Array();
|
|
27
|
+
var newQuote = new Array();
|
|
28
|
+
for (var j = 0; j < ccyBase.length; j++) {
|
|
29
|
+
if (j != k && ccyQuote[j] + "-" + ccyBase[j] != ccyBase[k] + "-" + ccyQuote[k]) {
|
|
30
|
+
newBase.push(ccyBase[j]);
|
|
31
|
+
newQuote.push(ccyQuote[j]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
var recPaths = Triangulator.findPath(newBase, newQuote, ccyQuote[k] + "-" + quote);
|
|
35
|
+
for (var j = 0; j < recPaths.length; j++) {
|
|
36
|
+
paths.push(currentPath.concat(recPaths[j]));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return paths;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Calculate the triangulated price from underlying prices
|
|
45
|
+
* @param triangulation triangulation of with symbol and is-inverted flag
|
|
46
|
+
* @param feedIdxPrices map of symbol to price
|
|
47
|
+
* @returns triangulated price (scalar), true if market closed or price unavailable
|
|
48
|
+
*/
|
|
49
|
+
Triangulator.calculateTriangulatedPrice = function (triangulation, feedIdxPrices) {
|
|
50
|
+
var px = 1;
|
|
51
|
+
var isOpen = true;
|
|
52
|
+
for (var j = 0; j < triangulation[0].length; j++) {
|
|
53
|
+
var pxFeed = feedIdxPrices.get(triangulation[0][j]);
|
|
54
|
+
if (pxFeed == undefined) {
|
|
55
|
+
// no price available for given index
|
|
56
|
+
return [-1, true];
|
|
57
|
+
}
|
|
58
|
+
px = triangulation[1][j] ? px / pxFeed[0] : px * pxFeed[0];
|
|
59
|
+
var isClosed = pxFeed[1];
|
|
60
|
+
isOpen = isOpen && !isClosed;
|
|
61
|
+
}
|
|
62
|
+
return [px, !isOpen];
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Finds shortest path and returns indices required and whether to divide or not
|
|
66
|
+
* @example triangulate BTC-USDC: [ [ 'BTC-USD', 'USDC-USD' ], [ false, true ] ]
|
|
67
|
+
* @param ccyArr array of available indices (e.g. from websocket)
|
|
68
|
+
* @param symbol symbol we are looking for (e.g. MATIC-USDC)
|
|
69
|
+
* @returns shortest path with given indices, array whether we have to divide (true) or multiply
|
|
70
|
+
* to arrive at the desired price
|
|
71
|
+
*/
|
|
72
|
+
Triangulator.triangulate = function (ccyArr, symbol) {
|
|
73
|
+
var ccyBase = ccyArr.map(function (x) { return x.split("-")[0]; });
|
|
74
|
+
var ccyQuote = ccyArr.map(function (x) { return x.split("-")[1]; });
|
|
75
|
+
var p = Triangulator.findPath(ccyBase.concat(ccyQuote), ccyQuote.concat(ccyBase), symbol);
|
|
76
|
+
if (p.length == 0) {
|
|
77
|
+
return [[], []];
|
|
78
|
+
}
|
|
79
|
+
var len = p.map(function (x) { return x.length; });
|
|
80
|
+
var minLen = 100;
|
|
81
|
+
var minIdx = -1;
|
|
82
|
+
for (var j = 0; j < p.length; j++) {
|
|
83
|
+
if (len[j] < minLen) {
|
|
84
|
+
minLen = len[j];
|
|
85
|
+
minIdx = j;
|
|
86
|
+
if (minLen == 1) {
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
var path = p[minIdx];
|
|
92
|
+
var invert = new Array();
|
|
93
|
+
var indexPath = new Array();
|
|
94
|
+
for (var k = 0; k < path.length; k++) {
|
|
95
|
+
if (ccyArr.includes(path[k], 0)) {
|
|
96
|
+
indexPath.push(path[k]);
|
|
97
|
+
invert.push(false);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
var inv = path[k].split("-");
|
|
101
|
+
indexPath.push(inv[1] + "-" + inv[0]);
|
|
102
|
+
invert.push(true);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return [indexPath, invert];
|
|
106
|
+
};
|
|
107
|
+
return Triangulator;
|
|
108
|
+
}());
|
|
109
|
+
export default Triangulator;
|
|
110
|
+
//# sourceMappingURL=triangulator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triangulator.js","sourceRoot":"","sources":["../../src/triangulator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { BigNumber } from "ethers";
|
|
3
|
+
import { Buffer } from "buffer";
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* @param {string} s String to shorten/extend to 4 characters
|
|
7
|
+
* @returns {string} String with 4 characters (or characters + null chars)
|
|
8
|
+
*/
|
|
9
|
+
export declare function to4Chars(s: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Converts string into 4-character bytes4
|
|
12
|
+
* uses to4Chars to first convert the string into
|
|
13
|
+
* 4 characters.
|
|
14
|
+
* Resulting buffer can be used with smart contract to
|
|
15
|
+
* identify tokens (BTC, USDC, MATIC etc.)
|
|
16
|
+
* @param {string} s String to encode into bytes4
|
|
17
|
+
* @returns {Buffer} 4-character bytes4.
|
|
18
|
+
*/
|
|
19
|
+
export declare function toBytes4(s: string): Buffer;
|
|
20
|
+
/**
|
|
21
|
+
* Decodes a buffer encoded with toBytes4 into
|
|
22
|
+
* a string. The string is the result of to4Chars of the
|
|
23
|
+
* originally encoded string stripped from null-chars
|
|
24
|
+
* @param {Buffer} b Correctly encoded bytes4 buffer using toBytes4
|
|
25
|
+
* @returns {string} String decoded into to4Chars-type string without null characters
|
|
26
|
+
*/
|
|
27
|
+
export declare function fromBytes4(b: Buffer): string;
|
|
28
|
+
/**
|
|
29
|
+
* Decodes the bytes4 encoded string received from the
|
|
30
|
+
* smart contract as a hex-number in string-format
|
|
31
|
+
* @param {string} s string representing a hex-number ("0x...")
|
|
32
|
+
* @returns {string} x of to4Chars(x) stripped from null-chars,
|
|
33
|
+
* where x was originally encoded and
|
|
34
|
+
* returned by the smart contract as bytes4
|
|
35
|
+
*/
|
|
36
|
+
export declare function fromBytes4HexString(s: string): string;
|
|
37
|
+
/**
|
|
38
|
+
*
|
|
39
|
+
* @param {string} s String representing a hex-number ("0x...")
|
|
40
|
+
* @param {Object} mapping List of symbol and clean symbol pairs, e.g. [{symbol: "MATIC", cleanSymbol: "MATC"}, ...]
|
|
41
|
+
* @returns {string} User friendly currency symbol, e.g. "MATIC"
|
|
42
|
+
*/
|
|
43
|
+
export declare function contractSymbolToSymbol(s: string, mapping: Map<string, string>): string;
|
|
44
|
+
/**
|
|
45
|
+
*
|
|
46
|
+
* @param {string} s User friendly currency symbol, e.g. "MATIC"
|
|
47
|
+
* @param {Object} mapping List of symbol and clean symbol pairs, e.g. [{symbol: "MATIC", cleanSymbol: "MATC"}, ...]
|
|
48
|
+
* @returns {Buffer} Buffer that can be used with smart contract to identify tokens
|
|
49
|
+
*/
|
|
50
|
+
export declare function symbolToContractSymbol(s: string, mapping: Map<string, string>): Buffer;
|
|
51
|
+
/**
|
|
52
|
+
* Converts symbol or symbol combination into long format
|
|
53
|
+
* @param {string} s symbol, e.g., USDC-MATC-USDC, MATC, USDC, ...
|
|
54
|
+
* @param {Object} mapping list of symbol and clean symbol pairs, e.g. [{symbol: "MATIC", cleanSymbol: "MATC"}, ...]
|
|
55
|
+
* @returns {string} long format e.g. MATIC. if not found the element is ""
|
|
56
|
+
*/
|
|
57
|
+
export declare function symbol4BToLongSymbol(s: string, mapping: Map<string, string>): string;
|
|
58
|
+
export declare function combineFlags(f1: BigNumber, f2: BigNumber): BigNumber;
|
|
59
|
+
export declare function containsFlag(f1: BigNumber, f2: BigNumber): boolean;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { __read, __values } from "tslib";
|
|
2
|
+
import { BigNumber } from "ethers";
|
|
3
|
+
import { Buffer } from "buffer";
|
|
4
|
+
/**
|
|
5
|
+
* @module utils
|
|
6
|
+
*/
|
|
7
|
+
function _isVocal(char) {
|
|
8
|
+
char = char.toLowerCase();
|
|
9
|
+
return char == "a" || char == "e" || char == "i" || char == "o" || char == "u";
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @param {string} s String to shorten/extend to 4 characters
|
|
14
|
+
* @returns {string} String with 4 characters (or characters + null chars)
|
|
15
|
+
*/
|
|
16
|
+
export function to4Chars(s) {
|
|
17
|
+
while (s.length < 4) {
|
|
18
|
+
s = s + "\0";
|
|
19
|
+
}
|
|
20
|
+
var k = s.length - 1;
|
|
21
|
+
while (s.length > 4 && k >= 0) {
|
|
22
|
+
// chop off vocals from the end of string
|
|
23
|
+
// e.g. MATIC -> MATC
|
|
24
|
+
if (_isVocal(s.charAt(k))) {
|
|
25
|
+
s = s.substring(0, k) + s.substring(k + 1, s.length);
|
|
26
|
+
}
|
|
27
|
+
k--;
|
|
28
|
+
}
|
|
29
|
+
s = s.substring(0, 4);
|
|
30
|
+
return s;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Converts string into 4-character bytes4
|
|
34
|
+
* uses to4Chars to first convert the string into
|
|
35
|
+
* 4 characters.
|
|
36
|
+
* Resulting buffer can be used with smart contract to
|
|
37
|
+
* identify tokens (BTC, USDC, MATIC etc.)
|
|
38
|
+
* @param {string} s String to encode into bytes4
|
|
39
|
+
* @returns {Buffer} 4-character bytes4.
|
|
40
|
+
*/
|
|
41
|
+
export function toBytes4(s) {
|
|
42
|
+
s = to4Chars(s);
|
|
43
|
+
var valBuff = Buffer.from(s, "ascii");
|
|
44
|
+
return valBuff;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Decodes a buffer encoded with toBytes4 into
|
|
48
|
+
* a string. The string is the result of to4Chars of the
|
|
49
|
+
* originally encoded string stripped from null-chars
|
|
50
|
+
* @param {Buffer} b Correctly encoded bytes4 buffer using toBytes4
|
|
51
|
+
* @returns {string} String decoded into to4Chars-type string without null characters
|
|
52
|
+
*/
|
|
53
|
+
export function fromBytes4(b) {
|
|
54
|
+
var val = b.toString("ascii");
|
|
55
|
+
val = val.replace(/\0/g, "");
|
|
56
|
+
return val;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Decodes the bytes4 encoded string received from the
|
|
60
|
+
* smart contract as a hex-number in string-format
|
|
61
|
+
* @param {string} s string representing a hex-number ("0x...")
|
|
62
|
+
* @returns {string} x of to4Chars(x) stripped from null-chars,
|
|
63
|
+
* where x was originally encoded and
|
|
64
|
+
* returned by the smart contract as bytes4
|
|
65
|
+
*/
|
|
66
|
+
export function fromBytes4HexString(s) {
|
|
67
|
+
var res = "";
|
|
68
|
+
for (var k = 2; k < s.length; k = k + 2) {
|
|
69
|
+
res = res + String.fromCharCode(parseInt(s.substring(k, k + 2), 16));
|
|
70
|
+
}
|
|
71
|
+
res = res.replace(/\0/g, "");
|
|
72
|
+
return res;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
*
|
|
76
|
+
* @param {string} s String representing a hex-number ("0x...")
|
|
77
|
+
* @param {Object} mapping List of symbol and clean symbol pairs, e.g. [{symbol: "MATIC", cleanSymbol: "MATC"}, ...]
|
|
78
|
+
* @returns {string} User friendly currency symbol, e.g. "MATIC"
|
|
79
|
+
*/
|
|
80
|
+
export function contractSymbolToSymbol(s, mapping) {
|
|
81
|
+
var _a;
|
|
82
|
+
var shortCCY = fromBytes4HexString(s);
|
|
83
|
+
// assume CCY is already short if not in the mapping file
|
|
84
|
+
var longCCY = (_a = mapping.get(shortCCY)) !== null && _a !== void 0 ? _a : shortCCY;
|
|
85
|
+
return longCCY;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
*
|
|
89
|
+
* @param {string} s User friendly currency symbol, e.g. "MATIC"
|
|
90
|
+
* @param {Object} mapping List of symbol and clean symbol pairs, e.g. [{symbol: "MATIC", cleanSymbol: "MATC"}, ...]
|
|
91
|
+
* @returns {Buffer} Buffer that can be used with smart contract to identify tokens
|
|
92
|
+
*/
|
|
93
|
+
export function symbolToContractSymbol(s, mapping) {
|
|
94
|
+
var e_1, _a;
|
|
95
|
+
var shortCCY = undefined;
|
|
96
|
+
try {
|
|
97
|
+
for (var mapping_1 = __values(mapping), mapping_1_1 = mapping_1.next(); !mapping_1_1.done; mapping_1_1 = mapping_1.next()) {
|
|
98
|
+
var _b = __read(mapping_1_1.value, 2), k = _b[0], v = _b[1];
|
|
99
|
+
if (v == s) {
|
|
100
|
+
shortCCY = k;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
105
|
+
finally {
|
|
106
|
+
try {
|
|
107
|
+
if (mapping_1_1 && !mapping_1_1.done && (_a = mapping_1.return)) _a.call(mapping_1);
|
|
108
|
+
}
|
|
109
|
+
finally { if (e_1) throw e_1.error; }
|
|
110
|
+
}
|
|
111
|
+
// if not in the mapping file, assume ccy is already valid
|
|
112
|
+
shortCCY = shortCCY !== null && shortCCY !== void 0 ? shortCCY : s;
|
|
113
|
+
return toBytes4(shortCCY);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Converts symbol or symbol combination into long format
|
|
117
|
+
* @param {string} s symbol, e.g., USDC-MATC-USDC, MATC, USDC, ...
|
|
118
|
+
* @param {Object} mapping list of symbol and clean symbol pairs, e.g. [{symbol: "MATIC", cleanSymbol: "MATC"}, ...]
|
|
119
|
+
* @returns {string} long format e.g. MATIC. if not found the element is ""
|
|
120
|
+
*/
|
|
121
|
+
export function symbol4BToLongSymbol(s, mapping) {
|
|
122
|
+
var _a;
|
|
123
|
+
var ccy = s.split("-");
|
|
124
|
+
var longCCY = "";
|
|
125
|
+
for (var k = 0; k < ccy.length; k++) {
|
|
126
|
+
var sym = (_a = mapping.get(ccy[k])) !== null && _a !== void 0 ? _a : to4Chars(ccy[k]);
|
|
127
|
+
sym = sym.replace(/\0/g, "");
|
|
128
|
+
longCCY = longCCY + "-" + sym;
|
|
129
|
+
}
|
|
130
|
+
return longCCY.substring(1);
|
|
131
|
+
}
|
|
132
|
+
export function combineFlags(f1, f2) {
|
|
133
|
+
return BigNumber.from((parseInt(f1.toString()) | parseInt(f2.toString())) >>> 0);
|
|
134
|
+
}
|
|
135
|
+
export function containsFlag(f1, f2) {
|
|
136
|
+
return (parseInt(f1.toString()) & parseInt(f2.toString())) > 0;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const D8X_SDK_VERSION = "0.2.0";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,eAAe,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { BigNumber, ethers } from "ethers";
|
|
2
|
+
import { NodeSDKConfig } from "./nodeSDKTypes";
|
|
3
|
+
import PerpetualDataHandler from "./perpetualDataHandler";
|
|
4
|
+
/**
|
|
5
|
+
* This is a parent class for the classes that require
|
|
6
|
+
* write access to the contracts.
|
|
7
|
+
* This class requires a private key and executes smart-contract interaction that
|
|
8
|
+
* require gas-payments.
|
|
9
|
+
* @extends PerpetualDataHandler
|
|
10
|
+
*/
|
|
11
|
+
export default class WriteAccessHandler extends PerpetualDataHandler {
|
|
12
|
+
protected privateKey: string | undefined;
|
|
13
|
+
protected traderAddr: string;
|
|
14
|
+
protected signer: ethers.Signer | null;
|
|
15
|
+
protected gasLimit: number;
|
|
16
|
+
/**
|
|
17
|
+
* Constructor
|
|
18
|
+
* @param {NodeSDKConfig} config configuration
|
|
19
|
+
* @param {string} privateKey private key of account that trades
|
|
20
|
+
*/
|
|
21
|
+
constructor(config: NodeSDKConfig, privateKey?: string, signer?: ethers.Signer);
|
|
22
|
+
/**
|
|
23
|
+
* Initialize the writeAccessHandler-Class with this function
|
|
24
|
+
* to create instance of D8X perpetual contract and gather information
|
|
25
|
+
* about perpetual currencies
|
|
26
|
+
* @param provider optional provider
|
|
27
|
+
*/
|
|
28
|
+
createProxyInstance(provider?: ethers.providers.Provider): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Set allowance for ar margin token (e.g., MATIC, ETH, USDC)
|
|
31
|
+
* @param symbol token in 'long-form' such as MATIC, symbol also fine (ETH-USD-MATIC)
|
|
32
|
+
* @param amount optional, amount to approve if not 'infinity'
|
|
33
|
+
* @returns ContractTransaction
|
|
34
|
+
*/
|
|
35
|
+
setAllowance(symbol: string, amount?: number | undefined): Promise<ethers.ContractTransaction>;
|
|
36
|
+
protected static _setAllowance(tokenAddr: string, proxyAddr: string, signer: ethers.Signer, amount: BigNumber): Promise<ethers.ContractTransaction>;
|
|
37
|
+
/**
|
|
38
|
+
* Address corresponding to the private key used to instantiate this class.
|
|
39
|
+
* @returns {string} Address of this wallet.
|
|
40
|
+
*/
|
|
41
|
+
getAddress(): string;
|
|
42
|
+
/**
|
|
43
|
+
* Converts a given amount of chain native currency (test MATIC)
|
|
44
|
+
* into a mock token used for trading on testnet, with a rate of 1:100_000
|
|
45
|
+
* @param symbol Pool margin token e.g. MATIC
|
|
46
|
+
* @param amountToPay Amount in chain currency, e.g. "0.1" for 0.1 MATIC
|
|
47
|
+
* @returns Transaction object
|
|
48
|
+
*/
|
|
49
|
+
swapForMockToken(symbol: string, amountToPay: string): Promise<ethers.ContractTransaction>;
|
|
50
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { __awaiter, __extends, __generator } from "tslib";
|
|
2
|
+
import { ethers } from "ethers";
|
|
3
|
+
import { floatToDec18 } from "./d8XMath";
|
|
4
|
+
import { ERC20_ABI, MAX_UINT_256, MOCK_TOKEN_SWAP_ABI } from "./nodeSDKTypes";
|
|
5
|
+
import PerpetualDataHandler from "./perpetualDataHandler";
|
|
6
|
+
/**
|
|
7
|
+
* This is a parent class for the classes that require
|
|
8
|
+
* write access to the contracts.
|
|
9
|
+
* This class requires a private key and executes smart-contract interaction that
|
|
10
|
+
* require gas-payments.
|
|
11
|
+
* @extends PerpetualDataHandler
|
|
12
|
+
*/
|
|
13
|
+
var WriteAccessHandler = /** @class */ (function (_super) {
|
|
14
|
+
__extends(WriteAccessHandler, _super);
|
|
15
|
+
/**
|
|
16
|
+
* Constructor
|
|
17
|
+
* @param {NodeSDKConfig} config configuration
|
|
18
|
+
* @param {string} privateKey private key of account that trades
|
|
19
|
+
*/
|
|
20
|
+
function WriteAccessHandler(config, privateKey, signer) {
|
|
21
|
+
var _this = _super.call(this, config) || this;
|
|
22
|
+
_this.traderAddr = "";
|
|
23
|
+
_this.signer = null;
|
|
24
|
+
_this.gasLimit = 15000000;
|
|
25
|
+
if (privateKey) {
|
|
26
|
+
_this.privateKey = privateKey;
|
|
27
|
+
}
|
|
28
|
+
else if (signer) {
|
|
29
|
+
_this.signer = signer;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
throw new Error("No private key nor signer provided.");
|
|
33
|
+
}
|
|
34
|
+
if (config.gasLimit != undefined) {
|
|
35
|
+
_this.gasLimit = config.gasLimit;
|
|
36
|
+
}
|
|
37
|
+
return _this;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Initialize the writeAccessHandler-Class with this function
|
|
41
|
+
* to create instance of D8X perpetual contract and gather information
|
|
42
|
+
* about perpetual currencies
|
|
43
|
+
* @param provider optional provider
|
|
44
|
+
*/
|
|
45
|
+
WriteAccessHandler.prototype.createProxyInstance = function (provider) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
47
|
+
var wallet, _a;
|
|
48
|
+
return __generator(this, function (_b) {
|
|
49
|
+
switch (_b.label) {
|
|
50
|
+
case 0:
|
|
51
|
+
if (provider == undefined) {
|
|
52
|
+
this.provider = new ethers.providers.JsonRpcBatchProvider(this.nodeURL);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
this.provider = provider;
|
|
56
|
+
}
|
|
57
|
+
if (!this.signer) {
|
|
58
|
+
wallet = new ethers.Wallet(this.privateKey);
|
|
59
|
+
this.signer = wallet.connect(this.provider);
|
|
60
|
+
}
|
|
61
|
+
return [4 /*yield*/, this.initContractsAndData(this.signer)];
|
|
62
|
+
case 1:
|
|
63
|
+
_b.sent();
|
|
64
|
+
_a = this;
|
|
65
|
+
return [4 /*yield*/, this.signer.getAddress()];
|
|
66
|
+
case 2:
|
|
67
|
+
_a.traderAddr = _b.sent();
|
|
68
|
+
return [2 /*return*/];
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Set allowance for ar margin token (e.g., MATIC, ETH, USDC)
|
|
75
|
+
* @param symbol token in 'long-form' such as MATIC, symbol also fine (ETH-USD-MATIC)
|
|
76
|
+
* @param amount optional, amount to approve if not 'infinity'
|
|
77
|
+
* @returns ContractTransaction
|
|
78
|
+
*/
|
|
79
|
+
WriteAccessHandler.prototype.setAllowance = function (symbol, amount) {
|
|
80
|
+
if (amount === void 0) { amount = undefined; }
|
|
81
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
82
|
+
var symbolarr, marginTokenAddr, amountDec18;
|
|
83
|
+
return __generator(this, function (_a) {
|
|
84
|
+
symbolarr = symbol.split("-");
|
|
85
|
+
symbol = symbol.length == 3 ? symbolarr[2] : symbolarr[0];
|
|
86
|
+
marginTokenAddr = this.symbolToTokenAddrMap.get(symbol);
|
|
87
|
+
if (marginTokenAddr == undefined || this.signer == null) {
|
|
88
|
+
throw Error("No margin token or signer defined, call createProxyInstance");
|
|
89
|
+
}
|
|
90
|
+
if (amount == undefined) {
|
|
91
|
+
amountDec18 = MAX_UINT_256;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
amountDec18 = floatToDec18(amount);
|
|
95
|
+
}
|
|
96
|
+
return [2 /*return*/, WriteAccessHandler._setAllowance(marginTokenAddr, this.proxyAddr, this.signer, amountDec18)];
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
WriteAccessHandler._setAllowance = function (tokenAddr, proxyAddr, signer, amount) {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
102
|
+
var marginToken;
|
|
103
|
+
return __generator(this, function (_a) {
|
|
104
|
+
switch (_a.label) {
|
|
105
|
+
case 0:
|
|
106
|
+
marginToken = new ethers.Contract(tokenAddr, ERC20_ABI, signer);
|
|
107
|
+
return [4 /*yield*/, marginToken.approve(proxyAddr, amount)];
|
|
108
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Address corresponding to the private key used to instantiate this class.
|
|
115
|
+
* @returns {string} Address of this wallet.
|
|
116
|
+
*/
|
|
117
|
+
WriteAccessHandler.prototype.getAddress = function () {
|
|
118
|
+
return this.traderAddr;
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Converts a given amount of chain native currency (test MATIC)
|
|
122
|
+
* into a mock token used for trading on testnet, with a rate of 1:100_000
|
|
123
|
+
* @param symbol Pool margin token e.g. MATIC
|
|
124
|
+
* @param amountToPay Amount in chain currency, e.g. "0.1" for 0.1 MATIC
|
|
125
|
+
* @returns Transaction object
|
|
126
|
+
*/
|
|
127
|
+
WriteAccessHandler.prototype.swapForMockToken = function (symbol, amountToPay) {
|
|
128
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
129
|
+
var tokenAddress, tokenToSwap, swapAddress, contract;
|
|
130
|
+
return __generator(this, function (_a) {
|
|
131
|
+
switch (_a.label) {
|
|
132
|
+
case 0:
|
|
133
|
+
if (this.signer == null) {
|
|
134
|
+
throw Error("no wallet initialized. Use createProxyInstance().");
|
|
135
|
+
}
|
|
136
|
+
tokenAddress = this.getMarginTokenFromSymbol(symbol);
|
|
137
|
+
if (tokenAddress == undefined) {
|
|
138
|
+
throw Error("symbols not found");
|
|
139
|
+
}
|
|
140
|
+
tokenToSwap = new Map(Object.entries(require("./config/mockSwap.json")));
|
|
141
|
+
swapAddress = tokenToSwap.get(tokenAddress);
|
|
142
|
+
if (swapAddress == undefined) {
|
|
143
|
+
throw Error("No swap contract found for symbol.");
|
|
144
|
+
}
|
|
145
|
+
contract = new ethers.Contract(swapAddress, MOCK_TOKEN_SWAP_ABI, this.signer);
|
|
146
|
+
return [4 /*yield*/, contract.swapToMockToken({
|
|
147
|
+
value: ethers.utils.parseEther(amountToPay),
|
|
148
|
+
})];
|
|
149
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
return WriteAccessHandler;
|
|
155
|
+
}(PerpetualDataHandler));
|
|
156
|
+
export default WriteAccessHandler;
|
|
157
|
+
//# sourceMappingURL=writeAccessHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writeAccessHandler.js","sourceRoot":"","sources":["../../src/writeAccessHandler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dependencies": {
|
|
3
|
-
"@ethersproject/bytes": "^5.7.0",
|
|
4
|
-
"@ethersproject/strings": "^5.7.0",
|
|
5
3
|
"buffer": "^6.0.3",
|
|
6
4
|
"ethers": "^5.7.2",
|
|
7
5
|
"process": "^0.11.10"
|
|
8
6
|
},
|
|
9
7
|
"scripts": {
|
|
10
|
-
"
|
|
8
|
+
"analyze": "source-map-explorer 'build/static/js/*.js'",
|
|
9
|
+
"build": "yarn build:esm && yarn build:cjs",
|
|
10
|
+
"build:esm": "tsc",
|
|
11
|
+
"build:cjs": "tsc --module commonjs --outDir dist/cjs",
|
|
11
12
|
"build:doc": "jsdoc2md --files ./src/accountTrade.ts --configure ./jsdoc2md.json > ./doc/accountTrade.md && jsdoc2md --files ./src/marketData.ts --configure ./jsdoc2md.json > ./doc/marketData.md && jsdoc2md --files ./src/liquidatorTool.ts --configure ./jsdoc2md.json > ./doc/liquidatorTool.md && jsdoc2md --files ./src/liquidityProviderTool.ts --configure ./jsdoc2md.json > ./doc/liquidityProviderTool.md && jsdoc2md --files ./src/brokerTool.ts --configure ./jsdoc2md.json > ./doc/brokerTool.md && jsdoc2md --files ./src/orderReferrerTool.ts --configure ./jsdoc2md.json > ./doc/orderReferrerTool.md && jsdoc2md --files ./src/*.ts --configure ./jsdoc2md.json > ./doc/d8x-perpetuals-sdk.md",
|
|
12
13
|
"test": "jest",
|
|
13
14
|
"coverage": "nyc -r lcov -e .ts -x \"*.test.ts\" npm run test",
|
|
14
15
|
"prebuild": "node -p \"'export const D8X_SDK_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > src/version.ts",
|
|
15
|
-
"prepublish": "yarn build"
|
|
16
|
+
"prepublish": "yarn build",
|
|
17
|
+
"prepare": "npm run build"
|
|
16
18
|
},
|
|
17
19
|
"devDependencies": {
|
|
18
20
|
"@babel/core": "^7.20.2",
|
|
@@ -27,34 +29,22 @@
|
|
|
27
29
|
"jsdoc-babel": "^0.5.0",
|
|
28
30
|
"jsdoc-to-markdown": "^7.1.1",
|
|
29
31
|
"json2md": "^2.0.0",
|
|
30
|
-
"prettier": "^2.8.
|
|
32
|
+
"prettier": "^2.8.7",
|
|
33
|
+
"source-map-explorer": "^2.5.3",
|
|
31
34
|
"ts-jest": "^29.0.3",
|
|
32
|
-
"ts-loader": "^9.4.2",
|
|
33
35
|
"ts-node": "^10.9.1",
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"webpack-cli": "^5.0.1",
|
|
37
|
-
"webpack-dev-server": "^4.13.1"
|
|
36
|
+
"tslib": "^2.5.0",
|
|
37
|
+
"typescript": "^4.9.3"
|
|
38
38
|
},
|
|
39
39
|
"name": "@d8x/perpetuals-sdk",
|
|
40
40
|
"description": "Node TypeScript SDK for D8X Perpetual Futures",
|
|
41
|
-
"version": "0.
|
|
42
|
-
"main": "./dist/
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"test": "test"
|
|
46
|
-
},
|
|
41
|
+
"version": "0.2.0",
|
|
42
|
+
"main": "./dist/cjs/index.js",
|
|
43
|
+
"module": "./dist/esm/index.js",
|
|
44
|
+
"types": "./dist/esm/index.d.ts",
|
|
47
45
|
"files": [
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"src/*.json",
|
|
51
|
-
"src/*.md",
|
|
52
|
-
"doc/*.md",
|
|
53
|
-
"dist/**/*.ts",
|
|
54
|
-
"dist/**/*.js",
|
|
55
|
-
"dist/**/*.json",
|
|
56
|
-
"./abi/**/*.json",
|
|
57
|
-
"./config/*.json"
|
|
46
|
+
"dist",
|
|
47
|
+
"doc"
|
|
58
48
|
],
|
|
59
49
|
"repository": {
|
|
60
50
|
"type": "git",
|