Protocol Research

The URnetwork protocol can be run by any network operator. The protocol is a decentralized-native, multi-IP, multi-transport protocol (as opposed to a traditional site-to-site tunnel protocol). The goal is to scale to a network of millions of providers per network operator and deliver a best-in-class experience. The "Layer 2" design allows the most sensitive data to be private. However, for transparency and research, anonymized exports of the problem space inputs and outputs are made available.

Anonymization technique

The payout block of the network is 7 days. The data is anonymized per block. All client ids and IP subnet hashes are replaced with simple integer counter values. Additionally city meta data is not included.

Note to researchers/builders

The URnetwork team would like to allow users to opt-into experimental algorithms. We plan to keep this document up to the date with the current (default) algorithm along with experimental directions. For security research please follow the Vulnerability Disclosure Program.

Problems

Matching clients to providers

Current algorithm

UR-FP2 (network_client_location_model.go#FindProviders2) A sampling algorithm that loads a 10x random sample of potential providers from memory and shuffles it proportion to reliability * client score to a list of finalist. The fairness of the shuffle versus provider aliasing (Sybil attack) is guaranteed by the property of sum(reliability) <= 1 per IP subnet.

Data sets

Traces of every function call including inputs and selected outputs are here (TODO)

Multi client

Current algorithm

UR-MULTI (ip_remote_multi_client.go) A heuristic sweep based algorithm to manage a window of providers. Locks traffic into providers of the top available tier. Based on transfer-thresholds and not protocol analysis.

Data sets

This runs entirely on the client side and we currently do not have an option for users to share traces with us (TODO)

Transfer

Current algorithm

UR-TRANSFER (transfer.go) A reliable transfer window tuned for high latency environments. Protocol retransmits into the transfer layer are disabled since the window has reliable delivery. Distributes traffic among available transports based on ranked performance and availability of the transport.

Data sets

This runs entirely on the client side and we currently do not have an option for users to share traces with us (TODO)

IP Egress

Current algorithm

UR-IP (ip.go) An implementation of an IP stack that runs in minimal memory. Assumes the communicate to the peer is reliable via transfer, and hence retransmits are optimized.

Data set

This runs entirely on the client side and we currently do not have an option for users to share traces with us (TODO)

Points/Token allocation

Current algorithm

UR-PSUB2 (account_payout_model_plan.go) Points are allocated from a "subsidy" pool and distributed every 7 days proportional to data transfer "votes", reliability scores, and referrals. The data votes prioritize traffic generated from paid subscribers to counteract gaming the totals. Multiplier bonuses are applied for certain reliability and community incentives.

Data set

The inputs and outputs will be moved on chain as part of the tokenization effort.

Permission

Current algorithm

UR-CONTRACT (subscription_model.go) Transfer between two parties (the initiator and the companion) requires a contract encrypted with the secret key of the destination client. The contract includes a fixed transfer balance held in escrow, and a permission set of the relation between the two parties. The companion can create contracts paired to the initiator for return traffic. Additionally multi-hop paths will send stream open and stream close events to intermediaries. Both the initiator and companion must close the contract after use with the acknowledged byte count. If either side does not close, or there is a disagreement, the contraction resolution process forces a result. If any side reports abuse, future transfer between the two parties is not allowed.

Data set

Export of contracts and closure state so that the raw transfer statistics and traffic flows in the network can be analyzed.

Safety

Current algorithm

UR-SEC1 (ip_security.go) Port block list and IP block list. Does not do protocol inspection.

Data set

This runs entirely on the client side and we currently do not have an option for users to share traces with us (TODO)

Last updated

Was this helpful?