Skip to main content

Overview

A high-level language FunC is used to program smart contracts on TON.

FunC is a domain-specific, C-like, statically typed language. Here is a simple example method for sending money written in FunC:

() send_money(slice address, int amount) impure inline {
var msg = begin_cell()
.store_uint(0x10, 6) ;; nobounce
.store_slice(address)
.store_grams(amount)
.end_cell();

send_raw_message(msg, 64);
}

FunC programs are compiled into Fift assembler code, which generates corresponding bytecode for the TON Virtual Machine.

Further this bytecode (actually a tree of cells, like any other data in TON Blockchain) can be used for creating smart contracts in the blockchain or can be run on a local instance of TVM.

You can find more information about FunC in the DOCUMENTATION section.

info

FunC documentation was initially written by @akifoq.

Compiler

Compile with JS

Most convenient and quick way to begin develop and compile smart contracts is using Blueprint framework. Read more in Blueprint section.

npm create ton@latest

Compile with original binaries

If you want to use native TON compiler FunC locally you need binaries setup on your machine. FunC compiler binaries for Windows, MacOS (Intel/M1), and Ubuntu can be downloaded from:

info

At the same time you can always make binaries from sources like:
FunC compiler source code (read how to compile a FunC compiler from sources).

Tutorials

starter tip

The best place to start to develop using FunC: INTRODUCTION

Other materials gracefully provided by the experts from the community:

Contests

Participating in contests is a great way to learn FunC.

You can also study previous competitions for learning purposes:

Smart contract examples

Standard basic smart contracts like wallets, electors (manages validation on TON), multi-signature wallets, etc. can be a reference when studying.

Changelog

History of funC updates.