This post was a lot longer but I found a lot of stuff answered itself as I wrote it. At the risk of stating the obvious, this is a very detailed and nuanced rfc!
From Unresolved questions:
āwe currently require payment for the creation of a new CoinBalance
instance, whereas here the vault would need to create one without being able to pay for its creation.ā
Some options
-
Elders pay for it. Elders already have both higher income and higher costs. Itās a tiny amount of extra work/cost to pay for a new wallet for the new vault as part of the overall burden of a new vault joining. Could be baked in that if the new vault CoinBalance
already exists then the elders credit it for being a well prepared citizen.
-
Have the āfromā field be the aggregate section bls key which is accepted even though it has no balance. The check for valid creation becomes a two-stage test a) āfromā is able to pay or b) āfromā is a section.
-
Have elders act as an escrow, and when the new vault has earned enough to pay for CoinBalance
creation the elders create it. This may involve having an actual CoinBalance
for the aggregate section bls key. In this way Elders act as a āfarming poolā for very young vaults, aggregating funds like a bitcoin mining pool. But the purpose of the pool is not to reduce variation in rewards, more to ensure a correct sequence of operations in the vault setup phase.
I think the second option is simplest. Would be interested to hear more ideas.
In the Safecoin Transfer section, how is uuid
for a CoinTransfer.Credit.transaction_id
determined?
In the Account creation section, it seems most of text belongs in an Account Structureā RFC. These details seem to have no impact on safecoin or farming. I think some mention of this data structure is useful to add context to CoinBalance
but the details donāt seem to belong here. Probably the first two sentences of this section is all thatās needed, and also āany updates are free of charge.ā
A minor point for sure, but the document is pretty large and any way to reduce cognitive burden is a win.
A question to ponder about the StoreCost algorithmā¦
Should the network measure āfull vaultsā or āspare spaceā and whatās the difference?
On one hand, full vaults is really what needs be avoided, but on the other hand spare space is the metric with the best resolution for allowing it to be avoided. Full Vault is post-problem, Spare Space is pre-problem.
Another questionā¦
Should StoreCost for a network of 10 sections with 1 full vault each be the same or different to a network of 10,000 sections with 1 full vault each?
On one hand the portion of full vaults is the same for both networks, but on the other hand the larger network has a thousand times more spare space than the smaller one.
With overall 2 Ć UploadCost reward, it could be that vaults would want to upload data to their section to get more rewards. If every vault did this it might pay for itself but it becomes a prisoners dilemma problem. Just touching this to see if it tickles anyone.
Could be a maximum reward scenario when one vault is not full and all others are (maybe only briefly? maybe all only 1 chunk over-capacity?). This would mean nearly 2 safecoin per PUT with 2Ć reward totalling nearly 4 safecoin reward per PUT to be divided into the section. Not sure how achievable or dangerous this scenario is but again wanted to touch on it to see if prods anyone.
āreward will be divided as followsā
single_node_age = if no associated CoinBalance::owner { 0 }
else if flagged as full { node's age/2 }
else { node's age }
I think an extra line might be good here to account for the additional workload of elders that adults donāt have (especially important for tie-breakers among adults for eldership):
single_node_age = if no associated CoinBalance::owner { 0 }
else if flagged as full { node's age/2 }
else if elder { node's age + 1 }
else { node's age }
Iām interested in the Full Vault detailsā¦
Are chunks always attempted to be stored in full vaults to give them a chance to become recognised as unfull? Or does a full vault get automatically bypassed and the chunk redirected to the next nearest nonfull vault?
Will there be an option for a full vault to ask for relocated chunks to be returned to them, eg an Unrelocate
request?
Is there some time after which the full vault is killed? Or can full vaults live on the network forever? Or until their next relocation?
Can the list of relocated chunks keep growing forever or is there some limit to how many chunks can be relocated?
Has the disallow rule been replaced by number of full vaults?
Seems to be covered in Future enhancements section:
āaccepting a node to a section will revolve around 100 nodes capable of storing data, full nodes will not be counted as part of the section recommended size of 100ā
and
āEach section will aim to maintain a minimum ratio of 50% good nodesā
Soā¦ full nodes donāt count toward the 100 target, but they do count toward the 50% good.
Does this psuedocode seem right?
allow new vault?
less than 100 good -> yes
more than 50% full -> yes
else -> no
āaccepting a node to a section will revolve around 100 nodes capable of storing data, full nodes will not be counted as part of the section recommended size of 100ā
āEach section will aim to maintain a minimum ratio of 50% good nodesā
This gives some expected ranges of section size.
100 good nodes is the target. At least 50% good nodes means target between 0 and 100 full nodes.
200 good nodes is roughly when a split will happen, which means between 0 and 200 full nodes in a big section.
So the likely biggest section would be 400 nodes (200 good, 200 full).
Some StoreCost calculations
G F N SC
100 0 100 0.0100
100 100 200 0.5100
200 0 200 0.0050
200 200 400 0.5050
StoreCost will almost always be roughly between 0.005 - 0.5 safecoin per PUT.
Does this summary sound right? Am I missing some details?