mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
82 lines
3.4 KiB
Plaintext
82 lines
3.4 KiB
Plaintext
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": <from form>, "apiKey": <optional, unique per Login Server>}, "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 = <left empty>;
|
|
received = <left empty>;
|
|
sigMap = model.messages.gradido.SignatureMap
|
|
sigPair = model.messages.gradido.SignaturePair
|
|
pubKey = <public root key of group founder>
|
|
signature = ed25519 = <bodyBytes signed with group founder private key>
|
|
txHash = <left empty>;
|
|
|
|
bodyBytes = model.messages.gradido.TransactionBody serialized
|
|
memo = <empty>
|
|
created = model.messages.gradido.TimestampSeconds
|
|
seconds = <current timestamp>
|
|
data = model.messages.gradido.StateCreateGroup
|
|
name = <group name>
|
|
alias = <group alias>
|
|
parentGroupAlias = <parent group alias or empty>
|
|
hederaTopicId = <from hedera answear>
|
|
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": <from form>, "apiKey": <unique per Login Server>}, "id": rand()}
|
|
|
|
GradidoNode
|
|
return {"jsonrpc": "2.0", "result": {"state": "not found", "msg":"group alias not known"}, "id": <id from call>}
|
|
|
|
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": <id from call>}
|
|
|
|
|
|
|