# sn_protocol ## Overview The `sn_protocol` directory contains the core protocol logic for the Safe Network. It includes various modules that handle different aspects of the protocol, such as error handling, messages, and storage. ## Table of Contents - [Overview](#overview) - [Error Handling](#error-handling) - [Messages](#messages) - [Cmd Messages](#cmd-messages) - [Query Messages](#query-messages) - [Response Messages](#response-messages) - [Storage](#storage) - [Protobuf Definitions](#protobuf-definitions) ## Error Handling The `error.rs` file contains the definitions for various errors that can occur within the protocol. ### Error Types - `ChunkNotFound(ChunkAddress)`: Indicates that a chunk was not found. - Example: `Result::Err(Error::ChunkNotFound(chunk_address))` - `ChunkNotStored(XorName)`: Indicates that a chunk was not stored. - Example: `Result::Err(Error::ChunkNotStored(xor_name))` - `RegisterNotFound(Box)`: Indicates that a register was not found. - Example: `Result::Err(Error::RegisterNotFound(register_address))` - `SpendNotFound(SpendAddress)`: Indicates that a spend was not found. - Example: `Result::Err(Error::SpendNotFound(cash_note_address))` - `DoubleSpendAttempt(Box, Box)`: Indicates a double spend attempt. - Example: `Result::Err(Error::DoubleSpendAttempt(spend1, spend2))` ## Messages The `messages` module contains different types of messages that can be sent or received within the protocol. ### Cmd Messages #### `Cmd::Replicate` - **Description**: Write operation to notify peer fetch a list of `NetworkAddress` from the holder. - **Parameters**: - `holder: NetworkAddress`: Holder of the replication keys. - `keys: Vec`: Keys of the copy that shall be replicated. ### Query Messages #### `Query::GetStoreCost` - **Description**: Retrieve the cost of storing a record at the given address. - **Parameters**: - `address: NetworkAddress`: The address where the record will be stored. ### Response Messages #### `QueryResponse::GetStoreCost` - **Description**: The store cost in nanos for storing the next record. - **Parameters**: - `store_cost: Result`: The cost of storing the record. - `payment_address: PublicAddress`: The address to pay the store cost to. #### `CmdResponse::Replicate` - **Description**: Response to replication cmd. - **Parameters**: - `Result<()>`: The result of the replication command. ## Storage The `storage` module handles the storage aspects of the protocol. ### API Calls - `ChunkAddress`: Address of a chunk in the network. - `SpendAddress`: Address of a CashNote's Spend in the network. - `Header`: Header information for storage items. ## Protobuf Definitions The `safenode_proto` directory contains the Protocol Buffers definitions for the Safe Network. ### Files - `req_resp_types.proto`: Definitions for request and response types. - `safenode.proto`: Main Protocol Buffers definitions for the Safe Network.