syntax = "proto3";
package tendermint.crypto.merkle;
option  go_package = "github.com/tendermint/tendermint/crypto/merkle";

// For more information on gogo.proto, see:
// https://github.com/gogo/protobuf/blob/master/extensions.md
import "third_party/proto/gogoproto/gogo.proto";

option (gogoproto.marshaler_all)   = true;
option (gogoproto.unmarshaler_all) = true;
option (gogoproto.sizer_all)       = true;

option (gogoproto.populate_all) = true;
option (gogoproto.equal_all)    = true;

//----------------------------------------
// Message types

// ProofOp defines an operation used for calculating Merkle root
// The data could be arbitrary format, providing nessecary data
// for example neighbouring node hash
message ProofOp {
  string type = 1;
  bytes  key  = 2;
  bytes  data = 3;
}

// Proof is Merkle proof defined by the list of ProofOps
message Proof {
  repeated ProofOp ops = 1 [(gogoproto.nullable) = false];
}
