├── CNAME ├── .github ├── github-bot.yml └── ISSUE_TEMPLATE.md ├── _data ├── statuses.yaml └── contributors.yaml ├── all.html ├── people.html ├── ideas ├── 314-tribute-to-talk │ ├── mvp-user-a.png │ └── mvp-user-b.png ├── 095-les-service-model │ ├── links.md │ ├── log.md │ └── README.md ├── 369-extensions │ ├── specs.md │ └── research.md ├── 039-group-chat │ ├── roles.md │ ├── glossary.md │ ├── requirements │ │ └── req-1-blocking-menu.md │ ├── user-stories │ │ ├── us-2-reducing-spam.md │ │ ├── us-3-filter-unwanted-content.md │ │ ├── us-1-blocking-a-user.md │ │ ├── us-5-subscribe-to-moderation-providers.md │ │ └── us-4-advanced-filtering-with-smart-contracts.md │ └── README.md ├── 146-status-go-sdk │ ├── PrivateChannels.md │ ├── howto_Sniffing_app_messages.md │ ├── 1to1Channels.md │ ├── PublicChannels.md │ ├── BasicSDK.md │ └── ContactManagement.md ├── 300-core-infra.md ├── 305-core-wallet-account.md ├── 301-core-p2p.md ├── 302-core-mobile-app.md ├── 303-core-desktop.md ├── 912-contribution.md ├── 306-core-browser.md ├── 368-token-economics.md ├── 280-discoverable-trusted-server-nodes │ ├── notes.md │ └── README.md ├── 370-core-ui.md ├── 168-paid-master-nodes │ ├── local-mailserver.md │ └── stt-payment-testing.md ├── 034-react-native-qt │ └── log.md ├── 310-core.md ├── 281-security-process-experiment.md ├── 309-js-protocol-library-webclient.md ├── 293-ulc-integration │ └── README.md ├── 315-core-improvements.md ├── 282-deterministic-builds.md ├── 080-onboarding.md ├── 083-energy-efficient.md ├── 127-SOB-testing-process.md ├── 152-friends-recovery.md ├── 151-ens-usernames.md ├── 275-recyclable-fee.md ├── 386-nim-ewasm.md ├── 279-snt-voting-dapp.md ├── 154-support-web3.js-library.md ├── 254-ultra-light-client │ └── README.md ├── 320-keycard.md ├── 167-extended-automated-testing-for-continuous-delivery │ └── README.md ├── 122-sob-metrics.md ├── 121-swarm-compensation │ ├── models.md │ └── README.md ├── 071-low-traffic.md ├── 312-swarm-janitors.md ├── 225-status-index.md ├── 313-sticker-market │ └── readme.md ├── 322-dao.md ├── 170-wallet-improvements.md ├── 061-app-structure-refinement.md ├── 163-support-erc721.md ├── 120-swarm-process │ ├── permission-less-and-compensated-work.md │ └── town-hall-7-survey-results.md ├── 324-meritocracy.md ├── 090-branch-perf-stats.md ├── 003-erc20-token-support.md ├── 058-mainnet.md ├── 086-push-notif-v2 │ └── 1to1.dot ├── 173-documentation.md ├── 229-hardware-wallet-pro.md ├── 140-sob-improve-onboarding │ └── README.md ├── 088-dapp-experience.md └── 142-wallet-compatibility │ └── README.md ├── .gitignore ├── index.html ├── assets └── main.scss ├── Gemfile ├── TEMPLATE.md ├── _config.yml ├── _includes ├── ideastable.html └── peoplestable.html ├── principles.md └── README.md /CNAME: -------------------------------------------------------------------------------- 1 | ideas.status.im -------------------------------------------------------------------------------- /.github/github-bot.yml: -------------------------------------------------------------------------------- 1 | _extends: probot-settings 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | For ideas, please submit a PR with TEMPLATE.md filled in. 2 | -------------------------------------------------------------------------------- /_data/statuses.yaml: -------------------------------------------------------------------------------- 1 | - Draft 2 | - Active 3 | - Limbo 4 | - Completed 5 | - Aborted 6 | -------------------------------------------------------------------------------- /all.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Ideas 4 | --- 5 | 6 | {% include ideastable.html ideas=site.pages %} 7 | -------------------------------------------------------------------------------- /people.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: People 4 | --- 5 | 6 | {% include peoplestable.html ideas=site.pages %} 7 | -------------------------------------------------------------------------------- /ideas/314-tribute-to-talk/mvp-user-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/status-im/swarms/HEAD/ideas/314-tribute-to-talk/mvp-user-a.png -------------------------------------------------------------------------------- /ideas/314-tribute-to-talk/mvp-user-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/status-im/swarms/HEAD/ideas/314-tribute-to-talk/mvp-user-b.png -------------------------------------------------------------------------------- /ideas/095-les-service-model/links.md: -------------------------------------------------------------------------------- 1 | ## Links 2 | 3 | - [LES Service Model by Felföldi Zsolt](https://github.com/zsfelfoldi/ethereum-docs/blob/master/les/service_model.md) 4 | 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.* 2 | !.github 3 | !.gitignore 4 | !*.md 5 | !*.scss 6 | _site 7 | .sass-cache 8 | .jekyll-metadata 9 | 10 | # allow any files in ideas directories 11 | !ideas/*/* 12 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Home 4 | --- 5 | 6 |
A space for our ideas - our current, past and future efforts.
9 | 10 || Lead Contributor | 10 |Idea | 11 |Title | 12 |Category | 13 |Success metrics? | 14 |Exit criteria? | 15 |Clear roles? | 16 |Future iterations? | 17 |
|---|---|---|---|---|---|---|---|
| {{page.lead-contributor|xml_escape}} | 22 |{{page.id|xml_escape}} | 23 |{{page.title|xml_escape}} | 24 |{{page.category|xml_escape}} | 25 |{% if page.success-metrics %}✅ {% else %}❌{% endif %} | 26 |{% if page.exit-criteria %}✅{% else %}❌{% endif %} | 27 |{% if page.clear-roles %}✅{% else %}❌{% endif %} | 28 |{% if page.future-iterations %}✅{% else %}❌{% endif %} | 29 |
| Idea | 7 |Looking for | 8 |Idea status | 9 |OKRs | 10 |
|---|---|---|---|
| 23 | {{page.id|xml_escape}} 24 | | 25 |26 | {% for role in page.roles-needed %} 27 | {{ role }} 28 | {% endfor %} 29 | | 30 |{{ page.status }} | 31 |
32 | {% for okr in page.okrs %}
33 | {{ okr }} 34 | {% endfor %} 35 | 36 | |
37 |
| contributor | 49 |Ideas | 50 |
|---|---|
| {{contributor|xml_escape}} | 58 |59 | {% for page in ideas %} 60 | {% if page.contributors contains contributor %} 61 | {{page.id|xml_escape}} 62 | {% endif %} 63 | {% endfor %} 64 | | 65 |
62 | (sample screenshots for illustration)
63 |
64 | ### Minimum Viable Product
65 |
66 | Description: migrate `wallet` and `profile` tabs
67 | Goal Date: 2 weeks after start (target start date: 2018-01-02)
68 | Started: 2018-01-06
69 | Completed: 2018-02-09
70 |
71 | __WARNING__ Related mockups are a dependency for this iteration.
72 |
73 | * migrate existing profile to the `profile` tab (according to MVP mockups)
74 | * update `wallet` tab (according to MVP mockups)
75 | * migrate to tab based navigation (as described in #33)
76 | * remove tabs `contacts` and `discover`
77 | * prepare a detailed plan for `home` tab
78 |
79 | ### Iteration 1
80 |
81 | Description: migrate `home` tab
82 | Goal Date: 3 weeks after start
83 | Started: 2018-02-12
84 | Completed: 2018-03-22
85 |
86 | * Restyle profile
87 | * Update home tab
88 | * Rework home "add"
89 | * Refine chats
90 | * Remove old commands
91 |
92 | __WARNING__ Related mockups are a dependency for this iteration.
93 |
94 | ## Post-Mortem
95 |
96 | The scope of the iteration was very broad. Probably our biggest set of changes so far!
97 |
98 | Nonetheless this swarm took significantly more time than expected.
99 | We identified a number of area that could be improved:
100 |
101 | * better scoping and time spent upfront to detail atomic tasks
102 | * assign task per iteration and let assignees estimate them
103 | * have a fixed scope per iteration: no new issue can be added during an iteration
104 | * have a fixed team, at least per iteration (limit turnaround)
105 | * improve test automation and ensure PRs do not introduce regression
106 | * improve communication related to technical cost / hidden complexity
107 |
108 | ## Copyright
109 | Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
110 |
--------------------------------------------------------------------------------
/ideas/163-support-erc721.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: 163-support-erc721-tokens
3 | title: Support ERC721 tokens
4 | status: Draft
5 | created: 2018-04-10
6 | category: core
7 | lead-contributor: rachelhamlin
8 | contributors:
9 | - rachelhamlin
10 | - jeluard
11 | - goranjovic
12 | - denis-sharypin
13 | exit-criteria: yes
14 | success-metrics: yes
15 | clear-roles: yes
16 | future-iterations: no
17 | ---
18 |
19 | ## Preamble
20 |
21 | Idea: 163
22 | Title: Support ERC721 tokens
23 | Status: Draft
24 | Created: 2018-04-10
25 |
26 | ## Summary
27 | Add ERC721 support to Status wallet so that users can see their CryptoKitties, Punks, Celebrities, etc. alongside their other assets.
28 |
29 | ## Swarm Participants
30 | - Lead/PM: [@rachelhamlin](https://github.com/rachelhamlin)
31 | - Testing & Evaluation:
32 | - Contributor: [@jeluard](https://github.com/jeluard)
33 | - Contributor: [@goranjovic](https://github.com/goranjovic)
34 | - UX: [@denis-sharypin](https://github.com/denis-sharypin)
35 |
36 | ## Product Overview
37 |
38 | ERC721 tokens, or non-fungible tokens (NFTs), represent unique assets on the blockchain. The ability to use rare digial assets as a store of value has spawned a large market of digital collectibles.
39 |
40 | With 100+ digital collectibles on the market and a combined sales volume greater than $50MM, it's important that we allow users to access their NFT collections inside Status right alongside their ETH and ERC20 tokens.
41 |
42 | The two primary cases we need to support are:
43 | 1. Having my existing collectibles in my Status wallet
44 | 2. Buying or receiving new collectibles and seeing them in my Status wallet
45 |
46 | Additional use cases may focus on gifting collectibles from one user to another, or sending collectibles in a chat.
47 |
48 | ### Product Description
49 |
50 | ##### For already owned crypto assets
51 |
52 | Users should be able to view their collection of NFTs in a dedicated section of their Status wallet.
53 | Tokens associated with a user's Mainnet address should appear there automatically.
54 |
55 | Any ERC721 token should be supported, and individual assets within a collection should display available metadata such as name or number, properties, creation date, etc. To whatever extent possible, we can standardize the metadata displayed for each type of collectible and provide a link to the DApp for more.
56 |
57 | ##### For newly purchased crypto assets
58 |
59 | When a user buys a new collectible through some other browser, it should automatically appear in their Status wallet. Same goes for collectibles that can be gifted, as is the case with Cryptokitties; Status should recognize when a user receives a new collectible as a gift.
60 |
61 | A user should also be able to purchase collectibles from the Status browser, and the collectible should appear in their wallet.
62 |
63 | Initially we can use marketplaces to support this by consuming metadata from [Opensea.io](https://opensea.io/) or [Rarebits.io](https://rarebits.io/), but users should also be able to purchase new collectibles inside each DApp.
64 |
65 | ### Requirements & Dependencies
66 |
67 | Potential dependency on Status extensions (formerly #101)
68 |
69 | ### Minimum Viable Product
70 | Goal Date:
71 |
72 | Description:
73 |
74 | As there is no way to automatically browse all the existing collectible types, we'll focus on individual support for any collectible DApps that Status currently features.
75 |
76 | - UX/UI for collectibles in wallet:
77 | - Browse collections (categories/types)
78 | - Browse collectibles
79 | - View individual collectible
80 | - Add wallet support for any ERC721 featured in Status Selected DApps:
81 | - CryptoFighters
82 | - CryptoKitties
83 | - CryptoPunks
84 |
85 | ### Iteration 1
86 | - Expand collectible support
87 | - Add profile showcase for users to display their collections
88 | - Purchase new collectibles via a marketplace
89 |
90 | ### Exit Criteria
91 | TK
92 |
93 | ### Success Metrics
94 | TK
95 |
96 | ## Supporting Role Communication
97 |
98 | ## Copyright
99 | Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
100 |
--------------------------------------------------------------------------------
/ideas/120-swarm-process/permission-less-and-compensated-work.md:
--------------------------------------------------------------------------------
1 | ## Background
2 | This document outlines the development and participation of contributors to
3 | Status. In particular we have found: As an open source organisation, we should
4 | improve and further incentivize community involvement and development Status,
5 | where people feel comfortable working on whatever they want There are Core
6 | Contributors [CC] at Status who are paid salaries to solve particular problems.
7 |
8 | The purpose of the document is to help core contributors understand how Status
9 | currently organizes swarms (and their shortcomings) and steps towards improving
10 | this process.
11 |
12 | ## Swarms: permission-less and compensated work within Status
13 |
14 | Suppose Person A is undertaking a task, and Person B is funding it. Who should
15 | be evaluating Person A's work?
16 |
17 | Naturally it makes sense for Person B to, as they are assuming the risk, though
18 | they might choose to delegate this responsibility to a trusted person.
19 |
20 | ### Current Model
21 |
22 | In our case, Carl and Jarrad (major SNT holders) are to a large extent
23 | delegating funding of work through Nabil (COO) and, by further extension, Status
24 | core contributors. Decision making is done by core contributors. This makes up
25 | the 'main Status entity', which is currently a form of 'DAO 0.5'.
26 |
27 | So how do we currently want to evaluate work? As an entity, we can choose to
28 | delegate this evaluation to paid core contributors as swarm leads (trusted
29 | model). Additionally, we can choose to require PM/UX/Eng representation for
30 | user-facing swarms, as well as a minimum of three contributors per swarm. These
31 | are evaluation and funding mechanisms we can choose to adapt and formalize,
32 | where 'contributor time' is a form of funding mechanism, as salary compensation
33 | is decoupled from the swarm process.
34 |
35 | ### Shortcomings
36 | One shortcoming of this is it does not support funding from other SNT holder and
37 | the wider community. The evaluation and funding mechanism for this could be
38 | improved/adapted. Similarly, requiring specific roles or minimum contributor
39 | count is an arbitrary restriction that isn't desirable as a general compensation
40 | mechanism for getting work done. Example: lone hacker in middle of nowhere doing
41 | something that is a public good in Status and a funder believes they are able to
42 | execute on by themselves. Specifically what other forms of evaluation and
43 | funding mechanisms we want to make easy is something that we will find out as
44 | time goes on, largely through SOB and its experiments.
45 |
46 | What happens with work that doesn't fall neatly within existing categories?? It
47 | depends on the nature of it. It might be completely isolated from the core app,
48 | e.g. in the form of organizing meetups, writing content, developing a dapp that
49 | doesn't require coordination with main code base, etc. If it does involve
50 | changes in the core app, there's a selection mechanism where we can choose to
51 | accept or deny such work (example: pull requests in status-react). Since we are
52 | open source, in case of strong disagreement, one could imagine a fork and
53 | alternative app artifact being distributed. But in the 99% case it would be in
54 | the interest of the swarm, as well as its funder, that this work gets into the
55 | core app. One could look at Status Core Contributors as custodians of the core
56 | app, and this swarm would likely need to coordinate with CCs to ensure their
57 | work has impact.
58 |
59 | ### Where to go from here?
60 |
61 | 1. Acknowledge that:
62 |
63 | a) We will experiment with Swarm evaluation and funding mechanisms (both time
64 | and money)
65 |
66 | b) Swarms experiments won't be restricted by constraints outlined below in [2]
67 |
68 | c) To the extent experiments are successful, this might impact below constraints
69 |
70 | 2. Encode the following evaluation and funding mechanism for salaried core
71 | contributors:
72 |
73 | a) Delegate evaluation of swarm's performance to core contributors in a swarm
74 | (evaluation process still tbd)
75 |
76 | b) Require PM/UX/Eng contributors for user-facing swarms
77 |
78 | c) Require a minimum of three core contributors per swarm
79 |
--------------------------------------------------------------------------------
/ideas/324-meritocracy.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: #324-meritocracy
3 | title: Meritocracy
4 | status: implementation
5 | lead-contributor: richard/jarrad
6 | contributors: jarrad, ceri, jb, rajanie
7 |
8 | budget:
9 | - actual: xxx
10 | - estimate: yyy
11 | - currency: ETH/USD/SNT
12 | ---
13 |
14 | # Swarm proposal
15 |
16 | ## Summary and Goal(s)
17 | Kudos DApp - an experiment with awarding kudos each week between Status contributors. Heavily inspired by Giveth’s awesome RewardDAO concept, the idea is that contributors get a weekly allowance of SNT which they can distribute amongst other contributors as they see fit. The awarded totals can be withdrawn by contributors who have earned kudos.
18 |
19 | More here: https://discuss.status.im/t/kudos-rewards-building-the-status-meritocracy/1019
20 |
21 | **Swarm goals**
22 | * Create DApp
23 | * Launch DApp
24 | * Encourage regular (weekly) CC interaction with DApp to recognise others
25 |
26 | ## Communication
27 | Channel: [#324-meritocracy](https://get.status.im/chat/public/324-meritocracy)
28 |
29 | Sync frequency: async via text
30 |
31 | ## Research
32 | * Influenced by Giveth's Reward DAC [concept](https://wiki.giveth.io/dac/contributors-guide//).
33 | * Initial proposal and discussion [here](https://docs.google.com/document/d/1QN2SZ8QO-7jfH8rAKLVDAB5LxuKvBScodWoiRfejFkM/edit#heading=h.tommnlxre23w).
34 | * Idea developed on Discuss [here](https://discuss.status.im/t/kudos-rewards-building-the-status-meritocracy/1019).
35 | * Collected sign-ups [here](@people-ops) - 42 people signed up 🎉
36 |
37 |
38 | ## Specification
39 |
40 | * DApp spec [here](https://github.com/status-im/meritocracy) courtesy of @jarrad
41 |
42 | ## Implementation
43 |
44 | **Timeline**
45 | [Mid-Feb - 5 April]
46 | - [x] Deploy DApp to Mainnet (@richard)
47 | - [ ] Add @jb and @rajanie as additional `Admins` if possible (@richard) - only the contract owner (richard) can add admins
48 | - [x] Seek help with adding Design to the UI (@richard/@people-ops)
49 | - [x] Test DApp and share feedback (@people-ops)
50 | - [x] Create budget and plan for transfer of SNT into contract (@people-ops / finance)
51 | - [x] Create People Ops site page / FAQ (@people-ops) - https://people-ops.status.im/meritocracy/
52 | - [x] Draft launch post for Discuss (@people-ops)
53 | - [x] Launch on 5 April with post on Discuss (@people-ops) - delayed to 8 April
54 | - [x] Present/demo in TH (@richard / @people-ops)
55 | - [ ] Schedule weekly reminders to ping all contributors to let them know a new reward cycle has started (@people-ops)
56 | - [ ] Leaderboard UI
57 |
58 | **Updates**
59 | * 22 March - Added @ceri as admin in Ropsten testnet
60 | * 25 March - @richard and @ceri walkthrough to get admin role set up, before doing allocations in mainnet.
61 | * 26 March - pinged Finance about funding the wallet with SNT & ETH. Did another test run on Ropsten of the weekly allocation by admin of funds to the meritocracy contract.
62 | * DApp does not currently have leaderboard UI, but the contract can be queries for each individual's balance, so this info can be pulled manually if needed.
63 | * 28 March - Finance have transferred a small amount of ETH and SNT into @ceri's Metamask wallet ready for first cycle (equivalent to SNT 5 per participant).
64 | * 1 April - 5 SNT distributed to all participants.
65 | * 3 April - troubleshooting issues with Richard. Drafting launch comms
66 | * 8 April - launched with 10 SNT allocated.
67 |
68 |
69 | ## Maintenance
70 |
71 | * @ceri, @rajanie, and @jb will act as DApp `admin` to make the weekly allocation of SNTs.
72 | * Ask CCs to log any issues either in #324-meritocracy or creating an issue [here](https://github.com/status-im/meritocracy/issues).
73 | * Review quarterly (first review early July 2019) to review success of DApp:
74 | * Engagement - > 50% of core contributors (currently = 32 people) using the DApp regularly (at least once a month)
75 | * Functionality - all open issues closed and volume of problems reported reduced
76 | * Feedback - anecdotal feedback from users positive, do CCs enjoy and benefit from using the DApp?
77 | * Utility - does the data generated through the DApp accurately represent a Meritocracy, or are there any concerns/issues.
78 |
79 | ## Copyright
80 |
81 | Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
82 |
--------------------------------------------------------------------------------
/ideas/121-swarm-compensation/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: 121-swarm-compensation
3 | title: Swarm Compensation Experiments
4 | status: Aborted
5 | created: 2018-04-02
6 | category: openbounty
7 | lead-contributor: martinklepsch
8 | contributors:
9 | - martinklepsch
10 | - oskarth
11 | - carlbennetts
12 | - jason
13 | exit-criteria: yes
14 | success-metrics: yes
15 | clear-roles: yes
16 | future-iterations: yes
17 | ---
18 |
19 | ## Preamble
20 |
21 | Idea: 121-swarm-compensation
22 | Title: Swarm Compensation
23 | Status: In Progress
24 | Created: 2018-04-02
25 | Related: 120-swarm-process
26 |
27 | ## Summary
28 | Ultimately we would like Status to become a public good, owned, developed and ran by it's very own users. In order to achieve that we need to open up our processes for contributions from "the outside" and establish ways for users to propose & incentivise projects they see as important.
29 |
30 | Swarms are our current attempt at enabling this. They are ephemeral teams forming to achieve a specified goal and disbanding once achieved or failure becomes apparent. Their defined lifetime and -cycle encourage constant re-evaluation &. evolution.
31 |
32 | Compensating contributors for their work is an important component of this and where `120-swarm-process` focuses on establishing a baseline of processes that are open to everyone this idea will focus on experimentally devising compensation mechanisms.
33 |
34 | ## Swarm Participants
35 |
36 | - Lead Contributor: @martinklepsch
37 | - Contributor ('payment'): @jason / @carl
38 | - Contributor: @oskarth
39 | - Evaluation ('compensation criteria'): Voting mechanism among experiment participants (Polly survey)
40 |
41 | ## Product Overview
42 |
43 | This swarm will define **four** experimental compensation mechanisms and recruit upcoming swarms to participate in this experiment.
44 |
45 | The compensation mechanisms should be judged according to the following criteria:
46 |
47 | - **Fairness** — if we're not fair we will fail to retain contributors. While hopefully obvious employees of Status the company and community contributors should be treated equally.
48 | - **Ease of use** — we want to ship a new kind of platform, not get bogged down in "paperwork"
49 | - **More attractive than salary** — as outlined in `120-swarm-process` there are two types of swarms:
50 | - **`Type-1`** is the ideal, defined, ran and compensated by the community
51 | - **`Type-2`** is the currently predominant form. Defined, ran and compensated by employees of Status, the company.
52 | - While coming up with a nice model for `Type-1` swarms we also would like to encourage every Status employee to participate in similar ways as community contributors.
53 |
54 | ## Checkpoints
55 |
56 | #### Checkpoint 1 — `2018-04-13`
57 |
58 | - Define at least two compensation models
59 | - Get buy-in from major SNT holder to fund experiments
60 | - Talk to #peopleops how we can admin/structure this
61 | - Reach out to upcoming swarms and convince them to participate
62 | - Broadcast intention behind these experiments into community and encourage submission of ideas. (Medium post?)
63 |
64 | #### Checkpoint 2 — `2018-04-27`
65 |
66 | - Define two more compensation models
67 | - Again, reach out and convince upcoming swarms
68 | - If possible consider a community submitted idea/swarm
69 |
70 | #### Checkpoint 3 — `2018-05-31`
71 |
72 | - Summarize learnings and archive them in ideas repository.
73 | - Write up what these learnings mean for the OpenBounty project specifically and how they should affect the development of the product.
74 |
75 | ## Exit Criteria
76 |
77 | Conduct four experiments and evaluate them based on the criteria outlined above. Give recommendation on what kind of compensation mechanism should be enabled by Status OpenBounty.
78 |
79 | ## Metrics Affected
80 |
81 | ### OpenBounty Transaction Volume
82 |
83 | While these experimental compensation payouts won't happen through the OpenBounty platform these transactions could still be counted as part of OpenBounty as they will ultimately inform what compensation models will find their way into OpenBounty.
84 |
85 | ### SNT Utility
86 |
87 | Once these experiments translate to changes in the OpenBounty product SNT holders will be able to directly support changes they see as important. This will increase SNT utility and distribute ownership of the Status platform.
88 |
89 | ## Copyright
90 | Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
91 |
--------------------------------------------------------------------------------
/ideas/090-branch-perf-stats.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: 090-branch-perf-stats
3 | title: Make branch performance stats visible
4 | status: Draft
5 | created: 2018-03-12
6 | category: core
7 | lead-contributor: PombeirP
8 | contributors:
9 | - jason
10 | - adambabik
11 | exit-criteria: no
12 | success-metrics: no
13 | clear-roles: no
14 | future-iteration: no
15 | roles-needed:
16 | - DevOps
17 | - Go dev
18 | okrs:
19 | - "[P4]: Objective: Implement continuous delivery"
20 | - "[P0]: KR: >80% automated test coverage"
21 | ---
22 |
23 | ## Preamble
24 |
25 | Idea: 090
26 | Title: Make branch performance stats visible
27 | Status: Draft
28 | Created: 2018-03-12
29 |
30 | ## Summary
31 |
32 | Right now there is no visibility of how a PR impacts performance before it is merged to develop. It would be highly beneficial to have automated performance tests run and attach info to each Jenkins build, so that we can have historical records and compare current branch with parent branch.
33 |
34 | ## Swarm Participants
35 |
36 | - Lead Contributor: PombeirP
37 | - Contributor (Go): adambabik
38 | - Contributor (DevOps): jason
39 |
40 | ## Product Overview
41 |
42 | Right now, we run end-to-end tests but we don’t collect performance metrics on them. That’s throwing away a lot of valuable information that can inform discussions and decisions down the road. It’s important to have metrics on every PR branch and not just on develop, so that contributors have visibility into how their changes will potentially be affecting the stable branch.
43 |
44 | ### User Stories
45 |
46 | Adding measurements like CPU, memory and network usage to each build would allow having a better idea of a branch performance quality, as well as the long term trend. This would serve to inform decisions, pull request reviews, and potentially have a single source of truth in terms of low-level performance tests.
47 |
48 | ### Requirements & Dependencies
49 |
50 | Defining the best option in terms of CI/CD platform. Although this swarm doesn't technically require a particular platform, some lend themselves better to exposing and surfacing this type of information.
51 |
52 | ### Security and Privacy Implications
53 |
54 | N/A
55 |
56 | ## Dates
57 |
58 | > Description of deliverables at a given date, for example each Town Hall (default).
59 | > Add more iterations as required.
60 | >
61 | > Evaluator accepts responsbility to checkin at Goal dates, forces discussion to
62 | > continue implementation or recommend disband and post-mortem.
63 | >
64 | > Upcoming Town Halls this quarter:
65 | > 2018-04-23, 2018-05-07, 2018-05-21, 2018-06-04, 2018-06-18
66 |
67 | ### Minimum Viable Product
68 |
69 | > Mandatory, completes the Idea in the fastest route possible, can be hacky,
70 | > needed to feel progress. See https://imgur.com/a/HVlw3
71 |
72 | Goal Date:
73 |
74 | Description:
75 |
76 | A PoC would start with the lowest level (status-go) to guarantee that the building blocks are sound. This would add a report to the CI build artifacts containing the results for one representative use case (e.g. creating 2 accounts and sending 100 1:1 chat messages to each other sequentially), measuring only time taken and network traffic for the PoC. Report would be potentially consist of a CSV file and an HTML report file. The absolute requirement is that one of the files lends itself well to automated processing, including e.g. pasting to a Google Sheets file for further processing.
77 |
78 | **NOTE**: TeamCity allows collecting custom statistical values from each build (just by outputting a value in a special format to the console) and then aggregating in a time-series graph:
79 |
80 | 
81 |
82 | ### Iteration 1
83 |
84 | Goal Date:
85 |
86 | Description:
87 |
88 | ## Success Metrics
89 |
90 | - More than 66% of developers surveyed think that they can rely on the CI system to easily compare the measured properties of each build between to branches.
91 | - Builds with a lower quality (network consumption, etc) fail automatically.
92 |
93 | ## Exit criteria
94 |
95 | - status-go and status-react builds are handled and success metrics are fulfilled for those two teams.
96 |
97 | ## Supporting Role Communication
98 |
99 | N/A
100 |
101 | ## Copyright
102 |
103 | Copyright and related rights waived
104 | via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
105 |
--------------------------------------------------------------------------------
/ideas/003-erc20-token-support.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: 003-er20-token-support
3 | title: ERC20 Token Support
4 | status: Done
5 | created: 2017-11-08
6 | category: core
7 | lead-contributor: jeluard
8 | contributors:
9 | - jeluard
10 | - goranjovic
11 | - 3esmit
12 | - asemiankevich
13 | exit-criteria: no
14 | success-metrics: no
15 | clear-roles: yes
16 | future-iterations: yes
17 | ---
18 |
19 | ## Preamble
20 |
21 | Idea code: DEV#003
22 | Status: Done
23 | Created: 2017-11-08
24 | Started: 2017-11-14
25 | Ended: 2018-01-04
26 |
27 | ## Summary
28 |
29 | Add ERC20 support
30 |
31 | ## Idea proposal
32 |
33 | As a user I want my [ERC20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md) tokens to be first class citizen.
34 |
35 | ## Swarm Participants
36 |
37 | * Lead Contributor: @jeluard
38 | * Contributor: @goranjovic
39 | * Support: @3esmit
40 | * Tester: @asemiankevich
41 |
42 | Swarm channel: **3-erc20**
43 |
44 | ## Requirements
45 |
46 | A user should be able to manage its ERC20 tokens pretty much the same way as ETH.
47 | In particular `wallet` and `send` command must support ERC20 tokens.
48 |
49 | As a first step considered ERC20 tokens will be based on a static list embedded in the application. This might be revisited later (see #18).
50 |
51 | ERC20 extensions might also be considered: [ERC223](https://github.com/ethereum/EIPs/issues/223), [Minime](https://github.com/Giveth/minime) ([SNT](https://etherscan.io/token/StatusNetwork) itself is a Minime token).
52 |
53 | ## Zeplin references
54 |
55 | * Assets https://zpl.io/blwD8ka
56 | * wallet main screen (with list of assets shown + managin assets) https://zpl.io/b6d1eNV
57 |
58 | ## Board
59 | https://github.com/status-im/status-react/projects/4
60 |
61 | ## Goals & Implementation Plan
62 |
63 | Following features should be considered:
64 |
65 | * list wallet tokens
66 | * provide default token
67 | * send tokens to a contact
68 | * request token from a contact
69 | * get current price
70 | * get historical price
71 | * get token details (historical price, market cap, # tokens, volume, crowdsale)
72 | * list historical transactions
73 | * add gas and data support when sending transaction
74 | * chart graphs
75 |
76 | Can be split in 4 categories:
77 |
78 | * wallet token details (access and management)
79 | * token details (static and dynamic data)
80 | * token price details
81 | * token transactions
82 |
83 | Token details will require some metadata currently not available in ethereum.
84 | Token price details can be provided by `cryptocompare`.
85 |
86 | ### Minimum Viable Product
87 |
88 | List user tokens and display token details
89 |
90 | Goal Date: 2017-12-01
91 | Started: 2017-11-15
92 | Completed: 2017-12-05
93 | Description: token list and details
94 |
95 | ### Iteration 1
96 |
97 | Allow sending and requesting tokens.
98 | Show token historical data and update percentage info
99 |
100 | Goal Date: 2017-12-15
101 | Started: 2017-12-06
102 | Completed: 2018-01-04
103 | Description: send/request tokens
104 |
105 | ### Post Mortem
106 |
107 | #### What could be improved
108 |
109 | [App structure refinement](#61) was defined during the first iteration and significantly impacted the scope of this iteration. Specifically @goranjovic work around asset details had to be removed.
110 |
111 | A number of technical elements has been discovered and added to the todo list during development. It appears primordial to spend some time during the first days to have a detailed understanding of what's to be done and technical impacts. It appears our decentralized nature makes some usually simple things harder to implement.
112 |
113 | Finally we discovered pretty late some technical limitations that prevented us to implement some features (e.g. token transaction history).
114 |
115 | #### What went well
116 |
117 | Overall implementation went smoothly and we had fast test cycle thanks to @asemiankevich .
118 |
119 | ## Appendix: archive of future work
120 |
121 | ### Known limitations
122 |
123 | Due to technical constraints some features have been left out and will be addressed after prerequisites have been implemented.
124 |
125 | * no token transaction history (etherscan API doesn't support that)
126 | * send command: no token support (requires upgrade to API, support for deep linking)
127 | * request disabled for tokens (requires upgrade to API)
128 |
129 | ## Copyright
130 | Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
131 |
--------------------------------------------------------------------------------
/ideas/058-mainnet.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: 058-mainnet
3 | title: Use Mainnet as the default network
4 | status: Done
5 | created: 2017-12-08
6 | category: core
7 | lead-contributor: adambabik
8 | contributors:
9 | - adambabik
10 | - annadanchenko
11 | - themue
12 | - rasom
13 | - chadyj
14 | exit-criteria: yes
15 | success-metrics: yes
16 | clear-roles: yes
17 | future-iterations: yes
18 | roles-needed:
19 | - Clojure dev
20 | okrs:
21 | - "[P1]: Objective: Beta is launched successfully"
22 | - "[P0]: KR: 5k daily active users"
23 | ---
24 |
25 | ## Preamble
26 |
27 | Idea: 58-mainnet-default
28 | Title: Use Mainnet as the default network
29 | Status: In progress
30 | Created: 2017-12-08
31 |
32 |
33 | ## Summary
34 | Alpha builds of Status should default to Mainnet. We should be using Status in a real-world environment.
35 |
36 | ## Swarm Participants
37 |
38 | - Lead Contributor: adambabik
39 | - Testing & Evaluation: annadanchenko
40 | - Contributor: themue
41 | - Contributor: roman (supportive role; still in need of one Clojure dev)
42 | - PM: chadyj
43 |
44 | ## Product Overview
45 |
46 | Currently the Status alpha builds use testnet, but using Mainnet is a key milestone for the public launch of Status. There will be potentially major performance and security implications so the goal is to surface these issues early enough by testing the app in a real-world environment.
47 |
48 | From a users perspective, Mainnet should be a default network as it is required by most popular DApps, and is needed for real transactions, so the full potential of Status can't be seen until we switch. The other networks will continue to be available, e.g. for developers and tests.
49 |
50 | ## Product Description
51 |
52 | This is a default setting change, so there aren't any user facing options. The other networks are still visible.
53 |
54 | Some users, such as DApp creators may want to test their app on testnet (or some other use case), so they will be able to toggle networks as can be done currently.
55 |
56 | ## Requirements & Dependancies
57 |
58 | Security and performance should should be discussed and considered.
59 |
60 | Also, several DApps should be tested.
61 |
62 | ## Minimum Viable Product
63 |
64 | **This MVP does not mean that after it's finished we release the app with Mainnet enabled by default but defines prerequisites that should be done before we consider doing so.**
65 |
66 | Goal Date: 2018-04-14
67 |
68 | 1. [X] Development of required components is done. The work is tracked here: https://github.com/orgs/status-im/projects/15,
69 | 1. [X] There is a Status App build with mainnet available,
70 | 1. [X] All components have been tested by the Test Team,
71 | 1. [X] Mainnet is default in dev/nightly builds.
72 |
73 | ## Audit iteration
74 |
75 | Goal Date: 2018-05-31
76 |
77 | 1. [x] Security audit is finished by an independent company,
78 | 1. [x] The final report is available,
79 | 1. [x] All reported security issues and recommendations are evaluated and finished.
80 |
81 | ### Updates
82 |
83 | #### 2018-04-26
84 |
85 | - security audit got extended to May 7th,
86 | - security issues are tracked with `security` label in [status-react](https://github.com/status-im/status-react/issues?q=is%3Aissue+is%3Aopen+label%3Asecurity) and [status-go](https://github.com/status-im/status-go/issues?q=is%3Aissue+is%3Aopen+label%3Asecurity),
87 | - [a feature request](https://github.com/status-im/status-react/issues/3994) to allow custom upstream address was created
88 |
89 | #### 2018-06-05
90 |
91 | - the final readout took place on May 7th,
92 | - there were no new issues reported,
93 | - all issues were fixed; there are still recommendations that we decided to implement but they are not blockers for beta. Moreover, more issues were identified during Risk Management meetings.
94 |
95 | ## Status App Bug Bounty iteration ~~(CANCELED)~~
96 |
97 | ~~**This iteration got canceled as we do not plan to announce Status App Bug Bounty for the time being.**~~
98 |
99 | Goal Date: 2018-04-??
100 |
101 | 1. [ ] Status App Bug Bounty program is announced and will last for at least X weeks.
102 |
103 | ### Updates
104 |
105 | #### 2018-06-05
106 |
107 | We actually decided to run Status App But Bounty in June. The blog post should appear this week.
108 |
109 | ## Success and exit criteria
110 |
111 | 1. Mainnet is operational just like testnets and availalbe in dev/nightly builds,
112 | 1. The audit is completed and there are no low, medium, high or critical issues.
113 |
114 | ## Copyright
115 | Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
116 |
--------------------------------------------------------------------------------
/ideas/120-swarm-process/town-hall-7-survey-results.md:
--------------------------------------------------------------------------------
1 | # Raw data from survey after Town Hall 7
2 |
3 | ## 1. It is clear to me when a swarm starts
4 |
5 | (sent to #general)
6 |
7 | Strongly Agree 12% (6)
8 | Agree 54% (28)
9 | Neutral 25% (13)
10 | Disagree 10% (5)
11 | Strongly Disagree
12 |
13 | Average: 3.7
14 | Total Votes: 52
15 |
16 | ### Comments
17 |
18 | > Neutral: WHere are they announced, who validates and create the slack channel?,
19 | >
20 | > Disagree: Sometimes the lines between in progress & draft seems to be a bit blurred ( some work is done before is officially in progress for example).
21 | >
22 | > Agree: Oskar's work on that site (and the fact I have had to review a lot of stuff there for bounties) has left me with great insight into the process.
23 | >
24 | > Neutral: I'm not sure how swarms officially start. Some seem to start without an idea and others seem to stay in draft.
25 | >
26 | > Neutral: Well, it's like clear, but i'd add some global notification (maybe in core channel) like '@channel - this is official start of the swarm #XXXX, join the respective channel!'
27 | >
28 | > Neutral: Start of work and formal establishment of the swarm may overlap.
29 | >
30 | > Agree: I *think* it's when a PR has been requested.,
31 | >
32 | > Agree: It seems that swarms can start even when they are in draft mode - or is that not the case. I guess hence the relative clarity
33 | >
34 | > Disagree: If a swarm lead is not super clear about when the swarm actually starts, then it's not clear when one starts.
35 | >
36 | > Disagree: There is a certain amount of work required to get the swarm started in the first place - defining scope and all that. So, what is the difference between the moment this prep work starts and the moment when actual swarm starts?,
37 | >
38 |
39 | ## 2. It is clear to me when a swarm ends
40 |
41 | (sent to #general)
42 |
43 | Strongly Agree 16% (8)
44 | Agree 49 (28)
45 | Neutral 29% (15)
46 | Disagree 6% (3)
47 | Strongly Disagree
48 |
49 | Average: 3.7
50 | Total Votes: 51
51 |
52 | ### Comments
53 |
54 | > Agree: Scope is done, milestones achieved,
55 | >
56 | > Agree: Highly depends on swarm,
57 | >
58 | > Neutral: not enough data to answer this, it is clear on paper (when exit criteria are met) but I would like to see it before in action.
59 | >
60 | > Strongly Agree: OKRs and clear exit criteria make this much easier and we seem to be developing an org shorthand (P0, P1 etc) that allows us to talk about complex things quickly and simply enough for everyone to get a handle on things. This should be strongly encouraged.
61 | >
62 | > Agree: It requires checking after a while whether it hasn't been re-activated, but the concept is clear.
63 | >
64 | > Neutral: Who validates the success metrics?
65 | >
66 | > Agree: All OKRs and exit criteria have been met.,
67 | >
68 | > Neutral: Feels a little less clear and seems as though some swarms with remaining iterations get overshadowed by new swarms or ideas.
69 | >
70 | > Neutral: Depends on how clear is exit criteria
71 | >
72 | > Disagree: The whole point of a swarm is to be somewhat eternal and yet somewhat ephemeral. To say when a swarm ends is kind of... non sequiter? Would that be the correct word? In any case, it never really ends when started up imv.
73 | >
74 |
75 | ## 3. It is clear to me what it means for a swarm to be well-defined
76 |
77 | (sent to #general)
78 |
79 | Strongly Agree 10% (5)
80 | Agree 61% (31)
81 | Neutral 25% (13)
82 | Disagree 4% (2)
83 | Strongly Disagree
84 |
85 | Average: 3.8
86 | Total Votes: 51
87 |
88 | ### Comments
89 |
90 | > Disagree: I dont know how is this well-defined right now but it may be my personal view. In terms of scope mostly. Like all swarms (almost) are some kind of feature-based (like fast-status for ex) but scope is not well defined, like it is not only the issues fixing to me but it is achieving some UX cases that we can check with real users (in 90 % cases). So personally i think this could be improved and stated more clearly, like which scenarios (UX cases / user stories / whatever ) we want to achieve in terms of particular swarm (team) and separate them to iterations according to the workload and capacity
91 | >
92 | > Agree: Must have a specific set of _achievable_ OKRs and exit criteria and resources that can dedicate some time.
93 |
94 | ## 4. It is clear to me what is expected of a swarm lead
95 |
96 | (sent to #swarms)
97 |
98 | Strongly Agree 15% (4)
99 | Agree 63% (17)
100 | Neutral 15% (4)
101 | Disagree 7% (2)
102 | Strongly Disagree
103 |
104 | Average: 3.9
105 | Total votes: 27
106 | Agree or strongly agree: 78%
107 |
108 | ### Comments
109 |
110 | No comments.
111 |
--------------------------------------------------------------------------------
/ideas/280-discoverable-trusted-server-nodes/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: 280-discoverable-trusted-server-nodes
3 | title: Discoverable And Trusted Server Nodes
4 | status: Active
5 | created: 2018-06-07
6 | category: core
7 | lead-contributor: adambabik
8 | contributors:
9 | - "Richard Ramos (@richard-ramos), Smart Contract Developer"
10 | - "Andrea Maria Piana (@cammellos), Clojure Developer"
11 | - "Adrià Cidre (@adriacidre), Go Developer"
12 | exit-criteria: yes
13 | success-metrics: yes
14 | clear-roles: no
15 | future-iterations: yes
16 | roles-needed:
17 | okrs:
18 | - "[PO]: Objective: Messaging is reliable"
19 | - "[P2]: KR: Cluster can handle 500 concurrent users"
20 | ---
21 |
22 | Project Board: https://github.com/orgs/status-im/projects/35
23 |
24 | ## Summary
25 | The idea here is to provide a way to make Mail Server nodes discoverable and trusted. This should work seamlessly for the end user.
26 |
27 | ## Product Overview
28 | Currently, Mail Servers (and other planned server nodes like Push Notification servers) need to be hardcoded in the app code. It's possible to provide your own Mail Server in the app settings but that's not a scalable solution and it does not solve all issues.
29 |
30 | The outcome of this swarm are decentralized and discoverable Mail Servers which will initially be managed and trusted by Status. The client will still accept user's custom Mail Servers.
31 |
32 | In the next iterations, we may work on a solution to allow external providers to submit their own Mail Servers into the cluster and allow end users to accept these resources as trusted. The list of providers and their resource could be managed by [Token-Curated Registries](https://docs.google.com/document/d/1BWWC__-Kmso9b7yCI_R7ysoGFIT9D_sfjH3axQsmB6E), for instance.
33 |
34 | ## Product Description
35 | The work in this swarm can be divided into three areas:
36 | - (Infra) making Mail servers discoverable,
37 | - (Smart Contract) writing a smart contract to keep track of trusted Mail Servers,
38 | - (Client) mechanism of verifying whether a discovered Mail Server is trusted.
39 |
40 | The smart contract should implement the complete interface that will allow managing providers and their resources. The client will have an option to decide which providers it trusts. Status will be a default provider and by default the app will trust it.
41 |
42 | Due to the fact that all Mail Servers are supposed to be equal and independent (in other words, they should store the same messages, possibly in different order though), we will be able to remove all hardcoded Mail Server addresses from the client and rely only on discovered Mail Servers. This will allow Status to dynamically scale number of resources depending on the usage.
43 |
44 | **Note** Important thing is that this solution should be flexible for other server nodes. It should be easy to introduce new resources, as long as a particular group of servers is discoverable, the client verifies them using a smart contract and can choose arbitrary one to continue.
45 |
46 | ## Requirements & Dependancies
47 | 1. (Optional) Before this swarm starts, https://github.com/status-im/status-go/issues/1006 should be resolved in order to avoid working on the same piece of code.
48 |
49 | ## Minimum Viable Product
50 |
51 | Goal Date: 2018-07-22
52 |
53 | 1. [ ] A smart contract that keeps track of providers and Mail Servers,
54 | 1. [ ] Discoverable Mail Servers,
55 | 1. [ ] Requests for messages are securely encrypted to provide confidentiality,
56 | * As devp2p packets are encrypted and this is P2P communication, the question is should we additionally encrypt Whisper messages with a Mail Server's public key?
57 | 1. [ ] Client requests for Mail Servers and server finds them and verifies if they are trusted using the smart contract. Verified Mail Servers are sent to the client and a random one is selected to use.
58 | * We keep the option to add user's own Mail Server addresses.
59 | 1. [ ] Make sure this solution is flexible and can work with other server nodes.
60 |
61 | ## Iteration 1 (Optional, TBD)
62 |
63 | Goal Date: TBD
64 |
65 | 1. [ ] Allow custom providers to register their Mail Servers (Status as a curator?),
66 | 1. [ ] Allow users of the app to select trusted providers
67 | * [ ] A new design of a screen needed.
68 |
69 | ## Success and exit criteria
70 |
71 | 1. Mail Servers are not hardcoded in the client but are discovered using Discovery V5 protocol and verified using a smart contract,
72 | 1. (Optional) External Mail Server providers can register themselves and users can decide if they trust their resources (a list of providers is curated by Status).
73 |
74 | ## Copyright
75 | Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
76 |
--------------------------------------------------------------------------------
/ideas/086-push-notif-v2/1to1.dot:
--------------------------------------------------------------------------------
1 | digraph ladder {
2 | ranksep="0.5"; nodesep="0.5"; splines="line"; ratio="0.5";
3 |
4 | node [shape=point fontsize=10 fontname="Helvetica"];
5 | edge [dir=none fontsize=10 fontname="Helvetica"];
6 |
7 | // Column labels
8 | a [shape=Square label="Contact A" style=filled color=lightblue];
9 | w1 [shape=Square label="Arbitrary\nNotification Server"];
10 | p [shape=Square label="Notification platform\n(e.g. FCM, Pushy)" style=filled color=lightgray];
11 | b [shape=Square label="Contact B" style=filled color=lightgreen];
12 |
13 | // Draw the 3 column headings, no line
14 | { rank=same; edge[style=invis] a -> w1 -> b -> p }
15 |
16 | // Force rows to stay aligned
17 | { rank=same; edge[style=invis] a2 -> w1_2 -> b2 -> p2 }
18 | { rank=same; edge[style=invis] a3 -> w1_3 -> b3 -> p3 }
19 |
20 | // Draw the columns
21 | a -> a1 [style=dotted weight=1000];
22 | w1 -> w1_1 [style=dotted weight=1000];
23 | p -> p1 [style=dotted weight=1000];
24 | b -> b1 [style=dotted weight=1000];
25 |
26 | // Draw the vertical lines
27 | a1 -> a2 -> a3 [weight=1000] a3 -> a4 -> a5 -> a6 [style=dotted weight=1000] a6 -> a7 -> a8 -> a9 -> a10 -> a11 [weight=1000] a11 -> amax [style=dotted weight=1000];
28 | w1_1 -> w1_2 [weight=1000] w1_3 -> w1_4 -> w1_5 -> w1_6 [style=dotted weight=1000] w1_6 -> w1_7 -> w1_8 -> w1_9 -> w1_10 -> w1_11 [weight=1000] w1_11 -> w1_max [style=dotted weight=1000];
29 | p1 -> p2 -> p3 -> p4 -> p5 -> p6 -> p7 -> p8 -> p9 -> p10 [style=dotted weight=1000] p10 -> p11 [weight=1000] p11 -> pmax [style=dotted weight=1000];
30 | b1 -> b2 [style=dotted weight=1000] b2 -> b3 -> b4 -> b5 -> b6 [style=dotted weight=1000] b6 -> b7 -> b8 -> b9 -> b10 -> b11 [weight=1000] b11 -> bmax [style=dotted weight=1000 label=" App retrieves historic messages\nand matches ID"];
31 | amax, w1_max, pmax, bmax [style=invis]
32 |
33 | // Hide unused points
34 | a5, b1, b2, b3, b4, b5, w1_5, p1, p2, p3, p4, p5, p6, p7, p8, p9 [style=invis height=0];
35 |
36 | // Now each step in the ladder
37 | { rank=same; a1 -> w1_1 [dir=back label="Broadcasts availability to serve\nas notification server (1)"] }
38 | { rank=same; w1_1 -> b1 [dir=forward label="Broadcasts availability to serve\nas notification server (1)"] }
39 |
40 | a2 -> w1_2 [dir=forward label="Sends anonymous Whisper message for registration request,\npassing device registration token and secure channel (SK1) (2)"];
41 |
42 | w1_2 -> w1_3 [label=" Stores data for Contact A\n (device registration token, SK1)\nCreates AK2" weight=1000];
43 | a3 -> w1_3 [dir=back label="Sends message over SK1 channel\naccepting request, and passing pubkey of AK2"]
44 |
45 | a4 [label="" shape=none width=0 height=0 xlabel="Stores pubkey of AK2.\nAt this point Contact A and\n Arbitrary Notification Server #1 \ncan communicate securely,\nusing keys exchanged with server "];
46 | { rank=same; w1_4 -> b4 [dir=both label="Negotiation with PN servers,\nsame process as above for Contact A (...)"] }
47 |
48 | a6 [xlabel="Contact A starts chat \nwith Contact B"];
49 | { rank=same; a6 -> b6 [dir=forward label="[NewContactKey]: Sends a contact request\nin the discovery topic, using B's public key for encryption\nand passing the new symkey that will be used for further comms.\nNEW: contains A's AK2 pubkey"] }
50 |
51 | { rank=same; a7 -> b7 [dir=back label="[ContactRequestConfirmed]: Responds to contact request.\nNEW: response contains B's AK2 pubkey"] }
52 |
53 | a8 [xlabel="Contact A wants\nto send a message \nto Contact B"];
54 | { rank=same;
55 | a8 -> b8 [dir=forward label="Sends message using common random topic"] }
56 |
57 | { rank=same;
58 | a9 -> w1_9 [dir=forward label="Sends message over SK1 requesting a notification\nto Contact B passing B's AK2 pubkey over pre-defined topic"] }
59 |
60 | { rank=same;
61 | w1_10 -> p10 [dir=forward label="Requests notification to be sent to Contact B's device\nusing stored device registration token"] }
62 |
63 | { rank=same;
64 | b11 -> p11 [dir=back label="Sends a data push notification to Contact B's device\ncontaining hash of message payload as an ID"] }
65 |
66 | // Add empty space at the bottom before legend
67 | amax -> legend [style=invis weight=1000];
68 |
69 | // Legend
70 | { legend [shape=plaintext label=<
71 | | (1) Communication is done over a discovery topic provided by Status to the PN providers. Message includes pubkey of server's encryption key (AK1). |
| (2) Channel = random symmetric key + topic to have encrypted communication between peers
74 | . |