任何人都可以解释ENS解析器如何将内存转换为地址以坚固性地址类型

发布于 2025-02-13 07:16:42 字数 595 浏览 0 评论 0原文

当我是Wangt将字节转换为地址时,我经常使用以下功能。

function bytesToAddress(bytes memory byte) public pure returns (address addr) {

        assembly {
             addr := mload(add(byte, 20))
       }
    }

但是我发现ENS公共解析器具有不同的写作守则,

    function bytesToAddress(bytes memory b) internal pure returns(address payable a) {
    require(b.length == 20);
    assembly {
        a := div(mload(add(b, 32)), exp(256, 12))
    }
}

因此为什么它会增加Div和Exp(256,12),实际上发生了什么。 0x3E8DC215A6E404A7BA811DE5DA3FF2A809AE2AAE9AE2是Ropsten Testnet中的ENS公共分辨率地址。

when I am wangt to convert bytes memory to address, I often used the below function.

function bytesToAddress(bytes memory byte) public pure returns (address addr) {

        assembly {
             addr := mload(add(byte, 20))
       }
    }

But I found the ens public resolver has different code of writing

    function bytesToAddress(bytes memory b) internal pure returns(address payable a) {
    require(b.length == 20);
    assembly {
        a := div(mload(add(b, 32)), exp(256, 12))
    }
}

So why it add div and exp(256, 12),what actually happening .
0x3E8Dc215A6E404A7Ba811DE5Da3ff2A809AE94E2 is ens public resolver address in ropsten testnet.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文