Привет Codeby !
Я впервые затрагиваю тему криптовалюты, не кидайте камни :3 Я не буду скидывать все в общий котел, копипастить определения из вики и тому подобное. Все рассмотреть сейчас у меня не получится и эта статья будет посвещена основной идее добычи, а именно - майнинге криптовалюты. О том, что из себя представляют все эти транзакции, блокчейны и процесс их добывания. Вам необязательно покупать тачки для майнинга, вкладывать деньги или пытаться заработать на этом другими путями (как-то незаконно например), чтобы просто разобраться в этом. И я считаю, что само фундаментальное понятие - криптовалюта, должно иметь место быть в любом информационном и электронном мире. При всем при этом, переход на децентрализованную электронную систему крипто денег, колоссально изменит и нашу жизнь и экономику. Ну или все закончится печальным Fallout'ом, кто знает.
Эквивалент представления блока
В нашем примере эквивалентом одного блока будет следующая запись :
index - индекс текущего блока
timestamp - время
transactions - словарь транзакций (будем записывать одну транзакцию с ключом отправителя (sender) и числом всех предыдущих транзакций(amount)
proof - доказательство работы (распишу чуть позже)
previous_hash - хэш предыдущего блока
По сути, эта запись - набор словарей, но ее подлинность можно подтвердить и проверить криптографически. Нет нужды в доверии к какому либо лицу (организации) для этого. Есть математика и криптография, обмануть которую, в отличие от людей, гораздо сложнее.
В реальности все примерно так же - как только создается новый блок, в него попадает часть транзакций (число ограничено протоколом). Последовательность этих блоков и есть блокчейн (цепь)
Краткое описание работы протокола :
В данный момент на официальном сайте висит информация о скорости вычисления хэшей в секунду майнерами. И для биткоина это 245.457 EH/s (экзахэшей в секунду) что мы можем округлить до 245 квинтиллионов, а это ± 245 000 000 000 000 000 000 хэш/с. Неплохо да? Сколько знаков майнеры найдут у корня из 2 за пару секунд?
Таким образом список всех транзакций в блоках и последовательность блоков в блокчейне и есть сама валюта.
Самый обычный S9 асик или application-specific integrated circuit (интегральная схема для конкретного применения) - выдает тэрахэши/с, а именно :
13 TH/s - это 13 000 000 000 000 (триллиардов) хэшей в секунду. В нем используются специальные хэш платы, так что это железо создано для добычи .
В чем сложность ?
В чем состоит сложность самой добычи ? В алгоритме и ограничении вычислительных ресурсов. Для поиска новых блоков требуются колосальных размеров вычисления, максимальное их распараллеливание и объединения в пулы.
Вот как можно представить этот процесс наглядно, на примере простого класса и алгоритма :
Процесс работы скрипта - это процесс перебор всех значений хэшей блока, пока не будет найден нужный, а именно тот, что начинается с "00"
Количеством нулей обусловлена сложность - proof . Это количество попыток, которое было затрачено на поиск нового блока. В примере лишь два нуля в начале блока, но в реальности этих нулей порядка 20 и алгоритм намного сложнее (можно поиграть с нулями и прочувствовать разницу времени вычисления).
Сложность поиска с каждым новым нулем возрастает по геометрической прогрессии. Как только будет найдет новый хэш, будет создан новый блок, который примет хэш предыдущего.
Таким образом, изменив один из блоков (добавив например левую транзакцию), изменится его хэш, а значит и хэш других блоков цепочки, которая станет не валидна.
Византийский взлом (Byzantine Fault) — это потенциальная проблема, с которой может столкнуться сеть, если участники не согласятся с ее стратегией. Ошибка предполагает, что некоторые члены могут быть подкуплены. Такие узлы будут работать недемократично, и одной точки отказа будет достаточно, чтобы поставить систему под угрозу.
Блокчейн Биткоин решает Византийский сбой с помощью своего алгоритма Proof-of-Work, позволяя внедрять новые стратегии. Если 51% сети соглашается с процессом, то Blockchain одобряет цепь блоков. Поскольку количество майнеров продолжает расти, вероятность того, что злонамеренные участники захватят блокчейн, становится маловероятной. По данным портала по инсайдерским новостям Business Insider, в криптопространстве активно работает около 1 миллиона майнеров. Потребовалось бы примерно 510 000 узлов, чтобы договориться о намеренной угрозе блокчейна для успеха Византийского разлома
Другими словами, чтобы поддерживать свою (ложную) цепочку блоков, вы должны успевать майнить новые блоки быстрее всего остального мира. Имея 51% всех вычислительных ресурсов которые есть у майнеров, у вас будут шансы.
Ключи и транзакции
Два ключа 256 бит приватный и 512 бит публичный генерируются по алгоритму
Послесловие
Сама идея реализации простого блокчейна по протоколу HTTP найдена у dvf
Идея в том, что только на простых примерах можно придти к пониманию более сложных. Я не затрагивал биржи, рынок, создание и много аспектов крипты в данной теме, но попытался немного приоткрыть завесу ее математики создания. Буду рад и в будущем поделиться своими мыслями с вами.
Спасибо за внимание
Я впервые затрагиваю тему криптовалюты, не кидайте камни :3 Я не буду скидывать все в общий котел, копипастить определения из вики и тому подобное. Все рассмотреть сейчас у меня не получится и эта статья будет посвещена основной идее добычи, а именно - майнинге криптовалюты. О том, что из себя представляют все эти транзакции, блокчейны и процесс их добывания. Вам необязательно покупать тачки для майнинга, вкладывать деньги или пытаться заработать на этом другими путями (как-то незаконно например), чтобы просто разобраться в этом. И я считаю, что само фундаментальное понятие - криптовалюта, должно иметь место быть в любом информационном и электронном мире. При всем при этом, переход на децентрализованную электронную систему крипто денег, колоссально изменит и нашу жизнь и экономику. Ну или все закончится печальным Fallout'ом, кто знает.
Эквивалент представления блока
В нашем примере эквивалентом одного блока будет следующая запись :
{'index': 2, 'timestamp': 1644749528.435878, 'transactions': [{'sender': '684741e048f535586c29bce1d7b345de0722efad334a826faf2c83fd141acab6', 'recipient': 'cryptochain@cryptmail.in', 'amount': 18}], 'proof': 85, 'previous_hash': '00406930eef7ab53ebfd2f196dc94e2d5244c4292e9599de5ed9785f00ab087e'}
index - индекс текущего блока
timestamp - время
transactions - словарь транзакций (будем записывать одну транзакцию с ключом отправителя (sender) и числом всех предыдущих транзакций(amount)
proof - доказательство работы (распишу чуть позже)
previous_hash - хэш предыдущего блока
По сути, эта запись - набор словарей, но ее подлинность можно подтвердить и проверить криптографически. Нет нужды в доверии к какому либо лицу (организации) для этого. Есть математика и криптография, обмануть которую, в отличие от людей, гораздо сложнее.
В реальности все примерно так же - как только создается новый блок, в него попадает часть транзакций (число ограничено протоколом). Последовательность этих блоков и есть блокчейн (цепь)
Краткое описание работы протокола :
- Новые транзакции транслируются всем узлам, которые собирают операции в блок.
- Затем каждый майнер пытается вычислить хеш для нового блока.
- Как только математическая задача решена, блок транслируется по всей сети.
- Узлы проверяют, все ли транзакции действительны (то есть не были ли потрачены биткоины).
- Начиная работу над следующим блоком, узлы заявляют, что они приняли предыдущий и добавили его в цепочку
В данный момент на официальном сайте висит информация о скорости вычисления хэшей в секунду майнерами. И для биткоина это 245.457 EH/s (экзахэшей в секунду) что мы можем округлить до 245 квинтиллионов, а это ± 245 000 000 000 000 000 000 хэш/с. Неплохо да? Сколько знаков майнеры найдут у корня из 2 за пару секунд?
Таким образом список всех транзакций в блоках и последовательность блоков в блокчейне и есть сама валюта.
Самый обычный S9 асик или application-specific integrated circuit (интегральная схема для конкретного применения) - выдает тэрахэши/с, а именно :
13 TH/s - это 13 000 000 000 000 (триллиардов) хэшей в секунду. В нем используются специальные хэш платы, так что это железо создано для добычи .
В чем сложность ?
В чем состоит сложность самой добычи ? В алгоритме и ограничении вычислительных ресурсов. Для поиска новых блоков требуются колосальных размеров вычисления, максимальное их распараллеливание и объединения в пулы.
Вот как можно представить этот процесс наглядно, на примере простого класса и алгоритма :
Python:
import os
import math
import hashlib
import json
from time import time
from colorama import init, Fore, Style
init()
class Blockchain(object):
def __init__(self):
self.amount = 0
self.current_transactions = []
self.chain = []
self.new_block(previous_hash=1, proof=100)
def new_block(self, proof, previous_hash=None):
block = {
'index': len(self.chain) + 1,
'timestamp': time(),
'transactions': self.current_transactions,
'proof': proof,
'previous_hash': previous_hash or self.hash(self.chain[-1]),
}
self.current_transactions = []
self.chain.append(block)
return block
def new_transaction(self, sender_key, recipient, amount):
self.current_transactions.append({
'sender': sender_key,
'recipient': recipient,
'amount': amount,
})
return self.last_block['index'] + 1
@property
def last_block(self):
return self.chain[-1]
@staticmethod
def hash(block):
block_string = json.dumps(block, sort_keys=True).encode()
return hashlib.sha256(block_string).hexdigest()
def proof_of_work(self, last_proof):
proof = 0
frash = 0
while self.valid_proof(last_proof, proof, frash)[0] is False:
proof += 1
frash = math.sqrt(last_proof)
return [proof, self.valid_proof(last_proof, proof, frash)[1]]
@staticmethod
def valid_proof(last_proof, proof, frash):
guess = f'{last_proof}{proof}'.encode()
guess_hash = hashlib.sha256(guess).hexdigest()
print(Fore.GREEN, guess_hash)
return [guess_hash[:2] == "00", guess_hash]
def maining(self):
try:
while True:
print(Style.RESET_ALL)
m = self.proof_of_work(self.chain[-1]['proof'])
if m:
self.amount += 1
self.new_transaction(os.urandom(32).hex(), 'cryptochain@cryptmail.in', self.amount)
self.new_block(m[0], m[1])
print(Fore.CYAN, self.chain)
except KeyboardInterrupt:
print(Fore.CYAN, self.chain)
if __name__ == '__main__':
b = Blockchain()
b.maining()
Процесс работы скрипта - это процесс перебор всех значений хэшей блока, пока не будет найден нужный, а именно тот, что начинается с "00"
Количеством нулей обусловлена сложность - proof . Это количество попыток, которое было затрачено на поиск нового блока. В примере лишь два нуля в начале блока, но в реальности этих нулей порядка 20 и алгоритм намного сложнее (можно поиграть с нулями и прочувствовать разницу времени вычисления).
Сложность поиска с каждым новым нулем возрастает по геометрической прогрессии. Как только будет найдет новый хэш, будет создан новый блок, который примет хэш предыдущего.
Таким образом, изменив один из блоков (добавив например левую транзакцию), изменится его хэш, а значит и хэш других блоков цепочки, которая станет не валидна.
Византийский взлом (Byzantine Fault) — это потенциальная проблема, с которой может столкнуться сеть, если участники не согласятся с ее стратегией. Ошибка предполагает, что некоторые члены могут быть подкуплены. Такие узлы будут работать недемократично, и одной точки отказа будет достаточно, чтобы поставить систему под угрозу.
Блокчейн Биткоин решает Византийский сбой с помощью своего алгоритма Proof-of-Work, позволяя внедрять новые стратегии. Если 51% сети соглашается с процессом, то Blockchain одобряет цепь блоков. Поскольку количество майнеров продолжает расти, вероятность того, что злонамеренные участники захватят блокчейн, становится маловероятной. По данным портала по инсайдерским новостям Business Insider, в криптопространстве активно работает около 1 миллиона майнеров. Потребовалось бы примерно 510 000 узлов, чтобы договориться о намеренной угрозе блокчейна для успеха Византийского разлома
Другими словами, чтобы поддерживать свою (ложную) цепочку блоков, вы должны успевать майнить новые блоки быстрее всего остального мира. Имея 51% всех вычислительных ресурсов которые есть у майнеров, у вас будут шансы.
Ключи и транзакции
Два ключа 256 бит приватный и 512 бит публичный генерируются по алгоритму
Ссылка скрыта от гостей
и используются для подтверждения транзакций и генерации биткойн-адресов. Транзакция считается завершённой и достоверной, когда её формат и подписи проверены и она записана в блок. Пока транзакция не включена в блок, система считает, что количество биткойнов на адресе остаётся неизменным. Если технически произойдет так, что одни и те же биткойны были посланы несколько раз, валидной транзакцией будет та, что первая попала в блок.Послесловие
Сама идея реализации простого блокчейна по протоколу HTTP найдена у dvf
Идея в том, что только на простых примерах можно придти к пониманию более сложных. Я не затрагивал биржи, рынок, создание и много аспектов крипты в данной теме, но попытался немного приоткрыть завесу ее математики создания. Буду рад и в будущем поделиться своими мыслями с вами.
Спасибо за внимание
Последнее редактирование модератором: