Skip to content

Instantly share code, notes, and snippets.

@chuckbergeron
Last active September 19, 2023 22:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chuckbergeron/9c4fdf889bae938c7e39901f8204aeba to your computer and use it in GitHub Desktop.
Save chuckbergeron/9c4fdf889bae938c7e39901f8204aeba to your computer and use it in GitHub Desktop.
PoolTogether v5 Hyperstructure - Draw Auction Bot, Gather Contract State pt. 2
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