openlang

Solidity 从 address 转换为 uint256 时失败

我创建了一个包含结构体的数组,然后尝试从该数组取得每个账号的值。但传入包含 msg.sender 的 address 变量时失败了,因为它的类型似乎无法转换为 uint256。应该怎样实现?

从英语翻译查看原文

后续讨论 3

顺着彼此的依据读下去
  1. 固定链接

    可以进行显式转换。

    uint256 accountNumber = uint256(msg.sender);
    function encodeAccount(address account) constant returns (uint256) {
      return uint256(account);
    }
    从英语翻译查看原文
  2. 固定链接

    从 Solidity v0.8 开始,不再允许直接从 address 显式转换为 uint256。

    替代写法如下。

    uint256 accountNumber = uint256(uint160(msg.sender));
    function encodeAccount(address account) internal pure returns (uint256) {
        return uint256(uint160(account));
    }
    从英语翻译查看原文
  3. 固定链接

    Solidity v0.8.0 之前允许这种形式。

    pragma <0.8.0;
    
    return address(toUint(entry));

    从 Solidity v0.8.0 开始,应当改用下面的写法。

    pragma ^0.8.0
    
    return address(uint160(toUint(entry)));
    • 参考资料

    address(uint) 和 uint(address) 会同时改变位宽和类型类别。应当分别替换为 address(uint160(uint) 和 uint(uint160(address))。

    请参阅 Solidity Documentation,v0.8.0 breaking changes

    从英语翻译查看原文

同一个问题的其他角度

  1. 初始化以字符串数组为值的 TypeScript Map

    我在创建一个 Map,其中每个条目都保存字符串数组。怎样在一条语句中同时声明类型并完成初始化? 我(天真地)这样试了一下。 结果是下面这个错误。

    回复 2最近活动 typescript
  2. Typescript 可调用函数的约定

    为什么 Typescript 接受我的函数定义,虽然它与接口签名不同,但当我实际调用同一个函数时却报告问题。

    回复 2最近活动 typescript
  3. 只读的 List<Int> 算快照吗?

    List<Int> 是只读视图,不是快照。它只告诉使用方,通过这个引用可以调用哪些操作,并不保证它背后的集合不会变。 比如 val owned = mutableListOf(2, 4)。调用方把 owned 传给一个接收 List<Int> 的函数…

    回复 4最近活动 kotlin