syntax = "proto3"; package tendermint.proto.types; option go_package = "github.com/tendermint/tendermint/proto/types"; import "third_party/proto/gogoproto/gogo.proto"; import "proto/types/types.proto"; import "google/protobuf/timestamp.proto"; import "proto/crypto/keys/types.proto"; // DuplicateVoteEvidence contains evidence a validator signed two conflicting // votes. message DuplicateVoteEvidence { Vote vote_a = 1; Vote vote_b = 2; } message PotentialAmnesiaEvidence { Vote vote_a = 1; Vote vote_b = 2; } // MockEvidence is used for testing pruposes message MockEvidence { int64 evidence_height = 1; google.protobuf.Timestamp evidence_time = 2 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes evidence_address = 3; } message MockRandomEvidence { int64 evidence_height = 1; google.protobuf.Timestamp evidence_time = 2 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes evidence_address = 3; bytes rand_bytes = 4; } message ConflictingHeadersEvidence { SignedHeader h1 = 1; SignedHeader h2 = 2; } message LunaticValidatorEvidence { Header header = 1; Vote vote = 2; string invalid_header_field = 3; } message Evidence { oneof sum { DuplicateVoteEvidence duplicate_vote_evidence = 1; ConflictingHeadersEvidence conflicting_headers_evidence = 2; LunaticValidatorEvidence lunatic_validator_evidence = 3; PotentialAmnesiaEvidence potential_amnesia_evidence = 4; MockEvidence mock_evidence = 5; MockRandomEvidence mock_random_evidence = 6; } } // EvidenceData contains any evidence of malicious wrong-doing by validators message EvidenceData { repeated Evidence evidence = 1 [(gogoproto.nullable) = false]; bytes hash = 2; } message ProofOfLockChange { repeated Vote votes = 1 [(gogoproto.nullable) = false]; tendermint.proto.crypto.keys.PublicKey pub_key = 2 [(gogoproto.nullable) = false]; }