2023. 6. 14. 11:51ㆍBlockchain/Cosmos
※ 원글 작성 : 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의 authorizationAuthz
: 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 storeSlashing
: Validator의 장기간 downtime 등 jailing, punishing 위한 기능Staking
: Stake/delegate 기능 수행 및 PoS 블록체인의 staking 기능 처리Upgrade
: SW upgrade handling
'Blockchain > Cosmos' 카테고리의 다른 글
Cosmos SDK 기반 체인 다중 validator 환경 구성 (0) | 2023.06.15 |
---|---|
Ethereum과 Cosmos의 genesis (0) | 2023.06.15 |
Cosmos SDK 기반 체인 configuration (1) | 2023.06.14 |
Cosmos SDK 기반 체인 로컬 테스트넷 구성 (0) | 2023.06.14 |
Cosmos [3] (Core, SDK, Smart contract) (1) | 2023.06.13 |