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. :)
Address checksum errors being reported as ENS name resolution errors
How do I get an address with a correct checksum, from an address with an incorrect checksum, using Solidity? - Ethereum Stack Exchange
getChecksumAddress is not exported
solidity - In Ethereum, when assigning an address, it is throwing parsing error - Stack Overflow
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 ?
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.
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.
I created this simple tool that you can use to convert a list of non-checksummed addresses to checksummed addresses.
You can preview it and use it here: https://raw.githack.com/jeremythen/emv-checksum-address-convertor/main/index.html
This is the GitHub repo: https://github.com/jeremythen/emv-checksum-address-convertor
Check the README.md file to learn how to use it. But I think it's straightforward. Simply paste the list of non-checksummed addresses and hit the Convert button. If your list of addresses has the format [0xa1..., 0xa2...], then check the Addresses in array? checkbox so it parses it and returns the result in the same format, ready to copy and paste.
Remember the chain Id. If it's Ethereum, then leave it empty. If it's any other chain, then check the correct chain Id to use here: https://chainlist.org/
You can also use the backend tool in the index.js file, to use it with nodejs or something like that.
I hope it helps.
Check the screenshots below for an example:


Read this
https://docs.soliditylang.org/en/develop/types.html#address-literals
'Hexadecimal literals that pass the address checksum test, for example 0xdCad3a6d3569DF655070DEd06cb7A1b2Ccd1D3AF are of address 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.'