New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feedback on "ETH Avatar Standard" Direction #928

Open
owocki opened this Issue Mar 13, 2018 · 52 comments

Comments

Projects
None yet
@owocki

owocki commented Mar 13, 2018

Hi folks,

i am working on an EIP and reference client ( https://github.com/gitcoinco/ethavatar ) for a standard called ETH Avatar, which will allow members of the community to attach avatars to their ethereum addresses. (think gravatar, but for ethereum addresses). doing so would allow users to eyeball a counter party's picture and quickly confirm their ETH (or contract call) is going to the right place

i read at https://github.com/ethereum/EIPs/blob/master/ISSUE_TEMPLATE.md that

Vetting an idea publicly before going as far as writing a EIP is meant to save the potential author time. Asking the Ethereum community first if an idea is original helps prevent too much time being spent on something that is guaranteed to be rejected based on prior discussions (searching the Internet does not always do the trick)

so i come here for public comment. does this already exist? does it add value? is it worth having me "champion" this EIP?

personally, i think this is where a standard has value:

  • the standard becomes more powerful the more clients integrate it
  • the more clients integrate it, the more users can visually 'eyeball' that they are sending ETH to the right place
  • the more users trust where they're sending ETH, the more they trust Ethereum.

demo

here is a working demo of the standard

https://ethavatar.com (works on mainnet and rinkeby)

you can read more about the current initiative at https://github.com/gitcoinco/ethavatar

@owocki

This comment has been minimized.

owocki commented Mar 13, 2018

hey @Souptacular i'd love to get 2 minutes of your feedback on this if you have a moment soon

@tomcbean

This comment has been minimized.

tomcbean commented Mar 13, 2018

@owocki This has potential, but it's not that safe if people start relying on the avatars alone, since anyone can use anyone's avatar. I could use your avatar and be easily mistaken as you if people rely on visual inspection to decided what addresses to use.

@owocki

This comment has been minimized.

owocki commented Mar 13, 2018

@tomcbean thanks for the feedback.

we have started working on a possible mitigation path for this issue over at gitcoinco/ethavatar#2

Form that issue:

It's important to preserve some procedurally verifiable data so an attacker can't just take your photo and attach it to their account.

@yarrumretep

This comment has been minimized.

Contributor

yarrumretep commented Mar 13, 2018

Seems to me the frame doesn't address the issue, right? I could still snarf the picture (cute baby, btw) and frame it with the frame generated from my address and register that. Frame would be different, but the picture content would be what the human on the other end keys in on to see that it's you - couldn't this still be misleading?

@tomcbean

This comment has been minimized.

tomcbean commented Mar 13, 2018

@owocki Awesome! Should have known you were already thinking around that issue. Thanks.

@owocki

This comment has been minimized.

owocki commented Mar 13, 2018

Seems to me the frame doesn't address the issue, right? I could still snarf the picture (cute baby, btw) and frame it with the frame generated from my address and register that. Frame would be different, but the picture content would be what the human on the other end keys in on to see that it's you - couldn't this still be misleading?

In the attack scenario you articulated, you're right.. the framing solution provides protection against randomly fat-fingering the address.. but does it provide protection against an attacker stealing an picture / frame?

I think if we make the procedurally generated frame mandatory (and mandatory to be generated by the address), then that buys us some protection since an attacker won't be able to generate an address that's exactly the one it's trying to spoof.

I think in this scenario you'd have to set a community standard / user expectation that the 'frame' is what you look at to make sure the address is correct (or you just continue checking the address).

I'm open to other ways of providing a visually verifiable data into the image. Thanks for the feedback @yarrumretep !

@austintgriffith

This comment has been minimized.

austintgriffith commented Mar 13, 2018

Here is another example of #EthAvatar using react-blockies-image:

Yes, anyone can steal your photo, but the procedurally generated data is still there.
Let's say you stole my photo above and wanted to try to phish my friends with it.
There is still a big difference in terms of frame color and data:

New account as an icon:
icon

New account with image:
iconaustin

Original account with image:
previousaustin

The frame is the only piece that serves and visually identifiable in terms of the account, the photo in the middle is just meant to make it a little friendlier.

@tomcbean

This comment has been minimized.

tomcbean commented Mar 13, 2018

The blockie frame seed could be something like keccak256([address],[image bytes]), tying the image itself to the generated frame.

@yarrumretep

This comment has been minimized.

Contributor

yarrumretep commented Mar 13, 2018

I guess I worry that by putting a photo there, you project a level of confidence for the naive user that s/he should not have by just inspecting the photo - while reducing the apparent importance of the address generated portion (by relegating it to a frame).

@austintgriffith

This comment has been minimized.

austintgriffith commented Mar 13, 2018

The only downside I see from making the frame procedurally generated from both the address and the image is you lose the connection between the original blockie and the profile picture version. If I've grown accustomed to a particular blockie and then I throw an image in it, I'd like it to follow the same color scheme. Maybe that isn't important though.

Haha, maybe we could combine the ideas so there is the original block seed for the top of the frame and the new mixed seed blockie for the bottom of the frame.
Might start to look weird though...
blockmixedseed
That looks a little too weird I think.

The main debate here seems to be about the trade off between a profile picture looking friendly but that friendliness could trick people. Are the people getting tricked by a profile image really even paying attention to the original blockie?

@alexvandesande mentioned that maybe blockies and profile images have separate purposes altogether.(https://twitter.com/avsa/status/973005378039500800)

Is the purpose of #EthAvatar to replace blockies in DApps or is it something to be used in combination with blockies? And if a DApp developer does use them in combination, why not use a standard method of combination?

@danfinlay

This comment has been minimized.

Contributor

danfinlay commented Mar 13, 2018

The blockie frame seed could be something like keccak256([address],[image bytes]), tying the image itself to the generated frame.

It's important the frame only reference the address. If it included info about the picture, an attacker could more easily modify a bit of photo data to brute force re-generate the frame.

@alexvandesande

This comment has been minimized.

Contributor

alexvandesande commented Mar 13, 2018

The border thing reminds me of snapchat IDs:

f00b480598ca541a2b55e29261775345--jessica-alba-snapchat

I think it's an idea worth exploring, but we need to understand that the purpose of a profile pic and a identicon are distinct: while the former is for you to recognize and remember the person/entity you are interacting with, the purpose of the former is to be able to guarantee it's a unique person.

If it was money, then the photo would be the face of the presidents, while the blockie would be the patterns in the background that are hard to reproduce, or in a passport, the avatar is the actual photo while the identicon is the little hologram.

I think ideally they should be presented separately but in a way that still allow both to be useful. I would say that a single row of colors loses a lot of the functionality of the blockies. One of the most interesting aspect of the blockies are exactly the symmetry, as it allows us to recognize it as shapes and faces, and then be able to remember them later. I made some other experiments for you to consider:

37354237-cff5b730-26a6-11e8-9ddb-270a1fdde683

Another experimentation we are doing is to try to extract other shapes from the blockies, circles and diagonals by using a depixelization algorithm, which tries to extract the sort of shape we see in pixels

screen shot 2018-03-07 at 12 08 43 pm

@austintgriffith

This comment has been minimized.

austintgriffith commented Mar 13, 2018

@alexvandesande has changed my mind. I don't think the frame thing is the way to go and I'm the guy who made the frame thing. The point of it was to add procedurally generated information but it doesn't work the same way as a blockie.

It think when #EthAvatar is #buitl out it should have a really easy way for someone to display something like this in their DApp:
image

You get the friendly picture and the visually identifying information all in one and it maintains the neat symmetry effect blockies have. I also want to reiterate that it's very important not to completely replace the blockie with the profile photo and #EthAvatar will want to steer DApp developers toward the combination.

@tomcbean

This comment has been minimized.

tomcbean commented Mar 13, 2018

@danfinlay Yeah, that makes sense. Good point.

@owocki

This comment has been minimized.

owocki commented Mar 13, 2018

@austintgriffith i really like what you did with the latest rev of that image!

@shrugs

This comment has been minimized.

shrugs commented Mar 13, 2018

Could also use Ecoji to encode the address (or a checksum or whatever) as a series of 4 emoji characters to complement or replace the identicon. This is very similar to the process of making a Telegram phone call where you get some magic emojis that represent a shared secret between you and the other caller. These emojis are created and overlaid at run-time and are not baked into the image, obviously.

Perhaps the eth avatar website could generate those emojis, bake them into the image in the bottom left corner, and then software will take the address, encode it into emojis at run-time, and then humans just have to 1) assume they're using software that isn't trying to screw them over and then 2) just check that the emojis baked into the image match the emojis derived from the address.

@alexvandesande

This comment has been minimized.

Contributor

alexvandesande commented Mar 13, 2018

@shrugs Ecoji is an fun checksum too: 4 emojis have more than a 1 trillion combinations. Maybe you could make a emoji based private key encoding: 😉😃😶🙂

@owocki

This comment has been minimized.

owocki commented Mar 13, 2018

thanks for all the feedback about the design yall.

besides design, one other thing i'm trying to figure out is the smart contract minimum required functionality for this..

the barebones smart contract => https://github.com/gitcoinco/ethavatar/blob/master/contracts/EthAvatar.sol

things we want to support

  • allow a user to make any erc721 token their avatar (within the contrstraints of whatever design we land upon)
  • add an approve(address) function so that one could allow others to delegate the management of the ethavatar
  • figure out how to allow tokens to set their ethavatar (maybe with the owner() functionality of that smart contract)
@ligi

This comment has been minimized.

Member

ligi commented Mar 14, 2018

just for some context - we had a discussion on reddit abuout this concept some time ago: https://www.reddit.com/r/ethereum/comments/7x26ou/i_created_a_website_where_you_can_upload_your/

@owocki

This comment has been minimized.

owocki commented Mar 14, 2018

@ligi this is great progress.. thanks.. would you be interested in being a cosponsor of an EIP around this with me?

@ligi

This comment has been minimized.

Member

ligi commented Mar 14, 2018

@owocki can you elaborate what you mean with "cosopnsor"? I would be happy to collaborate on this EIP - I really want something like this for WallETH as I am really not a big fan of blockies - I do not like the look of them. I know - form follows function - but IMHO for real users it is also very important how things look ..-)

@owocki

This comment has been minimized.

owocki commented Mar 14, 2018

@ligi i meant co-author. this is my first EIP but it seems like thats a standard part of the process

https://github.com/ethereum/EIPs/blob/master/eip-X.md#preamble

@owocki

This comment has been minimized.

owocki commented Mar 14, 2018

as I am really not a big fan of blockies

what do you think of these? #928 (comment)

@ligi

This comment has been minimized.

Member

ligi commented Mar 14, 2018

@owocki AFAIK there is no need for a co-author - still happy to help with the EIP
regarding blockie+avatar -> you still have a blockie ;-) - it is smaller but still not visually pleasing..

I really hoped flameIDs (https://shootout.flameid.com) by @karalabe could solve things - they look nice and fulfill the same purpose as blockies basically. But it looks like this is also not an option for the near future.

Also please try to think about attack-vectors where the blockies really help us. Also had to change my mind a bit there (bit of the process in the reddit thread linked) The blockies do not really help much more than an avatar does (even though someone could freely send them for their address - but how can this be used to trick people?)

I think in the end I will leave the choice to users - so they can decide what they get - depending on their thread-model and visual needs ;-)

@leanthebean

This comment has been minimized.

leanthebean commented Mar 21, 2018

@owocki Hey! I just saw this and this looks great! We've actually been thinking of something similar. We launched ethmoji.io yesterday where you can create your own unique avatars from emoji components. The layer combination of each ethmoji is guaranteed to be unique, and we even store the hash of the resulting image for every emoji to try prevent people from making emojis with unique layer combinations that end up looking identical to an already minted one. If you want to join our discord, we can discuss about this more (https://discordapp.com/invite/crFeaRj)

@pfletcherhill

This comment has been minimized.

pfletcherhill commented Mar 21, 2018

Hey all, big fan of this concept—or at least making more metadata available for addresses you're interacting with. Like @leanthebean suggested, it'd be neat to pursue a collaboration between EthAvatar and Ethmoji.

As a starting place, I'd suggest looking at the ethmoji-js package, which was built to help developers integrate Ethmoji in ways that sound similar to what you're talking about here.

I think it'd be great to develop a standard for contracts that provide (for a given address) both an avatar and a way of verifying an address via an image. It might be best to start working on those in parallel—or as two separate EIPs—because the image-to-identity mapping is far more challenging than an avatar standard. In the simplest form, the standard would just confirm the lookup method for turning an address into an image. If we agree on what that should be, then a developer could easily integrate with either EthAvatar or Ethmoji.

@ligi

This comment has been minimized.

Member

ligi commented Mar 21, 2018

Just had a short look into ethmoji - not a big fan to be honest - especially:

Does Ethmoji take any fees?
Yes, we take 1.25% from the price of successful sales of Ethmojis and a 5% fee on compositions.

@pfletcherhill

This comment has been minimized.

pfletcherhill commented Mar 21, 2018

Totally fair—definitely get the argument against fees. I think there's a chance the 5% fee is reduced as the team re-evaluates things.

I think it's a neat project because it creates a market around individual artworks (a funky mustache, fancy hat, etc) that are used to compose new ethmojis. The owners of those items get to set their own composition prices and get paid every time the items are used.

Beyond fees, what do you think could be improved?

Side note: I think this EIP should continue to be about avatars more generally, so maybe we should jump elsewhere to discuss ethmoji feedback?

@owocki

This comment has been minimized.

owocki commented Mar 23, 2018

Does anyone know anyone at ETHmoji? If not, I will send them a cold email.

We plan to support any ERC-721 token asset as an avatar, maybe we could fold them in in that context.

Yes, we take 1.25% from the price of successful sales of Ethmojis and a 5% fee on compositions.

Though I feel strongly that the EIP standard should be free and open to use, if users want to use a third party provider to create an avatar that is special to them, and then submit them to this ETH Avatar EIP standard thats great.

@shrugs

This comment has been minimized.

shrugs commented Mar 23, 2018

The ethmoji team is @pfletcherhill @mertcelebi @leanthebean and the team at OpenSea.

fees

I think the ETHAvatar standard should obviously be completely devoid of the concept of fees or third parties - that logic can be implemented as a secondary standard layer or within the ERC721 token (like ethmojis) for example.

@alexvandesande

This comment has been minimized.

Contributor

alexvandesande commented Mar 23, 2018

@shrugs

This comment has been minimized.

shrugs commented Mar 31, 2018

I just wanna bring up the concept of the ecoji checksumming again; any extra thoughts on it?

@skynode

This comment has been minimized.

skynode commented Apr 1, 2018

@Cygnusfear

This comment has been minimized.

Cygnusfear commented Apr 3, 2018

Hi everyone, I just got teleported in here. I am exploring several UX issues in Wallets/Crypto and would be interested in cooperating on this. In case this is misplaced, is there a more general EIP where I can contribute my thinking and working and have discussions on the topic?

I'd like to work on Ethereum UX and safety issues from multiple angles:

  • Avatars / identicons (I am really appreciating the discussion here)
  • ENS adoption (To me ENS is most critical to user safety, we should not be using 'IP addresses' anywhere unless necessary), I'm working on a redesign for ENS Now: https://github.com/Cygnusfear/subdomain-registrar
  • Metadata repositories (contract sources / contract names)

I would hope to turn these components into modular packages to make user safety a little easier.

@owocki

This comment has been minimized.

owocki commented Apr 3, 2018

In case this is misplaced, is there a more general EIP where I can contribute my thinking and working and have discussions on the topic?

youre in the right spot to contribute to the discussion!

@MidnightLightning

This comment has been minimized.

MidnightLightning commented Apr 7, 2018

@shrugs

Could also use Ecoji to encode the address (or a checksum or whatever) as a series of 4 emoji characters to complement or replace the identicon.

@alexvandesande

Ecoji is an fun checksum too: 4 emojis have more than a 1 trillion combinations. Maybe you could make a emoji based private key encoding: 😉😃😶🙂

Looks like the Ecoji library can already encode any sort of string input, so could encode a whole public key (for others to consume), or private keys for the owner to backup easily. I had the same sort of thought recently too: https://steemit.com/programming/@midnight426/the-future-of-identifiable-identifiers, and arrived at my own 1,024-character emoji library, radix-emoji. If a common 1,024-emoji index list was arrived at (similar to the canonical BIP39 word list), that would be an easy-to-type/copy/verify checksum or complete encoding scheme.

@ThePiachu

This comment has been minimized.

ThePiachu commented Apr 7, 2018

Gravatar does have some crypto features, but they're probably vestigial - https://en.gravatar.com/support/profile-crypto-currency/ .

@owocki

This comment has been minimized.

owocki commented Apr 8, 2018

comment from reddit which i thought was interesting

Random thought, what if we included the first few chars of the hash or a bip 39 word that related to the public key as part of the watermark - like how dollar bills have all sorts of anti fraud stuff

basically a different way of showing the uniqueness of the avatar (besides the outside border)

@3esmit

This comment has been minimized.

3esmit commented Apr 8, 2018

I think this is a really good idea.
Maybe would be applyable somehow to Self-sovereign Identity #725 through #735 claims, which Identity claims their image, and the pixelborder comes from Identity contract address?

@tomteman

This comment has been minimized.

tomteman commented Apr 8, 2018

@owocki this is really cool! We'd love to team up with you - would you consider adding Portis (https://portis.io) to reach a larger audience, especially less tech-savvy people? It's a JavaScript SDK that lets people run your Ethereum DApp in the browser (no client installation required), using the same account on all their devices. It will act as a fallback Web Provider for MetaMask/Mist/etc.

@patrykadas

This comment has been minimized.

patrykadas commented Apr 8, 2018

This sounds exciting! Cool job there on combining private / consensual within one image, really like it.

We were exploring the sphere of a ‘social layer’ on top of addresses and / or ERC721 at Userfeeds.io

Think not gravatar, but an identity.

You can check our reasoning behind latest experiment here:
https://medium.com/@maciejolpinski/fe70215b9c23

And play with it / fork it here:
https://userfeeds.github.io/cryptopurr/

@Arachnid

This comment has been minimized.

Collaborator

Arachnid commented Apr 8, 2018

A couple of suggestions:

  • There's no reason to lock this in to IPFS; it would make more sense to just specify a URI.
  • This seems like a perfect use-case for ENS reverse records. :)
@owocki

This comment has been minimized.

owocki commented Apr 9, 2018

from /u/heavyfishheavy on reddit:

I've read but the proposals are too weak. As long as they rely on visual clues it is always possible to keep generating new eth addresses until getting one close enough to match the target.

@tarekskr

This comment has been minimized.

tarekskr commented May 10, 2018

I've read but the proposals are too weak. As long as they rely on visual clues it is always possible to keep generating new eth addresses until getting one close enough to match the target.

The point is to have the code displaying the image verify the pattern and not display the avatar unless it's correct. "Close enough" won't work in that case.

@Cygnusfear

This comment has been minimized.

Cygnusfear commented May 11, 2018

Some considerations:

  • A publically visible, user generated visual identifier as security feature will always be copied by attackers
  • The various security identifiers that a user has should be unique and preferably be distributed across several 'channels' that are unique; they should always be complementary creating several points of failure
  • ENS Domains are relatively safe as identifier as they are temporally unique (however the recent flood of twitter scams is great (for thinking about this, not so much otherwise) as it clearly shows how a distributed system can still fail > verified + similar name + avatar)
  • Promoting a connection between ENS Domains and Avatars would resemble the Gravatar scheme, where the visual identifier is connected to the email address
  • Wallet standards could help a lot here, ideas below
  • Users should have the tools to protect themselves and be able to verify/mark their most trusted parties

Avatars in wallets:

  • Wallets are recommended to implement an Avatar that can be flipped by a click on it, and will show the identicon in place of the avatar
  • Additionally the recommendation would be to show the identicon first and let the user flip it to see the Avatar, it is an interactive educational tool to show both the flipping feature to the user and it's significance in security
  • Users are given an option to change the identicon theme
  • There should be various default, easy to access identicon themes, looks, styles. These will vary in shape / color and can easily be switched between (this could become an 'art' thing and could be sold by providers for all I care, I care, I am also a procedural artist, ohh damnn). Giving the user the power to add uniqueness makes it harder for an attacker to bypass their mental image.

I would like ENS to become far more prevalent as a first line of defense. Public addresses are unreadable and are identified mostly by first (and last) characters. Current identicons are hardly effective when sized down. It would almost make more sense to color the characters of the address (maybe this is worth experimenting with? hold my beer).

edit: I see another solution somewhere, although hard to articulate, where all these features are procedurally taken into account. > A border colored by ENS name, the Avatar is custom, the border shape is defined by the theme the user chooses

edit: these settings could be stored encrypted by the user's key somewhere so they can be easily picked up by different wallets (a la gravatar)

edit: this also makes it more clear to the user they are transacting with untrusted parties, which is an additional warning that we should supply to the user (similarly stored somewhere encrypted)

edit: I can also see wallet contracts (and considering the current discussion on account abstraction https://ethresear.ch/t/a-recap-of-where-we-are-at-on-account-abstraction/1721 with all wallets becoming contracts, this may be interesting) implementing most of this as an ERC standard, it can be a simple key value mapping to take into account future security features.

@danfinlay

This comment has been minimized.

Contributor

danfinlay commented May 15, 2018

A totally different approach to p2p avatars is taken by ssb Patchwork.

In it, any person can use any avatar they want, and anyone can assign a public avatar to anyone else, and when viewing a person's profile, you can see what avatar they chose for themselves, and what avatars your friends have selected for that user.

Anyways, just throwing another wild bull into the ring. It's an interestingly different take.

@Cygnusfear

This comment has been minimized.

Cygnusfear commented May 16, 2018

I've been playing around with making Ethereum addresses more identifiable and distinguishable to users. The hash of the address is used to color code it, making it much harder to confuse a user with even a limited part of the address visible. The proof of concept Chrome Extension can be found here:
https://github.com/Cygnusfear/IdentiAddress

Chrome Extension Screenshot

Edit: Additionally, the concept here can be applied to ENS (sub)domains, hashing the target address would allow for creating a uniquely identifiable color / icon etc. for the account. IE> the twitter verified icon but with a color or pattern specific to the account. This may decrease the likelyhood of scammers using similar usernames to fool users.

Edit: @alexvandesande I just read that you proposed Emoji encoding, I actually experimented with the same idea (there are some functions in the IdentiAddress script that will do just that). I found it illegible with icons being too similar to distinguish at first glance.

@tarekskr

This comment has been minimized.

tarekskr commented May 16, 2018

Very cool idea @Cygnusfear

@alexvandesande

This comment has been minimized.

Contributor

alexvandesande commented May 16, 2018

@Cygnusfear that's an interesting idea. Why do only some parts are underlined? How can you ensure it keeps contrast with the website background (specially if we consider some websites might use dark backgrounds). What if coloring the numbers, you actually convert the background and put the number on top with a lighter/darker color? This could create an interesting 6/7 color flag that the user might be able to recognize even without the numbers, which could be useful in smaller screens (I suppose you hover/touch to see numbers)..

screen shot 2018-05-16 at 11 17 27 am

Which could even be rendered like this also:

screen shot 2018-05-16 at 11 20 38 am

Interesting idea, but we would need user testing. I can always look at the yellow mouse and know I'm in the right contract, not sure I can remember that that address is always orange-teal-pink (and even if they do remember it, it's relatively easy to brute force an address that is orangeish-pinkish etc)

@Cygnusfear

This comment has been minimized.

Cygnusfear commented May 16, 2018

only some parts are underlined?

This is to create more visual contrast. A long line of color makes the lines harder to distinguish, by adding empty spaces I forced a composition that makes addresses easier to distinguish (basically the same problem between a name and address ("John McDoeFace" and "04kjdfgpopsdfgPOIDFGsdpfgoik"). I tried to make this feature more prominent by using a bolder/lighter font.

What if coloring the numbers, you actually convert the background and put the number on top with a lighter/darker color?

This (the blocks per the screenshot below) was another attempt, there are several iterations/experiments in the IdentiAddress.js file, you can try them out by changing line 22 (ident.formatAddressBottomBorder) to one of the available functions in IdentiAddress.js. The blocks make a page with many addresses harder to read, I figured if I could find a lighter but still legible solution it would be preferable.

IndentiAddress with the blocks formatting

Interesting idea, but we would need user testing.

Yeah, I agree this will need to be properly tested. I do believe that remembering the whole flag may be harder than remembering a few starting blocks; but it is an improvement over the normal address because they are based on a hash, which a user cannot generate by him/herself. So this is the biggest win! The Identicons (as this is inspired by those) fix/suffer from the same issue, I can only remember a few of them that I use very often, then further lack of adoption forces me to fall back on remembering the first and last characters of addresses. (edit: one advantage of coloring an address over using the Identicons is that the measure doesn't need any additional elements; I noticed that scaling the identicon makes it less legible so it is less effective as a measure when scaled down to fit inline in a piece of text)

Other findings: Certain solutions have the nasty side effect of destroying existing page layouts and are less usable in cases where the address is overflowing its container. Addresses are very often cropped (metamask for example) which made me prefer a solution that would work with only a few characters visible. Emoji's can't be copied and pasted (as they replace the address).

Further? I would publish it on r/ethereum but I don't have comment karma to post it so I put it on r/ethdev for now. Usage would certainly help with testing and iron out kinks (it doesn't work everywhere at the moment). Looking further ahead it is just a stop-gap measure due to the lack of ENS adoption.

Much thanks for the insightful and kind replies 👍

Edit: Also cool would be, if this could checksum addresses, and for example if you fail to copy 1 character it gives you a red address.

@drhus

This comment has been minimized.

drhus commented Sep 23, 2018

@Cygnusfear your approach with IdentiAddress is very interesting, I've found anything beyond the basic 6 colors could become ambiguous 6 colors (red,blue,green,orange,purple,yellow) + 2 (black, gray) with proper setup of background etc

things like blue and light blue, or pink and purple, brown and orange.. make it much harder to recognize and memorize.

considering Alex feedback and in the context of IdenitAddress chrome extension for etherscan, I thought it would be visually appealing to 1) use basic colors 2) encode every 4 bytes based on the style of 1st byte of that set,

so Ethereum 20byte address would be 5 colors (or 6 to 7) it's possible to have collusion but for the purpose of use I don't thinkg this would be a big issue?

screenshot of untitled document - google docs

take a look at this manual example: https://momcode.io/lab/?mode=HEX&input=0x6719a70e3B9652d0Cd3D4Cd28A93556497e2bF97&hexListV2=XQAAAQB8BQAAAAAAAAAYYO-_ne--gO--gBdL776e77-4N--_vD4i77-A77-xe---q3sq77-k77-k77-977-T77-wQ23vv7Dvvrvvv5pi776KI23vvpN477-j77-A77-y77-6A27vv4_vv5Pvvqzvvqfvv6rvv7zvv7vvvoDvvq7vvpQnNO--gO-_ie--uHpJ77-277-MPQ4G77-tHgg57767776KYDXvv6_vvpLvv6rvvqbvvo5jEu-_pQbvvrkA776w776yHBcw776t77-0UGfvvqzvvqzvv4Uk77-S77-0CDjvvp_vv5vvv7xr77-m776W776Z77-A776p776b776i77667761776pWH7vv4vvv4cU77-T776nSytc77-wLD7vv5nvv7ts77-q776mcO--tlfvv7J_RSzvv7J477-0de-_ke-_sW7vv6Dvv7os77-CJynvvoDvvrrvvobvvpcw77-m776F77-WUgg-Ye-_v2Tvvrvvv4fvv6oH776hSu--kHIsHh_vv7oV77-fYx0KYglG77-_Ukl6776X77-i77-PEBfvv7Tvv7gy776O77-0M--_iu-_mO--ge--j--_oAjvv67vv5Yw77-q776U776xPkMp77-ySXvvvqNMVu-_kSbvv7pkVe-_hO-_sSUFalnvv7J277-L77-w776-776wCCnvvoLvv5Ze77-_P1bvvoPvvrN7PXzvvrkj7763TO-_tO--hu--sjtdEO-_mhLvvqXvvp3vvprvvpcT77-BfgjvvpDvv7zvvpIz776vK---tC7vv7Vq77-Z77-z77-bMu--ve-_ne--oe--j0Pvvqc4Nu--ke-_iO--vu--uO-_iD4z77-ONSphKSXvvr91776v776x7762ah3vv4Mc776O77-q776577-O77-S776B776JQBlTEkpn776WUe-_lmAlO--_ru-_v03vv5vvvpHvv6Pvvr7vv5jvv64B776u77-9776zETQH77-vfDBuAO-_nUwC776B77-UTu--u---gxrvv5Hvvq_vvrdlKu--kAY0776pPO--uEEz776u77-c77-O77-z77-UAAXvvrnvv6bvv6Vs77-iSWYM776HIG_vvrRlfe--rl1m776g77--c3Pvv61d776477-K776NRyQ7EFMf77-Q77-w77-977-oJe--k0zvvrIn77-_77-_77-N77-ZNQA

@MidnightLightning

This comment has been minimized.

MidnightLightning commented Sep 24, 2018

I've found anything beyond the basic 6 colors could become ambiguous 6 colors (red,blue,green,orange,purple,yellow) + 2 (black, gray) with proper setup of background etc

Regarding the number of colors that can be "easily" visually distinguished, I've seen several packages reference the work of Cynthia Brewer who did some research on distinct color schemes for use in cartography (so no text laid over the top, just the color swatches).

Of the "Qualitative" scales she arrived at, there's two with 12 elements in them, two more with 9, and four more with 8. (visualized here; the "Qualitative" scales are the ones at the end)

One of the two 12-element scales is lighter-colored, and would work with black text over any of them, I think:

lighter

The other is a set of six matched pairs, where each pair has a dark element and a light element. I believe that one could be used well if the text color were set to be the "other" color in the matched pair (use light blue to draw on dark blue, dark blue to draw on light blue, etc.):

darker

That would be about the limit to stretch it to (12 colors). Pulling it back a step to 9, using either the light-colored Brewer palette with black text, or the dark-colored Brewer palette with white text I think would work:

lighter

darker

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment