Forwarded from TON Tech
π¨Dev tools updates
Recently new versions of blueprint, sandbox, test-utils, and create-ton have been released. The most important (and breaking) change is the fact that since blueprint v0.28.0 compilers (func-js, tolk, tact) have become peer dependencies. This means that you can pick and choose any compiler version that you need, as long as its API is compatible with what blueprint expects, but this also means that you need to have them listed in your package.json. If you're creating a new project using create-ton, it will add compiler dependencies automatically. If not and if you're upgrading blueprint in an old project, you will have to install compilers yourself, you can use the template's package.json for reference.
Changes to sandbox and test-utils include better support for extra currencies, which might be of use due to the recent developments in TON.
Recently new versions of blueprint, sandbox, test-utils, and create-ton have been released. The most important (and breaking) change is the fact that since blueprint v0.28.0 compilers (func-js, tolk, tact) have become peer dependencies. This means that you can pick and choose any compiler version that you need, as long as its API is compatible with what blueprint expects, but this also means that you need to have them listed in your package.json. If you're creating a new project using create-ton, it will add compiler dependencies automatically. If not and if you're upgrading blueprint in an old project, you will have to install compilers yourself, you can use the template's package.json for reference.
Changes to sandbox and test-utils include better support for extra currencies, which might be of use due to the recent developments in TON.
π₯10π1
Forwarded from Gram of TON
Telegram and TON Make it Exclusive!
All mini-app developers in Telegram will now exclusively use TON as their blockchain infrastructure. All mini-apps that do not currently use TON should migrate within the next 30 days. TON Connect - TON's Wallet authentication protocol in Telegram - will be the sole wallet connect protocol for every Telegram Mini App, excluding bridging scenarios.
Telegram and TON have updated their documentation, and TON Foundation is giving TG Ads grants to projects who will migrate within the next 30 days to help them get a good start in TON Ecosystem. Check out the grant program and developer guidelines here!
To learn more about this step forward head over to our latest blog article.
All mini-app developers in Telegram will now exclusively use TON as their blockchain infrastructure. All mini-apps that do not currently use TON should migrate within the next 30 days. TON Connect - TON's Wallet authentication protocol in Telegram - will be the sole wallet connect protocol for every Telegram Mini App, excluding bridging scenarios.
Telegram and TON have updated their documentation, and TON Foundation is giving TG Ads grants to projects who will migrate within the next 30 days to help them get a good start in TON Ecosystem. Check out the grant program and developer guidelines here!
To learn more about this step forward head over to our latest blog article.
π30π28π18β€14π3π©2
Forwarded from Tact Kitchen
π Tact v1.5 Audited by Trail of Bits
The security audit for Tact v1.5 has been completed by Trail of Bits, a leading Web3 security firm.
β No high-severity vulnerabilities were found.
π§ Some bugs and points of improvement were discovered and addressed in a new Tact v1.5.4 bugfix release.
Thanks to Trail of Bits for their thorough review!
The report can be accessed at the Trail of Bits GitHub repo: https://github.com/trailofbits/publications/blob/master/reviews/2025-01-ton-studio-tact-compiler-securityreview.pdf
β‘οΈ In the meantime we continue to improve Tact with new language features, gas optimizations (a lot of those lately!), and enhancements to the compilerβs reliability. This ensures a secure and efficient development experience on TON Blockchain.
π Upgrade to Tact 1.5.4, if not already: https://docs.tact-lang.org/book/compile/#upgrades
π² cooking with great care for performance and users
β¨οΈ @tact_kitchen
The security audit for Tact v1.5 has been completed by Trail of Bits, a leading Web3 security firm.
β No high-severity vulnerabilities were found.
π§ Some bugs and points of improvement were discovered and addressed in a new Tact v1.5.4 bugfix release.
Thanks to Trail of Bits for their thorough review!
The report can be accessed at the Trail of Bits GitHub repo: https://github.com/trailofbits/publications/blob/master/reviews/2025-01-ton-studio-tact-compiler-securityreview.pdf
β‘οΈ In the meantime we continue to improve Tact with new language features, gas optimizations (a lot of those lately!), and enhancements to the compilerβs reliability. This ensures a secure and efficient development experience on TON Blockchain.
π Upgrade to Tact 1.5.4, if not already: https://docs.tact-lang.org/book/compile/#upgrades
π² cooking with great care for performance and users
β¨οΈ @tact_kitchen
π22β‘10β€3π€2
Forwarded from ghwnd
Try π act.ghwnd.cc β a flexible no-code message constructor with TonConnect support π
With act, you can create and save a board with different messages for various contracts and sign them however you like β it can even be an admin panel for a contract (use it in testnet β it's meant for experiments, and we take no responsibility).
Key features:
- act has a "bucket": create actions, add them to the bucket, and send them in batches of up to 4/255 actions at a time, depending on the wallet version;
- duplicate actions;
- duplicate cells, copy them in base64, and paste ready-made base64 cells into storeRef;
- hide cells β makes navigation slightly more convenient;
- when sending a token, you can quickly get the jetton wallet address of the connected wallet;
- act includes templates to help you explore popular actions with links to documentation.
Check out this example of a swap on dedust to see how it all works. There's a video guide at the bottom.
π act.ghwnd.cc
With act, you can create and save a board with different messages for various contracts and sign them however you like β it can even be an admin panel for a contract (use it in testnet β it's meant for experiments, and we take no responsibility).
Key features:
- act has a "bucket": create actions, add them to the bucket, and send them in batches of up to 4/255 actions at a time, depending on the wallet version;
- duplicate actions;
- duplicate cells, copy them in base64, and paste ready-made base64 cells into storeRef;
- hide cells β makes navigation slightly more convenient;
- when sending a token, you can quickly get the jetton wallet address of the connected wallet;
- act includes templates to help you explore popular actions with links to documentation.
Check out this example of a swap on dedust to see how it all works. There's a video guide at the bottom.
Please open Telegram to view this post
VIEW IN TELEGRAM
π17β‘5π€‘3π©2π€1
Forwarded from TON Core
TON Core: Report for December-January
48 updates, from small to huge. Moving along the roadmap: first part of the Accelerator, new tools for validators, TVM sidechains, new versions of TOLK and API, support for extra currencies and BTC Teleport, and other.
https://telegra.ph/TON-Core-Dec-Jan-2025-Updates-02-02
48 updates, from small to huge. Moving along the roadmap: first part of the Accelerator, new tools for validators, TVM sidechains, new versions of TOLK and API, support for extra currencies and BTC Teleport, and other.
https://telegra.ph/TON-Core-Dec-Jan-2025-Updates-02-02
Telegraph
TON Core: Dec-Jan 2025 Updates
2024 overview and roadmap Published an overview of TON Core major releases in 2024 and formed a TON Core roadmap for 2025 H1. Kernel Node Update TON 2024.12 The first update in the βAcceleratorβ update series has been rolled out to the mainnet. In additionβ¦
π14β‘9
Forwarded from TOLK lang
Tolk v0.8: preparation for structures
A new version of Tolk was released several days ago. We're starting a way to eventually implement structures with auto packing to/from cells. This will take several steps (each publicly released), it's the first one.
β Notable changes in Tolk v0.8:
1. Syntax
2. Allow
PR on GitHub with detailed info.
Using syntax `tensorVar.{i}` and `tupleVar.{i}`, you can access tensors/tuples by indices without unpacking them.
It works for tensors:
It works for tuples (does asm INDEX/SETINDEX under the hood):
It works for nesting
Why is this essential?
In the future, we'll have structures, declared like this:
Structures will be stored like tensors on a stack:
It means, that `obj.{field}` is exactly the same as `tensorVar.{i}`:
Same goes for nested objects:
So, implementing indexed access for tensors/tuples covering all scenarios is a direct step towards structures.
A new version of Tolk was released several days ago. We're starting a way to eventually implement structures with auto packing to/from cells. This will take several steps (each publicly released), it's the first one.
β Notable changes in Tolk v0.8:
1. Syntax
tensorVar.0 and tupleVar.0, both for reading and writing2. Allow
cell, slice, etc. to be valid identifiersPR on GitHub with detailed info.
Using syntax `tensorVar.{i}` and `tupleVar.{i}`, you can access tensors/tuples by indices without unpacking them.
It works for tensors:
var t = (5, someSlice, someBuilder); // 3 stack slots
t.0 // 5
t.0 = 10; // t is now (10, ...)
t.0 += 1; // t is now (11, ...)
increment(mutate t.0); // t is now (12, ...)
t.0.increment(); // t is now (13, ...)
t.1 // slice
t.100500 // compilation error
It works for tuples (does asm INDEX/SETINDEX under the hood):
var t = [5, someSlice, someBuilder]; // 1 tuple on a stack with 3 items
t.0 // "0 INDEX", reads 5
t.0 = 10; // "0 SETINDEX", t is now [10, ...]
t.0 += 1; // "0 INDEX" to read 10, "0 SETINDEX" to write 11
increment(mutate t.0); // also, the same way
t.0.increment(); // also, the same way
t.1 // "1 INDEX", it's slice
t.100500 // compilation error
It works for nesting
var.{i}.{j}. It works for nested tensors, nested tuples, tuples nested into tensors. It works for mutate. It works for globals.Why is this essential?
In the future, we'll have structures, declared like this:
struct User {
id: int;
name: slice;
}
Structures will be stored like tensors on a stack:
var u: User = { id: 5, name: "" };
// u is actually 2 slots on a stack, the same as
var u: (int, slice) = (5, "");
fun getUser(): User { ... }
// on a stack, the same as
fun getUser(): (int, slice) { ... }
It means, that `obj.{field}` is exactly the same as `tensorVar.{i}`:
var u: User = ...; // u: (int, slice) = ...
u.id; // u.0
u.id = 10; // u.0 = 10
Same goes for nested objects:
struct Storage {
lastUpdated: int;
owner: User;
}
s.lastUpdated // s.0
s.owner.id // s.1.0
So, implementing indexed access for tensors/tuples covering all scenarios is a direct step towards structures.
π15π₯8β€1
Forwarded from BotNews
Bot API 8.3
Video Improvements
β’ Introduced support for custom covers and start timestamps for videos.
β’ Out of the box, bots can specify a cover and start timestamp when sending, editing and forwarding videos β including in albums and paid media.
Gifts and Reactions
β’ Bots can now send giftsπ to channels, in addition to regular users.
β’ Added support for transactions with chats.
β’ Bots can now add reactions to most service messages.
Similar Bots
β’ A list of similar bots will now appear in bot profiles, helping users discover other bots they may find interesting.
β’ And more, see the full changelog for details:
https://torg.tg-me.sbs/bots/api-changelog#february-12-2025
Video Improvements
β’ Introduced support for custom covers and start timestamps for videos.
β’ Out of the box, bots can specify a cover and start timestamp when sending, editing and forwarding videos β including in albums and paid media.
Gifts and Reactions
β’ Bots can now send gifts
β’ Added support for transactions with chats.
β’ Bots can now add reactions to most service messages.
Similar Bots
β’ A list of similar bots will now appear in bot profiles, helping users discover other bots they may find interesting.
β’ And more, see the full changelog for details:
https://torg.tg-me.sbs/bots/api-changelog#february-12-2025
Please open Telegram to view this post
VIEW IN TELEGRAM
π8
π Bring TON to ElizaOS β Join the Bounty Program!
TON Blockchain is launching a bounty program to develop the TON Plugin within ElizaOS! This is your chance to contribute to a cutting-edge AI framework and integrate TON into autonomous AI agents.
$20,000 in prizes is up for grabs! Contribute by implementing key features and earn rewards for successfully merged pull requests.
π‘ How to participate: take on one of the open issues:
π List of open TON Plugin bounties
β‘ Act fast! Donβt miss out on this opportunity to bring TON and AI together!
TON Blockchain is launching a bounty program to develop the TON Plugin within ElizaOS! This is your chance to contribute to a cutting-edge AI framework and integrate TON into autonomous AI agents.
$20,000 in prizes is up for grabs! Contribute by implementing key features and earn rewards for successfully merged pull requests.
π‘ How to participate: take on one of the open issues:
π List of open TON Plugin bounties
β‘ Act fast! Donβt miss out on this opportunity to bring TON and AI together!
β€5π4
Forwarded from TON Builders
π TON devs β we need your feedback!
Building on TON? Tell us what works (and what doesnβt) in a quick survey on:
β’ Developing on TON, tooling, programming languages (FunC, Tact, Tolk), TMAs, guides
Fill it out, drop your wallet & claim an exclusive reputation SBT!
Make your voice count.
Building on TON? Tell us what works (and what doesnβt) in a quick survey on:
β’ Developing on TON, tooling, programming languages (FunC, Tact, Tolk), TMAs, guides
Fill it out, drop your wallet & claim an exclusive reputation SBT!
Make your voice count.
π13π€6π1
Forwarded from Toncenter API
Support for extra-currencies in local ton-http-api
In ton-http-api v2.0.53, which you can install by yourself on your server, support for extra-currencies and a number of other improvements have been made.
Recall that earlier support for extra-currencies was made in the public Toncenter V2 and Toncenter V3 APIs.
https://github.com/toncenter/ton-http-api/releases/tag/v2.0.53
In ton-http-api v2.0.53, which you can install by yourself on your server, support for extra-currencies and a number of other improvements have been made.
Recall that earlier support for extra-currencies was made in the public Toncenter V2 and Toncenter V3 APIs.
https://github.com/toncenter/ton-http-api/releases/tag/v2.0.53
π4β€1
Forwarded from Toncenter API
Improved Metadata API
Last month we started providing metadata for Jettons and NFTs in the V3 API.
We are pleased to report a number of improvements:
β The metadata now enters the API in advance as soon as the token appears on the network. In the previous implementation, the metadata was indexed the first time the token was requested.
β Images and JSON are now proxied via toncenter.com. 3 image sizes are available, as well as original non-proxied urls for JSON and images. IPFS is supported.
Using a proxy increases security (you don't make requests to third-party hosting) and speed of downloading resources.
Last month we started providing metadata for Jettons and NFTs in the V3 API.
We are pleased to report a number of improvements:
β The metadata now enters the API in advance as soon as the token appears on the network. In the previous implementation, the metadata was indexed the first time the token was requested.
β Images and JSON are now proxied via toncenter.com. 3 image sizes are available, as well as original non-proxied urls for JSON and images. IPFS is supported.
Using a proxy increases security (you don't make requests to third-party hosting) and speed of downloading resources.
π9π2
π Tact v1.6.0 is released!
π This is the biggest update of Tact since its creation, bigger than all previous milestones combined. There were so many improvements that we've even won over FunC in terms of gas usage on many standard contracts, such as Jettons.
π€ Don't believe me?
π₯³ Let's unpack Tact v1.6.0 together and see these improvements for ourselves!
We'll start with the number one achievement of this release:
β½οΈ Gas optimization victory over FunC
Gas has long been a major pain point for Tact. Prior to v1.6.0, Tact's gas usage on many common contracts, such as Jettons, was far from ideal, requiring about 2.5 times gas of the FunC reference implementation.
But with Tact 1.6.0, those old gas-expensive days are long gone.
π€― For example, a Tact rewrite of the reference FunC Jetton code consumes less gas for transfer, burn and discovery messages!
π So, expect to receive easy-to-use idiomatic Tact implementations of common contracts in the near future
Some of the things we did to achieve this:
βͺοΈ Removed "system" cell β parent contract code is no longer stored in the system cell with all the child contract codes
βͺοΈ Removed redundant address checks
βͺοΈ Deprecated
βͺοΈ Introduced contract parameters as an alternative to
And optimized compiler internals, many old and new functions in the stdlib:
π§° Some of the standard library additions and changes
β’ Added specialized
β’ Many math functions, such as
β’ More advanced functions, such as
β’ Handy
β’ Optimized
β’
β’
Added many functions for
β’ Variable integer serialization types and the corresponding
β’ Functions
β’ Functions for working with addresses:
β’ ...and more!
π§³ More auxiliary things
β’ Basic
β’ Compile-time method ID expressions for getters and Message opcodes
β’ The
β’ More map improvements and new methods, like
β’ New augmented assignment operators
β’ Better error reporting for many cases
β’ Generation of constants in TypeScript wrappers
β’ The
β’ CLI for the Tact's TVM disassembler β
β’ Fixes of the compilation report
β’ Fixes of the compiler's third-party API
β’ Fixes of the internal infrastructure and code generation
β’ Lots of other miscellaneous bug fixes and smaller enhancements
β’ ...and documentation for all of that and beyond!
Besides, check out the updated Awesome Tact list and add your awesome projects, especially those using Tact in production!
β οΈ Breaking changes
There are only two, and they're both pretty minor:
β’ Tact 1.6.0 replaces
β’ The
β₯οΈ Special thanks goes to all the contributors and community members β without you there would be nothing. Let's keep building the future of smart contracts with β‘οΈ Tact!
π See full release notes for Tact v1.6.0
π₯ And upgrade Tact in your projects
π² we're beating the gas allegations with this one π£π£π£
β¨οΈ @tact_kitchen
π This is the biggest update of Tact since its creation, bigger than all previous milestones combined. There were so many improvements that we've even won over FunC in terms of gas usage on many standard contracts, such as Jettons.
π€ Don't believe me?
π₯³ Let's unpack Tact v1.6.0 together and see these improvements for ourselves!
We'll start with the number one achievement of this release:
β½οΈ Gas optimization victory over FunC
Gas has long been a major pain point for Tact. Prior to v1.6.0, Tact's gas usage on many common contracts, such as Jettons, was far from ideal, requiring about 2.5 times gas of the FunC reference implementation.
But with Tact 1.6.0, those old gas-expensive days are long gone.
π€― For example, a Tact rewrite of the reference FunC Jetton code consumes less gas for transfer, burn and discovery messages!
π So, expect to receive easy-to-use idiomatic Tact implementations of common contracts in the near future
Some of the things we did to achieve this:
βͺοΈ Removed "system" cell β parent contract code is no longer stored in the system cell with all the child contract codes
βͺοΈ Removed redundant address checks
βͺοΈ Deprecated
Deployable trait in favor of receive(){}βͺοΈ Introduced contract parameters as an alternative to
init() functionAnd optimized compiler internals, many old and new functions in the stdlib:
π§° Some of the standard library additions and changes
β’ Added specialized
deploy and message functions for efficient on-chain deployments and non-deployment messages respectivelyβ’ Many math functions, such as
divc, mulShiftRightCeil, and othersβ’ More advanced functions, such as
setGasLimit, setSeed, myCode, and othersβ’ Handy
throwIf and throwUnless functions, which deprecated their "native" prefixed counterpartsβ’ Optimized
emptyCell and emptySlice functionsβ’
Int.toString function now consumes up to 64% less gasβ’
Int.toFloatString function now consumes up to 62% less gasAdded many functions for
Cell, Slice and Builder types:β’ Variable integer serialization types and the corresponding
.load and .store functions of Slice and Builder typesβ’ Functions
Slice.hashData and String.hashData for efficient hashes of data onlyβ’ Functions for working with addresses:
Slice.asAddress, Slice.asAddressUnsafe, contractHash, and a new BasechainAddress type its helper functionsβ’ ...and more!
π§³ More auxiliary things
β’ Basic
let-destructuring of structs and Messagesβ’ Compile-time method ID expressions for getters and Message opcodes
β’ The
codeOf expression to get the code of child contractsβ’ More map improvements and new methods, like
replace and replaceGetβ’ New augmented assignment operators
&&=, ||=, >>= and <<=β’ Better error reporting for many cases
β’ Generation of constants in TypeScript wrappers
β’ The
-w, --watch CLI flags for watching for changes and automatic recompilationsβ’ CLI for the Tact's TVM disassembler β
unbocβ’ Fixes of the compilation report
β’ Fixes of the compiler's third-party API
β’ Fixes of the internal infrastructure and code generation
β’ Lots of other miscellaneous bug fixes and smaller enhancements
β’ ...and documentation for all of that and beyond!
Besides, check out the updated Awesome Tact list and add your awesome projects, especially those using Tact in production!
β οΈ Breaking changes
There are only two, and they're both pretty minor:
β’ Tact 1.6.0 replaces
Context.bounced field with Context.bounceable, which tells whether the received message can bounce back or not. Previously, the bounced was useless since any bounced messages would be handled in a separate bounced() receiver.β’ The
enabledMasterchain option was removed from tact.config.json. Going forward, support of masterchain addresses is always enabled in Tact contracts.β₯οΈ Special thanks goes to all the contributors and community members β without you there would be nothing. Let's keep building the future of smart contracts with β‘οΈ Tact!
π See full release notes for Tact v1.6.0
π₯ And upgrade Tact in your projects
π² we're beating the gas allegations with this one π£π£π£
β¨οΈ @tact_kitchen
β€18π₯11π9β‘6
π Tact v1.6.1 is released!
π "Long" time no see β many tools have been updated to support the latest Tact versions, and we've prepared some quality-of-life additions and minor fixes.
A big release cannot exist without a follow-up patch. This patch mainly focused on polishing things in the internal infrastructure, standard library, and public APIs.
π Bug fixes
βͺοΈ The multiple wildcard function parameters are now supported.
That is, the following works in v1.6.1:
βͺοΈ Made calls to the .toCell() function on struct as a contract field handled correctly.
π§° Standard library additions and changes
β’ Added the StateInit.hasSameBasechainAddress() function, which is a gas-efficient way to check whether the given initial package corresponds to a specified address.
β’ Added the cashback() function to efficiently forward excess funds from an incoming message to the target address.
β’ All entities in Core libraries received documentation comments. Next time, we'll add missing doc comments for the standard libraries, i.e., everything imported using the import "@stdlib/..." syntax.
π§³ Some other changes:
β’ We've inlined the contract load functions, so the gas consumption of the benchmarked Jetton implementation in Tact is even smaller than that of its reference implementation in FunC.
β’ The TypeScript wrappers now produce bi-directional mappings of exit codes from their numbers to string descriptions and vice versa. Plus, the message opcodes are exported too.
β’ The .code infix is no longer added to the file names of the generated FunC, Fift, and disassembled Fift outputs. It was annoying to see it everywhere, so now it's only present on the compiled .boc files.
π See the full release notes for Tact v1.6.1
π₯ And upgrade Tact in your projects
Besides, the tact.vim plugin for Vim 8+ and tact-sublime package for Sublime Text 3+ have been updated to support Tact v1.6.0 (and v1.6.1 too).
The Misti static analyzer has been updated to v0.7.0 and now supports Tact v1.6.0 and v1.6.1. See its full release notes.
Speaking of plugins and tools, we have another announcement to make β we're starting an alpha test of the tact-language-server: an official language server for Tact that can be used standalone or within a dedicated extension for VSCode and VSCode-based editors, such as VSCodium, Cursor, Windsurf, and others.
Join the alpha squad and gain early access to great tooling: tact-language-server. If things are good, please give it a star and write a positive review. If they're not β open an issue, and we'll take a look!
π² cue the Tact type beat (sped up)
β¨οΈ @tact_kitchen from the @ton_studio
π "Long" time no see β many tools have been updated to support the latest Tact versions, and we've prepared some quality-of-life additions and minor fixes.
A big release cannot exist without a follow-up patch. This patch mainly focused on polishing things in the internal infrastructure, standard library, and public APIs.
π Bug fixes
βͺοΈ The multiple wildcard function parameters are now supported.
That is, the following works in v1.6.1:
trait WildThing {
// Using wildcards for parameter names
virtual fun assure(_: Int, _: Int): Bool {
return true;
}
}
contract YouMakeMyHeartSing with WildThing {
// And then overriding them with concrete names
override fun assure(a: Int, b: Int): Bool {
return a + b == b + a;
}
}
βͺοΈ Made calls to the .toCell() function on struct as a contract field handled correctly.
struct MyStruct { x: Int; y: Int; z: Int }
contract MyContract(myField: MyStruct) {
receive() {
// This works fine now:
self.reply(self.myField.toCell());
}
}
π§° Standard library additions and changes
β’ Added the StateInit.hasSameBasechainAddress() function, which is a gas-efficient way to check whether the given initial package corresponds to a specified address.
β’ Added the cashback() function to efficiently forward excess funds from an incoming message to the target address.
β’ All entities in Core libraries received documentation comments. Next time, we'll add missing doc comments for the standard libraries, i.e., everything imported using the import "@stdlib/..." syntax.
π§³ Some other changes:
β’ We've inlined the contract load functions, so the gas consumption of the benchmarked Jetton implementation in Tact is even smaller than that of its reference implementation in FunC.
β’ The TypeScript wrappers now produce bi-directional mappings of exit codes from their numbers to string descriptions and vice versa. Plus, the message opcodes are exported too.
β’ The .code infix is no longer added to the file names of the generated FunC, Fift, and disassembled Fift outputs. It was annoying to see it everywhere, so now it's only present on the compiled .boc files.
π See the full release notes for Tact v1.6.1
π₯ And upgrade Tact in your projects
Besides, the tact.vim plugin for Vim 8+ and tact-sublime package for Sublime Text 3+ have been updated to support Tact v1.6.0 (and v1.6.1 too).
The Misti static analyzer has been updated to v0.7.0 and now supports Tact v1.6.0 and v1.6.1. See its full release notes.
Speaking of plugins and tools, we have another announcement to make β we're starting an alpha test of the tact-language-server: an official language server for Tact that can be used standalone or within a dedicated extension for VSCode and VSCode-based editors, such as VSCodium, Cursor, Windsurf, and others.
Join the alpha squad and gain early access to great tooling: tact-language-server. If things are good, please give it a star and write a positive review. If they're not β open an issue, and we'll take a look!
π² cue the Tact type beat (sped up)
β¨οΈ @tact_kitchen from the @ton_studio
π15β€8π₯4β‘2π1π«‘1
Forwarded from TOLK lang
π Tolk v0.9: nullable types, null safefy, control flow, smart casts
Tolk v0.9 introduces nullable types:
β Notable changes in Tolk v0.9:
1. Nullable types
2. Standard library updated to reflect nullability
3. Smart casts, like in TypeScript in Kotlin
4. Operator
5. Code after
6. The
PR on GitHub with detailed info.
β Nullable types and null safety
In FunC,
Tolk now forces you to explicitly mark nullable values. This aligns with TypeScript
* any type can be nullable:
* no more unexpected TVM exceptions due to null
* at runtime,
β Smart casts (via control flow graph)
Once a nullable value is checked, the compiler automatically refines its type:
or:
or:
Smart casts ensure code is safe while remaining gas-efficient (compile-time only).
β Operator `!` (non-null assertion)
If you know a value can't be null, use the
It's useful for low-level TVM functions (dicts, particularly), when you have guarantees outside the code. Use with care!
β The `never` type
Now, you can declare "always-throwing functions":
... this is just the beginning! Nullable tensors, tricky smart casts, and low-level null safety details β all explained in the PR.
π³ Null safety is smooth, intuitive, and enforced at compile time β no runtime cost, no extra gas, just safer code.
Tolk v0.9 introduces nullable types:
int?, cell?, and T?, bringing null safety to your code. The compiler prevents using nullable values without checks, but thanks to smart casts, this feels smooth and natural.β Notable changes in Tolk v0.9:
1. Nullable types
int?, cell?, etc.; null safety2. Standard library updated to reflect nullability
3. Smart casts, like in TypeScript in Kotlin
4. Operator
! (non-null assertion)5. Code after
throw is treated unreachable6. The
never typePR on GitHub with detailed info.
β Nullable types and null safety
In FunC,
null was implicitly assignable to any primitive type β too permissive. A variable declared as int could still hold null at runtime, leading to TVM exceptions if used incorrectly.Tolk now forces you to explicitly mark nullable values. This aligns with TypeScript
T | null and Kotlin, preventing unintended null usage.
value = x > 0 ? 1 : null; // int?
value + 5; // error
s.storeInt(value); // error
if (value != null) {
value + 5; // ok
s.storeInt(value); // ok
}
* any type can be nullable:
cell?, [int, slice]?, (int, cell)?* no more unexpected TVM exceptions due to null
* at runtime,
int? and cell? occupy just one stack slot β zero overheadβ Smart casts (via control flow graph)
Once a nullable value is checked, the compiler automatically refines its type:
if (lastCell != null) {
// here lastCell is `cell`, not `cell?`
}
or:
if (lastCell == null || prevCell == null) {
return;
}
// both lastCell and prevCell are `cell`
or:
var x: int? = ...;
if (x == null) {
x = random();
}
// here x is `int`
Smart casts ensure code is safe while remaining gas-efficient (compile-time only).
β Operator `!` (non-null assertion)
If you know a value can't be null, use the
! operator to bypass nullability checks:
// this key 100% exists, make it `cell`, not `cell?`
validators = getBlockchainConfigParam(16)!;
It's useful for low-level TVM functions (dicts, particularly), when you have guarantees outside the code. Use with care!
β The `never` type
Now, you can declare "always-throwing functions":
fun alwaysThrows(): never {
throw 123;
}
fun f() {
...
alwaysThrows(); // no return needed after this
}
never also occurs implicitly when a condition is impossible:
var v = 0;
// compiler warning: `int` can never be `null`
if (v == null) {
// v is `never`
}
... this is just the beginning! Nullable tensors, tricky smart casts, and low-level null safety details β all explained in the PR.
π³ Null safety is smooth, intuitive, and enforced at compile time β no runtime cost, no extra gas, just safer code.
π13β€5π₯3π3π€‘2
Forwarded from Ton Console
Get high TONAPI limits in your dApps for free
You already know our @ton-api/client library β a client for building advanced TON dApps. Now, we're happy to announce a new feature that grants high TONAPI limits for free.
This upgrade enables cost-free TON API usage within dApps running in the Tonkeeper built-in browser (mobile) and standard browsers with the Tonkeeper extension installed.
To check if this feature is available, verify that the
How it works β
You already know our @ton-api/client library β a client for building advanced TON dApps. Now, we're happy to announce a new feature that grants high TONAPI limits for free.
This upgrade enables cost-free TON API usage within dApps running in the Tonkeeper built-in browser (mobile) and standard browsers with the Tonkeeper extension installed.
To check if this feature is available, verify that the
window.tonapi object exists in your browser.How it works β
π₯8β‘3π3β€βπ₯2β€1
Forwarded from dTON Tech
During the last year all dTON services were running on kubernetes cluster without HA build. Sometimes when we lost servers, we faced complex problems.
To improve the stability and availability of the service we developed high availability dTON cluster that will continue to work even if some of the servers are unavailable. Additionally, we've got setup complex monitoring and alerting system on services and data consistency.
Today we managed to switch all our services to HA cluster.
In our article we want to share our experience of HA cluster on top of bare-metal servers in three parts:
- dTON Kubernetes High Availability Transition
- dTON LiteServers High Availability Transition
- dTON GraphQL High Availability Transition
Second and third part will be posted exclusively on @dtontech with promo codes on dTON API usage.
https://blog.dton.io/dton-kubernetes-high-availability-transition-part-1/
To improve the stability and availability of the service we developed high availability dTON cluster that will continue to work even if some of the servers are unavailable. Additionally, we've got setup complex monitoring and alerting system on services and data consistency.
Today we managed to switch all our services to HA cluster.
In our article we want to share our experience of HA cluster on top of bare-metal servers in three parts:
- dTON Kubernetes High Availability Transition
- dTON LiteServers High Availability Transition
- dTON GraphQL High Availability Transition
Second and third part will be posted exclusively on @dtontech with promo codes on dTON API usage.
https://blog.dton.io/dton-kubernetes-high-availability-transition-part-1/
dTON
dTON Kubernetes High Availability Transition, part 1
During the last year all dTON services were running on kubernetes cluster without HA build. Sometimes when we lost servers, we faced complex problems.
To improve the stability and availability of the service, we developed a high availability dTON clusterβ¦
To improve the stability and availability of the service, we developed a high availability dTON clusterβ¦
π₯14β€8π7π2
A new developer community TON AI Narrative has been launched in TON! This is a place where we explore the synergy of AI + Web3 + Telegram and build the future of AI agents in TON.
Our community has built the first AI tool for TON β TON AI Plugin in the ElizaOS framework.
The goal is simple: any developer should be able to create an AI agent on TON in just 15 minutes.
Now, AI can hold and manage crypto, make transactions, and interact with smart contracts β unlocking.
Example:
But this is just the beginning! TON AI Plugin is the first step toward a full TON AI SDK, which will provide tools for AI agent development, Web3 integration, and Telegram interaction.
π Join the Bug Bounty β Test the TON AI Plugin!
We are looking for enthusiasts who want to explore AIβs potential in Web3 and help improve this tool.
π£ Chat: TON AI Narrative Chat
π’ Channel: TON AI Narrative
Please open Telegram to view this post
VIEW IN TELEGRAM
π₯6β€2π2π1π1
We're conducting a focused study on TON API providers to identify key challenges and unlock new opportunities for innovation. Our mission is to make the TON ecosystem more powerful, seamless, and developer-friendly.
Your feedback drives real improvementsβletβs build the best developer experience together! π
Please open Telegram to view this post
VIEW IN TELEGRAM
π6
Forwarded from TOLK lang
π«§ Tolk v0.10: preparing for serialization β intN, bytesN, coins
This update lays the foundation of future auto-packing to/from cells by solving one critical question:
How should fields be serialized?
β Notable changes in Tolk v0.10:
1. Fixed-size integer types:
2. Type
3. Types
4. Replace
5. Trailing comma support
PR on GitHub with detailed info.
β Fixed-size integers? In TVM? What?
Imagine Tolk already has structures, and we define an incoming message:
A client sends this message following the TL/B schema:
But how do we tell the compiler that counter_id is int32 and inc_by is int64? This information is missing in the struct definition.
β Rejected approaches: why they fail
Several syntax ideas were considered:
Each of these quickly breaks down when handling more complex cases.
For example, how would we handle TL-B
And what about TL/B
With every new case, the syntax becomes more complex, ambiguous, and error-prone.
β The solution: `int32` as a first-class type
No annotations. No confusing
This scales perfectly:
These are distinct types. A variable can be
This makes serialization predictable, structured, and error-free.
β What about overflow?
A reasonable question: what happens if a value exceeds the limit?
Answer: no runtime overflow or clamping! It's just int at TVM.
* arithmetic works normally β v becomes 256
* no extra gas cost β no runtime bounds checks
* overflow will only happen at serialization
β Why is this the best approach?
Think of smart contracts as a black box:
- inputs are encoded (int32, uint64, etc.)
- inside the contract, arithmetic uses full 257-bit precision
- outputs are serialized again β overflow happens only at this stage
This is similar to how mulDivFloor(x,y,z) uses 513-bit precision internally. Your contract keeps precision internally and only enforces constraints at the border with an outside world.
π³ Tolk will follow a type-based philosophy
This post covered the foundation of automatic serialization. The right way is to have a rich type system. Having nested types, having generics, having aliases β will allow to describe every practical TL/B case, but at a language level.
In v0.10, we introduce
How will
Stay tuned for the next update...
This update lays the foundation of future auto-packing to/from cells by solving one critical question:
How should fields be serialized?
β Notable changes in Tolk v0.10:
1. Fixed-size integer types:
int32, uint64, etc.2. Type
coins and function ton("0.05")3. Types
bytesN and bitsN (backed by slices at TVM)4. Replace
"..."c postfixes with stringCrc32("...") functions5. Trailing comma support
PR on GitHub with detailed info.
β Fixed-size integers? In TVM? What?
Imagine Tolk already has structures, and we define an incoming message:
struct CounterIncrement {
counter_id: int;
inc_by: int;
}
A client sends this message following the TL/B schema:
counterIncrement
counter_id:int32
inc_by:int64
= CounterIncrement;
But how do we tell the compiler that counter_id is int32 and inc_by is int64? This information is missing in the struct definition.
β Rejected approaches: why they fail
Several syntax ideas were considered:
// type casting?
counter_id: int as int32;
inc_by: int as int64;
// inline annotations?
counter_id: int @int32;
inc_by: int @int64;
// annotations above fields?
@serialize(int32)
counter_id: int;
@serialize(int64)
inc_by: int;
Each of these quickly breaks down when handling more complex cases.
For example, how would we handle TL-B
Maybe int32? Would we write:
// this?
inc_by: (int as int32)?;
// or this?
inc_by: int? as int32?;
// or this?
inc_by: Maybe<int> as Maybe<int32>;
And what about TL/B
Both (Maybe int32) int64?
// this?
my_data: Both<Maybe<int as int32>, int as int64>;
// or this?
my_data: Both<Maybe<int>, int> as Both<Maybe<int32>, int64>;
// or how??
With every new case, the syntax becomes more complex, ambiguous, and error-prone.
β The solution: `int32` as a first-class type
struct CounterIncrement {
counter_id: int32;
inc_by: int64;
}
No annotations. No confusing
as syntax. No ambiguity.This scales perfectly:
struct MyMsg {
inc_by: int32?;
my_data: (int32?, int64);
}
These are distinct types. A variable can be
int32 and similar:
var op: int32 = ...;
var query_id: uint64 = ...;
This makes serialization predictable, structured, and error-free.
β What about overflow?
A reasonable question: what happens if a value exceeds the limit?
var v: uint8 = 255;
v += 1; // ???
Answer: no runtime overflow or clamping! It's just int at TVM.
* arithmetic works normally β v becomes 256
* no extra gas cost β no runtime bounds checks
* overflow will only happen at serialization
struct Resp {
outValue: uint8;
}
resp.outValue = v; // 256
resp.toCell(); // a runtime "overflow" error
β Why is this the best approach?
Think of smart contracts as a black box:
- inputs are encoded (int32, uint64, etc.)
- inside the contract, arithmetic uses full 257-bit precision
- outputs are serialized again β overflow happens only at this stage
This is similar to how mulDivFloor(x,y,z) uses 513-bit precision internally. Your contract keeps precision internally and only enforces constraints at the border with an outside world.
π³ Tolk will follow a type-based philosophy
This post covered the foundation of automatic serialization. The right way is to have a rich type system. Having nested types, having generics, having aliases β will allow to describe every practical TL/B case, but at a language level.
In v0.10, we introduce
intN (fixed integers), bytesN (definite slices), coins (variadic integers), and some more additions. Read the details in the PR.How will
Either L R and even more complex TL/B structures be expressed? Stay tuned for the next update...
π16β€6π₯6
Forwarded from π TON Data Hub (Dan)
Build a Dashboard for DeDust
ββββββ> Win up to $3000
Welcome to our first data contest where we reward for making TON data more transparent.
Build a Dune dashboard for DeDust and win:
π Deadline: Mar, 24
Read more:
π [ Rules & Guidelines ] π
(bonus task for onchain detectives inside)
Got questions? Ask in our chat: @tondatachat
ββββββ> Win up to $3000
Welcome to our first data contest where we reward for making TON data more transparent.
Build a Dune dashboard for DeDust and win:
π₯ 1st place: $3000
π₯ 2nd place: $2000
π₯ 3rd place: $1000π Deadline: Mar, 24
Read more:
π [ Rules & Guidelines ] π
(bonus task for onchain detectives inside)
Got questions? Ask in our chat: @tondatachat
π5β€3