• 0 Голоса
    2 Сообщения
    16 Просмотры

    Для чтения фрагмента вы можете использовать load_uint(8) в функции.

    Более подробную информацию можно проверить на примере, подобном здесь: https://docs.ton.org/develop/smart-contracts/guidelines/tips#spend-less-gas-по-крупным-смарт-контрактам

    () recv_external(slice in_msg) impure { var signature = in_msg~load_bits(512); var cs = in_msg; var (subwallet_id, valid_until, msg_seqno) = (cs~load_uint(32), cs~load_uint(32), cs~load_uint(32)); throw_if(36, valid_until <= now()); var ds = get_data().begin_parse(); var (stored_seqno, stored_subwallet, public_key, plugins) = (ds~load_uint(32), ds~load_uint(32), ds~load_uint(256), ds~load_dict()); ds.end_parse(); throw_unless(33, msg_seqno == stored_seqno); throw_unless(34, subwallet_id == stored_subwallet); throw_unless(35, check_signature(slice_hash(in_msg), signature, public_key)); accept_message(); set_data(begin_cell() .store_uint(stored_seqno + 1, 32) .store_uint(stored_subwallet, 32) .store_uint(public_key, 256) .store_dict(plugins) .end_cell()); commit(); cs~touch(); int op = cs~load_uint(8);
  • Как сравнить два среза на предмет равенства?

    TON Overflow на русском
    0 Голоса
    2 Сообщения
    21 Просмотры

    Похоже, он удален, чтобы заставить разработчиков использовать функцию equal_slice_bits. Это название функции лучше тем, что оно подчеркивает тот факт, что сравниваются только биты, а не ссылки.

    Это старое определение и того, и другого:

    ;;; Checks whether the data parts of two slices coinside int equal_slice_bits(slice a, slice b) asm "SDEQ"; int equal_slices(slice a, slice b) asm "SDEQ";

    Таким образом, это были обе равнозначные функции.