최신버전의 노드로 환경을 구성하고, block.chainid 가 포함된 contract를 배포하려고 하면 0x02 에러가 발생합니다.
현재 지원을 하지 않는것인가요?
안녕하세요, 좀 더 자세한 설명 부탁드리겠습니다.
안녕하세요. 확인 감사합니다.
개발환경
- solidity version : v0.8.14
- node version : v1.10.2
제가 현재 발생하는 문제는 solidity code에서 block.chainid를 통해 chainid를 가져오는 내용을 추가하면 deploy 시 0x02 에러가 발생됩니다. (block.chainid 호출부분을 제거하면 정상적으로 배포 가능)
EIP-1344 변경내용이 klaytn v1.7.0 부터 포함되었다고 확인하였고, 관련 opcode도 사용 가능할 것으로 예상되는데 아닌가요??
안녕하세요, 네 해당 opcode가 제거된 적은 없습니다. 저도 테스트해보았는데, block.chainId 포함여부에 따라 결과가 다르게 나오진 않네요… 혹시 지금 테스트중인 개발환경이 어떻게 되어 있는지 정보를 더 주실수 있을까요?
예시.
- 노드정보 (url)
- 배포환경 (ex. javascript console, remix, curl, …)
- 에러 로그 (ex.
creation of ChainIDTest errored: Returned error: {"jsonrpc":"2.0","error":"Error: Error: The transaction type [0x2] is not supported","id":2892446107086314}
) - block.chainId만 호출하는 컨트랙트 배포 결과
pragma solidity >=0.8.0 <0.9.0;
contract ChainIDTest {
uint256 chainID;
function blockCall() public {
chainID = block.chainid;
}
function getChainID() public view returns (uint256) {
return chainID;
}
}
안녕하세요. 친절한 답변 감사합니다.
공유해주신 예제코드로 테스트 결과 deploy시에는 에러가 발생하지 않지만, blockCall 호출 시 발생되고 있습니다. (block.chainid 호출 시점에서 발생되는 듯 합니다. 기존에는 생성자에서 호출되어있어서 deploy시 에러가 발생된듯 합니다.)
같은내용으로 바오밥 테스트넷에 테스트해보니 정상적으로 작동하는것을 보았을 때, 환경 차이로 생각되어 아래내용을 확인해보았습니다.
자체 구축한 체인
- attach 시 출력되는 instance 정보 : Klaytn/v1.10.2/linux-amd64/go1.15.7
바오밥 테스트넷 체인
- attach 시 출력되는 instance 정보 : Klaytn/v1.10.2/linux-amd64/go1.18
위와 같이 golang버전에 차이가 있는것 같은데, 해당부분이 문제가 되는걸까요?
서비스체인 빌드는 go1.15.7 로 빌드된 바이너리같은데, 서비스체인은 지원이 안되는 걸까요?
안녕하세요. 친절한 답변 감사합니다.
공유해주신 예제코드로 테스트 결과, deploy 시에는 에러가 발생하지 않지만, blockCall 호출 시 동일한 문제가 발생됩니다.
기존에 테스트 했던 코드에서는 생성자에서 block.chainid 를 호출하고있어 deploy 시 문제가 발생된것으로 보았을 때 block.chainid 호출 시 에러가 발생하는 것 같습니다.
공유해주신 예제코드로 바오밥 테스트넷에서 테스트해보니 정상적으로 작동되어, 각 환경을 확인해보니 attach 시 출력되는 instance 정보가 아래처럼 다릅니다.
- 자체구축 서비스 체인 : Klaytn/v1.10.2/linux-amd64/go1.15.7
- 바오밥 테스트넷 체인 : Klaytn/v1.10.2/linux-amd64/go1.18 (attach url: https://api.baobab.klaytn.net:8651)
golang 버전의 문제인지는 모르겠으나, 서비스체인, 바오밥체인 각 빌드가 golang 버전이 다른 이유가 있을까요?
혹시 서비스체인에서는 지원이 안되는걸까요?
아 혹시 klay.getChainConfig() 결과에서 istanbulCompatible 블록번호를 한번 확인해보시겠어요? chainId opcode의 경우 v1.7.0 코드에 포함되어 있다고 할지라도 istanbulCompatible HF가 활성화 되어 있지 않으면 사용이 가능하지 않습니다.
→ 즉, istanbulCompatibleBlock < currentBlocknumber 여야 사용가능
golang 버전의 문제인지는 모르겠으나, 서비스체인, 바오밥체인 각 빌드가 golang 버전이 다른 이유가 있을까요?
혹시 서비스체인에서는 지원이 안되는걸까요?
엇 golang 버전의 경우 빌드한 컴퓨터의 golang 버전에 따라 달라지는 걸로 알고있고, evm 버전과는 상관없습니다. 서비스체인이라고 해서 지원이 안되는건 아닙니다.
넵넵 빠른답변 감사합니다.
golang 버전은 klaytn docs에 올라와있는 서비스체인 바이너리는 1.15.7로 빌드되어있고, 바오밥 테스트넷은 1.18이길래, 여쭤봤습니다.
말씀해주신 istanbulCompatibleBlock 내용 확인해보도록 하겠습니다.
감사합니다.