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

@curvefi/waves-api

v1.0.0

Published

JavaScript library for Curve on Waves

Downloads

1

Readme

Waves Curve JS

Setup

Install from npm:

npm install @curvefi/waves-api

Init

Keeper

import curve from "@curvefi/waves-api";


if (!WavesKeeper) alert('Install WavesKeeper: https://docs.waves.tech/en/ecosystem/waves-keeper/');

(async () => {
    try {
        curve.init('https://nodes-testnet.wavesnodes.com', 'Keeper', { signer, chainId: 84 });
    } catch (err) {
        if (error.code === '14') {
            alert('Create WavesKeeper Account');
        } else {
            throw Error(error);
        }
    }
})()

Signer

import curve from "@curvefi/waves-api";

(async () => {
    const signer = new Signer({
        // Specify URL of the node on Testnet
        NODE_URL: 'https://nodes-testnet.wavesnodes.com'
    });
    signer.setProvider(new ProviderWeb('https://testnet.waves.exchange/signer/'));

    await curve.init('https://nodes-testnet.wavesnodes.com', 'Signer', { signer, chainId: 84 });
})()

Read Waves Signer Docs for more info about different providers.

Seed

import curve from "@curvefi/waves-api";
import { SEED, NODE } from "./settings";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 84 });
})()

Notes

  • Amounts can be passed in args either as numbers or strings.
  • depositOrWithdrawBonus and swapPriceImpact methods return %
  • Slippage arg should be passed as %, e. g. 0 < slippage <= 100

General methods

import curve from "@curvefi/waves-api";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 82 });

    // Balances of curve.signerAddress
    const balances1 = await curve.getBalances(['USDN', 'USDT']);
    // OR const balances1 = await curve.getBalances(['5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD', 'DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do']);
    console.log(balances1);
    // [ '30059128.030221', '9952566.702206' ]

    // You can specify addresses for which you get balances
    const balances2 = await curve.getBalances(['USDN', 'USDT'], "3M7rAK6vfnCw9r1G86XJaw7v4kkr6vEKGDk", "3MEGJrFNBPehczb7vcgf8NwT1Fj1G49ZHVY");
    // OR const balances2 = await curve.getBalances(['5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD', 'DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do'], ["3M7rAK6vfnCw9r1G86XJaw7v4kkr6vEKGDk", "3MEGJrFNBPehczb7vcgf8NwT1Fj1G49ZHVY"]);
    console.log(balances2);
    // {
    //     '3M7rAK6vfnCw9r1G86XJaw7v4kkr6vEKGDk': [ '29800000', '19800000' ],
    //     '3MEGJrFNBPehczb7vcgf8NwT1Fj1G49ZHVY': [ '29700000', '19700000' ]
    // }
})()

Pools

Available pools

import curve from "@curvefi/waves-api";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 82 });

    console.log(curve.getPoolList());
    // [ 'waves3pool' ]
})()

Pool fields

import curve from "@curvefi/waves-api";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 82 });

    const pool = curve.getPool('waves3pool');

    pool.id;
    // waves3pool
    pool.name;
    // waves3pool
    pool.fullName;
    // waves3pool
    pool.symbol;
    // waves3pool
    pool.referenceAsset;
    // USD
    pool.address;
    // 3MNNRF9Twpu7BuHobGfsof1MF4oKrpam8FW
    pool.lpToken;
    // Asm98KTGH615QvbMrapKZzGLqp8yjMGCrwKReKbKmez3
    pool.gauge;
    // 3MJdoPSoZ7kmkfY61pGBsCYEDdZ3ZeDPRnT
    pool.coins;
    // [ 'USDN', 'USDT', 'USDC' ]
    pool.coinIds;
    // [
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD',
    //     'DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do',
    //     'CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L'
    // ]
    pool.decimals;
    // [ 6, 6, 6 ]
    pool.lpTokenDecimals;
    // 6
})()

Wallet balances for pool

import curve from "@curvefi/waves-api";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 82 });

    const pool = curve.getPool('waves3pool');

    // Current address (signer) balances
    await pool.wallet.balances();
    // {
    //     lpToken: '599.971465',
    //     gauge: '0',
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '30059128.030221',
    //     DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19987762.381362',
    //     CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9952566.702206'
    // }
    await pool.wallet.lpTokenBalances();
    // { lpToken: '599.971465', gauge: '0' }
    await pool.wallet.coinBalances();
    // {
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '30059128.030221',
    //     DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19987762.381362',
    //     CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9952566.702206'
    // }
    await pool.wallet.rewardTokenBalances();
    // {
    //     GGmeY8wGA8y2apHrxLrUXCgF8REBtg5WGwgYS4j2FMJ2: '0',
    //     ML5NV692BwwGctQfQZe6wiP7i5CV3VwsmFUz2dR1PFH: '0'
    // }


    // For every method above you can specify address
    await pool.wallet.balances("3M7rAK6vfnCw9r1G86XJaw7v4kkr6vEKGDk");
    // {
    //     lpToken: '0',
    //     gauge: '600000',
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '29800000',
    //     DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19800000',
    //     CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9800000'
    // }


    // Or several addresses
    await pool.wallet.coinBalances("3M7rAK6vfnCw9r1G86XJaw7v4kkr6vEKGDk", "3MEGJrFNBPehczb7vcgf8NwT1Fj1G49ZHVY");
    // {
    //     '3M7rAK6vfnCw9r1G86XJaw7v4kkr6vEKGDk': {
    //         '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '29800000',
    //         DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19800000',
    //         CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9800000'
    // },
    //     '3MEGJrFNBPehczb7vcgf8NwT1Fj1G49ZHVY': {
    //         '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '29700000',
    //         DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19700000',
    //         CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9700000'
    // }
    // }
})()

Stats

import curve from "@curvefi/waves-api";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 82 });

    const pool = curve.getPool('waves3pool');

    await pool.stats.parameters();
    // {
    //     fee: '0.1',
    //     admin_fee: '0.05',
    //     virtual_price: '1.000077',
    //     A: 720,
    //     future_A: 720,
    //     initial_A: undefined,
    //     future_A_time: 720,
    //     initial_A_time: undefined
    // }
    await pool.stats.balances();
    // [ '1340783.424594', '912176.567704', '547361.662204' ]
    await pool.stats.totalLiquidity();
    // 2800321.654502
    await pool.stats.volume();
    // 1242646.258629
    await pool.stats.baseApy();
    // { day: '7.94191715333079245', week: '1.13455959333297035' }
    await pool.stats.rewardsApy();
    // [
    //     {
    //         token: '9U3bZbDrpQ2TpFw8YvyitZMdKG2Lx8N6uTCJnqEgh6Pp',
    //         symbol: 'CRV Token',
    //         decimals: 8,
    //         price: 1.2,
    //         gauge: '3mybhsp1exjeivdt5ggbsarelfnswzwnnce',
    //         apy: '0.0000'
    //     },
    //     {
    //         token: '2sFcNkyjHFFc5B8jAPuXxcVKc2Q89JVPSAjzKt1ev9fm',
    //         symbol: 'BONUS',
    //         decimals: 1,
    //         price: 1,
    //         gauge: '3mybhsp1exjeivdt5ggbsarelfnswzwnnce',
    //         apy: '0.0000'
    //     }
    // ]
})()

Deposit

import curve from "@curvefi/waves-api";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 82 });

    const pool = curve.getPool('waves3pool');

    await pool.wallet.balances();
    // {
    //     lpToken: '599.971465',
    //     gauge: '0',
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '30059128.030221',
    //     DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19987762.381362',
    //     CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9952566.702206'
    // }

    await pool.depositBalancedAmounts();
    // [ '24379194.57631', '16585922.546544', '9952566.702206' ]
    await pool.depositExpected([100, 100, 100]);
    // 300.018445
    await pool.depositBonus([100, 100, 100]);
    // 0.023838534327447767
    await pool.deposit(['100', '100', '100'], 0.1); // slippage = 0.1%
    // DthYmA37pxhxYQnkdDYn4VpkSjYthp9gKyc5Xg8YNadp

    await pool.wallet.balances();
    // {
    //     lpToken: '899.957178',
    //     gauge: '0',
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '30059028.030221',
    //     DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19987662.381362',
    //     CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9952466.702206'
    // }
})()

Staking

import curve from "@curvefi/waves-api";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 82 });

    const pool = curve.getPool('waves3pool');

    const balances = await pool.wallet.lpTokenBalances();
    // { lpToken: '899.957178', gauge: '0' }

    await pool.stake(balances.lpToken);
    // 4F7zotFJ67EZGnLsaRsjEtWXdCqYxiZAe7nMNXRpdPDY
    await pool.wallet.lpTokenBalances();
    // { lpToken: '0', gauge: '899.957178' }
    await pool.unstake(balances.lpToken);
    // 62cboXHJ7nsxegZzk4ChacQ8Gwtp8x9mza1qf2A8SFyU

    await pool.wallet.lpTokenBalances();
    // { lpToken: '899.957178', gauge: '0' }
})()

Withdraw

import curve from "@curvefi/waves-api";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 82 });

    const pool = curve.getPool('waves3pool');

    await pool.wallet.balances();
    // {
    //     lpToken: '899.957178',
    //     gauge: '0',
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '30059028.030221',
    //     DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19987662.381362',
    //     CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9952466.702206'
    // }

    await pool.withdrawExpected(10);
    // [ '4.788653', '3.257984', '1.955132' ]
    await pool.withdraw('10', 0.1); // slippage = 0.1%
    // 3gXMh1mopu9tVk39RUfZZSTb4FAqfz846nurj2QELzhE

    await pool.wallet.balances();
    // {
    //     lpToken: '889.957178',
    //     gauge: '0',
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '30059032.818874',
    //     DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19987665.639345',
    //     CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9952468.657338'
    // }
})()

Withdraw one coin

import curve from "@curvefi/waves-api";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 82 });

    const pool = curve.getPool('waves3pool');

    await pool.wallet.balances();
    // {
    //     lpToken: '889.957178',
    //     gauge: '0',
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '30059032.818874',
    //     DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19987665.639345',
    //     CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9952468.657338'
    // }

    const expected = await pool.withdrawOneCoinExpected(10, 'USDN');
    // OR const expected = await pool.withdrawOneCoinExpected('10', '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD');
    // OR const expected = await pool.withdrawOneCoinExpected('10', 0);
    console.log(expected);
    // 10.002975
    await pool.withdrawOneCoinBonus(10,'USDN');
    // 0.012038550558512755
    const tx = await pool.withdrawOneCoin(10, 'USDN', 0.1); // slippage = 0.1%
    // OR const tx = await pool.withdrawOneCoin('10', '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD');
    // OR const tx = await pool.withdrawOneCoin('10', 0);
    console.log(tx);
    // PzeJUDhtoX9Mpc3tpLyeqT4sKzNUZ85nReYo1HiWUtf

    await pool.wallet.balances();
    // {
    //     lpToken: '879.957178',
    //     gauge: '0',
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '30059042.821849',
    //     DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19987665.639345',
    //     CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9952468.657338'
    // }
})()

Swap

import curve from "@curvefi/waves-api";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 82 });

    const pool = curve.getPool('waves3pool');

    await pool.wallet.coinBalances();
    // {
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '30059042.821849',
    //     DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19987665.639345',
    //     CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9952468.657338'
    // }

    const expected = await pool.swapExpected('USDN','USDT', 10);
    // OR const expected = await pool.swapExpected('5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD', 'DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do', '10');
    // OR const expected = await pool.swapExpected(0, 1, '10');
    console.log(expected);
    // 9.984499
    const swapTx = await pool.swap('USDN','USDT', 10, 0.1); // slippage = 0.1%
    // OR const swapTx = await pool.swap('5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD', 'DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do', '10');
    // OR const swapTx = await pool.swap(0, 1, 10);
    console.log(swapTx);
    // AaGQMbYVC49RPvM2rAxAZrJhMPxoXmfuuVFPNsheAMmC

    await pool.wallet.coinBalances();
    // {
    //     '5eg2eUvmgBftgsx3NZuCgk5q7195zx7VxNoNWatGS3HD': '30059032.821849',
    //     DJEYQHGZ2LZzr37a5NK7BrYY3XKdAVXAFvaML9SGV7Do: '19987675.623844',
    //     CPsgiCdE97iKU7zW9roH8C3mJ3yHMhGc7bkvTatp3R4L: '9952468.657338'
    // }
})()

Rewards

import curve from "@curvefi/waves-api";

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 82 });

    const pool = curve.getPool('waves3pool');

    await pool.rewardTokens();
    // [
    //     {
    //         token: '9U3bZbDrpQ2TpFw8YvyitZMdKG2Lx8N6uTCJnqEgh6Pp',
    //         symbol: 'CRV Token',
    //         decimals: 8
    //     },
    //     {
    //         token: '2sFcNkyjHFFc5B8jAPuXxcVKc2Q89JVPSAjzKt1ev9fm',
    //         symbol: 'BONUS',
    //         decimals: 1
    //     }
    // ]
    await pool.rewardsProfit();
    // [
    //     {
    //         day: '0',
    //         week: '0',
    //         month: '0',
    //         year: '0',
    //         token: '9U3bZbDrpQ2TpFw8YvyitZMdKG2Lx8N6uTCJnqEgh6Pp',
    //         symbol: 'CRV Token',
    //         price: 1.2
    //     },
    //     {
    //         day: '0',
    //         week: '0',
    //         month: '0',
    //         year: '0',
    //         token: '2sFcNkyjHFFc5B8jAPuXxcVKc2Q89JVPSAjzKt1ev9fm',
    //         symbol: 'BONUS',
    //         price: 1
    //     }
    // ]

    await pool.wallet.rewardBalances();
    // {
    //     GGmeY8wGA8y2apHrxLrUXCgF8REBtg5WGwgYS4j2FMJ2: '0',
    //     ML5NV692BwwGctQfQZe6wiP7i5CV3VwsmFUz2dR1PFH: '0'
    // }

    await pool.claimableRewards();
    // [
    //     {
    //         assetId: 'GGmeY8wGA8y2apHrxLrUXCgF8REBtg5WGwgYS4j2FMJ2',
    //         name: 'CRV Token',
    //         decimals: 8,
    //         amount: '58.74161447'
    //     },
    //     {
    //         assetId: 'ML5NV692BwwGctQfQZe6wiP7i5CV3VwsmFUz2dR1PFH',
    //         name: 'BONUS',
    //         decimals: 1,
    //         amount: '0'
    //     }
    // ]
    await pool.claim();
    // 6gpHpnjHL8372mgAGeL7wYMMc4priQjywrjqEaKP9TwB
    await pool.claimedRewards();
    // [
    //     {
    //         assetId: 'GGmeY8wGA8y2apHrxLrUXCgF8REBtg5WGwgYS4j2FMJ2',
    //         name: 'CRV Token',
    //         decimals: 8,
    //         amount: '58.74161447'
    //     },
    //     {
    //         assetId: 'ML5NV692BwwGctQfQZe6wiP7i5CV3VwsmFUz2dR1PFH',
    //         name: 'BONUS',
    //         decimals: 1,
    //         amount: '0'
    //     }
    // ]

    await pool.wallet.rewardBalances();
    // {
    //     GGmeY8wGA8y2apHrxLrUXCgF8REBtg5WGwgYS4j2FMJ2: '58.74161447',
    //     ML5NV692BwwGctQfQZe6wiP7i5CV3VwsmFUz2dR1PFH: '0'
    // }
})()

User balances and share

(async () => {
    await curve.init(NODE, "Seed", { seed: SEED, chainId: 84 });

    const pool = curve.getPool('waves3pool');
    await pool.userBalances();
    // [ '625782.932618', '731796.575426', '682268.245315' ]

    await pool.userShare();
    // {
    //     lpUser: '900000',
    //     lpTotal: '14379436.268194',
    //     lpShare: '6.258937994604961104',
    //     gaugeUser: '900000',
    //     gaugeTotal: '2089048.252053',
    //     gaugeShare: '43.081819633200441537'
    // }
})()