Files
oc-discovery/docs/diagrams/02_node_claim.puml

39 lines
1.3 KiB
Plaintext
Raw Normal View History

2026-02-24 14:31:37 +01:00
@startuml
2026-03-09 14:57:41 +01:00
title Node Claim — Peer A publish its PeerRecord (claimInfo + publishPeerRecord)
2026-02-24 14:31:37 +01:00
2026-03-09 14:57:41 +01:00
participant "DB Peer A (oc-lib)" as DBA
2026-02-24 14:31:37 +01:00
participant "Node A" as NodeA
2026-03-09 14:57:41 +01:00
participant "Indexer (shared)" as IndexerA
2026-02-24 14:31:37 +01:00
participant "DHT Kademlia" as DHT
participant "NATS A" as NATSA
2026-03-09 14:57:41 +01:00
NodeA -> DBA: DB(PEER).Search(SELF)
DBA --> NodeA: existing peer (DID_A) or new UUID
2026-02-24 14:31:37 +01:00
NodeA -> NodeA: LoadKeyFromFilePrivate() → priv A
NodeA -> NodeA: LoadKeyFromFilePublic() → pub A
NodeA -> NodeA: Build PeerRecord A {\n Name, DID, PubKey,\n PeerID: PeerID_A,\n APIUrl: hostname,\n StreamAddress: /ip4/.../tcp/4001/p2p/PeerID_A,\n NATSAddress, WalletAddress\n}
2026-03-09 14:57:41 +01:00
NodeA -> NodeA: priv.Sign(rec) → signature
2026-02-24 14:31:37 +01:00
NodeA -> NodeA: rec.ExpiryDate = now + 150s
2026-03-09 14:57:41 +01:00
loop For every Node Binded Indexer (Indexer A, B, ...)
2026-02-24 14:31:37 +01:00
NodeA -> IndexerA: TempStream /opencloud/record/publish/1.0
2026-03-09 14:57:41 +01:00
NodeA -> IndexerA: strea!.Encode(Signed PeerRecord A)
2026-02-24 14:31:37 +01:00
IndexerA -> IndexerA: Verify signature
2026-03-09 14:57:41 +01:00
IndexerA -> IndexerA: Check PeerID_A heartbeat stream
2026-02-24 14:31:37 +01:00
IndexerA -> DHT: PutValue("/node/"+DID_A, PeerRecord A)
DHT --> IndexerA: ok
end
NodeA -> NodeA: rec.ExtractPeer(DID_A, DID_A, pub A)
NodeA -> NATSA: SetNATSPub(CREATE_RESOURCE, {PEER, Peer A JSON})
NATSA -> DBA: Upsert Peer A (SearchAttr: peer_id)
DBA --> NATSA: ok
NodeA --> NodeA: *peer.Peer A (SELF)
@enduml