Доброе время суток.
Хотел бы ответить на вопросы уважаемого Buran Ded.
До меня тока щас дошло, что всё это ложь лоховодов.
Глянул на
https://github.com/prizmspace/PrizmCore, а там прям буквально русским языком сказано:
Attention! We don't include PrizmEngine.java in current repository for security reasons and for preventing creating forks by anyone. This file will be published later.Вот прям сохранил для истории
http://archive.li/q7mF2То есть самого главного там - нет.
"Заключение товарища" - обман.
Исходный код - обман.
Есть готовый инсталлятор ехе-шник PrizmSetup.exe, но он уже устаревший 1.8.3, щас с таким в муратовскую сеть не пускают.
Класс PrizmEngine.java не офишируется совсем не потому что содержит какието черные ходы или неисправимые баги, внутри реализованна математика для вычислений наград, распознавания фальшивых и неверных транзакций. А также в этом классе реализованна, наверное, пока единственная в своем роде, РЕФЕРАЛЬНАЯ ПРОГРАММА работающая с блокчейном.
Вполне возможно класс PrizmEngine.java скоро будет открыт широкой публике.
И я понял, чего они боятся на самом деле.
Если будет реально полный открытый исходный код, который можно будет скомпилить и запустить,
то возможно будет лехко и просто провести следующую атаку на сеть:
На самом деле страхов никаких нет, и как ранее было сказанно ПОЛНЫЙ КОД возможно будет выложен в сеть.
Разговоры о возможной атаке несколько голословны, только предположения
транзакцию от имени кошелька можно провести, зная пароль от этого кошелька, ну как минимум отпечаток пароля,
правильно подписанная транзакция принимается сетью, проверяется только то, что количество переводимых монет
не превышает баланс кошелька. Но для кошелька Генезис баланс не проверяется, он отрицательный.
Начисление парамайнинга - это отдельная транзакция, которая подаётся в следующий или ещё дальше
блок если сеть загружена,
Как известно ПАРОЛЬ сам является кошельком, и если вы знаете его вы можете создать как валидную так и невалидную транзакцию ( простыми словами хакерскую) с какимито специальными данными, но такая транзакция распознается системой и не принимается, это можно увидеть в классе
BlockchainProcessorImpl.java методом
private void validateTransactions() throws BlockNotAcceptedException, и проверяется не только баланс кохелька, а масса параметров, не стану тут переписывать код (его несколько страниц) любой желающий может посмотреть в исходниках по аддресу
https://github.com/prizmspace/PrizmCore.
Мало того что баланс Генезиса отрицательный так пароль от кошелька генезиса тоже прописан в исходниках в открытом виде в классе
Constants.jarpublic static final String GENESIS_SECRET_PHRASE = "dwell devil surround unless whistle grew stolen slap future enter bar wife somewhere point everytime fact";но даже зная пароль Генезиса невозможно создать неправильную транзакцию, так как транзакция от генезиса имеет структуру согласно математической формуле, и не может быть иной в данный момент времени
Часть этих проверок проводятся в PrizmEngine.java классе , и баланс Генезиса тоже проверяется не смотря на то что он отрицательный,
парамайнинговые транзакции ваплачиваются форжащими узлами не равномерно потому что злоумышленник может изменить код программы и перестать выплачивать транзакции, в этом случае следующий Peer со включенным форжингом имеет право создать выплаты по пропущенным выплатам, но это бывает редко и, как правило, выплаты начисляются со следующим блоком
, блок заполняется транзакциями с квотами , на данный момент блок 1 к 3 заполняется транзакциями от обычных кошельков и транзакциями от Генезиса, всего блок содержит 800 транзакций
и может быть расширен при необходимости
на данный момент распределяется следующим образом
if (Arrays.equals(unconfirmedTransaction.getSenderPublicKey(), Genesis.CREATOR_PUBLIC_KEY) && txGen <= Constants.MAX_NUMBER_OF_TRANSACTIONS - 240) {
sortedTransactions.add(unconfirmedTransaction);
txGen = txGen + 1;
payloadLength += transactionLength;
}
if (!Arrays.equals(unconfirmedTransaction.getSenderPublicKey(), Genesis.CREATOR_PUBLIC_KEY) && txOth <= Constants.MAX_NUMBER_OF_TRANSACTIONS - 550) {
sortedTransactions.add(unconfirmedTransaction);
txOth = txOth + 1;
payloadLength += transactionLength;
}поэтому невозможно перегрузить блок (или сеть) только транзакциями одного типа
Теперь как проходит атака: злоумышленник изменяет код так, что при расчёте парамайнинга если это его собственный
кошелёк, то начисляется парамайнинг не то что положено по формуле, а 100500 мильярдов призмов.
Он запускает свою изменённую ноду в сеть, включает форжинг
и начинает гонять мелкие транзакции своего кошелька каждую минуту,
когда же ему повезёт и блок с его транзакцией сфоржится на его ноде,
то она вполне законно с точки зрения других нод проведёт ему парамайнинг на 100500 мильярдов призм.
Да злоумышленник может изменить код своего узла как угодно, и создать транзакции на любую сумму , но, сеть такие транзакции не пропустит , это очевидно.
и транзакция с безосновательной выплатой никогда не просочиться в блокчейн, думаю вы не первый кто пытался так зделать , естественно код полностью защищет
от такого рода атак, как в общем и других подобных ьанипуляций с математикой транзакций от Генезиса, и да действительно эти проверки выполняются в классе PrizmEngine.java
ни один узел не пропустит транзакцию зделанную по измененной формуле.
Или же всё ещё совсем проще - если как мы видим ноды умеют создавать транзакции от имени Генезиса, то в коде
можно найти как это делается и на своём изменённом клиенте подавать такие транзакции в сеть:
Эй, Генезис, дай мне 100500 мильярдов призмов!
опять таки , транзакция от Генезиса может иметь только правильные данные привязанные к блокчейну, и по силе транзакции от Генезиса не отличаются от всех остальных,
она открыто хранится в блокчейне и соответствует таблице выплат, это можно проверить взяв калькулятор в руки и просчитать движение денег.
таблицу выплат можно увидеть тут
https://www.youtube.com/watch?v=uJADRXIrHW8таким образом из неоткуда транзакция с выплатой какому либо кошельку просто будет отвергнута.
Вот в общем и все по этому вопросу.
Если еще есть вопросы задавайте.
всего хорошего