小编inv*_*cat的帖子

使用 unchecked 有什么好处?

在OpenZeppelin ERC20实现中,有一个_transfer方法:

function _transfer(
    address sender,
    address recipient,
    uint256 amount
) internal virtual {
    require(sender != address(0), "ERC20: transfer from the zero address");
    require(recipient != address(0), "ERC20: transfer to the zero address");

    _beforeTokenTransfer(sender, recipient, amount);

    uint256 senderBalance = _balances[sender];
    require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
    unchecked {
        _balances[sender] = senderBalance - amount;
    }
    _balances[recipient] += amount;

    emit Transfer(sender, recipient, amount);

    _afterTokenTransfer(sender, recipient, amount);
}
Run Code Online (Sandbox Code Playgroud)

为什么他们使用未经检查的算术来减少余额?我知道,如果未经检查,2-3 将返回 2**256-1 并且不会出现异常。但为什么我们需要这个?

ethereum solidity openzeppelin

4
推荐指数
1
解决办法
1096
查看次数

标签 统计

ethereum ×1

openzeppelin ×1

solidity ×1