Можем ли мы в hyperledger fabric принудительно проверять транзакцию в устаревшей / автономной системе?

В отличие от многих решений Blockchain (например, Ethereum, Corda), архитектура поддержки Fabric означает, что смарт-контракты не должны быть детерминированными и изолированными: единственное, что имеет значение, - это то, что индоссанты согласовывают набор R / W.

Из этот ТАК ответ можно из выполнения чейнкода связываться с внешним миром.

Если логика проверки сложна и / или зависит от данных вне Мирового Состояния, можно ли вызвать, например, WebService для ее выполнения?

Дополнительно: предположим, что политика цепного кода заставляет организацию Org1 подтверждать все транзакции, тогда мы должны иметь возможность написать цепной код, который проверяет контекст выполнения и вызывает только веб-службу проверки, если она выполняется Org1 и отклоняет транзакцию или продолжает в зависимости от результат вызова WS. Это верно?

1
0
332
2

Ответы 2

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

Вы имеете в виду не политику одобрения, а логику смарт-контракта. Это должно быть возможно в любой реализации цепного кода, но если вы используете Hyperledger Composer для реализации цепного кода, то здесь из их документации говорится, что вы можете:

The Runtime API is the available API to all transaction functions. It allows access to APIs to - build and issue queries - emit events - get registries of all types - get the current participant - get the serializer to create resources from JavaScript objects - post HTTP REST calls

Основываясь на последней части вызовов post HTTP REST, вы должны иметь возможность логически отклонить любую транзакцию '

Справка

If a validation logic is complex and/or depends on data outside the World State, is it possible to call for example a WebService to perform it?

Хотя технически возможно предоставить индивидуальную реализацию VSCC (цепочный код системы проверки), я настоятельно рекомендую вам не делать этого, поскольку это может привести к недетерминированным результатам.

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

Additionally: Suppose a chaincode policy enforces organization Org1 to endorse all transactions, then we should be able to write a chaincode that checks the execution context and only call the validation Web-Service if it is executed by Org1 and reject the transaction or proceed depending on the result of the WS call. Is that correct?

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

Другие вопросы по теме