Get Bets History
Bet Info
To get information about the user-placed live bets, you can use the following GraphQL query:
query LiveBets(
$first: Int,
$skip: Int,
$where: LiveBet_filter,
$orderBy: LiveBet_orderBy
) {
liveBets(
first: $first,
skip: $skip,
orderBy: $orderBy,
orderDirection: desc,
where: $where,
subgraphError: allow
) {
...LiveBet
}
}
fragment LiveBet on LiveBet {
id
betId
status
amount
odds
createdAt
potentialPayout
payout
result
selections {
odds
result
outcome {
id
outcomeId
condition {
id
conditionId
status
gameId
}
}
}
isRedeemed
isRedeemable
txHash
core {
address
liquidityPool {
address
tokenSymbol
}
}
}
useQuery(QUERY, {
variables: {
where: {
actor_starts_with_nocase: userWalletAddress,
},
},
})Each liveBets item represents the result of a transaction.
To preserve consistency, there is a selections field in the data that contains an array of data about each bet.
Live bets lack specific game information due to the storage of live games exclusively within the LiveDataFeed subgraph, providing access solely to the gameId.
selections {
odds
result
outcome {
id
outcomeId
condition {
id
conditionId
status
gameId
}
}
}To get game data, you'll need to make a request to the LiveDataFeed subgraph, utilizing the gameId.
query Game($gameId: BigInt) {
games(
where: { gameId: $gameId }
)
sport {
name
}
league {
name
country {
name
}
}
participants {
name
image
}
startsAt
}
}Bet Status
The status field value is of type enum and has three states: Accepted, Canceled, and Resolved. Until the outcome the bet was made on is resolved, the status of the bet will be Accepted. During the Accepted status of a bet, it can be regarded as in progress - Live.
const isLive = bet.status === BetStatus.AcceptedIt's important to check if bet status is Accepted to handle the situation when game is finished and the results are resolved.
Bet Result
The result field value is of type enum and has three states: Won, Lost.
const isWon = bet.result === BetResult.Won
const isLost = bet.result === BetResult.LostNote that until the outcome is resolved result will be null.
Market and Selection Names
import { getMarketName, getSelectionName } from '@azuro-org/dictionaries'
const marketName = getMarketName({ outcomeId })
const selectionName = getSelectionName({ outcomeId })Read more about dictionaries here (opens in a new tab).
Pagination
There can be a lot of bets from one user and there can be a problem with fetching all of them at once.
From "GraphQL" section:
TheGraph has a limit of returning a maximum of 1000 elements per request, with a default of 100 elements. Keep this limit in mind when building your queries. Read how to paginate (opens in a new tab).
query BetsHistory($first: Int!, $skip: Int!) {
liveBets(first: $first, skip: $skip, subgraphError: allow) {
...LiveBet
}
}const PAGE_SIZE = 100
const [ page, setPage ] = useState(1)
useQuery(QUERY, {
variables: {
skip: (page - 1) * PAGE_SIZE,
first: PAGE_SIZE,
},
})