Skip to content

TegroTON/ton3-client

Repository files navigation

💎 @tegro/ton3-client

License ton3 npm TON

⚠️ Work in progress, API can (and most likely will) be changed!

How to install

npm i @tegro/ton3-client

Simple usage

import { TonClient } from '@tegro/ton3-client';
import { Coins, Address } from 'ton3-core';

const endpoint = 'https://api.toncenter.com/jsonRPC'; // jsonRPC API url
const apiKey = 'HERE_WILL_BE_YOUR_API_KEY_IF_IT_IS_REQUIRED';

const tonClient = new TonClient({ endpoint, apiKey });

// This is a part of Tegro Wallet
const getBestWalletTypeByPublicKey = async (publicKey: Uint8Array) => {
    const walletTypes = ['org.ton.wallets.v3.r2', 'org.ton.wallets.v4.r2'];
    let maxBalance = new Coins(0);
    let bestContract = walletTypes[0];
    for (const walletType of walletTypes) {
        const wallet = Wallet.openByPubKey({
            workchain: 0,
            publicKey,
            version: walletType,
        });
        const balance = await tonClient.getBalance(wallet.address);
        if (balance.gt(maxBalance)) {
            maxBalance = balance;
            bestContract = walletType;
        }
    }
    return bestContract;
}

TON DNS example

// ... tonClient has been declared before

const getAddressFromDomain = async (domain: string) => {
    if (!(/\S+.ton\b/.test(domain))) return undefined; // is not domain
    try {
        const mbAddr = await tonClient.DNS.getWalletAddress(domain);
        return mbAddr instanceof Address ? mbAddr : undefined;
    } catch {
        return undefined;
    }
}

Jettons example

// ... tonClient has been declared before

const jettonsExample = async (jettonAddress: Address, myAddress: Address) => {
    // user jetton wallet address
    const jettonWallet = await tonClient.Jetton.getWalletAddress(jettonAddress, myAddress);
    
    // jetton metadata
    const { content } = await tonClient.Jetton.getData(jettonAddress);
    
    const deployed = await tonClient.isContractDeployed(jettonWallet);
    
    // user jetton balance
    const balance = deployed ? await tonClient.Jetton.getBalance(jettonWallet) : new Coins(0, { decimals: meta.decimals });
    
    // user jetton transactions
    const transactions = deployed ? await tonClient.Jetton.getTransactions(jettonWallet) : []
}

Bug Report

If you have questions or suggestions, please file an Issue.

License

MIT License