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.GitHub Repository: provenance/proto/provenance/marker/v1/proposals.proto#L15-L34
protobufmessage 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.
GitHub Repository: provenance/proto/provenance/marker/v1/proposals.proto#L36-L47
protobufmessage 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
GitHub Repository: provenance/proto/provenance/marker/v1/proposals.proto#L49-L59
protobufmessage 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
GitHub Repository: provenance/proto/provenance/marker/v1/proposals.proto#L61-L71
protobufmessage 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
GitHub Repository: provenance/proto/provenance/marker/v1/proposals.proto#L73-L83
protobufmessage 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
GitHub Repository: provenance/proto/provenance/marker/v1/proposals.proto#L85-L94
protobufmessage 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
GitHub Repository: provenance/proto/provenance/marker/v1/proposals.proto#L96-L107
protobufmessage 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.
GitHub Repository: provenance/proto/provenance/marker/v1/proposals.proto#L109-L117
protobufmessage 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
)