testnet
GitHub EN

마루 애플리케이션 아키텍처

core external-dapp

코스모스 SDK, EVM, 그리고 마루 커스텀 모듈을 결합한 마루 블록체인 애플리케이션의 모듈형 구조 심층 분석.

마루 애플리케이션(MarooApp)은 마루 노드를 실행하는 핵심 소프트웨어입니다. 코스모스 SDK 프레임워크를 사용하여 구축되었으며, 스테이킹, 거버넌스, IBC를 통한 상호운용성 같은 기능들을 위한 강력하고 모듈적인 기반을 제공합니다. 핵심적으로 완전한 EVM 호환 실행 환경을 통합하여 개발자들이 솔리디티 스마트 컨트랙트를 배포하고 상호작용할 수 있게 합니다. 마루는 이 기반 위에 규제 준수(PCL), 신원, 그리고 네이티브 스테이블코인(OKRW)을 위한 특화된 모듈들을 추가하여 확장합니다.

주요 기능

모듈형 구성

코스모스 SDK 기반으로 구축되어 상호운용 가능한 모듈들로 구성되어 있어 확장성과 유지보수성이 뛰어납니다.

완전한 EVM 호환성

`x/vm` (EVM) 모듈을 통합하여 이더리움 트랜잭션과 스마트 컨트랙트의 원활한 실행을 가능하게 합니다.

커스텀 비즈니스 로직

PCL, 신원, OKRW와 같은 마루 고유의 모듈을 탑재하고 있으며, 스마트 컨트랙트에서 쉽게 접근할 수 있도록 프리컴파일로 노출됩니다.

통합 멤풀

코스모스와 이더리움 트랜잭션 유형 모두와 호환되는 정교한 트랜잭션 순서 지정 및 우선순위 지정을 위해 특화된 EVM 멤풀을 활용합니다.

아키텍처

graph TD
    subgraph Maroo Node
        A[JSON-RPC / gRPC / Tendermint RPC] --> B[MarooApp];
        B --> C{Module Manager};
        C --> D[x/auth];
        C --> E[x/bank];
        C --> F[x/staking];
        C --> G[x/vm - EVM];
        C --> H[x/feemarket];
        C --> I[x/pcl];
        C --> J[x/okrw];
        C --> K[x/identity];
        B --> L[AnteHandler Chain];
        B --> M[EVM Mempool];
        B --> N[CometBFT];
        N --> O[State DB];
    end

마루 애플리케이션의 고수준 아키텍처. 요청이 모듈 매니저를 통해 핵심 코스모스, EVM, 그리고 커스텀 마루 모듈로 전달되는 흐름을 보여줍니다.

애플리케이션 초기화

app/app.goNewMarooApp 함수는 새로운 애플리케이션 인스턴스를 구성하는 진입점입니다. 이 광범위한 함수는 다음과 같은 몇 가지 중요한 설정 작업을 수행합니다:

1. 모듈 등록: 필요한 모든 코스모스 SDK 모듈(auth, bank, staking, gov), EVM 모듈(vm, feemarket, erc20), 그리고 마루의 커스텀 모듈(pcl, okrw, identity)을 등록합니다. 이 등록 과정은 애플리케이션에 각 모듈의 메시지 핸들러, 쿼리어, 제네시스 로직을 알립니다.
2. Keeper 인스턴스화: 각 모듈의 'keeper' 인스턴스를 생성합니다. keeper는 해당 모듈의 블록체인 상태 부분을 관리하는 책임을 집니다.
3. 스토어 키 할당: 각 모듈이 기본 데이터베이스 내에서 자신만의 격리된 상태에 접근할 수 있도록 고유한 키를 할당합니다.
4. 의존성 연결: keeper 인스턴스를 의존하는 다른 모듈에 전달하여 모듈들을 연결합니다. 예를 들어, EVMKeeper는 토큰 전송을 처리하기 위해 BankKeeper에, 계정 논스를 관리하기 위해 AccountKeeper에 접근해야 합니다.

트랜잭션 처리 흐름

트랜잭션이 마루 노드에 제출되면, 블록에 포함되기 전에 엄격한 검증 및 실행 과정을 거칩니다. 이 과정은 AnteHandler와 멤풀에 의해 조정됩니다.

AnteHandler는 각각 특정 검증 검사를 수행하는 데코레이터 체인입니다. 마루의 경우, 서명 검증, 수수료 차감, 논스 검증과 같은 표준 검사와 더불어 가스 한도 및 체인 ID에 대한 EVM 특정 검사를 포함합니다. ante/ante.goNewAppAnteHandler 함수는 이 체인을 구성하여 코스모스 또는 이더리움 네이티브 트랜잭션 모두가 적절히 검증되도록 보장합니다.

AnteHandler에 의해 검증된 트랜잭션은 app/mempool.go에서 구성된 EVM 인식 멤풀로 들어갑니다. 이 컴포넌트는 일반적으로 가스 가격(또는 팁)에 따라 트랜잭션의 우선순위를 정하여 검증자가 제안하는 다음 블록에 포함될 순서를 결정합니다. 코스모스 SDK sdk.Tx와 이더리움 ethtx.MsgEthereumTx 유형을 모두 관리하여 합의를 위한 통합된 큐를 생성합니다.
참고: 마루의 수수료 시장은 **BaseFee가 활성화된 EIP-1559 호환 구성**입니다. 발신자가 base fee + priority tip을 모두 `aokrw`로 지불합니다. 표준 EVM 툴 (Hardhat, Foundry, ethers.js)이 별도 설정 없이 올바른 값을 생산합니다. 자세한 내용은 `feemarket-module` 참조.

상태 내보내기 및 제네시스

애플리케이션의 상태는 JSON 파일로 내보낼 수 있으며, 이는 네트워크 업그레이드, 포크 또는 특정 상태에서 새로운 테스트넷을 생성하는 데 중요합니다. app/export.goExportAppStateAndValidators 함수가 이 과정을 처리합니다. 주어진 블록 높이에서 각 등록된 모듈의 상태를 쿼리하고 genesis.json 형식으로 직렬화합니다.

반대로, app/genesis.go 파일은 새로운 마루 체인의 기본 초기 상태를 정의합니다. 여기에는 NewEVMGenesisState, NewOkrwGenesisState와 같은 생성자 함수가 포함되어 있으며, 모든 EVM 프리컴파일 활성화, 네이티브 가스 토큰을 aokrw로 설정, PCL 및 OKRW 모듈의 파라미터 초기화와 같은 기본 파라미터를 지정합니다. 이를 통해 새로운 마루 네트워크가 일관되고 올바른 구성으로 시작되도록 보장합니다.

다음 단계

소스: maroo
ESC
검색어를 입력하세요