Is Ethereum wallet address case sensitive?

  • I sent some amount of ETH to a wallet. I checked the wallets balance on ether chain. I entered the address in the search field and noticed both lowercase and uppercase versions of the address seemed to work.

    I wanted to buy a few bucks more, but now I'm not sure if there is something wrong with the address I created. I'd be grateful for some guidance.

  • I'm bringing the content of an answer from the Ethereum forum here:

    Ethereum wallet addresses are in hex [0-9A-F]*. While the address itself is case-insensitive (A is the same as a to the network), the case sensitivity is used as a (optional) checksum. It was built as an after-thought to an addressing scheme that lacked basic checksum validation.

    https://github.com/ethereum/EIPs/issues/55#issuecomment-187159063

    The checksum works like so:

    1. lowercase address and remove 0x prefix
    2. sha3 hash result from #1
    3. change nth letter of address according to the nth letter of the hash:

      • 0,1,2,3,4,5,6,7 → Lowercase
      • 8, 9, a, b, c, d, e, f → Uppercase

    So, you sha3 hash the address, and look at each Nth character of the sha result. If it's 7 or below, the Nth character in the address is lowercase. If it is 8 or above, that character is uppercase.

    And the purpose of a checksum is to help make sure you typed in the address correctly. If there was no case-sensitivity check you could accidentally type "a" instead of "b" and send it to the wrong address. But if you accidentally type "a" instead of "B" (there's a 50% chance the letter was supposed to be capitalized), then you wallet software / exchange would throw an error

    Actually it's more than that. Even if you'd accidentally type "a" instead of "b" in an otherwise checksummed address, an error would be detected, because the capitalization pattern of the *other* letters would now be invalid.

  • Capitalization simply means the address has a checksum. You should use the capitalization address because of this, but both will work.

    @user1035 if you are satisfied with this answer please mark it as accepted by clicking on the check mark next to it.

    To verify, any addresses that's fully capitalized can be converted to an checksum address with right capitalization. So in that sense addresses are case insensitive - both addresses are the same. Unlike for example the unix/linux file system where you can have a file named 'Ethereum' and one named 'ethereum' in the same directory. Isn't that right?

    @JorisBontje I think this answer could still be clarified. Changing the letters to upper case doesn't give the address a checksum.

    what does `capitalization address` mean exactly? this answer is a bit ambiguous

  • Look at this examples:

    > Web3.utils.toChecksumAddress("0x03fB09251eC05ee9Ca36c98644070B89111D4b3F".toLowerCase());
    '0x03FB09251eC05ee9Ca36c98644070B89111D4b3F'
    > Web3.utils.toChecksumAddress("0x03fB09251eC05ee9Ca36c98644070B89111D4b3f".toLowerCase());
    '0x03FB09251eC05ee9Ca36c98644070B89111D4b3F'
    > Web3.utils.toChecksumAddress("0x03fB09251eC05ee9Ca36c98644070B89111D4b3e".toLowerCase());
    '0x03Fb09251ec05eE9CA36c98644070B89111D4b3e'
    > Web3.utils.isAddress("0x03FB09251eC05ee9Ca36c98644070B89111D4b3f".toLowerCase());
    true
    > Web3.utils.isAddress("0x03FB09251eC05ee9Ca36c98644070B89111D4b3F".toLowerCase());
    true
    > Web3.utils.isAddress("0x03FB09251eC05ee9Ca36c98644070B89111D4b3F");
    true
    > Web3.utils.isAddress("0x03FB09251eC05ee9Ca36c98644070B89111D4b3f");
    false
    > Web3.utils.isAddress("0x03FB09251eC05ee9Ca36c98644070B89111D4b3e");
    false
    > Web3.utils.isAddress("0x03FB09251eC05ee9Ca36c98644070B89111D4b3E");
    false
    
    

    Note the last char ;)

License under CC-BY-SA with attribution


Content dated before 7/24/2021 11:53 AM