Ton

Форк
0
110 строк · 3.4 Кб
1
const int one_month = 2592000; ;; 1 month in seconds = 60 * 60 * 24 * 30
2
const int one_year = 31622400; ;; 1 year in seconds = 60 * 60 * 24 * 366
3
const int auction_start_time = 1659171600; ;; GMT: Monday, 30 July 2022 г., 09:00:00
4
const int one_ton = 1000000000;
5
const int dns_next_resolver_prefix = 0xba93; ;; dns_next_resolver prefix - https://github.com/ton-blockchain/ton/blob/7e3df93ca2ab336716a230fceb1726d81bac0a06/crypto/block/block.tlb#L819
6

7
const int dns_config_id = 80; ;; dns black list config param; in testnet -80
8

9
const int op::fill_up = 0x370fec51;
10
const int op::outbid_notification = 0x557cea20;
11
const int op::change_dns_record = 0x4eb1f0f9;
12
const int op::process_governance_decision = 0x44beae41;
13
const int op::dns_balance_release = 0x4ed14b65;
14

15
int mod(int x, int y) asm "MOD";
16

17
slice zero_address() {
18
    return begin_cell().store_uint(0, 2).end_cell().begin_parse();
19
}
20

21
;; "ton\0test\0" -> "ton"
22
int get_top_domain_bits(slice domain) {
23
    int i = 0;
24
    int need_break = 0;
25
    do {
26
        int char = domain~load_uint(8); ;; we do not check domain.length because it MUST contains \0 character
27
        need_break = char == 0;
28
        if (~ need_break) {
29
            i += 8;
30
        }
31
    } until (need_break);
32
    throw_if(201, i == 0); ;; starts with \0
33
    return i;
34
}
35

36
slice read_domain_from_comment(slice in_msg_body) {
37
    int need_break = 0;
38
    builder result = begin_cell();
39
    do {
40
        result = result.store_slice(in_msg_body~load_bits(in_msg_body.slice_bits()));
41
        int refs_len = in_msg_body.slice_refs();
42
        need_break = refs_len == 0;
43
        if (~ need_break) {
44
            throw_unless(202, refs_len == 1);
45
            in_msg_body = in_msg_body~load_ref().begin_parse();
46
        }
47
    } until (need_break);
48
    return result.end_cell().begin_parse();
49
}
50

51
int check_domain_string(slice domain) {
52
    int i = 0;
53
    int len = slice_bits(domain);
54
    int need_break = 0;
55
    do {
56
        need_break = i == len;
57
        if (~ need_break) {
58
            int char = domain~load_uint(8);
59
            ;; we can do it because additional UTF-8 character's octets >= 128 -- https://www.ietf.org/rfc/rfc3629.txt
60
            int is_hyphen = (char == 45);
61
            int valid_char = (is_hyphen & (i > 0) & (i < len - 8)) | ((char >= 48) & (char <= 57)) | ((char >= 97) & (char <= 122)); ;; '-' or 0-9 or a-z
62

63
            need_break = ~ valid_char;
64
            if (~ need_break) {
65
                i += 8;
66
            }
67
        }
68
    } until (need_break);
69
    return i == len;
70
}
71

72
(int, int) get_min_price_config(int domain_char_count) {
73
    if (domain_char_count == 4) {
74
        return (1000, 100);
75
    }
76
    if (domain_char_count == 5) {
77
        return (500, 50);
78
    }
79
    if (domain_char_count == 6) {
80
        return (400, 40);
81
    }
82
    if (domain_char_count == 7) {
83
        return (300, 30);
84
    }
85
    if (domain_char_count == 8) {
86
        return (200, 20);
87
    }
88
    if (domain_char_count == 9) {
89
        return (100, 10);
90
    }
91
    if (domain_char_count == 10) {
92
        return (50, 5);
93
    }
94
    return (10, 1);
95
}
96

97
int get_min_price(int domain_bits_length, int now_time) {
98
    (int start_min_price, int end_min_price) = get_min_price_config(domain_bits_length / 8);
99
    start_min_price *= one_ton;
100
    end_min_price *= one_ton;
101
    int seconds = now_time - auction_start_time;
102
    int months = seconds / one_month;
103
    if (months > 21) {
104
        return end_min_price;
105
    }
106
    repeat (months) {
107
        start_min_price = start_min_price * 90 / 100;
108
    }
109
    return start_min_price;
110
}

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

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

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

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