From c5ac1ce243e794fd714bd4682e625c8528c55da8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Sun, 29 Jun 2025 05:46:26 +0300 Subject: [PATCH 01/14] Create BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 125 +++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 bits/BIT-0009-Native-collateral-support.md diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md new file mode 100644 index 0000000..730fd3b --- /dev/null +++ b/bits/BIT-0009-Native-collateral-support.md @@ -0,0 +1,125 @@ +# BIT-0009: Native collateral support + +- **BIT Number:** 0009 +- **Title:** Native collateral support +- **Author(s):** Rhef +- **Discussions-to:** https://discord.com/channels/1120750674595024897/1309546649684672582 +- **Status:** Draft +- **Type:** Subtensor +- **Created:** 2025-06-29 +- **Updated:** 2025-06-29 +- **Requires:** - +- **Replaces:** - + +## Abstract + +A change in subtensor is being proposed to add a new storage map with a key of `(netuid, hotkey)` and a value of `collateral_in_tao`. +Miners will have an option to lock Tao and then they can also pay it out, unless the validators will vote (using a new system) to burn it. +Validators may choose to not send (paid) organic traffic to miners which refuse to provide a collateral. + +## Motivation + +Bittensor miners often try to cheat and the subnet owners have to spend time dealing with exploits, + which slows down subnet development. If cheating is disincentivized, subnets development should accelerate. + +## Specification + +There are a few technical details that still need to be figured out. Among them are: +- why `(netuid, hotkey)` and not `(netuid, uid)`? +- when and how miners can reclaim? +- what about weight copiers (that won't be motivated to vote)? +- what about flashloans? + +These we'll discuss in the coming days, but first lets agree on the subtypes of problems that the collateral system is going to solve. + +## Usecases + +| Subnet Type | partial burn | burn after dereg | deposit before registration | +| ------------------------------------------- | ----------------- | ------------------- | --------------------------- | +| **Interactive compute** | ✅ | ❓ | :x: | +| **Job compute** | ✅ | ✅ | :x: | +| **Prediction** | ❓ | :x: | ✅ | +| **Storage** | ✅ | ✅ | :x: | + +### Interactive compute subnets + +Think sn27 Neural Internet, sn49 Polaris, sn51 Celium: +- if a miner promises to rent a machine of a certain type on demand, he needs to come through, otherwise UX is bad and the service built on top of the subnet is not attractive +- validators can refuse to weight a miner and even dereg it +- the reputational damage to the subnet can exceed one tempo of incentive + reg fee +- if the subnet has no uid pressure, reg fee falls to zero +- the owner can use tricks to prevent market from setting the reg fee, but not for long +- reg fees don't allow the collateral size to grow with the amount of machines the miner promises to rent +- reg fees cannot be paid back to the miner, so they must be small +- reg fees are all the same for all miners - if subnet has jobs that don't pose risk, miners doing those jobs have to pay the same reg fee... +- in order to prevent collateral-induced uid pressure, the collateral system MUST support burning a part of the collateral + + +### Job compute subnets + +Think sn4 Targon, sn12 ComputeHorde: +- a miner can do jobs that can be corrupt +- it takes time to verify whether the job was corrupted or not +- it takes time for one validator to convince others that the job was indeed corrupted +- a corrupted job has causes damage to the subnet reputation +- validators using this compute won't misdistribute weights, but their performance will suffer and their reputation may suffer too +- in order for this to work at all, the collateral system MUST support burning collateral _after_ the uid is deregistered + + +### Prediction subnets +- impossible to evaluate a trading strategy on historical data +- high leverage extreme risk strategies are worthless +- if these can be submitted without any limits, miners will do that +- some of the strategies will be lucky +- immunity period insufficient with a 256/1024 uid limit +- a miner can submit a collateral and (timelocked?) trades before registering +- if a strategy will be viable, the collateral may be returned +- if the strategy fails, the collateral will be burned +- this increases the cost of the attack and makes it not viable anymore +- in order for the collateral system to properly support prediction subnets, there MUST be a way to pay in collateral _before_ uid registration +- should collaterals be returned or burned when the subnet is deregistered? +- evm key association might need a change from uid to hotkey +- evm keys can then be associated after paying collateral but before registering an uid +- we have a smart contract that is able to store data on chain cost-effectively + + +### Storage subnets +- a validator trusts a miner with data (fragments) which the miner should return after getting deregged +- if the miner doesn't return the data that the validators entrusted him with, the validator should regenarate it so it won't cause data loss +- regeneration is expensive +- if many miners run away with data at the same time, eventually data loss can occur +- if the subnet is going to hold a meaningful amount of data (petabytes), then the miners must be incentivized to return the data to the subnet once they are deregged +- the validators will burn the collateral of the miner a few days after he's deregged, unless he returns the data back to the subnet +- in order for the collateral system to properly support storage subnets, there MUST be a way to slash the miners after uid deregistration + + +## Rationale + +### hotkey or uid +TODO + +### reclaimation +TODO + +### voting participation +TODO + +### flashloans +TODO + +## Backwards Compatibility + +Collaterals will be entirely optional. + + +## Security Considerations + +The collateral system may be abused in a number of ways. The governor should have the ability to turn off + the collateral system for a given netuid. +A governance policy of turning the collateral system off for subnets that abuse it should be added + to make it clear for everyone what type of usage is allowed. + + +## Copyright + +This document is licensed under [The Unlicense](https://unlicense.org/). From e102c6e1d3f4013abb015d5c105c0f95238fc9a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Mon, 30 Jun 2025 03:38:50 +0300 Subject: [PATCH 02/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 26 +++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index 730fd3b..93113db 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -92,20 +92,30 @@ Think sn4 Targon, sn12 ComputeHorde: - the validators will burn the collateral of the miner a few days after he's deregged, unless he returns the data back to the subnet - in order for the collateral system to properly support storage subnets, there MUST be a way to slash the miners after uid deregistration +## User interface + +``` +btcli wallet collateral add --name coldkey-1 --hotkey hotkey-1 --netuid 123 --amount 10 +btcli wallet collateral schedule_reclaim --name coldkey-1 --hotkey hotkey-1 --netuid 123 --amount 10 +btcli wallet collateral status --name coldkey-1 --hotkey hotkey-1 +btcli wallet collateral status --name coldkey-1 --hotkey hotkey-1 --netuid 123 +``` ## Rationale -### hotkey or uid -TODO +### Hotkey or uid +Whether we use `(netuid, uid)` or `(netuid, hotkey)` doesn't make a lot of difference from the implementation or storage standpoint, but as it can be seen in the table above, using hotkey allows for far more functionality (paying collateral before registration and burning collateral after deregistration). -### reclaimation -TODO +### Reclaimation +There are several ways this can be done: +- Reclaim only during uid / subnet deregistration (easiest) +- -### voting participation -TODO +### Voting participation +Since weight copiers won't vote in the collateral system, we need to exclude their stake from the calculation and honest validators should vote `0` if they would prefer to not slash. -### flashloans -TODO +### Flashloans +Anti-MEV measures will foil flashloans ## Backwards Compatibility From 994a562413b288734448a3718c79d41ac6a1deb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Tue, 1 Jul 2025 02:18:36 +0300 Subject: [PATCH 03/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index 93113db..5af2ce4 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -24,23 +24,16 @@ Bittensor miners often try to cheat and the subnet owners have to spend time dea ## Specification -There are a few technical details that still need to be figured out. Among them are: -- why `(netuid, hotkey)` and not `(netuid, uid)`? -- when and how miners can reclaim? -- what about weight copiers (that won't be motivated to vote)? -- what about flashloans? - -These we'll discuss in the coming days, but first lets agree on the subtypes of problems that the collateral system is going to solve. - -## Usecases +Known usecases and the features they require: | Subnet Type | partial burn | burn after dereg | deposit before registration | | ------------------------------------------- | ----------------- | ------------------- | --------------------------- | -| **Interactive compute** | ✅ | ❓ | :x: | +| **Interactive compute** | ✅ | ? | :x: | | **Job compute** | ✅ | ✅ | :x: | -| **Prediction** | ❓ | :x: | ✅ | +| **Prediction** | ? | :x: | ✅ | | **Storage** | ✅ | ✅ | :x: | + ### Interactive compute subnets Think sn27 Neural Internet, sn49 Polaris, sn51 Celium: @@ -101,6 +94,13 @@ btcli wallet collateral status --name coldkey-1 --hotkey hotkey-1 btcli wallet collateral status --name coldkey-1 --hotkey hotkey-1 --netuid 123 ``` +Python interface WIP +```py +subnet = Bittensor[123] +print(subnet.collaterals[uid]) +subnet.collateral_burn_vote({uid: amount_to_burn, other_uid: other_amount_to_burn}) +``` + ## Rationale ### Hotkey or uid From 5230b3c1269b5880ae0b3501f9873743083c7db4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Tue, 1 Jul 2025 02:19:23 +0300 Subject: [PATCH 04/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index 5af2ce4..4707a4c 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -97,8 +97,8 @@ btcli wallet collateral status --name coldkey-1 --hotkey hotkey-1 --netuid 123 Python interface WIP ```py subnet = Bittensor[123] -print(subnet.collaterals[uid]) -subnet.collateral_burn_vote({uid: amount_to_burn, other_uid: other_amount_to_burn}) +print(subnet.collaterals[hotkey]) +subnet.collateral_burn_vote({hotkey: amount_to_burn, other_hotkey: other_amount_to_burn}) ``` ## Rationale From 994287ae8176baf8afd61010c70f56a959380a3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Tue, 1 Jul 2025 02:25:07 +0300 Subject: [PATCH 05/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index 4707a4c..d1081a2 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -99,6 +99,8 @@ Python interface WIP subnet = Bittensor[123] print(subnet.collaterals[hotkey]) subnet.collateral_burn_vote({hotkey: amount_to_burn, other_hotkey: other_amount_to_burn}) +reclaim_attempt = subnet.get_collateral_reclaim_attempts(hotkey=None)[0] +print(reclaim_attempt.hotkey, reclaim_attempt.amount, reclaim_attempt.expiry_block) ``` ## Rationale @@ -109,7 +111,8 @@ Whether we use `(netuid, uid)` or `(netuid, hotkey)` doesn't make a lot of diffe ### Reclaimation There are several ways this can be done: - Reclaim only during uid / subnet deregistration (easiest) -- +- Reclaim immediately (bad for some types of subnets) +- Reclaim after a delay, say 60 tempos, where the reclaim doesn't actually go through if the validators vote to burn it before the delay expires ### Voting participation Since weight copiers won't vote in the collateral system, we need to exclude their stake from the calculation and honest validators should vote `0` if they would prefer to not slash. From 8d5645491819b37205e181f108a36739798b6337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Tue, 1 Jul 2025 02:30:36 +0300 Subject: [PATCH 06/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index d1081a2..ba43edd 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -96,7 +96,7 @@ btcli wallet collateral status --name coldkey-1 --hotkey hotkey-1 --netuid 123 Python interface WIP ```py -subnet = Bittensor[123] +subnet = Bittensor(network="test")[123] print(subnet.collaterals[hotkey]) subnet.collateral_burn_vote({hotkey: amount_to_burn, other_hotkey: other_amount_to_burn}) reclaim_attempt = subnet.get_collateral_reclaim_attempts(hotkey=None)[0] From 68aeacf26c6738db350e532ce06c7e72ea1467d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Tue, 1 Jul 2025 02:32:26 +0300 Subject: [PATCH 07/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index ba43edd..69d83f1 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -96,7 +96,7 @@ btcli wallet collateral status --name coldkey-1 --hotkey hotkey-1 --netuid 123 Python interface WIP ```py -subnet = Bittensor(network="test")[123] +subnet = Bittensor(network="test").subnet(netuid=123) print(subnet.collaterals[hotkey]) subnet.collateral_burn_vote({hotkey: amount_to_burn, other_hotkey: other_amount_to_burn}) reclaim_attempt = subnet.get_collateral_reclaim_attempts(hotkey=None)[0] From 34df4e72aeac1db44eafea4facce1af033211df8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Tue, 1 Jul 2025 02:35:04 +0300 Subject: [PATCH 08/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index 69d83f1..80da7ca 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -87,7 +87,7 @@ Think sn4 Targon, sn12 ComputeHorde: ## User interface -``` +```awk btcli wallet collateral add --name coldkey-1 --hotkey hotkey-1 --netuid 123 --amount 10 btcli wallet collateral schedule_reclaim --name coldkey-1 --hotkey hotkey-1 --netuid 123 --amount 10 btcli wallet collateral status --name coldkey-1 --hotkey hotkey-1 From a2ed8141ebfaa07e4b5c9af092c7f103ab784965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Thu, 3 Jul 2025 00:19:17 +0300 Subject: [PATCH 09/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index 80da7ca..c806851 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -59,7 +59,7 @@ Think sn4 Targon, sn12 ComputeHorde: - in order for this to work at all, the collateral system MUST support burning collateral _after_ the uid is deregistered -### Prediction subnets +### Prediction subnets (sn57) - impossible to evaluate a trading strategy on historical data - high leverage extreme risk strategies are worthless - if these can be submitted without any limits, miners will do that From 87455756dea853475de3964d5468de1b3c5b17c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Thu, 3 Jul 2025 04:22:56 +0300 Subject: [PATCH 10/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index c806851..8bc39b9 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -132,6 +132,9 @@ The collateral system may be abused in a number of ways. The governor should hav A governance policy of turning the collateral system off for subnets that abuse it should be added to make it clear for everyone what type of usage is allowed. +The collateral system is meant to be burned automatically when a miner egregiously breaches the rules of the subnet in such a way, that pulling weights and deregging him is not a sufficient deterrent. +If a subnet will be caught issuing burns manually or carelessly, their privilege to use the collateral should be revoked by the governor. + ## Copyright From 12b99673d70f73c1f939b10ee17bafdf595de281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Fri, 4 Jul 2025 06:41:12 +0300 Subject: [PATCH 11/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index 8bc39b9..5a7f601 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -98,9 +98,11 @@ Python interface WIP ```py subnet = Bittensor(network="test").subnet(netuid=123) print(subnet.collaterals[hotkey]) -subnet.collateral_burn_vote({hotkey: amount_to_burn, other_hotkey: other_amount_to_burn}) + reclaim_attempt = subnet.get_collateral_reclaim_attempts(hotkey=None)[0] print(reclaim_attempt.hotkey, reclaim_attempt.amount, reclaim_attempt.expiry_block) + +subnet.collateral_burn_vote({hotkey: how_much_to_burn, other_hotkey: other_how_much_to_burn}) # how_much_to_burn=1 means burn entire collateral ``` ## Rationale From 80ce4b4d5511c512a04ee2b671039c4a8e6865dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Fri, 4 Jul 2025 06:44:24 +0300 Subject: [PATCH 12/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index 5a7f601..2154209 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -87,6 +87,7 @@ Think sn4 Targon, sn12 ComputeHorde: ## User interface +### CLI ```awk btcli wallet collateral add --name coldkey-1 --hotkey hotkey-1 --netuid 123 --amount 10 btcli wallet collateral schedule_reclaim --name coldkey-1 --hotkey hotkey-1 --netuid 123 --amount 10 @@ -94,15 +95,24 @@ btcli wallet collateral status --name coldkey-1 --hotkey hotkey-1 btcli wallet collateral status --name coldkey-1 --hotkey hotkey-1 --netuid 123 ``` -Python interface WIP +### SDK ```py subnet = Bittensor(network="test").subnet(netuid=123) print(subnet.collaterals[hotkey]) -reclaim_attempt = subnet.get_collateral_reclaim_attempts(hotkey=None)[0] -print(reclaim_attempt.hotkey, reclaim_attempt.amount, reclaim_attempt.expiry_block) - -subnet.collateral_burn_vote({hotkey: how_much_to_burn, other_hotkey: other_how_much_to_burn}) # how_much_to_burn=1 means burn entire collateral +reclaim_attempt = subnet.get_collateral_reclaim_attempts(hotkey=None)[0] # hotkey=None means get reclaim attempts for all hotkeys +print( + reclaim_attempt.hotkey, + reclaim_attempt.amount, + reclaim_attempt.expiry_block, +) + +subnet.collateral_burn_vote( + { + hotkey: how_much_to_burn, + other_hotkey: other_how_much_to_burn, + }, +) # how_much_to_burn=1 means burn entire collateral ``` ## Rationale From 722f99e77702cd744774165927f8a27b876070b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Fri, 4 Jul 2025 06:57:55 +0300 Subject: [PATCH 13/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index 2154209..86a0ee8 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -115,7 +115,7 @@ subnet.collateral_burn_vote( ) # how_much_to_burn=1 means burn entire collateral ``` -## Rationale +## Considerations ### Hotkey or uid Whether we use `(netuid, uid)` or `(netuid, hotkey)` doesn't make a lot of difference from the implementation or storage standpoint, but as it can be seen in the table above, using hotkey allows for far more functionality (paying collateral before registration and burning collateral after deregistration). @@ -124,16 +124,26 @@ Whether we use `(netuid, uid)` or `(netuid, hotkey)` doesn't make a lot of diffe There are several ways this can be done: - Reclaim only during uid / subnet deregistration (easiest) - Reclaim immediately (bad for some types of subnets) -- Reclaim after a delay, say 60 tempos, where the reclaim doesn't actually go through if the validators vote to burn it before the delay expires +- Reclaim after a delay, say in 3 supertempos (60 tempos, ~72h), where the reclaim doesn't actually go through if the validators vote to burn it before the delay expires ### Voting participation Since weight copiers won't vote in the collateral system, we need to exclude their stake from the calculation and honest validators should vote `0` if they would prefer to not slash. +In order to reduce the amount of `0` votes cast by honest validators for every hotkey which holds the collateral, the code should assume a `0` vote for every validator which participated at least once in the given supertempo (20 tempos) in any vote: +- Weight copiers will never vote on anything, so their stake will be substracted from the total +- Small malicious validators won't ever get to 50% of effective stake +- Positive votes will go through efficiently + +### When to count the votes and burn +In the subnet superblock (or superblock + N tempos if one day we'll be reducing superblock complexity). This way if there is a problem with the validators crashing, there will be sufficient time to repair them before a malicious hybrid uid could burn collateral of his competitors. + ### Flashloans -Anti-MEV measures will foil flashloans +Anti-MEV measures will foil flashloans. -## Backwards Compatibility +### Stake before burn? +No, because that will incentivize holders to burn collaterals and it's not a nice dynamic to have on a system-wide scale. +## Backwards Compatibility Collaterals will be entirely optional. From 5a386f7dbb7a90b7b549ebc49adf19b2d7b185c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Polewicz?= Date: Fri, 4 Jul 2025 07:07:58 +0300 Subject: [PATCH 14/14] Update BIT-0009-Native-collateral-support.md --- bits/BIT-0009-Native-collateral-support.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/bits/BIT-0009-Native-collateral-support.md b/bits/BIT-0009-Native-collateral-support.md index 86a0ee8..7421d81 100644 --- a/bits/BIT-0009-Native-collateral-support.md +++ b/bits/BIT-0009-Native-collateral-support.md @@ -22,6 +22,27 @@ Validators may choose to not send (paid) organic traffic to miners which refuse Bittensor miners often try to cheat and the subnet owners have to spend time dealing with exploits, which slows down subnet development. If cheating is disincentivized, subnets development should accelerate. +### A Note on Slashing Philosophy +(this chapter was taken from the [collateral smart contract](https://github.com/bactensor/collateral-contracts) developed for sn12 and sn51 in ) + +The power to slash collateral carries weight — it protects subnet quality, but also risks abuse if unchecked. +All slashing must be triggered by **automated validator logic**, following deterministic, verifiable rules. + +To ensure trust and accountability: + +- **Justified** — slashing must be based on strong evidence (logs, signatures, links). +- **Transparent** — the justification should be public. +- **Proportional** — slashing amounts should reflect the severity and intent of the violation. + +In the future, validators may run slashing logic on a **Trusted Execution Environment (TEE)** and submit signed proofs +that the logic was executed correctly on a secure VM — providing even stronger trust guarantees. + +When new types of miner exploits are discovered, subnet owners will release updated validator logic. +Validators should deploy these updates and restart their validators — updated logic will then automatically catch and slash offending miners. + +Slashing is a **safety mechanism** for **trust-minimized collaboration**, not a discretionary tool. +Subnet owners and validators should ensure that all slashing is implemented and triggered **in code only** — not through human judgment. + ## Specification Known usecases and the features they require: