Alejandro Machado
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee
    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee
  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # Ðapps UX Audit We conducted a UX audit of 5 decentralized applications, using Status as the wallet on the Ethereum mainnet. We identified **heuristics** for good experiences that can be refined into actionable Ðapp store design guidelines, and made some **recommendations** for further improving the usability of the ecosystem. ## List of heuristics ### Onboarding #### [WAG] Be wallet agnostic The early days of web3, when Ðapps had Metamask-specific code, are gone. We expect Ðapps to work well on all major wallets, both in desktop and mobile. We scored Ðapps from 1 to 10, judging their compatibility with Status, MetaMask, Toshi, and Trust. #### [SIG] Use message signing for access The community has decided on a signing standard to enable passwordless authentication and prove ownership of an Ethereum address. We expect Ðapps to allow registration and logins by using the standard implemented in most wallets. We scored Ðapps from 1 to 10, judging how easy it is to create an account and register by signing a message. #### [PRI] Prioritize privacy Putting user data on a public blockchain [can be risky](https://medium.com/uport/privacy-preserving-identity-system-for-ethereum-dapps-a3352d1a93e8). We expect Ðapps to prevent users from linking their transaction history across multiple systems. We scored Ðapps from 1 to 10, judging how they managed their particular need for privacy. - Scores 1-4: the Ðapp fails to mention risks and doesn't check for prior address activity. - Scores 5-7: the Ðapp mentions risks but doesn't check for prior address activity. - Scores 8-10: either the Ðapp doesn't store any personal information or it doesn't allow signing up with an address that has prior activity. ### Usability #### [BAS] Follow basic usability guidelines Every Ðapp is an app. We expect systems to follow battle-tested, timeless usability heuristics. We scored Ðapps from 1 to 10, using the [10 Usability Guidelines for User Interface Design](https://www.nngroup.com/articles/ten-usability-heuristics/) by Jakob Nielsen as reference. #### [MOB] Design for mobile People spend [almost twice as much time on mobile as they do on desktop](http://www.kpcb.com/internet-trends), and many people [only use mobile](https://www.statista.com/statistics/297504/number-of-us-mobile-only-internet-users/). We expect Ðapps to work flawlessly on phones. We scored Ðapps from 1 to 10, judging how easy they are to use on a smartphone, giving higher scores to products that adhere to a [mobile-first](https://static.lukew.com/MobileFirst_LukeW.pdf) philosophy. #### [EDU] Include short and context-specific educational content The early majority lacks mental models for the decentralized web. We expect Ðapps to provide relevant and concise explanations, following the [segmenting principle](https://sites.google.com/site/cognitivetheorymmlearning/segmenting-principle). We scored Ðapps from 1 to 10, judging how much they help newcomers without overwhelming them. ### Transactions #### [PFT] Prime the user for transactions Transactions [introduce a lot of friction](https://www.behavioraleconomics.com/mini-encyclopedia-of-be/pain-of-paying/). We expect Ðapps to [prepare the user for an upcoming transaction](https://blog.hellobloom.io/how-to-make-a-user-friendly-ethereum-dapp-5a7e5ea6df22), and explain its purpose when it isn't obvious. This is a similar pattern to [priming users for permissions consent on mobile apps](https://www.useronboard.com/how-slingshot-onboards-new-users/?slide=61), and is especially important during the onboarding flow. We scored Ðapps from 1 to 10, judging how well the Ðapp explains transactions just before they're initiated. #### [CFC] Communicate using a familiar currency Nobody, not even a regular Ethereum user, has a reliable mental model for how much ether is worth. Ether is volatile, common amounts involve many decimal places, and few people recognize the Ξ symbol. We expect Ðapps to speak the user's language when it comes to currency. We scored Ðapps from 1 to 10, judging how easy it is to understand transaction amounts. #### [MAP] Manage the user’s attention to pending transactions Blockchains take longer to update than the user is willing to busy-wait. We expect Ðapps to reflect on their users' purpose for every transaction and make [smart design decisions](https://medium.com/design-for-crypto/direct-attention-away-from-pending-transactions-13a3348edb3e) about how to deal with inevitable delays. We scored Ðapps from 1 to 10, judging how thoughtful their post-transaction flow is. - Scores 1-4: the Ðapp blocks the UI after a transaction is sent or simply links to Etherscan. - Scores 5-8: the Ðapp directs the user to a live list of transactions and their statuses. - Scores 9-10: the Ðapp uses status bars and asynchronous systems (e.g. email) to respect the user's time. ### Decentralization #### [CES] Centralize strategically All Ðapps have some centralized components. We expect Ðapps to make deliberate design decisions to gain efficiency and reduce friction while maintaining key elements of trustlessness that are clearly communicated to the user. We scored Ðapps from 1 to 10, judging how much sense they make in terms of centralized versus decentralized components. ## Peepeth ### Onboarding #### Invitation flow and interaction with providers Peepeth requires new users to be invited into the service. Invites are implemented through secret links, so it's not possible for a new user to sign up for Peepeth directly on Status by tapping on `New > Open Ðapp > Peepeth`. The user must get an invite email that looks like this: ![](https://i.imgur.com/QllhKlS.png) We're at a very early stage where standards haven't been set. Peepeth chose to optimize for today's user experience and provide quick links that work with two widely-used wallets: Metamask for desktop and Trust for mobile. This isn't ideal, but it helps most users get started. Peepeth remains compatible with other wallets, like Toshi and Status, but the onboarding experience isn't so smooth. If a user wants to sign up with Status, she must open this email on her mobile phone, copy the invite link, switch to the Status app, select `New > Open Ðapp`, and paste the URL. In the future, there should be a standard way to open Ðapp links in the user's preferred application. web3 apps shouldn't need to use the Metamask, Trust, or Status logos any more than Web 2.0 applications need to use the Chrome or Firefox logos. | Guideline / Ðapp | Peepeth | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 8/10 | > How might we design a friendlier invitation flow that works cross-platform? One possibility could be making invitations tokenized assets sent directly to the user's chosen wallet. #### Signing in Once registered, the user can easily access his account by signing a message. ![](https://i.imgur.com/TAxhk2I.png) Registration, however, requires making a transaction to reserve a username in a trustless fashion. This introduces a lot of friction, but is a valid design decision for the usability-security tradeoff. | Guideline / Ðapp | Peepeth | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 8/10 | | **[SIG]** Use message signing for access | 8/10 | #### Putting privacy first During the signup process, the user must use an Ethereum address that will be irrevocably linked to all of his generated content. Peepeth issues several warnings that the account data is public, but fails to explain that the user is linking all prior blockchain activity (e.g., trades) to his activity on Peepeth (and all of his Twitter activity, if he links the two accounts). Instead of issuing generic warnings, Ðapp developers should show what information can be easily inferred from the public blockchain. ![](https://i.imgur.com/BusGEb2.png) | Guideline / Ðapp | Peepeth | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 8/10 | | **[SIG]** Use message signing for access | 8/10 | | **[PRI]** Prioritize privacy | 5/10 | > In the future, wallets could automatically choose a fresh Ethereum address to use for every Ðapp, helping protect privacy without additional Ðapp developer overhead. ### Usability Configuring the system properly to use Ðapps is complex. Peepeth breaks the process down into parts and provides a useful checklist, following two timeless heuristics: showing the system status and helping users recover from errors. The overall usability on Peepeth is phenomenal. ![](https://i.imgur.com/TypdtU4.png) | Guideline / Ðapp | Peepeth | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 8/10 | | **[SIG]** Use message signing for access | 8/10 | | **[PRI]** Prioritize privacy | 5/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | #### Ensuring a good mobile experience Peepeth is easy to use on mobile: most interactive elements have adequate target sizes, the layout isn't too crammed, and it loads properly even on slow networks. ![](https://i.imgur.com/kc8exk0.png) | Guideline / Ðapp | Peepeth | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 8/10 | | **[SIG]** Use message signing for access | 8/10 | | **[PRI]** Prioritize privacy | 5/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 8/10 | #### Baking education into the product Peepeth strives to generate awareness and dispel common myths, one short message at a time. We applaud their efforts, but think these messages could be even more effective if presented in context – right before confirming the user's post, for example. Too many educational messages at once, MyCrypto-style, [are overwhelming](https://medium.com/@candemosse/7e895aaff992). ![](https://i.imgur.com/E6bNSy7.jpg) | Guideline / Ðapp | Peepeth | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 8/10 | | **[SIG]** Use message signing for access | 8/10 | | **[PRI]** Prioritize privacy | 5/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MAP]** Manage the user's attention to pending transactions | 10/10 | | **[MOB]** Design for mobile | 8/10 | | **[EDU]** Include short and context-specific educational content | 7/10 | ### Transactions #### Preparing the user for transactions Summoning the wallet without prior notice is a bad idea. Peepeth does a good job of priming the user for approving a transaction: it explains that "saving to the blockchain costs ether" and lets the user learn more or choose a speed. ![](https://i.imgur.com/LXuOQSj.png) | Guideline / Ðapp | Peepeth | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 8/10 | | **[SIG]** Use message signing for access | 8/10 | | **[PRI]** Prioritize privacy | 5/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 8/10 | | **[EDU]** Include short and context-specific educational content | 7/10 | | **[PFT]** Prime the user for transactions | 10/10 | > On choosing transaction speeds and estimating costs: when should it be done by the Ðapp, and when by the wallet? This is an area of further research. Even better: Peepeth estimates the cost of the operation in dollars, because nobody knows how much 0.000055 ETH is: - most people have a hard time mentally processing that many zeroes - ETH is extremely volatile > A further improvement would be to use the user's native currency instead of the dollar, but should this be responsibility of the Ðapp or the wallet? Toshi makes this a priority. | Guideline / Ðapp | Peepeth | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 8/10 | | **[SIG]** Use message signing for access | 8/10 | | **[PRI]** Prioritize privacy | 5/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 8/10 | | **[EDU]** Include short and context-specific educational content | 7/10 | | **[PFT]** Prime the user for transactions | 10/10 | | **[CFC]** Communicate using a familiar currency | 9/10 | #### Keeping track of transaction statuses Making sure the system status is visible is a priority for Peepeth. Thanks to its status bar, the user can calmly keep using the app while the blockchain hasn't synced – he's reassured about the operation in the background. ![](https://i.imgur.com/G0TZi74.png) | Guideline / Ðapp | Peepeth | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 8/10 | | **[SIG]** Use message signing for access | 8/10 | | **[PRI]** Prioritize privacy | 5/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 8/10 | | **[EDU]** Include short and context-specific educational content | 7/10 | | **[PFT]** Prime the user for transactions | 10/10 | | **[CFC]** Communicate using a familiar currency | 9/10 | | **[MAP]** Manage the user's attention to pending transactions | 10/10 | ### Decentralization Peepeth goes one step further than most Ðapps by letting the user group multiple actions into a single transaction, and delay her commits to the blockchain. This is an interesting pattern that may be desireable for content-heavy Ðapps, but it should be used judiciously. With its many educational messages, Peepeth excels at making the user aware of the tradeoff she's making by trusting a single party with data that has not been committed to the blockchain. | Guideline / Ðapp | Peepeth | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 8/10 | | **[SIG]** Use message signing for access | 8/10 | | **[PRI]** Prioritize privacy | 5/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 8/10 | | **[EDU]** Include short and context-specific educational content | 7/10 | | **[PFT]** Prime the user for transactions | 10/10 | | **[CFC]** Communicate using a familiar currency | 9/10 | | **[MAP]** Manage the user's attention to pending transactions | 10/10 | | **[CES]** Centralize strategically | 10/10 | ## CryptoKitties ### Onboarding Although there are some leftover mentions of Metamask during the signup process, there's no longer any Metamask-specific code, so CryptoKitties works well on Toshi, Status, and other wallets. | Guideline / Ðapp | CryptoKitties | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | Creating a CryptoKitties account is easy. The user doesn't need to memorize a new password, and fields like email address can be made optional. Accessing one's account only requires signing a message through the wallet. ![](https://i.imgur.com/Otb2jS9.png) | Guideline / Ðapp | CryptoKitties | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | > How do users log out? This is an unsolved pattern: not all wallets allow users to switch to a different account. Besides, Ðapps currently use a combination of cookies and address detection to determine login status, which can be confusing. While its [privacy policy](https://www.cryptokitties.co/privacy-policy) is sensible, CryptoKitties fails to alert the user that his past and future blockchain activity could be linked to his kitty trades. This is less serious for CryptoKitties than it is for Peepeth, but we feel that every Ðapp should make an effort to safeguard the user's privacy. | Guideline / Ðapp | CryptoKitties | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 4/10 | ### Usability CryptoKitties follows basic usability guidelines, and despite being originally conceived for desktops, is easy to use on phones. As for educational content, it's less verbose and more timely than Peepeth, with some great explainers about the service: ![](https://i.imgur.com/DksXj9o.png) | Guideline / Ðapp | CryptoKitties | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 9/10 | | **[EDU]** Include short and context-specific educational content | 9/10 | ### Transactions CryptoKitties offers relevant and complete descriptions of what's about to happen before the users initiate transactions, but prices are only shown in ether. Morevoer , while the icon of three horizontal lines (Ξ) is slowly becoming synonymous with "ETH", it's confusing for first-time users. ![](https://i.imgur.com/wF5iB3h.png) | Guideline / Ðapp | CryptoKitties | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 9/10 | | **[EDU]** Include short and context-specific educational content | 9/10 | | **[PFT]** Prime the user for transactions | 10/10 | | **[CFC]** Communicate using a familiar currency | 1/10 | > We believe the wallet should also display prices and estimates in the user's native currency (or the US dollar for simplicity). Status doesn't currently do this. After the user completes a transaction, she's directed to an Activity page with a list of recent transactions. This behavior isn't immediately useful: transaction statuses aren't visible on this page and activity disappears after a few weeks. A status bar similar to Peepeth's or a notifications system would be improvements. ![](https://i.imgur.com/9lOa9N2.png) | Guideline / Ðapp | CryptoKitties | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 9/10 | | **[EDU]** Include short and context-specific educational content | 9/10 | | **[PFT]** Prime the user for transactions | 10/10 | | **[CFC]** Communicate using a familiar currency | 1/10 | | **[MAP]** Manage the user's attention to pending transactions | 5/10 | ### Decentralization CryptoKitties uses a standard client-server architecture for providing a user interface and turning ERC-721s into visually appealing kittens. This is a good balance of centralized and trustless components. Could there be ways of batching transactions, putting a measure of trust on the CryptoKitties team, to make the system more appealing to certain users? Perhaps, but it's not clear whether this is desirable. | Guideline / Ðapp | CryptoKitties | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 9/10 | | **[EDU]** Include short and context-specific educational content | 9/10 | | **[PFT]** Prime the user for transactions | 10/10 | | **[CFC]** Communicate using a familiar currency | 1/10 | | **[MAP]** Manage the user's attention to pending transactions | 5/10 | | **[CES]** Centralize strategically | 10/10 | ## OpenSea ### Onboarding OpenSea delays user registration until his purchase. We think this is a fantastic design decision: the site lets the user browse freely and doesn't get in the way until it may provide a legitimately useful service, like notifying the user via email. ![](https://i.imgur.com/84D5Lib.png) On the plus side, OpenSea works well on all wallets and uses message signing for access. On the not-so-good side, OpenSea handles privacy like CryptoKitties: it doesn't even mention the potential risks. | Guideline / Ðapp | OpenSea | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 4/10 | ### Usability The site mostly follows best usability practices. While mobile support was added later on and still doesn't feel very polished (some small fonts, weak navigation), the site is usable on phones. | Guideline / Ðapp | OpenSea | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 8/10 | | **[MOB]** Design for mobile | 7/10 | OpenSea provides some helpful educational content, but it's not always short or contextual. For example: ![](https://i.imgur.com/JBtfSdB.png) | Guideline / Ðapp | OpenSea | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 8/10 | | **[MOB]** Design for mobile | 7/10 | | **[EDU]** Include short and context-specific educational content | 6/10 | ### Transactions The site does a good job of explaining how transactions work, but it doesn't show transaction fees or time estimations. Prices are shown in ether only. | Guideline / Ðapp | OpenSea | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 8/10 | | **[MOB]** Design for mobile | 7/10 | | **[EDU]** Include short and context-specific educational content | 6/10 | | **[PFT]** Prime the user for transactions | 8/10 | | **[CFC]** Communicate using a familiar currency | 1/10 | OpenSea sends the user an email when his transaction is processed by the blockchain: ![](https://i.imgur.com/56OqMVU.png) This is a welcome feature when confirmation times are around 20 minutes – it's best to let the user keep browsing and send him a confirmation asynchronously. Other kinds of transactions aren't handled so gracefully, though: the UI is blocked when wrapping ETH: ![](https://i.imgur.com/BnnHmNT.png) | Guideline / Ðapp | OpenSea | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 8/10 | | **[MOB]** Design for mobile | 7/10 | | **[EDU]** Include short and context-specific educational content | 6/10 | | **[PFT]** Prime the user for transactions | 8/10 | | **[CFC]** Communicate using a familiar currency | 1/10 | | **[MAP]** Manage the user's attention to pending transactions | 7/10 | ### Decentralization Like CryptoKitties, OpenSea runs a central operation to serve a user interface, but its transactions are always handled trustlessly. As a decentralized marketplace, we don't believe they should take steps to run a more efficient service if it would come at the expense of having to trust them. | Guideline / Ðapp | OpenSea | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 8/10 | | **[MOB]** Design for mobile | 7/10 | | **[EDU]** Include short and context-specific educational content | 6/10 | | **[PFT]** Prime the user for transactions | 8/10 | | **[CFC]** Communicate using a familiar currency | 1/10 | | **[MAP]** Manage the user's attention to pending transactions | 7/10 | | **[CES]** Centralize strategically | 10/10 | ## Airswap ### Onboarding Unlike the previous Ðapps, Airswap doesn't request any information from the user. "Registration" only consists of signing a message before he trades. We believe this is the ideal workflow for crypto-to-crypto exchanges because the friction is greatly reduced. The only downside is that, currently, the service doesn't have a way to contact the user if a transaction is rejected. > Should wallets build a messaging service between Ðapps and address owners? This could allow for better error handling while preserving the user's privacy: Ðapps wouldn't need to collect email addresses or other data. Collecting no user data also means that Airswap has much less of a burden to alert the user of privacy concerns: by transacting, he's adding some records to his blockchain history, but unlike with Peepeth, there's no information being recorded that could expose his identity. | Guideline / Ðapp | Airswap | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 10/10 | ### Usability Airswap is easy to use with its simple interface, search bar, and a layout clearly designed with mobile in mind. It effectively hides much of the complexity of peer-to-peer trades. We'd favor an interface that showed the exchange rate between ether and a chosen token. Currently, the design assumes that the user knows how much of a given token he'll buy, not how much ether (or dollars) he's willing to spend. The other interface blunders are minor: higher contrast between the active and inactive elements of the Buy/Sell toggle is needed and the Terms of Service link doesn't work on mobile. ![](https://i.imgur.com/jzGSusn.png) Airswap barely integrates any educational content at all, but the Ðapp doesn't feel any less useful because of this. They appear to have embraced that their users are familiar with basic trades on blockchains. | Guideline / Ðapp | Airswap | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 10/10 | | **[BAS]** Follow basic usability guidelines | 7/10 | | **[MOB]** Design for mobile | 9/10 | | **[EDU]** Include short and context-specific educational content | 9/10 | ### Transactions Airswap does an exceptional job of providing relevant pre-trade information, uses a well-known currency, and even allows tweaking the gas price as an option for advanced users. ![](https://i.imgur.com/XR1hujH.png) Like the other Ðapps we analyzed earlier, Airswap doesn't offer a great way to manage pending transactions. Once the trade is done, there's no more feedback. The user is expected to quit the Ðapp, go to the Wallet tab, manually add tokens, and busy-wait until the blockchain updates his balances. | Guideline / Ðapp | Airswap | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 10/10 | | **[BAS]** Follow basic usability guidelines | 7/10 | | **[MOB]** Design for mobile | 9/10 | | **[EDU]** Include short and context-specific educational content | 9/10 | | **[PFT]** Prime the user for transactions | 10/10 | | **[CFC]** Communicate using a familiar currency | 9/10 | | **[MAP]** Manage the user's attention to pending transactions | 3/10 | ### Decentralization It would make very little sense for Airswap to sacrifice trustlessness for efficiency, since its whole value proposition is being a decentralized exchange. | Guideline / Ðapp | Airswap | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 10/10 | | **[PRI]** Prioritize privacy | 10/10 | | **[BAS]** Follow basic usability guidelines | 7/10 | | **[MOB]** Design for mobile | 9/10 | | **[EDU]** Include short and context-specific educational content | 9/10 | | **[PFT]** Prime the user for transactions | 10/10 | | **[CFC]** Communicate using a familiar currency | 10/10 | | **[MAP]** Manage the user's attention to pending transactions | 3/10 | | **[CES]** Centralize strategically | 10/10 | ## Bancor ### Onboarding Bancor requires an account connected to SMS or a centralized server. We believe Ðapps should always give the user the option to register and access using a wallet. ![](https://i.imgur.com/zS0yZFl.png) | Guideline / Ðapp | Bancor | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 1/10 | | **[PRI]** Prioritize privacy | 4/10 | ### Usability Coming from Airswap, Bancor feels much more mature and finished, with features like fiat on-ramps and a hosted wallet that make it a lot more approachable for crypto newcomers. ![](https://i.imgur.com/YjTwDi2.png) It follows usability best practices and feels like a mobile-first product. Its few educational messages are concise and timely. | Guideline / Ðapp | Bancor | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 1/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 10/10 | | **[EDU]** Include short and context-specific educational content | 9/10 | ### Transactions Bancor's transaction screens have great information design. Rates are shown in dollars and there are helpful explanations behind information buttons. ![](https://i.imgur.com/kt9PbBR.png) Like Airswap, Bancor surrenders responsibility for the user's engagement after the order is placed, instructing the user to check Etherscan. Like we've said earlier, it would be helpful to notify the user. | Guideline / Ðapp | Bancor | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 1/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 10/10 | | **[EDU]** Include short and context-specific educational content | 9/10 | | **[PFT]** Prime the user for transactions | 10/10 | | **[CFC]** Communicate using a familiar currency | 10/10 | | **[MAP]** Manage the user's attention to pending transactions | 4/10 | ### Decentralization One of the features that stands out is Bancor's hosted wallet. ![](https://i.imgur.com/vaR1h71.png) Offering this option allows people without wallets to start interacting with the crypto economy, which is great. However, Bancor's insistence of using the hosted wallet at every occassion goes against the ecosystem's goal of empowering people to use decentralized systems. | Guideline / Ðapp | Bancor | | ---------------------------------------------------------------- | ------- | | **[WAG]** Be wallet agnostic | 10/10 | | **[SIG]** Use message signing for access | 1/10 | | **[PRI]** Prioritize privacy | 4/10 | | **[BAS]** Follow basic usability guidelines | 10/10 | | **[MOB]** Design for mobile | 10/10 | | **[EDU]** Include short and context-specific educational content | 9/10 | | **[PFT]** Prime the user for transactions | 10/10 | | **[CFC]** Communicate using a familiar currency | 10/10 | | **[MAP]** Manage the user's attention to pending transactions | 4/10 | | **[CES]** Centralize strategically | 8/10 | ## Score comparisons |Guideline / Ðapp|Peepeth|CryptoKitties|OpenSea|AirSwap|Bancor| |----------------|-------|-------------|-------|-------|------|-----| |**[WAG]** | 8/10 | 10/10 | 10/10 | 10/10 | 10/10 |**[SIG]** | 8/10 | 10/10 | 10/10 | 10/10 | 1/10 |**[PRI]** | 5/10 | 4/10 | 4/10 | 10/10 | 4/10 |**[BAS]** | 10/10 | 10/10 | 8/10 | 7/10 | 10/10 |**[MOB]** | 8/10 | 9/10 | 7/10 | 9/10 | 10/10 |**[EDU]** | 7/10 | 9/10 | 6/10 | 9/10 | 9/10 |**[PFT]** | 10/10 | 10/10 | 8/10 | 10/10 | 10/10 |**[CFC]** | 9/10 | 1/10 | 1/10 | 9/10 | 10/10 |**[MAP]** | 10/10 | 5/10 | 7/10 | 3/10 | 4/10 |**[CES]** | 10/10 | 10/10 | 10/10 | 10/10 | 8/10 ## Recommendations 1. Acquiring ether and convincing users to spend it are the main sources of initial friction. Let's keep working on ways to abstract gas away during onboarding. Good resources to build on are [this talk on Universal Logins](https://www.youtube.com/watch?v=qF2lhJzngto), and the current implementation of [Identity Gas Relay](https://github.com/status-im/contracts/blob/73-economic-abstraction/contracts/identity/IdentityGasRelay.sol). 2. Currently, the burden of estimating fees and letting users pick a confirmation speed is on Ðapp developers. This is inefficient for developers (reinventing the wheel) and confusing for users (variety of interfaces for the same task). Let's research if wallets could take over this responsibility. 3. Ðapps should [follow standards for signing messages](https://eips.ethereum.org/EIPS/eip-712). If users can be certain that a transaction is being requested from a URL they trust, there'll be less of a need to prime them before every transaction – explanations could be embedded in the wallet's request. 4. Ðapps should be able to communicate with users that opt-in by using their Ethereum address. This would enable natively notifying the user when his transactions go through. We should converge on an [address-to-address messaging standard](https://github.com/ethereum/EIPs/issues/802), but communication should operate off-chain. 5. Making [web3 access opt-in](https://eips.ethereum.org/EIPS/eip-1102) will be key to avoid fingerprinting. We should propose a standard that web3 providers follow when requesting the user's permission to expose a wallet address. 6. wallets should use USD when communicating with the user, or even better, request the user's native currency. Toshi does a fantastic job here. 7. There should be a standard way to open Ðapp links in the user's preferred application. Let's research how this could be done. 8. Let's create a standard on how logging out works: should it require signing a message? should Ðapps flush cookies upon logout? Before you go, remember (credit goes to Alex van de Sande): ![](https://i.imgur.com/8M41GMd.jpg)

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully