All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
log2
andlog
math functions in@stdlib/math
: PR #166- Reserve mode constants in
@stdlib/reserve
, namelyReserveExact
,ReserveAllExcept
,ReserveAtMost
,ReserveAddOriginalBalance
,ReserveInvertSign
,ReserveBounceIfActionFail
: PR #173
- Update the
dump
function to handle addresses: PR #175 - The implicit empty
init
function is now present by default in the contract if not declared: PR #167 let
statements can now be used without an explicit type declaration and determine the type automatically if it was not specified: PR #198
- Augmented assignment operators (
+=
,-=
,*=
,/=
and%=
): PR #87 - Binary and octal literals with underscores as numerical separators: PR #99
- Ternary conditional operator (
condition ? then : else
): PR #97 - The
--version
command-line flag for the Tact executable: PR #137 - The
SendBounceIfActionFail
send mode constant to the standard library: PR #122
- Decimal and hexadecimal literals now allow underscores as numerical separators: PR #99
- The equality and non-equality operators (
==
and!=
) now support slices and strings by comparing the hashes of the left-hand and right-hand sides : PR #105 - Continuous integration now tests the dev tact-template's version with the dev version of Tact: PR #111
- Continuous integration now tests the latest Blueprint's version with the dev version of Tact: PR #152
- Continuous integration now checks there are no ESLint warnings: PR #157
- Relative imports from parent directories: PR #125
- The typechecker failed to identify different types when using the
==
and!=
operators: PR #127 - ESLint warnings for the whole Tact codebase: PR #157
- The versions of some vulnerable dependencies were bumped in
package.json
andyarn.lock
: PR #158 and PR #160
- Continuous integration to run Tact tests on Linux, macOS and Windows: PR #96
- Migration to
@ton
NPM packages: PR #89
- Struct and message identifiers need to be capitalized: PRs #81 and #83
- Fixed the signature of the
checkDataSignature
function instdlib/std/crypto.tact
: PR #50 - Show location info for the internal compiler error 'Invalid types for binary operation': PR #63
- Hacked paths to support builds on Windows
- bitwise and and or operations
- statically compile expressions with bitwise operations if possible
- Add full ABI in bindings
- Fix typescript bindings generation for custom key and value serialization formats
- Fix missing external messages in bindings
reply
is now a method ofContract
instead of global context and changed it's behavior if storage reserve is non-zero in contract.- Logical expressions are now calculated differently:
&&
now does not execute right expression if left isfalse
and||
does not execute right expression if left istrue
. Before it was executed in any case. This change is made in attempt to reduce unexpected behavior. OwnableTransferable
is now sends response to the sender.overwrites
was renamed tooverride
Deployable
trait now sends non-bounceable notifications instead of bounceable ones.
Address
toAddress
maps- Ability to define key and value serializations for maps
sha256
hashingforward
andnotify
functions that can be used to send messages to other contracts using remaining value of incoming messagevirtual
andabstract
constants that can be shared between traitsstorageReserve
constant in every contract that can be used to reserve some storage space by any traitabstract
functions that can be implemented in contractsFactoryDeployable
trait for deploying from factory contract@stdlib/dns
for easier DNS resolution- Opt-in
external
message support - Typed
bounce
receiver andbounce<T>
type modifier commit
for committing state changesinline
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
- Signature of
preloadBits
function - Fixed
readForwardFee
function
- Fix
func
invocation
- Remove tact-bindings binary reference
- Ability to define empty messages (but not structs)
- Support for bounced receivers for message structs
- Bounced messages now skipped first 32 bits before passing it to receivers
- Passing optional structs as arguments
- deploy trait now sends non-bounceable notifications
- changed
forward
and added bounceable and init arguments
Contract.notify()
non-bounceable alternative to reply
commit
function to commit state changes
- Work-around func
0.4.3
bug with pragma processing - Fix external messages with arguments type checking
- Upgrade
func
to0.4.3
- Fix bouncing unknown messages
FactoryDeployable
trait for deploying from factory contract
- Abstract functions
- Abstract and virtual constants in traits
- Rename
overrides
tooverride
- Updated ownership transferring methods
- Unused
public
modifier
reply
now in contract instead of global context
asCell
to maps
- Fix
dnsResolveWallet
compilation error
dns
library- map key and value serialization formats
- Upgrade decompiler to a
@tact-lang/opcodes@0.0.13
- Signature of
preloadBits
function
sha256
function to compute sha256 hash of a text or byte string
- Opt-in external messages support
- Missing implementation of
Address
toAddress
maps
inline
modifier for functions to inline them into the caller
- Fix missing
method_id
inget_abi_ipfs
andlazy_deployment_completed
- Optimization of gas usage of low level primitives
- Optimization of
String.asComment()
that tries to compute it compile time if possible
- Ability to compare cells
- Fixed contract crash when equality check involving nullable variables
- Change logic of
&&
and||
. Now second argument is not calculated when first argument isfalse
ortrue
respectively.
emit
function to emit events
- Fixed possible inconsistent behavior when calling mutating get methods from inside of the contract
- Fixed regression of order of functions in generated files
- Tact now emits func in multiple files, optimized not only for blockchain, but also for human
- Some functions for deep structures with optionals not emitted
- Crash in bindings generator on boolean value in dictionary
overwrites
->override
- Invalid
check
function error generation - Error message for
address(0)
sender()
function to get message sender address
- Upgrade
func
to0.4.2
- Windows paths support
pow
is now compile-only function
- Use new FunC wasm bundle
- exported
check
function for language server support
- Contracts now can be deployed only to the basic workchain unless
masterchain
settrue
- Checking field initialization in init function
- Contracts now work only with basic workchain. To enable masterchain support set
masterchain: true
intact.conf.json
pow
function for exponentiationaddress()
compile-time function for creating addresses from stringscell()
compile-time function for creating cells from base64 stringsinterfaces
field to ABI- report workchain support in interfaces
logger
interface to programmatic API
verify
function to verify compiled package
- Fixing npm exports
- Fixing npm exports for typescript
- Fixing npm exports for typescript
- Fixed browser/node typings and exports
- Fixed browser environment execution
- Fixed missing
mkdirp
dependency
- Fixed cli command
@ton-lang/compiler/node
to invoke compiler from node similar how cli works@ton-lang/compiler/browser
to invoke compiler from browser
- Removed jetton library from stdlib. It would be re-introduced after 1.0 version with more thought put into it.
- Display line and column numbers in error messages to be able to navigate to the error in the editor
- Execution order of struct and message fields
initOf
argument type checks
- Tact contracts are now Argument-addressable meaning that they depend on init arguments and code hash only. Init function is now called when first valid message is received.
- Refactoring of allocator
- Moving contract's load function to the beginning of the execution
- Moving contract's save function to the end of the execution
- moving
debug
flag fromexperimental
toparameters
intact.config.json
- Unknown fields in config are now considered an error
- Allow contracts without fields
- Typescript bindings are now working in browser and doesn't have
ton-emulator
dependency map
syntax now uses<>
instead of[]
for future compatibility with generics
- Allow
Builder
type as a field type similar toCell
andSlice
- Allow
String
type as a field type
- Error codes in reports
- Client-friendly typescript bindings
- Change repository locations
emptyMap()
for creating empty maps- Allowing assigning
null
value to a map variable (same as callingemptyMap()
)
- Update
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
- Importing
func
files
- Upgrade
func
to0.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
- Optional
Address
fields in typescript bindings
Address.asSlice
for manual address parsing@stdlib/content
library withcreateOffchainContent
functions
>>
and<<
operations- Type checking of struct constructors
- Fix missing func compiler in distributive
- TextMate Grammar for syntax highlighting
- Embed
func
compiler to package - Better builder types
- Moved docs to
ton-docs
repository
beginTailString
andbeginStringFromBuilder
for starting aStringBuilder
Slice.asString
for converting slice to aString
(without checks of contents)
- Fixing passing non-nullable type as second argument to map's
set
operation
- New
2022.v12
func compiler
- Improve gas usage in
storeBool
-newAddress
function to create a new address from chain and hash
-getConfigParam
to get system configuration
- Deep contract dependencies
loadAddress
inSlice
Fixing missing NPM release
- Changed message id algorithm to the one based on type signatures instead of tlb
- Dictionaries in typescript bindings
- Introduced packaging compilation step that packages a contract to a single package that can be deployed in predictable way.
tact-bindings
to build bindings to non-tact contracts
- Assignability type checks
toCell
to all structs and messages- restored disassembler as part of a compilation flow
typescript
bindings parser of structs and messages
abi.pack_cell
andabi.pack_slice
- Updated codegen to prefix function names with a
$
to avoid clashing with system functions random
andrandomInt
that are correctly initialized on first use unlike native one- Changed the way get and init methods expect their arguments and return values to match func-like primitives
- non-nullable value could break the nullable variable memory representation
- Large bindings generator refactoring to match new
ton-core
andton-emulator
packages
Deployable
trait in@stdlib/deploy
- Constants in contracts
- Global constants
- Added
SendRemainingBalance
,SendRemainingValue
,SendIgnoreErrors
,SendPayGasSeparately
,SendDestroyIfZero
constants in stdlib - Added
emptyCell
andemptySlice
helpers - Added jettons example
require
now accepts two arguments, second one must be a string literal that has error message. This error message then will be exported to ABI- Optional
Address
fields are not encoded using native representation
- Renamed Map's
get2
toget
and removingget
from keywords list.
- Fixed missing call arguments verification
String
literals and variablesInt.toString()
andInt.toFloatString()
StringBuilder
for gas-efficient string building- Global compile-time
ton
function that converts string to Int during compile time. checkDataSignature
similar to funccheck_data_signature
String.asComment
for conversion text to a comment payloadResumable
trait, allows to resume contract operations once it 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 functionsSlice.loadCoins
that reads coins from slicemyBalance
that returns current balance of a contract before execution phase
contractAddress
now accepts single argument of typeStateInit
and always produces address for workchain. Old method is renamed tocontractAddressExt
.hashCell
andhashSlice
are now extension functionhash
onSlice
andCell
- Removed some keywords such as
message
,contract
,init
to allow use this names as variable names - Renamed
receiveBounced
tobounced
- Fixing importing tact with providing extension, now
import "./lib";
andimport "./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
supported_interfaces
TEP support. TACT now automatically builds a list of supported interfaces of a contractIPFS
-based ABI reporting. TACT now automatically calculates and embeds ABI hash into smart contract and prepares a file to upload to IPFS.