UNPKG

@tracer-protocol/pools-js

Version:

Javascript library for interacting with Tracer's Perpetual Pools

108 lines (84 loc) 3.54 kB
# Pools JS SDK A JS development kit with supported TypeScript typings. ## Installation Since there is a yarn.lock, if you would like to use npm please run `rm -r node_modules yarn.lock` `npm install @tracer-protocol/pools-js` or `yarn add @tracer-protocol/pools-js` ## Testing `yarn` or `npm run install` `yarn build` or `npm run build` `yarn test` or `npm run test` ## Documentation `yarn` or `npm run install` `yarn build:docs` or `npm run build:docs` `npx serve ./docs` ## Entities There are a number of entity classes relating to several of the contracts required to interact with pools. The entry should be [pools](./src/entities/pool.ts) but you can instantiate any of the classes individually. All entities follow the same design pattern of private constructors and public static `Create` functions. This is to ensure that the class is initialized before use. You will always have to wait for the `Create` function before accessing the internals of the promise. There is also a `CreateDefault` this provides an interface for creating "empty" entities that can be used as default. (A list of Pools related addresses can be found [here](https://tracerdao.notion.site/Tracer-Contract-Addresses-8dbf351d1a034be79f7a5c278775084d) ### Pools The main class for interacting with LeveragedPools. To get started its as simple as ```javascript import { Pool } from '@tracer-protocol/pools-js'; import ethers from 'ethers'; const provider = new ethers.providers.JsonRpcProvider("https://arb1.arbitrum.io/rpc"); // 3-ETH/USD const poolAddress = "0x54114e9e1eEf979070091186D7102805819e916B"; // option 1 (async () => { const pool = await Pool.Create({ address: poolAddress, provider }); console.log("First example long price", pool.getLongTokenPrice().toNumber()); })() // option 2 Pool.Create({ address: poolAddress, provider }).then((pool) => { // pool initialized console.log("Second example long price", pool.getLongTokenPrice().toNumber()); // this log will be the same as above }) ``` Once the pool is initialised you can use any of the functions listed within the docs. ### Tokens To interact the tokens you can instantiate a token direcly if you know the contract address, or it is automatically done when creating a pool. The two pool tokens (`pool.longToken` and `pool.shortToken`) implement the same methods as `pool.quoteToken`, so any functions used below can also be called on `pool.quoteToken`. ```javascript import { Pool, SideEnum } from '@tracer-protocol/pools-js'; import ethers from 'ethers'; const provider = new ethers.providers.JsonRpcProvider("https://arb1.arbitrum.io/rpc"); // 3-ETH/USD const poolAddress = "0x54114e9e1eEf979070091186D7102805819e916B"; (async () => { const pool = await Pool.Create({ address: poolAddress, provider }); let token = pool.longToken; console.log("First example token name", token.name) // or if you know the token contract token = await PoolToken.Create({ address: pool.longToken.address, provider, side: SideEnum.long }) console.log("Second example token name", token.name) })() ``` ### Static Pool and Token Data This SDK provides a list of known addresses and details relating to perpetual pools. This static data can be imported like so: ```javascript import { poolList, poolMap, tokenMap, } from '@tracer-protocol/pools-js'; // poolList is a mapping from network -> StaticPoolInfo[] // poolMap is a mapping from network -> poolAddress -> StaticPoolInfo // tokenMap is a mapping from network -> tokenSymbol -> StaticTokenInfo ```