Proof of proximity is used to manage reputation based on the responsiveness of the cache node.

In the network, each node connects to peers between whom the RTT is less than a threshold.

Register Challenge

Any challenger can challenge an end node which is determined weighted by the reputation. The lower the reputation, the higher is the probability that a node will be challenged. The challenger also creates an ephemeral keypair that will be used in the challenge. Challenger has to submit the hash of the public key and hash of private key of the ephemeral keypair along with the current block hash to the smart contract to register the challenge. A challenger can only make a challenge once for $N$ blocks. Hash of the block in which the receipt of challenge is received along with hash of the ephemeral public key and the public key of the challenger is used to derive the entropy.

Select the target node

The entropy that is derived above is used to identify the target node that is to be challenged. Once the target node is identified, few other nodes around the end node are selected such that RTT between any 2 peers is less than the threshold.

Once the node is selected the challenger creates an encrypted data using Diffie-Hellman key exchange between ephemeral pub key and private key of each node. So only the intended node will be able to decrypt the message. The resultant of the encrypted data is encrypted using the ephermeral pub key and private key of the next node. This process is repeated for each of the selected nodes. The resultant data is encrypted in multiple layers and each of the layer can be decrypted by one of the selected nodes. Each layer consists of a random query to the cache node, which should be responded by the node.

The challenger then sends the data without an RTT limit to the first node. The receipient node can verify against the challenge registered on blockchain to ensure that the challenge is valid. The node, then decrypts the outer most layer of the encryption and broadcasts the resultant message to all peers.

The node attaches the time of arrival, challenge response and signs with the private key before sending the signed receipt to the challenger. In case the challenge response is incorrect, the cache nodes needs to prove that the result was derived from the response of a parent node, else risk slashing themselves.

Witness

The other peers of the node who aren't the intended receipients can act as witnesses to the challange propagation and submit the hash of the message along with time of arrival signed with the private key to the challenger. Such messages are called witnesses and these witnesses are collected and submitted by the challenger along with the proof.

Reputation

The reputation of a node increases if the node responds to the correctly challenge and decreases if the node doesn't respond to the challenge but the previous node responds and a witness is available that the previous node responded. Cache nodes reputation also decreases if it incorrectly responds to the challenge.

Witnesses and challengers who submit the receipts will be rewarded as this ensures that the cache nodes are active.