Welcome to the new Provenance Blockchain developer documentation portal!
logo

Summary

The marker module supports extensive governance control through eight specialized proposal types that enable marker creation, supply management, administrator control, status changes, escrow operations, and metadata configuration without requiring individual account permissions, allowing markers to be fully managed through decentralized governance processes while maintaining strict validation and control requirements.

The marker module supports an extensive amount of control over markers via governance proposal. This allows a marker to be defined where no single account is allowed to make modifications and yet it is still possible to issue change requests through passing a governance proposal.

Add Marker Proposal

AddMarkerProposal defines a governance proposal to create a new marker.
In a typical add marker situation the UnrestrictedDenomRegex parameter would be used to enforce longer denom values (preventing users from creating coins with well known symbols such as BTC, ETH, etc.). Markers added via governance proposal are only limited by the more generic Coin Validation Denom expression enforced by the bank module.
A further difference from the standard add marker flow is that governance proposals to add a marker can directly set a marker to the Active status with the appropriate minting operations performed immediately.
protobuf
message AddMarkerProposal { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = false; string title = 1; string description = 2; cosmos.base.v1beta1.Coin amount = 3; string manager = 4; MarkerType marker_type = 5; repeated AccessGrant access_list = 6; bool supply_fixed = 7; bool allow_governance_control = 8; bool allow_forced_transfer = 9; repeated string required_attributes = 10; }
Expected failures:
  • Invalid governance proposal format
  • Invalid marker denom value or marker already exists
  • Circulation amount configuration issues
  • Mint operation failures

Supply Increase Proposal

SupplyIncreaseProposal defines a governance proposal to administer a marker and increase total supply of the marker through minting coin and placing it within the marker or assigning it directly to an account.
protobuf
message SupplyIncreaseProposal { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = false; string title = 1; string description = 2; cosmos.base.v1beta1.Coin amount = 3; string target_address = 4; }
Expected failures:
  • Invalid governance proposal format
  • Requested supply exceeds MaxSupply configuration parameter

Supply Decrease Proposal

SupplyDecreaseProposal defines a governance proposal to administer a marker and decrease the total supply through burning coin held within the marker
protobuf
message SupplyDecreaseProposal { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = false; string title = 1; string description = 2; cosmos.base.v1beta1.Coin amount = 3; }
Expected failures:
  • Invalid governance proposal format
  • Marker does not allow governance control (AllowGovernanceControl)
  • Insufficient supply in marker account
  • Resulting supply would be less than zero
Chain halt conditions:
  • Bank burn operation fails for any reason

Set Administrator Proposal

SetAdministratorProposal defines a governance proposal to administer a marker and set administrators with specific access on the marker
protobuf
message SetAdministratorProposal { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = false; string title = 1; string description = 2; string denom = 3; repeated AccessGrant access = 4; }
Expected failures:
  • Invalid governance proposal format
  • Marker does not exist or does not allow governance control
  • Invalid access grants

Remove Administrator Proposal

RemoveAdministratorProposal defines a governance proposal to administer a marker and remove all permissions for a given address
protobuf
message RemoveAdministratorProposal { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = false; string title = 1; string description = 2; string denom = 3; repeated string removed_address = 4; }
Expected failures:
  • Invalid governance proposal format
  • Marker does not exist or does not allow governance control
  • Address to be removed is not present

Change Status Proposal

ChangeStatusProposal defines a governance proposal to administer a marker to change its status
protobuf
message ChangeStatusProposal { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = false; string title = 1; string description = 2; string denom = 3; MarkerStatus new_status = 4; }
Expected failures:
  • Invalid governance proposal format
  • Marker does not allow governance control
  • Invalid status or invalid status transition
  • For destroyed markers: supply issues with burning remaining supply

Withdraw Escrow Proposal

WithdrawEscrowProposal defines a governance proposal to withdraw escrow coins from a marker
protobuf
message WithdrawEscrowProposal { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = false; string title = 1; string description = 2; string denom = 3; repeated cosmos.base.v1beta1.Coin amount = 4; string target_address = 5; }
Expected failures:
  • Invalid governance proposal format
  • Marker does not allow governance control
  • Insufficient assets in marker account for withdrawal

Set Denom Metadata Proposal

SetDenomMetadataProposal defines a governance proposal to set the metadata for a denom.
protobuf
message SetDenomMetadataProposal { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = false; string title = 1; string description = 2; cosmos.bank.v1beta1.Metadata metadata = 3; }
Expected failures:
  • Invalid governance proposal format
  • Marker does not allow governance control (AllowGovernanceControl)