Skip to content

Commit cb3a797

Browse files
committed
Fix fantom require cycle
Resolves the warning Require cycle: src/plugins/stake-plugins/uniswapV2/policyInfo/fantom.ts -> src/plugins/stake-plugins/uniswapV2/policyInfo/fantom.ts Require cycles are allowed, but can result in uninitialized values. Consider refactoring to remove the need for a cycle.
1 parent 5bec79b commit cb3a797

5 files changed

Lines changed: 300 additions & 300 deletions

File tree

eslint.config.mjs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -461,8 +461,7 @@ export default [
461461
'src/plugins/stake-plugins/thorchainSavers/tcSaversPlugin.tsx',
462462
'src/plugins/stake-plugins/thorchainSavers/tcSaversPluginSegwit.tsx',
463463
'src/plugins/stake-plugins/uniswapV2/Ecosystem.ts',
464-
'src/plugins/stake-plugins/uniswapV2/policies/cemeteryPolicy.ts',
465-
'src/plugins/stake-plugins/uniswapV2/policies/masonryPolicy.ts',
464+
466465
'src/plugins/stake-plugins/uniswapV2/policies/VelodromeV2StakePolicy.ts',
467466
'src/plugins/stake-plugins/util/accumulator.ts',
468467
'src/plugins/stake-plugins/util/biggystringplus.ts',

src/plugins/stake-plugins/uniswapV2/policies/cemeteryPolicy.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { round } from '../../util/biggystringplus'
2121
import { makeBuilder } from '../../util/builder'
2222
import { fromHex } from '../../util/hex'
2323
import { pluginInfo } from '../pluginInfo'
24-
import { fantomEcosystem as eco } from '../policyInfo/fantom'
24+
import { fantomEcosystem as eco } from '../policyInfo/fantomEcosystem'
2525
import type { StakePolicyInfo } from '../stakePolicy'
2626
import type { StakePluginPolicy } from '../types'
2727

@@ -60,7 +60,7 @@ export const makeCemeteryPolicy = (
6060
const SLIPPAGE_FACTOR = 1 - SLIPPAGE // A multiplier to get a minimum amount
6161
const DEADLINE_OFFSET = 60 * 60 * 12 // 12 hours
6262

63-
const serializeAssetId = (assetId: StakeAssetInfo) =>
63+
const serializeAssetId = (assetId: StakeAssetInfo): string =>
6464
`${assetId.pluginId}:${assetId.currencyCode}`
6565

6666
async function lpTokenToAssetPairAmounts(
@@ -335,7 +335,8 @@ export const makeCemeteryPolicy = (
335335
signer.address,
336336
spenderAddress
337337
)
338-
if (allowanceResult.gte(allocation.nativeAmount)) return
338+
if (allowanceResult.gte(allocation.nativeAmount) === true)
339+
return
339340

340341
const result = await tokenAContract
341342
.connect(signer)
@@ -487,7 +488,7 @@ export const makeCemeteryPolicy = (
487488
'Transfer(address,address,uint256)'
488489
)
489490
const transferTopics = receipt.logs.filter(
490-
// @ts-expect-error
491+
// @ts-expect-error ethers receipt log types do not expose topics
491492
log => log.topics[0] === transferTopicHash
492493
)
493494
// The last token transfer log is the LP-token transfer
@@ -517,7 +518,7 @@ export const makeCemeteryPolicy = (
517518
signer.address,
518519
spenderAddress
519520
)
520-
if (allowanceResult.gte(liquidity)) return
521+
if (allowanceResult.gte(liquidity) === true) return
521522

522523
const result = await lpTokenContract
523524
.connect(signer)
@@ -659,7 +660,7 @@ export const makeCemeteryPolicy = (
659660
signer.address,
660661
spenderAddress
661662
)
662-
if (allowanceResult.gte(expectedLiquidityAmount)) return
663+
if (allowanceResult.gte(expectedLiquidityAmount) === true) return
663664

664665
const result = await lpTokenContract
665666
.connect(signer)

src/plugins/stake-plugins/uniswapV2/policies/masonryPolicy.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { makeBigAccumulator } from '../../util/accumulator'
1717
import { makeBuilder } from '../../util/builder'
1818
import { fromHex } from '../../util/hex'
1919
import { pluginInfo } from '../pluginInfo'
20-
import { fantomEcosystem as eco } from '../policyInfo/fantom'
20+
import { fantomEcosystem as eco } from '../policyInfo/fantomEcosystem'
2121
import type { StakePluginPolicy } from '../types'
2222

2323
const HOUR = 1000 * 60 * 60
@@ -228,7 +228,7 @@ export const makeMasonryPolicy = (
228228
return true
229229
}
230230
})()
231-
if (!checkTxResponse)
231+
if (checkTxResponse === false)
232232
throw new Error(`Cannot ${action} for token '${request.currencyCode}'`)
233233

234234
// TODO: Change this algorithm to check the balance of every token in the stakeAllocations array when multiple assets are supported
@@ -466,13 +466,11 @@ export const makeMasonryPolicy = (
466466
// Get the amount of staked tokens:
467467
eco.multipass(p => poolContract.connect(p).balanceOf(signerAddress)),
468468
// Get the stake allocation lock time:
469-
// @ts-expect-error
470-
getUserUnstakeTime(signerAddress),
469+
getUserUnstakeTime(await signerAddress),
471470
// Get the earned token balance:
472471
eco.multipass(p => poolContract.connect(p).earned(signerAddress)),
473472
// Get the earned allocations lock time:
474-
// @ts-expect-error
475-
getUserClaimRewardTime(signerAddress),
473+
getUserClaimRewardTime(await signerAddress),
476474
// Get the token balance:
477475
eco.multipass(p => tokenContract.connect(p).balanceOf(signerAddress))
478476
])

src/plugins/stake-plugins/uniswapV2/policyInfo/fantom.ts

Lines changed: 1 addition & 286 deletions
Original file line numberDiff line numberDiff line change
@@ -1,293 +1,8 @@
1-
import { ENV } from '../../../../env'
2-
import ANYSWAP_V5_ERC20_ABI from '../../../abi/ANYSWAP_V5_ERC20_ABI.json'
3-
import MASONRY_ABI from '../../../abi/MASONRY_ABI.json'
4-
import TOMB_TREASURY_ABI from '../../../abi/TOMB_TREASURY_ABI.json'
5-
import TSHARE_REWARD_POOL_ABI from '../../../abi/TSHARE_REWARD_POOL_ABI.json'
6-
import UNISWAP_V2_PAIR from '../../../abi/UNISWAP_V2_PAIR.json'
7-
import UNISWAP_V2_ROUTER_02 from '../../../abi/UNISWAP_V2_ROUTER_02.json'
8-
import WRAPPED_FTM_ABI from '../../../abi/WRAPPED_FTM_ABI.json'
91
import type { StakeProviderInfo } from '../../types'
10-
import { makeEcosystem } from '../Ecosystem'
112
import { makeCemeteryPolicy } from '../policies/cemeteryPolicy'
123
import { makeMasonryPolicy } from '../policies/masonryPolicy'
134
import type { StakePolicyInfo } from '../stakePolicy'
14-
15-
// -----------------------------------------------------------------------------
16-
// Contract Info Map
17-
// -----------------------------------------------------------------------------
18-
19-
export const fantomContractInfoMap = {
20-
CEMETERY_V2_REWARD_POOL: {
21-
abi: TSHARE_REWARD_POOL_ABI,
22-
address: '0x1F832dfBA15346D25438Cf7Ac683b013Ed03E32f'
23-
},
24-
SPOOKY_SWAP_ROUTER: {
25-
abi: UNISWAP_V2_ROUTER_02,
26-
address: '0xF491e7B69E4244ad4002BC14e878a34207E38c29'
27-
},
28-
TOMB_MASONRY: {
29-
abi: MASONRY_ABI,
30-
address: '0x8764de60236c5843d9faeb1b638fbce962773b67'
31-
},
32-
TOMB_SWAP_ROUTER: {
33-
abi: UNISWAP_V2_ROUTER_02,
34-
address: '0x6d0176c5ea1e44b08d3dd001b0784ce42f47a3a7'
35-
},
36-
TOMB_TREASURY: {
37-
abi: TOMB_TREASURY_ABI,
38-
address: '0xF50c6dAAAEC271B56FCddFBC38F0b56cA45E6f0d'
39-
},
40-
TSHARE_REWARD_POOL: {
41-
abi: TSHARE_REWARD_POOL_ABI,
42-
address: '0xcc0a87F7e7c693042a9Cc703661F5060c80ACb43'
43-
},
44-
45-
// Tokens
46-
AVAX: {
47-
abi: ANYSWAP_V5_ERC20_ABI,
48-
address: '0x511d35c52a3c244e7b8bd92c0c297755fbd89212'
49-
},
50-
BNB: {
51-
abi: ANYSWAP_V5_ERC20_ABI,
52-
address: '0xd67de0e0a0fd7b15dc8348bb9be742f3c5850454'
53-
},
54-
BTC: {
55-
abi: ANYSWAP_V5_ERC20_ABI,
56-
address: '0x321162cd933e2be498cd2267a90534a804051b11'
57-
},
58-
CRV: {
59-
abi: ANYSWAP_V5_ERC20_ABI,
60-
address: '0x1e4f97b9f9f913c46f1632781732927b9019c68b'
61-
},
62-
DAI: {
63-
abi: ANYSWAP_V5_ERC20_ABI,
64-
address: '0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e'
65-
},
66-
ETH: {
67-
abi: ANYSWAP_V5_ERC20_ABI,
68-
address: '0x74b23882a30290451a17c44f4f05243b6b58c76d'
69-
},
70-
FTM: {
71-
abi: ANYSWAP_V5_ERC20_ABI,
72-
address: '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83'
73-
},
74-
FUSDT: {
75-
abi: ANYSWAP_V5_ERC20_ABI,
76-
address: '0x049d68029688eabf473097a2fc38ef61633a3c7a'
77-
},
78-
L3USD: {
79-
abi: ANYSWAP_V5_ERC20_ABI,
80-
address: '0x5f0456f728e2d59028b4f5b8ad8c604100724c6a'
81-
},
82-
LIF3: {
83-
abi: ANYSWAP_V5_ERC20_ABI,
84-
address: '0xbf60e7414ef09026733c1e7de72e7393888c64da'
85-
},
86-
LINK: {
87-
abi: ANYSWAP_V5_ERC20_ABI,
88-
address: '0xb3654dc3d10ea7645f8319668e8f54d2574fbdc8'
89-
},
90-
LSHARE: {
91-
abi: ANYSWAP_V5_ERC20_ABI,
92-
address: '0xcbe0ca46399af916784cadf5bcc3aed2052d6c45'
93-
},
94-
MAI: {
95-
abi: ANYSWAP_V5_ERC20_ABI,
96-
address: '0xfB98B335551a418cD0737375a2ea0ded62Ea213b'
97-
},
98-
MIM: {
99-
abi: ANYSWAP_V5_ERC20_ABI,
100-
address: '0x82f0b8b456c1a451378467398982d4834b6829c1'
101-
},
102-
TBOND: {
103-
abi: ANYSWAP_V5_ERC20_ABI,
104-
address: '0x24248cd1747348bdc971a5395f4b3cd7fee94ea0'
105-
},
106-
TOMB: {
107-
abi: ANYSWAP_V5_ERC20_ABI,
108-
address: '0x6c021Ae822BEa943b2E66552bDe1D2696a53fbB7'
109-
},
110-
TSHARE: {
111-
abi: ANYSWAP_V5_ERC20_ABI,
112-
address: '0x4cdF39285D7Ca8eB3f090fDA0C069ba5F4145B37'
113-
},
114-
USDC: {
115-
abi: ANYSWAP_V5_ERC20_ABI,
116-
address: '0x04068da6c83afcfa0e13ba15a6696662335d5b75'
117-
},
118-
WFTM: {
119-
abi: WRAPPED_FTM_ABI,
120-
address: '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83'
121-
},
122-
ZOO: {
123-
abi: ANYSWAP_V5_ERC20_ABI,
124-
address: '0x09e145a1d53c0045f41aeef25d8ff982ae74dd56'
125-
},
126-
127-
// Liquidity Pair Tokens
128-
// TombSwap LPs
129-
TOMBSWAP_BTC_ETH_LP: {
130-
abi: UNISWAP_V2_PAIR,
131-
address: '0x3f468804d133894a73b54cfc07D5886E5195255f'
132-
},
133-
TOMBSWAP_BTC_TSHARE_LP: {
134-
abi: UNISWAP_V2_PAIR,
135-
address: '0xa1f4a9ee0d06115376dFf357D34C3F5eb4107398'
136-
},
137-
TOMBSWAP_CRV_FTM_LP: {
138-
abi: UNISWAP_V2_PAIR,
139-
address: '0xFF17e19feEaF403e8eD9d79a5b78B8F4ded38df3'
140-
},
141-
TOMBSWAP_FTM_AVAX_LP: {
142-
abi: UNISWAP_V2_PAIR,
143-
address: '0xC753D5AA76F90b7057Cc2B6766fE67FAf68BF6e3'
144-
},
145-
TOMBSWAP_FTM_BNB_LP: {
146-
abi: UNISWAP_V2_PAIR,
147-
address: '0xB5F1b98693c4894880dD90c1D3E7A517B9c16aE3'
148-
},
149-
TOMBSWAP_FTM_BTC_LP: {
150-
abi: UNISWAP_V2_PAIR,
151-
address: '0x5063C79e377332FB98CB6C8DB414d752DC7C478E'
152-
},
153-
TOMBSWAP_FTM_DAI_LP: {
154-
abi: UNISWAP_V2_PAIR,
155-
address: '0xB89486a030075B42d589008Da7877dd783Af968F'
156-
},
157-
TOMBSWAP_FTM_ETH_LP: {
158-
abi: UNISWAP_V2_PAIR,
159-
address: '0x8E49C8fBF6128356019D8A7d34E9b92f03bc2803'
160-
},
161-
TOMBSWAP_FTM_LIF3_LP: {
162-
abi: UNISWAP_V2_PAIR,
163-
address: '0xd62CAcDb69000feD31bb348e9c0e073BB8AD7cAF'
164-
},
165-
TOMBSWAP_FTM_LINK_LP: {
166-
abi: UNISWAP_V2_PAIR,
167-
address: '0x51e1b9B1ec411A2258f674c26A0a0Ac78CD81478'
168-
},
169-
TOMBSWAP_FTM_LSHARE_LP: {
170-
abi: UNISWAP_V2_PAIR,
171-
address: '0x06623FBa85E66CB93e7802cDFea8E5F1d70c38A9'
172-
},
173-
TOMBSWAP_FTM_MIM_LP: {
174-
abi: UNISWAP_V2_PAIR,
175-
address: '0xa7c86Fc1B87830b8aBFA623571405E03560a8326'
176-
},
177-
TOMBSWAP_FTM_TOMB_LP: {
178-
abi: UNISWAP_V2_PAIR,
179-
address: '0xfca12A13ac324C09e9F43B5e5cfC9262f3Ab3223'
180-
},
181-
TOMBSWAP_FUSDT_FTM_LP: {
182-
abi: UNISWAP_V2_PAIR,
183-
address: '0x681d32C8b374c2Dd83064775dBB48EA97db2c506'
184-
},
185-
TOMBSWAP_L3USD_DAI_LP: {
186-
abi: UNISWAP_V2_PAIR,
187-
address: '0x2701a1d05234ec26d2218935f3b02ea0f7df28aa'
188-
},
189-
TOMBSWAP_L3USD_FUSDT_LP: {
190-
abi: UNISWAP_V2_PAIR,
191-
address: '0x53eb7104180297ee370badd43134d2c48d424434'
192-
},
193-
TOMBSWAP_L3USD_USDC_LP: {
194-
abi: UNISWAP_V2_PAIR,
195-
address: '0x0326d09b5c0c5b041e15f6b4e37749b4249a7579'
196-
},
197-
TOMBSWAP_LIF3_LSHARE_LP: {
198-
abi: UNISWAP_V2_PAIR,
199-
address: '0x82045cbaF366a30f8888628Fb94628806c700dA2'
200-
},
201-
TOMBSWAP_TBOND_TOMB_LP: {
202-
abi: UNISWAP_V2_PAIR,
203-
address: '0x2B2703716D3234b787C42E89950653688C012dEa'
204-
},
205-
TOMBSWAP_TOMB_LIF3_LP: {
206-
abi: UNISWAP_V2_PAIR,
207-
address: '0xcC3d9921302dBBc72171EED1b10FD45F9e83AD8c'
208-
},
209-
TOMBSWAP_TOMB_LSHARE_LP: {
210-
abi: UNISWAP_V2_PAIR,
211-
address: '0x355E1045dAaF4877927322803ca0ccC7df3721d5'
212-
},
213-
TOMBSWAP_TOMB_USDC_LP: {
214-
abi: UNISWAP_V2_PAIR,
215-
address: '0xAA9BE68D990d5e56870B2E0544f96ffb0B1dA8F7'
216-
},
217-
TOMBSWAP_TSHARE_ETH_LP: {
218-
abi: UNISWAP_V2_PAIR,
219-
address: '0xd702D7495b010936EBc53a1efeE42D97996Ca5Ee'
220-
},
221-
TOMBSWAP_TSHARE_LSHARE_LP: {
222-
abi: UNISWAP_V2_PAIR,
223-
address: '0x9fc1CFb778864D319EBe35aFd475f869ED8E34A9'
224-
},
225-
TOMBSWAP_USDC_FTM_LP: {
226-
abi: UNISWAP_V2_PAIR,
227-
address: '0x8C853ce1561A2c2cD2E857670e3cCd04BA4cB27b'
228-
},
229-
TOMBSWAP_USDC_FUSDT_LP: {
230-
abi: UNISWAP_V2_PAIR,
231-
address: '0x3486011E2E18ccf4558c4C84d5cbBcCFdbF16c03'
232-
},
233-
TOMBSWAP_USDC_LIF3_LP: {
234-
abi: UNISWAP_V2_PAIR,
235-
address: '0x502EeeB06c2E01fD151cFc6624f0b98420bd1291'
236-
},
237-
TOMBSWAP_USDC_LSHARE_LP: {
238-
abi: UNISWAP_V2_PAIR,
239-
address: '0x0621d9C22fad25bF5B88735dEfB419fa60F118f7'
240-
},
241-
TOMBSWAP_USDC_MIM_LP: {
242-
abi: UNISWAP_V2_PAIR,
243-
address: '0xd840aF68b35469eC3478c9b0CBCDdc6dc80Dd98C'
244-
},
245-
TOMBSWAP_USDC_TSHARE_LP: {
246-
abi: UNISWAP_V2_PAIR,
247-
address: '0xDEc1259188E6c5273AcD1e84d5B4b58897CA013e'
248-
},
249-
TOMBSWAP_ZOO_TOMB_LP: {
250-
abi: UNISWAP_V2_PAIR,
251-
address: '0x67019E7B4A233cc2E875e5c713042333d879aaCE'
252-
},
253-
254-
// SpookySwap LPs
255-
TOMB_WFTM_LP: {
256-
abi: UNISWAP_V2_PAIR,
257-
address: '0x2A651563C9d3Af67aE0388a5c8F89b867038089e'
258-
},
259-
TSHARE_WFTM_LP: {
260-
abi: UNISWAP_V2_PAIR,
261-
address: '0x4733bc45eF91cF7CcEcaeeDb794727075fB209F2'
262-
}
263-
264-
// TODO: These tokens and associated LP's will require multi-hop routing to swap or wait for a direct swap route.
265-
// FUSD: { abi: ANYSWAP_V5_ERC20_ABI, address: '0xad84341756bf337f5a0164515b1f6f993d194e1f' },
266-
// TREEB: { abi: ANYSWAP_V5_ERC20_ABI, address: '0xc60d7067dfbc6f2caf30523a064f416a5af52963' },
267-
// TOMBSWAP_USDC_FUSD_LP: { abi: UNISWAP_V2_PAIR, address: '0x38fF5377A42D0A45C829de45801481869087d22C' },
268-
// TOMBSWAP_TOMB_TREEB_LP: { abi: UNISWAP_V2_PAIR, address: '0x801D17c21D0808Bc00D46E2f081214c9d82F4FbF' },
269-
}
270-
271-
// -----------------------------------------------------------------------------
272-
// Ecosystem
273-
// -----------------------------------------------------------------------------
274-
275-
const { quiknodeApiKey = '', poktPortalApiKey = '' } =
276-
typeof ENV.FANTOM_INIT === 'object' ? ENV.FANTOM_INIT : {}
277-
const rpcProviderUrls = [
278-
`https://fantom-mainnet.gateway.pokt.network/v1/lb/${poktPortalApiKey}`,
279-
`https://polished-empty-cloud.fantom.quiknode.pro/${quiknodeApiKey}/`,
280-
'https://rpc.ftm.tools'
281-
// 'https://rpc.fantom.network',
282-
// 'https://rpc2.fantom.network',
283-
// 'https://rpc3.fantom.network',
284-
// 'https://rpcapi.fantom.network',
285-
// 'https://rpc.ankr.com/fantom'
286-
]
287-
288-
const eco = makeEcosystem(fantomContractInfoMap, rpcProviderUrls)
289-
290-
export const fantomEcosystem = eco
5+
import { fantomEcosystem as eco } from './fantomEcosystem'
2916

2927
// -----------------------------------------------------------------------------
2938
// Stake Policy Info

0 commit comments

Comments
 (0)