openlang

Solidity에서 address를 uint256으로 변환할 때 실패해요

struct를 담은 배열을 만들고, 그 배열에서 각 계정의 값을 얻으려고 했어요. 그런데 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…

    답글 4최근 활동 kotlin