스터디에서 최근에 코스모스의 IBC protocol에 대해 다뤘는데요,
IBC protocol 구조에 대해 제가 이해한 바를 공유합니다.

전반적인 구조는 위의 hyperledger 구조와 유사하고,
- Client: 상대 ledger의 consensus를 검증하고 finality를 부여하는 abstraction
- Connections: IBC protocol에서 패킷간의 교환 전 승인을 내리는 abstraction
- 양 ledgers에 있는 각각의 connection ends는 각각의 client와 associate 되어 packet-relay 전 승인을 내리는 절차
- Channel: 패킷이 delivery가 되는 abstraction
ordering, exactly-once delivery, module permissiong을 부여.
- ordering: 패킷이 정해진 순서대로 전달됨(in ordered-channel)
- exactly-once delivery: 패킷은 딱 한번만 전송됨. (중복x)
- module permissioning: 해당 channel에 associate된 port를 소유한 module만 channel 사용 가능.
-> Connection과 Channel이 각각 패킷의 authorisation과 ordering 을 부여
위 관념은 블록체인 layer에서의 packet(transaction) 전달과 관련된 것이고, 인터넷과는 상관 없음.
- Relayer: IBC의 ‘physical’ connection layer.
- 위 블록체인 layer와 인터넷 네트워크 layer(TCP/IP 등) 를 연결해주는 역할.
- 블록체인 위에서의 원장의 verification, consensus 등과는 관련이 없고, 오로지 network와의 communication과만 연관됨.
- 각각의 원장이 현재 통신가능한 상태인지 등을 체크하여 릴레이할 datagram (packet)을 calculate.