# Commitments

Cryptographic commitment is a crucial low-level primitive that binds specific data while concealing its content. This function is vital in standardizing all statements at the protocol level. Such standardization is essential for maintaining social tree structural uniformity. The structure of social trees facilitates the creation of efficient inclusion proofs, which is particularly beneficial for proof aggregation, for example, when a user must demonstrate their inclusion within a set of trees. This method ensures both the integrity and privacy of user data within the network.

The construction of a commitment is as follows:

`Comm = hash(statement || salt)`

The `statement`

can represent any data, including some algorithms and programs. The `salt`

is an additional value generated by the commitment initiator that allows the statement to be blinded. Usually, the `salt`

is random, but in some cases, it can be deterministic (i.e., for achieving uniqueness). We recommend using the user's secret key for salt derivation to simplify the proving and recovery procedures.

When constructing a commitment, the user creates an irreversible anchor for the statement while keeping its content private. The following actions should be performed to disclose information about the underlying statement selectively:

- Prove that the commitment is part of a particular tree. Some trees can be built off-chain with time stamping only their root values.
- Prove the knowledge of the statement and the salt (two values that were used for commitment construction)
- Prove that the statement satisfies particular criteria. The complexity of the criteria can range from a statement revealing to provable queries without disclosure.