이더민트(Ethermint)를 소개합니다!

Cøsmos Korea 🇰🇷
Cøsmos Korea 🇰🇷
9 min readJul 10, 2018

번역날짜: 2018/07/10

이더민트(Ethermint)는 텐더민트 위에 이더리움을 구현하여 속도를 획기적으로 개선한 것입니다. 코스모스 허브와 함께 이더민트를 출시함으로써 텐더민트 팀은 개발자들이 두 생태계의 장점을 모두 경험하기 원합니다. 이더리움 가상머신(EVM)을 통해 스마트 계약을 쓰고 실행함과 동시에 텐더민트 컨센서스 엔진이 제공하는 최고의 성능을 누려야 됩니다. 이 모든 것을 가능하게 해주는 것이 바로 이더민트입니다.

이더민트(Ethermint)의 핵심 기능들은 다음과 같습니다:

  • Web3 호환성
  • 매우 높은 처리량
  • 병렬 확장성
  • 트랜잭션 완결성

이더민트에 앞서 코스모스는 정확히 뭔가요?

Go-Ethereum(Geth)은 상당히 느릴 뿐만 아니라 이더리움의 작업증명(PoW) 보안 모델 때문에 트랜잭션 완결성을 보장하지 않습니다. 이더민트(Ethermint)는 똑같이 web3 RPC 엔드포인트를 사용하여 스마트 계약을 구동하지만 속도가 20배나 빠릅니다. 이것이 가능한 이유는 개별 블록에 20배 더 많은 트랜잭션을 담을 수 있기 때문입니다. 일반적인 Go-Ethereum은 최대 12.5 TPS를 가지는 것과 달리 이더민트는 대략 200 TPS를 가집니다. 이 모든 것은 이더민트가 이더리움의 작업증명(PoW)보다 훨씬 빠른 텐더민트 지분증명(PoS)을 기반으로 하기 때문입니다.

아키텍쳐: Hub & Zone

설명: 코스모스 hub & zone 아키텍쳐. 여기서 zone은 서로 다른 독립적인 블록체인을 나타내기도 하지만 병렬 확장성을 위해 복제된 서로 같은 블록체인을 나타내기도 합니다.

텐더민트 코어와 Application Blockchain Interface (ABCI)

텐더민트를 구성하는 기둥은 두 개가 있습니다. 블록체인 컨센서스(합의 알고리즘) 엔진과 포괄적인 애플리케이션 인터페이스. 텐더민트 코어라고 불리는 컨센서스 엔진은 모든 노드에 동일한 트랜잭션이 동일한 순서로 기록되도록 합니다. Application Blockchain Interface (ABCI)라고도 불리는 애플리케이션 인터페이스는 트랜잭션이 어떤 언어로도 처리될 수 있도록 합니다.

텐더민트는 임의의 애플리케이션 상태(state)를 관리할 수 있는 일반 목적(general purpose) 블록체인 컨센서스 엔진으로 진화를 해왔습니다. 임의의 애플리케이션을 복제(replicate) 할 수 있기 때문에 다른 블록체인 소프트웨어의 컨센서스 엔진을 대체 할 플러그 앤 플레이(plug-and-play)로 사용할 수 있습니다. 그래서 Rust, Go, Haskell 등 특정 언어로 쓰인 현재의 이더리움 코드베이스를 가져와서 텐더민트의 컨센서스 엔진을 사용하여 ABCI 애플리케이션으로 실행할 수 있습니다. 물론, 우리는 이더리움으로 그 일을 해냈고 그것이 바로 이더민트입니다.

텐더민트 합의 엔진을 사용하여 개발한 또 다른 애플리케이션이 바로 코스모스 네트워크입니다. 텐더민트는 블록체인의 설계를 애플리케이션 레이어와 컨센서스 레이어로 분할한 후 그 사이를 단순한 API(예컨대 ABCI)로 연결해버립니다.

이렇게 ABCI를 사용하여 각각의 애플리케이션-특화 블록체인(application-specific blockchain) 내지 존(zone)이 만들어지면 코스모스 네트워크에서 상호운용성(interoperability)을 위해 만들어지는 블록체인 간 통신(Inter-Blockchain Communication, IBC)을 통해 각각의 존들이 서로 의사소통할 수 있게 될 것입니다.

핵심 기능

Web3 완벽한 호환성

이더민트(Ethermint)는 이더리움의 web3 인터페이스뿐만 아니라 RPC 엔드포인트를 통해 이더리움 클라이언트 관련 도구들과 완벽하게 호환됩니다. 예를 들어 이더리움에 멋진 지갑 UI를 개발한 개발자는 해당 애플리케이션을 이식(port)하고 이더민트에서 실행하는데 아주 적은 시간이 걸립니다. 코드 값 하나만 변경하면 됩니다. 바로 사용자가 가리키는 URL값 하나입니다.

이것이 가능한 것은 트러플(Truffle) 덕분입니다. 트러플은 이더리움 노드와 소통하여 당신의 스마트 계약을 구동시킬 수 있게 해줍니다. 즉, 이더리움 노드를 이더민트 노드로 덮어 씌어서 코스모스에서 이더리움 스마트 계약을 구동하게 해줍니다. 마법 같지 않습니까? 이것은 코스모스의 상호운용성(interoperability) 이야기의 일부이며 개발자가 두 네트워트를 서로 전환하는데는 10초 이하의 시간이 소요됩니다.

매우 높은 처리량(throughput)

Go Ethereum을 사용하는 것보다 이더민트를 사용하는 것이 더 바람직한 이유는 빠른 속도 때문입니다. 이는 텐더민트의 PoS 엔진에서 실행되기 때문에 가능합니다. 처리량이 높은 컨센서스 엔진 위에서 실행된 스마트 계약은 훨씬 더 저렴해집니다(트랜잭션을 블록에 담으려고 사용자끼리 경쟁을 하지 않을 것이기 때문에 수수료는 저렴해질수 밖에 없음). 텐더민트는 이더리움 가상머신(EVM)보다 트랜잭션 수를 최대 20배까지 더 많이 처리 할 수 있기 때문에 네트워크가 마비되거나 트랜잭션 수수료가 폭등하는 일은 발생하지 않습니다. 결국, 이더민트에서 스마트 계약을 실행함으로써 수수료를 20배에서 최대 50배까지 절약할 수 있습니다.

무한한 병렬 확장성(Unlimited Horizontal Scalability)

이더리움(Ethereum)의 현재 가장 큰 문제점은 확장성입니다. 이더리움은 최대 12.5 TPS만 처리할 수 있습니다. 반면에 이더민트(Ethermint)는 200 TPS까지 처리할 수 있습니다.

하지만, 200 TPS가 과연 충분할까요? 여기서 등장하는 것이 바로 ‘무한한 병렬 확장성(Unlimited Horizontal Scalability)’입니다. 예를 들어, 코스모스 허브가 론칭되었고 이더민트가 최대 처리량인 200 TPS에 도달했다고 가정해봅시다. 우리는 코스모스의 모듈 기반 디자인으로 탄생한 허브(hub)와 존(zone) 덕분에 두 번째 이더민트 존(zone)을 만들어서 IBC 프로토콜을 통해 허브(hub)에 붙이면 됩니다. 그럼 바로 400 TPS까지 처리를 할 수 있습니다. 이걸로도 부족하면 이더민트 존을 두 개 더 붙이면 됩니다. 그러면 800 TPS를 달성할 수 있습니다. 이런 식으로 ‘병렬적으로’ 확장성을 달성할 수 있습니다. 이것이 바로 ‘병렬적으로’ 그리고 ‘무한하게’ 확장한다는 뜻입니다.

※ CØSMOS Korea 보충설명: 이 문단을 읽고 “와..” 탄식을 하셔야 합니다.

즉각적인 트랜잭션 완결성(Instant Transaction Finality)

비트코인과 이더리움의 작업증명(PoW) 합의 프로토콜 모두 ‘최종적인’ 결정을 하지는 않습니다. 이론적으로는 51%의 공격에 의해 이미 생성된 블록도 뒤집힐 수 있습니다. 블록이 ‘완결성’을 가진다는 뜻은 블록이 뒤집힐 가능성이 없다는 것입니다. 비트코인의 합의 프로토콜은 이러한 100% 완결성을 보장해주지 않기 때문에 엄밀히 말해서 컨센서스가 안전하다고 할 수는 없습니다.

이더리움의 작업증명 기반 합의 프로토콜 또한 마찬가지입니다. 이더리움 블록체인에서 생성된 블록들은 ‘즉시 완결성’을 가지지 않습니다. 다만, 우리는 6번의 승인이 날 때까지 기다리고 승인이 나면 트랜잭션이 블록체인에 포함이 되었다고 ‘확신’합니다. 참고로 비트코인에서 6번의 승인을 받기 위해서는 60분을 기다려야 하며 이더리움에서는 2분을 기다려야 합니다. 여기서 다시 강조하지만, 사람들이 ‘확신’을 가지는 것과 수학적으로 ‘완결’되었다는 것은 다릅니다. 아무리 많은 승인이 나도, 이더리움의 작업증명 기반 컨센서스 프로토콜에서는 확률적으로 ‘완결성’을 가진 것뿐이지 100% 완결성을 갖지는 못합니다. 반면 이더민트는 100% 완결성을 보장하는 블록이 평균적으로 1초 이내에 생성이 됩니다.

※ CØSMOS Korea 보충설명: 이 문단을 읽고 “하..” 탄식을 하셔야 합니다.

이더민트에서 위의 기능들이 가능한 이유

우리는 텐더민트의 컨센서스(합의) 메커니즘 덕분에 ‘즉각적인 트랜잭션 완결성’을 보장할 수 있습니다. 텐더민트에서는 컨센서스 노드(검증인)들이 블록에 포함될 컨텐츠에 대한 합의를 보기 전 멀티-라운드 투표 제안 프로세스(multi-round voting proposal process)를 거칩니다. 만약 컨센서스 노드(검증인)의 과반수(2/3) 이상이 특정 블록을 기존 체인에 연결하기로 결정하면, 그제야 상태 변환 로직(state transition logic)을 수행합니다. 이더리움에서는 이 과정이 뒤집혀 있습니다. 채굴자들은 먼저 블록에 담을 트랜잭션을 모은 다음에 상태(state) 업데이트를 수행합니다. 그 후에 블록을 생성하기 위한 ‘채굴 작업’을 시작합니다.

※ CØSMOS Korea 보충설명:

텐더민트의 컨센서스 메커니즘은 “멀티-라운드 투표 제안 프로세스 → 블록에 담을 트랜잭션 합의함(검증인의 합의 필요) → 상태(state) 업데이트” 순으로 진행됩니다.

반면에 이더리움의 컨센서스 메커니즘은 “채굴자들이 블록에 담을 트랜잭션 모음 → 상태(state) 업데이트 → 채굴 작업 시작”순으로 진행됩니다.

추가 논의사항

  • 이더민트의 트위터 계정: @ethermint
  • Matrix Chat Channel의 개발자 수다방: #cosmos

Cøsmos Korea 🇰🇷

※이 글은 Cosmos팀의 동의 하에 번역된 글입니다.

※번역글에 대한 무단 도용 및 배포는 허락하지 않습니다. 아래는 원문링크, 저자, 그리고 작성날짜입니다.

원문링크: https://blog.cosmos.network/a-beginners-guide-to-ethermint-38ee15f8a6f4

원문저자: Interchain Foundation

원문날짜: 2017/10/28

--

--