@orbs-network/twap 1.4.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.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/dist/artifacts/contracts/TWAP.sol/TWAP.json +849 -0
  4. package/dist/artifacts/contracts/periphery/Lens.sol/Lens.json +488 -0
  5. package/dist/src/configs.d.ts +20 -0
  6. package/dist/src/configs.js +64 -0
  7. package/dist/src/index.d.ts +3 -0
  8. package/dist/src/index.js +19 -0
  9. package/dist/src/lib.d.ts +130 -0
  10. package/dist/src/lib.js +194 -0
  11. package/dist/src/paraswap.d.ts +33 -0
  12. package/dist/src/paraswap.js +73 -0
  13. package/dist/typechain-hardhat/contracts/IExchange.d.ts +23 -0
  14. package/dist/typechain-hardhat/contracts/IExchange.js +5 -0
  15. package/dist/typechain-hardhat/contracts/TWAP.d.ts +204 -0
  16. package/dist/typechain-hardhat/contracts/TWAP.js +5 -0
  17. package/dist/typechain-hardhat/contracts/exchange/IParaswap.d.ts +20 -0
  18. package/dist/typechain-hardhat/contracts/exchange/IParaswap.js +5 -0
  19. package/dist/typechain-hardhat/contracts/exchange/IUniswapV2.d.ts +24 -0
  20. package/dist/typechain-hardhat/contracts/exchange/IUniswapV2.js +5 -0
  21. package/dist/typechain-hardhat/contracts/exchange/ParaswapExchange.d.ts +24 -0
  22. package/dist/typechain-hardhat/contracts/exchange/ParaswapExchange.js +5 -0
  23. package/dist/typechain-hardhat/contracts/exchange/UniswapV2Exchange.d.ts +24 -0
  24. package/dist/typechain-hardhat/contracts/exchange/UniswapV2Exchange.js +5 -0
  25. package/dist/typechain-hardhat/contracts/exchange/index.d.ts +4 -0
  26. package/dist/typechain-hardhat/contracts/exchange/index.js +2 -0
  27. package/dist/typechain-hardhat/contracts/index.d.ts +8 -0
  28. package/dist/typechain-hardhat/contracts/index.js +2 -0
  29. package/dist/typechain-hardhat/contracts/periphery/IWETH.d.ts +22 -0
  30. package/dist/typechain-hardhat/contracts/periphery/IWETH.js +5 -0
  31. package/dist/typechain-hardhat/contracts/periphery/Lens.d.ts +104 -0
  32. package/dist/typechain-hardhat/contracts/periphery/Lens.js +5 -0
  33. package/dist/typechain-hardhat/contracts/periphery/Taker.d.ts +39 -0
  34. package/dist/typechain-hardhat/contracts/periphery/Taker.js +5 -0
  35. package/dist/typechain-hardhat/contracts/periphery/index.d.ts +3 -0
  36. package/dist/typechain-hardhat/contracts/periphery/index.js +2 -0
  37. package/dist/typechain-hardhat/contracts/test/MockDeflationaryToken.d.ts +56 -0
  38. package/dist/typechain-hardhat/contracts/test/MockDeflationaryToken.js +5 -0
  39. package/dist/typechain-hardhat/contracts/test/MockExchange.d.ts +25 -0
  40. package/dist/typechain-hardhat/contracts/test/MockExchange.js +5 -0
  41. package/dist/typechain-hardhat/contracts/test/index.d.ts +2 -0
  42. package/dist/typechain-hardhat/contracts/test/index.js +2 -0
  43. package/dist/typechain-hardhat/types.d.ts +55 -0
  44. package/dist/typechain-hardhat/types.js +5 -0
  45. package/package.json +33 -0
@@ -0,0 +1,130 @@
1
+ import { Config, TokenData } from "./configs";
2
+ import BN from "bignumber.js";
3
+ import type { TWAP } from "../typechain-hardhat/contracts";
4
+ import type { Lens } from "../typechain-hardhat/contracts/periphery";
5
+ export declare class TWAPLib {
6
+ config: Config;
7
+ provider: any;
8
+ maker: string;
9
+ twap: TWAP;
10
+ lens: Lens;
11
+ constructor(config: Config, provider: any, maker: string);
12
+ dstAmount: (srcAmount: BN.Value, srcUsd: BN.Value, dstUsd: BN.Value) => BN;
13
+ isNativeToken: (token: TokenData) => boolean;
14
+ isValidNetwork: (chainId: number) => boolean;
15
+ maxPossibleChunks: (srcToken: TokenData, srcAmount: BN.Value, srcUsd: BN.Value) => number;
16
+ srcChunkAmount: (srcAmount: BN.Value, totalChunks: BN.Value) => BN;
17
+ totalChunks: (srcAmount: BN.Value, srcChunkAmount: BN.Value) => BN;
18
+ fillDelayMillis: (totalChunks: BN.Value, maxDurationMillis: BN.Value) => BN;
19
+ dstMinAmountOut: (srcToken: TokenData, dstToken: TokenData, srcChunkAmount: BN.Value, limitDstPriceFor1Src: BN.Value, isMarketOrder: boolean) => BN;
20
+ isMarketOrder: (order: Order) => boolean;
21
+ orderProgress: (order: Order) => BN;
22
+ status: (order: Order) => Status;
23
+ makerBalance(token: TokenData): Promise<BN>;
24
+ wrapNativeToken(amount: BN.Value): Promise<any>;
25
+ waitForConfirmation<T>(fn: () => Promise<T>): Promise<T>;
26
+ hasAllowance(srcToken: TokenData, amount: BN.Value): Promise<boolean>;
27
+ approve(srcToken: TokenData, amount: BN.Value): Promise<void>;
28
+ validateOrderInputs(srcToken: TokenData, dstToken: TokenData, srcAmount: BN.Value, srcChunkAmount: BN.Value, dstMinChunkAmountOut: BN.Value, deadline: BN.Value, fillDelaySeconds: BN.Value, srcUsd: BN.Value): OrderInputValidation;
29
+ submitOrder(srcToken: TokenData, dstToken: TokenData, srcAmount: BN.Value, srcChunkAmount: BN.Value, dstMinChunkAmountOut: BN.Value, deadline: number, fillDelaySeconds: number, srcUsd: BN.Value): Promise<number>;
30
+ getOrder(id: number): Promise<Order>;
31
+ cancelOrder(id: number): Promise<void>;
32
+ getAllOrders(): Promise<{
33
+ id: number;
34
+ status: number;
35
+ filledTime: number;
36
+ srcFilledAmount: BN;
37
+ ask: {
38
+ time: number;
39
+ deadline: number;
40
+ bidDelay: number;
41
+ fillDelay: number;
42
+ maker: any;
43
+ exchange: any;
44
+ srcToken: any;
45
+ dstToken: any;
46
+ srcAmount: BN;
47
+ srcBidAmount: BN;
48
+ dstMinAmount: BN;
49
+ };
50
+ bid: {
51
+ time: number;
52
+ taker: any;
53
+ exchange: any;
54
+ dstAmount: BN;
55
+ dstFee: BN;
56
+ data: any;
57
+ };
58
+ }[]>;
59
+ parseOrder(r: any): {
60
+ id: number;
61
+ status: number;
62
+ filledTime: number;
63
+ srcFilledAmount: BN;
64
+ ask: {
65
+ time: number;
66
+ deadline: number;
67
+ bidDelay: number;
68
+ fillDelay: number;
69
+ maker: any;
70
+ exchange: any;
71
+ srcToken: any;
72
+ dstToken: any;
73
+ srcAmount: BN;
74
+ srcBidAmount: BN;
75
+ dstMinAmount: BN;
76
+ };
77
+ bid: {
78
+ time: number;
79
+ taker: any;
80
+ exchange: any;
81
+ dstAmount: BN;
82
+ dstFee: BN;
83
+ data: any;
84
+ };
85
+ };
86
+ }
87
+ export interface Order {
88
+ id: number;
89
+ status: number;
90
+ filledTime: number;
91
+ srcFilledAmount: BN;
92
+ ask: {
93
+ time: number;
94
+ deadline: number;
95
+ bidDelay: number;
96
+ fillDelay: number;
97
+ maker: string;
98
+ exchange: string;
99
+ srcToken: string;
100
+ dstToken: string;
101
+ srcAmount: BN;
102
+ srcBidAmount: BN;
103
+ dstMinAmount: BN;
104
+ };
105
+ bid: {
106
+ time: number;
107
+ taker: string;
108
+ exchange: string;
109
+ dstAmount: BN;
110
+ dstFee: BN;
111
+ data: string;
112
+ };
113
+ }
114
+ export declare enum Status {
115
+ Open = "Open",
116
+ Canceled = "Canceled",
117
+ Completed = "Completed",
118
+ Expired = "Expired"
119
+ }
120
+ export declare enum OrderInputValidation {
121
+ valid = "valid",
122
+ equalTokens = "equalTokens",
123
+ invalidSrcAmount = "invalidSrcAmount",
124
+ invalidSrcChunkAmount = "invalidSrcChunkAmount",
125
+ invalidDstMinChunkAmountOut = "invalidDstMinChunkAmountOut",
126
+ invalidDeadline = "invalidDeadline",
127
+ invalidFillDelaySeconds = "invalidFillDelaySeconds",
128
+ invalidSrcUsd = "invalidSrcUsd",
129
+ invalidSmallestSrcChunkUsd = "invalidSmallestSrcChunkUsd"
130
+ }
@@ -0,0 +1,194 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.OrderInputValidation = exports.Status = exports.TWAPLib = void 0;
16
+ const configs_1 = require("./configs");
17
+ const web3_1 = __importDefault(require("web3"));
18
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
19
+ const web3_candies_1 = require("@defi.org/web3-candies");
20
+ const TWAP_json_1 = __importDefault(require("../artifacts/contracts/TWAP.sol/TWAP.json"));
21
+ const Lens_json_1 = __importDefault(require("../artifacts/contracts/periphery/Lens.sol/Lens.json"));
22
+ const lodash_1 = __importDefault(require("lodash"));
23
+ class TWAPLib {
24
+ constructor(config, provider, maker) {
25
+ this.config = config;
26
+ this.provider = provider;
27
+ this.maker = maker;
28
+ this.dstAmount = (srcAmount, srcUsd, dstUsd) => (0, bignumber_js_1.default)(srcAmount).times(srcUsd).idiv(dstUsd);
29
+ this.isNativeToken = (token) => !!lodash_1.default.find(configs_1.nativeTokenAddresses, (a) => (0, web3_candies_1.eqIgnoreCase)(a, token.address));
30
+ this.isValidNetwork = (chainId) => chainId === this.config.chainId;
31
+ this.maxPossibleChunks = (srcToken, srcAmount, srcUsd) => bignumber_js_1.default.max(1, (0, bignumber_js_1.default)(srcAmount).div((0, bignumber_js_1.default)(10).pow(srcToken.decimals).div(srcUsd).times(this.config.minChunkSizeUsd)))
32
+ .integerValue(bignumber_js_1.default.ROUND_FLOOR)
33
+ .toNumber();
34
+ this.srcChunkAmount = (srcAmount, totalChunks) => (0, bignumber_js_1.default)(srcAmount).div(totalChunks).integerValue(bignumber_js_1.default.ROUND_FLOOR);
35
+ this.totalChunks = (srcAmount, srcChunkAmount) => (0, bignumber_js_1.default)(srcAmount).div(srcChunkAmount).integerValue(bignumber_js_1.default.ROUND_CEIL);
36
+ this.fillDelayMillis = (totalChunks, maxDurationMillis) => (0, bignumber_js_1.default)(totalChunks).lte(0) || (0, bignumber_js_1.default)(maxDurationMillis).lte(0)
37
+ ? web3_candies_1.zero
38
+ : bignumber_js_1.default.max((0, bignumber_js_1.default)(maxDurationMillis)
39
+ .div(totalChunks)
40
+ .minus((0, bignumber_js_1.default)(this.config.bidDelaySeconds * 1000)), 0);
41
+ this.dstMinAmountOut = (srcToken, dstToken, srcChunkAmount, limitDstPriceFor1Src, isMarketOrder) => isMarketOrder
42
+ ? (0, bignumber_js_1.default)(1)
43
+ : (0, web3_candies_1.convertDecimals)((0, bignumber_js_1.default)(srcChunkAmount).times(limitDstPriceFor1Src), srcToken.decimals, dstToken.decimals).integerValue(bignumber_js_1.default.ROUND_FLOOR);
44
+ this.isMarketOrder = (order) => order.ask.dstMinAmount.lte(1);
45
+ this.orderProgress = (order) => order.srcFilledAmount.div(order.ask.srcAmount);
46
+ this.status = (order) => order.status > Date.now() / 1000
47
+ ? Status.Open
48
+ : order.status === 1
49
+ ? Status.Canceled
50
+ : order.status === 2
51
+ ? Status.Completed
52
+ : Status.Expired;
53
+ (0, web3_candies_1.setWeb3Instance)(new web3_1.default(provider));
54
+ this.twap = (0, web3_candies_1.contract)(TWAP_json_1.default.abi, this.config.twapAddress);
55
+ this.lens = (0, web3_candies_1.contract)(Lens_json_1.default.abi, this.config.lensAddress);
56
+ }
57
+ makerBalance(token) {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ if (this.isNativeToken(token))
60
+ return (0, web3_candies_1.web3)().eth.getBalance(this.maker).then(bignumber_js_1.default);
61
+ else
62
+ return (0, web3_candies_1.erc20)(token.symbol, token.address, token.decimals).methods.balanceOf(this.maker).call().then(bignumber_js_1.default);
63
+ });
64
+ }
65
+ wrapNativeToken(amount) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ return (0, web3_candies_1.erc20)(this.config.wToken.symbol, this.config.wToken.address, this.config.wToken.decimals, web3_candies_1.iwethabi)
68
+ .methods.deposit()
69
+ .send({ from: this.maker, value: (0, bignumber_js_1.default)(amount).toFixed(0) });
70
+ });
71
+ }
72
+ waitForConfirmation(fn) {
73
+ return __awaiter(this, void 0, void 0, function* () {
74
+ const nonceBefore = yield (0, web3_candies_1.web3)().eth.getTransactionCount(this.maker);
75
+ const result = yield fn();
76
+ while ((yield (0, web3_candies_1.web3)().eth.getTransactionCount(this.maker)) === nonceBefore) {
77
+ yield new Promise((r) => setTimeout(r, 1000));
78
+ }
79
+ return result;
80
+ });
81
+ }
82
+ hasAllowance(srcToken, amount) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ const token = (0, web3_candies_1.erc20)(srcToken.symbol, srcToken.address, srcToken.decimals);
85
+ const allowance = (0, bignumber_js_1.default)(yield token.methods.allowance(this.maker, this.config.twapAddress).call());
86
+ return allowance.gte(amount);
87
+ });
88
+ }
89
+ approve(srcToken, amount) {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ const token = (0, web3_candies_1.erc20)(srcToken.symbol, srcToken.address, srcToken.decimals);
92
+ yield token.methods.approve(this.config.twapAddress, amount.toString()).send({ from: this.maker });
93
+ });
94
+ }
95
+ validateOrderInputs(srcToken, dstToken, srcAmount, srcChunkAmount, dstMinChunkAmountOut, deadline, fillDelaySeconds, srcUsd) {
96
+ if (lodash_1.default.isEqual(srcToken, dstToken))
97
+ return OrderInputValidation.equalTokens;
98
+ if ((0, bignumber_js_1.default)(srcAmount).lte(0))
99
+ return OrderInputValidation.invalidSrcAmount;
100
+ if ((0, bignumber_js_1.default)(srcChunkAmount).lte(0) || (0, bignumber_js_1.default)(srcChunkAmount).gt(srcAmount))
101
+ return OrderInputValidation.invalidSrcChunkAmount;
102
+ if ((0, bignumber_js_1.default)(dstMinChunkAmountOut).lte(0))
103
+ return OrderInputValidation.invalidDstMinChunkAmountOut;
104
+ if ((0, bignumber_js_1.default)(deadline).integerValue(bignumber_js_1.default.ROUND_FLOOR).lte(Date.now()))
105
+ return OrderInputValidation.invalidDeadline;
106
+ if ((0, bignumber_js_1.default)(fillDelaySeconds).integerValue(bignumber_js_1.default.ROUND_FLOOR).lt(0))
107
+ return OrderInputValidation.invalidFillDelaySeconds;
108
+ if ((0, bignumber_js_1.default)(srcUsd).lte(0))
109
+ return OrderInputValidation.invalidSrcUsd;
110
+ const smallestChunkSize = (0, bignumber_js_1.default)(srcAmount).mod(srcChunkAmount).gt(0)
111
+ ? (0, bignumber_js_1.default)(srcAmount).mod(srcChunkAmount)
112
+ : (0, bignumber_js_1.default)(srcChunkAmount);
113
+ if (smallestChunkSize.times(srcUsd).lt(this.config.minChunkSizeUsd))
114
+ return OrderInputValidation.invalidSmallestSrcChunkUsd;
115
+ return OrderInputValidation.valid;
116
+ }
117
+ submitOrder(srcToken, dstToken, srcAmount, srcChunkAmount, dstMinChunkAmountOut, deadline, fillDelaySeconds, srcUsd) {
118
+ return __awaiter(this, void 0, void 0, function* () {
119
+ let validation = this.validateOrderInputs(srcToken, dstToken, srcAmount, srcChunkAmount, dstMinChunkAmountOut, deadline, fillDelaySeconds, srcUsd);
120
+ if (validation !== OrderInputValidation.valid)
121
+ throw new Error(`invalid inputs: ${validation}`);
122
+ const tx = yield this.twap.methods
123
+ .ask(this.config.exchangeAddress, srcToken.address, dstToken.address, (0, bignumber_js_1.default)(srcAmount).toFixed(0), (0, bignumber_js_1.default)(srcChunkAmount).toFixed(0), (0, bignumber_js_1.default)(dstMinChunkAmountOut).toFixed(0), (0, bignumber_js_1.default)(deadline).div(1000).toFixed(0), (0, bignumber_js_1.default)(this.config.bidDelaySeconds).toFixed(0), (0, bignumber_js_1.default)(fillDelaySeconds).toFixed(0))
124
+ .send({ from: this.maker });
125
+ const events = (0, web3_candies_1.parseEvents)(tx, this.twap.options.jsonInterface);
126
+ return Number(events[0].returnValues.id);
127
+ });
128
+ }
129
+ getOrder(id) {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ return this.parseOrder(yield this.twap.methods.order(id).call());
132
+ });
133
+ }
134
+ cancelOrder(id) {
135
+ return __awaiter(this, void 0, void 0, function* () {
136
+ yield this.twap.methods.cancel(id).send({ from: this.maker });
137
+ });
138
+ }
139
+ getAllOrders() {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ return lodash_1.default.map(yield this.lens.methods.makerOrders(this.maker).call(), (o) => this.parseOrder(o));
142
+ });
143
+ }
144
+ parseOrder(r) {
145
+ var _a, _b, _c, _d, _e, _f;
146
+ return {
147
+ id: Number(r.id),
148
+ status: Number(r.status),
149
+ filledTime: Number(r.filledTime),
150
+ srcFilledAmount: (0, bignumber_js_1.default)(r.srcFilledAmount),
151
+ ask: {
152
+ time: Number(r.ask.time),
153
+ deadline: Number(r.ask.deadline),
154
+ bidDelay: Number(r.ask.bidDelay),
155
+ fillDelay: Number(r.ask.fillDelay),
156
+ maker: r.ask.maker,
157
+ exchange: r.ask.exchange,
158
+ srcToken: r.ask.srcToken,
159
+ dstToken: r.ask.dstToken,
160
+ srcAmount: (0, bignumber_js_1.default)(r.ask.srcAmount),
161
+ srcBidAmount: (0, bignumber_js_1.default)(r.ask.srcBidAmount),
162
+ dstMinAmount: (0, bignumber_js_1.default)(r.ask.dstMinAmount),
163
+ },
164
+ bid: {
165
+ time: Number(((_a = r.bid) === null || _a === void 0 ? void 0 : _a.time) || 0),
166
+ taker: ((_b = r.bid) === null || _b === void 0 ? void 0 : _b.taker) || "",
167
+ exchange: ((_c = r.bid) === null || _c === void 0 ? void 0 : _c.exchange) || "",
168
+ dstAmount: (0, bignumber_js_1.default)(((_d = r.bid) === null || _d === void 0 ? void 0 : _d.dstAmount) || web3_candies_1.zero),
169
+ dstFee: (0, bignumber_js_1.default)(((_e = r.bid) === null || _e === void 0 ? void 0 : _e.dstFee) || web3_candies_1.zero),
170
+ data: ((_f = r.bid) === null || _f === void 0 ? void 0 : _f.data) || "",
171
+ },
172
+ };
173
+ }
174
+ }
175
+ exports.TWAPLib = TWAPLib;
176
+ var Status;
177
+ (function (Status) {
178
+ Status["Open"] = "Open";
179
+ Status["Canceled"] = "Canceled";
180
+ Status["Completed"] = "Completed";
181
+ Status["Expired"] = "Expired";
182
+ })(Status = exports.Status || (exports.Status = {}));
183
+ var OrderInputValidation;
184
+ (function (OrderInputValidation) {
185
+ OrderInputValidation["valid"] = "valid";
186
+ OrderInputValidation["equalTokens"] = "equalTokens";
187
+ OrderInputValidation["invalidSrcAmount"] = "invalidSrcAmount";
188
+ OrderInputValidation["invalidSrcChunkAmount"] = "invalidSrcChunkAmount";
189
+ OrderInputValidation["invalidDstMinChunkAmountOut"] = "invalidDstMinChunkAmountOut";
190
+ OrderInputValidation["invalidDeadline"] = "invalidDeadline";
191
+ OrderInputValidation["invalidFillDelaySeconds"] = "invalidFillDelaySeconds";
192
+ OrderInputValidation["invalidSrcUsd"] = "invalidSrcUsd";
193
+ OrderInputValidation["invalidSmallestSrcChunkUsd"] = "invalidSmallestSrcChunkUsd";
194
+ })(OrderInputValidation = exports.OrderInputValidation || (exports.OrderInputValidation = {}));
@@ -0,0 +1,33 @@
1
+ import BN from "bignumber.js";
2
+ import { TokenData } from "./configs";
3
+ export declare namespace Paraswap {
4
+ enum OnlyDex {
5
+ SpiritSwap = "SpiritSwap,SpiritSwapV2",
6
+ SpookySwap = "SpookySwap"
7
+ }
8
+ interface ParaswapRoute {
9
+ blockNumber: number;
10
+ network: number;
11
+ srcToken: string;
12
+ destToken: string;
13
+ srcDecimals: number;
14
+ destDecimals: number;
15
+ srcAmount: string;
16
+ destAmount: string;
17
+ bestRoute: any[];
18
+ gasCostUSD: string;
19
+ gasCost: string;
20
+ side: string;
21
+ tokenTransferProxy: string;
22
+ contractAddress: string;
23
+ contractMethod: string;
24
+ partnerFee: number;
25
+ srcUSD: string;
26
+ destUSD: string;
27
+ partner: string;
28
+ maxImpactReached: boolean;
29
+ }
30
+ function priceUsd(chainId: number, token: TokenData): Promise<BN>;
31
+ function findRoute(chainId: number, src: TokenData, dst: TokenData, amountIn: BN.Value, onlyDex?: OnlyDex): Promise<ParaswapRoute>;
32
+ function buildSwapData(dstMinOut: BN.Value, paraswapRoute: ParaswapRoute, exchangeAdapter: string): Promise<string>;
33
+ }
@@ -0,0 +1,73 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.Paraswap = void 0;
16
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
17
+ const axios_1 = __importDefault(require("axios"));
18
+ const web3_candies_1 = require("@defi.org/web3-candies");
19
+ var Paraswap;
20
+ (function (Paraswap) {
21
+ const URL = "https://apiv5.paraswap.io";
22
+ let OnlyDex;
23
+ (function (OnlyDex) {
24
+ OnlyDex["SpiritSwap"] = "SpiritSwap,SpiritSwapV2";
25
+ OnlyDex["SpookySwap"] = "SpookySwap";
26
+ })(OnlyDex = Paraswap.OnlyDex || (Paraswap.OnlyDex = {}));
27
+ function priceUsd(chainId, token) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ const r = yield findRoute(chainId, token, token, (0, bignumber_js_1.default)(10).pow(token.decimals));
30
+ return (0, bignumber_js_1.default)(r.srcUSD);
31
+ });
32
+ }
33
+ Paraswap.priceUsd = priceUsd;
34
+ function findRoute(chainId, src, dst, amountIn, onlyDex) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ const params = new URLSearchParams({
37
+ srcToken: src.address,
38
+ destToken: dst.address,
39
+ srcDecimals: src.decimals.toString(),
40
+ destDecimals: dst.decimals.toString(),
41
+ amount: amountIn.toString(),
42
+ network: chainId.toString(),
43
+ side: "SELL",
44
+ includeDEXS: onlyDex || "",
45
+ partner: "chucknorris",
46
+ // otherExchangePrices: "true",
47
+ });
48
+ const response = yield axios_1.default.get(`${URL}/prices/?${params}`);
49
+ if (response.status < 200 || response.status >= 400)
50
+ throw new Error(`${response.statusText}`);
51
+ return response.data.priceRoute;
52
+ });
53
+ }
54
+ Paraswap.findRoute = findRoute;
55
+ function buildSwapData(dstMinOut, paraswapRoute, exchangeAdapter) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ const response = yield axios_1.default.post(`${URL}/transactions/${paraswapRoute.network}?ignoreChecks=true`, {
58
+ priceRoute: paraswapRoute,
59
+ srcToken: paraswapRoute.srcToken,
60
+ destToken: paraswapRoute.destToken,
61
+ srcDecimals: paraswapRoute.srcDecimals,
62
+ destDecimals: paraswapRoute.destDecimals,
63
+ srcAmount: paraswapRoute.srcAmount,
64
+ destAmount: (0, bignumber_js_1.default)(dstMinOut).toFixed(0),
65
+ userAddress: exchangeAdapter,
66
+ });
67
+ if (response.status < 200 || response.status >= 400)
68
+ throw new Error(`${response.statusText}`);
69
+ return (0, web3_candies_1.web3)().eth.abi.encodeParameters(["uint256", "bytes"], [paraswapRoute.destAmount, response.data.data]);
70
+ });
71
+ }
72
+ Paraswap.buildSwapData = buildSwapData;
73
+ })(Paraswap = exports.Paraswap || (exports.Paraswap = {}));
@@ -0,0 +1,23 @@
1
+ /// <reference types="node" />
2
+ import type BN from "bn.js";
3
+ import type BigNumber from "bignumber.js";
4
+ import type { ContractOptions } from "web3-eth-contract";
5
+ import type { EventLog } from "web3-core";
6
+ import type { EventEmitter } from "events";
7
+ import type { Callback, NonPayableTransactionObject, BlockType, BaseContract } from "../types";
8
+ export interface EventOptions {
9
+ filter?: object;
10
+ fromBlock?: BlockType;
11
+ topics?: string[];
12
+ }
13
+ export interface IExchange extends BaseContract {
14
+ constructor(jsonInterface: any[], address?: string, options?: ContractOptions): IExchange;
15
+ clone(): IExchange;
16
+ methods: {
17
+ getAmountOut(srcToken: string, dstToken: string, amountIn: number | string | BN | BigNumber, data: string | number[]): NonPayableTransactionObject<string>;
18
+ swap(srcToken: string, dstToken: string, amountIn: number | string | BN | BigNumber, amountOutMin: number | string | BN | BigNumber, data: string | number[]): NonPayableTransactionObject<void>;
19
+ };
20
+ events: {
21
+ allEvents(options?: EventOptions, cb?: Callback<EventLog>): EventEmitter;
22
+ };
23
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ /* Autogenerated file. Do not edit manually. */
3
+ /* tslint:disable */
4
+ /* eslint-disable */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,204 @@
1
+ /// <reference types="node" />
2
+ import type BN from "bn.js";
3
+ import type BigNumber from "bignumber.js";
4
+ import type { ContractOptions } from "web3-eth-contract";
5
+ import type { EventLog } from "web3-core";
6
+ import type { EventEmitter } from "events";
7
+ import type { Callback, NonPayableTransactionObject, BlockType, ContractEventLog, BaseContract } from "../types";
8
+ export interface EventOptions {
9
+ filter?: object;
10
+ fromBlock?: BlockType;
11
+ topics?: string[];
12
+ }
13
+ export declare type OrderBid = ContractEventLog<{
14
+ id: string;
15
+ maker: string;
16
+ exchange: string;
17
+ slippagePercent: string;
18
+ bid: [string, string, string, string, string, string];
19
+ 0: string;
20
+ 1: string;
21
+ 2: string;
22
+ 3: string;
23
+ 4: [string, string, string, string, string, string];
24
+ }>;
25
+ export declare type OrderCanceled = ContractEventLog<{
26
+ id: string;
27
+ maker: string;
28
+ sender: string;
29
+ 0: string;
30
+ 1: string;
31
+ 2: string;
32
+ }>;
33
+ export declare type OrderCompleted = ContractEventLog<{
34
+ id: string;
35
+ maker: string;
36
+ exchange: string;
37
+ taker: string;
38
+ 0: string;
39
+ 1: string;
40
+ 2: string;
41
+ 3: string;
42
+ }>;
43
+ export declare type OrderCreated = ContractEventLog<{
44
+ id: string;
45
+ maker: string;
46
+ exchange: string;
47
+ ask: [
48
+ string,
49
+ string,
50
+ string,
51
+ string,
52
+ string,
53
+ string,
54
+ string,
55
+ string,
56
+ string,
57
+ string,
58
+ string
59
+ ];
60
+ 0: string;
61
+ 1: string;
62
+ 2: string;
63
+ 3: [
64
+ string,
65
+ string,
66
+ string,
67
+ string,
68
+ string,
69
+ string,
70
+ string,
71
+ string,
72
+ string,
73
+ string,
74
+ string
75
+ ];
76
+ }>;
77
+ export declare type OrderFilled = ContractEventLog<{
78
+ id: string;
79
+ maker: string;
80
+ exchange: string;
81
+ taker: string;
82
+ srcAmountIn: string;
83
+ dstAmountOut: string;
84
+ dstFee: string;
85
+ srcFilledAmount: string;
86
+ 0: string;
87
+ 1: string;
88
+ 2: string;
89
+ 3: string;
90
+ 4: string;
91
+ 5: string;
92
+ 6: string;
93
+ 7: string;
94
+ }>;
95
+ export interface TWAP extends BaseContract {
96
+ constructor(jsonInterface: any[], address?: string, options?: ContractOptions): TWAP;
97
+ clone(): TWAP;
98
+ methods: {
99
+ MIN_BID_DELAY_SECONDS(): NonPayableTransactionObject<string>;
100
+ MIN_OUTBID_PERCENT(): NonPayableTransactionObject<string>;
101
+ PERCENT_BASE(): NonPayableTransactionObject<string>;
102
+ STALE_BID_DELAY_MUL(): NonPayableTransactionObject<string>;
103
+ STATUS_CANCELED(): NonPayableTransactionObject<string>;
104
+ STATUS_COMPLETED(): NonPayableTransactionObject<string>;
105
+ VERSION(): NonPayableTransactionObject<string>;
106
+ ask(exchange: string, srcToken: string, dstToken: string, srcAmount: number | string | BN | BigNumber, srcBidAmount: number | string | BN | BigNumber, dstMinAmount: number | string | BN | BigNumber, deadline: number | string | BN | BigNumber, bidDelay: number | string | BN | BigNumber, fillDelay: number | string | BN | BigNumber): NonPayableTransactionObject<string>;
107
+ bid(id: number | string | BN | BigNumber, exchange: string, dstFee: number | string | BN | BigNumber, slippagePercent: number | string | BN | BigNumber, data: string | number[]): NonPayableTransactionObject<void>;
108
+ book(arg0: number | string | BN | BigNumber): NonPayableTransactionObject<{
109
+ id: string;
110
+ status: string;
111
+ filledTime: string;
112
+ srcFilledAmount: string;
113
+ ask: [
114
+ string,
115
+ string,
116
+ string,
117
+ string,
118
+ string,
119
+ string,
120
+ string,
121
+ string,
122
+ string,
123
+ string,
124
+ string
125
+ ];
126
+ bid: [string, string, string, string, string, string];
127
+ 0: string;
128
+ 1: string;
129
+ 2: string;
130
+ 3: string;
131
+ 4: [
132
+ string,
133
+ string,
134
+ string,
135
+ string,
136
+ string,
137
+ string,
138
+ string,
139
+ string,
140
+ string,
141
+ string,
142
+ string
143
+ ];
144
+ 5: [string, string, string, string, string, string];
145
+ }>;
146
+ cancel(id: number | string | BN | BigNumber): NonPayableTransactionObject<void>;
147
+ fill(id: number | string | BN | BigNumber): NonPayableTransactionObject<void>;
148
+ length(): NonPayableTransactionObject<string>;
149
+ makerOrders(arg0: string, arg1: number | string | BN | BigNumber): NonPayableTransactionObject<string>;
150
+ order(id: number | string | BN | BigNumber): NonPayableTransactionObject<[
151
+ string,
152
+ string,
153
+ string,
154
+ string,
155
+ [
156
+ string,
157
+ string,
158
+ string,
159
+ string,
160
+ string,
161
+ string,
162
+ string,
163
+ string,
164
+ string,
165
+ string,
166
+ string
167
+ ],
168
+ [
169
+ string,
170
+ string,
171
+ string,
172
+ string,
173
+ string,
174
+ string
175
+ ]
176
+ ]>;
177
+ orderIdsByMaker(maker: string): NonPayableTransactionObject<string[]>;
178
+ prune(id: number | string | BN | BigNumber): NonPayableTransactionObject<void>;
179
+ status(arg0: number | string | BN | BigNumber): NonPayableTransactionObject<string>;
180
+ };
181
+ events: {
182
+ OrderBid(cb?: Callback<OrderBid>): EventEmitter;
183
+ OrderBid(options?: EventOptions, cb?: Callback<OrderBid>): EventEmitter;
184
+ OrderCanceled(cb?: Callback<OrderCanceled>): EventEmitter;
185
+ OrderCanceled(options?: EventOptions, cb?: Callback<OrderCanceled>): EventEmitter;
186
+ OrderCompleted(cb?: Callback<OrderCompleted>): EventEmitter;
187
+ OrderCompleted(options?: EventOptions, cb?: Callback<OrderCompleted>): EventEmitter;
188
+ OrderCreated(cb?: Callback<OrderCreated>): EventEmitter;
189
+ OrderCreated(options?: EventOptions, cb?: Callback<OrderCreated>): EventEmitter;
190
+ OrderFilled(cb?: Callback<OrderFilled>): EventEmitter;
191
+ OrderFilled(options?: EventOptions, cb?: Callback<OrderFilled>): EventEmitter;
192
+ allEvents(options?: EventOptions, cb?: Callback<EventLog>): EventEmitter;
193
+ };
194
+ once(event: "OrderBid", cb: Callback<OrderBid>): void;
195
+ once(event: "OrderBid", options: EventOptions, cb: Callback<OrderBid>): void;
196
+ once(event: "OrderCanceled", cb: Callback<OrderCanceled>): void;
197
+ once(event: "OrderCanceled", options: EventOptions, cb: Callback<OrderCanceled>): void;
198
+ once(event: "OrderCompleted", cb: Callback<OrderCompleted>): void;
199
+ once(event: "OrderCompleted", options: EventOptions, cb: Callback<OrderCompleted>): void;
200
+ once(event: "OrderCreated", cb: Callback<OrderCreated>): void;
201
+ once(event: "OrderCreated", options: EventOptions, cb: Callback<OrderCreated>): void;
202
+ once(event: "OrderFilled", cb: Callback<OrderFilled>): void;
203
+ once(event: "OrderFilled", options: EventOptions, cb: Callback<OrderFilled>): void;
204
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ /* Autogenerated file. Do not edit manually. */
3
+ /* tslint:disable */
4
+ /* eslint-disable */
5
+ Object.defineProperty(exports, "__esModule", { value: true });