Вопросы проектирования, касающиеся создания приложения CordApps

Я новичок в корде и получаю свою голову вокруг этого. Так что я понимаю, что только важные данные должны идти в цепочку блоков. пример в обмене физическим контрактом, который должен быть разделен. Я должен только создать государство контракта. потому что это важно и должно быть неизменным.

// From the example on CORDA site
flowProgressHandle<SignedTransaction> flowHandle = rpcOps
                    .startTrackedFlowDynamic(TestFlow.Initiator.class, iouValue, otherParty);
 //so this is  how flow would begin I'll pass the value of the otherParty and and I'll get my node information in the TestFlow.Initiator class something like this
IOUState iouState = new IOUState(iouValue, getServiceHub().getMyInfo().getLegalIdentities().get(0), otherParty);

теперь getServiceHub (). getMyInfo (). getLegalIdentities (). get (0) -> это дает мне мой собственный узел как участник, поскольку конструктор IOUstate принимает кредитора и владельца.

как я могу получить больше информации о владельце? Например, какое у него занятие или хобби, где я могу хранить это, чтобы получить его? В примере с CORDA я вижу, что здесь указано имя, поэтому нет смысла вкладывать сюда хобби и занятия. как справиться с этим. Я хочу отправить и получить Singed

node {
        name "O=PartyA,L=London,C=GB"
        advertisedServices = []
        p2pPort 10005
        rpcPort 10006
        webPort 10007
        cordapps = ["net.corda:corda-finance:$corda_release_version"]
    }

теперь другой вопрос, как явно инициализировать CordaRPCOps rpcOps??? потому что, кажется, это необходимо для начала.

Теперь, если я хочу получить все контракты, которые ниже для стороны А, сделать запрос в ГОСУДАРСТВЕ, чтобы я получил результат из базы данных H2? Разве я не могу хранить стороны также в цепочке блоков с отношениями один-ко-многим с СОСТОЯНИЕМ контракта, который является общим? как я это сделал?

1 ответ

Поскольку ^ rich уже ответил на вопрос об инициализации RPC Ops, я отвечу на другую часть.

мы закончили тем, что использовали NODE_PROPERTIES таблица для хранения информации, связанной с узлом. мы сделали это в corda 3.1 Вероятно, есть лучший способ сделать это в последней версии Corda, в которой я не очень уверен.

В NODE_PROPERTIES В таблице можно хранить любую пару ключ-значение, если они не конфликтуют с ключами, используемыми для внутренних целей. мы настроили нашу работу jenkins, теперь она будет выполнять сценарий sql на главной книге узла и обновлятьNODE_PROPERTIES с соответствующими значениями, которые были необходимы после завершения начальной загрузки. Вы можете легко прочитать таблицу, используя jdbc и делать все, что вам нужно, даже обновлять по мере необходимости.

другой способ будет создать corda-service и в его конструкторе выполните sql, который вы хотите обновить, или создайте любую таблицу с любой информацией, приемлемой для вас. иметь это в качестве отдельного cordapp и развернуть на любом узле. Вы можете абстрагировать сценарий sql, поместить его где-нибудь в облаке и загрузить на основе некоторого ключа, который может быть именем вашего узла, так что каждый узел будет использовать свой собственный предопределенный сценарий.

Так что есть несколько вопросов... но я отвечу на вопрос: "Как явно инициализировать CordaRPCOps rpcOps?" - и ответ в том, что вы не можете (и не должны) создавать экземпляр этого явно. Вы либо получите его, если вы подключились к работающему узлу Corda через интерфейс RPC, либо находитесь в Corda "Flow".

Я предполагаю, что вы хотите подключиться к узлу и получить экземпляр таким образом - вот как я это делаю в https://github.com/ragmondo/cordaftp/blob/3d1fd9f636d85803206cae18b522b0c4884d2453/src/main/kotlin/net/corda/cordaftp/Sender.kt#L21

import net.corda.client.rpc.CordaRPCClient
import net.corda.core.messaging.CordaRPCOps
import net.corda.core.utilities.NetworkHostAndPort


fun loginToCordaNode(args: Array<String>): CordaRPCOps {
    val nodeAddress = NetworkHostAndPort.parse(args[0])
    val client = CordaRPCClient(nodeAddress)
    return client.start("user1", "test").proxy
}

Очевидно, изменить user1 а также test соответственно, но, как вы можете видеть, это возвращает объект типа CordaRPCOps

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