Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ndatg/ton-http-api
The lightweight TON Typescript Library
https://github.com/ndatg/ton-http-api
api blockchain client crypto http library lightweight nodejs telegram ton typescript
Last synced: 15 days ago
JSON representation
The lightweight TON Typescript Library
- Host: GitHub
- URL: https://github.com/ndatg/ton-http-api
- Owner: ndatg
- License: mit
- Created: 2024-02-07T14:46:53.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2024-07-18T15:36:49.000Z (4 months ago)
- Last Synced: 2024-09-30T00:48:41.552Z (about 1 month ago)
- Topics: api, blockchain, client, crypto, http, library, lightweight, nodejs, telegram, ton, typescript
- Language: TypeScript
- Homepage: https://ndatg.github.io/ton-http-api/
- Size: 379 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ton-http-api
[![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](https://choosealicense.com/licenses/mit/)
The lightweight TON typescript library includes api, subscribers, and clients for interacting with smart contracts.
## Documentation
Go to the [documentation](https://ndatg.github.io/ton-http-api/) for detailed information.
## Migration
If you need an older version of the library, use the [migrate](https://github.com/ndatg/ton-http-api/tree/migrate) branch.
## Components
| Component | Status |
| ----------------- | ------------------------------------------------------------------ |
| [Toncenter API V2](https://toncenter.com/api/v2/) | ✅ |
| [Toncenter API V3](https://toncenter.com/api/v3/) | ✅ |
| Client for toncenter API V2 | ✅ |
| Client for toncenter API V3 | ✅ |
| Block subscriber for toncenter API V2 | ✅ |
| Block subscriber for toncenter API V3 | ✅ |## Installation
```bash
npm install ton-http-api --save
```## Usage/Examples
Some of the examples can be found in the [examples](https://github.com/ndatg/ton-http-api/tree/main/examples) directory.
Register your API key in the [@tonapibot](https://t.me/tonapibot) to get access with higher limits.
### Api V3
In most cases, I recommend using toncenter `TonHttpApiV3`, this is the new and improved version.
```javascript
import { TonHttpApiV3 } from "ton-http-api";const api = new TonHttpApiV3({
endpoint: "https://toncenter.com/",
apiKey: "" // optional
});const masterchainInfo = await api.getMasterchainInfo();
console.log(masterchainInfo);const nftCollections = await api.getNftCollections({
collection_address: "EQCA14o1-VWhS2efqoh_9M1b_A9DtKTuoqfmkn83AbJzwnPi"
});
console.log(nftCollections);const nftItems = await api.getNftItems({
collection_address: "EQCA14o1-VWhS2efqoh_9M1b_A9DtKTuoqfmkn83AbJzwnPi"
});
console.log(nftItems);const jettonWallets = await api.getJettonWallets({
jetton_address: "EQBynBO23ywHy_CgarY9NK9FTz0yDsG82PtcbSTQgGoXwiuA"
});
console.log(jettonWallets);
```### Api V2
You can also use the old toncenter `TonHttpApiV2`.
```javascript
import { TonHttpApiV2 } from "ton-http-api";const api = new TonHttpApiV2({
endpoint: "https://toncenter.com/",
apiKey: "" // optional
});const data = await api.getMasterchainInfo();
console.log(data);const data = await api.getTransactions("EQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HUn4bpAOg8xqB2N");
console.log(data);
```### Client V2 / V3
`TonClientV2` and `TonClientV3` provide compatibility with other libraries (e.g. deploy and test smart contracts).
`TonClientV2` works in the same way as `TonClientV3`, but uses `TonHttpApiV2`.
You can use `client.api` to work with api methods.
For example, let's do a highload wallet deploy!
```bash
npm install ton-highload-wallet-contract @ton/crypto @ton/core --save
``````javascript
import { TonClientV3 } from "ton-http-api";
import { HighloadWalletContractV2 } from "ton-highload-wallet-contract";
import { mnemonicToPrivateKey } from "@ton/crypto";
import { internal } from "@ton/core";const client = new TonClientV3({
endpoint: "https://toncenter.com/",
apiKey: "", // optional
});const mnemonic = [ /* ... */ ];
// create contract
const key = await mnemonicToPrivateKey(mnemonic);
const contract = client.open(HighloadWalletContractV2.create({ publicKey: key.publicKey, workchain: 0 }));
console.log(`send test coins to the address: ${contract.address}`);// send transfer
await contract.sendTransfer({
secretKey: key.secretKey,
messages: [
internal({
to: "EQBYivdc0GAk-nnczaMnYNuSjpeXu2nJS3DZ4KqLjosX5sVC",
value: "0.2",
body: "test 1",
bounce: false,
}),
internal({
to: "EQBYivdc0GAk-nnczaMnYNuSjpeXu2nJS3DZ4KqLjosX5sVC",
value: "0.2",
body: "test 2",
bounce: false,
})
],
});```
### Subscriber V3
You can use `TonSubscriberV3` to listen blocks in the blockchain, it uses the `TonHttpApiV3`.
The `getTransactionsByMasterchainBlock` method gets transactions from both masterchain and shardchains.
```javascript
import {
TonHttpApiV3, TonSubscriberV3,
TonMemoryBlockStorageV3, SchemaV3
} from "ton-http-api";const api = new TonHttpApiV3({
endpoint: "https://toncenter.com/",
apiKey: "" // optional
});const storage = new TonMemoryBlockStorageV3();
const subscriber = new TonSubscriberV3({
api: api,
storage: storage,
// logger: logger,
// masterchainTickSleepTime: 3000,
// startSeqno: 35744539
});
await subscriber.start();subscriber.on("block", async (args: { block: SchemaV3.Block }) => {
try {let offset = 0;
let stopped = false;
let transactions: any = [];do {
try {
const data = await api.getTransactionsByMasterchainBlock(args.block.seqno, {
limit: 256,
offset
});
transactions = [...transactions, ...data.transactions];if (data.transactions.length < 256) {
stopped = true;
break;
}offset += 256;
} catch (error) {
console.log(error);
}
} while(!stopped);console.log(`seqno: ${args.block.seqno} / transactions: ${transactions.length}`);
} catch (error) {
console.log(error);
}
});
```### Subscriber V2
You can use `TonSubscriberV2` to listen blocks in the blockchain, it uses the `TonHttpApiV2`.
```javascript
import {
TonHttpApiV2, TonSubscriberV2,
TonMemoryBlockStorageV2, SchemaV2
} from "ton-http-api";const api = new TonHttpApiV2({
endpoint: "https://toncenter.com/",
apiKey: "" // optional
});const storage = new TonMemoryBlockStorageV2();
const subscriber = new TonSubscriberV2({
api: api,
storage: storage,
// logger: logger,
// masterchainTickSleepTime: 3000,
// shardchainTickSleepTime: 100,
// startSeqno: 35744539
});subscriber.on("block", async (args: { block: SchemaV2.BlockHeader, shards?: SchemaV2.BlockShards }) => {
try {const { workchain, shard, seqno } = args.block.id;
let stopped = false;
let transactions: any = [];
do {
try {
const data = await api.getBlockTransactions(workchain, shard, seqno, {
count: 1024,
});
transactions = [...transactions, ...data.transactions];
stopped = true;
} catch (error) {
console.log(error);
}
} while(!stopped);console.log(`workchain: ${workchain} / seqno: ${seqno} / transactions: ${transactions.length}`);
} catch (error) {
console.log(error);
}
});
```
## FeedbackIf you have any feedback, please reach out to me at telegram [@ndatg](https://t.me/ndatg).