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 check if alias in unique with choosen NodeServer {"jsonrpc": "2.0", "method": "checkAlias", "params": {"alias": , "apiKey": }, "id": rand()} Gradido Node return result with 0 or 1 and memorize if apiKey is given (only in memory) by 0 request for 10 minutes 0 = alias unknown 1 = alias known 2 = has blockchain for group of alias Hedera::ConsensusService::createTopic get TransactionReceipt with TopicID (if succeed, alias unknown) // 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.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 = serialized signed from user, he is the group founder now and can sign group related messages Gradido Node receive from Hedera Mirror Node: model.messages.gradido.Transaction with model.messages.gradido.StateCreateGroup validate and save create Group Transaction in state-chain if checkAlias Request for this alias is memorized: create blockchain for this group, register for listen to topic of this group send HTTP POST Request in json format to login server(s) how called checkAlias with this alias 10 minutes or less before { /group_created { "alias":StateCreateGroup.alias, "topicID": StateCreateGroup.hederaTopicId, "name": StateCreateGroup.name } LoginServer Show succeed ------------------------------------------------------------------------- if node server already know group LoginServer {"jsonrpc": "2.0", "method": "addGroup", "params": {"alias": , "apiKey": }, "id": rand()} GradidoNode return {"jsonrpc": "2.0", "result": {"state": "not found", "msg":"group alias not known"}, "id": } create blockchain for this group, register for listen to topic of this group return {"jsonrpc": "2.0", "result": { "alias":StateCreateGroup.alias, "topicID": StateCreateGroup.hederaTopicId, "name": StateCreateGroup.name }, "id": }