This library includes a simplified interface for interacting with a v4 PoolTogether deployment.
This project is available as an NPM package:
$ yarn add @pooltogether/v4-js-client
A PrizePoolNetwork
is a collection of PrizePool
and PrizeDistributor
across several chains that make up a v4 deployment.
To create an instance of PrizePoolNetwork
you will need:
- A Contract List containing all of the relevant contracts for a v4 prize pool. You can obtain this by generating your own after deploying a v4 Prize Pool (start here). Or by importing a copy of our current deployments v4-pool-data.
- Ethers providers for every chain that a Prize Pool is deployed on.
import { PrizePoolNetwork } from '@pooltogether/v4-js-client'
import { mainnet } from '@pooltogether/v4-pool-data'
const PrizePoolNetwork = new PrizePoolNetwork(providers, mainnet)
A PrizePool
is a representation of a Prize Pool deployment. The Prize Pool is responsible for managing deposits, withdrawals & delegation. PrizePool
is a read only object, for write capabilities check out User
const prizePool = PrizePoolNetwork.getPrizePool(1, '0xabc123')
A User
is wrapper around PrizePool
with the ability to send transactions to manage deposits, withdrawals and delegation.
const user = new User(prizePool.prizePoolMetadata, signer, prizePool)
A PrizeDistributor
is what handles prizes. It is used to determine the current draw, check for prizes & claiming prizes. For write capabilities, pass a signer when creating an instance.
const prizeDistributor = PrizePoolNetwork.getPrizeDistributor(1, '0xabc123')
const prizeDistributor = PrizePoolNetwork.getPrizeDistributor(1, '0xabc123')
const signer = provider.getSigner()
const signerPrizeDistributor = new PrizeDistributor(
prizeDistributor.prizeDistributorMetadata,
signer,
prizeDistributor.contractMetadataList
)
const tokenData = await prizePool.getTokenData() // Underlying token (ex. USDC)
const ticketData = await prizePool.getTicketData() // Ticket token
const usersBalances: {
chainId: number,
address: string,
balances: PrizePoolTokenBalances
}[] = await PrizePoolNetwork.getUsersPrizePoolBalances()
const balance: PrizePoolTokenBalances = await prizePool.getUsersPrizePoolBalances(usersAddress)
NOTE: Make sure you're shifting by the proper decimal amount
const txResponse: TransactionResponse = await user.approveDeposits(
ethers.utils.parseUnits(10, decimals)
)
NOTE: Make sure you're shifting by the proper decimal amount
const txResponse: TransactionResponse = await user.depositAndDelegate(
ethers.utils.parseUnits(10, decimals)
)
NOTE: Make sure you're shifting by the proper decimal amount
const txResponse: TransactionResponse = await user.deposit(ethers.utils.parseUnits(10, decimals))
NOTE: Make sure you're shifting by the proper decimal amount
const txResponse: TransactionResponse = await user.withdraw(ethers.utils.parseUnits(10, decimals))
Valid draw ids are draw ids that have all of the relevant data pushed to their respective chain & are not expired.
const drawIds = await prizeDistributor.getValidDrawIds()
NOTE: This will run the calculations and can be computationally expensive.
const drawResults = await prizeDistributor.getUsersPrizesByDrawId(usersAddress, 1)
NOTE: Ensure the PrizeDistributor
was initialized with a Signer
const txResponse: TransactionResponse = await prizeDistributor.claimPrizesByDraw(1)