Remove

Nodes can remove themselves from a subnet on-chain as long as they are not the current epoch's validator; otherwise, it will remove them from the current epoch's attestation data, if it exists.

Call remove_subnet_node to remove

pub fn remove_subnet_node(
    origin: OriginFor<T>, 
    subnet_id: u32, 
    subnet_node_id: u32,
)

Inserted & Updated Storage

...
// Remove node from attestations
...
PeerIdSubnetNode::<T>::remove(subnet_id, &peer_id);
BootstrapPeerIdSubnetNode::<T>::remove(subnet_id, subnet_node.bootstrap_peer_id);
HotkeySubnetNodeId::<T>::remove(subnet_id, &hotkey);
SubnetNodeIdHotkey::<T>::remove(subnet_id, subnet_node_id);

// Update total subnet peers by subtracting 1
TotalSubnetNodes::<T>::mutate(subnet_id, |n: &mut u32| n.saturating_dec());

// Reset sequential absent subnet node count
SubnetNodePenalties::<T>::remove(subnet_id, subnet_node_id);

TotalActiveNodes::<T>::mutate(|n: &mut u32| n.saturating_dec());

When removed, the stake balance is not removed. This must be manually removed by calling remove_stake.

Last updated