The checksum isn’t correct in that address. The correct checksum is "0x964d9D1A532B5a5DaeacBAc71d46320DE313AE9C".

When using Etherscan, if the checksum is wrong, it lowercases the address and computes the address itself. If you notice on the Etherscan page it has corrected the checksum for you too. :)

Discussions

Address checksum errors being reported as ENS name resolution errors
> ethers.utils.getAddress("0x532C9Ff853CA54370D7492cD84040F9f8099f11b") { Error: bad address checksum (arg="address", value="0x532C9Ff853CA54370D7492cD84040F9f8099f11b", version=4.0.41) More on github.com
🌐 github.com
2
January 1, 2020
How do I get an address with a correct checksum, from an address with an incorrect checksum, using Solidity? - Ethereum Stack Exchange
Example of an address with the wrong checksum: 0xa54D3c09E34aC96807c1CC397404bF2B98DC4eFb Example of an address with the right checksum: 0xa54d3c09E34aC96807c1CC397404bF2B98DC4eFb -Difference i... More on ethereum.stackexchange.com
🌐 ethereum.stackexchange.com
getChecksumAddress is not exported
Is there an alternative approach that should be used to convert a string to a checksummed address? ... Beta Was this translation helpful? Give feedback. ... That means the checksum is incorrect. This is usually an indication you have a bad address, but if you want to force calculating the address, ... More on github.com
🌐 github.com
2
1
August 11, 2022
solidity - In Ethereum, when assigning an address, it is throwing parsing error - Stack Overflow
May I know what am I doing it wrong? [ERROR] Ate bad code and died, compilation aborted. ... Thanks @MadJackal However I am getting another error where it is saying the address is not valid. SyntaxError: This looks like an address but has an invalid checksum. More on stackoverflow.com
🌐 stackoverflow.com
🌐
Reddit
reddit.com › r/ethdev › whats up with this checksum address error
r/ethdev on Reddit: Whats up with this Checksum address error
February 13, 2020 -

Aloha, everytime i run my code from the Cryptokitties contract address i get this error.

web3.exceptions.InvalidAddress: ('Web3.py only accepts checksum addresses. The software that gave you this non-checksum address should be considered unsafe, please file it as a bug on their platform. Try using an ENS name instead. Or, if you must accept lower safety, use Web3.toChecksumAddress(lower_case_address).', '0x06012c8cf97bead5deae237070f9587f8e7a266d')

what am i doing wrong ? how can i fix this ?

🌐
GitHub
github.com › ethers-io › ethers.js › issues › 694
Address checksum errors being reported as ENS name resolution errors · Issue #694 · ethers-io/ethers.js
January 1, 2020 - I am unsure if this is intended behaviour or a bug, but resolveName()is swallowing the errors from getAddress() It is confusing as these are address errors being reported as ENS name resolution errors. Happy to write a fix if it is confi...
Author   ethers-io
Top answer
1 of 7
3

The simple answer is that in solidity:

address(0xa54D3c09E34aC96807c1CC397404bF2B98DC4eFb);

It is true that the compiler warns you of incorrect checksum when it sees one, but that warning is probably there just to tell you that you might have gotten the wrong address altogether (because typically, constant addresses are copy-pasted from one place to another, and copy-pasting would not "accidentally" change some upper-case letter to lower-case or vice versa).

The Solidity compiler tells you exactly how you can fix it (manually):

SyntaxError: This looks like an address but has an invalid checksum. Correct checksummed address: "0xa54d3c09E34aC96807c1CC397404bF2B98DC4eFb". If this is not used as an address, please prepend '00'. For more information please see solidity.readthedocs.io/en/develop/types.html#address-literals address(0xa54D3c09E34aC96807c1CC397404bF2B98DC4eFb);

The solution then becomes:

Hexadecimal literals that pass the address checksum test, for example 0xdCad3a6d3569DF655070DEd06cb7A1b2Ccd1D3AF are of address payable type. Hexadecimal literals that are between 39 and 41 digits long and do not pass the checksum test produce an error. You can prepend (for integer types) or append (for bytesNN types) zeros to remove the error.

But again, these two constants are identical, and they will yield the exact same runtime-behavior.

2 of 7
3

As mentioned in comments Solidity doesn't have such functionality. Solidity (and also EVM) doesn't understand anything about address checksums, it's only a construct added on top of the toolkits.

If you really really want to you can calculate it yourself in Solidity. Here's the original EIP: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md with some example code. But I fail to see why you'd want to do that.

🌐
Alchemy
alchemy.com › docs › how-to-handle-checksum-addresses
How to Handle Checksum Addresses | Alchemy Docs
As expected, ethers was able to give us a checksummed version of an all-lowercase address and correctly identify an address that had an invalid checksum. UX revolving around Ethereum wallets and wallet addresses still leave a lot to desire.
🌐
GitHub
github.com › ethers-io › ethers.js › discussions › 3261
getChecksumAddress is not exported · ethers-io/ethers.js · Discussion #3261
August 11, 2022 - Give feedback. ... That means the checksum is incorrect. This is usually an indication you have a bad address, but if you want to force calculating the address, you can use getAddress(addr.toLowerCase()).
Author   ethers-io
🌐
Stack Overflow
stackoverflow.com › questions › 65549506 › in-ethereum-when-assigning-an-address-it-is-throwing-parsing-error
solidity - In Ethereum, when assigning an address, it is throwing parsing error - Stack Overflow
May I know what am I doing it wrong? [ERROR] Ate bad code and died, compilation aborted. ... Thanks @MadJackal However I am getting another error where it is saying the address is not valid. SyntaxError: This looks like an address but has an invalid checksum.
Find elsewhere
🌐
GitHub
github.com › ethereum › web3.py › issues › 716
Improve warning on failed address checksum · Issue #716 · ethereum/web3.py
March 21, 2018 - Special-case the warning, so that an all-lower-case address gives a specific warning, along the lines of: "web3py only accepts checksummed addresses. Please report it as a bug on any project that does not provide you checksummed addresses. In the meantime, you can force an address into checksummed state with valid_address = w3.toChecksumAddress(questionable_address) after double-checking that there are no errors in the address.
Author   ethereum
🌐
Ethers
docs.ethers.org › v5 › api › utils › address
Addresses
An Address is a DataHexString of 20 bytes (40 nibbles), with optional mixed case. If the case is mixed, it is a Checksum Address, which uses a specific pattern of uppercase and lowercase letters within a given address to reduce the risk of errors introduced from typing an address or cut and paste issues.
🌐
Rust
docs.rs › alloy-primitives › latest › src › alloy_primitives › bits › address.rs.html
alloy_primitives/bits/ address.rs
15 InvalidChecksum, 16} 17 18impl From<hex::FromHexError> for AddressError { 19 #[inline] 20 fn from(value: hex::FromHexError) -> Self { 21 Self::Hex(value) 22 } 23} 24 25impl core::error::Error for AddressError { 26 #[inline] 27 fn source(&self) -> Option<&(dyn core::error::Error + 'static)> { 28 match self { 29 #[cfg(any(feature = "std", not(feature = "hex-compat")))] 30 Self::Hex(err) => Some(err), 31 _ => None, 32 } 33 } 34} 35 36impl fmt::Display for AddressError { 37 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 38 match self { 39 Self::Hex(err) => err.fmt(f), 40 Self::InvalidChecksum => f.write_str("Bad address checksum"), 41 } 42 } 43} 44 45wrap_fixed_bytes!( 46 // we implement Display with the checksum, so we don't derive it 47 extra_derives: [], 48 /// An Ethereum address, 20 bytes in length.
🌐
Mycrypto
support.mycrypto.com › troubleshooting › sending › not-checksummed-shows-when-i-enter-an-address
Error: 'Not Checksummed' When Entering Address | MyCrypto Knowledge Base
January 15, 2021 - The one that is all lowercase is "not checksummed," meaning that you could mistype a letter or number. If you mistype the address and send the transaction, your ETH will be gone forever.
🌐
GitHub
github.com › ethereum › solidity › issues › 3733
This looks like an address but has an invalid checksum. If this is not used as an address, please prepend '00'. · Issue #3733 · argotorg/solidity
July 28, 2018 - address Address = 0x9dae7bf014e83fdb2fd11a3ed99e775f58b256d9; //check account modifier checkAcc() { require (msg.sender == mainAcc); _; } modifier checkAddress() { require(msg.sender != Address); _; } // Allowed withdrawals of previous bids mapping (address => uint) pendingWithdraws; function WithdrawalFunds() public payable { mainAcc = msg.sender; etherAcc = msg.value; } //withdrawal start function withdraw() public checkAcc checkAddress { if(etherAcc > 0){ msg.sender.transfer(etherAcc); } }
Author   argotorg
🌐
Ethers
docs.ethers.org › v6 › api › address
Documentation
If address contains both upper-case and lower-case, it is assumed to already be a checksum address and its checksum is validated, and if the address fails its expected checksum an error is thrown.
🌐
CoinCodex
coincodex.com › home › news › ethereum address checksum explained - checksummed vs non-checksummed eth address
Ethereum Address Checksum Explained | CoinCodex
January 31, 2025 - Ethereum address checksum validation is a cryptographic function that allows users to verify their blockchain addresses to ensure they are valid and don't contain any typos. Your Ethereum address–as well as every other Ethereum address in existence–has two versions - one that includes uppercase letters and one that doesn’t.
🌐
GitHub
github.com › MetaMask › metamask-extension › issues › 8080
Incorrect error message when sending to an address with an invalid checksum · Issue #8080 · MetaMask/metamask-extension
February 22, 2020 - Describe the bug If you try to send to a non-lowercase address that doesn't have the right checksum/casing when using a dev network (e.g. Ganache), MM displays an error message saying that the network doesn't support ENS. To Reproduce (R...
Author   MetaMask