add protocol.go