Relay Mining

Introduction

tl;dr Modulate onchain difficulty up (similar to Bitcoin) so we can accommodate surges in relays and have no upper limit on the number of relays per session.

Relay Mining is the only solution in Web3 to incentivize read-only requests and solve for the problem of high volume: how can we scale to billions or trillions of relays per session.

This complements the design of Probabilistic Proofs to solve for all scenarios.

Relay Sessions

Sessions effectively group relays into time-wise batches. During each session, Applications and/or Gateways can submit relays to one or more of the Suppliers in the current session for servicing.

Sovereign Application

An Application can act as a "sovereign application" (i.e. its own Gateway). In this case, the ring used to sign relay requests is constructed only from the Application's public key.

See: Legend > Sequence Diagram

The following ASCII sequence-diagram content (from the source) is preserved as-is:

RPC ServerSupplierPokt NetworkGateway (Sovereign Application)RPC ServerSupplierPokt NetworkGateway (Sovereign Application)Ref: RPC Request/Response Relay (Sovereign Application)loop[Every relay request]loop[Session N]break[Wait for session N grace period toend]ref: Supplier Claim/Proofloop[Every application sessionfrom session N]loop[Session N+GracePeriod+1]UserStake for service(s)Stake for service(s)Persist unclaimed & unproven session treesUserSovereign Application - RPC Request/Response & Claim/Proof

Delegated Application

An Application can also be delegated to one or more Gateways. In this case the ring used to sign relay requests is constructed from the Application's public key and the public keys of the all Gateways it is delegated to at the start of the session in question.

See: Legend > Sequence Diagram

The following ASCII sequence-diagram content (from the source) is preserved as-is:

RPC ServerSupplierPokt NetworkGatewayRPC ServerSupplierPokt NetworkGatewayref: RPC Request/Response Relay (Delegated Application)loop[Every Request]loop[Session N]Wait for session grace period to endloop ref: Supplier Claim/Proofloop[Every application session from session N]loop[Session+GracePeriod+1]UserApplication (Delegated to Gateway)StakeStake for service(s)Delegate to gateway(s)Stake for service(s)Store current ring state for applicationConstruct ring for signing (query application & delegates' public keys)Construct ring for verifying (query application & delegates' public keys)"Persist unclaimed & unproven session trees"Delete ring state for applicationUserApplication (Delegated to Gateway)Delegated Application - RPC Request/Response & Claim/Proof

Legend

Sequence Diagram

The original sequence diagram legend content is preserved:

Protocol ActorProtocol Actorref: Interaction (other seq. diagram)break[Time gap]loop[Looped sequence]Protocol ParticipantProtocol participant sends a synchronous <<message>> to protocol actorProtocol actor returns a synchronous <<message>> to protocol participantProtocol participant sends an asynchronous <<message>> to protocol actorProtocol actor returns an asynchronous <<message>> to protocol participantAn action of protocol participant updates onchain state of protocol actorAn action of protocol participant references onchain state of protocol actorProtocol actor performs some independent actionProtocol ParticipantSequence Diagram Legend

Was this helpful?