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

@tracer-protocol/perpetual-pools-v2-pool-watcher

v0.0.15

Published

tracer perpetual pool watcher that can act as a building block for various types of bots

Downloads

35

Readme

Perpetual Pools v2 Pool Watcher

The Pool Watcher is a building block that can be used to create various types of bots that interact with Tracer Perpetual Pools v2

This package is for use with perpetual pools v2 which is currently not deployed to mainnet

Summary

The Pool Watcher is essentially an event emitter that can be used to monitor the state of a given perpetual pool.

The Pool Watcher will emit an event when the commitment window is nearing the end and will provide details of the current and expected (after next upkeep) of the pool.

This can be used to build arbitrage bots, skew farming bots and other types of trading bots.

Usage

Install the pool watcher

yarn add @tracer-protocol/perpetual-pools-v2-pool-watcher

Start watching a pool and reacting to events

import { PoolWatcher } from '@tracer-protocol/perpetual-pools-v2-pool-watcher';

async function main () {
  const poolWatcher = new PoolWatcher({
    nodeUrl: 'your_node_url',
    commitmentWindowBuffer: 20, // calculate and emit expected state 20 seconds before expected end of commitment window
    chainId: '421611', // arbitrum rinkeby
    poolAddress: '0xd9991942bc6d916a8c591f888e8e81fab4cc254d' // 3-ETH/USD testnet pool
  });

  // be sure to initialise the pool
  await poolWatcher.initializeWatchedPool();

  // begin monitoring pool and emitting events
  poolWatcher.startWatchingPool();

  poolWatcher.on('COMMITMENT_WINDOW_ENDING', calculatedState => {
    // use calculatedState to determine a desirable commit to make
    const myCommit = buildACommit(calculatedState);
    // check if you are still within the same update interval before committing
    const { appropriateUpdateIntervalId } = calculatedState;
    const stillInSameInterval = await poolWatcher.isCommitmentWindowStillOpen(appropriateUpdateIntervalId)

    if(!stillInSameInterval) {
      // consider abandoning since your commit will not be included in the next upkeep
    }

    await commit(myCommit)
  })

  poolWatcher.on('COMMIT', commitData => {
    // do whatever you want with the newly observed commit
  })

  poolWatcher.on('UPKEEP', data => {
    // do whatever you want with the newly observed upkeep
  })
}

main();

Constructor Config

| Name | Type | Description | Required | |------------------------|----------------------------------------------------------|--------------------------------------------------------------------------------------------|----------| | nodeUrl | string | url of provider, websocket provider recommended | true | | poolAddress | string | address of pool to watch | true | | chainId | string | chainId of network, only arbitrum networks are supported | true | | commitmentWindowBuffer | string | number of seconds before end of commitment window to emit COMMITMENT_WINDOW_ENDING event | true | | oraclePriceTransformer | (ethers.BigNumber, ethers.BigNumber) => ethers.BigNumber | price transformation function, used to emulate contract behaviour | false |

Events

COMMITMENT_WINDOW_ENDING

This event is emitted once the end of the commitment window is within commitmentWindowBuffer seconds from ending.

This can be used to time your commits such that they are as late as possible in the commitment window.

Since frontRunningInterval is timestamp based, it is advised to give yourself some leeway via commitmentWindowBuffer to account for unpredictable block timestamps in arbitrum.

The following data containing the expected pool state will be passed into the callback of subscribed event listeners: | Name | Type | Description | |-----------------------------|-------------|---------------------------------------------------------------------------------------| | timestamp | number | local unix timestamp when this expected state was calculated | | currentSkew | BigNumber | current skew (before pending commits are applied in the next upkeep) | | currentLongBalance | BigNumber | current collateral held by long side of the pool | | currentLongSupply | BigNumber | current supply of long tokens | | currentShortBalance | BigNumber | current collateral held by short side of the pool | | currentShortSupply | BigNumber | current supply of short tokens | | expectedSkew | BigNumber | expected skew (after pending commits are applied in the next upkeep) | | expectedLongBalance | BigNumber | expected collateral held by long side of the pool | | expectedLongSupply | BigNumber | expected supply of long tokens | | expectedShortBalance | BigNumber | expected collateral held by short side of the pool | | expectedShortSupply | BigNumber | expected supply of short tokens | | totalNetPendingLong | BigNumber | expected change in long side collateral held | | totalNetPendingShort | BigNumber | expected change in short side collateral held | | expectedLongTokenPrice | BigNumber | expected long token price after next upkeep | | expectedShortTokenPrice | BigNumber | expected short token price after next upkeep | | lastOraclePrice | BigNumber | last reported oracle price | | expectedOraclePrice | BigNumber | expected oracle price after applying oraclePriceTransformer for each expected interval| | pendingCommits | TotalPoolCommitmentsBN[]| pending commits for each expected upcoming update interval | | updateIntervalId | BigNumber | id of update interval that is ending |

UPKEEP

This event is emitted when an upkeep is observed for the watched pool.

The following data will be passed into the callback of subscribed event listeners: | Name | Type | Description | |------------------------|-------------|--------------------------------------------------------------------------------------------| | poolAddress | string | address of pool to watch | | data | string | hex encoded OracleWrapper implementation-specific metadata | | startPrice | BigNumber | oracle price at previous upkeep | | endPrice | BigNumber | oracle price at this upkeep | | timestamp | number | unix timestamp of block where event was emitted | | blockNumber | number | block number in which event was emitted | | txHash | string | hash of transaction in which event was emitted |

COMMIT

This event is emitted when a new commit is observed for the watched pool.

The following data will be passed into the callback of subscribed event listeners: | Name | Type | Description | |------------------------|-------------|-----------------------------------------------------------------------------------------------------------------| | user | string | address of account that created the commit | | amount | BigNumber | amount of collateral for mint commits, amount of pool tokens for burn commits | | commitType | number | raw commit type, one of {0, 1, 2, 3, 4, 5} | | appropriateIntervalId | number | the update interval in which this commit will be executed | | payForClaim | boolean | true if requesting tokens are claimed on users behalf, false if tokens are to go into escrow (unclaimed balance)| | fromAggregateBalance | boolean | true if paying from unclaimed (escrow) balance, false if paying from wallet | | mintingFee | string | minting fee percentage at time of commit, 128 bit (quad precision) floating point encoded | | timestamp | number | unix timestamp of block where event was emitted | | blockNumber | number | block number in which event was emitted | | txHash | string | hash of transaction in which event was emitted |

COMMITS_EXECUTED

This event is emitted at the same time at UPKEEP, but includes the updateIntervalId which was just processed

The following data will be passed into the callback of subscribed event listeners: | Name | Type | Description | |------------------------|-------------|-----------------------------------------------------------------------------------------------------------------| | updateIntervalId | number | interval id that was processed | | burningFee | string | burning fee percentage at time of upkeep, 128 bit (quad precision) floating point encoded | | timestamp | number | unix timestamp of block where event was emitted | | blockNumber | number | block number in which event was emitted | | txHash | string | hash of transaction in which event was emitted |