Skip to content

Work-in-progress: Jetton implementation in Tact compatible with TEP-74 (do not use in production yet)

License

Notifications You must be signed in to change notification settings

tact-lang/jetton

Repository files navigation

Jetton (Fungible Token) Implementation in Tact

Work in Progress

This will definitely be a stable version of Jettons, but not for now. Please, do not use this code in production. It might have some bugs.

Overview

This project includes a complete setup for working with Tact-based Jetton smart contracts. It provides:

  • A pre-configured Tact compiler.
  • Smart contracts written in the Tact language.
  • TypeScript + Jest testing environment with @ton/sandbox.

Goals

This implementation is fully compatible with the following TON standards:

You can use this implementation as an alternative to the reference Jetton contracts available in the TON Blockchain repository.

Getting Started

1. Install Dependencies

Run the following command to install all required dependencies:

yarn install

2. Build Contracts

Compile the smart contracts with:

yarn build

3. Deploy Contracts

Customize your Jetton by editing the contract.deploy.ts file. This file also includes a detailed deployment guide. Deploy the contracts with:

yarn deploy

4. Test Contracts

Run tests in the @ton/sandbox environment:

yarn test

Jetton Architecture

If you’re new to Jettons, read the TON Jettons Processing.

Project Structure

Smart contracts, their tests and the deployment script are located in the sources/ directory:

sources/
│
│   # Contracts and auxiliary Tact code
├── jetton_minter.tact
├── jetton_wallet.tact
├── messages.tact
│
│   # Tests
├── contract.spec.ts
│
│   # Deployment script
├── contract.deploy.ts
│
│   # Miscellaneous utility things
│   # used for tests and deployments
├── contract.read.ts
└── utils/

Note, that tests and the deployment script require the compiled contracts to be present in the sources/output/ directory.

The configuration for the Tact compiler is in tact.config.json in the root of the repository. In most cases you won't need to change this file.

Smart Contracts Structure

The main smart contract is jetton_minter.tact, it imports messages.tact and jetton_wallet.tact. With the default configuration of tact.config.json targeting jetton_minter.tact, they're all compiled automatically.

Inherited traits

Jetton Minter uses only OwnableTransferable, which is inherited from the Ownable trait. Jetton Wallet only uses the Ownable trait. All these traits come from the Tact's standard libraries.

Schemes of inheritance and imports:

graph LR
    B[jetton_minter.tact] -->|import| A[messages.tact]
    C[jetton_wallet.tact] -->|import| A[messages.tact]
    B[jetton_minter.tact] -->|import| C[jetton_wallet.tact]

    C[jetton_wallet.tact] -->|uses| E[ownable]
    B[jetton_minter.tact] -->|uses| F[ownableTransferable]
    F[ownableTransferable] -->|inherits| E[ownable]

    class E,F ownableStyle;

    classDef ownableStyle stroke-width:2,rx:25,ry:25;

Loading

Read more about those traits in the Tact standard library.

Best Practices

License

This project is licensed under the MIT License.

About

Work-in-progress: Jetton implementation in Tact compatible with TEP-74 (do not use in production yet)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published