Skip to content

Instantly share code, notes, and snippets.

@ilyar
Last active May 23, 2025 07:35
Show Gist options
  • Save ilyar/ec7f560d4632cb09a319d60f75a518a2 to your computer and use it in GitHub Desktop.
Save ilyar/ec7f560d4632cb09a319d60f75a518a2 to your computer and use it in GitHub Desktop.
tonup - TON toolchain versions manager
#!/usr/bin/env bash
# tonup - TON toolchain versions manager
# INSTALL
# wget -O tonup.sh https://gist.githubusercontent.com/ilyar/ec7f560d4632cb09a319d60f75a518a2/raw/6ad10f2e33dad7f138cefee441c0ba2dcb83d182/tonup.sh
# cp tonup.sh ~/bin/tonup && chmod +x ~/bin/tonup
# SETUP
# export PATH="$HOME/bin-ton/current:$PATH"
set -eo pipefail # https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
# TODO add check pre-required
# sudo apt-get install unzip wget
function url-version() {
version="${1}"
if [ "${version}" == "v2024.12" ]; then
version="v2024.12-1"
fi
# TODO add detect os (linux, mac, win) and hardware (x86-64, arm64, arm64) see uname --help
os="linux"
if [[ "${version}" == *"v2023"*] || "${version}" == *"v2024"* || "${version}" == "v2025.03" ]]; then
hardware="x86_64"
else
hardware="x86-64"
fi
# TODO add supports ton-linux-arm64, ton-linux-x86-64, ton-mac-arm64, ton-mac-x86-64, ton-win-x86-64
echo -n "https://github.com/ton-blockchain/ton/releases/download/${version}/ton-${os}-${hardware}.zip"
}
function use-version() {
version="${1}"
target="${HOME}/bin-ton/${version}"
if [ ! -d $target ]; then
release="ton-${version}.zip"
wget -O "${release}" "$(url-version "${version}")"
mkdir -p "${target}"
unzip "${release}" -d "${target}"
rm -f "${release}"
find "${target}" -maxdepth 1 -type f -exec chmod +x {} \;
echo ${version} >> "${target}/version"
fi
ln -sfnT "${target}" "${current}"
}
function rev-path() {
path="${1}"
name="${2:-$(basename "${path}" | cut -d'.' -f1)}"
rev=$(sha256sum "${path}" \
| cut -d' ' -f1 \
| cut -c1-4 \
| tr '[:lower:]' '[:upper:]')
echo -n "${name} r${rev}"
}
function rev-dir() {
dir="$1"
name="${2:-$(basename "$dir")}"
rev=$(find "$dir" -maxdepth 10 -type f -exec sha256sum {} + \
| awk '{print $1}' \
| sort \
| sha256sum \
| cut -d' ' -f1 \
| cut -c1-4 \
| tr '[:lower:]' '[:upper:]')
echo -n "${name} r${rev}"
}
function check-version() {
version="${1}"
target="${HOME}/bin-ton/${version}"
echo -n "${version}"
if [ -d $target ]; then
echo -n " [loaded]"
fi
}
version=${1}
current="${HOME}/bin-ton/current"
if [ -z $version ]; then
# INFO TON tlbc revisions: https://gist.github.com/ilyar/b15a3441a345564481fd4033d0f8a2e3?permalink_comment_id=5590277#gistcomment-5590277
echo "List TON toolchain versions"
# TODO add getting available version from https://github.com/ton-blockchain/ton/releases
# TODO add detect downloaded versions
echo " v2022.08 [not asset] (tlbc r04A8 func v0.2.0 stdlib r07E7 fift-lib rC1A4)"
echo " v2022.09 [not asset] (tlbc r04A8 func v0.2.0 stdlib r07E7 fift-lib rC1A4)"
echo " v2022.10 [not asset] (tlbc r8E27 func v0.3.0 stdlib rFABE fift-lib r645C)"
echo " v2022.12 [not asset] (tlbc r8E27 func v0.4.0 stdlib r793E fift-lib r645C)"
echo " v2023.01 [not asset] (tlbc r8E27 func v0.4.1 stdlib r793E fift-lib r8EC7)"
echo " $(check-version v2023.03) (tlbc r8E27 func v0.4.2 stdlib r7146 fift-lib r8EC7)"
echo " $(check-version v2023.04) (tlbc r8E27 func v0.4.3 stdlib rB37A fift-lib r1488)"
echo " $(check-version v2023.05) (tlbc r8E27 func v0.4.4 stdlib rB37A fift-lib r7598)"
echo " $(check-version v2023.06) (tlbc rF1D1 func v0.4.4 stdlib rB37A fift-lib r7598)"
echo " $(check-version v2023.10) (tlbc rF1D1 func v0.4.4 stdlib rB37A fift-lib r7598)"
echo " $(check-version v2023.11) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r3E15)"
echo " $(check-version v2024.01) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r3E15)"
echo " $(check-version v2024.02) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r30AC)"
echo " $(check-version v2024.03) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r30AC)"
echo " $(check-version v2024.04) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r30AC)"
echo " $(check-version v2024.06) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r30AC)"
echo " $(check-version v2024.08) (tlbc r7812 func v0.4.4 stdlib r2522 fift-lib r30AC)"
echo " $(check-version v2024.09) (tlbc r7812 func v0.4.4 stdlib r2522 fift-lib r30AC)"
echo " $(check-version v2024.10) (tlbc r1D5C func v0.4.5 stdlib r2522 fift-lib r30AC)"
echo " $(check-version v2024.12) (tlbc r1D5C func v0.4.6 stdlib r2522 fift-lib r875B tolk v0.6.0 tolk-stdlib r97B6)"
echo " $(check-version v2025.02) (tlbc rDE78 func v0.4.6 stdlib r2522 fift-lib rF386 tolk v0.8.0 tolk-stdlib r86C7)"
echo " $(check-version v2025.03) (tlbc rDE78 func v0.4.6 stdlib r2522 fift-lib rF386 tolk v0.9.0 tolk-stdlib r2C71)"
echo " $(check-version v2025.04) (tlbc rDE78 func v0.4.6 stdlib r2522 fift-lib rF2DA tolk v0.11.0 tolk-stdlib rD3EE)"
echo ""
echo "Usage tonup <version>"
echo ""
else
use-version "${version}"
fi
echo -n "TON toolchain version $(cat "${current}/version") ("
if [ `command -v func` ]; then
echo -n "func $(func -V | grep FunC | cut -d' ' -f4) "
echo -n "$(rev-path "${current}/smartcont/stdlib.fc")"
fi
if [ `command -v fift` ]; then
echo -n " $(rev-dir "${current}/lib" "fift-lib")"
fi
if [ `command -v tolk` ]; then
echo -n " tolk $(tolk -v | grep Tolk | cut -d' ' -f3) "
echo -n "$(rev-dir "${current}/smartcont/tolk-stdlib" "tolk-stdlib")"
fi
echo ")"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment