Использование циклов while вместо pow: что означает эта ошибка?

Термины Proof of Work и Proof of Stake для широких масс остаются формой китайской «грамоты». Большинство и вовсе не собирается вникать их в суть, даже если планирует в дальнейшем инвестировать в криптовалюту или заняться трейдингом.

Понимание того, что такое Proof of Work (PoW) и Proof of Stake (PoS) поможет при оценке той или иной криптовалюты. Так что, хотя бы базовая информация о них не будет для вас лишней. Возможно, эти дополнительные знания в дальнейшем даже помогут вам.

Что такое Proof of Work и Proof of Stake

Дословно Proof of Work переводится как «доказательство работы» или доказательство проделанной работы. Если интерпретировать этот перевод на сферу криптовалют, то за работу здесь принимаются вычислительные операции оборудования. Proof of Work – это такой себе механизм проверки того, что работа (вычисление он же майнинг) таки была проведена.

Именно принцип PoW лежит в основе валидации транзакций в блокчейне Bitcoin. Также этот алгоритм консенсуса используется в десятках других криптовалют, в которых есть возможность майнинга.

В противовес Proof of Work был создан другой механизм – Proof of Stake. Дословно этот термин можно перевести как доказательство доли владения. Если криптовалюта использует этот алгоритм консенсуса, тогда валидация транзакций происходит через узлы сети. Грубо говоря, чем больше криптовалюты у человека лежит на кошельке, тем больше шансов у него найти новый блок и подтвердить подлинность транзакции, получая за это еще и вознаграждение.

Основные отличия PoW от PoS

Оба алгоритма лежат в основе современного рынка криптовалют. PoS имеет несколько очевидных преимуществ:

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

PoW имеет преимущества над PoS в плане безопасности. Он полностью исключает возможность атаки Сивиллы (когда создаются новые узлы, навязывающие свою политику всем остальным участникам сети). PoS может допустить такую атаку только в том случае, если узлы обладают реальной и огромной мощностью.

Также PoW полностью предотвращает двойную трату. Каждый новый блок формируется только после завершения предыдущего, при этом он содержит в себе информацию о своем предшественнике. В отличие от доказательства доли, в алгоритме PoW невыгодны форки, поскольку майнеры получают вознаграждение только за «истинные» блоки. В то же время PoS криптовалюты можно атаковать путем создания форков. Поскольку участники системы не тратят «подлинные» средства, они могут оказывать поддержку атакующим. Это приведет к образованию более длинной цепочки, в результате чего мошенники могут отклонять платежи.

Некоторые виды криптовалют, например Ethereum, комбинируют алгоритмы PoW и PoS. В начале существования сети применяется доказательство работы, а после полной эмиссий монет внедряется доказательство доли.

Справка! Для майнинга PoW криптовалют неважно, сколько средств находится на вашем счету. Важно, чтобы у вас было достаточно мощностей для решения математической задачи и создания нового блока. Поэтому владельцы крупных сумм не имеют никаких привилегий в системе.

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

Видео: различия технологий Proof of Stake и Proof of Work простыми словами

Что такое Proof of Work

Механизм Proof of Work появился еще до зачатия криптовалют. Его основная цель – это защита сервера от постоянных запросов (DDos-атак, спама) через добавление специальной задачи, на решение которой необходимо потратить определенное количество времени и ресурсов. При этом сервер (или просто валидатор) на проверку будет тратить намного меньше времени. Механизм PoW предназначены именно для вычислительной техники.

Можно объяснить принцип его работы на примере обычного урока в школе. На уроке математики учитель дал задание всему классу и пообещал хорошую оценку (вознаграждение) тому, кто сделает его первым. Ученику необходимо «пораскинуть мозгами», чтобы провести ряд математических операций и в итоге решить задачу. В случае с PoW, в качестве ученика выступает вычислительная техника, класс – это, например, сеть Bitcoin с майнерами, ученик – это один майнер или компьютер, «пораскинуть мозгами» — значит потратить силы или энергию в случае с машинами, а хорошая оценка – это вознаграждение за майнинг.

Школьная доска

Эта концепция впервые была презентована еще в 1993 году в научной статье. Авторы, Синтия Двор и Мони Наор предлагали сделать так, чтобы доступ к какому-то абстрактному ресурсу появлялся только при условии выполнения некой ресурсоемкой задачи.

Спустя три года Адамом Бэком был запущен проект Hashcash, основная задач которого заключалась в защите от спама. Он описывал механизм так: «Нужно найти такое значение Х, при котором функция SHA(x) содержала бы n-е количество нулевых бит».

А в 1999 впервые появился термин Proof of Work – он был предложен Маркусом Якобсеном и Ари Джуэлсом в научной статье для журнала Communications and Multimedia Security.

Еще в 2004 году Хэл Финни, который позже проведет первую транзакцию в истории сети Bitcoin, предлагал «токенизировать» PoW, а вернее RPoW (Reusable-Proofs-of-Work). То есть, результатом проверок стали бы токены, которые в дальнейшем могли бы использоваться как электронная валюта.

Ну а потом инициативу в свои руки взял (взяли, взяла) Сатоши Накамото, заложив механизм Hashcash в качестве алгоритма консенсуса в сеть Bitcoin, а также внедрив алгоритм хеширования SHA-256. Механизм PoW и используется в сети Bitcoin для генерации блока и безопасности всего блокчейна. В этих блоках и содержится хеш-функция, сумма которой всегда меньше target (намеченной цели). Это как бы показывает или пруфирует (proof), что необходимые расчеты (work) для поиска блока были произведены и дает сигнал к тому, что блок можно записать в общую цепочку (блокчейн).

Весь этот процесс случаен. То есть, нельзя сказать какой именно майнер в итоге найдет подпись. И даже если ему это удалось сделать, то это не значит, что он получит 12,5 BTC (текущее вознаграждение за поиск блока). Все майнеры получают вознаграждения, которые пропорциональны их «усилиям» по вычислению. Что касается уровня сложности, то он пересчитывается каждые добытые 2020 блоков (примерно 2 недели). Если майнерам удалось найти заданное количество блоков раньше, чем за 14 дней, то сложно растет, если ушло больше времени – то уменьшается.

История появления алгоритма PoW

PoW – один из самых старых алгоритмов, который использовался в создании самой первой криптовалюты Биткоин. Первое описание протокола появилось еще в 1993 году. По задумке авторов он должен был бороться со спамом. И эту функцию алгоритм выполнил. В 1997 году Адам Бэк успешно запустил проект Hashcash, который основывался на концепции PoW. Отправители писем, используя мощности ПК, должны были провести миллиарды вычислений, которые подтверждали истинность темы письма. Такое решение блокировало спам. С технической стороны это выглядит как хеширования выбранного диапазона данных, например, строчек из письма.

Через 2 года после запуска Hashcash впервые появился термин Proof-of-Work. В этот период алгоритм, подобно математической капче, решал несколько простых задач, которые защищали систему от спама и DDoS-атак. Для выполнения операций весомые ресурсы не требовались, поэтому система работала слаженно.

В 2000 году разработчики решили обновить механизм, внедрив в него вспомогательные функции. Это потребовало расширения объемов памяти и пересмотра требований к оборудованию. Требования большой скорости процессора сменились большими объемами оперативной памяти. Именно в этот период майнеры Биткоинов перешли на мощные видеокарты.

Развитие криптовалют и совершенствование оборудования увеличили нагрузки на систему и усложнили выполнение задач. Алгоритм PoW буквально начал «пожирать» электроэнергию, что привело к снижению вознаграждения. Майнинг популярных криптовалют становился нерентабельным. В 2012 году производительность блокчейна Биткоин превысила энергозатраты на функционирование самого мощного в мире компьютера. После появления алгоритма PoS, Proof-of-Work начал отходить на второй план или применяться в тандеме. Сегодня алгоритм выполненной работы используется в проектах, которые продолжают эмиссию токенов.

Что такое Proof of Stake

А вот уже механизм консенсуса Proof-of-Stake – это уже «криптовалютное» детище. То есть, этот метод защиты придуман сугубо для использования в криптовалютах. Предложена эта идея кстати была на форуме BitcoinTalk в 2011 году пользователем QuantumMechanic как альтернатива используемого в блокчейне Bitcoin Proof-of-Work.

Уже в 2012 году появилась первая PoS-криптовалюта – Peercoin (PPC). Хотя в ней использовался «гибридный» алгоритм. Сначала это был PoW – на этапе начального распределения коинов, а когда их всех добыли, то уже осуществился переход на PoS. Первые криптовалюты со 100% механизмом консенсуса Proof-of-Stake – это Nxt и Blackcoin.

В PoS в качестве ресурса используется размер доли (Stake), который и определяет, кто из узлов в итоге найдет блок и получит вознаграждение. Если говорить просто и очень неграмотно, то здесь майнинг (добыча новых монет) происходит за счет наличия монет на кошельке, и чем их больше – тем выше награда. Правда не совсем майнинг, а форджинг. Узел, получающий вознаграждение за удержание определенной доли (stake) еще называют мастернодой.

Мотивация внедрения Proof-of-Stake следующая:

  • Этот механизм консенсуса в сети требует намного меньше ресурсов в сравнении с доказательством работы,
  • Классической атаки 51% в блокчейне с PoS быть не может – так как вычислительные мощности не играют роли при ранжировании нодов,

Атака 51

  • Потенциальная атака может случиться только в том случае, если в руках одного узла сосредоточено 51% всех монет – а это очень и очень дорого,
  • Даже если атака произойдет, то работа блокчейн будет нарушена и атаковавшей стороне будет сложно извлечь из этого выгоду,
  • В долгосрочной перспективе комиссии при транзакциях в PoS-сетях ниже. В общем, Proof-of-Stake кажется более дешевым, простым и менее ресурсоемким алгоритмом. Преимущества вроде бы очевидна.

Между тем, есть у ПоС и очевидный недостаток – потенциально в сети может возникнуть монополия, когда размер Stake одного участника превысит 51%. Хотя в дестабилизированном блокчейне из этого сложно извлечь выгоду, но другие участники могут понести ущерб.

Другая проблема – это потенциальный сговор группы нод, что может привести к изменению правил блокчейна. То есть, в PoS существует некая проблема централизации.

Что такое алгоритм PoS

Растущая сложность майнинга PoW криптовалют, а также нецелесообразность алгоритма после полной эмиссии монет привели к появлению нового алгоритма Proof-of-Stake (доказательство доли владения). PoS появился в 2012 году с целью уменьшения энергозатрат и повышения эффективности майнинга. Эти проблемы напрямую связаны с доказательством выполнения работы.

Принцип алгоритма PoS не предусматривает майнинг в классическом понимании этого слова. Чтобы стать валидатором, пользователь должен иметь на своем кошельке внутреннюю криптовалюту. Необходимое количество монет разработчики той или иной сети устанавливают индивидуально.

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

В алгоритме PoS предусмотрен еще один фактор – время владения токенами. Блокчейн-системы заинтересованы в долгосрочных инвестициях со стороны участников. Те, кто купил монеты вчера, уступают тем, у кого они хранятся на счету несколько месяцев.

Таким образом, предпочтение отдается пользователям с большими и старыми ставками. Это чревато централизацией сети, ведь крупные игроки имеют привилегии над остальными участниками. Но с другой стороны, владельцы крупных счетов заинтересованы в благосостоянии сети. Чтобы произвести «атаку 51 %», хакерам необходимо купить большую часть монет сети, стоимость которых обвалится сразу же после атаки. Мошенникам нет никакого смысла атаковать самих себя.

Постепенно алгоритм PoS вытесняет PoW. Это связано с тем, что доказательство доли требует значительно меньше вычислительных функций, что снижает трудоемкость и затратность сети. Порог входа для валидаторов блоков значительно ниже. Майнинг не предусматривает практически никаких требований, поэтому нет необходимости в разработке мощного оборудования. Механизм может запросто работать на обычных пользовательских компьютерах.

Proof of Stake vs Proof of Work

Общего у Proof-of-Work и Proof-of-Stake не так много. Разве что у них есть собственная атака 51%, которая в итоге приводит к краху сети.

В целом у Proof-of-Stake кажется есть ряд очевидных преимуществ: более высокая скорость валидации, меньшие затраты ресурсов для защиты, меньшие комиссии.

Но при этом атаковать сеть с алгоритмом Proof of Work фактически нереально – для этого необходимо супер (много раз) суперкомпьютер и несколько электростанций для его обслуживания.

В Proof-of-Stake все выстроено таким образом, что участники стремятся захватить как можно большую долю коинов, чтобы получать большее вознаграждение за комиссию. Из-за этого возникает централизация. Но даже если дестабилизация сети и не принесет ничего обладателям мажоритарной Stake, все равно у этого алгоритма консенсуса есть один недостаток.

Речь идет об атаке Nothing-at-Stake – это когда создается цепочка пустых блоков группой пользователей, что в итоге может привести к двойному расходованию, конфликту версий блокчейна и неизбежному форку. Именно над устранением этой проблемы занимаются разработчики нового протокола Casper, который в будущем будет внедрен в платформу Ethereum. Пока никакой конкретики нет: ни даты перехода, ни технических деталей. По одной из версий, в платформе участники будут ставить свои доли ради получения вознаграждений – но это пока не подтверждено. Создатель Эфириума, Виталик Бутерин, считает, что переход на PoS поможет снизить комиссии и общую стоимость обслуживания сети. А от майнинга как такового придется отказаться.

У обоих протоколов есть свои преимущества и недостатки. Вроде бы Proof-of-Stake экономически выгоднее и рациональнее с технической точки зрения, но в таких глобальных платформах как блокчейн Bitcoin или других криптовалютах с миллиардной капитализацией, PoW кажется более надежным вариантом. Еще в 2012-2013 годах на рынке начали появляться монеты с гибридным PoS/PoW протоколом. Среди них Peercoin, Emerecoin, Novacoin и другие.

Обзор альтернатив Proof of Work и Proof of Stake

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

Название протокола Суть
Proof-of-Activity Гибридный протокол между алгоритмом доказательства работы и доли. Обычно используется следующая схема: на начальном этапе добываются все монеты без записи транзакций в блокчейн (PoW), а потом используется PoS с мастернодами. Классический пример – криптовалюта DASH.
Proof of Delegated Stake Модифицированный вариант POS, в котором происходит делегация подтверждения доли. Участники сети могут выбирать, кто с нод будет подтверждать транзакции и голосовать за различные решения в сети. Применяется в Bitshares.
Proof of Leased Stake Можно перевести как доказательство арендованной доли. Данный протокол внедрен в платформу Waves. Суть заключается в том, что в классическом PoS только ноды с большим стэком могут подтверждать транзакции и получать вознаграждения. В PoLS участники с небольшими долями могут сдавать их аренду нодам и получать вознаграждение тоже. Схема напоминает пулы с обычным майнингом.
Proof-of-Burn В этом протоколе используется сжигание монет. Участники отравляют их на некий специальный адрес, где они становятся неактивным. Взамен они получают право майнить новые монеты. Протокол применяется в Slimcoin.
Proof-of-Signature PoSign – абсолютно новый механизм, который еще даже не до конца доработан. Применяется в блокчейне криптовалюты XTRABYTES. Идея состоит в том, что каждый из статистических нодов сети подписывает новые блоки. Если нода попытается провести атаку, то она попадает в черный список.
Proof-of-Capacity Здесь для доказательства используется пространство для хранения данных. Чем больше его – тем больше ты майнишь. Пионер PoC – криптовалюта Burst.
Proof-of-Brain Иногда этот термин используют, чтобы описать принцип работы Steemit и Golos. Здесь участникам для «майнинга» нужно создавать контент, то бишь, включать мозги.
Proof of Importance Доказательство важности – это алгоритм консенсуса в сети криптовалюты NEM. Важность «высчитывается» как комбинация текущего баланса и транзакционной активности участника.

Использование циклов while вместо pow: что означает эта ошибка?

Я пытаюсь создать некоторый код с программированием C, который может отображать число в определенной степени с обоими значениями, указанными пользователем. Я хочу использовать pow для первой части и цикл while для второй. Тем не менее, я столкнулся с ошибкой с этим текущим кодом, от которого я не могу избавиться.

Вот ошибка, с которой я не знаком:

error: invalid operands to binary * (have ‘int (*)(int, int)’ and ‘int’) result2 = result2 * base,

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

Я пробовал исследовать «long», но у меня еще не было опыта с ним через мой учебник C, поэтому я хотел бы воздержаться от его использования, если это возможно.

#include #include int result2(int base, int exponent), int main(void) { double base, double exponent, double result1, puts(«Please enter a value as the base and another as the exponent.»), scanf(«%lf%lf», &base, &exponent), result1 = pow(base, exponent), printf(«Library solution: %lfn», result1), printf(«My solution: %dn», result2(base, exponent)), } int result2(int base, int exponent) { int i, for(i=1, i&lt,=exponent, i++) { result2 = result2 * base, } return, }

Я хотел бы иметь возможность правильно рассчитать уравнение, используя оба метода со значениями пользователя. Однако с этой ошибкой я просто не могу пройти мимо и достичь этого. Спасибо.

Источник G707
02 апреля 2020 в 02:22

2 Ответа

2

int result2(int base, int exponent) { int i, for(i=1, i&lt,=exponent, i++) { result2 = result2 * base, } return, } result2 -это имя вашей функции. Вместо того, чтобы использовать его как переменную, которая может накапливать результаты цикла, вы должны создать переменную для выполнения этой работы. Затем верните значение переменной в конце.

int result2(int base, int exponent) { int i, int result = 1, for(i=1, i&lt,=exponent, i++) { result = result * base, } return result, }

А еще лучше, дайте функции другое имя. result2 звучит как имя переменной. Функция должна быть названа как-то, что указывает на то, что она делает. Поскольку взят pow , как насчет power ?

int power(int base, int exponent) { int result = 1, for (int i=1, i&lt,=exponent, i++) { result *= base, } return result, }

Некоторые другие небольшие улучшения объявляют int i внутри цикла for и используют result *= base в качестве сокращения для result = result * base .

John Kugelman
02 апреля 2020 в 02:26
0

я внес несколько изменений в ваш код.

1) переименовал функцию result2 в my_exp . result2 звучит как переменная.

2) Измените типы для funtion my_exp на int , чтобы они соответствовали типам переменных main .

3) Добавьте переменную result в my_exp , чтобы сохранить частичный результат цикла for .

4) объявлено i внутри for декларации.

5) вызовите pow и my_exp внутри printf и удалите result1 больше не требуется.

6) изменен способ вычисления result на более компактный способ.

большинство этих изменений носят косметический характер, за исключением изменений типов.

int my_exp(int base, int exponent), int main(void) { int base, int exponent, puts(«Please enter a value as the base and another as the exponent.»), scanf(«%i», scanf(«%i», &exponent), printf(«Library solution: %in», pow(base, exponent)), printf(«My solution: %in», my_exp(base, exponent)), } int my_exp(int base, int exponent) { //int i, int result, result = 1, for(int i=1, i&lt,=exponent, i++) { result *= base, } return result, }

Nahuel Rossi
02 апреля 2020 в 03:04

Подведем короткие итоги материала:

  • Proof-of-Work и Proof-of-Stake – это два самых популярных протокола достижения консенсуса среди блокчейнов криптовалют,
  • PoW – доказательство работы, защита обеспечивается за счет вычислительных операций и поиска хеша,
  • PoS – доказательство владения доли, валидация производится нодами с активными балансами,
  • PoW в целом более надежен, но требует намного больше ресурсов, а в PoS-системах существует централизация и возможны доказательстве без ресурса,
  • Все чаще появляются криптовалюты с гибридными протоколами или совершенно новыми концепциями механизма консенсуса.
Понравилась статья? Поделиться с друзьями:
Добавить комментарий