enabledao / enable

Stablecoin loans for borderless peer-to-peer credit
https://www.enable.credit
MIT License
26 stars 8 forks source link

Create User Staking prototype #17

Closed tspoff closed 5 years ago

tspoff commented 5 years ago

User staking is very simple - users can just stake for another user in this contract and an event is emitted. The indexing service collects these and they are used as part of the calculation to determine the creditworthiness of an individual.

adibas03 commented 5 years ago

Will an address be able to stake itself, also do we care about spam stakes, since the staking function is far easier without it (more of a developer ease issue)?

tspoff commented 5 years ago

I think we should add a couple conditions to be able to stake:

I'm not thinking spam staking will be an issue in general, as there's no direct incentive to do it, as you only gain something when others stake you.

However, if someone wanted to create a network of fake accounts to build up reputation among eachother with the intent to defraud legitimate loan providers, easy staking would be part of the issue.

adibas03 commented 5 years ago

To only stake Address once, we need storage, to curate the list of stakes, stakees and stakers.

adibas03 commented 5 years ago

Also, to be clear, what is the difference between staking and Attesting?

tspoff commented 5 years ago

Yea the terminology is confusing.

Staking is an action that can be undertaken by any bloom user to say "I believe in this persons creditworthiness enough to have my own creditworthiness be influenced by their performance”. It’s called staking in Bloom protocol, though that’s an unimplemented feature. "Vouching" might be another term, or "social attestation".

Attestations are a more general case for an approved party ( by the bloom network ) to attest to the validity of data relating to a user. (Say, a background checking company verifying the users financial or criminal record in a jurisdiction)

In Bloom protocol, there is a specific format for this data that culminates in a merkle root being published in an event on-chain.

Users can choose to reveal part or all of the data included to requesters who want to evaluate the user. The signatures of both the user and and attester are included in such a way the requester can be confident both approved.

tspoff commented 5 years ago

Good call on the storage requirement. I'm not sure if spamming is really a problem (and the spam potential is still pretty high if we only allow each address to stake another address once, as users could sign up and stake every other user).

I'd lean towards keeping it as-is unless we end up with extra time, and add a check to ensure we're staking a valid bloom account, which I'll do tonight.

onggunhao commented 5 years ago

Moved to https://github.com/enabledao/enable-contracts/issues/27