corda - ошибка при запуске clean deployNode - Исключительная ситуация при запуске узла: не найден закрытый ключ для юридического удостоверения узла - PullRequest
0 голосов
/ 24 апреля 2020

Я использую Corda OS 4.4, и я пытаюсь использовать postgresql вместо h2. Мне удалось заставить мой узел работать изначально после запуска «gradle clean deployNodes» и «runnodes», но после того, как я выключил узлы и попытался запустить их снова, используя «gradle clean deployNodes», я вижу следующую ошибку:

[ERROR] 15:01:30+0800 [main] internal.NodeStartupLogging. - Exception during node startup: Private key for the node legal identity not found (alias identity-private-key) but the corresponding public key for it exists in the database. This suggests the identity for this node has been lost. Shutting down to prevent network map issues. [errorCode=r5hpbl, moreInformationAt=https://errors.corda.net/OS/4.4/r5hpbl]

Вот настройки для одного из моих узлов:

 node {
        name "O=test1,L=test2,C=test3"
        p2pPort 10005
        rpcSettings {
            address("localhost:10006")
            adminAddress("localhost:10046")
        }
        rpcUsers = [[ user: "user1", "password": "test", "permissions": ["ALL"]]]
        extraConfig = [
                    "dataSourceProperties.dataSourceClassName"  : "org.postgresql.ds.PGSimpleDataSource",
                    "dataSourceProperties.dataSource.url"       : "jdbc:postgresql://localhost:5432/postgres",
                    "dataSourceProperties.dataSource.user"      : "corda-node-test",
                    "dataSourceProperties.dataSource.password"  : "password",
                    "database.transactionIsolationLevel"        : "READ_COMMITTED",
                    "database.initialiseSchema"                 : "true",
                    "jarDirs"                                   : [ "../../../libs" ]
        ]
    }

Единственный способ устранить эту ошибку - удалить всю схему и воссоздать их:

DROP SCHEMA "corda-node-test_schema" CASCADE;
CREATE USER "corda-node-test" WITH LOGIN PASSWORD 'password';
CREATE SCHEMA "corda-node-test_schema";
GRANT USAGE, CREATE ON SCHEMA "corda-node-test_schema" TO "corda-node-test";
GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON ALL tables IN SCHEMA "corda-node-test_schema" TO "corda-node-test";
ALTER DEFAULT privileges IN SCHEMA "corda-node-test_schema" GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON tables TO "corda-node-test";
GRANT USAGE, SELECT ON ALL sequences IN SCHEMA "corda-node-test_schema" TO "corda-node-test";
ALTER DEFAULT privileges IN SCHEMA "corda-node-test_schema" GRANT USAGE, SELECT ON sequences TO "corda-node-test";
ALTER ROLE "corda-node-test" SET search_path = "corda-node-test_schema";

, но после того, как я его запустил и попробовал снова запустить "gradle clean deployNodes", я вернулся к исходной точке. У кого-нибудь есть идеи или предложения? Спасибо!

1 Ответ

0 голосов
/ 24 апреля 2020

Это происходит потому, что при чистом развертывании команда clean не очищает базу данных postgres, в отличие от базы данных h2.

В идеале, в производственной системе ожидается, что вы развернете свой cordapp один раз, позже, конечно, вы сможете обновить свой контракт, состояния и потоки по мере необходимости, но вы никогда не будете полностью очищать базу данных полностью.

Итак, сейчас, когда вы впервые развертываете свое приложение-апплет, вы генерируете сертификаты с помощью инструмента начальной загрузки (вы можете найти их в папке build / hosts / PartyA / Certificates), они также сохраняются. в БД.

Когда вы делаете чистую сборку, папка сборки очищается, но база данных не очищается и портится с новыми записями, в которых также есть новые записи, и узел путается с тем, какую запись использовать.

...