type
status
date
slug
summary
category
tags
icon
password
操作
在检查一笔以太坊代币授权时,遇到了这样一串数字:
115792089237316195423570985008687907853269984665640564039457584007913129639935
Q:这串看似随机的大数字是什么?
A:这是以太坊智能合约中的"无限授权"数值,用于授予第三方合约最大的代币使用权限。
Q:为什么选择这个数字代表"无限"?
A:将其转换为16进制,会呈现出特殊的规律:
0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
这是uint256能表示的最大值,即2^256-1。
Q:为什么是2^256-1而不是2^256?
A:这涉及计算机的基础原理:以4位二进制为例,从0000到1111,表示范围是0到15(2^4-1)。同理,256位二进制的表示范围是0到2^256-1。
Q:如果非要表示2^256呢?
A:2^256用16进制表示将是0x1后跟64个0,但这需要257位,超出了uint256的范围。这正是智能合约选择2^256-1作为"无限"的技术原因。
这个例子展示了区块链如何在有限的数据类型中,优雅地实现了"无限"的概念。
- 作者:董振业
- 链接:https://dongzhenye.com/article/infinity-in-ethereum-approve
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。