Since Ethereum addresses don't have checksums, should ICAP addresses (which do have a checksum) be proliferated?

Or are there other options more suitable for the proliferation of checksummed Ethereum addresses?

For example, would this Ethereum Improvement Proposal (EIP) or some other be more suitable (for say an HD wallet)?

# code from EIP linked above
def checksum_encode(addr): # Takes a 20-byte binary address as input
    o = ''
    v = utils.big_endian_to_int(utils.sha3(addr))
    for i, c in enumerate(addr.encode('hex')):
        if c in '0123456789':
            o += c
            o += c.upper() if (v & (2**(255 - i))) else c.lower()
    return '0x'+o

Suitable is subject to discussion, so I will try to stick to facts and the current (fast moving) state of implementation.

In general, ICAP addresses starting with XE... used to be the desired way to implement a secure addresse mechanisms. Currently only the C++ client and the JavaScript client offer ICAP implementation. A broader acceptence of ICAP address formats and client compatibily might be introduced in other clients after the Homestead fork.

Geth for instance plans rudimentary ICAP support from version 1.4.1 onwards.

Most recently, Vitalik's idea of hex checksum encoding was experimentally implemented in the JavaScript API and the Ethereum DApp Wallet.

Confusion exists on actually why there has to be yet another standard of addresses checksum. Critics state the checksum encoded hex addresses are not immidiatly recognizable as being distinct from regular hex addresses and therefor the added layer of security only appears on a software level, not on a user level.

Therefore, implementing and using ICAP should be the most suitable option, since it's adding more security for the users and is currently the most distributed checksum enabled address format, even though not all clients support it. Yet.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.