Pull to refresh

Comments 13

1) какой длинны данная констукция сможет выдержить? например сейчас самая малая цепь мне известная около 140гб

public static List<Block> blockchain = new List<Block>();

2) я правильно понимаю что метод про нахождение hash с нулями убивает cpu в 100% ?

1) Да, список можно считать слабым звеном проекта. Но, в конце концов, никто не запрещает, например, хранить цепь на диске. Внесу в следующие статьи

2) Собственно, как и в любом другом майнинге на ЦПУ. Быть может, руки дойдут, попробую вкрячить в проект Cud-y но надо будет как следует покурить гугл...

Упд, поискал инфу, на форумах пишут, что размер списка ограничивается int.maxValue и/или объёмом виртуальной памяти. Не так уж и мало, хотя 140гб, конечно, вряд ли залезпт

Можно не смешивать логику майнинга и добавления блоков

Тогда в базовой форме блокчейн - это простая структура данных, т.е. односвязный список, который помимо ссылки на предыдущий элемент, хранит ещё и его хеш. Собственно все, таймстемпы, nonce и прочее можно перенести в payload, по которому дальше можно строить некоторую динамику (в терминах алгоритмов), а майнинг реализовать на уровне валидации блоков

Зачем использовать статичные методы / классы?

Дело в том, что в каждом уважающем себя блокчейне должен быть нулевой блок

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

Зачем именовать аргументы ts, dat, has, nc?

Enumerable.Repeat можно вынести из цикла

AddBlock может работать бесконечно, без возможности остановить процесс (

Параметры по умолчанию, кстати, у него лучше убрать

Народ что тут обсуждать, с точки зрения организации и построения кода, это хлам.

На статью описывающую принцип блокчейн, вообше не тянет.

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

Мне кажется, что автор просто смеётся над нами, выкладывая такой код

Ну у статьи плюс 10 рейтинг, странно, конечно

Уважаемый, зачем столько энергии и времени тратить на подобный комментарий.

Автор статьи старался, самым простым способом описал концепцию. Это ни что иное как демонстрационное пособие, написанное на коленке, за 10 минут.

Разве где-то в начале статьи есть уточнения о законченности проекта, или о том, что автор претендует обучить нас организации кода?

Нет, простым и понятным языком, для человека который слышал о БЧ, но не знает что это и с чего начать.

Его пример можно взять за основу, переделать полностью, и продолжить в своем направлении. Как отправная точка - отлично.

Да, переменные hs, dat и прочее меня смутили, но потом я закрыл глаза на эти мелочи, дочитал и остался доволен.

Автору спасибо за потраченное время и за желание помочь сообществую, это похвально.

А вот у вас Окунев, я не увидел в профиле ни одного примера. Покажите как правильно организовывать и строить код, иначе вы зря потратили мое время, на прочтение вашего бесполезного, бестолкового и ненужного комментария.

" public IList<Block> Blocks { set; get; }"

дальше даже не читал

Я лично считаю чувак достаточно просто описал сложный термин, и какая разница до качества кода? Тебе ведь его в прод не выкатывать

Данные имеют переменный размер, и от них берется хеш. Получается, что время на проверку одного значения nonce, а значит, и сложность майнинга (выраженная в тактах процессора, а не в терахешах) зависит от длины данных. Если майнер получает вознаграждение за блок, не зависящее от длины блока, то выгоднее майнить короткие блоки. Транзакции так и будут висеть в мемпуле, пока майнеры зарабатывают на пустых блоках.

В Биткойне эта проблема решена. Там есть block header, длина которого всегда 80 байт, и он включает в себя nonce и Merkle root, т.е. другой хеш. Merkle root верифицирует данные любого размера, но его не надо пересчитывать при смене nonce.

Sign up to leave a comment.

Articles