主页 > imtoken官方下载2.0 > 【知识】以太坊地址区分大小写吗?

【知识】以太坊地址区分大小写吗?

imtoken官方下载2.0 2023-11-17 05:11:58

以太坊地址是否区分大小写? 为了弄清楚这个问题,我们不妨先在私有链上做个实验:

geth> eth.sendTransaction({
    from: eth.accounts[0],
    to: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    value: web3.toWei(1, 'ether')
})
geth> eth.sendTransaction({
    from: eth.accounts[0],
    to: "0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    value: web3.toWei(1, 'ether')

以太坊为什么叫以太坊_以太坊地址查询_以太坊每日交易量查询

}) geth> eth.getBalance("0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") geth> eth.getBalance("0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")

复制

从实验结果来看,纯小写地址和纯大写地址其实是同一个地址,那么是否可以断定以太坊地址是不区分大小写的呢? 让我们看看下面的混音实验:

pragma solidity ^0.5.0;
contract Foo {
    address bar = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;

以太坊为什么叫以太坊_以太坊地址查询_以太坊每日交易量查询

}

复制

代码运行结果如下图所示:

混音

结果提示错误,并给出了大小写混合的正确地址:

这看起来像一个地址以太坊地址查询,但校验和无效。 正确的校验和地址:“0xaAaAaAaaAaAaAaaAaAAAAAAAAaaaAaAaAaaAaaAa”。 如果这不用作地址,请在前面加上“00”。 有关更多信息#adds,请 lieter

发生了什么? 其实这是因为EIP-55规范引入了校验和机制。 它是做什么用的? 想象一下,如果你在输入一个很长的以太坊地址时不小心输入了错误的字符,那么这样的错误将很难被发现。 通过校验和机制,我们可以在业务程序中验证地址的准确性,从而降低用户输入错误地址的风险以太坊地址查询,给出golang代码示例:

package main
import (

以太坊为什么叫以太坊_以太坊地址查询_以太坊每日交易量查询

"flag" "fmt" "github.com/ethereum/go-ethereum/common" ) var ( address = flag.String("address", "", "address") )

以太坊为什么叫以太坊_以太坊每日交易量查询_以太坊地址查询

func init() { flag.Parse() } func main() { addressWithChecksum := common.HexToAddress(*address).Hex() if addressWithChecksum != *address { fmt.Println(" valid: " + addressWithChecksum) fmt.Println("invalid: " + *address)

以太坊为什么叫以太坊_以太坊地址查询_以太坊每日交易量查询

} else { fmt.Println("This address is valid.") } }

复制

代码运行结果如下图所示:

图片

校验和

如果你没有Golang运行环境,其实还有一个更简单的验证方法:使用Etherscan获取带有校验和的地址,注意地址栏中的地址和下面Address旁边的地址:

图片

以太扫描

总结:以太坊地址本身是不区分大小写的,但是出于安全考虑,我们应该尽可能使用符合EIP-55规范的地址。 当然,业务程序必须有相应的校验和校验逻辑。