use protobuf