OKRW 모듈
네이티브 KRW 연동 스테이블코인 OKRW의 생성 및 파라미터를 관리합니다.
x/okrw 모듈은 마루 네트워크의 네이티브 가스 토큰인 aokrw 토큰의 발행을 관리하는 특수 코스모스 SDK 모듈입니다. (스테이킹은 별도의 본드 단위인 amaroo로 정산됩니다.) 의도적으로 단순하고 안전하게 설계되어, 새로운 토큰을 생성하는 권한을 단일 '민터(minter)' 주소에 중앙화합니다. 이 주소는 온체인 거버넌스를 통해서만 변경할 수 있는 설정 가능한 파라미터로, OKRW 공급량에 대한 통제가 탈중앙화되고 투명하게 이루어지도록 보장합니다.
주요 기능
통제된 발행
사전에 설정된 단일 주소(`minter_address`)만이 새로운 OKRW 토큰을 발행할 권한을 가집니다.
단순성과 보안성
모듈은 복잡성과 공격 벡터를 줄이기 위해 발행 및 파라미터 관리에만 초점을 맞춘 최소한의 API를 가집니다.
아키텍처
graph TD
subgraph Governance
A[Gov Proposal: UpdateParams] -->|sets| B(okrw/Params: minter_address)
end
subgraph Minting Process
C(Authorized Minter) -->|sends tx| D{MsgMint}
D -- recipient, amount --> E[x/okrw Module]
E -->|1. MintCoins| F[x/bank Module]
F -->|creates coins in| G[okrw Module Account]
E -->|2. SendCoinsFromModuleToAccount| F
F -->|sends coins to| H(Recipient Address)
end
style A fill:#f9f,stroke:#333,stroke-width:2px
style C fill:#ccf,stroke:#333,stroke-width:2px OKRW 발행 및 파라미터 관리 프로세스 아키텍처. 거버넌스가 승인된 민터를 설정하면, 해당 민터는 발행 흐름을 시작할 수 있습니다. 이 과정에서 bank 모듈을 사용하여 토큰을 생성하고 분배합니다.
발행 메커니즘
x/okrw 모듈의 핵심 기능은 새로운 토큰을 발행하는 것입니다. 이 프로세스는 Mint 메시지 서버에 의해 처리됩니다. MsgMint 트랜잭션을 수신하면 모듈은 다음과 같은 일련의 중요한 검사를 수행합니다:1. 트랜잭션 서명자의 주소가 모듈 파라미터에 저장된
minter_address와 일치하는지 확인합니다.2. 요청된 금액이 양수이고 토큰 단위가 설정된
mint_denom(일반적으로 aokrw)과 일치하는지 확인합니다.3. 수신자 주소가 유효한 Bech32 주소인지 검증합니다.
모든 검사를 통과하면 모듈은
x/bank 모듈을 사용하여 2단계 발행 작업을 실행합니다. 먼저, MintCoins를 호출하여 지정된 양의 토큰을 생성하고 이를 x/okrw 모듈 자체 계정에 예치합니다. 그 직후, SendCoinsFromModuleToAccount를 호출하여 새로 생성된 이 토큰들을 모듈 계정에서 최종 수신자의 주소로 전송합니다. 이 2단계 프로세스는 토큰 생성 및 분배에 대한 명확하고 감사 가능한 추적을 보장합니다. 참고: `x/okrw` 모듈 자체는 영구적인 잔액을 보유하지 않습니다. 모듈 계정은 원자적인 발행 및 전송 작업 동안 임시 보관 영역으로만 사용됩니다.
파라미터 관리
x/okrw 모듈의 동작은 주로 minter_address와 mint_denom과 같은 작은 파라미터 집합에 의해 제어됩니다. 네트워크 보안과 안정성을 유지하기 위해 이러한 파라미터는 직접 수정할 수 없습니다. 대신, 모든 변경 사항은 거버넌스 제안으로 제출되어야 합니다.UpdateParams 메시지는 모듈의 지정된 권한자에게만 허용됩니다. 기본적으로 이 권한은 x/gov 모듈 계정이므로, 성공적인 거버넌스 투표만이 파라미터 업데이트를 승인할 수 있습니다. 이 메커니즘은 커뮤니티가 누가 OKRW를 발행할 수 있는지, 그리고 통화의 기본 단위가 무엇인지에 대해 완전한 통제권을 갖도록 보장합니다. 파라미터 업데이트 제안이 통과되면, x/okrw 키퍼는 새로운 파라미터를 검증하고 상태에 저장합니다. 주의: 파라미터를 업데이트할 때는 변경하려는 필드뿐만 아니라 전체 `Params` 객체를 메시지에 제공해야 합니다. 필드를 생략하면 해당 필드는 기본값(예: 빈 문자열)으로 재설정됩니다.