data class Handshake<out T>
Handshake(payload: T, publicKey: PublicKey)
val payload: T
val publicKey: PublicKey