Last active
September 19, 2023 22:02
-
-
Save chuckbergeron/9c4fdf889bae938c7e39901f8204aeba to your computer and use it in GitHub Desktop.
PoolTogether v5 Hyperstructure - Draw Auction Bot, Gather Contract State pt. 2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export const getRng = async ( | |
rngReadProvider: Provider, | |
auctionContracts: AuctionContracts, | |
reserve: BigNumber, | |
): Promise<RngDrawAuctionContext> => { | |
// RNG Auction Service Info | |
const rngService = await auctionContracts.rngAuctionContract.getNextRngService(); | |
const rngServiceContract = new ethers.Contract(rngService, VrfRngAbi, rngReadProvider); | |
const rngServiceRequestFee = await rngServiceContract.getRequestFee(); | |
const rngFeeTokenAddress = rngServiceRequestFee[0]; | |
// RNG Estimated Fee from VrfHelper | |
const gasPrice = await rngReadProvider.getGasPrice(); | |
const requestGasPriceWei = gasPrice; | |
const chainlinkVRFV2DirectRngAuctionHelperContract = | |
await auctionContracts.chainlinkVRFV2DirectRngAuctionHelperContract; | |
const vrfHelperRequestFee = await chainlinkVRFV2DirectRngAuctionHelperContract.estimateRequestFee( | |
requestGasPriceWei, | |
); | |
const rngFeeAmount = vrfHelperRequestFee._requestFee; | |
const rngFeeTokenIsSet = rngFeeTokenAddress !== ZERO_ADDRESS; | |
let rngFeeTokenBalance = BigNumber.from(0); | |
let rngFeeTokenAllowance = BigNumber.from(0); | |
let rngFeeTokenContract; | |
if (rngFeeTokenIsSet) { | |
rngFeeTokenContract = new ethers.Contract(rngFeeTokenAddress, ERC20Abi, rngReadProvider); | |
rngFeeTokenBalance = await rngFeeTokenContract.balanceOf(RELAYER_ADDRESS); | |
rngFeeTokenAllowance = await rngFeeTokenContract.allowance( | |
RELAYER_ADDRESS, | |
auctionContracts.chainlinkVRFV2DirectRngAuctionHelperContract.address, | |
); | |
} | |
// RNG Auction info | |
const rngIsAuctionOpen = await auctionContracts.rngAuctionContract.isAuctionOpen(); | |
const rngIsRngComplete = await auctionContracts.rngAuctionContract.isRngComplete(); | |
const rngCurrentFractionalReward = | |
await auctionContracts.rngAuctionContract.currentFractionalReward(); | |
// RNG Auction Service | |
let rngFeeToken: TokenWithRate; | |
if (rngFeeTokenIsSet) { | |
const rngFeeTokenSymbol = await rngFeeTokenContract.symbol(); | |
rngFeeTokenContract = new ethers.Contract(rngFeeTokenAddress, ERC20Abi, rngReadProvider); | |
rngFeeToken = { | |
address: rngFeeTokenAddress, | |
decimals: await rngFeeTokenContract.decimals(), | |
name: await rngFeeTokenContract.name(), | |
symbol: rngFeeTokenSymbol, | |
assetRateUsd: RNG_FEE_TOKEN_MARKET_RATE_USD, | |
}; | |
} | |
const rngCurrentFractionalRewardString = ethers.utils.formatEther(rngCurrentFractionalReward); | |
// TODO: Assuming 18 decimals. May need to format using rewardToken's decimals instead | |
const reserveStr = ethers.utils.formatEther(reserve); | |
const rngExpectedReward = Number(reserveStr) * Number(rngCurrentFractionalRewardString); | |
// RNG Fee | |
let relayer: DrawAuctionRelayerContext; | |
if (rngFeeTokenIsSet) { | |
relayer = { | |
rngFeeTokenBalance, | |
rngFeeTokenAllowance, | |
}; | |
} | |
let rngFeeUsd = 0; | |
if (rngFeeTokenIsSet) { | |
rngFeeUsd = | |
parseFloat(formatUnits(rngFeeAmount, rngFeeToken.decimals)) * rngFeeToken.assetRateUsd; | |
} | |
return { | |
rngFeeTokenIsSet, | |
rngFeeToken, | |
rngFeeAmount, | |
rngFeeUsd, | |
rngIsAuctionOpen, | |
rngIsRngComplete, | |
rngExpectedReward, | |
relayer, | |
}; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment