Примечание: этот API устарел. При разработке приложений для Hyperledger Fabric версии 2.4 и более поздних рекомендуется использовать клиентский API Fabric Gateway (https://hyperledger.github.io/fabric-gateway/). При разработке приложений для более ранних версий Fabric настоятельно рекомендуется использовать высокоуровневый API, подробно описанный ниже.
Этот проект предоставляет низкоуровневый API для взаимодействия с блокчейн-сетями Hyperledger Fabric и используется высокоуровневым Hyperledger Fabric Gateway SDK для Java:
Приведённая ниже информация предназначена для участников этого репозитория.
SDK предоставляет уровень абстракции поверх основанного на протоколе wire-level протокола связи, используемого клиентскими приложениями для взаимодействия с сетью блокчейна Hyperledger Fabric. Это позволяет приложениям на Java управлять жизненным циклом каналов Hyperledger и пользовательского chaincode. SDK также предоставляет средства для выполнения пользовательского chaincode, запроса блоков и транзакций в канале и мониторинга событий в канале.
SDK действует от имени конкретного пользователя, который определяется встраивающим приложением через реализацию интерфейса User
SDK.
Обратите внимание, что SDK не предоставляет средств сохранения для определённых приложением каналов и пользовательских артефактов на клиенте. Это остаётся на усмотрение встраивающего приложения. Каналы могут быть сериализованы с помощью сериализации Java в контексте клиента. Десериализованные каналы не находятся в инициализированном состоянии. Приложения должны обрабатывать миграцию сериализованных файлов между версиями.
SDK также предоставляет клиент для центра сертификации Hyperledger. Однако SDK не зависит от конкретной реализации центра сертификации. Другие центры сертификации могут использоваться путём реализации интерфейса Enrollment
SDK.
Это краткое изложение шагов, необходимых для начала работы со сборкой и использованием Java SDK. Обратите внимание, что это не документация по API или учебник по SDK, это только поможет вам ознакомиться с SDK, если вы новичок в этой области.
Версия | Примечания | Резюме |
---|---|---|
2.1 | Примечания к выпуску v2.1 | Незначительное обновление |
2.0 | примечания к выпуску v2.0 |
|
1.4 | Нет | Незначительные обновления без изменений Fabric |
1.3 | примечания к выпуску v1.3 |
|
1.2 | примечания к выпуску v1.2 |
|
1.1 | примечания к выпуску v1.1 |
|
git clone https://github.com/hyperledger/fabric-sdk-java.git
cd fabric-sdk-java/
Для приложений Java используйте последнюю выпущенную версию SDK версии 1.4.x:
<!-- https://mvnrepository.com/artifact/org.hyperledger.fabric-sdk-java/fabric-sdk-java -->
<dependency>
<groupId>org.hyperledger.fabric-sdk-java</groupId>
<artifactId>fabric-sdk-java</artifactId>
<version>1.4.7</version>
</dependency> ### Работа над версией 2.0, можно использовать сборки 2.0.0 SNAPSHOT
Для работы можно использовать версии 2.0 сборок 2.0.0 SNAPSHOT, добавив следующее в файл pom.xml вашего приложения:
<repositories>
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- https://mvnrepository.com/artifact/org.hyperledger.fabric-sdk-java/fabric-sdk-java -->
<dependency>
<groupId>org.hyperledger.fabric-sdk-java</groupId>
<artifactId>fabric-sdk-java</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
Также может потребоваться явно извлечь среды Java и Node chaincode для сети Fabric на основе Docker-развёртывания версии v2.1.
docker pull hyperledger-fabric.jfrog.io/fabric-nodeenv:amd64-2.1.0-stable&&docker tag hyperledger-fabric.jfrog.io/fabric-nodeenv:amd64-2.1.0-stable hyperledger/fabric-nodeenv:amd64-latest&&docker tag hyperledger-fabric.jfrog.io/fabric-nodeenv:amd64-2.1.0-stable hyperledger/fabric-nodeenv
docker pull hyperledger-fabric.jfrog.io/fabric-javaenv:amd64-2.1.0-stable&&docker tag hyperledger-fabric.jfrog.io/fabric-javaenv:amd64-2.1.0-stable hyperledger/fabric-javaenv:amd64-latest&&docker tag hyperledger-fabric.jfrog.io/fabric-javaenv:amd64-2.1.0-stable hyperledger/fabric-javaenv
SDK зависит от нескольких сторонних библиотек, которые должны быть включены в ваш путь к классам при использовании файла JAR. Чтобы получить список зависимостей, обратитесь к файлу pom.xml или запустите
<code>mvn dependency:tree</code>
или <code>mvn dependency:list</code>
.
Альтернативно, <code> mvn dependency:analyze-report </code>
создаст отчёт в формате HTML в целевом каталоге со списком всех зависимостей в более читаемом формате.
Чтобы собрать этот проект, необходимо выполнить следующие зависимости:
Для запуска интеграционных тестов требуются Fabric и Fabric CA:
Если вы хотите начать использовать Fabric Java SDK с Eclipse, обратитесь к инструкциям по адресу: ./docs/EclipseSetup.md
После того как ваша переменная JAVA_HOME будет указывать на вашу установку JDK 1.8 (или выше), а JAVA_HOME/bin и Apache maven будут в вашем PATH, выполните следующую команду для создания файла jar:
<code> mvn install </code>
или
<code> mvn install -DskipTests </code>
, если вы не хотите запускать модульные тесты.
Чтобы запустить модульные тесты, используйте <code>mvn install</code>
, который запустит модульные тесты и создаст файл jar.
Многие модульные тесты проверяют условия отказа, приводящие к отображению исключений и трассировок стека. Это не является признаком сбоя!
[INFO] BUILD SUCCESS В конце обычно очень надёжное указание на то, что все тесты успешно пройдены!
Сценарий ниже устанавливает тестовую среду и запускает тесты.
./scripts/run-integration-tests.sh
Следуя приведённым ниже примерам интеграционных тестов/кода, вы увидите почти всё, что может делать SDK.
Сначала изучите End2endIT.java и End2endAndBackAgainIT.java, прежде чем исследовать другие образцы. Затем, когда вы их поймёте, вы можете вырезать и вставлять оттуда в своё приложение. ( живой демо ).
Примечание: эти образцы предназначены для тестирования. Валидация среды и демонстрация использования API. Большинство демонстрируют простой перевод баланса.
Интеграционный тест | Резюме и примечания |
---|---|
End2endLifecycleIT.java | Новые API управления цепным кодом жизненного цикла (v2.0): огонь! Fabric read the docs: Цепной код для операторов |
End2endIT.java | Регистрация и регистрация пользователей в центре сертификации Fabric. Создание канала в первый раз. Установка цепного кода. Устарело, см. примечания к выпуску v2.0! Инстанцирование цепного кода. Устарело, см. примечания к выпуску v2.0! Выполнение цепного кода. Запрос информации о канале. Слушатель событий цепного кода. Обход блока для получения информации. Предварительное условие для всех остальных тестовых случаев. |
End2endAndBackAgainIT.java | Воссоздание канала. Обновление цепного кода. Проверка установленного и инстанцированного цепного кода. Устарело, см. примечания к выпуску v2.0! |
End2endNodeIT.java | Показывает выполнение End2endIT.java, но с цепным кодом узла. Обратите внимание на подклассы класса En2endIT. |
End2endJavaIT.java | Показывает выполнение End2endIT.java, но с Java цепным кодом. Обратите внимание на подклассы класса En2endIT. |
End2endIdemixIT.java | Показывает выполнение End2endIT.java, но с учётными данными Idemix. Обратите внимание на подклассы класса En2endIT. |
NetworkConfigIT.java | Показывает воссоздание канала с общим профилем подключения. Определяемые пользователем обработчики для создания одноранговых узлов и организаторов ** (v2.0) ![]() |
PrivateDataIT.java | Показывает инстанцирование и установку цепного кода, который определяет личные данные. Информацию о личных данных Fabric можно найти в документации. |
UpdateChannelIT.java | Показывает обновление конфигурации канала. Подробности о конфигурациях каналов можно найти в документации Конфигурация канала. Очередь блоков слушателя ** (v2.0)**: огонь! |
(https://github.com/hyperledger/fabric-sdk-java/blob/8044bac1bfe9baf9d6360b067e0d6b5445cc953d/src/test/java/org/hyperledger/fabric/sdkintegration/ServiceDiscoveryIT.java) | |
|
Тест определяет один Fabric orderer и две организации (peerOrg1, peerOrg2), каждая из которых имеет по 2 пиров, одну службу fabric-ca.
Fabric требует, чтобы у каждой организации были закрытые ключи и сертификаты для использования при подписании и проверке сообщений, отправляемых клиентам, пирам и orderers. Каждая организация группирует эти артефакты в MSP (Membership Service Provider) с соответствующим уникальным MSPID.
Кроме того, предполагается, что каждая организация генерирует эти артефакты самостоятельно. Проект fabric-ca является примером такой службы генерации сертификатов.
Fabric также предоставляет инструмент cryptogen
для автоматического создания всех криптографических артефактов, необходимых для сквозного тестирования.
В каталоге src/test/fixture/sdkintegration/e2e-2Orgs/channel
Команда, используемая для генерации end2end crypto-config
артефактов:
v1.0 build/bin/cryptogen generate --config crypto-config.yaml --output=crypto-config
v1.1 cryptogen generate --config crypto-config.yaml --output=v1.1/crypto-config
Для удобства назначения портов и сопоставления артефактов с физическими файлами все пиры, orderers и fabric-ca запускаются как контейнеры Docker, управляемые через файл конфигурации docker-compose.
Файлы, используемые для сквозного теста:
configtxgen
и docker-compose
для сопоставления каталогов MSP)Артефакты сквозного тестового примера хранятся в каталоге src/test/fixture/sdkintegration/e2e-2Org/channel.
IBM Java нужны следующие свойства, определённые для использования TLS 1.2 для получения HTTPS-соединений с Fabric CA.
-Dcom.ibm.jsse2.overrideDefaultTLS=true -Dhttps.protocols=TLSv1.2
В настоящее время в pom.xml настроено использование netty-tcnative-boringssl для TLS-соединения с Orderer и Peers, однако вы можете изменить pom.xml (раскомментировать несколько строк), чтобы использовать альтернативное TLS-соединение через ALPN.
Тесты интеграции SDK можно включить, добавив перед ./fabric restart следующее:
ORG_HYPERLEDGER_FABRIC_SDKTEST_INTEGRATIONTESTS_TLS=true ORG_HYPERLEDGER_FABRIC_SDKTEST_INTEGRATIONTESTS_CA_TLS=--tls.enabled ./fabric.sh restart
Затем запустите тесты интеграции с помощью:
ORG_HYPERLEDGER_FABRIC_SDKTEST_INTEGRATIONTESTS_TLS=true mvn clean install -DskipITs=false -Dmaven.test.failure.ignore=false javadoc:javadoc
Вы создаёте политику с помощью инструмента Fabric (пример показан в JIRA issue FAB-2376) и предоставляете её SDK либо в виде файла, либо в виде массива байтов. SDK, в свою очередь, будет использовать эту политику при создании запросов на создание экземпляров цепочки блоков.
Чтобы ввести политику в SDK, используйте класс ChaincodeEndorsementPolicy.
Для целей тестирования существует 2 файла политики в каталоге src/test/resources
и один файл в src/test/fixture/sdkintegration/e2e-2Orgs/channel — каталог, предназначенный специально для использования в сценарии тестирования «конец-в-конец».
members_from_org1_or_2.policy (который имеет политику OR(peerOrg1.member, peerOrg2.member)) означает, что требуется одна подпись от участника любой из организаций peerOrg1 или PeerOrg2).
Также можно использовать класс ChaincodeEndorsementPolicy, предоставив ему файл YAML, в котором определена политика.
Примеры этого можно найти в тестовых сценариях End2endIT, которые используют src/test/fixture/sdkintegration/chaincodeendorsementpolicy.yaml.
Файл chaincodeendorsementpolicy.yaml содержит комментарии, помогающие понять, как создавать эти политики. В первом разделе перечислены все идентификаторы подписей, которые можно использовать в политике. В настоящее время поддерживаются только типы ролей. Раздел политики состоит из элементов n-of и signed-by. Затем n-of (1-of, 2-of) требует, чтобы в этом разделе было истинно (true) столько (n). Signed-by ссылается на идентификатор в разделе идентификаторов.
Файлы конфигурации канала и файлы начальной загрузки для упорядочивателя (см. каталог src/test/fixture/sdkintegration/e2e-2Orgs) необходимы при создании нового канала. Это создаётся с помощью инструмента Hyperledger Fabric configtxgen. Этот инструмент должен быть запущен после cryptogen, и в каталоге, где вы работаете, должен быть создан каталог crypto-config.
Если инструмент build/bin/configtxgen отсутствует, запустите make configtxgen.
Для интеграционного теста версии 1.0 команды следующие:
Для интеграции версии 1.1 команды используют профили v11 в configtx.yaml. На данный момент необходимо скопировать configtx.yaml из e2e-20orgs в каталог v1.1 и запустить оттуда:
Для интеграции версии 1.2 команды используют профили v12 в configtx.yaml:
Для версий 1.3 и 1.4 интеграции перейдите в каталог src/test/fixture/sdkintegration/e2e-2Orgs/v1.3 и выполните следующие команды:
Для версии 2.1 интеграции перейдите в каталог src/test/fixture/sdkintegration/e2e-2Orgs/v2.1 и выполните:
Это должно привести к созданию файлов orderer.block, foo.tx и bar.tx в том же каталоге.
Примечание: Выше описано, как это было сделано. Если вы повторите это, будут созданы файлы закрытых ключей с уникальными именами, которые не будут соответствовать ожидаемым в интеграционных тестах. Одним из примеров этого является docker-compose.yaml (поиск по sk).
Зависимости цепочки блоков на языке Go lang должны содержаться в папке vendor. Для объяснения этого см. Объяснение папки Vendor. Репозиторий
Для рассматриваемого релиза должен существовать файл fabric-sdk-java-<release>-javadoc.jar.
Для сборок SNAPSHOT ищите в репозитории Sonatype:
Вопросы и ответы
grpc.NettyChannelBuilderOption.keepAliveTime
, grpc.NettyChannelBuilderOption.keepAliveTimeout
, grpc.NettyChannelBuilderOption.keepAliveWithoutCalls
. Примеры этого есть в End2endIT.java.grpc.NettyChannelBuilderOption.maxInboundMessageSize
. См. constructChannel в End2endIT (https://github.com/hyperledger/fabric-sdk-java/blob/b649868113e969d851720c972f660114b64247bc/src/test/java/org/hyperledger/fabric/sdkintegration/End2endIT.java#L846).Войдите в систему (ссылка удалена). Hyperledger project's Rocket chat
Для этого вам также понадобится Linux Foundation ID.
Присоединитесь к каналу fabric-sdk-java.
Если у вас возникли проблемы с созданием среды разработки Fabric, пожалуйста, обсудите это в канале #fabric-dev-env на rocket.chat.
Чтобы сообщить о проблеме, используйте JIRA Hyperledger. Для входа вам потребуется Linux Foundation ID (LFID), который вы можете получить на сайте The Linux Foundation, если у вас его ещё нет.
Поля JIRA должны быть следующими:
Пожалуйста, предоставьте как можно больше информации о возникшей проблеме: трассировки стека, логи.
Также предоставьте вывод команды java -XshowSettings:properties -version.
Логирование для SDK можно включить, задав переменные окружения:
ORG_HYPERLEDGER_FABRIC_SDK_LOGLEVEL=TRACE
ORG_HYPERLEDGER_FABRIC_CA_SDK_LOGLEVEL=TRACE
ORG_HYPERLEDGER_FABRIC_SDK_DIAGNOSTICFILEDIR=<полный путь к каталогу> # создаёт дампы protobuf и диагностических данных. Может создавать большие объёмы данных!
Отладка Fabric по умолчанию включена в файле docker-compose.yaml SDK:
На Orderer:
ORDERER_GENERAL_LOGLEVEL=debug
На пирах: CORE_LOGGING_LEVEL=DEBUG
Fabric CA запускается командой с параметром -d.
При возможности загрузите полные логи в JIRA, а не только те, где возникла проблема.
SDK настроен на трассировку всех gRPC-коммуникаций:
SDK принимает все переменные среды, описанные в спецификации OpenTelemetry.
Эта работа лицензирована в соответствии с международной лицензией Creative Commons Attribution 4.0.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )