Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor / update language to match current understanding + terminology #1283

Closed
jbibla opened this issue Sep 4, 2018 · 31 comments
Closed

Comments

@jbibla
Copy link
Collaborator

jbibla commented Sep 4, 2018

i would LOVE if we refactored just the language because delegates and delegators feels very old and unfamiliar.

the main issue i noticed was delegates and delegators but surely there are many others.

@NodeGuy
Copy link
Contributor

NodeGuy commented Sep 4, 2018

What is our current understanding + terminology?

@faboweb
Copy link
Collaborator

faboweb commented Sep 5, 2018

delegates = candidates = validators. we agreed on naming them validators.
delegators stays the same as far as I know.

@jbibla
Copy link
Collaborator Author

jbibla commented Sep 5, 2018

well, the current conversation is that we want to push Bonded Proof of Stake which according to made up rules about language would imply that delegators = bonders. fun fact, roberta bondar 👩‍🚀 was the first female canadian astronaut.

here are some combinations i've seen. feel free to add some if they are missing. i think the strongest choice is the last row to support BPoS and current (relatively) well understood terminology.

verb (ad)verb atom holders validators & candidates
delegation unbonding delegator delegates
bonding unbonding bonders validators
staking unstaking stakers validators
bonding unbonding atom hodlers validators
bonding unbonding atom holders validators

@rigelrozanski @jackzampolin what do you think?

@rigelrozanski
Copy link

bonding should generally never be used to describe an action of an actor, bonded, unbonded, and unbonding should only be used to describe the state of atoms, which is somewhat independent of whether tokens are delegated or undelegated. delegating, undelegating or redelegating are the actions which delegators (and validators) may make.

I would also totally avoid the language of stake or maybe it should be used to replace the term bond - but if that's the case we should be consistent everywhere (right now we are consistently not using stake in the sdk).

@jbibla
Copy link
Collaborator Author

jbibla commented Sep 5, 2018

bonding should generally never be used to describe an action of an actor

what is the thinking here?

delegating, undelegating or redelegating are the actions which delegators (and validators) may make.

sure, but in a BPoS system wouldn't it make sense to use Bonding and associated terminology instead of delegation - which is a lot like "Delegated Proof of Stake" which we are intentionally trying to distance ourselves from?

we should be consistent everywhere

100% - this is the impetus for this ticket now, i guess.

@Chjango
Copy link

Chjango commented Sep 5, 2018

I might even suggest going up a level higher. As far as describing our consensus mechanism in one elegant acronym like BPOS, we may not even have to change the underlying associated verbiage like who "delegators" are or who does the "bonding/delegating" action. This change could be as simple as classifying ourselves as BPOS when we speak at conferences and meetups and popularizing it that way. We can avoid complicating/bikeshedding about what to change at the level of granularity we're currently discussing right now. For all intents and purposes, BPOS is a marketing terminology. Nothing more. I recommend against refactoring all of our documentation and making people relearn all but one new terminology we come up with. The one being: BPOS.

Here's what's happening in the development landscape. Even seasoned blockchain developers (people who have been doing stuff in crypto for 3+ years) don't have a word for differentiating between those masternode PoS protocols and Cosmos'. Meaning, there is no word out there classifying this particular class of PoS security. Without one, we risk being diluted, conflated, and bucketed into the same category of naive, simple-to-implement PoS protocols like that of DASH, PIVX, EOS, and all those other ones that don't do nearly half the things they promise that we actually deliver in Cosmos.

I'm beating a dead horse at this point but this point needs to get across to everybody again and again to help people understand the whole point of this exercise: This is because Cosmos' PoS implementation is the only one in the world right now that is coming-to-production with in-protocol slashing. Casper is the only other thing that promises this. Yet they have no such implementation even near ready. This means that if we get this one thing right, helping the general population understand this very significant point with a single word will effectively be our claim to fame. This is what Cosmos should be known for.

Because all other PoS implementations coming after us are going to be using our libraries basically, if Cosmos fails in the PoS design space, then the whole space fails. If Cosmos can't get PoS right, then others have no hope of getting it right either. That's how big this is. That's how bleeding edge we are in terms of pioneering this thing. And other projects are trying to claim this right. No. This is our claim. We need to take it and coming up with the right acryonym to do it is a good step in that direction.

With that in mind, I really don't think we should put so much focus on the other jargon. This is needed just to classify our consensus algorithm and what it does in one acronym that encompasses all that ^^ was written above.

@rigelrozanski
Copy link

rigelrozanski commented Sep 5, 2018

what is the thinking here?

The word "bond" is quite overloaded in our system so to avoid confusion we must separate out into multiple terms. More thoughts and discussion on why this is overloaded have been discussed in this SDK issue: cosmos/cosmos-sdk#1879

sure, but in a BPoS system wouldn't it make sense to use Bonding and associated terminology instead of delegation - which is a lot like "Delegated Proof of Stake" which we are intentionally trying to distance ourselves from?

Is there consensus on switching the lingo for us to be using BPoS? that's the first I'm hearing of this. But either way, I don't see why it's any different whether we're called "BPoS" or "DPoS" there is still the concept of token state (bonded/unbonded/unbonding) and attribution (delegated/undelegated) - so it's really all the same, I don't care if we choose to swap language so much, however it's very important that we maintain distinct terms between state and attribution as I just explained.


@Chjango

Couldn't agree more with your points 👏

@Chjango
Copy link

Chjango commented Sep 5, 2018

I don't see why it's any different whether we're called "BPoS" or "DPoS" there is still the concept of token state...

Technically, like you said, there is no difference. Marketing-wise, DPoS is EOS's claim to fame and if we use DPoS, we risk the dilution, conflation, and bucketing with EOS's system in the eyes of the lay person. So BPoS is our attempt to clarify the distinction, despite using the same word for attribution at the protocol level.

@fedekunze
Copy link
Contributor

@jbibla here's my proposal:

Actions:

staked,bonded --> delegated or redelegated depending on the type
staking --> delegation or redelegation depending on the type

delegate --> validator

@jbibla
Copy link
Collaborator Author

jbibla commented Sep 27, 2018

verb (ad)verb atom holders validators & candidates
delegation unbonding delegators validators

@rigelrozanski
Copy link

rigelrozanski commented Sep 27, 2018

CC @fedekunze @jbibla

ahahaahaha - THIS IS MESSY - Everyone should make sure they understand the following breakdown.
I'd suggest the UI adopt this language verbatim:

  • Tokens (owned by either a validator or a deleator) can have one of the three states:
    • bonded, unbonded, or unbonding
  • In addition to this attribute, tokens which are owned by a delegator can also be
    • delegated or undelegated
  • Delegators tokens can be held in the following objects:
    • Their wallet
    • A delegation - (holds shares representing tokens in a validator)
    • A redelegation - (holds shares representing how many tokens would have been in the original validator, the actual tokens are held in the new validator with a new delegation object)
    • An unbonding-delegation - (holds the actual tokens) p.s. this is a confusing term and should probably be renamed to something like an undelegation

@faboweb
Copy link
Collaborator

faboweb commented Sep 28, 2018

To clarify: I can have delegated tokens to a validator that are currently unbonded from that validator because this validator (candidate) is not in the list of validators right now because he hasn't accumulated enough delegated tokens?
When are tokens in this scenario unbonding? I thought this happens instant?

@jbibla
Copy link
Collaborator Author

jbibla commented Sep 28, 2018

THIS IS MESSY

yes. can we make it less messy?

@rigelrozanski
Copy link

rigelrozanski commented Sep 28, 2018

can we make it less messy

I think the language I've laid out is pretty concise and clean. Just use that! (if you understand it of course) - I was referring how you guys have been talking about some of these terms before, sometimes ambiguously or incorrectly - I don't like the idea of breaking things down into "verb/adverbs"s etc. kind of arbitrary doesn't actually what it's a verb of. Any action should be in reference to the affected objects - I think discussing these concepts a bit more verbosely with more context will lead to less confusion


RE @faboweb

Your first statement is close to being correct but the languages Incorrect, tokens have an bond state only as an attribute to the network, not "in reference to" a validator. Tokens can only be delegated or undelegated in reference to a validator.

your statement would be correct if it was worded as followed:
I can have delegated tokens to a validator that are currently in the unbonded state because this validator is not in the list of validators right now because he hasn't accumulated enough delegated tokens?

When are tokens in this scenario unbonding? I thought this happens instant?

For tokens to move from the unbonding state to the unbonded state always takes the duration of the unbonding period (3 weeks).

Undelegation or redelegation can be thought of as instant transactions, however the tokens are actually still locked, they are moved from the delegation object to a new unbonding/redelegation object for the duration of the unbonding period. During this period you are still liable to being slashed for malicious events which occured in the past if your voting power contributed to those events.

CLARITY in use of language between the concept of bonding and delegating is KEY and we should all refine our use to be more concise between these two distinct concepts.

The following are all correct statements which can occur on the hub:

  • "tokens are in the bonded state and also delegated to a validator"
  • "tokens are in the unbonding state and also delegated to a validator"
  • "tokens are in the unbonded state and also delegated to a validator"
  • "tokens are in the unbonding state and also undelegated to a validator"
  • "tokens are in the unbonded state and also undelegated to a validator"

The following is a situation which could NEVER occur on the hub:

  • "tokens are in the bonded state and also undelegated to a validator"

Additionally here is a statement which doesn't make any sense based on the language as explained and should not be used:

  • "tokens are bonded/unbonded/unbonding to a validator"

The correct statement to describe the same thing is:

  • "tokens are delegating/undelegated to a validator"

@jbibla
Copy link
Collaborator Author

jbibla commented Sep 28, 2018

very helpful. thank you @rigelrozanski.

  • what do you call atom hodlers?
  • what do you call the group that includes validators and candidates?

@fedekunze
Copy link
Contributor

We should add this to the SDK FAQ

@rigelrozanski
Copy link

@jbibla - good Qs

what do you call atom hodlers?

as in somebody who is not engage in any of the delegation/validation stuff at all? Not totally sure, probably just that atom hodlers/non-delegators/non-bonders or maybe outsiders or weak souls JKS

what do you call the group that includes validators and candidates?

Candidates is an old concept which should generally not be used. There are only validators thus in your context the group which includes "validators and candidates" should just be named The Validators. From here if you want to refer to the kids actually running Tendermint and the network you should refer to The Bonded Validators

@jbibla
Copy link
Collaborator Author

jbibla commented Sep 28, 2018

as in somebody who is not engage in any of the delegation/validation stuff at all? Not totally sure, probably just that atom hodlers/non-delegators/non-bonders

would it be wrong to call them delegators?

Candidates is an old concept which should generally not be used. There are only validators thus in your context the group which includes "validators and candidates" should just be named The Validators. From here if you want to refer to the kids actually running Tendermint and the network you should refer to The Bonded Validators

makes sense.

thank you again!

@rigelrozanski
Copy link

If they are delegating then you could call them delegators. I guess you could think of the hodlers as potential-delegators. so I guess it could be correct

@jbibla
Copy link
Collaborator Author

jbibla commented Sep 28, 2018

i'm not convinced yet that it makes sense for us to keep staking, delegation, and bonding around. do we need all three categories and their variations?

right now we are consistently not using stake in the sdk

what about the name of the module, in the LCD, and now the testnet token :trollface:

@rigelrozanski
Copy link

testnet token - arbitrary/don't matter
as for the module name and lcd paths - we could consider renaming it - (see thoughts here #1365 (comment))

@NodeGuy
Copy link
Contributor

NodeGuy commented Oct 1, 2018

@jbibla Would you please summarize your findings for the Voyager team?

@jbibla
Copy link
Collaborator Author

jbibla commented Oct 1, 2018

what do you mean @NodeGuy ?

@NodeGuy
Copy link
Contributor

NodeGuy commented Oct 1, 2018

I'd like to know what language we should be using without having to get a PhD. 😃

@jbibla
Copy link
Collaborator Author

jbibla commented Oct 1, 2018

me too 😭

@faboweb
Copy link
Collaborator

faboweb commented Oct 2, 2018

In the context of the UI we more or less can ignore the terminology of bonded tokens. A user only cares about if he has liquid tokens not delegated to a validator, tokens currently delegated to a validator and not usable tokens he started undelegating from a validator. redelegating happens instant and therefor is not a state just an action.
This is how I understand it.

@rigelrozanski
Copy link

rigelrozanski commented Oct 2, 2018

@faboweb we cannot ignore the terminology of bonded and simply replace it with delegated, see my comments in #1365 - we need to use the term bonded validator - I know as much as we all want to simplify things, if we only using one set of concepts (aka delegating/undelegated/undelegating vs bonded/unbonding/unbonded) it will cause a lot more confusion because it's definitively incorrect - staking is conceptually complicated, and let's keep thinking of ways to simplify it, but not by introducing misnomers

EDIT: don't necessarily need to use the term bonded validator - there's probably correct+clear alternatives RE lower discussion

p.s. (don't mean to be a prickly pear!! <3 )

@ebuchman
Copy link
Contributor

ebuchman commented Oct 2, 2018

what if the bonding language became more like "active/inactive/inactivating"? then it would be "active delegation" instead of "bonded delegation"

@ebuchman
Copy link
Contributor

ebuchman commented Oct 2, 2018

A user only cares about if he has liquid tokens not delegated to a validator, tokens currently delegated to a validator and not usable tokens he started undelegating from a validator.

This makes sense - we should try to tailor the language more towards what the user actually has to think about / interact with rather than what might be going on deeper in the state machine

@rigelrozanski
Copy link

rigelrozanski commented Oct 2, 2018

Yeah I suspect there IS some better language which can be used which is less cumbersome while still correct - just need to pin it down - on that note I take back that we need to use bonded validators - there's likely correct alternatives, however undelegated validator is by definition incorrect and really confusing for me.

We're setting up a phone discussion for I believe thursday to discuss more


@ebuchman

we should try to tailor the language more towards what the user actually has to think about / interact with rather than what might be going on deeper in the state machine

Agreed, however we should also not mislead the user into thinking something which is false about how the system operates, delegators are going to need some basic level of competency in understanding what and how cosmos's D-B-POS system functions.

hmm so are you suggesting a third set of terms active/inactive/inactivating to take over the language of both delegated/undelegated/undelegating and bonded/unbonded/unbonding?
... I think I kinda like this!!!!! - going to sit on it a tiny bit more, maybe there is a better noun than active per say, and we would also want a hyper-explicit document explaining the relationship between the three nouns... but I think you're onto something great :)

@rigelrozanski
Copy link

How about locked/unlocked/unlocking? I like this because it also describes a clear attribute about what you can do with those tokens. This is how it translates (you could also replace lock with active here)

"bonded validator" -> "locked validator"
"unbonded validator" -> "unlocked validator"
"unbonding validator" -> "unlocking validator"

"tokens are in the bonded state and also delegated to a validator" -> "locked delegation"
"tokens are in the unbonded state and also delegated to a validator" -> "unlocked delegation"
"tokens are in the unbonding state and also delegated to a validator" -> "unlocking delegation"
"tokens are in the unbonding state and also undelegated to a validator" -> "unlocking wallet tokens"
"tokens are in the unbonded state and also undelegated to a validator" -> "unlocked wallet tokens"

Thoughts?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants