前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【知识】以太坊地址是否区分大小写

【知识】以太坊地址是否区分大小写

作者头像
辉哥
发布于 2021-05-18 03:18:53
发布于 2021-05-18 03:18:53
7.8K00
代码可运行
举报
文章被收录于专栏:区块链入门区块链入门
运行总次数:0
代码可运行

以太坊地址区分大小写么?要搞清楚这个问题,我们不妨先在私链上做个实验:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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")

从实验结果上来看,纯小写地址和纯大写地址实际上是同一个地址,那么是不是由此可以得出以太坊地址不区分大小写呢?我们再看下面这个 remix 上的实验:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pragma solidity ^0.5.0;

contract Foo {
    address bar = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
}

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

remix

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

This looks like an address but has an invalid checksum. Correct checksummed address: “0xaAaAaAaaAaAaAaaAaAAAAAAAAaaaAaAaAaaAaaAa”. If this is not used as an address, please prepend ’00’. For more information please see https://solidity.readthedocs.io/en/develop/types.html#address-literals

怎么回事?实际上这是因为 EIP-55 规范引入了 checksum 机制。它有什么用处?设想一下,如果你在输入长长的以太坊地址的时候,不小心输错了一个字符,那么很难发现这样的错误,有了 checksum 机制,我们就能在业务程序里校验地址的准确性,从而降低用户输入错误地址的风险,给出一个 golang 代码的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.")
    }
}

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

image

checksum

如果你没有 Golang 的运行环境,实际上还有更简单的验证方法:通过 Etherscan 来获取带 checksum 的地址,留意地址栏中的地址和下面 Address 旁边的地址:

image

etherscan

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

本文转载自https://www.ithothub.com/blockchain/2020042213351523.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档