Tolk и FunC: стандартная библиотека
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
FunC обладает богатой [стандартной библиотекой] (/v3/documentation/smart-contracts/func/docs/stdlib),
известной как файл "stdlib.fc ". Она довольно низкоуровневая и содержит множество asm
функций, названия которых очень похожи на команды TVM.
Tolk также имеет стандартную библиотеку, основанную на библиотеке FunC. Три основных отличия:
- Она разделена на несколько файлов:
common.tolk
,tvm-dicts.tolk
и другие. Функции изcommon.tolk
доступны всегда. Функции из других файлов доступны после импорта:
import "@stdlib/tvm-dicts"
beginCell() // available always
createEmptyDict() // available due to import
- Вам не нужно загружать ее с GitHub, она является частью дистрибутива Tolk.
- Почти все функции FunC были переименованы в
подробныепонятные названия. Это позволяет лучше понимать, что происходит, при написании контрактов или чтении примеров.
Список переименованных функций
Если столбец "Требуемый импорт" пуст - функция доступна без импорта.
Обратите внимание, что некоторые функции были удалены, так как их можно выразить синтаксически или они были крайне редко используемы на практике.
Название в FunC | Название в Tolk | Необходимый импорт |
---|---|---|
empty_tuple | createEmptyTuple | |
tpush | tuplePush | |
first | tupleFirst | |
at | tupleAt | |
touch | stackMoveToTop | tvm-lowlevel |
impure_touch | (удалено) | |
single | (удалено) | |
unsingle | (удалено) | |
pair | (удалено) | |
unpair | (удалено) | |
triple | (удалено) | |
untriple | (удалено) | |
tuple4 | (удалено) | |
untuple4 | (удалено) | |
second | (удалено) | |
third | (удалено) | |
fourth | (удалено) | |
pair_first | (удалено) | |
pair_second | (удалено) | |
triple_first | (удалено) | |
triple_second | (удалено) | |
triple_third | (удалено) | |
minmax | minMax | |
my_address | getMyAddress | |
get_balance | getMyOriginalBalanceWithExtraCurrencies | |
cur_lt | getLogicalTime | |
block_lt | getCurrentBlockLogicalTime | |
cell_hash | cellHash | |
slice_hash | sliceHash | |
string_hash | stringHash | |
check_signature | isSignatureValid | |
check_data_signature | isSliceSignatureValid | |
compute_data_size | calculateCellSizeStrict | |
slice_compute_data_size | calculateSliceSizeStrict | |
compute_data_size? | calculateCellSize | |
slice_compute_data_size? | calculateSliceSize | |
~dump | debugPrint | |
~strdump | debugPrintString | |
dump_stack | debugDumpStack | |
get_data | getContractData | |
set_data | setContractData | |
get_c3 | getTvmRegisterC3 | tvm-lowlevel |
set_c3 | setTvmRegisterC3 | tvm-lowlevel |
bless | transformSliceToContinuation | tvm-lowlevel |
accept_message | acceptExternalMessage | |
set_gas_limit | setGasLimit | |
buy_gas | (удалено) | |
commit | commitContractDataAndActions | |
divmod | divMod | |
moddiv | modDiv | |
muldiv | mulDivFloor | |
muldivr | mulDivRound | |
muldivc | mulDivCeil | |
muldivmod | mulDivMod | |
begin_parse | beginParse | |
end_parse | assertEndOfSlice | |
load_ref | loadRef | |
preload_ref | preloadRef | |
load_int | loadInt | |
load_uint | loadUint | |
preload_int | preloadInt | |
preload_uint | preloadUint | |
load_bits | loadBits | |
preload_bits | preloadBits | |
load_grams | loadCoins | |
load_coins | loadCoins | |
skip_bits | skipBits | |
first_bits | getFirstBits | |
skip_last_bits | removeLastBits | |
slice_last | getLastBits | |
load_dict | loadDict | |
preload_dict | preloadDict | |
skip_dict | skipDict | |
load_maybe_ref | loadMaybeRef | |
preload_maybe_ref | preloadMaybeRef | |
cell_depth | getCellDepth | |
slice_refs | getRemainingRefsCount | |
slice_bits | getRemainingBitsCount | |
slice_bits_refs | getRemainingBitsAndRefsCount | |
slice_empty? | isEndOfSlice | |
slice_data_empty? | isEndOfSliceBits | |
slice_refs_empty? | isEndOfSliceRefs | |
slice_depth | getSliceDepth | |
equal_slice_bits | isSliceBitsEqual | |
builder_refs | getBuilderRefsCount | |
builder_bits | getBuilderBitsCount | |
builder_depth | getBuilderDepth | |
begin_cell | beginCell | |
end_cell | endCell | |
store_ref | storeRef | |
store_uint | storeUint | |
store_int | storeInt | |
store_slice | storeSlice | |
store_grams | storeCoins | |
store_coins | storeCoins | |
store_dict | storeDict | |
store_maybe_ref | storeMaybeRef | |
store_builder | storeBuilder | |
load_msg_addr | loadAddress | |
parse_addr | parseAddress | |
parse_std_addr | parseStandardAddress | |
parse_var_addr | (удалено) | |
config_param | getBlockchainConfigParam | |
raw_reserve | reserveToncoinsOnBalance | |
raw_reserve_extra | reserveExtraCurrenciesOnBalance | |
send_raw_message | sendRawMessage | |
set_code | setContractCodePostponed | |
rand | randomRange | |
get_seed | randomGetSeed | |
set_seed | randomSetSeed | |
randomize | randomizeBy | |
randomize_lt | randomizeByLogicalTime | |
dump | debugPrint | |
strdump | debugPrintString | |
dump_stk | debugDumpStack | |
empty_list | createEmptyList | lisp-lists |
cons | listPrepend | lisp-lists |
uncons | listSplit | lisp-lists |
list_next | listNext | lisp-lists |
car | listGetHead | lisp-lists |
cdr | listGetTail | lisp-lists |
new_dict | createEmptyDict | tvm-dicts |
dict_empty? | dictIsEmpty | tvm-dicts |
idict_set_ref | iDictSetRef | tvm-dicts |
udict_set_ref | uDictSetRef | tvm-dicts |
idict_get_ref | iDictGetRefOrNull | tvm-dicts |
idict_get_ref? | iDictGetRef | tvm-dicts |
udict_get_ref? | uDictGetRef | tvm-dicts |
idict_set_get_ref | iDictSetAndGetRefOrNull | tvm-dicts |
udict_set_get_ref | iDictSetAndGetRefOrNull | tvm-dicts |
idict_delete? | iDictDelete | tvm-dicts |
udict_delete? | uDictDelete | tvm-dicts |
idict_get? | iDictGet | tvm-dicts |
udict_get? | uDictGet | tvm-dicts |
idict_delete_get? | iDictDeleteAndGet | tvm-dicts |
udict_delete_get? | uDictDeleteAndGet | tvm-dicts |
udict_set | uDictSet | tvm-dicts |
idict_set | iDictSet | tvm-dicts |
dict_set | sDictSet | tvm-dicts |
udict_add? | uDictSetIfNotExists | tvm-dicts |
udict_replace? | uDictSetIfExists | tvm-dicts |
idict_add? | iDictSetIfNotExists | tvm-dicts |
idict_replace? | iDictSetIfExists | tvm-dicts |
udict_set_builder | uDictSetBuilder | tvm-dicts |
idict_set_builder | iDictSetBuilder | tvm-dicts |
dict_set_builder | sDictSetBuilder | tvm-dicts |
udict_add_builder? | uDictSetBuilderIfNotExists | tvm-dicts |
udict_replace_builder? | uDictSetBuilderIfExists | tvm-dicts |
idict_add_builder? | iDictSetBuilderIfNotExists | tvm-dicts |
idict_replace_builder? | iDictSetBuilderIfExists | tvm-dicts |
udict_delete_get_min | uDictDeleteFirstAndGet | tvm-dicts |
idict_delete_get_min | iDictDeleteFirstAndGet | tvm-dicts |
dict_delete_get_min | sDictDeleteFirstAndGet | tvm-dicts |
udict_delete_get_max | uDictDeleteLastAndGet | tvm-dicts |
idict_delete_get_max | iDictDeleteLastAndGet | tvm-dicts |
dict_delete_get_max | sDictDeleteLastAndGet | tvm-dicts |
udict_get_min? | uDictGetFirst | tvm-dicts |
udict_get_max? | uDictGetLast | tvm-dicts |
udict_get_min_ref? | uDictGetFirstAsRef | tvm-dicts |
udict_get_max_ref? | uDictGetLastAsRef | tvm-dicts |
idict_get_min? | iDictGetFirst | tvm-dicts |
idict_get_max? | iDictGetLast | tvm-dicts |
idict_get_min_ref? | iDictGetFirstAsRef | tvm-dicts |
idict_get_max_ref? | iDictGetLastAsRef | tvm-dicts |
udict_get_next? | uDictGetNext | tvm-dicts |
udict_get_nexteq? | uDictGetNextOrEqual | tvm-dicts |
udict_get_prev? | uDictGetPrev | tvm-dicts |
udict_get_preveq? | uDictGetPrevOrEqual | tvm-dicts |
idict_get_next? | iDictGetNext | tvm-dicts |
idict_get_nexteq? | iDictGetNextOrEqual | tvm-dicts |
idict_get_prev? | iDictGetPrev | tvm-dicts |
idict_get_preveq? | iDictGetPrevOrEqual | tvm-dicts |
udict::delete_get_min | uDictDeleteFirstAndGet | tvm-dicts |
idict::delete_get_min | iDictDeleteFirstAndGet | tvm-dicts |
dict::delete_get_min | sDictDeleteFirstAndGet | tvm-dicts |
udict::delete_get_max | uDictDeleteLastAndGet | tvm-dicts |
idict::delete_get_max | iDictDeleteLastAndGet | tvm-dicts |
dict::delete_get_max | sDictDeleteLastAndGet | tvm-dicts |
pfxdict_get? | prefixDictGet | tvm-dicts |
pfxdict_set? | prefixDictSet | tvm-dicts |
pfxdict_delete? | prefixDictDelete | tvm-dicts |
Список добавленных функций
В стандартной библиотеке Tolk есть некоторые функции, которые отсутствовали в FunC, но довольно часто используются для решения повседневных задач.
Поскольку Tolk активно развивается, а его стандартная библиотека изменяется, лучше ориентироваться на папку tolk-stdlib/
в исходниках здесь.
Кроме функций, были добавлены некоторые константы, такие как: SEND_MODE_*
, RESERVE_MODE_*
и другие.
Когда FunC станет устаревшим, документация о стандартной библиотеке Tolk будет полностью переписана.
И помните, что все вышеупомянутые функции на самом деле являются обёртками над ассемблером TVM. Если чего-то не хватает, вы можете легко обернуть любую инструкцию TVM самостоятельно.