返回首页

以太坊地址区分大小写么

时间:2018-12-20 22:08来源:知行网www.zhixing123.cn 编辑:麦田守望者

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

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 上的实验:

pragma solidity ^0.5.0;

contract Foo {
address bar = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
}
代码运行结果如下图所示:

remix
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 代码的例子:

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.")
}
}

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

checksum
checksum

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

etherscan
etherscan

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

------分隔线----------------------------
标签(Tag):以太坊地址
------分隔线----------------------------
推荐内容
  • 一图看懂开源许可协议:GPL、BSD、MIT、Mozilla、Ap

    以下是上述协议的简单介绍( 单击图片可看大图 ): BSD开源协议 BSD开源协议是一个给...

  • 程序员必备的5款软件简介

    我不是一个程序员,没有码农的那种才华,但是经常也会折腾网站,有的时候可以说的为了...

  • 几个用于诊断HTTP响应时间情况的小工具

    如果有人说你的 HTTP 接口响应慢,那可能是他的电脑慢,也可能是网络本身慢,还可能是...

  • 什么是EV 代码签名证书?

    什么是EV 代码签名证书? EV代码签名证书是指扩展验证代码签名证书,具有标准代码签名...

  • 知行网告诉你 机器学习最流行的语言是……?

    应该掌握哪门编程语言,才能获得机器学习或数据科学的工作机会呢?这是一个银弹的问题...

  • 从一个范例看XML的应用详解教程

    如果你已经看了Asp.Net Ajax的两种基本开发模式 这篇文章,你可能很快会发现这样一个...

  • 猜你感兴趣
  • 教育技术学动态
  • 教育技术学论文
  • 理论研究
  • 应用研究
  • 资源收藏
  • 百家观点
  • 英文文献
  • 中国电化教育
  • 电化教育研究
  • 中国远程教育
  • 开放教育研究
  • 现代教育技术
  • 远程教育杂志
  • 现代远距离教育
  • 中国教育信息化
  • 中国信息技术教育
  • 中小学信息技术
  • Flash龙8国际平台入口
  • Photoshop龙8国际平台入口
  • 3DMAX龙8国际平台入口
  • AutoCAD龙8国际平台入口
  • CorelDRAW龙8国际平台入口
  • Matlab龙8国际平台入口
  • 其他龙8国际平台入口
  • .Net龙8国际平台入口
  • Asp龙8国际平台入口
  • Php龙8国际平台入口
  • Jsp龙8国际平台入口
  • Ajax龙8国际平台入口
  • Android教程
  • 其他龙8国际平台入口
  • Word教程
  • Excel教程
  • PowerPoint教程
  • Ubuntu教程
  • 其他教程
  • 课件下载
  • 软件下载
  • 视频教程下载
  • 其他下载
  • 教案大全
  • 试题大全
  • 课件大全
  • 其他大全
  • 人像摄影
  • 风光摄影