@paraswap/dex-lib 3.8.13-arusd-fxusd.5 → 3.8.13-arusd-fxusd.6
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/build/dex/concentrator-arusd/concentrator-arusd-event.d.ts +2 -1
- package/build/dex/concentrator-arusd/concentrator-arusd-event.js +16 -2
- package/build/dex/concentrator-arusd/concentrator-arusd-event.js.map +1 -1
- package/build/dex/concentrator-arusd/concentrator-arusd.js +4 -4
- package/build/dex/concentrator-arusd/concentrator-arusd.js.map +1 -1
- package/build/dex/fx-protocol-rusd/fx-protocol-rusd-event.d.ts +3 -2
- package/build/dex/fx-protocol-rusd/fx-protocol-rusd-event.js +27 -15
- package/build/dex/fx-protocol-rusd/fx-protocol-rusd-event.js.map +1 -1
- package/build/dex/fx-protocol-rusd/fx-protocol-rusd.d.ts +2 -2
- package/build/dex/fx-protocol-rusd/fx-protocol-rusd.js +3 -5
- package/build/dex/fx-protocol-rusd/fx-protocol-rusd.js.map +1 -1
- package/package.json +1 -1
- package/src/dex/concentrator-arusd/concentrator-arusd-event.ts +26 -4
- package/src/dex/concentrator-arusd/concentrator-arusd.ts +11 -5
- package/src/dex/fx-protocol-rusd/fx-protocol-events.test.ts +3 -3
- package/src/dex/fx-protocol-rusd/fx-protocol-rusd-event.ts +41 -13
- package/src/dex/fx-protocol-rusd/fx-protocol-rusd.ts +8 -8
|
@@ -12,5 +12,6 @@ export declare class ConcentratorArusdEvent extends StatefulEventSubscriber<Conc
|
|
|
12
12
|
constructor(parentName: string, dexHelper: IDexHelper, poolAddress: Address, poolInterface: Interface, logger: Logger);
|
|
13
13
|
protected processLog(state: DeepReadonly<ConcentratorArusdState>, log: Readonly<Log>): AsyncOrSync<DeepReadonly<ConcentratorArusdState> | null>;
|
|
14
14
|
generateState(blockNumber?: number | 'latest'): Promise<DeepReadonly<ConcentratorArusdState>>;
|
|
15
|
-
getPrice(blockNumber: number, ethAmount: bigint, is_deposit: boolean): bigint
|
|
15
|
+
getPrice(blockNumber: number, ethAmount: bigint, is_deposit: boolean): Promise<bigint>;
|
|
16
|
+
getOrGenerateState(blockNumber: number): Promise<DeepReadonly<ConcentratorArusdState> | null>;
|
|
16
17
|
}
|
|
@@ -36,8 +36,8 @@ class ConcentratorArusdEvent extends stateful_event_subscriber_1.StatefulEventSu
|
|
|
36
36
|
const state = await (0, utils_1.getOnChainState)(this.dexHelper.multiContract, this.poolAddress, this.poolInterface, blockNumber);
|
|
37
37
|
return state;
|
|
38
38
|
}
|
|
39
|
-
getPrice(blockNumber, ethAmount, is_deposit) {
|
|
40
|
-
const state = this.
|
|
39
|
+
async getPrice(blockNumber, ethAmount, is_deposit) {
|
|
40
|
+
const state = await this.getOrGenerateState(blockNumber);
|
|
41
41
|
if (!state)
|
|
42
42
|
throw new Error('Cannot compute price');
|
|
43
43
|
const { totalSupply, totalAssets } = state;
|
|
@@ -47,6 +47,20 @@ class ConcentratorArusdEvent extends stateful_event_subscriber_1.StatefulEventSu
|
|
|
47
47
|
}
|
|
48
48
|
return BigInt((nav * ethAmount) / bigint_constants_1.BI_POWS[18]);
|
|
49
49
|
}
|
|
50
|
+
async getOrGenerateState(blockNumber) {
|
|
51
|
+
const state = this.getState(blockNumber);
|
|
52
|
+
if (state) {
|
|
53
|
+
return state;
|
|
54
|
+
}
|
|
55
|
+
this.logger.debug(`No state found for ${this.addressesSubscribed[0]}, generating new one`);
|
|
56
|
+
const newState = await this.generateState(blockNumber);
|
|
57
|
+
if (!newState) {
|
|
58
|
+
this.logger.debug(`Could not regenerate state for ${this.addressesSubscribed[0]}`);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
this.setState(newState, blockNumber);
|
|
62
|
+
return newState;
|
|
63
|
+
}
|
|
50
64
|
}
|
|
51
65
|
exports.ConcentratorArusdEvent = ConcentratorArusdEvent;
|
|
52
66
|
//# sourceMappingURL=concentrator-arusd-event.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concentrator-arusd-event.js","sourceRoot":"","sources":["../../../src/dex/concentrator-arusd/concentrator-arusd-event.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AAGvB,+EAA0E;AAI1E,6DAAiD;
|
|
1
|
+
{"version":3,"file":"concentrator-arusd-event.js","sourceRoot":"","sources":["../../../src/dex/concentrator-arusd/concentrator-arusd-event.ts"],"names":[],"mappings":"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"}
|
|
@@ -101,11 +101,11 @@ class ConcentratorArusd extends simple_exchange_1.SimpleExchange {
|
|
|
101
101
|
const is_deposit = !!this.is_rUSD(srcToken.address);
|
|
102
102
|
const pool = this.concentratorArusdEvent;
|
|
103
103
|
const unitIn = bigint_constants_1.BI_POWS[18];
|
|
104
|
-
const unitOut = pool.getPrice(blockNumber, unitIn, is_deposit);
|
|
105
|
-
const amountsOut = amounts.map(amountIn => {
|
|
106
|
-
const _newPrice = pool.getPrice(blockNumber, amountIn, is_deposit);
|
|
104
|
+
const unitOut = await pool.getPrice(blockNumber, unitIn, is_deposit);
|
|
105
|
+
const amountsOut = await Promise.all(amounts.map(async (amountIn) => {
|
|
106
|
+
const _newPrice = await pool.getPrice(blockNumber, amountIn, is_deposit);
|
|
107
107
|
return _newPrice;
|
|
108
|
-
});
|
|
108
|
+
}));
|
|
109
109
|
return [
|
|
110
110
|
{
|
|
111
111
|
unit: unitOut,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concentrator-arusd.js","sourceRoot":"","sources":["../../../src/dex/concentrator-arusd/concentrator-arusd.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"concentrator-arusd.js","sourceRoot":"","sources":["../../../src/dex/concentrator-arusd/concentrator-arusd.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
|
|
|
4
4
|
import { Address, Log, Logger } from '../../types';
|
|
5
5
|
import { AsyncOrSync, DeepReadonly } from 'ts-essentials';
|
|
6
6
|
import { FxProtocolPoolState } from './types';
|
|
7
|
-
export declare class
|
|
7
|
+
export declare class FxProtocolRusdEvent extends StatefulEventSubscriber<FxProtocolPoolState> {
|
|
8
8
|
protected dexHelper: IDexHelper;
|
|
9
9
|
private marketAddress;
|
|
10
10
|
private marketInterface;
|
|
@@ -13,5 +13,6 @@ export declare class fxProtocolRusdEvent extends StatefulEventSubscriber<FxProto
|
|
|
13
13
|
constructor(parentName: string, dexHelper: IDexHelper, marketAddress: Address, marketInterface: Interface, weETHOracleAddress: Address, weETHOracleIface: Interface, logger: Logger);
|
|
14
14
|
protected processLog(state: DeepReadonly<FxProtocolPoolState>, log: Readonly<Log>): AsyncOrSync<DeepReadonly<FxProtocolPoolState> | null>;
|
|
15
15
|
generateState(blockNumber?: number | 'latest'): Promise<DeepReadonly<FxProtocolPoolState>>;
|
|
16
|
-
getPrice(blockNumber: number, amount: bigint, isRedeem: boolean): bigint
|
|
16
|
+
getPrice(blockNumber: number, amount: bigint, isRedeem: boolean): Promise<bigint>;
|
|
17
|
+
getOrGenerateState(blockNumber: number): Promise<DeepReadonly<FxProtocolPoolState> | null>;
|
|
17
18
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.FxProtocolRusdEvent = void 0;
|
|
4
|
+
const abi_1 = require("@ethersproject/abi");
|
|
4
5
|
const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
|
|
5
6
|
const bigint_constants_1 = require("../../bigint-constants");
|
|
6
7
|
const utils_1 = require("./utils");
|
|
7
8
|
const ANSWER_UPDATED_TOPICHASH = `0x0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f`;
|
|
8
9
|
const UPDATE_REDEEM_FEE_TOPICHASH = `0xb3d49e95905d108ea668ffe62a85ee16bdc4ff9f122a7137964327ea8e0585ff`;
|
|
9
|
-
class
|
|
10
|
+
class FxProtocolRusdEvent extends stateful_event_subscriber_1.StatefulEventSubscriber {
|
|
10
11
|
constructor(parentName, dexHelper, marketAddress, marketInterface, weETHOracleAddress, weETHOracleIface, logger) {
|
|
11
12
|
super(parentName, 'fxProtocolRusd', dexHelper, logger);
|
|
12
13
|
this.dexHelper = dexHelper;
|
|
@@ -17,16 +18,13 @@ class fxProtocolRusdEvent extends stateful_event_subscriber_1.StatefulEventSubsc
|
|
|
17
18
|
this.addressesSubscribed = [marketAddress, weETHOracleAddress];
|
|
18
19
|
}
|
|
19
20
|
processLog(state, log) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
// redeemFee: BigInt(defaultFeeRatio).toString(),
|
|
28
|
-
// };
|
|
29
|
-
// }
|
|
21
|
+
if (log.topics[0] === UPDATE_REDEEM_FEE_TOPICHASH) {
|
|
22
|
+
const [defaultFeeRatio] = abi_1.defaultAbiCoder.decode(['uint256', 'int256'], log.data);
|
|
23
|
+
return {
|
|
24
|
+
...state,
|
|
25
|
+
redeemFee: BigInt(defaultFeeRatio).toString(),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
30
28
|
if (log.topics[0] === ANSWER_UPDATED_TOPICHASH) {
|
|
31
29
|
return {
|
|
32
30
|
...state,
|
|
@@ -39,8 +37,8 @@ class fxProtocolRusdEvent extends stateful_event_subscriber_1.StatefulEventSubsc
|
|
|
39
37
|
const state = await (0, utils_1.getOnChainState)(this.dexHelper.multiContract, this.marketAddress, this.marketInterface, this.weETHOracleAddress, this.weETHOracleIface, blockNumber);
|
|
40
38
|
return state;
|
|
41
39
|
}
|
|
42
|
-
getPrice(blockNumber, amount, isRedeem) {
|
|
43
|
-
const state = this.
|
|
40
|
+
async getPrice(blockNumber, amount, isRedeem) {
|
|
41
|
+
const state = await this.getOrGenerateState(blockNumber);
|
|
44
42
|
if (!state)
|
|
45
43
|
throw new Error('Cannot compute price');
|
|
46
44
|
const { nav, redeemFee, weETHPrice } = state;
|
|
@@ -54,6 +52,20 @@ class fxProtocolRusdEvent extends stateful_event_subscriber_1.StatefulEventSubsc
|
|
|
54
52
|
return BigInt((baseTokenPrice * amount) / BigInt(nav));
|
|
55
53
|
}
|
|
56
54
|
}
|
|
55
|
+
async getOrGenerateState(blockNumber) {
|
|
56
|
+
const state = this.getState(blockNumber);
|
|
57
|
+
if (state) {
|
|
58
|
+
return state;
|
|
59
|
+
}
|
|
60
|
+
this.logger.debug(`No state found for ${this.addressesSubscribed[0]}, generating new one`);
|
|
61
|
+
const newState = await this.generateState(blockNumber);
|
|
62
|
+
if (!newState) {
|
|
63
|
+
this.logger.debug(`Could not regenerate state for ${this.addressesSubscribed[0]}`);
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
this.setState(newState, blockNumber);
|
|
67
|
+
return newState;
|
|
68
|
+
}
|
|
57
69
|
}
|
|
58
|
-
exports.
|
|
70
|
+
exports.FxProtocolRusdEvent = FxProtocolRusdEvent;
|
|
59
71
|
//# sourceMappingURL=fx-protocol-rusd-event.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fx-protocol-rusd-event.js","sourceRoot":"","sources":["../../../src/dex/fx-protocol-rusd/fx-protocol-rusd-event.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"fx-protocol-rusd-event.js","sourceRoot":"","sources":["../../../src/dex/fx-protocol-rusd/fx-protocol-rusd-event.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
|
5
5
|
import { DexParams, FxProtocolData } from './types';
|
|
6
6
|
import { SimpleExchange } from '../simple-exchange';
|
|
7
7
|
import { Interface } from '@ethersproject/abi';
|
|
8
|
-
import {
|
|
8
|
+
import { FxProtocolRusdEvent } from './fx-protocol-rusd-event';
|
|
9
9
|
export declare class FxProtocolRusd extends SimpleExchange implements IDex<FxProtocolData> {
|
|
10
10
|
readonly network: Network;
|
|
11
11
|
readonly dexKey: string;
|
|
@@ -21,7 +21,7 @@ export declare class FxProtocolRusd extends SimpleExchange implements IDex<FxPro
|
|
|
21
21
|
fxUSDIface: Interface;
|
|
22
22
|
rUSDMarketIface: Interface;
|
|
23
23
|
weETHOracleIface: Interface;
|
|
24
|
-
fxProtocolRusdPool:
|
|
24
|
+
fxProtocolRusdPool: FxProtocolRusdEvent;
|
|
25
25
|
logger: Logger;
|
|
26
26
|
constructor(network: Network, dexKey: string, dexHelper: IDexHelper);
|
|
27
27
|
initializePricing(blockNumber: number): Promise<void>;
|
|
@@ -59,7 +59,7 @@ class FxProtocolRusd extends simple_exchange_1.SimpleExchange {
|
|
|
59
59
|
weETHOracleAddress: config.weETHOracleAddress.toLowerCase(),
|
|
60
60
|
};
|
|
61
61
|
this.logger = dexHelper.getLogger(dexKey);
|
|
62
|
-
this.fxProtocolRusdPool = new fx_protocol_rusd_event_1.
|
|
62
|
+
this.fxProtocolRusdPool = new fx_protocol_rusd_event_1.FxProtocolRusdEvent(this.dexKey, dexHelper, this.config.rUSDWeETHMarketAddress, this.rUSDMarketIface, this.config.weETHOracleAddress, this.weETHOracleIface, this.logger);
|
|
63
63
|
}
|
|
64
64
|
async initializePricing(blockNumber) {
|
|
65
65
|
const data = await this.dexHelper.multiContract.methods
|
|
@@ -120,12 +120,10 @@ class FxProtocolRusd extends simple_exchange_1.SimpleExchange {
|
|
|
120
120
|
return null;
|
|
121
121
|
}
|
|
122
122
|
const pool = this.fxProtocolRusdPool;
|
|
123
|
-
if (!pool.getState(blockNumber))
|
|
124
|
-
return null;
|
|
125
123
|
const is_redeem = this.is_weETH(destToken.address);
|
|
126
124
|
const unitIn = bigint_constants_1.BI_POWS[18];
|
|
127
|
-
const unitOut = pool.getPrice(blockNumber, unitIn, is_redeem);
|
|
128
|
-
const amountsOut = amounts.map(_amountIn => pool.getPrice(blockNumber, _amountIn, is_redeem));
|
|
125
|
+
const unitOut = await pool.getPrice(blockNumber, unitIn, is_redeem);
|
|
126
|
+
const amountsOut = await Promise.all(amounts.map(_amountIn => pool.getPrice(blockNumber, _amountIn, is_redeem)));
|
|
129
127
|
return [
|
|
130
128
|
{
|
|
131
129
|
unit: unitOut,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fx-protocol-rusd.js","sourceRoot":"","sources":["../../../src/dex/fx-protocol-rusd/fx-protocol-rusd.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,+CAAoD;AACpD,2EAA6D;AAC7D,uCAAoD;AAIpD,wDAAoD;AACpD,qCAA4C;AAC5C,4CAA6D;AAC7D,kFAAyD;AACzD,wFAA+D;AAC/D,8FAAwE;AAExE,gDAAmE;AACnE,qEAA+D;AAC/D,6DAAiD;AAEjD,MAAa,cACX,SAAQ,gCAAc;IAoBtB,YACW,OAAgB,EAChB,MAAc,EACd,SAAqB;QAE9B,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAJhB,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAY;QAlBvB,iCAA4B,GAAG,IAAI,CAAC;QAEpC,mBAAc,GAAG,KAAK,CAAC;QAEvB,6BAAwB,GAAG,KAAK,CAAC;QAiBxC,MAAM,MAAM,GAAG,yBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,IAAI,eAAS,CAAC,oBAA2B,CAAC,CAAC;QAC7D,IAAI,CAAC,eAAe,GAAG,IAAI,eAAS,CAAC,uBAA8B,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAS,CAAC,0BAAoC,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG;YACZ,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE;YAC7C,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE;YAC/C,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,CAAC,WAAW,EAAE;YACnE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE;SAC5D,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,kBAAkB,GAAG,IAAI,4CAAmB,CAC/C,IAAI,CAAC,MAAM,EACX,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAClC,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAC9B,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,IAAI,GACR,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO;aACvC,SAAS,CAAC;YACT;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,sBAAsB;gBAC1C,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAC/C,sBAAsB,EACtB,EAAE,CACH;aACF;YACD;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB;gBACtC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAChD,cAAc,EACd,EAAE,CACH;aACF;SACF,CAAC;aACD,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAE3B,MAAM,SAAS,GAAG,MAAM,CACtB,IAAI,CAAC,eAAe,CAAC,oBAAoB,CACvC,sBAAsB,EACtB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CACnB,CAAC,CAAC,CAAC,CACL,CAAC,QAAQ,EAAE,CAAC;QAEb,MAAM,UAAU,GAAG,MAAM,CACvB,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CACxC,cAAc,EACd,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CACnB,CAAC,CAAC,CAAC,CACL,CAAC,QAAQ,EAAE,CAAC;QAEb,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,WAAW,EAAE;gBAC9C,KAAK,EAAE;oBACL,GAAG,EAAE,qBAAqB;oBAC1B,SAAS;oBACT,UAAU;iBACX;aACF,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IACxE,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;IACvE,CAAC;IAED,kBAAkB,CAAC,QAAgB,EAAE,SAAiB;QACpD,OAAO,CACL,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACpD,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC;IACD,yDAAyD;IACzD,wDAAwD;IACxD,WAAW;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,QAAe,EACf,SAAgB,EAChB,IAAc,EACd,WAAmB;QAEnB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;YACjE,OAAO,EAAE,CAAC;SACX;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,QAAe,EACf,SAAgB,EAChB,OAAiB,EACjB,IAAc,EACd,WAAmB,EACnB,UAAqB;QAErB,IAAI,IAAI,IAAI,oBAAQ,CAAC,GAAG,EAAE;YACxB,6BAA6B;YAC7B,OAAO,IAAI,CAAC;SACb;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAC7C,QAAQ,CAAC,OAAO,EAChB,SAAS,CAAC,OAAO,CAClB,CAAC;QACF,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,IAAI,CAAC;SACb;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACrC,
|
|
1
|
+
{"version":3,"file":"fx-protocol-rusd.js","sourceRoot":"","sources":["../../../src/dex/fx-protocol-rusd/fx-protocol-rusd.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,+CAAoD;AACpD,2EAA6D;AAC7D,uCAAoD;AAIpD,wDAAoD;AACpD,qCAA4C;AAC5C,4CAA6D;AAC7D,kFAAyD;AACzD,wFAA+D;AAC/D,8FAAwE;AAExE,gDAAmE;AACnE,qEAA+D;AAC/D,6DAAiD;AAEjD,MAAa,cACX,SAAQ,gCAAc;IAoBtB,YACW,OAAgB,EAChB,MAAc,EACd,SAAqB;QAE9B,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAJhB,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAY;QAlBvB,iCAA4B,GAAG,IAAI,CAAC;QAEpC,mBAAc,GAAG,KAAK,CAAC;QAEvB,6BAAwB,GAAG,KAAK,CAAC;QAiBxC,MAAM,MAAM,GAAG,yBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,IAAI,eAAS,CAAC,oBAA2B,CAAC,CAAC;QAC7D,IAAI,CAAC,eAAe,GAAG,IAAI,eAAS,CAAC,uBAA8B,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAS,CAAC,0BAAoC,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG;YACZ,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE;YAC7C,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE;YAC/C,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,CAAC,WAAW,EAAE;YACnE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE;SAC5D,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,kBAAkB,GAAG,IAAI,4CAAmB,CAC/C,IAAI,CAAC,MAAM,EACX,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAClC,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAC9B,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,IAAI,GACR,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO;aACvC,SAAS,CAAC;YACT;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,sBAAsB;gBAC1C,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAC/C,sBAAsB,EACtB,EAAE,CACH;aACF;YACD;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB;gBACtC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAChD,cAAc,EACd,EAAE,CACH;aACF;SACF,CAAC;aACD,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAE3B,MAAM,SAAS,GAAG,MAAM,CACtB,IAAI,CAAC,eAAe,CAAC,oBAAoB,CACvC,sBAAsB,EACtB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CACnB,CAAC,CAAC,CAAC,CACL,CAAC,QAAQ,EAAE,CAAC;QAEb,MAAM,UAAU,GAAG,MAAM,CACvB,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CACxC,cAAc,EACd,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CACnB,CAAC,CAAC,CAAC,CACL,CAAC,QAAQ,EAAE,CAAC;QAEb,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,WAAW,EAAE;gBAC9C,KAAK,EAAE;oBACL,GAAG,EAAE,qBAAqB;oBAC1B,SAAS;oBACT,UAAU;iBACX;aACF,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IACxE,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;IACvE,CAAC;IAED,kBAAkB,CAAC,QAAgB,EAAE,SAAiB;QACpD,OAAO,CACL,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACpD,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC;IACD,yDAAyD;IACzD,wDAAwD;IACxD,WAAW;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,QAAe,EACf,SAAgB,EAChB,IAAc,EACd,WAAmB;QAEnB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;YACjE,OAAO,EAAE,CAAC;SACX;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,QAAe,EACf,SAAgB,EAChB,OAAiB,EACjB,IAAc,EACd,WAAmB,EACnB,UAAqB;QAErB,IAAI,IAAI,IAAI,oBAAQ,CAAC,GAAG,EAAE;YACxB,6BAA6B;YAC7B,OAAO,IAAI,CAAC;SACb;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAC7C,QAAQ,CAAC,OAAO,EAChB,SAAS,CAAC,OAAO,CAClB,CAAC;QACF,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,IAAI,CAAC;SACb;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,0BAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CACtB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CACjD,CACF,CAAC;QAEF,OAAO;YACL;gBACE,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,EAAE;gBACR,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBACxC,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,OAAO,EAAE,OAAO;aACjB;SACF,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,kBAAkB,CAChB,UAAsC;QAEtC,OAAO,iBAAiB,CAAC,cAAc,CAAC;IAC1C,CAAC;IAED,iDAAiD;IACjD,yCAAyC;IACzC,kCAAkC;IAClC,mDAAmD;IACnD,eAAe,CACb,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAoB,EACpB,IAAc;QAEd,MAAM,OAAO,GAAG,IAAI,CAAC;QAErB,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACvC,OAAO;YACP,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CACf,QAAiB,EACjB,SAAkB,EAClB,SAAyB,EACzB,UAA0B,EAC1B,SAAkB,EAClB,IAAoB,EACpB,IAAc;QAEd,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE/C,IAAI,YAAY,IAAI,YAAY,EAAE;YAChC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,MAAM,EAAE;gBAC9D,IAAI,CAAC,MAAM,CAAC,YAAY;gBACxB,SAAS;gBACT,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU;gBACzD,GAAG;aACJ,CAAC,CAAC;YACH,OAAO;gBACL,cAAc,EAAE,KAAK;gBACrB,mBAAmB,EAAE,KAAK;gBAC1B,YAAY;gBACZ,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBACvC,eAAe,EAAE,IAAA,mCAA2B,EAC1C,IAAI,CAAC,UAAU,EACf,MAAM,EACN,YAAY,CACb;aACF,CAAC;SACH;QACD,IAAI,WAAW,IAAI,aAAa,EAAE;YAChC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,QAAQ,EAAE;gBAChE,IAAI,CAAC,MAAM,CAAC,YAAY;gBACxB,SAAS;gBACT,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU;gBACzD,GAAG;aACJ,CAAC,CAAC;YACH,OAAO;gBACL,cAAc,EAAE,KAAK;gBACrB,mBAAmB,EAAE,KAAK;gBAC1B,YAAY;gBACZ,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBACvC,eAAe,EAAE,IAAA,mCAA2B,EAC1C,IAAI,CAAC,UAAU,EACf,QAAQ,EACR,YAAY,CACb;aACF,CAAC;SACH;QACD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,oDAAoD;IACpD,yCAAyC;IACzC,KAAK,CAAC,mBAAmB,CACvB,YAAqB,EACrB,KAAa;QAEb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,OAAO,EAAE,CAAC;QAE3E,OAAO;YACL;gBACE,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBAChC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;oBAC1C,CAAC,CAAC;wBACE;4BACE,QAAQ,EAAE,EAAE;4BACZ,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;yBACjC;qBACF;oBACH,CAAC,CAAC;wBACE;4BACE,QAAQ,EAAE,EAAE;4BACZ,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;yBAClC;qBACF;gBACL,YAAY,EAAE,UAAU,EAAE,4DAA4D;aACvF;SACF,CAAC;IACJ,CAAC;;AA5RH,wCA6RC;AAjRe,iCAAkB,GAC9B,IAAA,6BAAqB,EAAC,yBAAgB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -6,7 +6,6 @@ import { Address, Log, Logger } from '../../types';
|
|
|
6
6
|
import { AsyncOrSync, DeepReadonly } from 'ts-essentials';
|
|
7
7
|
import { ConcentratorArusdState } from './types';
|
|
8
8
|
import { BI_POWS } from '../../bigint-constants';
|
|
9
|
-
import { bigIntify } from '../../utils';
|
|
10
9
|
import { getOnChainState } from './utils';
|
|
11
10
|
|
|
12
11
|
export class ConcentratorArusdEvent extends StatefulEventSubscriber<ConcentratorArusdState> {
|
|
@@ -61,12 +60,12 @@ export class ConcentratorArusdEvent extends StatefulEventSubscriber<Concentrator
|
|
|
61
60
|
return state;
|
|
62
61
|
}
|
|
63
62
|
|
|
64
|
-
getPrice(
|
|
63
|
+
async getPrice(
|
|
65
64
|
blockNumber: number,
|
|
66
65
|
ethAmount: bigint,
|
|
67
66
|
is_deposit: boolean,
|
|
68
|
-
): bigint {
|
|
69
|
-
const state = this.
|
|
67
|
+
): Promise<bigint> {
|
|
68
|
+
const state = await this.getOrGenerateState(blockNumber);
|
|
70
69
|
if (!state) throw new Error('Cannot compute price');
|
|
71
70
|
const { totalSupply, totalAssets } = state;
|
|
72
71
|
const nav = (BigInt(totalAssets) * BI_POWS[18]) / BigInt(totalSupply);
|
|
@@ -75,4 +74,27 @@ export class ConcentratorArusdEvent extends StatefulEventSubscriber<Concentrator
|
|
|
75
74
|
}
|
|
76
75
|
return BigInt((nav * ethAmount) / BI_POWS[18]);
|
|
77
76
|
}
|
|
77
|
+
|
|
78
|
+
async getOrGenerateState(
|
|
79
|
+
blockNumber: number,
|
|
80
|
+
): Promise<DeepReadonly<ConcentratorArusdState> | null> {
|
|
81
|
+
const state = this.getState(blockNumber);
|
|
82
|
+
if (state) {
|
|
83
|
+
return state;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
this.logger.debug(
|
|
87
|
+
`No state found for ${this.addressesSubscribed[0]}, generating new one`,
|
|
88
|
+
);
|
|
89
|
+
const newState = await this.generateState(blockNumber);
|
|
90
|
+
|
|
91
|
+
if (!newState) {
|
|
92
|
+
this.logger.debug(
|
|
93
|
+
`Could not regenerate state for ${this.addressesSubscribed[0]}`,
|
|
94
|
+
);
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
this.setState(newState, blockNumber);
|
|
98
|
+
return newState;
|
|
99
|
+
}
|
|
78
100
|
}
|
|
@@ -138,11 +138,17 @@ export class ConcentratorArusd
|
|
|
138
138
|
const is_deposit = !!this.is_rUSD(srcToken.address);
|
|
139
139
|
const pool = this.concentratorArusdEvent;
|
|
140
140
|
const unitIn = BI_POWS[18];
|
|
141
|
-
const unitOut = pool.getPrice(blockNumber, unitIn, is_deposit);
|
|
142
|
-
const amountsOut =
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
141
|
+
const unitOut = await pool.getPrice(blockNumber, unitIn, is_deposit);
|
|
142
|
+
const amountsOut = await Promise.all(
|
|
143
|
+
amounts.map(async amountIn => {
|
|
144
|
+
const _newPrice = await pool.getPrice(
|
|
145
|
+
blockNumber,
|
|
146
|
+
amountIn,
|
|
147
|
+
is_deposit,
|
|
148
|
+
);
|
|
149
|
+
return _newPrice;
|
|
150
|
+
}),
|
|
151
|
+
);
|
|
146
152
|
return [
|
|
147
153
|
{
|
|
148
154
|
unit: unitOut,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import dotenv from 'dotenv';
|
|
2
2
|
dotenv.config();
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { FxProtocolRusdEvent } from './fx-protocol-rusd-event';
|
|
5
5
|
import { FxProtocolConfig } from './config';
|
|
6
6
|
import { Network } from '../../constants';
|
|
7
7
|
import { DummyDexHelper } from '../../dex-helper/index';
|
|
@@ -53,7 +53,7 @@ const dexKey = 'FxProtocolRusd';
|
|
|
53
53
|
const network = Network.MAINNET;
|
|
54
54
|
|
|
55
55
|
async function fetchPoolState(
|
|
56
|
-
fxProtocolPool:
|
|
56
|
+
fxProtocolPool: FxProtocolRusdEvent,
|
|
57
57
|
blockNumber: number,
|
|
58
58
|
): Promise<FxProtocolPoolState> {
|
|
59
59
|
return fxProtocolPool.generateState(blockNumber);
|
|
@@ -73,7 +73,7 @@ describe('FxProtocolRusd Event', function () {
|
|
|
73
73
|
const logger = dexHelper.getLogger(dexKey);
|
|
74
74
|
const config = FxProtocolConfig[dexKey][network];
|
|
75
75
|
|
|
76
|
-
const fxProtocolPool = new
|
|
76
|
+
const fxProtocolPool = new FxProtocolRusdEvent(
|
|
77
77
|
dexKey,
|
|
78
78
|
dexHelper,
|
|
79
79
|
config.rUSDWeETHMarketAddress,
|
|
@@ -11,7 +11,7 @@ import { getOnChainState } from './utils';
|
|
|
11
11
|
const ANSWER_UPDATED_TOPICHASH = `0x0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f`;
|
|
12
12
|
const UPDATE_REDEEM_FEE_TOPICHASH = `0xb3d49e95905d108ea668ffe62a85ee16bdc4ff9f122a7137964327ea8e0585ff`;
|
|
13
13
|
|
|
14
|
-
export class
|
|
14
|
+
export class FxProtocolRusdEvent extends StatefulEventSubscriber<FxProtocolPoolState> {
|
|
15
15
|
constructor(
|
|
16
16
|
parentName: string,
|
|
17
17
|
protected dexHelper: IDexHelper,
|
|
@@ -29,17 +29,17 @@ export class fxProtocolRusdEvent extends StatefulEventSubscriber<FxProtocolPoolS
|
|
|
29
29
|
state: DeepReadonly<FxProtocolPoolState>,
|
|
30
30
|
log: Readonly<Log>,
|
|
31
31
|
): AsyncOrSync<DeepReadonly<FxProtocolPoolState> | null> {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
if (log.topics[0] === UPDATE_REDEEM_FEE_TOPICHASH) {
|
|
33
|
+
const [defaultFeeRatio] = defaultAbiCoder.decode(
|
|
34
|
+
['uint256', 'int256'],
|
|
35
|
+
log.data,
|
|
36
|
+
);
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
return {
|
|
39
|
+
...state,
|
|
40
|
+
redeemFee: BigInt(defaultFeeRatio).toString(),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
43
|
|
|
44
44
|
if (log.topics[0] === ANSWER_UPDATED_TOPICHASH) {
|
|
45
45
|
return {
|
|
@@ -47,6 +47,7 @@ export class fxProtocolRusdEvent extends StatefulEventSubscriber<FxProtocolPoolS
|
|
|
47
47
|
weETHPrice: BigInt(log.topics[1]).toString(),
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
|
+
|
|
50
51
|
return null;
|
|
51
52
|
}
|
|
52
53
|
|
|
@@ -64,8 +65,12 @@ export class fxProtocolRusdEvent extends StatefulEventSubscriber<FxProtocolPoolS
|
|
|
64
65
|
return state;
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
getPrice(
|
|
68
|
-
|
|
68
|
+
async getPrice(
|
|
69
|
+
blockNumber: number,
|
|
70
|
+
amount: bigint,
|
|
71
|
+
isRedeem: boolean,
|
|
72
|
+
): Promise<bigint> {
|
|
73
|
+
const state = await this.getOrGenerateState(blockNumber);
|
|
69
74
|
if (!state) throw new Error('Cannot compute price');
|
|
70
75
|
|
|
71
76
|
const { nav, redeemFee, weETHPrice } = state;
|
|
@@ -81,4 +86,27 @@ export class fxProtocolRusdEvent extends StatefulEventSubscriber<FxProtocolPoolS
|
|
|
81
86
|
return BigInt((baseTokenPrice * amount) / BigInt(nav));
|
|
82
87
|
}
|
|
83
88
|
}
|
|
89
|
+
|
|
90
|
+
async getOrGenerateState(
|
|
91
|
+
blockNumber: number,
|
|
92
|
+
): Promise<DeepReadonly<FxProtocolPoolState> | null> {
|
|
93
|
+
const state = this.getState(blockNumber);
|
|
94
|
+
if (state) {
|
|
95
|
+
return state;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
this.logger.debug(
|
|
99
|
+
`No state found for ${this.addressesSubscribed[0]}, generating new one`,
|
|
100
|
+
);
|
|
101
|
+
const newState = await this.generateState(blockNumber);
|
|
102
|
+
|
|
103
|
+
if (!newState) {
|
|
104
|
+
this.logger.debug(
|
|
105
|
+
`Could not regenerate state for ${this.addressesSubscribed[0]}`,
|
|
106
|
+
);
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
this.setState(newState, blockNumber);
|
|
110
|
+
return newState;
|
|
111
|
+
}
|
|
84
112
|
}
|
|
@@ -23,7 +23,7 @@ import FxMarket_ABI from '../../abi/fx-protocol/FxMarket.json';
|
|
|
23
23
|
import EthWeETHOralce_ABI from '../../abi/fx-protocol/weETHOralce.json';
|
|
24
24
|
|
|
25
25
|
import { extractReturnAmountPosition } from '../../executor/utils';
|
|
26
|
-
import {
|
|
26
|
+
import { FxProtocolRusdEvent } from './fx-protocol-rusd-event';
|
|
27
27
|
import { BI_POWS } from '../../bigint-constants';
|
|
28
28
|
|
|
29
29
|
export class FxProtocolRusd
|
|
@@ -44,7 +44,7 @@ export class FxProtocolRusd
|
|
|
44
44
|
fxUSDIface: Interface;
|
|
45
45
|
rUSDMarketIface: Interface;
|
|
46
46
|
weETHOracleIface: Interface;
|
|
47
|
-
fxProtocolRusdPool:
|
|
47
|
+
fxProtocolRusdPool: FxProtocolRusdEvent;
|
|
48
48
|
logger: Logger;
|
|
49
49
|
|
|
50
50
|
constructor(
|
|
@@ -64,7 +64,7 @@ export class FxProtocolRusd
|
|
|
64
64
|
weETHOracleAddress: config.weETHOracleAddress.toLowerCase(),
|
|
65
65
|
};
|
|
66
66
|
this.logger = dexHelper.getLogger(dexKey);
|
|
67
|
-
this.fxProtocolRusdPool = new
|
|
67
|
+
this.fxProtocolRusdPool = new FxProtocolRusdEvent(
|
|
68
68
|
this.dexKey,
|
|
69
69
|
dexHelper,
|
|
70
70
|
this.config.rUSDWeETHMarketAddress,
|
|
@@ -178,13 +178,13 @@ export class FxProtocolRusd
|
|
|
178
178
|
return null;
|
|
179
179
|
}
|
|
180
180
|
const pool = this.fxProtocolRusdPool;
|
|
181
|
-
if (!pool.getState(blockNumber)) return null;
|
|
182
|
-
|
|
183
181
|
const is_redeem = this.is_weETH(destToken.address);
|
|
184
182
|
const unitIn = BI_POWS[18];
|
|
185
|
-
const unitOut = pool.getPrice(blockNumber, unitIn, is_redeem);
|
|
186
|
-
const amountsOut =
|
|
187
|
-
|
|
183
|
+
const unitOut = await pool.getPrice(blockNumber, unitIn, is_redeem);
|
|
184
|
+
const amountsOut = await Promise.all(
|
|
185
|
+
amounts.map(_amountIn =>
|
|
186
|
+
pool.getPrice(blockNumber, _amountIn, is_redeem),
|
|
187
|
+
),
|
|
188
188
|
);
|
|
189
189
|
|
|
190
190
|
return [
|