0.1.0 • Published 8 months ago

@gaspump/sdk v0.1.0

Weekly downloads
-
License
ISC
Repository
github
Last release
8 months ago

⛽️ GasPump SDK

High-level overview of trading on GasPump

When a token is deployed, it immediately becomes tradable using a bonding curve. When it collects the hardcap (currently 1000 TON), liquidity is automatically deposited to DeDust.

There are 2 phases of the token lifecycle: 1. Bonding Curve - During this phase, the token is tradable using the bonding curve formula. - Users can buy and sell tokens. - Users trade wrapped tokens ($gasXXX).

  1. DEX (DeDust)
    • Before trading on DeDust, users need to unwrap their $gasXXX and get $XXX tokens.
    • Unwrapping is performed 1:1.
    • Unwrapping is required so that nobody can create (and break) a liquidity pool before the hardcap is reached.

Features

  • SDK for GasPump smart contract interactions
  • (soon) SDK for GasPump API

Installation

npm install @gaspump/sdk

Example usage (buy and sell)

import { WalletContractV4, TonClient } from '@ton/ton';
import { Address, toNano, fromNano } from '@ton/core';
import { mnemonicToPrivateKey } from "@ton/crypto";

import { GaspumpJetton } from '../src/contracts/GaspumpJetton';
import { JettonWallet } from '../src/contracts/JettonWallet';
import { calcBuyTonAmount, waitUntilContractIsDeployed, waitUntilWalletSeqnoChanges } from '../src/utils/utils';


const tonClient = new TonClient({
    endpoint: 'https://toncenter.com/api/v2/jsonRPC',
    // apiKey: '',
})

async function main() {
    // Read command-line arguments
    const args = process.argv.slice(2);
    const jettonAddress = Address.parse(args[0]);
    const walletMnemonics = args[1];

    // setup wallet
    const walletMnemonicList = walletMnemonics.split(" ");
    let keyPair = await mnemonicToPrivateKey(walletMnemonicList);
    let wallet = tonClient.open(WalletContractV4.create({ workchain: 0, publicKey: keyPair.publicKey }));
    let sender = wallet.sender(keyPair.secretKey)

    // setup contracts
    let gaspumpJetton = tonClient.open(GaspumpJetton.createFromAddress(jettonAddress));

    const jettonWalletAddress = await gaspumpJetton.getJettonWalletAddress(wallet.address);
    let jettonWallet = tonClient.open(JettonWallet.createFromAddress(jettonWalletAddress));

    // buy some jettons
    const tonAmount = toNano("1.0");
    const buyTonAmount = calcBuyTonAmount(tonAmount);

    const estimatedJettonAmount = await gaspumpJetton.getEstimateBuyJettonAmount(buyTonAmount);

    console.log(`Buying for 1.0 TON...`);
    let seqno = await wallet.getSeqno()
    await gaspumpJetton.sendBuy(sender, {
        tonAmount: buyTonAmount,
        slippage: 0.1,  // 10% slippage
        doCheckTradeState: true,
    });
    await waitUntilWalletSeqnoChanges(wallet, seqno)

    // check the balance
    await waitUntilContractIsDeployed(jettonWallet.address, tonClient);

    let balance = await jettonWallet.getBalance();
    console.log(`✅ Successfully bought ${fromNano(balance)} jettons (estimated: ${fromNano(estimatedJettonAmount)})`);

    // sell all the jettons
    console.log(`Selling all ${fromNano(balance)} jettons...`);

    seqno = await wallet.getSeqno()
    await gaspumpJetton.sendSell(sender, {
        jettonAmount: balance,
        jettonWallet: jettonWallet,
        doCheckTradeState: true,
    });
    await waitUntilWalletSeqnoChanges(wallet, seqno)

    console.log(`✅ Successfully sold ${fromNano(balance)} jettons`);
}

main().catch(console.error);

Contributing

Contributions are welcome! Please fork the repository and submit a pull request.

0.1.0

8 months ago

0.0.7

12 months ago

0.0.6

12 months ago

0.0.5

12 months ago

0.0.4

12 months ago

0.0.3

12 months ago

0.0.2

12 months ago

0.0.1

12 months ago