OKRW 모듈

economics external-dapp

네이티브 KRW 연동 스테이블코인 OKRW의 생성 및 파라미터를 관리합니다.

OKRW 발행은 마루의 네이티브 가스 토큰인 atokrw가 새로 생겨나는 방식을 정합니다. (스테이킹은 별도의 본드 단위인 atmaroo로 정산됩니다.) 의도적으로 단순한 설계입니다. 승인된 단일 민터 계정만 OKRW 프리컴파일로 새 OKRW를 발행할 수 있고, 그 계정은 온체인 거버넌스로만 바뀝니다.

주요 기능

통제된 발행

사전에 설정된 단일 계정, 즉 IOkrw.getParams()가 반환하는 minter만 새 OKRW를 발행할 수 있습니다.

단순성과 보안성

OKRW 프리컴파일은 mint와 조회 함수 getParams 두 가지만 제공하므로, 표면이 작고 공격 벡터도 적습니다.

아키텍처

graph TD
    A["Governance"] -->|sets the authorized minter| B["OKRW parameters<br/>minter · mintDenom"]
    C["Authorized minter"] -->|"IOkrw.mint(recipient, amount)"| D["OKRW precompile<br/>0x…0001"]
    B -.->|caller checked against minter| D
    D -->|credits atokrw| E["Recipient balance"]
    classDef evm fill:#0096AA,stroke:#0096AA,color:#fff;
    classDef precompile fill:#FF8C50,stroke:#FF8C50,color:#fff;
    class A,B,C,E evm;
    class D precompile;

OKRW 발행 구조입니다. 거버넌스가 승인된 단일 민터를 정하고, 그 계정이 OKRW 프리컴파일에 보낸 IOkrw.mint 호출만 OKRW를 발행해 지급합니다.

발행 메커니즘

발행은 0x1000000000000000000000000000000000000001의 OKRW 프리컴파일을 거칩니다. IOkrw.mint(recipient, amount)는 amount만큼 OKRW를 발행해 recipient에게 지급합니다. 금액 단위는 18자리 소수의 기본 단위인 atokrw입니다. 이 호출은 발행 전에 다음 세 가지를 확인합니다:
1. 수신자는 영 주소가 아니어야 합니다. 영 주소이면 InvalidAddress(string bad)로 revert됩니다.
2. 금액은 0이 아니어야 합니다. 0이면 InvalidAmount(string amount)로 revert됩니다.
3. 호출자는 승인된 단일 민터여야 합니다. 앞의 두 검사를 통과한 호출자가 민터가 아니면 UnauthorizedMinter(address caller, address authorizedMinter)로 revert됩니다.

호출이 성공하면 새로 발행된 OKRW가 같은 트랜잭션 안에서 수신자 잔액에 반영됩니다. 전체 시그니처, 오류, 예제는 okrw-mint를 참고합니다.
참고: 발행과 지급은 하나의 원자적 호출입니다. 수신자 잔액이 발행한 만큼 늘어나거나, 호출이 revert되어 아무것도 발행되지 않습니다.

파라미터 관리

발행을 좌우하는 설정은 두 가지입니다. 발행할 수 있는 단일 계정(minter)과 발행하는 단위(mintDenom, 테스트넷에서는 atokrw)입니다. 컨트랙트는 두 값을 모두 IOkrw.getParams()로 읽습니다. 두 값은 dApp이나 민터 자신이 보낸 트랜잭션으로는 바뀌지 않으며, 온체인 거버넌스 투표가 통과해야만 바뀝니다. 따라서 누가 OKRW를 발행할 수 있는지와 기본 단위가 무엇인지는 커뮤니티가 통제합니다.
주의: 거버넌스 업데이트는 파라미터 전체를 교체하므로, 제안에는 바꾸려는 필드뿐 아니라 모든 필드를 담아야 합니다. 민터를 빈 값으로 두면 받아들여지지만, 이후 업데이트로 다시 지정할 때까지 발행이 막힙니다. 발행 단위가 비어 있거나 유효하지 않으면 검증에 실패해 업데이트 전체가 거부됩니다.
ESC
검색어를 입력하세요