TON Дев Чат
uint5
## N
тоже самое что uintN
C:\Users\milov\AppData\Local\toncli\toncli\fift-libs
C:\Users\milov\AppData\Local\toncli\toncli\fift-libs
toncli run_tests -c task1
zlib1g-dev
libssl-dev
begin_try();
;; Стрёмный код
begin_catch();
;; Обработка ошибок
end_try();
"Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF"a becomes x{9FE6666666666666666666666666666666666666666666666666666666666666667_}
0x9FE666666666666... = 10 0 11111111 00110011...
one tag byte (0x11 for "bounceable" addresses, 0x51 for "non-bounceable"; add +0x80 if the address should not be accepted by software running in the production network)
one byte containing a signed 8-bit integer with the workchain_id (0x00 for the basic workchain, 0xff for the masterchain)
32 bytes containing 256 bits of the smart-contract address inside the workchain (big-endian)
2 bytes containing CRC16-CCITT of the previous 34 bytes
builder store_builder(builder a, builder b) inline asm "STBR";
Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF=11(bounceable)ff(workchain)3333333...(address)4bc5(crc16)
x{FF00F4A413F4BCF2C80B}
x{62_}
x{CC}
x{D4_}
x{0831C02497C138007434C0C05C6C2544D7C0FC03383E903E900C7E800C5C75C87E800C7E800C00B4C7E08403E29FA954882EA54C4D167C0278208405E3514654882EA58C511100FC02B80D60841657C1EF2EA4D67C02F817C12103FCBC2_}
x{3E910C1C2EBCB8536_}
list.cons( unsafe_tuple( [ 1 ] ) )Или
list.cons( unsafe_tuple( [1,null()] )Похоже что ни то, ни другое
list = cons( [...], list)Если кому интересно
(slice) frendly_parse(int workchain, int address, int code) asm "smca>$";так?
error: `if` and `else` branches should both return or both not returnНа последнем FunC это вроде бы пофиксили, но Windows билд достаточно старый, а Ubuntu: https://github.com/ton-blockchain/ton/actions/runs/2830772469 - нерабочий, пишет:
Illegal instruction
from ton.sync import TonlibClientвыходит ошибка
from ton.utils import wallet
client = TonlibClient()
TonlibClient.enable_unaudited_binaries()
client.init_tonlib()
wallet = client.import_wallet('фраза')
path = wallet.path
wallet = client.find_wallet(path)
wallet.transfer('EQCl1Ug9ZT9ZfGyFH9l4q-bqaUy6kyOzVPmrk7bivmVKJRRZ', client.to_nano(0.01), comment='test')
Traceback (most recent call last):
File "/home/ubuntu/egsaa/generate_wallet.py", line 14, in <module>
wallet.transfer('EQCl1Ug9ZT9ZfGyFH9l4q-bqaUy6kyOzVPmrk7bivmVKJRRZ', client.to_nano(0.01), comment='test')
File "/home/ubuntu/.local/lib/python3.10/site-packages/ton/sync.py", line 18, in syncified
return loop.run_until_complete(coro)
File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
return future.result()
File "/home/ubuntu/.local/lib/python3.10/site-packages/ton/account/wallet_methods.py", line 79, in transfer
return await self.send_messages(messages, **kwargs)
File "/home/ubuntu/.local/lib/python3.10/site-packages/ton/account/wallet_methods.py", line 33, in send_messages
state = await self.build_state()
File "/home/ubuntu/.local/lib/python3.10/site-packages/ton/account/wallet_methods.py", line 15, in build_state
assert 'source' in self.__dict__, 'source must be specified'
AssertionError: source must be specified
0:89161774377295515140711721210210229423767269993030697376312246444550094176852
kQDFH8ajQ8J_hr7SLULhZIyVQ-S3DXPgdhk-haFI_xHCVEBa
0:89161774377295515140711721210210229423767269993030697376312246444550094176852— это raw address, уже не MsgAddressInt, но и не user-friendly
() set_c7( tuple value ) impure asm "c7 POP"Но теперь у меня stack underflow
.config/toncli/func-libs/tests-helpers.func:16:9: error: undefined function `now`, defining a global function of unknown type
now(), ;; unixtime
get_public_key
Далее использовать протокол согласования ключей ECDH:dump_stack();
, но цена toncli - крайне неудобное написание тестовreturn
нужные значения, которые хочется посмотреть (я так делал в 3-ем задании)await testEncode(
'0:588af75cd06024fa79dccda32760db928e9797bb69c94b70d9e0aa8b8e8b17e6',
'EQBYivdc0GAk-nnczaMnYNuSjpeXu2nJS3DZ4KqLjosX5sVC'
);
var (int gas_used1, _) = invoke_method(recv_internal, [message.begin_parse()]);
len:(#< n)
#< 31
это тоже самое что #<=30
, подробнее тут:sender_public_key
(можно пропустить в случае кошельков, т.к. можно из get метода достать)digest
- хеш sha256 от отправляемого сообщенияencrypted_data
- зашифрованные данные через AES где ключ шифрования вычисляется из digest
и secret_key
реализация на котлине (используется для ADNL протокола TON):forall X -> int is_int(X x) asm "<{ TRY:<{ 0 PUSHINT ADD DROP -1 PUSHINT }>CATCH<{ 2DROP 0 PUSHINT }> }>CONT 1 1 CALLXARGS";
EQC3qDjaNf_IUpSO3U0Ssa9XUEoKmNmouS1okltdI72R1rl4
() recv_internal() {...}
,() recv_internal(slice in_msg) {...}
,() recv_internal(int msg_value, cell in_msg_cell, slice in_msg) {...}
._ split_depth:(Maybe (## 5)) special:(Maybe TickTock) code:(Maybe ^Cell) data:(Maybe ^Cell) library:(HashmapE 256 SimpleLib) = StateInit;
StateInit.code
- код контракта,SrareInit.data
- ячейка с данными, в которой лежит публичный ключ и seqno 0 (в более новых версиях кошелька там еще его ID и другие параметры)
kQCGLFDs7oM_Nyijd7z8ZXkErelQ1UfPsgKnB5eeSNIKs8Xb
lite-client -p /ton/liteserver.pub -a ton:6002 last
"Asm.fif" include
1 PUSHINT
как такой код может выдавать PUSHINT: stack underflow
?
"Asm.fif" include
NOP
даже nop выдает stack underflow
toncli fift run code.fif
?
INFO: 🚀 You want to interact with your contracts ['contract'] in testnet - that's great!
INFO: ✋ Do not panic - i'm creating wallet in /root/.config/toncli, so you can easily manage your contracts
INFO: 🐒 I'll create folder /root/.config/toncli/wallet with project wallet and all needed files
INFO: 👑 Folder successfully created - happy blockchain hacking
INFO: 🐼 You now can do cd wallet and toncli deploy -n testnet
INFO: 🤗 Run tests on ['/root/.config/toncli/wallet/fift/data.fif']
Saved new private key to file build/contract.pk
INFO: Depth test pass 🏁
INFO: Type test pass 🏁
INFO: 🥳 Start contract manipulation
[ 1][t 0][2022-08-13 05:28:23.694964697][Fift.cpp:67] top: <text interpreter continuation>
level 1: <continuation 0x5600edfff350>
level 2: <text interpreter continuation>
[ 1][t 0][2022-08-13 05:28:23.694975397][fift-main.cpp:204] Error interpreting file `/toncli/src/toncli/modules/fift/contract_manipulation.fif`: contract.fif:15: PROCINLINE:<{:-?
куча python стека
subprocess.CalledProcessError: Command '['/usr/local/bin/fift', '-I', '/root/.config/toncli/fift-libs', '-s', '/toncli/src/toncli/modules/fift/contract_manipulation.fif', '/root/.config/toncli/wallet/build/contract.fif', '/tmp/tmpd3tzq2am.boc', '0', '/root/.config/toncli/wallet/build/boc/contract.boc', '/root/.config/toncli/wallet/build/contract_address']' returned non-zero exit status 2.
https://github.com/disintar/toncli/blob/master/src/toncli/lib/fift-libs/Asm.fif
cd ~/.config/toncli/fift-libs
wget https://raw.githubusercontent.com/disintar/toncli/master/src/toncli/lib/fift-libs/Asm.fif
# 2022-08-13 07:05:13 (2.19 MB/s) - 'Asm.fif.1' saved [37587/37587]
sha256sum Asm.fif Asm.fif.1
# eda426c0c618c5f2d5da214044558c5c23e38e1ec03ff1c938221308b3a1208f Asm.fif
# eda426c0c618c5f2d5da214044558c5c23e38e1ec03ff1c938221308b3a1208f Asm.fif.1
toncli update_libs
INFO: Succesfully copied fift-libs func-libs test-libs
from /toncli/src/toncli/lib
to /root/.config/toncli
<b 1 PUSHINT
- работает
liteApi
в конструкторы имеет пару недостатков:address), то приходится либо передавать фейковый liteApi
, либо провайдить настоящий.liteApi
нужен только для deploy()
и transfer()
, все остальное, насколько я вижу, работает без него.liteApi
из конструкторов ContractV*, при этом перенести методы deploy()
& transfer()
непосредственно в LiteClient
, типа: client.deploy(contract)
client.transfer(contract.transferMessage(...))
process_begin: CreateProcess(NULL, "", ...) failed.
make: *** No rule to make target `A:/Workspace/wallet-android3/app/jni/./ton/crypto/smc-envelope/WalletInterface.cpp', needed by `A:/Workspace/wallet-android3/app/build/intermediates/ndkBuild/afatDebug/obj/local/armeabi-v7a/objs-debug/tonlib/./ton/crypto/smc-envelope/WalletInterface.o'. Stop.
Подскажите, пожалуйста, куда копать
"https://tonapi.io/v1/nft/searchItems?owner={}&include_on_sale=true&limit=50&offset=20".format(Address)
ton-contract-executor
на линуксе? Как я понял, то в ton-compiler
предустановлены бинарники для макос, поэтому у меня ошибки вылазят. Можно как-то в ton-contract-executor
поменять путь к компилятору?
Uncaught (in promise) LITE_SERVER_UNKNOWN: cannot apply external message to current state : External message was not accepted
Cannot run message on account: inbound external message rejected by transaction F9D19BECA08FAF8E6B5C31D102E9BA41522C863ACF7D5E4A5C4F17A7A26AF4D0:
exitcode=11, steps=4, gas_used=0
VM Log (truncated):
...execute SETCP 0
execute DICTPUSHCONST 19 (xC_,1)
execute DICTIGETJMPZ
execute THROWARG 11
default exception handler, terminating vm with exit code 11