Repository files navigation

UR Subnet

A Bittensor subnet for a decentralized privacy network.

This repository (sn) is the reference implementation of the UR Subnet — the EVM contract suite, miner and validator software, chain tooling, and the real-testnet integration harness. The operator/API implementation lives in the sibling server repository.

Network Operators run the servers. Independent providers carry ingress/egress traffic. Independent validators run the VALIDATOR.md routing‑verification protocol — walking server‑assigned chains of providers to prove real‑time transit and measure which providers are the weakest links. Bittensor's Yuma Consensus turns that measurement into emission. Everything is denominated in the subnet's native token — α, branded $UR.

The full specification is in WHITEPAPER.md; the design rationale versus the rest of the Bittensor field is in COMPARISON.md.


Mechanism at a glance

UR Subnet — mechanism at a glance

Money flows in three coupled channels, all in α:

  1. Deposits — the demand signal, conviction stake, and a buyback. Each NO deposits α through the coordinator, sized to its real usage at an off‑chain published rate (no on‑chain oracle). Deposits are the costly signal of real demand — and they are never distributed: every exact deposit is transferred into the immutable STReserveSink and staked on the fixed reserve hotkey (compounding dividends, with no outbound bytecode). A NO's cumulative locked α (its conviction) sets its tier → rate: zero conviction pays the baseline rate; more conviction lowers it — the onboarding and alignment lever.

  2. Emission (Yuma Consensus). The Bittensor coinbase pays the standard 18% owner / 41% miner / 41% validator α split. Each tempo (~72 min), independent validators score both miner tiers from their own trails, submit weights under commit‑reveal, and Yuma's stake‑weighted median + clipping + vtrust turns those scores into miner emission — so the validators' evaluation is what moves the money. Validator emission flows natively (∝ stake × vtrust).

  3. Settlement (7‑day epoch). Over each epoch the immutable settlement vault captures pool miner emission and providers claim their α directly from the vault with cryptographic proofs. A NO directs where its pool's rewards go but never holds anyone else's funds.

Two miner tiers, in parallel

Because one NO may serve 100k+ providers — far beyond a subnet's ~256 UID cap — the miner side runs two tiers inside one mechanism, divided by a governance share θ:

  • Pool tier (tail, 1−θ) — the on‑ramp. Each NO is a single vault‑owned pool UID; validators weight it implied_usage × quality (implied usage = the NO's deposit ÷ its tier rate). Its providers are not UIDs — they are paid inside the pool by Merkle claim. Low provider barrier (join a NO; the provider needs no UID or burn because the immutable vault owns one shared, burn-registered pool UID per NO), baseline reward.
  • Top‑level miners (head, θ) — the supply apex. The top ~200 fleets by split‑adjusted distinct routable egress‑IP count (real VPN supply breadth, not traffic volume) each claim their own miner UID, are steered directly by validators, and are paid natively to their own hotkey — no contract custody, no Merkle claim, no operator in the payout path. A fleet is matched to its UID by a dual‑signed client_ids ⇄ hotkey binding.

A provider starts in a pool, graduates to a top slot as its routable‑IP breadth grows, and falls back if it slips — with Bittensor's native deregistration churn running that tournament. A client_id earns in exactly one tier at a time (no double‑pay). Start tail‑weighted (θ ≈ 0.3) and widen it as the top‑miner set and validator consensus mature.

Custody and trust model

  • No operator custody. The owner and NOs never hold or distribute anyone else's α. The immutable vault is the sole custodian of in‑transit pool emission; every payout is a direct on‑chain pull claim; the head is paid natively.
  • Finalized claims are sacrosanct from day one — no upgrade, pause, or admin action can block or claw back a finalized claim.
  • The buyback reserve is one‑way — no contract function ever sources a transfer out of it.
  • Split governance.STReserveSink and STSettlementVault are non-upgradeable from launch. Only STCoordinator is UUPS-upgradeable: testnet uses a dedicated value-capped owner, while mainnet requires a distinct 2-of-3 Safe, followed by a ≥1-epoch timelock.

How this compares to the Bittensor field

The UR Subnet follows the Bittensor core almost everywhere and diverges only deliberately. Of the major design decisions, 12 are aligned with prevailing practice, 2 are divergent (reward settlement/custody and the worker‑payout trust model — both toward trustlessness), and 2 are genuinely novel bets: coupling miner reward to real, revenue‑backed demand (implied_usage × quality) and tiering miners into a trust‑minimized pooled tail plus a directly‑paid head.

UR Subnet vs. the Bittensor norm — design‑decision alignment matrix

Full analysis, per‑theme and per‑subnet, is in COMPARISON.md.


Participate

Register a network operator

Register a network‑operator key, then run the /verify server and deposit α. See the provider/operator documentation at https://ur.xyz. Operators register a client_id with the subnet used for root contracts, so they can independently audit their contracts. In the launch phase, operator admission is owner‑gated.

Each epoch, an NO commits the Merkle payout root that splits its pool among its providers. It directs the split; the immutable vault holds and pays.

Register a provider (ingress or egress)

Follow the provider documentation at https://ur.xyz. Providers work with network operators — the default list of operators in the code is a good place to start, and you can add more with -no <domain> (repeatable) or -nofile <path> (one operator domain per line).

Providers register a client_id with the subnet, and are paid inside their NO's pool by Merkle claim against that NO's payout root. A provider whose routable‑IP breadth ranks among the network's top ~200 fleets can claim its own top‑level miner UID and be paid directly by validator emission steering — no pool, no operator in the payout path. It links its client_ids to its wallet/hotkey with a dual‑signed binding so validators can attribute its measured breadth to that slot. See WHITEPAPER.md §8.4 and §11.4.

Register a validator

Validators stake their own α, run the VALIDATOR.md routing‑verification protocol (walking provider chains to measure quality and routable‑IP breadth), and each tempo score both miner tiers under commit‑reveal — the pools by implied_usage × quality and the head by routable‑IP breadth. Validators earn Bittensor‑native dividends (∝ stake × scoring accuracy) — v1's only validator reward. No NO owns a validator; the set is permissionless and Bittensor‑native.

The epoch lifecycle (a block is the 7‑day settlement epoch, ≈ 50 400 chain blocks):

WhenWhat
t = 0A keeper calls closeOperatorEpoch; the vault captures that NO's pool emission at the boundary.
t ≤ +4hEach NO commits its payout‑list root for the epoch.
t < +48hAudit window — committed roots and content-addressed payout artifacts are public and reproducible.
+48hfinalizeOperatorEpoch: the vault fixes the per‑NO entitlement and claims open.

Top‑level miners need no settlement — Yuma pays their UID natively each tempo.


One mechanism, two scoring channels

Release 1.0 fixes mechanism_count = 1. Pool UIDs and direct head UIDs share one native weight vector; validators normalize the head to θ and the pool tail to 1−θ before CRv4 commit. A second sub-mechanism is explicitly out of scope because it would partition the finite UID budget and undermine the intended ~200-member head.


Repository layout

PathWhat
WHITEPAPER.mdThe full subnet specification.
VALIDATOR.mdThe off‑chain routing‑verification (/verify) protocol.
COMPARISON.mdDesign‑decision comparison versus the Bittensor field.
diagrams/The diagrams above (SVG sources + generators).
evm/Reserve sink, settlement vault, UUPS coordinator, tests, and generated artifacts.
validator/The validator binary.
miner/, cli/Release miner/operator tooling.
stctl/Explicitly quarantined pre-1.0 monolith diagnostic; not a release write path.
crv4/, merkle/, ss58/, stabi/Supporting libraries (commit‑reveal v4, Merkle trees, address encoding, contract bindings).
sim-testnet/Spend-capped Go harness for testnet setup, launch, scenarios, evidence, and analysis.

About

Bittensor Subnet

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

UR Subnet

A Bittensor subnet for a decentralized privacy network.

This repository (sn) is the reference implementation of the UR Subnet — the EVM contract suite, miner and validator software, chain tooling, and the real-testnet integration harness. The operator/API implementation lives in the sibling server repository.

Network Operators run the servers. Independent providers carry ingress/egress traffic. Independent validators run the VALIDATOR.md routing‑verification protocol — walking server‑assigned chains of providers to prove real‑time transit and measure which providers are the weakest links. Bittensor's Yuma Consensus turns that measurement into emission. Everything is denominated in the subnet's native token — α, branded $UR.

The full specification is in WHITEPAPER.md; the design rationale versus the rest of the Bittensor field is in COMPARISON.md.


Mechanism at a glance

UR Subnet — mechanism at a glance

Money flows in three coupled channels, all in α:

  1. Deposits — the demand signal, conviction stake, and a buyback. Each NO deposits α through the coordinator, sized to its real usage at an off‑chain published rate (no on‑chain oracle). Deposits are the costly signal of real demand — and they are never distributed: every exact deposit is transferred into the immutable STReserveSink and staked on the fixed reserve hotkey (compounding dividends, with no outbound bytecode). A NO's cumulative locked α (its conviction) sets its tier → rate: zero conviction pays the baseline rate; more conviction lowers it — the onboarding and alignment lever.

  2. Emission (Yuma Consensus). The Bittensor coinbase pays the standard 18% owner / 41% miner / 41% validator α split. Each tempo (~72 min), independent validators score both miner tiers from their own trails, submit weights under commit‑reveal, and Yuma's stake‑weighted median + clipping + vtrust turns those scores into miner emission — so the validators' evaluation is what moves the money. Validator emission flows natively (∝ stake × vtrust).

  3. Settlement (7‑day epoch). Over each epoch the immutable settlement vault captures pool miner emission and providers claim their α directly from the vault with cryptographic proofs. A NO directs where its pool's rewards go but never holds anyone else's funds.

Two miner tiers, in parallel

Because one NO may serve 100k+ providers — far beyond a subnet's ~256 UID cap — the miner side runs two tiers inside one mechanism, divided by a governance share θ:

  • Pool tier (tail, 1−θ) — the on‑ramp. Each NO is a single vault‑owned pool UID; validators weight it implied_usage × quality (implied usage = the NO's deposit ÷ its tier rate). Its providers are not UIDs — they are paid inside the pool by Merkle claim. Low provider barrier (join a NO; the provider needs no UID or burn because the immutable vault owns one shared, burn-registered pool UID per NO), baseline reward.
  • Top‑level miners (head, θ) — the supply apex. The top ~200 fleets by split‑adjusted distinct routable egress‑IP count (real VPN supply breadth, not traffic volume) each claim their own miner UID, are steered directly by validators, and are paid natively to their own hotkey — no contract custody, no Merkle claim, no operator in the payout path. A fleet is matched to its UID by a dual‑signed client_ids ⇄ hotkey binding.

A provider starts in a pool, graduates to a top slot as its routable‑IP breadth grows, and falls back if it slips — with Bittensor's native deregistration churn running that tournament. A client_id earns in exactly one tier at a time (no double‑pay). Start tail‑weighted (θ ≈ 0.3) and widen it as the top‑miner set and validator consensus mature.

Custody and trust model

  • No operator custody. The owner and NOs never hold or distribute anyone else's α. The immutable vault is the sole custodian of in‑transit pool emission; every payout is a direct on‑chain pull claim; the head is paid natively.
  • Finalized claims are sacrosanct from day one — no upgrade, pause, or admin action can block or claw back a finalized claim.
  • The buyback reserve is one‑way — no contract function ever sources a transfer out of it.
  • Split governance.STReserveSink and STSettlementVault are non-upgradeable from launch. Only STCoordinator is UUPS-upgradeable: testnet uses a dedicated value-capped owner, while mainnet requires a distinct 2-of-3 Safe, followed by a ≥1-epoch timelock.

How this compares to the Bittensor field

The UR Subnet follows the Bittensor core almost everywhere and diverges only deliberately. Of the major design decisions, 12 are aligned with prevailing practice, 2 are divergent (reward settlement/custody and the worker‑payout trust model — both toward trustlessness), and 2 are genuinely novel bets: coupling miner reward to real, revenue‑backed demand (implied_usage × quality) and tiering miners into a trust‑minimized pooled tail plus a directly‑paid head.

UR Subnet vs. the Bittensor norm — design‑decision alignment matrix

Full analysis, per‑theme and per‑subnet, is in COMPARISON.md.


Participate

Register a network operator

Register a network‑operator key, then run the /verify server and deposit α. See the provider/operator documentation at https://ur.xyz. Operators register a client_id with the subnet used for root contracts, so they can independently audit their contracts. In the launch phase, operator admission is owner‑gated.

Each epoch, an NO commits the Merkle payout root that splits its pool among its providers. It directs the split; the immutable vault holds and pays.

Register a provider (ingress or egress)

Follow the provider documentation at https://ur.xyz. Providers work with network operators — the default list of operators in the code is a good place to start, and you can add more with -no <domain> (repeatable) or -nofile <path> (one operator domain per line).

Providers register a client_id with the subnet, and are paid inside their NO's pool by Merkle claim against that NO's payout root. A provider whose routable‑IP breadth ranks among the network's top ~200 fleets can claim its own top‑level miner UID and be paid directly by validator emission steering — no pool, no operator in the payout path. It links its client_ids to its wallet/hotkey with a dual‑signed binding so validators can attribute its measured breadth to that slot. See WHITEPAPER.md §8.4 and §11.4.

Register a validator

Validators stake their own α, run the VALIDATOR.md routing‑verification protocol (walking provider chains to measure quality and routable‑IP breadth), and each tempo score both miner tiers under commit‑reveal — the pools by implied_usage × quality and the head by routable‑IP breadth. Validators earn Bittensor‑native dividends (∝ stake × scoring accuracy) — v1's only validator reward. No NO owns a validator; the set is permissionless and Bittensor‑native.

The epoch lifecycle (a block is the 7‑day settlement epoch, ≈ 50 400 chain blocks):

WhenWhat
t = 0A keeper calls closeOperatorEpoch; the vault captures that NO's pool emission at the boundary.
t ≤ +4hEach NO commits its payout‑list root for the epoch.
t < +48hAudit window — committed roots and content-addressed payout artifacts are public and reproducible.
+48hfinalizeOperatorEpoch: the vault fixes the per‑NO entitlement and claims open.

Top‑level miners need no settlement — Yuma pays their UID natively each tempo.


One mechanism, two scoring channels

Release 1.0 fixes mechanism_count = 1. Pool UIDs and direct head UIDs share one native weight vector; validators normalize the head to θ and the pool tail to 1−θ before CRv4 commit. A second sub-mechanism is explicitly out of scope because it would partition the finite UID budget and undermine the intended ~200-member head.


Repository layout

PathWhat
WHITEPAPER.mdThe full subnet specification.
VALIDATOR.mdThe off‑chain routing‑verification (/verify) protocol.
COMPARISON.mdDesign‑decision comparison versus the Bittensor field.
diagrams/The diagrams above (SVG sources + generators).
evm/Reserve sink, settlement vault, UUPS coordinator, tests, and generated artifacts.
validator/The validator binary.
miner/, cli/Release miner/operator tooling.
stctl/Explicitly quarantined pre-1.0 monolith diagnostic; not a release write path.
crv4/, merkle/, ss58/, stabi/Supporting libraries (commit‑reveal v4, Merkle trees, address encoding, contract bindings).
sim-testnet/Spend-capped Go harness for testnet setup, launch, scenarios, evidence, and analysis.

About

Bittensor Subnet

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UR Subnet

A Bittensor subnet for a decentralized privacy network.

This repository (sn) is the reference implementation of the UR Subnet — the EVM contract suite, miner and validator software, chain tooling, and the real-testnet integration harness. The operator/API implementation lives in the sibling server repository.

Network Operators run the servers. Independent providers carry ingress/egress traffic. Independent validators run the VALIDATOR.md routing‑verification protocol — walking server‑assigned chains of providers to prove real‑time transit and measure which providers are the weakest links. Bittensor's Yuma Consensus turns that measurement into emission. Everything is denominated in the subnet's native token — α, branded $UR.

The full specification is in WHITEPAPER.md; the design rationale versus the rest of the Bittensor field is in COMPARISON.md.


Mechanism at a glance

UR Subnet — mechanism at a glance

Money flows in three coupled channels, all in α:

  1. Deposits — the demand signal, conviction stake, and a buyback. Each NO deposits α through the coordinator, sized to its real usage at an off‑chain published rate (no on‑chain oracle). Deposits are the costly signal of real demand — and they are never distributed: every exact deposit is transferred into the immutable STReserveSink and staked on the fixed reserve hotkey (compounding dividends, with no outbound bytecode). A NO's cumulative locked α (its conviction) sets its tier → rate: zero conviction pays the baseline rate; more conviction lowers it — the onboarding and alignment lever.

  2. Emission (Yuma Consensus). The Bittensor coinbase pays the standard 18% owner / 41% miner / 41% validator α split. Each tempo (~72 min), independent validators score both miner tiers from their own trails, submit weights under commit‑reveal, and Yuma's stake‑weighted median + clipping + vtrust turns those scores into miner emission — so the validators' evaluation is what moves the money. Validator emission flows natively (∝ stake × vtrust).

  3. Settlement (7‑day epoch). Over each epoch the immutable settlement vault captures pool miner emission and providers claim their α directly from the vault with cryptographic proofs. A NO directs where its pool's rewards go but never holds anyone else's funds.

Two miner tiers, in parallel

Because one NO may serve 100k+ providers — far beyond a subnet's ~256 UID cap — the miner side runs two tiers inside one mechanism, divided by a governance share θ:

  • Pool tier (tail, 1−θ) — the on‑ramp. Each NO is a single vault‑owned pool UID; validators weight it implied_usage × quality (implied usage = the NO's deposit ÷ its tier rate). Its providers are not UIDs — they are paid inside the pool by Merkle claim. Low provider barrier (join a NO; the provider needs no UID or burn because the immutable vault owns one shared, burn-registered pool UID per NO), baseline reward.
  • Top‑level miners (head, θ) — the supply apex. The top ~200 fleets by split‑adjusted distinct routable egress‑IP count (real VPN supply breadth, not traffic volume) each claim their own miner UID, are steered directly by validators, and are paid natively to their own hotkey — no contract custody, no Merkle claim, no operator in the payout path. A fleet is matched to its UID by a dual‑signed client_ids ⇄ hotkey binding.

A provider starts in a pool, graduates to a top slot as its routable‑IP breadth grows, and falls back if it slips — with Bittensor's native deregistration churn running that tournament. A client_id earns in exactly one tier at a time (no double‑pay). Start tail‑weighted (θ ≈ 0.3) and widen it as the top‑miner set and validator consensus mature.

Custody and trust model

  • No operator custody. The owner and NOs never hold or distribute anyone else's α. The immutable vault is the sole custodian of in‑transit pool emission; every payout is a direct on‑chain pull claim; the head is paid natively.
  • Finalized claims are sacrosanct from day one — no upgrade, pause, or admin action can block or claw back a finalized claim.
  • The buyback reserve is one‑way — no contract function ever sources a transfer out of it.
  • Split governance.STReserveSink and STSettlementVault are non-upgradeable from launch. Only STCoordinator is UUPS-upgradeable: testnet uses a dedicated value-capped owner, while mainnet requires a distinct 2-of-3 Safe, followed by a ≥1-epoch timelock.

How this compares to the Bittensor field

The UR Subnet follows the Bittensor core almost everywhere and diverges only deliberately. Of the major design decisions, 12 are aligned with prevailing practice, 2 are divergent (reward settlement/custody and the worker‑payout trust model — both toward trustlessness), and 2 are genuinely novel bets: coupling miner reward to real, revenue‑backed demand (implied_usage × quality) and tiering miners into a trust‑minimized pooled tail plus a directly‑paid head.

UR Subnet vs. the Bittensor norm — design‑decision alignment matrix

Full analysis, per‑theme and per‑subnet, is in COMPARISON.md.


Participate

Register a network operator

Register a network‑operator key, then run the /verify server and deposit α. See the provider/operator documentation at https://ur.xyz. Operators register a client_id with the subnet used for root contracts, so they can independently audit their contracts. In the launch phase, operator admission is owner‑gated.

Each epoch, an NO commits the Merkle payout root that splits its pool among its providers. It directs the split; the immutable vault holds and pays.

Register a provider (ingress or egress)

Follow the provider documentation at https://ur.xyz. Providers work with network operators — the default list of operators in the code is a good place to start, and you can add more with -no <domain> (repeatable) or -nofile <path> (one operator domain per line).

Providers register a client_id with the subnet, and are paid inside their NO's pool by Merkle claim against that NO's payout root. A provider whose routable‑IP breadth ranks among the network's top ~200 fleets can claim its own top‑level miner UID and be paid directly by validator emission steering — no pool, no operator in the payout path. It links its client_ids to its wallet/hotkey with a dual‑signed binding so validators can attribute its measured breadth to that slot. See WHITEPAPER.md §8.4 and §11.4.

Register a validator

Validators stake their own α, run the VALIDATOR.md routing‑verification protocol (walking provider chains to measure quality and routable‑IP breadth), and each tempo score both miner tiers under commit‑reveal — the pools by implied_usage × quality and the head by routable‑IP breadth. Validators earn Bittensor‑native dividends (∝ stake × scoring accuracy) — v1's only validator reward. No NO owns a validator; the set is permissionless and Bittensor‑native.

The epoch lifecycle (a block is the 7‑day settlement epoch, ≈ 50 400 chain blocks):

WhenWhat
t = 0A keeper calls closeOperatorEpoch; the vault captures that NO's pool emission at the boundary.
t ≤ +4hEach NO commits its payout‑list root for the epoch.
t < +48hAudit window — committed roots and content-addressed payout artifacts are public and reproducible.
+48hfinalizeOperatorEpoch: the vault fixes the per‑NO entitlement and claims open.

Top‑level miners need no settlement — Yuma pays their UID natively each tempo.


One mechanism, two scoring channels

Release 1.0 fixes mechanism_count = 1. Pool UIDs and direct head UIDs share one native weight vector; validators normalize the head to θ and the pool tail to 1−θ before CRv4 commit. A second sub-mechanism is explicitly out of scope because it would partition the finite UID budget and undermine the intended ~200-member head.


Repository layout

PathWhat
WHITEPAPER.mdThe full subnet specification.
VALIDATOR.mdThe off‑chain routing‑verification (/verify) protocol.
COMPARISON.mdDesign‑decision comparison versus the Bittensor field.
diagrams/The diagrams above (SVG sources + generators).
evm/Reserve sink, settlement vault, UUPS coordinator, tests, and generated artifacts.
validator/The validator binary.
miner/, cli/Release miner/operator tooling.
stctl/Explicitly quarantined pre-1.0 monolith diagnostic; not a release write path.
crv4/, merkle/, ss58/, stabi/Supporting libraries (commit‑reveal v4, Merkle trees, address encoding, contract bindings).
sim-testnet/Spend-capped Go harness for testnet setup, launch, scenarios, evidence, and analysis.

About

Bittensor Subnet

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UR Subnet

A Bittensor subnet for a decentralized privacy network.

This repository (sn) is the reference implementation of the UR Subnet — the EVM contract suite, miner and validator software, chain tooling, and the real-testnet integration harness. The operator/API implementation lives in the sibling server repository.

Network Operators run the servers. Independent providers carry ingress/egress traffic. Independent validators run the VALIDATOR.md routing‑verification protocol — walking server‑assigned chains of providers to prove real‑time transit and measure which providers are the weakest links. Bittensor's Yuma Consensus turns that measurement into emission. Everything is denominated in the subnet's native token — α, branded $UR.

The full specification is in WHITEPAPER.md; the design rationale versus the rest of the Bittensor field is in COMPARISON.md.


Mechanism at a glance

UR Subnet — mechanism at a glance

Money flows in three coupled channels, all in α:

  1. Deposits — the demand signal, conviction stake, and a buyback. Each NO deposits α through the coordinator, sized to its real usage at an off‑chain published rate (no on‑chain oracle). Deposits are the costly signal of real demand — and they are never distributed: every exact deposit is transferred into the immutable STReserveSink and staked on the fixed reserve hotkey (compounding dividends, with no outbound bytecode). A NO's cumulative locked α (its conviction) sets its tier → rate: zero conviction pays the baseline rate; more conviction lowers it — the onboarding and alignment lever.

  2. Emission (Yuma Consensus). The Bittensor coinbase pays the standard 18% owner / 41% miner / 41% validator α split. Each tempo (~72 min), independent validators score both miner tiers from their own trails, submit weights under commit‑reveal, and Yuma's stake‑weighted median + clipping + vtrust turns those scores into miner emission — so the validators' evaluation is what moves the money. Validator emission flows natively (∝ stake × vtrust).

  3. Settlement (7‑day epoch). Over each epoch the immutable settlement vault captures pool miner emission and providers claim their α directly from the vault with cryptographic proofs. A NO directs where its pool's rewards go but never holds anyone else's funds.

Two miner tiers, in parallel

Because one NO may serve 100k+ providers — far beyond a subnet's ~256 UID cap — the miner side runs two tiers inside one mechanism, divided by a governance share θ:

  • Pool tier (tail, 1−θ) — the on‑ramp. Each NO is a single vault‑owned pool UID; validators weight it implied_usage × quality (implied usage = the NO's deposit ÷ its tier rate). Its providers are not UIDs — they are paid inside the pool by Merkle claim. Low provider barrier (join a NO; the provider needs no UID or burn because the immutable vault owns one shared, burn-registered pool UID per NO), baseline reward.
  • Top‑level miners (head, θ) — the supply apex. The top ~200 fleets by split‑adjusted distinct routable egress‑IP count (real VPN supply breadth, not traffic volume) each claim their own miner UID, are steered directly by validators, and are paid natively to their own hotkey — no contract custody, no Merkle claim, no operator in the payout path. A fleet is matched to its UID by a dual‑signed client_ids ⇄ hotkey binding.

A provider starts in a pool, graduates to a top slot as its routable‑IP breadth grows, and falls back if it slips — with Bittensor's native deregistration churn running that tournament. A client_id earns in exactly one tier at a time (no double‑pay). Start tail‑weighted (θ ≈ 0.3) and widen it as the top‑miner set and validator consensus mature.

Custody and trust model

  • No operator custody. The owner and NOs never hold or distribute anyone else's α. The immutable vault is the sole custodian of in‑transit pool emission; every payout is a direct on‑chain pull claim; the head is paid natively.
  • Finalized claims are sacrosanct from day one — no upgrade, pause, or admin action can block or claw back a finalized claim.
  • The buyback reserve is one‑way — no contract function ever sources a transfer out of it.
  • Split governance.STReserveSink and STSettlementVault are non-upgradeable from launch. Only STCoordinator is UUPS-upgradeable: testnet uses a dedicated value-capped owner, while mainnet requires a distinct 2-of-3 Safe, followed by a ≥1-epoch timelock.

How this compares to the Bittensor field

The UR Subnet follows the Bittensor core almost everywhere and diverges only deliberately. Of the major design decisions, 12 are aligned with prevailing practice, 2 are divergent (reward settlement/custody and the worker‑payout trust model — both toward trustlessness), and 2 are genuinely novel bets: coupling miner reward to real, revenue‑backed demand (implied_usage × quality) and tiering miners into a trust‑minimized pooled tail plus a directly‑paid head.

UR Subnet vs. the Bittensor norm — design‑decision alignment matrix

Full analysis, per‑theme and per‑subnet, is in COMPARISON.md.


Participate

Register a network operator

Register a network‑operator key, then run the /verify server and deposit α. See the provider/operator documentation at https://ur.xyz. Operators register a client_id with the subnet used for root contracts, so they can independently audit their contracts. In the launch phase, operator admission is owner‑gated.

Each epoch, an NO commits the Merkle payout root that splits its pool among its providers. It directs the split; the immutable vault holds and pays.

Register a provider (ingress or egress)

Follow the provider documentation at https://ur.xyz. Providers work with network operators — the default list of operators in the code is a good place to start, and you can add more with -no <domain> (repeatable) or -nofile <path> (one operator domain per line).

Providers register a client_id with the subnet, and are paid inside their NO's pool by Merkle claim against that NO's payout root. A provider whose routable‑IP breadth ranks among the network's top ~200 fleets can claim its own top‑level miner UID and be paid directly by validator emission steering — no pool, no operator in the payout path. It links its client_ids to its wallet/hotkey with a dual‑signed binding so validators can attribute its measured breadth to that slot. See WHITEPAPER.md §8.4 and §11.4.

Register a validator

Validators stake their own α, run the VALIDATOR.md routing‑verification protocol (walking provider chains to measure quality and routable‑IP breadth), and each tempo score both miner tiers under commit‑reveal — the pools by implied_usage × quality and the head by routable‑IP breadth. Validators earn Bittensor‑native dividends (∝ stake × scoring accuracy) — v1's only validator reward. No NO owns a validator; the set is permissionless and Bittensor‑native.

The epoch lifecycle (a block is the 7‑day settlement epoch, ≈ 50 400 chain blocks):

WhenWhat
t = 0A keeper calls closeOperatorEpoch; the vault captures that NO's pool emission at the boundary.
t ≤ +4hEach NO commits its payout‑list root for the epoch.
t < +48hAudit window — committed roots and content-addressed payout artifacts are public and reproducible.
+48hfinalizeOperatorEpoch: the vault fixes the per‑NO entitlement and claims open.

Top‑level miners need no settlement — Yuma pays their UID natively each tempo.


One mechanism, two scoring channels

Release 1.0 fixes mechanism_count = 1. Pool UIDs and direct head UIDs share one native weight vector; validators normalize the head to θ and the pool tail to 1−θ before CRv4 commit. A second sub-mechanism is explicitly out of scope because it would partition the finite UID budget and undermine the intended ~200-member head.


Repository layout

PathWhat
WHITEPAPER.mdThe full subnet specification.
VALIDATOR.mdThe off‑chain routing‑verification (/verify) protocol.
COMPARISON.mdDesign‑decision comparison versus the Bittensor field.
diagrams/The diagrams above (SVG sources + generators).
evm/Reserve sink, settlement vault, UUPS coordinator, tests, and generated artifacts.
validator/The validator binary.
miner/, cli/Release miner/operator tooling.
stctl/Explicitly quarantined pre-1.0 monolith diagnostic; not a release write path.
crv4/, merkle/, ss58/, stabi/Supporting libraries (commit‑reveal v4, Merkle trees, address encoding, contract bindings).
sim-testnet/Spend-capped Go harness for testnet setup, launch, scenarios, evidence, and analysis.

About

Bittensor Subnet

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

UR Subnet

A Bittensor subnet for a decentralized privacy network.

This repository (sn) is the reference implementation of the UR Subnet — the EVM contract suite, miner and validator software, chain tooling, and the real-testnet integration harness. The operator/API implementation lives in the sibling server repository.

Network Operators run the servers. Independent providers carry ingress/egress traffic. Independent validators run the VALIDATOR.md routing‑verification protocol — walking server‑assigned chains of providers to prove real‑time transit and measure which providers are the weakest links. Bittensor's Yuma Consensus turns that measurement into emission. Everything is denominated in the subnet's native token — α, branded $UR.

The full specification is in WHITEPAPER.md; the design rationale versus the rest of the Bittensor field is in COMPARISON.md.


Mechanism at a glance

UR Subnet — mechanism at a glance

Money flows in three coupled channels, all in α:

  1. Deposits — the demand signal, conviction stake, and a buyback. Each NO deposits α through the coordinator, sized to its real usage at an off‑chain published rate (no on‑chain oracle). Deposits are the costly signal of real demand — and they are never distributed: every exact deposit is transferred into the immutable STReserveSink and staked on the fixed reserve hotkey (compounding dividends, with no outbound bytecode). A NO's cumulative locked α (its conviction) sets its tier → rate: zero conviction pays the baseline rate; more conviction lowers it — the onboarding and alignment lever.

  2. Emission (Yuma Consensus). The Bittensor coinbase pays the standard 18% owner / 41% miner / 41% validator α split. Each tempo (~72 min), independent validators score both miner tiers from their own trails, submit weights under commit‑reveal, and Yuma's stake‑weighted median + clipping + vtrust turns those scores into miner emission — so the validators' evaluation is what moves the money. Validator emission flows natively (∝ stake × vtrust).

  3. Settlement (7‑day epoch). Over each epoch the immutable settlement vault captures pool miner emission and providers claim their α directly from the vault with cryptographic proofs. A NO directs where its pool's rewards go but never holds anyone else's funds.

Two miner tiers, in parallel

Because one NO may serve 100k+ providers — far beyond a subnet's ~256 UID cap — the miner side runs two tiers inside one mechanism, divided by a governance share θ:

  • Pool tier (tail, 1−θ) — the on‑ramp. Each NO is a single vault‑owned pool UID; validators weight it implied_usage × quality (implied usage = the NO's deposit ÷ its tier rate). Its providers are not UIDs — they are paid inside the pool by Merkle claim. Low provider barrier (join a NO; the provider needs no UID or burn because the immutable vault owns one shared, burn-registered pool UID per NO), baseline reward.
  • Top‑level miners (head, θ) — the supply apex. The top ~200 fleets by split‑adjusted distinct routable egress‑IP count (real VPN supply breadth, not traffic volume) each claim their own miner UID, are steered directly by validators, and are paid natively to their own hotkey — no contract custody, no Merkle claim, no operator in the payout path. A fleet is matched to its UID by a dual‑signed client_ids ⇄ hotkey binding.

A provider starts in a pool, graduates to a top slot as its routable‑IP breadth grows, and falls back if it slips — with Bittensor's native deregistration churn running that tournament. A client_id earns in exactly one tier at a time (no double‑pay). Start tail‑weighted (θ ≈ 0.3) and widen it as the top‑miner set and validator consensus mature.

Custody and trust model

  • No operator custody. The owner and NOs never hold or distribute anyone else's α. The immutable vault is the sole custodian of in‑transit pool emission; every payout is a direct on‑chain pull claim; the head is paid natively.
  • Finalized claims are sacrosanct from day one — no upgrade, pause, or admin action can block or claw back a finalized claim.
  • The buyback reserve is one‑way — no contract function ever sources a transfer out of it.
  • Split governance.STReserveSink and STSettlementVault are non-upgradeable from launch. Only STCoordinator is UUPS-upgradeable: testnet uses a dedicated value-capped owner, while mainnet requires a distinct 2-of-3 Safe, followed by a ≥1-epoch timelock.

How this compares to the Bittensor field

The UR Subnet follows the Bittensor core almost everywhere and diverges only deliberately. Of the major design decisions, 12 are aligned with prevailing practice, 2 are divergent (reward settlement/custody and the worker‑payout trust model — both toward trustlessness), and 2 are genuinely novel bets: coupling miner reward to real, revenue‑backed demand (implied_usage × quality) and tiering miners into a trust‑minimized pooled tail plus a directly‑paid head.

UR Subnet vs. the Bittensor norm — design‑decision alignment matrix

Full analysis, per‑theme and per‑subnet, is in COMPARISON.md.


Participate

Register a network operator

Register a network‑operator key, then run the /verify server and deposit α. See the provider/operator documentation at https://ur.xyz. Operators register a client_id with the subnet used for root contracts, so they can independently audit their contracts. In the launch phase, operator admission is owner‑gated.

Each epoch, an NO commits the Merkle payout root that splits its pool among its providers. It directs the split; the immutable vault holds and pays.

Register a provider (ingress or egress)

Follow the provider documentation at https://ur.xyz. Providers work with network operators — the default list of operators in the code is a good place to start, and you can add more with -no <domain> (repeatable) or -nofile <path> (one operator domain per line).

Providers register a client_id with the subnet, and are paid inside their NO's pool by Merkle claim against that NO's payout root. A provider whose routable‑IP breadth ranks among the network's top ~200 fleets can claim its own top‑level miner UID and be paid directly by validator emission steering — no pool, no operator in the payout path. It links its client_ids to its wallet/hotkey with a dual‑signed binding so validators can attribute its measured breadth to that slot. See WHITEPAPER.md §8.4 and §11.4.

Register a validator

Validators stake their own α, run the VALIDATOR.md routing‑verification protocol (walking provider chains to measure quality and routable‑IP breadth), and each tempo score both miner tiers under commit‑reveal — the pools by implied_usage × quality and the head by routable‑IP breadth. Validators earn Bittensor‑native dividends (∝ stake × scoring accuracy) — v1's only validator reward. No NO owns a validator; the set is permissionless and Bittensor‑native.

The epoch lifecycle (a block is the 7‑day settlement epoch, ≈ 50 400 chain blocks):

WhenWhat
t = 0A keeper calls closeOperatorEpoch; the vault captures that NO's pool emission at the boundary.
t ≤ +4hEach NO commits its payout‑list root for the epoch.
t < +48hAudit window — committed roots and content-addressed payout artifacts are public and reproducible.
+48hfinalizeOperatorEpoch: the vault fixes the per‑NO entitlement and claims open.

Top‑level miners need no settlement — Yuma pays their UID natively each tempo.


One mechanism, two scoring channels

Release 1.0 fixes mechanism_count = 1. Pool UIDs and direct head UIDs share one native weight vector; validators normalize the head to θ and the pool tail to 1−θ before CRv4 commit. A second sub-mechanism is explicitly out of scope because it would partition the finite UID budget and undermine the intended ~200-member head.


Repository layout

PathWhat
WHITEPAPER.mdThe full subnet specification.
VALIDATOR.mdThe off‑chain routing‑verification (/verify) protocol.
COMPARISON.mdDesign‑decision comparison versus the Bittensor field.
diagrams/The diagrams above (SVG sources + generators).
evm/Reserve sink, settlement vault, UUPS coordinator, tests, and generated artifacts.
validator/The validator binary.
miner/, cli/Release miner/operator tooling.
stctl/Explicitly quarantined pre-1.0 monolith diagnostic; not a release write path.
crv4/, merkle/, ss58/, stabi/Supporting libraries (commit‑reveal v4, Merkle trees, address encoding, contract bindings).
sim-testnet/Spend-capped Go harness for testnet setup, launch, scenarios, evidence, and analysis.

About

Bittensor Subnet

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UR Subnet

A Bittensor subnet for a decentralized privacy network.

This repository (sn) is the reference implementation of the UR Subnet — the EVM contract suite, miner and validator software, chain tooling, and the real-testnet integration harness. The operator/API implementation lives in the sibling server repository.

Network Operators run the servers. Independent providers carry ingress/egress traffic. Independent validators run the VALIDATOR.md routing‑verification protocol — walking server‑assigned chains of providers to prove real‑time transit and measure which providers are the weakest links. Bittensor's Yuma Consensus turns that measurement into emission. Everything is denominated in the subnet's native token — α, branded $UR.

The full specification is in WHITEPAPER.md; the design rationale versus the rest of the Bittensor field is in COMPARISON.md.


Mechanism at a glance

UR Subnet — mechanism at a glance

Money flows in three coupled channels, all in α:

  1. Deposits — the demand signal, conviction stake, and a buyback. Each NO deposits α through the coordinator, sized to its real usage at an off‑chain published rate (no on‑chain oracle). Deposits are the costly signal of real demand — and they are never distributed: every exact deposit is transferred into the immutable STReserveSink and staked on the fixed reserve hotkey (compounding dividends, with no outbound bytecode). A NO's cumulative locked α (its conviction) sets its tier → rate: zero conviction pays the baseline rate; more conviction lowers it — the onboarding and alignment lever.

  2. Emission (Yuma Consensus). The Bittensor coinbase pays the standard 18% owner / 41% miner / 41% validator α split. Each tempo (~72 min), independent validators score both miner tiers from their own trails, submit weights under commit‑reveal, and Yuma's stake‑weighted median + clipping + vtrust turns those scores into miner emission — so the validators' evaluation is what moves the money. Validator emission flows natively (∝ stake × vtrust).

  3. Settlement (7‑day epoch). Over each epoch the immutable settlement vault captures pool miner emission and providers claim their α directly from the vault with cryptographic proofs. A NO directs where its pool's rewards go but never holds anyone else's funds.

Two miner tiers, in parallel

Because one NO may serve 100k+ providers — far beyond a subnet's ~256 UID cap — the miner side runs two tiers inside one mechanism, divided by a governance share θ:

  • Pool tier (tail, 1−θ) — the on‑ramp. Each NO is a single vault‑owned pool UID; validators weight it implied_usage × quality (implied usage = the NO's deposit ÷ its tier rate). Its providers are not UIDs — they are paid inside the pool by Merkle claim. Low provider barrier (join a NO; the provider needs no UID or burn because the immutable vault owns one shared, burn-registered pool UID per NO), baseline reward.
  • Top‑level miners (head, θ) — the supply apex. The top ~200 fleets by split‑adjusted distinct routable egress‑IP count (real VPN supply breadth, not traffic volume) each claim their own miner UID, are steered directly by validators, and are paid natively to their own hotkey — no contract custody, no Merkle claim, no operator in the payout path. A fleet is matched to its UID by a dual‑signed client_ids ⇄ hotkey binding.

A provider starts in a pool, graduates to a top slot as its routable‑IP breadth grows, and falls back if it slips — with Bittensor's native deregistration churn running that tournament. A client_id earns in exactly one tier at a time (no double‑pay). Start tail‑weighted (θ ≈ 0.3) and widen it as the top‑miner set and validator consensus mature.

Custody and trust model

  • No operator custody. The owner and NOs never hold or distribute anyone else's α. The immutable vault is the sole custodian of in‑transit pool emission; every payout is a direct on‑chain pull claim; the head is paid natively.
  • Finalized claims are sacrosanct from day one — no upgrade, pause, or admin action can block or claw back a finalized claim.
  • The buyback reserve is one‑way — no contract function ever sources a transfer out of it.
  • Split governance.STReserveSink and STSettlementVault are non-upgradeable from launch. Only STCoordinator is UUPS-upgradeable: testnet uses a dedicated value-capped owner, while mainnet requires a distinct 2-of-3 Safe, followed by a ≥1-epoch timelock.

How this compares to the Bittensor field

The UR Subnet follows the Bittensor core almost everywhere and diverges only deliberately. Of the major design decisions, 12 are aligned with prevailing practice, 2 are divergent (reward settlement/custody and the worker‑payout trust model — both toward trustlessness), and 2 are genuinely novel bets: coupling miner reward to real, revenue‑backed demand (implied_usage × quality) and tiering miners into a trust‑minimized pooled tail plus a directly‑paid head.

UR Subnet vs. the Bittensor norm — design‑decision alignment matrix

Full analysis, per‑theme and per‑subnet, is in COMPARISON.md.


Participate

Register a network operator

Register a network‑operator key, then run the /verify server and deposit α. See the provider/operator documentation at https://ur.xyz. Operators register a client_id with the subnet used for root contracts, so they can independently audit their contracts. In the launch phase, operator admission is owner‑gated.

Each epoch, an NO commits the Merkle payout root that splits its pool among its providers. It directs the split; the immutable vault holds and pays.

Register a provider (ingress or egress)

Follow the provider documentation at https://ur.xyz. Providers work with network operators — the default list of operators in the code is a good place to start, and you can add more with -no <domain> (repeatable) or -nofile <path> (one operator domain per line).

Providers register a client_id with the subnet, and are paid inside their NO's pool by Merkle claim against that NO's payout root. A provider whose routable‑IP breadth ranks among the network's top ~200 fleets can claim its own top‑level miner UID and be paid directly by validator emission steering — no pool, no operator in the payout path. It links its client_ids to its wallet/hotkey with a dual‑signed binding so validators can attribute its measured breadth to that slot. See WHITEPAPER.md §8.4 and §11.4.

Register a validator

Validators stake their own α, run the VALIDATOR.md routing‑verification protocol (walking provider chains to measure quality and routable‑IP breadth), and each tempo score both miner tiers under commit‑reveal — the pools by implied_usage × quality and the head by routable‑IP breadth. Validators earn Bittensor‑native dividends (∝ stake × scoring accuracy) — v1's only validator reward. No NO owns a validator; the set is permissionless and Bittensor‑native.

The epoch lifecycle (a block is the 7‑day settlement epoch, ≈ 50 400 chain blocks):

WhenWhat
t = 0A keeper calls closeOperatorEpoch; the vault captures that NO's pool emission at the boundary.
t ≤ +4hEach NO commits its payout‑list root for the epoch.
t < +48hAudit window — committed roots and content-addressed payout artifacts are public and reproducible.
+48hfinalizeOperatorEpoch: the vault fixes the per‑NO entitlement and claims open.

Top‑level miners need no settlement — Yuma pays their UID natively each tempo.


One mechanism, two scoring channels

Release 1.0 fixes mechanism_count = 1. Pool UIDs and direct head UIDs share one native weight vector; validators normalize the head to θ and the pool tail to 1−θ before CRv4 commit. A second sub-mechanism is explicitly out of scope because it would partition the finite UID budget and undermine the intended ~200-member head.


Repository layout

PathWhat
WHITEPAPER.mdThe full subnet specification.
VALIDATOR.mdThe off‑chain routing‑verification (/verify) protocol.
COMPARISON.mdDesign‑decision comparison versus the Bittensor field.
diagrams/The diagrams above (SVG sources + generators).
evm/Reserve sink, settlement vault, UUPS coordinator, tests, and generated artifacts.
validator/The validator binary.
miner/, cli/Release miner/operator tooling.
stctl/Explicitly quarantined pre-1.0 monolith diagnostic; not a release write path.
crv4/, merkle/, ss58/, stabi/Supporting libraries (commit‑reveal v4, Merkle trees, address encoding, contract bindings).
sim-testnet/Spend-capped Go harness for testnet setup, launch, scenarios, evidence, and analysis.

About

Bittensor Subnet

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UR Subnet

A Bittensor subnet for a decentralized privacy network.

This repository (sn) is the reference implementation of the UR Subnet — the EVM contract suite, miner and validator software, chain tooling, and the real-testnet integration harness. The operator/API implementation lives in the sibling server repository.

Network Operators run the servers. Independent providers carry ingress/egress traffic. Independent validators run the VALIDATOR.md routing‑verification protocol — walking server‑assigned chains of providers to prove real‑time transit and measure which providers are the weakest links. Bittensor's Yuma Consensus turns that measurement into emission. Everything is denominated in the subnet's native token — α, branded $UR.

The full specification is in WHITEPAPER.md; the design rationale versus the rest of the Bittensor field is in COMPARISON.md.


Mechanism at a glance

UR Subnet — mechanism at a glance

Money flows in three coupled channels, all in α:

  1. Deposits — the demand signal, conviction stake, and a buyback. Each NO deposits α through the coordinator, sized to its real usage at an off‑chain published rate (no on‑chain oracle). Deposits are the costly signal of real demand — and they are never distributed: every exact deposit is transferred into the immutable STReserveSink and staked on the fixed reserve hotkey (compounding dividends, with no outbound bytecode). A NO's cumulative locked α (its conviction) sets its tier → rate: zero conviction pays the baseline rate; more conviction lowers it — the onboarding and alignment lever.

  2. Emission (Yuma Consensus). The Bittensor coinbase pays the standard 18% owner / 41% miner / 41% validator α split. Each tempo (~72 min), independent validators score both miner tiers from their own trails, submit weights under commit‑reveal, and Yuma's stake‑weighted median + clipping + vtrust turns those scores into miner emission — so the validators' evaluation is what moves the money. Validator emission flows natively (∝ stake × vtrust).

  3. Settlement (7‑day epoch). Over each epoch the immutable settlement vault captures pool miner emission and providers claim their α directly from the vault with cryptographic proofs. A NO directs where its pool's rewards go but never holds anyone else's funds.

Two miner tiers, in parallel

Because one NO may serve 100k+ providers — far beyond a subnet's ~256 UID cap — the miner side runs two tiers inside one mechanism, divided by a governance share θ:

  • Pool tier (tail, 1−θ) — the on‑ramp. Each NO is a single vault‑owned pool UID; validators weight it implied_usage × quality (implied usage = the NO's deposit ÷ its tier rate). Its providers are not UIDs — they are paid inside the pool by Merkle claim. Low provider barrier (join a NO; the provider needs no UID or burn because the immutable vault owns one shared, burn-registered pool UID per NO), baseline reward.
  • Top‑level miners (head, θ) — the supply apex. The top ~200 fleets by split‑adjusted distinct routable egress‑IP count (real VPN supply breadth, not traffic volume) each claim their own miner UID, are steered directly by validators, and are paid natively to their own hotkey — no contract custody, no Merkle claim, no operator in the payout path. A fleet is matched to its UID by a dual‑signed client_ids ⇄ hotkey binding.

A provider starts in a pool, graduates to a top slot as its routable‑IP breadth grows, and falls back if it slips — with Bittensor's native deregistration churn running that tournament. A client_id earns in exactly one tier at a time (no double‑pay). Start tail‑weighted (θ ≈ 0.3) and widen it as the top‑miner set and validator consensus mature.

Custody and trust model

  • No operator custody. The owner and NOs never hold or distribute anyone else's α. The immutable vault is the sole custodian of in‑transit pool emission; every payout is a direct on‑chain pull claim; the head is paid natively.
  • Finalized claims are sacrosanct from day one — no upgrade, pause, or admin action can block or claw back a finalized claim.
  • The buyback reserve is one‑way — no contract function ever sources a transfer out of it.
  • Split governance.STReserveSink and STSettlementVault are non-upgradeable from launch. Only STCoordinator is UUPS-upgradeable: testnet uses a dedicated value-capped owner, while mainnet requires a distinct 2-of-3 Safe, followed by a ≥1-epoch timelock.

How this compares to the Bittensor field

The UR Subnet follows the Bittensor core almost everywhere and diverges only deliberately. Of the major design decisions, 12 are aligned with prevailing practice, 2 are divergent (reward settlement/custody and the worker‑payout trust model — both toward trustlessness), and 2 are genuinely novel bets: coupling miner reward to real, revenue‑backed demand (implied_usage × quality) and tiering miners into a trust‑minimized pooled tail plus a directly‑paid head.

UR Subnet vs. the Bittensor norm — design‑decision alignment matrix

Full analysis, per‑theme and per‑subnet, is in COMPARISON.md.


Participate

Register a network operator

Register a network‑operator key, then run the /verify server and deposit α. See the provider/operator documentation at https://ur.xyz. Operators register a client_id with the subnet used for root contracts, so they can independently audit their contracts. In the launch phase, operator admission is owner‑gated.

Each epoch, an NO commits the Merkle payout root that splits its pool among its providers. It directs the split; the immutable vault holds and pays.

Register a provider (ingress or egress)

Follow the provider documentation at https://ur.xyz. Providers work with network operators — the default list of operators in the code is a good place to start, and you can add more with -no <domain> (repeatable) or -nofile <path> (one operator domain per line).

Providers register a client_id with the subnet, and are paid inside their NO's pool by Merkle claim against that NO's payout root. A provider whose routable‑IP breadth ranks among the network's top ~200 fleets can claim its own top‑level miner UID and be paid directly by validator emission steering — no pool, no operator in the payout path. It links its client_ids to its wallet/hotkey with a dual‑signed binding so validators can attribute its measured breadth to that slot. See WHITEPAPER.md §8.4 and §11.4.

Register a validator

Validators stake their own α, run the VALIDATOR.md routing‑verification protocol (walking provider chains to measure quality and routable‑IP breadth), and each tempo score both miner tiers under commit‑reveal — the pools by implied_usage × quality and the head by routable‑IP breadth. Validators earn Bittensor‑native dividends (∝ stake × scoring accuracy) — v1's only validator reward. No NO owns a validator; the set is permissionless and Bittensor‑native.

The epoch lifecycle (a block is the 7‑day settlement epoch, ≈ 50 400 chain blocks):

WhenWhat
t = 0A keeper calls closeOperatorEpoch; the vault captures that NO's pool emission at the boundary.
t ≤ +4hEach NO commits its payout‑list root for the epoch.
t < +48hAudit window — committed roots and content-addressed payout artifacts are public and reproducible.
+48hfinalizeOperatorEpoch: the vault fixes the per‑NO entitlement and claims open.

Top‑level miners need no settlement — Yuma pays their UID natively each tempo.


One mechanism, two scoring channels

Release 1.0 fixes mechanism_count = 1. Pool UIDs and direct head UIDs share one native weight vector; validators normalize the head to θ and the pool tail to 1−θ before CRv4 commit. A second sub-mechanism is explicitly out of scope because it would partition the finite UID budget and undermine the intended ~200-member head.


Repository layout

PathWhat
WHITEPAPER.mdThe full subnet specification.
VALIDATOR.mdThe off‑chain routing‑verification (/verify) protocol.
COMPARISON.mdDesign‑decision comparison versus the Bittensor field.
diagrams/The diagrams above (SVG sources + generators).
evm/Reserve sink, settlement vault, UUPS coordinator, tests, and generated artifacts.
validator/The validator binary.
miner/, cli/Release miner/operator tooling.
stctl/Explicitly quarantined pre-1.0 monolith diagnostic; not a release write path.
crv4/, merkle/, ss58/, stabi/Supporting libraries (commit‑reveal v4, Merkle trees, address encoding, contract bindings).
sim-testnet/Spend-capped Go harness for testnet setup, launch, scenarios, evidence, and analysis.

About

Bittensor Subnet

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

UR Subnet

A Bittensor subnet for a decentralized privacy network.

This repository (sn) is the reference implementation of the UR Subnet — the EVM contract suite, miner and validator software, chain tooling, and the real-testnet integration harness. The operator/API implementation lives in the sibling server repository.

Network Operators run the servers. Independent providers carry ingress/egress traffic. Independent validators run the VALIDATOR.md routing‑verification protocol — walking server‑assigned chains of providers to prove real‑time transit and measure which providers are the weakest links. Bittensor's Yuma Consensus turns that measurement into emission. Everything is denominated in the subnet's native token — α, branded $UR.

The full specification is in WHITEPAPER.md; the design rationale versus the rest of the Bittensor field is in COMPARISON.md.


Mechanism at a glance

UR Subnet — mechanism at a glance

Money flows in three coupled channels, all in α:

  1. Deposits — the demand signal, conviction stake, and a buyback. Each NO deposits α through the coordinator, sized to its real usage at an off‑chain published rate (no on‑chain oracle). Deposits are the costly signal of real demand — and they are never distributed: every exact deposit is transferred into the immutable STReserveSink and staked on the fixed reserve hotkey (compounding dividends, with no outbound bytecode). A NO's cumulative locked α (its conviction) sets its tier → rate: zero conviction pays the baseline rate; more conviction lowers it — the onboarding and alignment lever.

  2. Emission (Yuma Consensus). The Bittensor coinbase pays the standard 18% owner / 41% miner / 41% validator α split. Each tempo (~72 min), independent validators score both miner tiers from their own trails, submit weights under commit‑reveal, and Yuma's stake‑weighted median + clipping + vtrust turns those scores into miner emission — so the validators' evaluation is what moves the money. Validator emission flows natively (∝ stake × vtrust).

  3. Settlement (7‑day epoch). Over each epoch the immutable settlement vault captures pool miner emission and providers claim their α directly from the vault with cryptographic proofs. A NO directs where its pool's rewards go but never holds anyone else's funds.

Two miner tiers, in parallel

Because one NO may serve 100k+ providers — far beyond a subnet's ~256 UID cap — the miner side runs two tiers inside one mechanism, divided by a governance share θ:

  • Pool tier (tail, 1−θ) — the on‑ramp. Each NO is a single vault‑owned pool UID; validators weight it implied_usage × quality (implied usage = the NO's deposit ÷ its tier rate). Its providers are not UIDs — they are paid inside the pool by Merkle claim. Low provider barrier (join a NO; the provider needs no UID or burn because the immutable vault owns one shared, burn-registered pool UID per NO), baseline reward.
  • Top‑level miners (head, θ) — the supply apex. The top ~200 fleets by split‑adjusted distinct routable egress‑IP count (real VPN supply breadth, not traffic volume) each claim their own miner UID, are steered directly by validators, and are paid natively to their own hotkey — no contract custody, no Merkle claim, no operator in the payout path. A fleet is matched to its UID by a dual‑signed client_ids ⇄ hotkey binding.

A provider starts in a pool, graduates to a top slot as its routable‑IP breadth grows, and falls back if it slips — with Bittensor's native deregistration churn running that tournament. A client_id earns in exactly one tier at a time (no double‑pay). Start tail‑weighted (θ ≈ 0.3) and widen it as the top‑miner set and validator consensus mature.

Custody and trust model

  • No operator custody. The owner and NOs never hold or distribute anyone else's α. The immutable vault is the sole custodian of in‑transit pool emission; every payout is a direct on‑chain pull claim; the head is paid natively.
  • Finalized claims are sacrosanct from day one — no upgrade, pause, or admin action can block or claw back a finalized claim.
  • The buyback reserve is one‑way — no contract function ever sources a transfer out of it.
  • Split governance.STReserveSink and STSettlementVault are non-upgradeable from launch. Only STCoordinator is UUPS-upgradeable: testnet uses a dedicated value-capped owner, while mainnet requires a distinct 2-of-3 Safe, followed by a ≥1-epoch timelock.

How this compares to the Bittensor field

The UR Subnet follows the Bittensor core almost everywhere and diverges only deliberately. Of the major design decisions, 12 are aligned with prevailing practice, 2 are divergent (reward settlement/custody and the worker‑payout trust model — both toward trustlessness), and 2 are genuinely novel bets: coupling miner reward to real, revenue‑backed demand (implied_usage × quality) and tiering miners into a trust‑minimized pooled tail plus a directly‑paid head.

UR Subnet vs. the Bittensor norm — design‑decision alignment matrix

Full analysis, per‑theme and per‑subnet, is in COMPARISON.md.


Participate

Register a network operator

Register a network‑operator key, then run the /verify server and deposit α. See the provider/operator documentation at https://ur.xyz. Operators register a client_id with the subnet used for root contracts, so they can independently audit their contracts. In the launch phase, operator admission is owner‑gated.

Each epoch, an NO commits the Merkle payout root that splits its pool among its providers. It directs the split; the immutable vault holds and pays.

Register a provider (ingress or egress)

Follow the provider documentation at https://ur.xyz. Providers work with network operators — the default list of operators in the code is a good place to start, and you can add more with -no <domain> (repeatable) or -nofile <path> (one operator domain per line).

Providers register a client_id with the subnet, and are paid inside their NO's pool by Merkle claim against that NO's payout root. A provider whose routable‑IP breadth ranks among the network's top ~200 fleets can claim its own top‑level miner UID and be paid directly by validator emission steering — no pool, no operator in the payout path. It links its client_ids to its wallet/hotkey with a dual‑signed binding so validators can attribute its measured breadth to that slot. See WHITEPAPER.md §8.4 and §11.4.

Register a validator

Validators stake their own α, run the VALIDATOR.md routing‑verification protocol (walking provider chains to measure quality and routable‑IP breadth), and each tempo score both miner tiers under commit‑reveal — the pools by implied_usage × quality and the head by routable‑IP breadth. Validators earn Bittensor‑native dividends (∝ stake × scoring accuracy) — v1's only validator reward. No NO owns a validator; the set is permissionless and Bittensor‑native.

The epoch lifecycle (a block is the 7‑day settlement epoch, ≈ 50 400 chain blocks):

WhenWhat
t = 0A keeper calls closeOperatorEpoch; the vault captures that NO's pool emission at the boundary.
t ≤ +4hEach NO commits its payout‑list root for the epoch.
t < +48hAudit window — committed roots and content-addressed payout artifacts are public and reproducible.
+48hfinalizeOperatorEpoch: the vault fixes the per‑NO entitlement and claims open.

Top‑level miners need no settlement — Yuma pays their UID natively each tempo.


One mechanism, two scoring channels

Release 1.0 fixes mechanism_count = 1. Pool UIDs and direct head UIDs share one native weight vector; validators normalize the head to θ and the pool tail to 1−θ before CRv4 commit. A second sub-mechanism is explicitly out of scope because it would partition the finite UID budget and undermine the intended ~200-member head.


Repository layout

PathWhat
WHITEPAPER.mdThe full subnet specification.
VALIDATOR.mdThe off‑chain routing‑verification (/verify) protocol.
COMPARISON.mdDesign‑decision comparison versus the Bittensor field.
diagrams/The diagrams above (SVG sources + generators).
evm/Reserve sink, settlement vault, UUPS coordinator, tests, and generated artifacts.
validator/The validator binary.
miner/, cli/Release miner/operator tooling.
stctl/Explicitly quarantined pre-1.0 monolith diagnostic; not a release write path.
crv4/, merkle/, ss58/, stabi/Supporting libraries (commit‑reveal v4, Merkle trees, address encoding, contract bindings).
sim-testnet/Spend-capped Go harness for testnet setup, launch, scenarios, evidence, and analysis.

About

Bittensor Subnet

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages