# Protocol Buffers This sections defines the protocol buffers used in Tendermint. This is split into two directories: `spec`, the types required for all implementations and `tendermint`, a set of types internal to the Go implementation. All generated go code is also stored in `tendermint`. More descriptions of the data structures are located in the spec directory as follows: - [Block](../spec/core/data_structures.md) - [ABCI](../spec/abci/README.md) - [P2P](../spec/p2p/messages/README.md) ## Process to generate protos The `.proto` files within this section are core to the protocol and updates must be treated as such. ### Steps 1. Make an issue with the proposed change. - Within the issue members, from the Tendermint team will leave comments. If there is not consensus on the change an [RFC](../rfc/README.md) may be requested. 1a. Submission of an RFC as a pull request should be made to facilitate further discussion. 1b. Merge the RFC. 2. Make the necessary changes to the `.proto` file(s), [core data structures](../spec/core/data_structures.md) and/or [ABCI protocol](../spec/abci/apps.md). 3. Rebuild the Go protocol buffers by running `make proto-gen`. Ensure that the project builds correctly by running `make build`.