classDiagram
class RelayServer{
+IpAddress ip
+PublicKey pk
}
class Event{
+Int64 modelHash
+RelayServer[] relays
+Commit getCommit()
}
class Tag{
+bool isMaster
+bool isDeltaModel
+bool isHead
+bool isEncrypted
+bool isMerge
}
class Commit{
+Int64 modelHashID
+PublicKey author
+Int64 authorSignature
+DateTime timestamp
+Tag tag
+string commitMessage
+byte[] getFullModel()
+bool checkValid()
+void rebaseToMaster()
+double getCompressionRatio()
}
class SingleParentModel{
+Event parentModel
}
class MergeModel{
+Event[] parentModels
}
class DeltaModel{
+byte[] modelDelta
}
class FullModel{
+byte[] modelBin
}
SingleParentModel --> Event
MergeModel --> Event
Event --> RelayServer
Commit <|--SingleParentModel
Commit <|--MergeModel
SingleParentModel <|-- DeltaModel
SingleParentModel <|-- FullModel
Commit --> Tag