基础概念
在计算机里,一个字节(Byte)是8个比特(Bit),即8位二进制数,即1Byte=8bit。8位二进制数也就是2位十六进制数。
举个例子:
全是0的1个字节就是 00000000,转换为十六进制字符串就是"0x00"
全是1的1个字节就是 11111111,转换为十六进制字符串就是"0xFF"
最低位是1的1个字节就是 00000001,转换为十六进制字符串就是"0x01"
前缀0x表示十六进制。
我们每进行一笔以太坊的交易,就会得到该笔交易的交易id,它是一个64位的十六进制字符串,例如:
“0x22a1264249302682475703933c819e32b4c1524938f93ff35b87c19f4e8beeb2”
在使用计算机编程语言go语言实现的以太坊里,它实际上是用32个字节的字节数组来表示的。所以这32个字节转换为十六进制字符串,也就是64位的十六进制字符串。
那么,这32个字节又是如何来的呢?是对整个交易结构的所有数据进行哈希的结果。该哈希值(即交易id)会被写入区块链里。我们平时在区块链浏览器里通过交易哈希查询一笔交易时使用的就是这个哈希值来进行查询的。
这里解释一下哈希是什么?哈希,英文Hash,从百度的解释结果就是:
Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所