Language
Guides
Changelog

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog (opens in a new tab), and this project adheres to Semantic Versioning (opens in a new tab).

[1.1.3] - 2023-06-28

Added

  • bitwise 'and' and 'or' operations
  • statically compile expressions with bitwise operations if possible

[1.1.2] - 2023-04-28

Added

  • Add full ABI in bindings

[1.1.1] - 2023-04-21

Fixed

  • Fix typescript bindings generation for custom key and value serialization formats
  • Fix missing external messages in bindings

[1.1.0] - 2023-04-19

⚡️ Breaking changes

  • reply is now a method of Contract instead of global context and changed its behavior if the storage reserve is non-zero in the contract.
  • Logical expressions are now calculated differently: && now does not execute the right expression if the left is false and || does not execute the right expression if the left is true. Before it was executed in any case. This change is made in an attempt to reduce unexpected behavior.
  • OwnableTransferable now sends a response to the sender.
  • overwrites was renamed to override
  • Deployable trait now sends non-bounceable notifications instead of bounceable ones.

Features

  • Address to Address maps
  • Ability to define key and value serializations for maps
  • sha256 hashing
  • forward and notify functions that can be used to send messages to other contracts using the remaining value of the incoming message
  • virtual and abstract constants that can be shared between traits
  • storageReserve constant in every contract that can be used to reserve some storage space by any trait
  • abstract functions that can be implemented in contracts
  • FactoryDeployable trait for deploying from factory contract
  • @stdlib/dns for easier DNS resolution
  • Opt-in external message support
  • Typed bounce receiver and bounce<T> type modifier
  • commit for committing state changes
  • inline modifier for functions for inlining them into the caller
  • Ability to define empty messages (but not structs)
  • Some string-related operations are now computed at compile time if possible

Fixed

  • Signature of preloadBits function
  • Fixed readForwardFee function

[1.0.0] - 2023-03-08

Added

  • sender() function to get the message sender address
  • pow function for exponentiation
  • address() compile-time function for creating addresses from strings
  • cell() compile-time function for creating cells from base64 strings
  • interfaces field to ABI
  • report workchain support in interfaces
  • exported check function for language server support
  • logger interface to programmatic API
  • verify function to verify the compiled package

Changed

  • Upgrade func to 0.4.2
  • Contracts now work only with basic workchain. To enable masterchain support set masterchain: true in tact.conf.json
  • Contracts now can be deployed only to the basic workchain unless masterchain set true
  • Checking field initialization in the init function

Fixed

  • Windows paths support

Removed

  • Removed Jetton library from stdlib. It would be re-introduced after the 1.0 version with more thought put into it.

[0.10.1] - 2023-02-23

Added

  • Display line and column numbers in error messages to be able to navigate to the error in the editor

Fixed

  • Execution order of struct and message fields
  • initOf argument type checks

[0.10.0] - 2023-02-23

Changed

  • Tact contracts are now Argument-addressable (opens in a new tab) meaning that they depend on init arguments and code hash only. The init function is now called when the first valid message is received.
  • Refactoring of allocator
  • Moving the contract's load function to the beginning of the execution
  • Moving the contract's save function to the end of the execution
  • moving the debug flag from experimental to parameters in tact.config.json
  • Unknown fields in the config are now considered an error
  • Allow contracts without fields
  • Typescript bindings are now working in the browser and don't have ton-emulator dependency
  • map syntax now uses <> instead of [] for future compatibility with generics

Added

  • Allow the Builder type as a field type similar to Cell and Slice
  • Allow String type as a field type

[0.9.3] - 2023-02-19

Added

  • Error codes in reports
  • Client-friendly typescript bindings

Changed

  • Change repository locations

[0.9.2] - 2023-02-05

Added

  • emptyMap() for creating empty maps
  • Allowing assigning the null value to a map variable (same as calling emptyMap())

[0.9.1] - 2023-02-03

Changed

  • Update the dump function to handle booleans and strings, better type checking or arguments
  • Report org.ton.debug.v0 interface if debug mode is enabled
  • Update bindings generator to support ton-emulator >= v2.1.0

[0.9.0] - 2023-02-02

Added

  • Importing func files

Changed

  • Upgrade func to 0.4.1
  • Enforce func version in generated files
  • Enable critical pragmas by default
  • Enable inlining in a lot of places thanks to fixed crashes in func

[0.8.11] - 2023-01-28

Fixed

  • Optional Address fields in typescript bindings

Added

  • Address.asSlice for manual address parsing
  • @stdlib/content library with createOffchainContent functions

[0.8.10] - 2023-01-27

Fixed

  • >> and << operations
  • Type checking of struct constructors

[0.8.9] - 2023-01-25

Fixed

  • Fix missing func compiler in distributive

[0.8.8] - 2023-01-25

Added

  • TextMate Grammar for syntax highlighting

Changed

  • Embed func compiler to package
  • Better builder types
  • Moved docs to ton-docs repository

[0.8.7] - 2023-01-13

Added

  • beginTailString and beginStringFromBuilder for starting a StringBuilder
  • Slice.asString for converting slice to a String (without checks of contents)

[0.8.6] - 2023-01-10

Fixed

  • Fixing passing non-nullable type as second argument to map's set operation

Changed

  • New 2022.v12 func compiler

[0.8.5] - 2023-01-09

Changed

  • Improve gas usage in storeBool

[0.8.4] - 2023-01-09

Added

-newAddress function to create a new address from chain and hash -getConfigParam to get system configuration

[0.8.3] - 2023-01-09

Fixed

  • Deep contract dependencies

[0.8.2] - 2023-01-08

Added

  • loadAddress in Slice

[0.8.1] - 2023-01-07

Fixing missing NPM release

[0.8.0] - 2023-01-07

Changed

  • Changed message ID algorithm to the one based on type signatures instead of TLB

Added

  • Dictionaries in typescript bindings
  • Introduced a packaging compilation step that packages a contract to a single package that can be deployed predictably.
  • tact-bindings to build bindings to non-tact contracts

[0.7.1] - 2023-01-04

Fixed

  • Assignability type checks

[0.7.0] - 2023-01-04

Added

  • toCell to all structs and messages
  • restored disassembler as part of a compilation flow
  • typescript bindings parser of structs and messages

Removed

  • abi.pack_cell and abi.pack_slice

Changed

  • Updated code generation to prefix function names with a $ to avoid clashing with system functions
  • random and randomInt that are correctly initialized on first use unlike the native one
  • Changed the way get and init methods expect their arguments and return values to match func-like primitives

Fixed

  • non-nullable value could break the nullable variable memory representation

[0.6.0] - 2023-01-03

Changed

  • Large bindings generator refactoring to match new ton-core and ton-emulator packages

Added

  • Deployable trait in @stdlib/deploy

[0.5.0] - 2022-12-23

Added

  • Constants in contracts
  • Global constants
  • Added SendRemainingBalance, SendRemainingValue, SendIgnoreErrors, SendPayGasSeparately, SendDestroyIfZero constants in stdlib
  • Added emptyCell and emptySlice helpers
  • Added jettons example

Changed

  • require now accepts two arguments: the second one must be a string literal that has an error message. This error message then will be exported to ABI
  • Optional Address fields are not encoded using native representation

[0.4.0] - 2022-12-22

Changed

  • Renamed Map's get2 to get and removing get from keywords list.

Fixed

  • Fixed missing call arguments verification

[0.3.0] - 2022-12-22

Added

  • String literals and variables
  • Int.toString() and Int.toFloatString()
  • StringBuilder for gas-efficient string building
  • Global compile-time ton function that converts a string to Int during compile time.
  • checkDataSignature similar to func check_data_signature
  • String.asComment for conversion text to a comment payload
  • Resumable trait, allows to resume operations, once the contract was stopped
  • Comment receiver that allows to receive arbitrary comment
  • String.asSlice cast string to a slice for parsing
  • Binary shift operators >> and <<
  • Slice.fromBase64 that converts text slice that has base64 to binary representation (both classic and URL)
  • Slice.asCell, Builder.asCell, Cell.asSlice, Builder.asCell convenience functions
  • Slice.loadCoins that reads coins from a slice
  • myBalance that returns the current balance of a contract before the execution phase

Changed

  • contractAddress now accepts a single argument of type StateInit and always produces an address for the workchain. The old method is renamed to contractAddressExt.
  • hashCell and hashSlice are now extension functions hash on Slice and Cell
  • Removed some keywords such as message, contract, init to allow the use of these names as variable names
  • Renamed receiveBounced to bounced

Fixed

  • Fixing importing tact with providing extension, now import "./lib"; and import "./lib.tact"; are equivalent.
  • Fixing extension function generation
  • Fixing clashing of variable names with func primitives and global functions
  • Fix fallback and bounce argument type resolving
  • Fixed loadUint/preloadUint
  • Fixed invalid generation of >= and > operators

[0.2.0]

Added

  • supported_interfaces TEP support. TACT now automatically builds a list of supported interfaces of a contract
  • IPFS-based ABI reporting. TACT now automatically calculates and embeds ABI hash into smart contracts and prepares a file to upload to IPFS.