mirror of
https://github.com/status-im/swarms.git
synced 2025-02-26 08:35:22 +00:00
Paid master nodes (#168)
* Paid master node rough draft * Add section with some open questions to consider * Remove wrong file * Misc tweaks - Give idea number - Add Andy as community - Fix typos * Update README idea registry and classifieds * Fix filename * Review comments
This commit is contained in:
parent
b26db5e5cb
commit
2418c52ef1
56
README.md
56
README.md
@ -13,15 +13,18 @@ Then submit a Pull Request in this repository.
|
|||||||
Ideas looking for people
|
Ideas looking for people
|
||||||
|
|
||||||
|
|
||||||
| Idea | Looking for | Swarm lead | In progress? | OKR prios |
|
| Idea | Looking for | Swarm lead | In progress? | OKR prios |
|
||||||
|------|-------------|------------|--------------|-----------|
|
|------|-------------|------------|--------------|----------------|
|
||||||
| #58 | Clojure dev | Adam | Yes | p1: p0 |
|
| #58 | Clojure dev | Adam | Yes | p1: p0 |
|
||||||
| #145 | PM | Ricardo | No | |
|
| #145 | PM | Ricardo | No | |
|
||||||
| #145 | UX | Ricardo | No | |
|
| #145 | UX | Ricardo | No | |
|
||||||
| #151 | Clojure dev | Ricardo | No | p2: p0 |
|
| #151 | Clojure dev | Ricardo | No | p2: p0 |
|
||||||
|
| #167 | Clojure dev | Oskar | No | p1: p3, p2: p0 |
|
||||||
|
| #167 | Go dev | Oskar | No | p1: p3, p2: p0 |
|
||||||
|
| #167 | QA | Oskar | No | p1: p3, p2: p0 |
|
||||||
|
>
|
||||||
|
|
||||||
|
# Idea Registry
|
||||||
## Idea Registry
|
|
||||||
|
|
||||||
An idea can be in the following states: draft, in progress, completed, or
|
An idea can be in the following states: draft, in progress, completed, or
|
||||||
aborted. Additionally, it can be in limbo which is when it isn't clear what
|
aborted. Additionally, it can be in limbo which is when it isn't clear what
|
||||||
@ -30,28 +33,29 @@ aborted.
|
|||||||
|
|
||||||
## In Progress :walking_man:
|
## In Progress :walking_man:
|
||||||
|
|
||||||
| Idea | State | Success metrics? | Exit criteria? | Clear roles? | Future iteration? |
|
| Idea | State | Success metrics? | Exit criteria? | Clear roles? | Future iteration? |
|
||||||
|---------------------------------------------------------------------|---------------------------|------------------------|------------------------|------------------------|------------------------|
|
|------------------------------------------------------------------------------------------------------------------------|---------------------------|------------------------|------------------------|------------------------|------------------------|
|
||||||
| [127-sob-testing](ideas/127-SOB-testing-process.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [127-sob-testing](ideas/127-SOB-testing-process.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [120-swarm-process](ideas/120-swarm-process/README.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [120-swarm-process](ideas/120-swarm-process/README.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [121-swarm-compensation](ideas/121-swarm-compensation/) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [121-swarm-compensation](ideas/121-swarm-compensation/) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [92-disc-v5-research](ideas/92-disc-v5-research.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [92-disc-v5-research](ideas/92-disc-v5-research.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [87-new-protocol](ideas/87-new-protocol.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [87-new-protocol](ideas/87-new-protocol.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [83-energy-efficient](ideas/83-energy-efficient.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [83-energy-efficient](ideas/83-energy-efficient.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [80-onboarding](ideas/80-onboarding.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [80-onboarding](ideas/80-onboarding.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [68-core-metrics](ideas/68-core-metrics.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [68-core-metrics](ideas/68-core-metrics.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [58-mainnet](ideas/58-mainnet.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [58-mainnet](ideas/58-mainnet.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [34-react-native-qt](ideas/34-react-native-qt.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [34-react-native-qt](ideas/34-react-native-qt.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [140-sob-improve-onboarding](ideas/140-sob-improve-onboarding/) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [140-sob-improve-onboarding](ideas/140-sob-improve-onboarding/) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [122-sob-metrics](ideas/122-sob-metrics.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [122-sob-metrics](ideas/122-sob-metrics.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [154-support-web3.js-library](ideas/154-support-web3.js-library.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [154-support-web3.js-library](ideas/154-support-web3.js-library.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [99-confidence](ideas/99-confidence.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [99-confidence](ideas/99-confidence.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [167-extended-automated-testing-for-continuous-delivery](ideas/167-extended-automated-testing-for-continuous-delivery) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [167-extended-automated-testing-for-continuous-delivery](ideas/167-extended-automated-testing-for-continuous-delivery) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
| [096-tribute-to-talk](ideas/96-message-tributes.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
| [096-tribute-to-talk](ideas/96-message-tributes.md) | :walking_man: In Progress | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes | :white_check_mark: Yes |
|
||||||
|
|
||||||
## Draft :seedling: and limbo :question:
|
## Draft :seedling: and limbo :question:
|
||||||
| Idea | State | Success metrics? | Exit criteria? | Clear roles? | Future iteration? |
|
| Idea | State | Success metrics? | Exit criteria? | Clear roles? | Future iteration? |
|
||||||
|-------------------------------------------------------------------|------------------|------------------------|------------------------|------------------------|--------------------------|
|
|-------------------------------------------------------------------|------------------|------------------------|------------------------|------------------------|--------------------------|
|
||||||
|
| [167-paid-master-nodes](ideas/167-paid-master-node.md) | :seedling: Draft | :white_check_mark: Yes | :white_check_mark: Yes | :x: No | - :white_check_mark: Yes |
|
||||||
| [150-gas-abstraction](ideas/150-gas-abstraction.md) | :seedling: Draft | :white_check_mark: Yes | :x: No | :x: No | - :white_check_mark: Yes |
|
| [150-gas-abstraction](ideas/150-gas-abstraction.md) | :seedling: Draft | :white_check_mark: Yes | :x: No | :x: No | - :white_check_mark: Yes |
|
||||||
| [027-username-ens-subdomain](ideas/027-username-ens-subdomain.md) | :seedling: Draft | :x: No | :white_check_mark: Yes | :x: No | - :white_check_mark: Yes |
|
| [027-username-ens-subdomain](ideas/027-username-ens-subdomain.md) | :seedling: Draft | :x: No | :white_check_mark: Yes | :x: No | - :white_check_mark: Yes |
|
||||||
| [145-identity](ideas/145-identity.md) | :seedling: Draft | :x: No | :white_check_mark: Yes | :x: No | - :white_check_mark: Yes |
|
| [145-identity](ideas/145-identity.md) | :seedling: Draft | :x: No | :white_check_mark: Yes | :x: No | - :white_check_mark: Yes |
|
||||||
|
192
ideas/168-paid-master-nodes.md
Normal file
192
ideas/168-paid-master-nodes.md
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
## Preamble
|
||||||
|
|
||||||
|
Idea: 167-paid-master-node
|
||||||
|
Title: Paid master nodes
|
||||||
|
Status: Draft
|
||||||
|
Created: 2018-04-13
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
In Status, users are stakeholders. This means we pay and get paid based on
|
||||||
|
services provided. This includes high-connectivity nodes, aka master node, which
|
||||||
|
are used for things like offline inboxing. We choose to let users pay other
|
||||||
|
peers for this service, as opposed to providing it for free and selling our
|
||||||
|
users.
|
||||||
|
|
||||||
|
## Swarm Participants
|
||||||
|
|
||||||
|
- Lead Contributor: @oskarth
|
||||||
|
- QA: TBD
|
||||||
|
- Evaluation: TBD
|
||||||
|
- Clojure Contributor: TBD
|
||||||
|
- Go Contributor: TBD
|
||||||
|
- PM: @rachelhamlin
|
||||||
|
- UX(R): @jpbowen
|
||||||
|
- Designer: TBD
|
||||||
|
- Community: @andytudhope
|
||||||
|
|
||||||
|
## Product Overview
|
||||||
|
|
||||||
|
This idea takes of where https://github.com/status-im/ideas/blob/master/ideas/1-offline-inboxing.md ended. It provides an SNT payment layer for usage of master nodes.
|
||||||
|
|
||||||
|
Users want basic services such as offline inboxing to just work, while at the
|
||||||
|
same time paying for the resources they are using, as opposed to being a product
|
||||||
|
sold to other businesses. Users also want to make SNT so they can use it in the
|
||||||
|
app.
|
||||||
|
|
||||||
|
Currently offline inboxing is a free resource, subsidised and run by us. This is
|
||||||
|
sub-optimal for many reasons, and goes against our vision of letting users pay
|
||||||
|
for things they use, as well as incentivizing this capability to be
|
||||||
|
decentralized.
|
||||||
|
|
||||||
|
Offline inboxing is run on mail server aka master nodes. In the scope of e.g.
|
||||||
|
86-push-notifications push notifications will likely be served through that as
|
||||||
|
well.
|
||||||
|
|
||||||
|
### User stories
|
||||||
|
|
||||||
|
User story 1: Bobby Blockchain runs a master node and gets paid by peers in SNT for services provided.
|
||||||
|
|
||||||
|
User story 2: Alice pays SNT to a master node in order to get offline inboxing for some period of time.
|
||||||
|
|
||||||
|
Out of scope for this idea:
|
||||||
|
|
||||||
|
- (User story 3: Decentralized discovery mechanism for master nodes)
|
||||||
|
|
||||||
|
- (User story 4: Onboarding mechanism to seed closed beta users with SNT)
|
||||||
|
|
||||||
|
User story 4 is sufficiently different in focus to warrant a separate swarm.
|
||||||
|
Since it might be a pre-requsite from a UX point of view, the behavior in user
|
||||||
|
story 1 and 2 should be toggle-able with a flag. I.e. we make sure we can still
|
||||||
|
provide free service for the time being.
|
||||||
|
|
||||||
|
In addition to these defined user-stories, additional ones might be carved out,
|
||||||
|
such as communication of quality of service and price discovery mechanisms. It
|
||||||
|
is unlikely these will be relevant until user story 1 and 2 are solved, but this
|
||||||
|
swarm will decide if it makes sense to continue working to solve additional user
|
||||||
|
stories after 1 and 2 are done.
|
||||||
|
|
||||||
|
### Product Description
|
||||||
|
|
||||||
|
Currently we have a screen that shows mail servers available. Each mail server
|
||||||
|
will have a basic monthly fee attached to it. This can start off as static but
|
||||||
|
evolve to being dynamically communicated through our application protocol. In
|
||||||
|
auction terms, this is an, initially static, bid process.
|
||||||
|
|
||||||
|
> Comment from review: Are there any selection criteria for to show users other
|
||||||
|
> than price? Eg users/transaction, ratings, reviews, quality?
|
||||||
|
|
||||||
|
As a user picks a mail server they are asked to sign a transaction in order to
|
||||||
|
pay for offline inboxing for 1..N months. Sending this transaction counts as
|
||||||
|
paying for this mail server. This is similar to paying for an app or service in
|
||||||
|
the Apple store.
|
||||||
|
|
||||||
|
Mail server needs to be able to process this transaction and have logic for
|
||||||
|
whitelisting this user's enode for some period of time.
|
||||||
|
|
||||||
|
How re-newal will happen is not specified yet.
|
||||||
|
|
||||||
|
> Comment from review: May be out of scope for this idea but perhaps we'll want to experiment with different payment models for time - e.g. Alice pays until she runs out of SNT OR N offline messages OR set period of time.
|
||||||
|
|
||||||
|
Solving the initial user stories don't require any proof of message delivery or
|
||||||
|
quality of service. Reputation of specific mail servers thus happens completely
|
||||||
|
outside of the app, e.g. through Riot, Reddit, etc.
|
||||||
|
|
||||||
|
#### Note on Status Desktop
|
||||||
|
|
||||||
|
Status Desktop isn't a requirement for this idea as a user can run a mail server
|
||||||
|
from the command line. It is an additional user story that shouldn't be too
|
||||||
|
difficult to implement, but it isn't clear how desirable it is, assuming that
|
||||||
|
high availabity of mail servers is a requirement.
|
||||||
|
|
||||||
|
#### Terminology
|
||||||
|
|
||||||
|
Mail server / wnode / master node are used interchangably. Master mode is the
|
||||||
|
"soft" user term (invented by the community!), mail server and wnode are
|
||||||
|
technical terms on status-go side.
|
||||||
|
|
||||||
|
#### Relevant reading
|
||||||
|
|
||||||
|
- https://status.im/whitepaper.pdf
|
||||||
|
- http://nakamotoinstitute.org/static/docs/micropayments-and-mental-transaction-costs.pdf
|
||||||
|
|
||||||
|
### Requirements & Dependencies
|
||||||
|
|
||||||
|
(Lack of consensus on this point: Possibly onboarding SNT give-away logistics.)
|
||||||
|
|
||||||
|
### Minimum Viable Product
|
||||||
|
<!-- Mandatory, completes the Idea in the fastest route possible, can be hacky, needed to feel progress. See https://imgur.com/a/HVlw3 -->
|
||||||
|
Goal Date: TBD - May 1 + 2w
|
||||||
|
|
||||||
|
Description: Spike out most basic proof of concept possible for payment / service on or off in Clojure and Go, using SNT test token.
|
||||||
|
|
||||||
|
## Dates
|
||||||
|
Separate tracks:
|
||||||
|
- UX(R) / design
|
||||||
|
- Go dealing with app protocol / payment
|
||||||
|
|
||||||
|
Goal Date: <!-- Date for evaluation in ISO 8601 (yyyy-mm-dd) format -->
|
||||||
|
|
||||||
|
Description: <!-- Description of Deliverables-->
|
||||||
|
|
||||||
|
Testing Days required: <!-- Days required at the end of development for testing -->
|
||||||
|
|
||||||
|
## Success Metrics
|
||||||
|
|
||||||
|
- Users running mail servers and transacting. Target: 10
|
||||||
|
|
||||||
|
- Users paying for a mail server. Target: 50% of D7 retained users, or 20% of all users.
|
||||||
|
|
||||||
|
- Daily Transacting Users. Target: 35 ((5000 DAU TARGET*0.2 TX%)/30 PAY-MONTHLY).
|
||||||
|
|
||||||
|
OKRs:
|
||||||
|
2.4: >20% of users send a transaction (P1:P3)
|
||||||
|
3.1: 2x launched SNT use cases (P2:P0)
|
||||||
|
|
||||||
|
## Exit criteria
|
||||||
|
|
||||||
|
Solving the two initial user stories. If the swarm deems it useful to continue,
|
||||||
|
new specific user stories will be specified and inform the exit criteria.
|
||||||
|
|
||||||
|
## Supporting Role Communication
|
||||||
|
|
||||||
|
- Community for recruiting users to run mail server.
|
||||||
|
|
||||||
|
- Finance for SNT utility approval.
|
||||||
|
|
||||||
|
- Marketing for 'you are not the product' rationale communication.
|
||||||
|
|
||||||
|
## Appendix: Constraints / objections
|
||||||
|
|
||||||
|
- No one will pay for it.
|
||||||
|
|
||||||
|
This is a free resource. If we want to subsidise it and the concern is people
|
||||||
|
not wanting to stay / top up to use basic funcrtionality we can solve it by
|
||||||
|
giving free SNT as part of SNT onboarding.
|
||||||
|
|
||||||
|
- Free SNT?!
|
||||||
|
|
||||||
|
Yes. For a closed beta limited to 40k people, we can limit the free amount to 5
|
||||||
|
SNT per person, which limits the downside risk this to 200k SNT ($20k at the
|
||||||
|
time of this writing).
|
||||||
|
|
||||||
|
- What about fraud?
|
||||||
|
|
||||||
|
We can use already collected emails as identity and dedup by it. Max downside
|
||||||
|
per email (pre-signed up) is 5 SNT, and to get it out would still be a
|
||||||
|
transaction, as well as a signal to us.
|
||||||
|
|
||||||
|
- How does this scale?
|
||||||
|
|
||||||
|
For open beta we can figure out how to deal with SNT onboarding by e.g. using
|
||||||
|
trustlines.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
For more on rationale of SNT utility, see the whitepaper. Providing onboarding
|
||||||
|
SNT also furthers distribution of tokens as well as transactions on their own, a
|
||||||
|
good.
|
||||||
|
|
||||||
|
This is a hypothesis, but this is the whole basis of Status.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
|
Loading…
x
Reference in New Issue
Block a user