TON Дев Чат
toncli
для python3.10. Все делал на Win10 x64.toncli
вывод: disintar.io NFT owners today say: 🙈 🙉 🙊
ERROR: 🔎 Can't find such command
p.s. папка с бинарниками лежит на диске C в program files x86
./func
для запуска программы которая лежит в папке где вы находитесь
ton
командой cd ./ton
Запускаю команду git submodule update --init
И получаю следующий вывод:Submodule 'third-party/abseil-cpp' (https://github.com/abseil/abseil-cpp.git) registered for path 'third-party/abseil-cpp'
Submodule 'third-party/crc32c' (https://github.com/google/crc32c) registered for path 'third-party/crc32c'
Submodule 'third-party/libraptorq' (https://github.com/ton-blockchain/libRaptorQ) registered for path 'third-party/libraptorq'
Submodule 'third-party/rocksdb' (https://github.com/facebook/rocksdb.git) registered for path 'third-party/rocksdb'
Cloning into '/home/xxffwwoqqzz/ton/third-party/abseil-cpp'...
Всё замирает на этом моменте и никак не двигается дальше"TonUtil.fif" include
"Asm.fif" include
"build/contract.pk" load-generate-keypair // generate key pair
constant private_key // save private to constant
constant public_key // save public to constant
<b
0 32 u, // seqno
0 32 u, // subwallet-id
public_key B, // add bin public key to cell
b>
Cloning into '/home/xxffwwoqqzz/ton/third-party/rocksdb'...
error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
fatal: clone of 'https://github.com/facebook/rocksdb.git' into submodule path '/home/xxffwwoqqzz/ton/third-party/rocksdb' failed
Failed to clone 'third-party/rocksdb'. Retry scheduled
Cloning into '/home/xxffwwoqqzz/ton/third-party/rocksdb'...
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
fatal: clone of 'https://github.com/facebook/rocksdb.git' into submodule path '/home/xxffwwoqqzz/ton/third-party/rocksdb' failed
Failed to clone 'third-party/rocksdb' a second time, aborting
toncli send
вообще для другого (чтобы кастомное внутреннее послать контракту)usage.fif
для своего контракта, и потом использовать его через toncli sendboc
upd: инструкция к toncli send
https://github.com/disintar/toncli/blob/master/docs/advanced/send_fift_internal.mdtoncli sendboc
https://github.com/disintar/toncli/blob/master/docs/advanced/send_boc_with_fift.md
() recv_internal (slice in_msg) impure {...}
что значит слово impure
?
impure
toncli func
~ % toncli func
disintar.io NFT owners today say:
🙈
🙉
🙊
ERROR:
🚫 It is not project root, there is no folder func - I can't deploy it
numeric_limits’ is not a member of ‘std
brew install cmake
)
get_prev_c4
/ get_prev_c5
in run_tests
- fix -c
in run_tests
- fix func
in non project rootpip install -U toncli
toncli update_libs
run_tests
можно разрабатывать)
-c
in run_tests.store_grams(grams), но откуда оно берет эти грамы в тестовом окружении?
toncli run_tests
получаю Error interpreting standard preamble file `Fift.fif`: cannot locate file `Fift.fif`
Check that correct include path is set by -I or by FIFTPATH environment variable, or disable standard preamble by -n.
Пробовал поставить FIFTPATH=...AppData\Local\toncli\toncli\fift-libs
, не помогает. Кто-нибудь знает как пофиксить?
WARNING: The script normalizer.exe is installed in 'C:\Users\nns20\AppData\Roaming\Python\Python310\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
var cs = get_data().begin_parse();
cs~load_uint(64);
return cs.preload_uint(256);
set_data(begin_cell()
.store_uint(stored_seqno + 1, 32)
.store_uint(stored_subwallet, 32)
.store_uint(public_key, 256)
.end_cell());
this.stored_seqno = stored_seqno + 1
, но он максимально близок к TVM
append-long-string
в либе TonUtil.fif
, который это делает
cs~load_uint(8);и
cs~load_ref();
cs~load_uint(8);
cs~load_ref();
cs~load_uint(8);
cs~load_ref();
cs~load_uint(8);
cs~load_ref();
cs~load_uint(8);делают одно и то же?
cs~load_uint(8);
cs~load_uint(8);
cs~load_uint(8);
cs~load_ref();
cs~load_ref();
cs~load_ref();
cs~load_ref();
[🌗] [contract] [kQDH7Eba_xDCO3qu_c8sKORGrDM7MK8aG5MSEZwM3iMh0EfZ] 1.995434971💎 / Inited: True
INFO: 🙀 All contracts successfully deployed!
Traceback (most recent call last):
File "C:\Program Files\Python310\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Program Files\Python310\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "C:\Users\nns20\AppData\Roaming\Python\Python310\Scripts\toncli.exe\__main__.py", line 7, in <module>
File "C:\Users\nns20\AppData\Roaming\Python\Python310\site-packages\toncli\main.py", line 439, in main
deployer.get(real_args[2:], args)
File "C:\Users\nns20\AppData\Roaming\Python\Python310\site-packages\toncli\modules\abstract\deployer.py", line 287, in get
self.addresses = self.get_address(real_contracts)
File "C:\Users\nns20\AppData\Roaming\Python\Python310\site-packages\toncli\modules\abstract\deployer.py", line 126, in get_address
raise ValueError(f"😥 No address_text found in {contract.address}")
ValueError: 😥 No address_text found in C:\Users\nns20\Development\TON\wallet/build/contract_address
run_tests
эта штука локально запускает функции смарт контракта и потом проверяет результат их работы. Утверждается что этого достаточно для контеста.
() recv_internal (int balance, int msg_value, cell in_msg_full, slice in_msg_body)
on_code_upgrade();
throw(0);
payload
можно положить как текстовый комментарий, так и бинарные данные. А в чём именно сложность?
ifnot (msg_seqno) {
accept_message();
var elector = config_param(1).begin_parse().preload_uint(256);
toncli deploy -n testnet
toncli get hello_world
crc16(<function_name>)
(crc16(<function_name>) & 0xffff) | 0x10000
& 0xffff
не понятно, так как ведь результат crc16 уже 16-битный, нет?(crc16(<function_name>) & 0xffff) | 0x10000
это поведение по умолчанию, если вы ставите method_id(число)
то у него ID будет равен именно этому числу
#DEBUG#: s0 = CS{Cell{002b62470de9406080fa0000000000000000000000000004} bits: 0..173; refs: 0..0}
but get-methods of the contract are numbered by crc16 hashes of their name
method_id uses the default value (crc16(<function_name>) & 0xffff) | 0x10000
Ordinary functions are usually numbered by subsequent integers starting from 1, but get-methods of the contract are numbered by crc16 hashes of their name
forall X, Y -> [Y, X] pair_swap([X, Y] pair) {а
[Y, X] pair_swap<X, Y>([X, Y] pair) {?
a =
if (condition) {
5
} else {
8
}
Result<Ed25519::PublicKey> Ed25519::PrivateKey::get_public_key() const {
auto pkey = detail::X25519_key_to_PKEY(octet_string_, true);
if (pkey == nullptr) {
return Status::Error("Can't import private key");
}
SCOPE_EXIT {
EVP_PKEY_free(pkey);
};
TRY_RESULT(key, detail::X25519_key_from_PKEY(pkey, false));
return Ed25519::PublicKey(std::move(key));
}
var result = check_data_signature(request, signature, public_key);одно от другого чем-то принципиально отличается? Первый выкидывает cell underflow, а второй норм 🤔
var result = check_signature(slice_hash(request), signature, public_key);
-v 2
если ошибка останется - пришлите аутпут ссылкой на гист
pip show toncli
версию покажет
-v 2
-c
для выбора контракта. Я у себя сделал такую структуру и такой project.yaml:task1:
func:
- 1.fc
tests:
- tests/task1-test.fc
task2:
func:
- 2.fc
tests:
- tests/task2-test.fc
taskN:
func:
- N.fc
tests:
- tests/taskN-test.fc
toncli run_tests -c task2
например