IBC와 ICS

Junha Yang
코드체인
Published in
7 min readJan 15, 2020
Photo by Fré Sonneveld on Unsplash

IBC는 inter-blockchain communication protocol의 약자로 Cosmos에서 제시한 프로토콜입니다. 이름이 잘 설명해주듯 다른 체인 간 소통을 하기 위해 고안된 개념입니다. 이를 실제로 구현하기 위해 정의된 스펙은 ICS(inter-chain standard)라고 하는데 각 블록체인들이 이 스펙을 준수해서 모듈을 구현하면 실제로 통신을 할 수 있게 됩니다.

해결하고자 하는 것

2020년 현재 세상에는 수많은 블록체인들이 있고 각각 자기만의 다양한 프로토콜로 구성되어있습니다. 현재로서는 다른 체인 간 토큰을 전해주는 방법은 간접적이고 불편합니다. 예를들어 비트코인을 가진사람이 이더리움 유저에게 토큰을 전해주려면 비트코인을 그대로 전해주는게 아니라, 자신이 가진 비트코인을 팔아서 현금을 얻은 후 그 현금으로 다시 이더리움 체인에서 거래가 가능한 토큰인 ‘이더’를 직접 사서 이더리움 체인내에서 트랜잭션을 보내야합니다. 당연히 이는 실제 두 체인 간 화폐를 이동시키지 않으며 단순히 각 체인 내부에서 거래를 하여 특정 사람이 보유하고 있는 총량을 변화시킬 뿐입니다. 거기에다가 불필요하게 현금거래가 두번이나 관여되므로 비싼 수수료도 물고 절차도 번거롭습니다.

하지만 실제로 어떤 체인에 존재하는 토큰을 다른 체인으로 보낼 수 있다면 어떨까요? 토큰이라는 건 물리적으로 들어서 옮길 수 있는게 아니므로 ‘보낸다’라는 것은 각 블록체인이 신뢰할 수 있는 방법으로 상대방의 체인에 내가 보낸/받은 토큰을 기록했다는 것을 확인하는 것으로 이해할 수 있습니다. 송신 체인이 전송된 토큰을 태우거나 잠궈버리고, 수신 체인은 새로운 토큰이나 바우처가 생성된 것으로 처리하여 블록에 기록해버리면 각 체인의 유저들은 실제로 가치를 이동시킬 수 있습니다. 아까와 같은 상황에서는 비트코인 유저가 그냥 이더리움 체인에 비트코인을 보내면 끝입니다. 물론 다른 체인에 들어가버린 토큰이 어떻게 활용되는가는 자유로운 문제이며, 상황에 따라 다른 이더리움 유저와 비트코인-이더 환전을 할 수도 있습니다.

이런식으로 목적이나 관리주체가 전혀 다른 블록체인끼리의 커뮤니케이션이 사용 예시의 전부는 아닙니다. 예를 들어 샤드로 나누어진 사이드체인끼리 서로 트랜잭션을 수행할 수도 있습니다. 이 경우 한 체인의 메인넷을 최적화하기 위해 사이드체인이 서로 나눠진 다음 IBC를 사용해서 통신을 하는 형태가 될 것입니다.

교환

체인 A의 유저 P가 체인 B의 유저 Q로 A에 존재하는 토큰 X를 보낸다고 생각해봅시다. 절차는 다음과 같습니다.

  1. A는 P가 가지고 있는 X를 잠궈버립니다. 잠겨진 토큰은 사용할 수 없습니다.
  2. A는 B에게 보낼 패킷을 만들고, 그 패킷을 보냈다는 것을 스테이트에 반영한 후 블록을 커밋합니다.
  3. A는 2.에서 만든 패킷과 해당 스테이트의 Merkle Proof를 B에게 보냅니다.
  4. B는 받은 패킷과 proof를 가지고 실제로 A에 포함된 정보임을 확인합니다.
  5. B는 Q에게 X에 해당하는 바우처를 지급합니다.
  6. 만약 B가 이에 실패하여 타임아웃이 되었다면, A는 자신이 패킷이 보낸 이후로 정해진 블록동안 B의 체인에 내 패킷이 포함되지 않았음을 증명하는 proof를 스테이트에 포함하고 락을 풀어버립니다.
  7. 그게 아니라면 락을 계속 유지하거나 토큰을 태워버려 A에서 B로 완전히 이동되는 것으로 처리합니다.

모듈

위 과정은 각 체인이 패킷을 처리하는 방식을 믿고 이를 각자 스테이트에 포함할 것이라는 알고 있는 상태에서 진행됩니다. 즉 이런 상위 레이어의 작업들은 미리 ICS 규격에 맞게 모듈화를 하여 공개합니다. IBC는 엄밀하게는 이 모듈간의 커뮤니케이션만을 담당하며 각 모듈은 결정론적인 방법으로 상태를 변화시킵니다. 실제로 모듈이 패킷을 주고 받고 상태를 변화시키는 방식은 정해져있으며 IBC에 참여할 체인들은 각자의 구조에 맞게 이를 블록에 반영시키면 됩니다.

검증 & 라이트 클라이언트

위에서 언급했듯이 각 체인이 소통을 하기 위해 필수적으로 필요한 절차가 각자의 송/수신을 검증하는 것입니다. 블록을 새로 구성하는 것은 각자의 몫이지만 실제 상대방이 나의 패킷을 포함시켰는지 / 해당 토큰을 잠궜는지를 검증하는 일은 개별적으로 수행해야합니다.

사실 트랜잭션/스테이트를 확인하는 건 굳이 IBC가 아니더라도 체인 내에서 원래 해오던 일입니다. 예를들어 내가 어떤 거래를 했는데 그게 체인에 정말 포함됐는지를 확인하는 것은 유저들이 당연히 해야하는 작업입니다. 일반적으로 체인의 블록을 검증하고 채굴하는 노드들, 즉 ‘풀노드’는 자신이 갖고 있는 DB에 넣어 조회함으로써 이를 검증할 수 있습니다. 그런데 풀노드는 그런 개별검증 이외에 새로 추가될 블록전체를 검증하여 체인전체를 관리하는 일도 하기 때문에 모든 스테이트와 트랜잭션을 DB에 가지고 있고, 따라서 불필요하게 디스크 사용량이 크다는 문제가 있습니다. 그러다보니 자신이 관심있는 트랜잭션/스테이트만 확인하는 일에만 특화시켜 경량화된 노드가 필요해지게 됐는데요, 이를 ‘라이트 클라이언트’라고 합니다.

그런데 말씀드렸듯이 IBC는 상대 체인의 스테이트에 내 패킷이 반영됐는지만 확인하면 되는 것이기 때문에 이는 통상적으로 쓰이던 ‘라이트 클라이언트’가 원래 다루던 문제와 정확히 일치합니다. 상대 체인을 검증하는 새로운 서브 프로토콜을 구성하는 것보다 IBC와 상관없이 구현되어 있는 라이트 클라이언트를 응용하여 적절히 제공하는 것이 더 효율적인 접근법이고, 실제로 그러한 방법을 채택했습니다. IBC는 각 체인의 라이트 클라이언트를 요구하며, 이를 모두가 잘 구현만 하면 굳이 상대방의 풀 노드를 돌리는 불필요하고 번거로운 길 대신 빠르고 가볍게 검증을 할 수 있게 되는 것입니다.

라이트 클라이언트의 작동 방법은 체인마다 다르지만 공통적으로 블록의 헤더에 Merkle 루트를 적어놓고 검증하고 싶은 게 있을 때 마다 주변 풀노드에게 Merkle Proof를 요청하는 방법을 사용합니다. 라이트 클라이언트가 작동하는 방식은 다음 글에서 자세히 소개할 예정입니다.

Finality

코드체인에서 사용하고 있는 Tendermint와 같은 PoS 계열의 합의 알고리즘은 Finality를 보장합니다. 즉 한번 합의된 체인은 절대 되돌려지지 않습니다. 한편 Bitcoin과 같은 PoW 계열의 합의 알고리즘은 ‘확률적’인 합의를 제공합니다. 즉 길이에 따라 운이 나쁘면 자신이 마지막으로 봤던 체인이 뒤집어질수도 있는 것입니다. IBC는 Finality를 요구합니다. 만약 자신이 상대 체인에게 성공적으로 토큰을 보냈다고 생각했는데 알고보니 해당 체인이 바뀌어있으면 그냥 잃어버리는 셈이 되기 때문입니다. 따라서 PoS와 PoW 체인 간의 통신은 특별한 처리가 필요한데, Finality를 확인하기 위해 추가적인 블록의 개수가 정해진 ‘Peg Zone’을 설정하여 그것을 거치게 할 수 있습니다.

허브

여기까지만 해도 훌륭한 기술이지만 한 단계 더 나아갈 여지가 있습니다. IBC에 참여하고자 하는 모든 체인은 서로의 라이트 클라이언트를 구현해야합니다. 이는 당연히 각 블록체인들이 프로토콜과 규격이 다르기 때문입니다. 예를 들어 N개의 블록체인이 있으면 N*(N-1)개의 구현이 필요하게 될 것입니다. 하지만 이런 거래를 중개해주는 ‘허브’에 해당하는 블록체인이 하나 있다면 모두가 허브체인과만 IBC를 직접적으로 수행하고 허브체인은 실제 거래를 라우팅해주는 역할만 해줄 수 있습니다. 즉 2*N번의 라이트 클라이언트 구현으로 모든 N개의 체인이 서로 통신을 할 수 있게 됩니다. 이런 구조는 단순히 라이트 클라이언트 구현 문제 이상으로 서로 간의 의존성을 줄여서 개발과 연결을 용이하게 하지만 IBC를 넘은 추가적인 프로토콜이 필요한 복합적인 절차이기 때문에 해결해야할 문제가 많습니다.

마치며

블록체인 간 통신은 규격화된 모듈의 공개와 라이트 클라이언트 구현이라는 간단한 개념으로 꽤 쉽게 정의됩니다. 하지만 아직 논의되고 있는 단계이고 블록체인 생태계에서 어떤 역할을 할지는 미지수입니다. 우리 CodeChain은 현재 Cosmos의 IBC에 참여할 계획을 갖고 있으며 다른 블록체인 간 활발한 거래를 통해 ‘가치교환’이라는 인류전체의 문제에 적극적으로 기여할 준비가 되어있습니다.

*본 글은 코드체인 TechTalk 영상의 프리뷰로, 관심 있는 분은 누구나 자유롭게 코드체인의 다양한 기술소개 영상을 접할 수 있습니다.

--

--