Skip to content

Commit

Permalink
Account for no DrawCalcTimelock
Browse files Browse the repository at this point in the history
  • Loading branch information
Dylan DesRosier committed Feb 22, 2022
1 parent 2a5b422 commit f8ca5bf
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 17 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,9 @@
"dependencies": {
"@ethersproject/abi": "^5.1.0",
"@pooltogether/contract-list-schema": "^0.1.4",
"@pooltogether/etherplex": "^1.1.2",
"@pooltogether/etherplex": "^1.1.4",
"@pooltogether/evm-chains-extended": "^0.6.4-beta.1",
"@pooltogether/utilities": "^0.3.7",
"@pooltogether/utilities": "^0.3.8",
"@pooltogether/v4-utils-js": "^0.1.3",
"debug": "^4.3.3",
"ethers": "^5.4.6"
Expand Down
27 changes: 18 additions & 9 deletions src/PrizeApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ import {
utils as V4Utils
} from '@pooltogether/v4-utils-js'

import { DrawResults, Prize, PrizeDistribution } from './types'
import { prizesToDrawResults } from './utils/prizesToDrawResults'
import { DrawResults, LEGACY_DrawResults, Prize, PrizeDistribution } from './types'
import { formatDrawResultsFromPrizes } from './utils/formatDrawResultsFromPrizes'
import { createEmptyDrawResult } from './utils/createEmptyDrawResult'
import { formatDrawResultsFromLegacyDrawResults } from './utils/formatDrawResultsFromLegacyDrawResults'

/**
* Currently the Prize API is only running for a select group of networks.
Expand Down Expand Up @@ -148,7 +149,7 @@ export class PrizeApi {
}
const prizesJson = await response.json()
const prizes: Prize[] = deserializeBigNumbers(prizesJson)
const drawResult: DrawResults = prizesToDrawResults(drawId, prizes, maxPicksPerUser)
const drawResult: DrawResults = formatDrawResultsFromPrizes(drawId, prizes, maxPicksPerUser)
return drawResult
}

Expand All @@ -173,7 +174,8 @@ export class PrizeApi {
)
const response = await fetch(url)
const drawResultsJson = await response.json()
const drawResult: DrawResults = deserializeBigNumbers(drawResultsJson)
const LEGACY_drawResult: LEGACY_DrawResults = deserializeBigNumbers(drawResultsJson)
const drawResult = formatDrawResultsFromLegacyDrawResults(LEGACY_drawResult)
return drawResult
}

Expand Down Expand Up @@ -205,15 +207,23 @@ export class PrizeApi {
response[prizeDistributorAddress].getDrawCalculator[0]

// Get Draw Calculator address
// It's assumed that the PristDistributor has a DrawCalculatorTimelock set up, if it does not, this second getDrawCalculator call will fail. That means the contract is not a DrawCalculatorTimelock and just a DrawCalculator.
const drawCalculatorTimelockContract = contract(
drawCalculatorTimelockAddress,
PartialDrawCalculatorTimelockAbi,
drawCalculatorTimelockAddress
)
// @ts-ignore
response = await batch(readProvider, drawCalculatorTimelockContract.getDrawCalculator())
const drawCalculatorAddress: string =
response[drawCalculatorTimelockAddress].getDrawCalculator[0]
let drawCalculatorAddress: string
try {
// @ts-ignore
response = await batch(readProvider, drawCalculatorTimelockContract.getDrawCalculator())
drawCalculatorAddress = response[drawCalculatorTimelockAddress].getDrawCalculator[0]
} catch (e) {
console.warn(
`Prize Distributor at ${prizeDistributorAddress} is not using a DrawCalculatorTimelock`
)
drawCalculatorAddress = drawCalculatorTimelockAddress
}

// Get Draw Buffer & Prize Distribution Buffer addresses and the users normalized balance
const drawCalculatorContract = contract(
Expand Down Expand Up @@ -255,7 +265,6 @@ export class PrizeApi {
// @ts-ignore
prizeDistributionBufferContract.getPrizeDistribution(drawId)
)

const draw: Draw = response[drawBufferAddress].getDraw[0]
const prizeDistribution: PrizeDistribution =
response[prizeDistributionBufferAddress].getPrizeDistribution[0]
Expand Down
12 changes: 12 additions & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,18 @@ export interface SignersOrProviders {
[chainId: number]: Provider | Signer
}

export interface LEGACY_DrawResults {
drawId: number
totalValue: BigNumber
prizes: LEGACY_Prize[]
}

export interface LEGACY_Prize {
amount: BigNumber
distributionIndex: number
pick: BigNumber
}

export interface ChildContractAddresses {
[chainId: number]: {
[contractAddress: string]: {
Expand Down
21 changes: 21 additions & 0 deletions src/utils/formatDrawResultsFromLegacyDrawResults.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { BigNumber } from 'ethers'

import { DrawResults, LEGACY_DrawResults, LEGACY_Prize, PrizeAwardable } from '../types'

export const formatDrawResultsFromLegacyDrawResults = (
LEGACY_drawResult: LEGACY_DrawResults | DrawResults
): DrawResults => {
const _prizes: (PrizeAwardable | LEGACY_Prize)[] = LEGACY_drawResult.prizes
const prizes: PrizeAwardable[] = _prizes.map((prize) => ({
amount: BigNumber.from(prize.amount),
tierIndex: 'distributionIndex' in prize ? prize.distributionIndex : prize.tierIndex,
pick: BigNumber.from(prize.pick)
}))
const drawResults: DrawResults = {
drawId: LEGACY_drawResult.drawId,
totalValue: LEGACY_drawResult.totalValue,
prizes
}

return drawResults
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { BigNumber } from 'ethers'
import { DrawResults, Prize, PrizeAwardable } from '../types'
import { sumBigNumbers } from './sumBigNumbers'

export const prizesToDrawResults = (
export const formatDrawResultsFromPrizes = (
drawId: number,
_allPrizes: Prize[],
maxPicksPerUser: number
Expand Down
10 changes: 5 additions & 5 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1517,7 +1517,7 @@
resolved "https://registry.yarnpkg.com/@pooltogether/contract-list-schema/-/contract-list-schema-0.1.4.tgz#52a4b35e1ef1b263c643e517ca1908180cf1cb6e"
integrity sha512-oLAu9TGfU9xf1QFJJZQxUj0hsfcRao/DMCZ1hVvDkmwOnX1PUkuhuvZfvgwLFd4hJ4m2kjdCyTJ+VJ5qvgjyww==

"@pooltogether/etherplex@^1.1.2":
"@pooltogether/etherplex@^1.1.4":
version "1.1.4"
resolved "https://registry.yarnpkg.com/@pooltogether/etherplex/-/etherplex-1.1.4.tgz#d7584d43f82bc22630a9068f6c69e9a049740621"
integrity sha512-SFEv9Ck8ycFkDUkdU8KzQblVyQeFRmOIbdLedNNfgQZM/dNnIX6oAiNxUQrlnicl+03sWtLrenKqu/Hnl0VBjg==
Expand All @@ -1534,10 +1534,10 @@
dependencies:
evm-chains "^0.2.0"

"@pooltogether/utilities@^0.3.7":
version "0.3.7"
resolved "https://registry.yarnpkg.com/@pooltogether/utilities/-/utilities-0.3.7.tgz#e63a5296c4f1ec816c7e3d0b9ae544cd075f13b5"
integrity sha512-IBUPY7QAhf6wbKIJ96UA02lJPImAnfSDvAFjkiSVzfRIKXKwOZu+5/mjTXADd2pj18MP/w3h8Wszp0J2jFHYYw==
"@pooltogether/utilities@^0.3.8":
version "0.3.8"
resolved "https://registry.yarnpkg.com/@pooltogether/utilities/-/utilities-0.3.8.tgz#f4fa0e9618c97a152e637575560ee226d9e9752d"
integrity sha512-+9+Lw7IP6B1wvLXK/Dwi8SPkPetaCd4ayr6fS+xWwJup9xdMZmyRR+sc3VwwF/1whu5GmfhZe2X0OV6FTcXWKw==

"@pooltogether/v4-utils-js@^0.1.3":
version "0.1.3"
Expand Down

0 comments on commit f8ca5bf

Please sign in to comment.