npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@pooltogether/v4-client-js

v1.18.1

Published

Client library for simple interactions with PoolTogether V4 contracts.

Downloads

271

Readme

💻   PoolTogether Client Library || PoolTogether V4

Tests Coverage Status ts MIT license npm

Application | Contracts | Documentation | Draw Calculator | Utility Library | Static Cache

🏆   Overview

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.

💾   Installation

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

🏎️   Quickstart

PrizePoolNetwork

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)

PrizePool

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')

User

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)

PrizeDistributor

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
)

🧮   Examples

Get token data for a Prize Pool

const tokenData = await prizePool.getTokenData() // Underlying token (ex. USDC)
const ticketData = await prizePool.getTicketData() // Ticket token

Get a users deposit token & ticket balances

const usersBalances: {
  chainId: number,
  address: string,
  balances: PrizePoolTokenBalances
}[] = await PrizePoolNetwork.getUsersPrizePoolBalances(usersAddress)

Get a users deposit token & ticket balance

const balance: PrizePoolTokenBalances = await prizePool.getUsersPrizePoolBalances(usersAddress)

Approve deposits

NOTE: Make sure you're shifting by the proper decimal amount

const txResponse: TransactionResponse = await user.approveDeposits(
  ethers.utils.parseUnits(10, decimals)
)

Deposit and delegate tokens

NOTE: Make sure you're shifting by the proper decimal amount

const txResponse: TransactionResponse = await user.depositAndDelegate(
  ethers.utils.parseUnits(10, decimals)
)

Deposit tokens

NOTE: Make sure you're shifting by the proper decimal amount

const txResponse: TransactionResponse = await user.deposit(ethers.utils.parseUnits(10, decimals))

Withdraw tokens

NOTE: Make sure you're shifting by the proper decimal amount

const txResponse: TransactionResponse = await user.withdraw(ethers.utils.parseUnits(10, decimals))

Get valid draw ids

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()

Get a users prizes

const drawResults = await PrizeApi.getUsersDrawResultsByDraw(
  chainId,
  usersAddress,
  prizeDistributorAddress,
  drawId,
  maxPicksPerUser
)

Claim a users prizes

NOTE: Ensure the PrizeDistributor was initialized with a Signer

const txResponse: TransactionResponse = await prizeDistributor.claimPrizesByDraw(1)

💻   Developer Experience

Contributing

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.

ESLint

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

Porting docs to PoolTogether V4 Docs

  1. yarn docs
  2. Copy & paste
  • classes to Classes
  • interfaces to Interfaces
  • README.md below header to index.md
  1. Replace all .md with `` (nothing) in links
  2. Replace all README links to ./ and ../README to ../