Technology

Toward Ethereum Equivalence #3 — Ethereum API 형식 지원

클레이튼 v1.8.0부터 eth namespace(eth_) API가 이더리움 API와 동일한 포맷을 지원하도록 변경됩니다. 이 포스팅은 API 사용자들이 이더리움 API 지원의 목적을 이해하고 상황 별로 적절한 대응을 할 수 있도록 유의해야 할 점에 대해서 설명합니다.

변경사항에 대한 자세한 내용은 Klaytn Docs — eth를 참고하시기 바랍니다.

목적

클레이튼 v1.8.0에서는 이더리움과의 호환성을 제공하여 이더리움 dApp 개발자들이 쉽고 빠르게 클레이튼에서 개발할 수 있도록 Ethereum API를 지원합니다.

클레이튼 v1.8.0이전 Klaytn Node에서 제공하는 eth namespace API(eth_)는 klay namespace API(klay_)와 동일하게 동작했습니다. 이는 이더리움 개발 도구를 클레이튼에서 사용할수 있도록 하기 위함이었지만, 클레이튼과 이더리움의 자료구조가 달라 점점 호환성 문제가 커졌습니다.

이러한 문제를 해결하고자 Klaytn Node에서 제공하는 eth namespace API가 이더리움 API와 동일한 포맷을 지원하도록 변경되었으며, 이 덕분에 이더리움에서 사용되는 개발 도구를 그대로 클레이튼에서도 사용할 수 있고 이더리움 dApp을 최소한의 수정으로 클레이튼에 쉽게 마이그레이션 할 수 있습니다.

아래에서는 API를 사용하는 유형 별로 API 사용 시 유의할 점에 대해서 설명합니다.

eth namespace API 사용자

Geth client, 이더리움 개발 도구(ethers.js, web3.js, hardhat, truffle, …)를 통해 eth namespace API를 사용하는 경우에는 이번 변경사항으로 동작 방식이 변경 됨에 따라 몇 가지 주의해야 할 점이 있습니다. 이 문서에서는 개략적인 주의점을 소개하고자하며, 상세한 동작 차이와 주의할 점들은 Klaytn Docs — eth — Caution 에서 확인하실 수 있습니다.

eth namespace API를 사용한다면 API 리턴 필드 중에서 클레이튼에서 사용되지 않는 일부 필드는 대체된 값이 반환되므로 해당 필드를 사용할 때 유의해야 합니다.

Block의 경우 mixHash, difficulty, nonce, gasLimit, sha3Uncles 그리고 uncles 필드는 클레이튼에서 사용되지 않는 값이기 때문에 대체된 값이 반환되며 만약 dApp에서 이 필드들을 사용하는 경우 유효하지 않을 수 있기 때문에 사용 목적에 따라 적절한 대응이 필요합니다. 위에서 언급한 필드 외의 Block의 다른 필드들은 모두 정상적인 값을 리턴합니다. Block의 각 필드 별로 어떤 값이 리턴되는지에 대한 내용은 Klaytn Docs — eth — Block을 참고하시기 바랍니다.

다음으로 dApp에서 사용하는 데이터 유형에 따라 주의할 점을 아래에서 설명합니다.

dApp이 생성한 트랜잭션만을 조회하는 경우

이더리움 포맷의 트랜잭션을 생성하고 이더리움 포맷의 트랜잭션만 조회하는 경우, eth namespace API를 사용해서 이더리움과 동일하게 트랜잭션을 생성하고 조회할 수 있습니다. 이와 같이 이더리움 포맷의 트랜잭션만 생성하고 조회하는 경우에는 eth namespace API를 사용할 수 있기 때문에 이더리움의 다양한 개발 도구를 클레이튼에서 그대로 사용할 수 있으며 또한 이더리움 dApp을 최소한의 변경으로 클레이튼에 쉽게 마이그레이션 할 수 있습니다.

외부에서 생성한 트랜잭션도 조회하는 경우

eth namespace API를 사용하면 클레이튼 트랜잭션 타입의 데이터가 모두 표현되지 않을 수 있습니다. 클레이튼에서 제공하는 트랜잭션은 eth namespace API를 사용하여 조회하면 Legacy Tx로 포맷이 변환되어 출력됩니다. 변환되는 과정에서 클레이튼에서 제공하는 기능(수수료 대납계정 키 업데이트클레이튼 트랜잭션 타입 등)과 관련된 필드들은 Legacy Tx에 포함되지 않는 필드이기 때문에 eth namespace API에서 반환하지 않습니다. 또한 클레이튼 트랜잭션 타입에 따라 클레이튼 트랜잭션에서 사용되지 않는 일부 필드(to, input, value)는 대체된 값으로 반환될 수 있으며 자세한 내용은 Klaytn Docs — eth — Transaction을 참고하시기 바랍니다. 이와 같은 이유로 dApp이 외부에서 생성한 트랜잭션까지도 완전하게 조회하기 위해서는 klay namespace를 사용해야합니다.

klay namespace API 사용자

이더리움 API지원은 eth namespace API에만 해당하는 내용이기 때문에 Klaytn Client, 클레이튼 개발 도구(caver-js, caver-java, …)를 통해 klay namespace API를 사용하고 있다면 별도 변경사항 없이 기존과 동일하게 klay namespace API를 통해 클레이튼에서 제공하는 기능을 모두 사용할 수 있습니다.

여기까지 클레이튼 v1.8.0에서 이더리움 API 지원하는 목적과 이에 따라 유의할 점에 대한 설명이었습니다. 이 포스팅과 관련된 자세한 내용은 Klaytn Docs — eth에 상세하게 기술되어 있으니 참고해주시기 바랍니다.

Twitter | Telegram | Discord

관련 미디엄 포스팅 목록