解密以太坊的通用语言,深入浅谈十六进制

在探索以太坊乃至整个区块链世界的奇妙旅程中,你一定会遇到一串串看起来杂乱无章、由数字和字母组成的代码,比如一个以太坊地址 0x742d35Cc6634C0532925a3b844Bc9e7595f8dE2c,或者一个交易哈希 0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060,这些看似神秘的字符串,正是以太坊的“通用语言”——十六进制

理解十六进制,就像是拿到了一把打开以太坊技术核心的钥匙,它不仅仅是一种编码方式,更是连接人类可读信息与机器可执行指令的桥梁。

什么是十六进制?

我们日常生活中最常用的计数系统是十进制,它基于数字0-9,每一位的权值是10的幂,数字 123 代表 1*10² 2*10¹ 3*10⁰

十六进制,简称“Hex”,是基于数字0-9和字母A-F的计数系统,它的每一位权值是16的幂,字母A-F分别代表十进制的10-15。

十进制 十六进制 十进制 十六进制
0 0 8 8
1 1 9 9
2 2 10 A
3 3 11 B
4 4 12 C
5 5 13 D
6 6 14 E
7 7 15 F

为什么计算机和区块链领域如此偏爱十六进制呢?这源于计算机的底层架构——二进制,计算机所有信息最终都由0和1的序列(比特)表示,但二进制序列过于冗长,难以阅读和书写,十六进制恰好是二进制的完美“压缩包”,因为1位十六进制数可以精确地表示4位二进制数

二进制数 1110 1111 可以直接转换为十六进制的 EF,这种一一对应的关系使得十六进制在表示二进制数据时既简洁又精确。

十六进制在以太坊中的核心应用

在以太坊生态中,十六进制无处不在,它扮演着至关重要的角色。

以太坊地址

这是最常见的应用,每一个以太坊账户都有一个唯一的地址,用于接收和发送ETH及代币,这个地址就是以 0x 开头的40位十六进制字符串(长度为42,包括 0x 前缀)。

  • 示例: 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B
  • 解读:
    • 0x:这是一个以太坊的通用前缀,表明该字符串是一个以太坊地址或其它数据类型的十六进制表示。
    • 后面的40个字符(20个字节)就是地址本身,它通常是通过公钥经过一系列哈希算法(如Keccak-256)生成的,确保了其唯一性和安全性。

交易哈希

当你发起一笔以太坊交易后,会得到一个交易哈希值,这串独特的64位十六进制字符串(加上 0x 前缀为66位)是这次交易的“身份证号”。

  • 示例: 0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060
  • 解读:
    • 0x:前缀。
    • 64个字符(32个字节)是这次交易数据经过哈希算法(Keccak-256)计算后得到的摘要,任何对原始交易的微小改动都会导致哈希值完全不同,因此它可以用来唯一标识一笔交易,并验证其完整性,在区块链浏览器(如Etherscan)中,输入这个哈希值就能查到交易的详细信息。

智能合约与ABI

智能合约是以太坊的灵魂,当与智能合约交互时,无论是调用函数还是读取数据,都离不开十六进制。

  • 函数选择器: 当你调用一个智能合约函数时,以太坊虚拟机会根据函数的签名(如 transfer(address,uint256))计算出一个4字节的十六进制值,即“函数选择器”,这个值会放在交易数据的前4个字节,告诉EVM应该执行哪个函数。
  • 参数编码: 函数的参数(如地址、整数、字符串等)也需要被编码成十六进制格式,附加在函数选择器之后,构成完整的交易数据。
  • ABI(应用程序二进制接口): ABI是智能合约与外部世界沟通的“语言规范”,它定义了如何对函数调用和事件数据进行编码和解码,而这种编码的核心就是十六进制。

区块与交易数据

以太坊上的每一个区块和其中的每一笔交易,其原始数据都是以十六进制格式存储和传输的,开发者使用工具(如Web3.js或ethers.js)与以太坊节点交互时,接收到的底层数据往往是十六进制格式的,需要进一步解析才能变成人类可读的信息。

为什么以太坊偏爱十六进制?

  1. 高效性: 如前所述,十六进制是二进制的紧凑表示,极大地减少了数据长度,便于传输和存储。
  2. 可读性: 相比于一长串的0和1,十六进制对人类来说更友好,更容易进行校对和调试。
  3. 标准化: 0x 前缀和十六进制格式已成为以太坊及整个以太坊虚拟机生态的黄金标准,确保了不同工具和平台之间的兼容性。

相关文章