Контакти

Що таке швидкість хешування. Хеш-функція: що це таке, навіщо потрібна і якою буває. Хеш підрядки та його швидке обчислення

Спробуймо зрозуміти що таке складність мережі, якою лякають всіх нових майнерів і що це за такий хешрейт мережі.

Зараз дуже багато чатів з майнінгу криптовалют і з трейдингу. Кожне питання новачка «який ASIC купити чи якусь ферму зібрати» супроводжується відповіддю… «Та ти подивися як зростає складність мережі і не думай навіть потикатися в цю справу!»

Для простоти ми розглядатимемо складність і хешрейт мережі на прикладі монетки (аналог Ефіріуму, на аналогічному алгоритмі). Цифри менші і, сподіваюся, мені буде простіше вам пояснити суть.

Мережа кожної криптовалюти має такий параметр, як «час створення блоку». У випадку з Musicoin це 15 секунд. Кожен 15 секунд один із майнерів повинен знаходити рішення для створення блоку.

Як утримати цей параметр у 15 секунд, незалежно від кількості майнерів, які підключені до мережі? Адже, якщо майнерів багато, вони будуть знаходити блоки занадто часто (ось приклад порожнього блоку в мережі UBIQ http://www.ubiq.cc/block/212214), а якщо майнерів мало, то блоки будуть рідко і транзакції мережі будуть йти дуже довго.

За знаходження 1 блоку в мережі Musicoin майнер або пул (багато майнерів разом) отримують 309 монет Musicoin = $13 за сучасним курсом.

Відступ. У мережі Ефіріум за перебування одного блоку платять 5 ETH = $1900, у мережі Ефіріум класик 5 ETC = $75. Але, на жаль, і складність та хешрейт мереж у цих монетах у рази більша.

Якщо майнери плодитимуть порожні блоки і отримуватимуть за це гроші — монета знецінюватиметься, а якщо блоки знаходитимуть повільно — транзакції стануть… знову ж таки, монета знецінюватиметься.

Тут починає працювати Складність. Якщо на пальцях, це просто складність завдання, яке треба вирішити майнерам для створення блоку, і вона може змінюватися. Складність залежить від мережі Хешрейта (кількості майнерів підключених до мережі цієї монети). Якщо майнерів мало – складність падає, якщо майнерів багато – складність починає зростати і одному конкретному майнеру блок знайти складніше…

Винагороду майнери отримують у монетах самої мережі, але всі майнери люблять гарні машини, їжу та ганчірки. Тому для них важливо скільки це в доларах США, адже якщо ціна монети зросла на біржі, то й цінність винагороди за знаходження блоку стала більшою у горезвісних доларах США.

Днями, 27 серпня (див. графік вище) ціна монетки musicoin зросла в рази, майнери, які були зайняті майнінгом монет Zcash, Ефіріум, Monero... ахнули в передчутті більше прибутку і переключили свої ферми на монетку musicoin. При цьому сама мережа musicoin, зрозуміло, відреагувала різким зростанням складності.

Складність вимірюється в хешах (зазвичай террахешах TH), у застосуванні до майнінгу, це одиниця виконаної роботи. Потужність мережі (кількість майнерів) вимірюється в хешах за секунду (TH/s). Мережа сама підлаштовує складність таким чином, щоб Складність/потужність мережі = час до наступного блоку (у випадку з Musicoin 15 секунд).

27 серпня до зльоту ціни Складність мережі була: 7.5 TH в середньому, а мережа Хешрейт: 500 GH/s (приблизно 16000 відеокарт), то після зльоту ціни Хешрейт мережі виріс до: 1.12 TH/s (1120 GH/s) (приблизно 3500 відеокарт), а складність при цьому злетіла до 16728 TH.

У результаті прибуток ферми, яка видобувала монету ДО злету ціни та після зльоту ціни не змінилася. Ферма стала видобувати менше монет, але за більшою ціною (не важливо це ферма або цілий пул ферм).

Це ключовий момент, який дуже багато хто не розуміє. Так, можна на цих стрибках курсу-складності вирвати пару баксів, але, як правило, все встаканивается за пару годин і не принципово яку валюту ви видобуватимете на тому самому алгоритмі. Вихлоп буде однаковий. Звичайно, якщо ви чекаєте на зліт тієї чи іншої валюти, копайте її.

Тут треба зробити черговий відступ, є люди які пильно стежать за складністю і хешрейтом ... всіх мереж цілодобово і в моменти коли, хешрейт впаде або складність просідає, купують потужності на Nicehash і направляють їх на мережу монети, що просіла. І ловлять багато блоків.

Власне, висновок:Уявімо, що є тільки одна валюта Ефіріум. Хешрейт мережі Ефіріум постійно зростає, приходять нові й нові майнери. Якщо курс Ефіріум падатиме, а кількість майнерів буде незмінною (або ще гірше зростатиме), майнінг прийде до рівня розетки (скільки намайнив $, стільки заплатив за електрику $). У цій ситуації ферми почнуть вимикати та продавати, складність почне падати, а доходи знову зростатимуть.

Виживає найсильніший і той, хто має гроші іноді чекати і майнути на розетку.

Сьогодні, мабуть, важко знайти людину, яка не знає про те, що таке криптовалюта. Цей інноваційний продукт буквально підірвав Інтернет, прикувши до себе увагу мільйонів людей. Майнінг цифрових монет - один із небагатьох способів стати володарем криптовалюти. Однак складність мережі популярних платформ зросла настільки, що для видобутку дорогих "коїнів" недостатньо хешрейту звичайних процесорів та відеокарт.

Хешрейт - одиниця виміру, що дозволяє визначити ефективну обчислювальну потужність обладнання, задіяного у видобутку криптоавлюти. Hashrate може виражатися в наступних одиницях:

  • хеш/секунду (H/s);
  • мегахеш/секунду (MH/s);
  • гігахеш/секунду (GH/s);
  • терахеш/секунду (TH/s);
  • петахеш/секунду (PH/s).

Варто зазначити, що одиниця H/s не зустрічається в жодній піринговій мережі. Це тим, що складність майнінгу безперервно зростає, але в видобуток криптомонет потрібно устаткування, що має більш серйозними обчислювальними потужностями.

На чому заснований процес майнінгу

Майнінг - досить складний процес, суть якого полягає в тому, що обладнання, задіяне у підтримці стабільної та правильної роботи пірингової мережі, має вирішувати математичні завдання. Коли знаходиться правильна відповідь, майнер отримує певну винагороду.

Математичні завдання виникають усередині мережі невипадково, бо як наслідок проведення чергової транзакції. Історія всіх фінансових операцій записується до спеціального реєстру, що знаходиться у відкритому доступі. Обладнання, підключене до мережі, починає обробку інформації, що надійшла, а його головна мета - методом перебору випадкових чисел знайти потрібний хеш. Якщо «правильний» хеш підійшов до секретного ключа, то пірінгова мережа відкриває доступ до наступних операцій.

Для того щоб було зрозуміліше, що з себе являє хешрейт, наведемо наочний приклад. Допустимо, нам відомо, що обладнання майнера має потужність, що дорівнює 15 MH/s (мегахеш/секунду). Це означає, що обчислювальні потужності дозволяють щомиті генерувати 16 мільйонів різних числових комбінацій, серед яких може виявитися єдино правильна, яка задовольняє всі вимоги пірингової мережі.

Як дізнатися хешрейт обладнання

Найвірніший і найпростіший спосіб дізнатися обчислювальну потужність наявного обладнання - встановити спеціальне програмне забезпечення для майнінгу, а потім відкрити консоль, в якій відображаються всі дані. Однак цей метод абсолютно не підходить людям, які тільки задумалися про придбання девайсів для криптодобування. В даному випадку варто звернути увагу на потужність, заявлену виробником. Але вона має середнє значення і може змінюватись в залежності від наступних факторів:

  • Алгоритм майнінгу. Слід враховувати, що хешрейт може як зрости, так і знизитися при роботі з різними алгоритмами. Наприклад, якщо девайс демонструє високі показники всередині пірингової мережі, що використовує алгоритм SHA, ефективність суттєво знижується при переході на мережу, що працює з Scrypt.
  • Виробник обладнання. Якщо, наприклад, взяти відеокарту GTX 1080 від Nvidia і аналогічну від MSI, то незважаючи на загальну схожість показників, їхній хешрейт буде абсолютно різним.

Більшість майнерів-початківців борознять простори всесвітньої мережі в пошуках спеціальних таблиць, в яких зазначена достовірна інформація про обчислювальну потужність того чи іншого обладнання.

Відеокарти, які мають найвищий хешрейт

Сучасний ринок графічних адаптерів пропонує широкий асортимент, проте далеко не всі відеокарти ефективно справляються з майнінгом. Пропонуємо розглянути таблицю, в якій наведено найкращі відеоадаптери для криптодобування на кінець листопада 2017 року.

Hashrate

(MH/s)

Вартість

(рублі)

Окупність (днів)

Окупність без урахування витрат

на електроенергію (днів)

Radeon RX470

11.700

Radeon RX480

15.100

GeForce GTX 1060

12.000

GeForce GTX 1070

23.500

Radeon Fury X

26.500

Хешрейт, вказаний у таблиці, є дійсним під час роботи з алгоритмом Equihash. Однак показники можуть суттєво змінитись, оскільки складність майнінгу безперервно зростає. На сьогоднішній момент неможливо спрогнозувати, яка обчислювальна потужність даних девайсів буде навіть через місяць. Тому терміни окупності обладнання можуть значно збільшитися.

Як розрахувати дохід, знаючи хешрейт

Кожен майнер, який знає справжній хешрейт власного обладнання, може без проблем розрахувати свій добовий, тижневий та навіть місячний дохід. Для цього достатньо скористатися онлайн калькулятором, наприклад сервісом coinwarz.com.

Будьте в курсі всіх важливих подій United Traders - підписуйтесь на наш

Нерідко при завантаженні торентів або безпосередньо самих файлів в описі стоїть щось на кшталт «ad33e486d0578a892b8vbd8b19e28754» (наприклад, ex.ua), нерідко з припискою «md5». Це хеш-код – результат, який видає хеш-функція після обробки вхідних даних. У перекладі з англійської хеш означає плутанину, марихуану, траву або страву з дрібно нарізаного м'яса та овочів. дуже і дуже складно, можна сказати, що практично неможливо. Тоді виникає запитання: «Навіщо взагалі потрібні всі ці вони видають незрозумілу абракадабру, яка ще й не розшифровується?». Про це й йтиметься у цій статті.

Що таке хеш-функція та як вона діє?

Ця функція призначена для перетворення вхідних даних скільки завгодно великого розміру результат фіксованої довжини. Сам процес такого перетворення називається хешуванням, а результат - хеш або хеш-кодом. Іноді використовують слова «відбиток» або «дайджест повідомлення», але практично вони зустрічаються набагато рідше. Існує маса різних алгоритмів того, як можна перетворити будь-який масив даних на якусь послідовність символів певної довжини. Найбільшого поширення набув алгоритм під назвою md5, розроблений ще 1991 року. Незважаючи на те, що на сьогоднішній день md5 є дещо застарілим і до використання не рекомендується, він досі все ще в ходу і часто замість слова «хеш-код», на сайтах просто пишуть md5 і вказують код.

Навіщо потрібна хеш-функція?

Знаючи результат, практично неможливо визначити вихідні дані, але ті самі вхідні дані дають однаковий результат. Тому хеш-функція (її ще називають функція згортки) часто використовується для зберігання дуже важливої ​​інформації, як пароль, логін, номер посвідчення та інша персональна інформація. Замість порівняння відомостей, введених користувачем, з тими, що зберігаються у базі даних, відбувається зіставлення їх хешей. Це дає гарантію, що при випадковому витоку інформації ніхто не зможе скористатися важливими даними для своїх цілей. Шляхом порівняння хеш-коду також зручно перевіряти правильність завантаження файлів з Інтернету, особливо якщо під час завантаження відбувалися перебої зв'язку.

Хеш-функції: якими вони буваютьт

Залежно від свого призначення хеш-функція може бути одного із трьох типів:

1. Функція перевірки цілісності інформації

Коли відбувається через мережу, відбувається розрахунок хеша пакета, і цей результат також передається разом із файлом. При прийомі знову обчислюється хеш-код і порівнюється з отриманим мережею значенням. Якщо код не збігається, це говорить про помилки, і зіпсований пакет знову буде переданий. Така функція має швидку швидкість розрахунку, але малу кількість хеш значень і погану стабільність. Приклад такого типу: CRC32, у якої всього лише 232 відмінних між собою значення.

2. Криптографічна функція

Використовується для захисту від НД. Вони дозволяють перевірити, чи не відбулося спотворення даних у результаті НД під час передачі файлів через мережу. Справжній хеш в цьому випадку є загальнодоступним, а хеш отриманого файлу можна обчислити за допомогою різних програм. Такі функції мають довгий і стабільний термін роботи, а пошук колізій (можливих збігів результату від різних вихідних даних) дуже ускладнений. Саме такі функції використовують для зберігання БД паролів (SH1, SH2, MD5) та іншої цінної інформації.

3. Функція, призначена для створення ефективної структури даних

Її метою є компактна і досить упорядкована організація відомостей у спеціальній структурі, що зветься хеш-таблиці. Така таблиця дозволяє додавати нову інформацію, видаляти відомості та шукати потрібні дані з дуже високою швидкістю.

Алгоритми хешування рядків допомагають вирішити багато завдань. Але у них є великий недолік: що найчастіше вони не 100%, оскільки є безліч рядків, хеші яких збігаються. Інша річ, що в більшості завдань на це можна не звертати уваги, оскільки ймовірність збігу хешів таки дуже мала.

Визначення хеша та його обчислення

Один з найкращих способів визначити хеш-функцію від рядка S наступний:

H(S) = S + S * P + S * P ^ 2 + S * P ^ 3 + ... + S [N] * P ^ N

де P – деяке число.

Розумно вибирати для P просте число, що дорівнює кількості символів у вхідному алфавіті. Наприклад, якщо рядки припускаються що складаються лише з маленьких латинських літер, то хорошим вибором буде P = 31. Якщо літери можуть бути і великими, і маленькими, то, наприклад, можна P = 53.

У всіх шматках коду цієї статті буде використовуватися P = 31.

Саме значення хеша бажано зберігати у найбільшому числовому типі - int64, він же long long. Очевидно, що при довжині рядка близько 20 символів буде відбуватися переповнення значення. Ключовий момент - що ми не звертаємо увагу на ці переповнення, хіба що беручи хеш по модулю 2^64.

Приклад обчислення хеша, якщо допустимі лише малі латинські букви:

Const int p = 31; long long hash = 0, p_pow = 1; for (size_t i=0; i

У більшості завдань має сенс спочатку обчислити всі необхідні ступеня P у якомусь масиві.

Приклад завдання. Пошук однакових рядків

Вже тепер ми можемо ефективно вирішити таке завдання. Наведено список рядків S, кожна довжиною не більше M символів. Припустимо, потрібно знайти всі рядки, що повторюються, і розділити їх на групи, щоб у кожній групі були тільки однакові рядки.

Звичайним сортуванням рядків ми отримали алгоритм зі складністю O (N M log N), тоді як використовуючи хеші, ми отримаємо O (N M + N log N).

Алгоритм. Порахуємо хеш від кожного рядка і відсортуємо рядки по цьому хешу.

Vector s(n); // ... зчитування рядків ... // Вважаємо всі ступеня p, припустимо, до 10000 - максимальної довжини рядків const int p = 31; vector p_pow (10000); p_pow = 1; for (size_t i=1; i > hashes (n); for (int i=0; i

Хеш підрядки та його швидке обчислення

Припустимо, нам дано рядок S, і дані індекси I і J. Потрібно знайти хеш від підрядка S.

За визначенням маємо:

H = S [I] + S * P + S * P ^ 2 + ... + S [J] * P ^ (J-I)

H * P [I] = S [I] * P [I] + ... + S [J] * P [J], H * P [I] = H - H

Отримана властивість є дуже важливою.

Справді, виходить, що, знаючи тільки хеш від усіх префіксів рядки S, ми можемо за O (1) отримати хеш будь-який підрядок.

Єдина виникає проблема - те, що треба вміти ділити на P[I]. Насправді це не так просто. Оскільки ми обчислюємо хеш за модулем 2^64, то поділу на P[I] ми маємо знайти щодо нього зворотний елемент у полі (наприклад, з допомогою Розширеного алгоритму Евклида), і виконати множення цей зворотний елемент.

Втім, є й простіший шлях. В більшості випадків, замість того, щоб ділити хеші на ступені P, можна, навпаки, множити їх на ці ступені.

Припустимо, дані два хеша: один помножений на P[I], а інший - на P[J]. Якщо I< J, то умножим перый хэш на P, иначе же умножим второй хэш на P. Теперь мы привели хэши к одной степени, и можем их спокойно сравнивать.

Наприклад, код, який обчислює хеші всіх префіксів, а потім за O(1) порівнює два підрядки:

String s; int i1, i2, len; // вхідні дані // вважаємо всі ступені p const int p = 31; vector i2 && h1 == h2 * p_pow) cout<< "equal"; else cout << "different";

Застосування хешування

Ось деякі типові застосування хешування:

  • Визначення кількості різних підрядок за O (N^2 log N) (див. нижче)
  • Визначення кількості паліндромів усередині рядка

Визначення кількості різних підрядок

Нехай дано рядок S довжиною N, що складається лише з маленьких латинських букв. Потрібно знайти кількість різних підрядок у цьому рядку.

Для вирішення переберемо по черзі довжину підрядка: L = 1.. N.

Для кожного L ми побудуємо масив хешів підрядок довжини L, причому наведемо хеші до одного ступеня, і відсортуємо цей масив. Кількість різних елементів у цьому масиві додаємо до відповіді.

Реалізація:

String s; // Вхідний рядок int n = (int) s.length(); // Вважаємо всі ступеня p const int p = 31; vector p_pow (s.length()); p_pow = 1; for (size_t i=1; i H(s.length()); for (size_t i=0; i hs (n-l+1); for (int i=0; i

У мережі Bitcoin та більшості інших сучасних криптовалют одиницею обчислювальної потужності є хешрейт. Обробляючи операції та формуючи нові блоки транзакцій, обчислювальна техніка проводить складні математичні розрахунки за вирішення яких майнер отримує певну кількість нових криптомонет. Вся інформація про проведені транзакції записується та зберігається в історії, яка знаходиться у загальному доступі. Завдання майнерів полягає в тому, щоб підібрати потрібний хеш із усіх можливих комбінацій. Цей хеш аналогічний секретному ключу та надає доступ до здійснення нових операцій. Розв'язавши завдання майнеру одноразово виплачується винагорода, розмір якої суворо регламентований алгоритмом криптовалютної мережі. Після закриття блоку майнер переходить на обчислення нового блоку. Як правило, підбором хеша займається одночасно велика кількість пристроїв, що працюють в одному пулі, і як тільки один з них знаходить хеш, винагорода виплачується пропорційно всій групі, після чого процес починається заново.

Якщо це математично, це виглядає так - майнери займаються підбором хеша, куди входить частина попереднього блоку, загальна кількість хешей за останні кілька хвилин і довільна цифра. Майнерам необхідно знайти відповідне випадкове число, перебираючи всі можливі варіанти, доки не буде згенерований хеш, що відповідає вимогам системи.

Цей процес нагадує принцип роботи торрент-трекерів. Ні для кого не секрет, що вони є основою p2p-мережі, яка дає можливість швидко та в необмеженій кількості завантажувати фільми, музику та програмне забезпечення. Будь-який користувач завантаживши файл і залишившись на роздачі, надає можливість іншим учасникам мережі завантажувати цю інформацію, при цьому зростає його рейтинг, що дозволяє в майбутньому знову завантажити певну кількість гігабайт даних.

Майнінг виробляється на все більш потужному устаткуванні, що призводить до підвищення складності видобутку нових монет. У перші роки існування біткоїну, кожен бажаючий міг видобути криптовалюту на власному домашньому комп'ютері, на той час майнери для видобутку біткоїну використовували потужні відеокарти. Однак у певний момент складність настільки зросла, що на звичайному комп'ютері видобувати btc стало неможливо і для цих цілей розробили спеціальні пристрої - ASIC-майнери, які мають високу швидкість хешування при незначних витратах на електроенергію.

Як дізнатися швидкість хешування

Немає єдиних інформаційних таблиць, у яких вказувалася потужність тієї чи іншої устаткування, проте через те, що у швидкість хеширования (хешрейт) впливають різні чинники. Ось основні з них:

  • Виробник обладнання. При абсолютно однакових технічних характеристиках пристрої від різних виробників будуть видавати різний хешрейт.
  • Слот, через який майнер чи відеокарта підключено до материнської плати. Бувають випадки, що підключаючи пристрій до різних слотів - швидкість хешування кардинально відрізнялася.
  • Алгоритм. Устаткування по-різному працює кожному з використовуваних алгоритмів. Наприклад, якщо обчислювати на Scrypt-алгоритмі, то швидкість хешування буде одна, а якщо обладнання вироблятиме обчислення використовуючи SHA, то хешрейт буде зовсім інший.

Майнери-початківці повинні пам'ятати, що певний тип обладнання, незважаючи на високі показники продуктивності, може взагалі не працювати з певними криптовалютами.

Виробники техніки завжди вказують на свою продукцію заявлену потужність, але не слід повністю довіряти цим цифрам, адже навіть моделі, що сходять з одного конвеєра, видають різну швидкість хешування. Оптимальним варіантом для того, щоб обчислити хешрейт, є обчислення середньої швидкості хешування за певний відрізок часу на обладнанні, що працює.

Висновок

Швидкість хешування - ключовий показник, який впливає на швидкість обчислень, а отже збільшує прибуток майнера. Однак цей показник у майнінгу залежить від безлічі різних зовнішніх факторів, тому купуючи обладнання не можна точно знати, яка у нього потужність і отже, який дохід приноситиме техніка. Багато майнерів вважають за краще не зв'язуватися з тонким налаштуванням пристрою, а звернутися для цього до фахівців сервісів, що надають послуги хмарного майнінгу. Укладаючи з компанією договір, майнер орендує у неї певну потужність і на швидкість хешрейту в такому разі нічого не зможе вплинути.

Будьте в курсі всіх важливих подій United Traders - підписуйтесь на наш



Сподобалася стаття? Поділіться їй