Ton

Форк
0
67 строк · 1.7 Кб
1
(int) equal_slices (slice s1, slice s2) asm "SDEQ";
2

3
() recv_internal(cell in_msg_cell, slice in_msg) {
4
  
5
  ;; Parse message
6
  var cs = in_msg_cell.begin_parse();
7
  var flags = cs~load_uint(4);  ;; int_msg_info$0 ihr_disabled:Bool bounce:Bool bounced:Bool
8
  slice s_addr = cs~load_msg_addr();
9

10
  ;; Parse data
11
  var ds = get_data().begin_parse();
12
  slice address_0 = ds~load_msg_addr();
13
  slice address_1 = ds~load_msg_addr();
14
  ds~skip_bits(64);
15
  ds.end_parse();
16

17
  ;; Resolve addresses address
18
  slice src = null();
19
  slice dst = null();
20
  if (equal_slices(s_addr, address_0)) {
21
        src = address_0;
22
        dst = address_1;
23
  } elseif (equal_slices(s_addr, address_1)) {
24
        src = address_1;
25
        dst = address_0;
26
  }
27

28
  ;; Bounce while keeping storage fee on unknown
29
  ;; Useful fro deploy
30
  if (null?(src)) {
31
      raw_reserve(1000000000, 2);
32
      var msg = begin_cell()
33
        .store_uint(0x10, 6)
34
        .store_slice(s_addr)
35
        .store_grams(0)
36
        .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
37
      .end_cell();
38
      send_raw_message(msg, 128);
39
      return ();
40
  }
41

42
  ;; Process messages
43
  raw_reserve(1000000000, 2);
44
  var msg = begin_cell()
45
    .store_uint(flags, 4)
46
    .store_uint(0, 2)
47
    .store_slice(dst)
48
    .store_grams(0)
49
    .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1);
50

51
  ;; Content
52
  if(msg.builder_bits() + 1 + in_msg.slice_bits() > 1023) {
53
    msg = msg.store_uint(1,1)
54
             .store_ref(begin_cell().store_slice(in_msg).end_cell());
55
  } else {
56
    msg = msg.store_uint(0,1)
57
             .store_slice(in_msg);
58
  }
59

60
  ;; Send message
61
  send_raw_message(msg.end_cell(), 128);
62
}
63

64
() recv_external(slice in_msg) impure {
65
    ;; Do not accept external messages
66
    throw(72);
67
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.