체인의정석

Internal compiler error: Accessors for mapping with dynamically-sized keys not yet implemented 오류 해결 본문

블록체인/Solidity

Internal compiler error: Accessors for mapping with dynamically-sized keys not yet implemented 오류 해결

체인의정석 2022. 6. 22. 15:11
728x90
반응형

0.4.24 버전의 솔리디티를 업그레이드 가능한 컨트렉트로 바꾸는 과정에서 위의 에러가 났다. 

 

 

https://ethereum.stackexchange.com/questions/2397/internal-compiler-error-accessors-for-mapping-with-dynamically-sized-keys-not-y

 

Internal compiler error: Accessors for mapping with dynamically-sized keys not yet implemented

I have a mapping(string => Person) public map: struct Person { string name; string description; address primaryAddress; string linkToWebsite; string

ethereum.stackexchange.com

위의 글에서와 같이 mapping 이 public으로 두면 안된다고 한다. 더 낮은 버전으로 포팅 시에 public mapping을 private 으로 바꾸고 조회 함수를 넣어주어야 한다고 한다.

 

다른 mapping은 public으로 잘 작동하는 걸로 봐서 업그레이트 프록시 형태의 컨트렉트를 0.4.24 버전에 적용할 경우 나는 에러  같다.

 

원래코드는

    mapping(string => bool) public testMapping;

위와 같다.

이를 아래와 같이 변경하였다.

// SPDX-License-Identifier: MIT
/*

  << Project Wyvern Exchange >>

*/
pragma solidity 0.4.23;

import "../Exchange.sol";

/**
 * @title WyvernExchange
 * @author Project Wyvern Developers
 */
contract ExchangeUpgradeV2 is Exchange {
    mapping(string => bool) private testMapping;

    function getTestMapping(string _key) public view returns (bool) {
        return testMapping[_key];
    }
    // /**
    //  * @dev Initialize a WyvernExchange instance
    //  */
    function createTest(string memory _name) public {
        testMapping[_name] = true;
    }
}

이렇게 하고 실행하니 해결이 되었다.

728x90
반응형
Comments