41 lines
1.4 KiB
Plaintext
41 lines
1.4 KiB
Plaintext
@startuml
|
|
title Node Claim — Pair A publie son PeerRecord (claimInfo + publishPeerRecord)
|
|
|
|
participant "DB Pair A (oc-lib)" as DBA
|
|
participant "Node A" as NodeA
|
|
participant "Indexer (partagé)" as IndexerA
|
|
participant "DHT Kademlia" as DHT
|
|
participant "NATS A" as NATSA
|
|
|
|
NodeA -> DBA: NewRequestAdmin(PEER).Search(SELF)
|
|
DBA --> NodeA: existing peer (DID_A) ou nouveau UUID
|
|
|
|
NodeA -> NodeA: LoadKeyFromFilePrivate() → priv A
|
|
NodeA -> NodeA: LoadKeyFromFilePublic() → pub A
|
|
NodeA -> NodeA: crypto.MarshalPublicKey(pub A) → pubBytes
|
|
|
|
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}
|
|
|
|
NodeA -> NodeA: sha256(json(rec)) → hash
|
|
NodeA -> NodeA: priv.Sign(hash) → signature
|
|
NodeA -> NodeA: rec.ExpiryDate = now + 150s
|
|
|
|
loop Pour chaque StaticIndexer (Indexer A, B, ...)
|
|
NodeA -> IndexerA: TempStream /opencloud/record/publish/1.0
|
|
NodeA -> IndexerA: json.Encode(PeerRecord A signé)
|
|
|
|
IndexerA -> IndexerA: Verify signature
|
|
IndexerA -> IndexerA: Check heartbeat stream actif pour PeerID_A
|
|
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
|