syntax = "proto3";
package provenance.metadata.v1;

option go_package = "github.com/provenance-io/provenance/x/metadata/types";

option java_package        = "io.provenance.metadata.v1";
option java_multiple_files = true;

import "gogoproto/gogo.proto";
import "provenance/metadata/v1/metadata.proto";
import "provenance/metadata/v1/scope.proto";
import "provenance/metadata/v1/specification.proto";
import "provenance/metadata/v1/objectstore.proto";

// GenesisState defines the account module's genesis state.
message GenesisState {
  option (gogoproto.equal)           = false;
  option (gogoproto.goproto_getters) = false;

  // params defines all the parameters of the module.
  Params params = 1 [(gogoproto.nullable) = false];

  // A collection of metadata scopes and specs to create on start
  repeated Scope   scopes   = 2 [(gogoproto.nullable) = false];
  repeated Session sessions = 3 [(gogoproto.nullable) = false];
  repeated Record  records  = 4 [(gogoproto.nullable) = false];

  repeated ScopeSpecification    scope_specifications    = 5 [(gogoproto.nullable) = false];
  repeated ContractSpecification contract_specifications = 6 [(gogoproto.nullable) = false];
  repeated RecordSpecification   record_specifications   = 7 [(gogoproto.nullable) = false];

  OSLocatorParams             o_s_locator_params    = 8 [(gogoproto.nullable) = false];
  repeated ObjectStoreLocator object_store_locators = 9 [(gogoproto.nullable) = false];

  // Net asset values assigned to scopes
  repeated MarkerNetAssetValues net_asset_values = 10 [(gogoproto.nullable) = false];
}

// MarkerNetAssetValues defines the net asset values for a scope
message MarkerNetAssetValues {
  option (gogoproto.equal)           = false;
  option (gogoproto.goproto_getters) = false;

  // address defines the scope address
  string address = 1;

  // net_asset_values that are assigned to scope
  repeated NetAssetValue net_asset_values = 2 [(gogoproto.nullable) = false];
}
