Cosmos chain module 및 components

2023. 6. 14. 11:51Blockchain/Cosmos

728x90
반응형

※ 원글 작성 : 22년 8월 3일

Cosmos SDK를 기반으로 생성된 체인의 경우 다양한 module 및 component가 존재한다. 각 module 들에 대해서 대략적으로 나마 살펴보려 한다. Cosmos SDK의 모듈화는 필요한 기능은 넣고, 필요없는 기능은 뺄 수 있게 설계되어 있기 때문에 각 애플리케이션 별로 원하는 맞춤형 체인을 구축할 수 있게 한다. SDK 모듈은 애플리케이션에서 발생하는 tx를 로직대로 handling하고 ABCI를 통해 tendermint core로 전달하여 consensus를 하도록 하는 중간 역할을 담당한다.

Cosmos docs에서는 다양한 모듈들이 존재하는데, Ignite 등으로 생성한 체인 골격에서 app.go내에 선언되는 module 중 자주 사용되는 module과 그 component 위주로 확인한다.

Components

baseapp이 선언된 뒤 설정되는 주요 component 들은 router, handler, keeper 등이 있다. 이 components는 각 모듈에 포함되어 사용되거나, 없는 경우도 있으며 module에 종속적이지 않은 것(e.g. AnteHandler)도 존재한다. 전체적인 component 간의 flow는 아래 그림과 같다.

  • router : User가 application으로 요청한 transaction이 도달 했을 시 적절한 module로 message를 routing한다. Application에서 message를 요청하면 msgServiceRouter가, query를 요청하면 grpcQueryRouter가 올바른 module을 찾아 전달한다.
    • govRouter의 경우 governance를 유지하기 위한 proposal들을 routing한다.
  • handler : 각 module 상에서 정의된 로직에 따라 message를 처리한다.
    • AnteHandler : tx가 module의 handler로 전송되기 전에 작업을 실행하는 handler이다. Spam에 대한 1차 처리 및 mempool과 함게 transaction replay를 방지한다. 서명 유효성이나 from address의 수수료 자금 확인과 같은 'preliminary statefule validity'를 수행한다.
  • keeper : Module의 저장소에 접근 관리를 수행한다. Module 내에 정의된 각 저장소에는(state storage, IAVL store) unlimit access 권한을 부여하는 storeKey가 제공되고, keeper는 각 module의 storeKey를 관리하며 storage에 read/write 방식을 정의한다.

일반적으로 app.go내의 NewCHAINApp function에서 각 component 들이 정의된다. Module 별로 이러한 component 들이 존재하기 때문에 체인에 기능을 업데이트 할 시 새로운 기능을 위한 module을 붙이고, 선언하고, 정의하면 되기 때문에 다른 방식의 체인보다 상대적으로 쉽다. Cosmwasm wasmd의 Wasm module이나 Evmos/Ethermint의 EVM module 역시 기본적인 module 구성에 추가로 각각의 module을 더해 기능을 구현하였다.

Modules

Module의 역할은 간단히 아래와 같다.

  • Auth : 애플리케이션에 대한 account 및 transaction의 authorization
  • Authz : Account가 다른 account의 역할을 대신하여 작업을 수행할 수 있는 권한 부여
  • Bank : Coin/token 전송
  • Capability : 악성 module을 방지하기 위해 코드 상에서 허가된 module만 map으로 포함하며 module 및 keeper를 유지 관리
  • Crisis : 특정 상황에서 체인을 halt 할 수 있는 기능
  • Distribution : 수수료 및 staking된 토큰 분배
  • Evidence : double signing, misbehaviour 등 잘못된 행동들에 대한 증거 기록
  • Governance : 체인 gov를 유지하기 위한 proposal 및 voting 관리
  • Mint : 새로운 staking token 발급
  • Params : 전역적 parameters store
  • Slashing : Validator의 장기간 downtime 등 jailing, punishing 위한 기능
  • Staking : Stake/delegate 기능 수행 및 PoS 블록체인의 staking 기능 처리
  • Upgrade : SW upgrade handling

참고
https://docs.cosmos.network

728x90
반응형