Application | Contracts | Documentation | Draw Calculator | Utility Library | Static Cache
This library includes a simplified interface for interacting with a v4 PoolTogether deployment. Create an instance of PrizePoolNetwork
and use the initialized PrizePool
and PrizeDistributor
to begin reading and writing data to the protocol.
There are several classes that provide interfaces to the different aspects of the V4 PoolTogether protocol. PrizePoolNetwork
is the main entry point.
This project is available as an NPM package:
npm install @pooltogether/v4-client-js
or
yarn add @pooltogether/v4-client-js
The repo can be cloned from Github for contributions.
git clone https://github.com/pooltogether/v4-client-js.git
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-client-js'
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(usersAddress)
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()
const drawResults = await PrizeApi.getUsersDrawResultsByDraw(
chainId,
usersAddress,
prizeDistributorAddress,
drawId,
maxPicksPerUser
)
NOTE: Ensure the PrizeDistributor
was initialized with a Signer
const txResponse: TransactionResponse = await prizeDistributor.claimPrizesByDraw(1)
Create an Issue to request new features.
Open Pull Request adhering to Contribution guidelines.
The package is setup using the TSDX zero-config CLI which includes:
- Typescript
- Rollup
- Jest
- Prettier
- ESLint
Minor changes have been made to extend the default configuration.
The TSDX linting configuration is overwritten to include override(s)* for:
- Import/Order (used to enforce consistent module import ordering)
*The ESLint overrides may incorrectly be interpreted by VSCode since the nested config file is ignored in the IDE
yarn docs
- Copy & paste
classes
toClasses
interfaces
toInterfaces
README.md
below header toindex.md
- Replace all
.md
with `` (nothing) in links - Replace all
README
links to./
and../README
to../