Guides
Dash CoreDash PlatformDash.orgDash User DocsLog In
Guides
These docs are for v0.18.0. Click to read the latest docs for v0.25-redirect.

Data Trigger

Data Trigger Overview

Although data contracts provide much needed constraints on the structure of the data being stored on Dash Platform, there are limits to what they can do. Certain system data contracts may require server-side validation logic to operate effectively. For example, DPNS must enforce some rules to ensure names remain DNS compatible. Dash Platform Protocol (DPP) supports this application-specific custom logic using Data Triggers.

Details

Since all application data is submitted in the form of documents, data triggers are defined in the context of documents. To provide even more granularity, they also incorporate the document transition action so separate triggers can be created for the CREATE, REPLACE, or DELETE actions.

When document state transitions are received, DPP checks if there is a trigger associated with the document transition type and action. If there is, it then executes the trigger logic.

Note: Successful execution of the trigger logic is necessary for the document to be accepted and applied to the platform state.

Example

As an example, DPP contains several data triggers for DPNS. The domain document has added constraints for creation. All DPNS document types have constraints on replacing or deleting:

Data ContractDocumentAction(s)Trigger Description
DPNSdomainCREATEEnforces DNS compatibility, validates provided hashes, and restricts top-level domain (TLD) registration
----------------
DPNSAll Document TypesREPLACEPrevents updates to existing documents
DPNSAll Document TypesDELETEPrevents deletion of existing documents

DPNS Trigger Constraints

The following table details the DPNS constraints applied via data triggers. These constraints are in addition to the ones applied directly by the DPNS data contract.

DocumentActionConstraint
domainCREATEFull domain length <= 253 characters
domainCREATEnormalizedLabel matches lowercase label
domainCREATEownerId matches records.dashUniqueIdentityId or dashAliasIdentityId (whichever one is present)
domainCREATEOnly creating a top-level domain with an authorized identity
domainCREATEReferenced normalizedParentDomainName must be an existing parent domain
domainCREATESubdomain registration for non top level domains prevented if subdomainRules.allowSubdomains is true
domainCREATESubdomain registration only allowed by the parent domain owner if subdomainRules.allowSubdomains is false
domainCREATEReferenced preorder document must exist
domainREPLACEAction not allowed
domainDELETEAction not allowed
preorderREPLACEAction not allowed
perorderDELETEAction not allowed