На самом деле вы можете выполнить это с помощью небольшого настраиваемого подключаемого кода , который можно загрузить при запуске узла.Что вам нужно сделать, это создать фильтр аутентификации, который будет предотвращать одобрения и возвращать ошибки, а не пересылать запрос следующему фильтру аутентификации.
Из файла core.yaml :
handlers:
authFilters:
-
name: DefaultAuth
-
name: ExpirationCheck # This filter checks identity x509 certificate expiration
Это встроенные фильтры по умолчанию, которые существуют в узле.Например, фильтр ExpirationCheck - проверяет срок действия идентификатора клиента.
Вам необходимо добавить еще один фильтр, который просто отклоняет предложения от клиентов (назовем его- NopeFilter), а затем скомпилируйте его в плагин golang и добавьте следующую запись:
-
name: FilterOne
library: /opt/lib/filter.so
Содержимое фильтра будет очень похоже на фильтр DefaulAuth (который ничего не делает):
func (nf *NopeFilter) ProcessProposal(ctx context.Context, signedProp *peer.SignedProposal) (*peer.ProposalResponse, error) {
return nil, errors.New("nope")
}
При запуске равноправного узла список фильтров читается из раздела core.yaml, а затем объединяется в цепочку фильтров , которые либо отклоняют предложение, либопередать его следующему фильтру.
Последний фильтр всегда является реальной службой индоссанта в одноранговом узле, которая фактически выполняет выполнение и подтверждение цепного кода (подписание результатов).