Лучшее, что можно сделать, - это протестировать свой пользовательский процессор транзакций.Распространенной ошибкой при написании процессорных транзакций является код возврата.InternalError
предполагается, что это временная ошибка (некоторая внутренняя ошибка, такая как «нехватка памяти», которая является временной), и может быть успешной при повторной попытке.Валидатор повторяет транзакцию с TP и приводит к циклу.Если транзакция недействительна, вы, вероятно, захотите вызвать ошибку InvalidTransaction
.Итог - внутренние ошибки повторяются, и недопустимые транзакции не повторяются.
Чтобы сделать вашу цепочку блоков более устойчивой к неисправным процессорам транзакций, я настоятельно рекомендую запустить Validator в параллельном режиме.Это позволило бы обрабатывать другие транзакции в случае попадания какой-либо ошибки в процессор транзакций.Для запуска в режиме параллельной обработки используйте sawtooth-validator --scheduler parallel -vv
Sawtooth Validator также проверяет соединения с процессорами транзакций, и те, которые не отвечают (зависают или заморожены), удаляются.
Редактировать: как дляВаш дополнительный вопрос о снижении DoS, есть тест на противодавление в Sawtooth.Противодавление - это метод контроля потока, помогающий предотвратить DoS-атаки.Если валидатор перегружен, он перестанет принимать новые партии, пока не справится с дополнительной работой.Количество пакетов, которое может принять валидатор, основано на множителе QUEUE_MULTIPLIER (в настоящее время 10, ранее 2), умноженном на скользящее среднее число опубликованных пакетов.
Кроме того, можно поместить сеть Sawtooth позадиVPN.Sawtooth - разрешенный предприимчивый блокчейн и не предназначен для использования в общедоступном Интернете.