Note to Hedera and Gradido Transactions: - A Transaction contain TransactionBody serialized - TransactionBody contains the actual transaction - Hedera has namespace proto, gradido has namespace model.messages.gradido LoginServer register NodeServer with (username and password) or API key LoginServer get called with data from http form: - 1 group name - 1 group alias - x registered node server(s), evt. with API key if not saved Hedera::ConsensusService::createTopic get TransactionReceipt with TopicID (if succeed) // TopicID consists of three int64: shardNum, realmNum, topicNum Hedera::ConsensusService::ConsensusSubmitMessage proto.ConsensusSubmitMessageTransactionBody.topicID = gradido_discover_topicid // global, must obtained before first node server can go online, maybe hardcoded? proto.ConsensusSubmitMessageTransactionBody.message = model.messages.gradido.DiscoverIfExist serialized Gradido Node receive from Hedera Mirror Node: DiscoverIfExist Check if group alias known to gradido node If not, doing nothing, not saving message If found, call answearUrl with HTTP POST Request, not saving message in json format { "TransactionID":, "thingToFind":model.messages.gradido.DiscoverIfExist.thingToFind, "value":model.messages.gradido.DiscoverIfExist.value } LoginServer wait at least 2 minutes to answears (async) and if no answear was received, proceed json-rpc http request createGroup with APIKey and TopicID to choosen noder server {"jsonrpc": "2.0", "method": "createGroup", "params": {"APIKey": , "TopicID": }, "id": rand()} //send TopicID to Node Server(s) (choose from http-interface) Gradido Node create group folder, register for listening on topic from hedera LoginServer Hedera::ConsensusService::ConsensusSubmitMessage proto.ConsensusSubmitMessageTransactionBody.topicID = proto.ConsensusSubmitMessageTransactionBody.message = model.messages.gradido.Transaction id = ; received = ; sigMap = model.messages.gradido.SignatureMap sigPair = model.messages.gradido.SignaturePair pubKey = signature = ed25519 = txHash = ; bodyBytes = model.messages.gradido.TransactionBody serialized memo = created = model.messages.gradido.TimestampSeconds seconds = data = model.messages.gradido.StateCreateGroup name = alias = parentGroupAlias = hederaTopicId = signed from user, he is the group founder now and can sign group related messages, as long as no other was voted Gradio Node receive message from hedera mirror node, save it to blockchain validate: sequenze nr must be 1, call again discoveryIfExist for group alias to make sure, no one has get the alias in between