|
1 | 1 | <script> |
| 2 | + import { onMount } from "svelte"; |
| 3 | + import { ethers } from "ethers"; |
2 | 4 | import Container from "./container.svelte"; |
3 | 5 | import getPriceData from "../lib/getPriceData.mjs"; |
4 | 6 | import getSpreadData from "../lib/getSpreadData.mjs"; |
| 7 | + import getEthPriceInUSD from "../lib/getEthPrice.mjs"; |
5 | 8 |
|
6 | 9 | const NUMBER_PRICE_DIGITS_SHOWN = 8; |
7 | 10 |
|
|
16 | 19 | // let crypto_comPrice = 0; |
17 | 20 | let priceData; |
18 | 21 |
|
| 22 | + // to remove after demo |
| 23 | + let ethPrice = 1747; |
| 24 | + let gasPrice = 0.0000001225; |
| 25 | + let unitOfGasInUSD = 0.00021347788; |
19 | 26 | let amountToBorrow = 0; |
20 | 27 | let grossProfit = 0; |
21 | 28 | let flashloanFee = 0; |
22 | 29 | let gasCost = 0; |
23 | 30 |
|
24 | 31 | let selectedSpread = { spread: 0, dex1: "", dex2: "" }; |
25 | 32 |
|
26 | | - $: grossProfit = (amountToBorrow * Math.abs(selectedSpread.spread)) / 100; |
27 | | - $: flashloanFee = amountToBorrow * 0.0009; |
28 | | - $: tradingFee1 = amountToBorrow * getTradeFee(selectedSpread.dex1); |
29 | | - $: tradingFee2 = amountToBorrow * getTradeFee(selectedSpread.dex2); |
| 33 | + $: amountToBorrowUSD = amountToBorrow * ethPrice; |
| 34 | + $: grossProfit = (amountToBorrowUSD * Math.abs(selectedSpread.spread)) / 100; |
| 35 | + $: flashloanFee = amountToBorrowUSD * 0.0009; |
| 36 | + $: gasCost = 600000 * unitOfGasInUSD; |
| 37 | + $: tradingFee1 = amountToBorrowUSD * getTradeFee(selectedSpread.dex1); |
| 38 | + $: tradingFee2 = amountToBorrowUSD * getTradeFee(selectedSpread.dex2); |
30 | 39 | $: estimatedProfit = |
31 | 40 | grossProfit - flashloanFee - gasCost - tradingFee1 - tradingFee2; |
32 | 41 |
|
|
70 | 79 | if (!spread) return "fs-black-spread"; |
71 | 80 |
|
72 | 81 | const absoluteSpread = Math.abs(spread); |
73 | | - if (absoluteSpread < 0.1) { |
| 82 | + if (absoluteSpread < 0.4) { |
74 | 83 | return "fs-red-spread"; |
75 | | - } else if (absoluteSpread < 0.2) { |
76 | | - return "fs-black-spread"; |
77 | 84 | } else { |
78 | 85 | return "fs-green-spread"; |
79 | 86 | } |
|
96 | 103 |
|
97 | 104 | let selectedPair = pairs[1]; |
98 | 105 |
|
| 106 | + onMount(async () => { |
| 107 | + const res = await getEthPriceInUSD(); |
| 108 | + if (res) { |
| 109 | + ethPrice = res.ethPrice; |
| 110 | + gasPrice = ethers.utils.formatUnits(res.gasPrice.gwei.toString(), "gwei"); |
| 111 | + unitOfGasInUSD = gasPrice * ethPrice; |
| 112 | + } |
| 113 | +
|
| 114 | + console.log("ethPrice", ethPrice); |
| 115 | + }); |
| 116 | +
|
99 | 117 | async function getPrices() { |
100 | 118 | const data = await getPriceData({ pair: selectedPair }); |
101 | 119 | console.log("priceData", data); |
|
269 | 287 |
|
270 | 288 | <div class="fs-simulation-section"> |
271 | 289 | <div class="fs-simulation-left columntitlebar amount"> |
272 | | - <h3 class="columnTitle">Amount to borrow</h3> |
| 290 | + <h3 class="columnTitle">Amount to borrow (in WETH)</h3> |
273 | 291 | <input |
274 | 292 | bind:value={amountToBorrow} |
275 | 293 | class="inputtextfield faflashloan w-embed fs-amount-field" |
|
279 | 297 | <div id="DepositPosition" class="columnpricecost w-col"> |
280 | 298 | <div class="columntitlebar" style="padding-left: 0;"> |
281 | 299 | <h2 id="columnTitle">Cost-Profit analysis</h2> |
282 | | - <div class="textlightmode rates">(in {selectedPair.asset1})</div> |
| 300 | + <div class="textlightmode rates">(in USD)</div> |
283 | 301 | </div> |
284 | 302 | <div class="w-layout-grid gridcosts"> |
285 | 303 | <div class="textlightmode label02">Gross profit</div> |
286 | 304 | <div id="costArbitrage" class="textlightmode numbers"> |
287 | | - {grossProfit === 0 ? "Select a spread" : grossProfit} |
| 305 | + {grossProfit === 0 ? "Select a spread" : grossProfit.toFixed(5) + " $"} |
288 | 306 | </div> |
289 | 307 | <div class="textlightmode label02">Flashloan Fee</div> |
290 | 308 | <div id="costFlashLoan" class="textlightmode numbers"> |
291 | | - {flashloanFee} |
| 309 | + {flashloanFee.toFixed(5)} $ |
292 | 310 | </div> |
293 | 311 | <div class="textlightmode label02">Gas Cost</div> |
294 | 312 | <div id="costGas" class="textlightmode numbers"> |
295 | | - <input |
296 | | - bind:value={gasCost} |
297 | | - class="inputtextfield faflashloan w-embed fs-amount-field fs-cost-field" |
298 | | - /> |
| 313 | + {gasCost.toFixed(5)} $ |
299 | 314 | </div> |
300 | 315 | <div class="textlightmode label02">Trading Fees (1)</div> |
301 | 316 | <div id="costPlatform01" class="textlightmode numbers"> |
302 | | - {tradingFee1.toFixed(5)} |
| 317 | + {tradingFee1.toFixed(5)} $ |
303 | 318 | </div> |
304 | 319 | <div class="textlightmode label02">Trading Fees (2)</div> |
305 | 320 | <div id="costPlatform02" class="textlightmode numbers"> |
306 | | - {tradingFee2.toFixed(5)} |
| 321 | + {tradingFee2.toFixed(5)} $ |
307 | 322 | </div> |
308 | 323 | </div> |
309 | 324 | <div |
|
313 | 328 | > |
314 | 329 | <div class="columntitlebar profit" style="padding-left: 0;"> |
315 | 330 | <h2 id="columnTitle" style="font-size: 16px"> |
316 | | - Estimated Profit 🤑 |
| 331 | + Estimated Net Profit 🤑 |
317 | 332 | </h2> |
318 | 333 | <div id="differenceProfit" class="textlightmode numbers big"> |
319 | | - {estimatedProfit.toFixed(5)} |
| 334 | + {estimatedProfit.toFixed(5)} $ |
320 | 335 | </div> |
321 | 336 | </div> |
322 | 337 | </div> |
|
0 commit comments