Skip to content

Commit 9d0a862

Browse files
author
Alunara
committed
refactor: use prices api for llamma trades
1 parent 56bbd26 commit 9d0a862

File tree

8 files changed

+68
-84
lines changed

8 files changed

+68
-84
lines changed

apps/main/src/lend/components/ChartOhlcWrapper/TradesData.tsx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,21 @@ const TradesData: React.FC<TradesDataProps> = ({ lendTradesData, chainId }) => {
1717
return (
1818
<>
1919
{lendTradesData.map((transaction, index) => (
20-
<TransactionRow key={`${transaction.transaction_hash}-${transaction.sold_id}-trade-${index}`}>
21-
<Event href={networks[chainId].scanTxPath(transaction.transaction_hash)} rel="noopener" target="_blank">
20+
<TransactionRow key={`${transaction.txHash}-${transaction.idSold}-trade-${index}`}>
21+
<Event href={networks[chainId].scanTxPath(transaction.txHash)} rel="noopener" target="_blank">
2222
<TradeFrom>
2323
<StyledTokenIcon
2424
size="sm"
2525
imageBaseUrl={imageBaseUrl}
26-
token={transaction.token_sold.address}
27-
address={transaction.token_sold.address}
26+
token={transaction.tokenSold.address}
27+
address={transaction.tokenSold.address}
2828
/>
2929
<Box flex flexColumn>
30-
<TradeFromSymbol>{transaction.token_sold.symbol}</TradeFromSymbol>
30+
<TradeFromSymbol>{transaction.tokenSold.symbol}</TradeFromSymbol>
3131
<TradeFromAmount>
3232
<Chip isBold isNumber>
33-
{formatNumber(transaction.amount_sold, {
34-
...getFractionDigitsOptions(transaction.amount_sold, 2),
33+
{formatNumber(transaction.amountSold, {
34+
...getFractionDigitsOptions(transaction.amountSold, 2),
3535
})}
3636
</Chip>
3737
</TradeFromAmount>
@@ -40,11 +40,11 @@ const TradesData: React.FC<TradesDataProps> = ({ lendTradesData, chainId }) => {
4040
<Arrow></Arrow>
4141
<TradeTo>
4242
<Box flex flexColumn>
43-
<TradeToSymbol>{transaction.token_bought.symbol}</TradeToSymbol>
43+
<TradeToSymbol>{transaction.tokenBought.symbol}</TradeToSymbol>
4444
<TradeToAmount>
4545
<Chip isBold isNumber>
46-
{formatNumber(transaction.amount_bought, {
47-
...getFractionDigitsOptions(transaction.amount_bought, 2),
46+
{formatNumber(transaction.amountBought, {
47+
...getFractionDigitsOptions(transaction.amountBought, 2),
4848
})}
4949
</Chip>
5050
</TradeToAmount>
@@ -53,8 +53,8 @@ const TradesData: React.FC<TradesDataProps> = ({ lendTradesData, chainId }) => {
5353
className="bought"
5454
size="sm"
5555
imageBaseUrl={imageBaseUrl}
56-
token={transaction.token_bought.address}
57-
address={transaction.token_bought.address}
56+
token={transaction.tokenBought.address}
57+
address={transaction.tokenBought.address}
5858
/>
5959
</TradeTo>
6060
</Event>

apps/main/src/lend/components/ChartOhlcWrapper/types.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import type { LlammaControllerEvent, LlammaTradeEvent } from '@ui/Chart/types'
1+
import type { LlammaControllerEvent } from '@ui/Chart/types'
22
import { ChainId } from '@lend/types/lend.types'
3+
import type { LlammaTrade } from '@curvefi/prices-api/llamma'
34

45
export type LendingMarketTokens = {
56
borrowedToken: {
@@ -25,7 +26,7 @@ export interface LiquidityDataProps {
2526
}
2627

2728
export interface TradesDataProps {
28-
lendTradesData: LlammaTradeEvent[]
29+
lendTradesData: LlammaTrade[]
2930
chainId: ChainId
3031
}
3132

apps/main/src/lend/store/createOhlcChartSlice.ts

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@ import type {
88
VolumeData,
99
LlamaBaselinePriceData,
1010
OraclePriceData,
11-
LlammaTradesApiResponse,
1211
LlammaControllerApiResponse,
13-
LlammaTradeEvent,
1412
LlammaControllerEvent,
1513
} from 'ui/src/Chart/types'
1614
import type { UTCTimestamp } from 'lightweight-charts'
1715
import type { Address, Chain } from '@curvefi/prices-api'
18-
import { getOHLC } from '@curvefi/prices-api/llamma'
16+
import { getOHLC, getTrades } from '@curvefi/prices-api/llamma'
1917

2018
import produce from 'immer'
2119

@@ -52,7 +50,7 @@ type SliceState = {
5250
// flag for disabling oracle pool data if no oracle pools are found for the market on the api
5351
dataDisabled: boolean
5452
}
55-
lendTradesData: LlammaTradeEvent[]
53+
lendTradesData: Awaited<ReturnType<typeof getTrades>>['trades']
5654
lendControllerData: LlammaControllerEvent[]
5755
activityFetchStatus: FetchingStatus
5856
timeOption: TimeOptions
@@ -665,17 +663,16 @@ const createOhlcChart = (set: SetState<State>, get: GetState<State>) => ({
665663
const network = networks[chainId].id.toLowerCase()
666664

667665
try {
668-
const tradesFetch = await fetch(
669-
`https://prices.curve.fi/v1/lending/llamma_trades/${network}/${poolAddress}?page=1&per_page=100
670-
`,
671-
)
672-
const lpTradesRes: LlammaTradesApiResponse = await tradesFetch.json()
673-
const sortedData = lpTradesRes.data.sort((a: LlammaTradeEvent, b: LlammaTradeEvent) => {
674-
const timestampA = new Date(a.timestamp).getTime()
675-
const timestampB = new Date(b.timestamp).getTime()
676-
return timestampB - timestampA
666+
const { trades } = await getTrades({
667+
endpoint: 'lending',
668+
chain: network as Chain,
669+
llamma: poolAddress as Address,
670+
page: 1,
671+
perPage: 100,
677672
})
678673

674+
const sortedData = trades.sort((a, b) => b.timestamp - a.timestamp)
675+
679676
if (sortedData) {
680677
set(
681678
produce((state: State) => {

apps/main/src/loan/components/ChartOhlcWrapper/TradesData.tsx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,21 @@ import Tooltip from '@ui/Tooltip'
1515
const TradesData: React.FC<TradesDataProps> = ({ llammaTradesData, chainId }) => (
1616
<>
1717
{llammaTradesData.map((transaction, index) => (
18-
<TransactionRow key={`${transaction.transaction_hash}-${transaction.sold_id}-trade-${index}`}>
19-
<Event href={networks[chainId].scanTxPath(transaction.transaction_hash)} rel="noopener" target="_blank">
18+
<TransactionRow key={`${transaction.txHash}-${transaction.idSold}-trade-${index}`}>
19+
<Event href={networks[chainId].scanTxPath(transaction.txHash)} rel="noopener" target="_blank">
2020
<TradeFrom>
2121
<StyledTokenIcon
2222
size="sm"
2323
imageBaseUrl={getImageBaseUrl(chainId)}
24-
token={transaction.token_sold.address}
25-
address={transaction.token_sold.address}
24+
token={transaction.tokenSold.address}
25+
address={transaction.tokenSold.address}
2626
/>
2727
<Box flex flexColumn>
28-
<TradeFromSymbol>{transaction.token_sold.symbol}</TradeFromSymbol>
28+
<TradeFromSymbol>{transaction.tokenSold.symbol}</TradeFromSymbol>
2929
<TradeFromAmount>
3030
<Chip isBold isNumber>
31-
{formatNumber(transaction.amount_sold, {
32-
...getFractionDigitsOptions(transaction.amount_sold, 2),
31+
{formatNumber(transaction.amountSold, {
32+
...getFractionDigitsOptions(transaction.amountSold, 2),
3333
})}
3434
</Chip>
3535
</TradeFromAmount>
@@ -38,11 +38,11 @@ const TradesData: React.FC<TradesDataProps> = ({ llammaTradesData, chainId }) =>
3838
<Arrow></Arrow>
3939
<TradeTo>
4040
<Box flex flexColumn>
41-
<TradeToSymbol>{transaction.token_bought.symbol}</TradeToSymbol>
41+
<TradeToSymbol>{transaction.tokenBought.symbol}</TradeToSymbol>
4242
<TradeToAmount>
4343
<Chip isBold isNumber>
44-
{formatNumber(transaction.amount_bought, {
45-
...getFractionDigitsOptions(transaction.amount_bought, 2),
44+
{formatNumber(transaction.amountBought, {
45+
...getFractionDigitsOptions(transaction.amountBought, 2),
4646
})}
4747
</Chip>
4848
</TradeToAmount>
@@ -51,8 +51,8 @@ const TradesData: React.FC<TradesDataProps> = ({ llammaTradesData, chainId }) =>
5151
className="bought"
5252
size="sm"
5353
imageBaseUrl={getImageBaseUrl(chainId)}
54-
token={transaction.token_bought.address}
55-
address={transaction.token_bought.address}
54+
token={transaction.tokenBought.address}
55+
address={transaction.tokenBought.address}
5656
/>
5757
</TradeTo>
5858
</Event>

apps/main/src/loan/components/ChartOhlcWrapper/types.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import type { LlammaControllerEvent, LlammaTradeEvent } from '@ui/Chart/types'
1+
import type { LlammaControllerEvent } from '@ui/Chart/types'
22
import { ChainId, Llamma } from '@loan/types/loan.types'
3+
import { LlammaTrade } from '@curvefi/prices-api/llamma'
34

45
export type LlammaLiquidityCoins = {
56
crvusd: {
@@ -25,6 +26,6 @@ export interface LiqudityDataProps {
2526
}
2627

2728
export interface TradesDataProps {
28-
llammaTradesData: LlammaTradeEvent[]
29+
llammaTradesData: LlammaTrade[]
2930
chainId: ChainId
3031
}

apps/main/src/loan/store/createOhlcChartSlice.ts

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@ import type {
77
VolumeData,
88
LlamaBaselinePriceData,
99
OraclePriceData,
10-
LlammaTradesApiResponse,
1110
LlammaControllerApiResponse,
12-
LlammaTradeEvent,
1311
LlammaControllerEvent,
1412
} from 'ui/src/Chart/types'
1513
import type { UTCTimestamp } from 'lightweight-charts'
1614
import type { Address, Chain } from '@curvefi/prices-api'
17-
import { getOHLC } from '@curvefi/prices-api/llamma'
15+
import { getOHLC, getTrades } from '@curvefi/prices-api/llamma'
1816

1917
import produce from 'immer'
2018

@@ -26,7 +24,7 @@ type SliceState = {
2624
volumeData: VolumeData[]
2725
oraclePriceData: OraclePriceData[]
2826
baselinePriceData: LlamaBaselinePriceData[]
29-
llammaTradesData: LlammaTradeEvent[]
27+
llammaTradesData: Awaited<ReturnType<typeof getTrades>>['trades']
3028
llammaControllerData: LlammaControllerEvent[]
3129
chartFetchStatus: FetchingStatus
3230
activityFetchStatus: FetchingStatus
@@ -292,17 +290,16 @@ const createOhlcChart = (set: SetState<State>, get: GetState<State>) => ({
292290
const network = networks[chainId].id.toLowerCase()
293291

294292
try {
295-
const tradesFetch = await fetch(
296-
`https://prices.curve.fi/v1/crvusd/llamma_trades/${network}/${poolAddress}?page=1&per_page=100
297-
`,
298-
)
299-
const lpTradesRes: LlammaTradesApiResponse = await tradesFetch.json()
300-
const sortedData = lpTradesRes.data.sort((a: LlammaTradeEvent, b: LlammaTradeEvent) => {
301-
const timestampA = new Date(a.timestamp).getTime()
302-
const timestampB = new Date(b.timestamp).getTime()
303-
return timestampB - timestampA
293+
const { trades } = await getTrades({
294+
endpoint: 'crvusd',
295+
chain: network as Chain,
296+
llamma: poolAddress as Address,
297+
page: 1,
298+
perPage: 100,
304299
})
305300

301+
const sortedData = trades.sort((a, b) => b.timestamp - a.timestamp)
302+
306303
if (sortedData) {
307304
set(
308305
produce((state: State) => {

packages/prices-api/src/llamma/api.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,26 @@ export async function getEvents(endpoint: Endpoint, chain: Chain, llamma: string
1717
}
1818
}
1919

20-
export async function getTrades(endpoint: Endpoint, chain: Chain, llamma: string, page: number, options?: Options) {
20+
type GetTradesParams = {
21+
endpoint: Endpoint
22+
chain: Chain
23+
llamma: Address
24+
page?: number
25+
perPage?: number
26+
}
27+
28+
export async function getTrades(
29+
{ endpoint, chain, llamma, page = 1, perPage = 10 }: GetTradesParams,
30+
options?: Options,
31+
) {
2132
const host = await getHost(options)
33+
const params = new URLSearchParams({
34+
page: page.toString(),
35+
per_page: perPage.toString(),
36+
})
37+
2238
const resp = await fetch<Responses.GetLlammaTradesResponse>(
23-
`${host}/v1/${endpoint}/llamma_trades/${chain}/${llamma}?page=${page}&per_page=10`,
39+
`${host}/v1/${endpoint}/llamma_trades/${chain}/${llamma}?${params.toString()}`,
2440
)
2541

2642
return {

packages/ui/src/Chart/types.ts

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -135,28 +135,6 @@ export interface LpTradeToken {
135135
event_index: number
136136
}
137137

138-
export interface LlammaTradeEvent {
139-
sold_id: number
140-
bought_id: number
141-
token_sold: {
142-
symbol: string
143-
address: string
144-
}
145-
token_bought: {
146-
symbol: string
147-
address: string
148-
}
149-
amount_sold: number
150-
amount_bought: number
151-
price: number
152-
buyer: string
153-
fee_x: number
154-
fee_y: number
155-
block_number: number
156-
timestamp: number
157-
transaction_hash: string
158-
}
159-
160138
export interface LlammaControllerEvent {
161139
provider: string
162140
deposit: {
@@ -170,12 +148,6 @@ export interface LlammaControllerEvent {
170148
transaction_hash: string
171149
}
172150

173-
export interface LlammaTradesApiResponse {
174-
chain: string
175-
address: string
176-
data: LlammaTradeEvent[]
177-
}
178-
179151
export interface LlammaControllerApiResponse {
180152
chain: string
181153
address: string

0 commit comments

Comments
 (0)