diff --git a/README.md b/README.md index 5527477..fc54c64 100644 --- a/README.md +++ b/README.md @@ -13,15 +13,18 @@ Then submit a Pull Request in this repository. Ideas looking for people -| Idea | Looking for | Swarm lead | In progress? | OKR prios | -|------|-------------|------------|--------------|-----------| -| #58 | Clojure dev | Adam | Yes | p1: p0 | -| #145 | PM | Ricardo | No | | -| #145 | UX | Ricardo | No | | -| #151 | Clojure dev | Ricardo | No | p2: p0 | +| Idea | Looking for | Swarm lead | In progress? | OKR prios | +|------|-------------|------------|--------------|----------------| +| #58 | Clojure dev | Adam | Yes | p1: p0 | +| #145 | PM | Ricardo | No | | +| #145 | UX | Ricardo | No | | +| #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 aborted. Additionally, it can be in limbo which is when it isn't clear what @@ -30,28 +33,29 @@ aborted. ## In Progress :walking_man: -| 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 | -| [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 | -| [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 | -| [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 | -| [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 | -| [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 | -| [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 | -| [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 | -| [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 | +| 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 | +| [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 | +| [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 | +| [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 | +| [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 | +| [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 | +| [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 | +| [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 | +| [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: | 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 | | [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 | diff --git a/ideas/168-paid-master-nodes.md b/ideas/168-paid-master-nodes.md new file mode 100644 index 0000000..ee8c85c --- /dev/null +++ b/ideas/168-paid-master-nodes.md @@ -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 + +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: + +Description: + +Testing Days required: + +## 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/).