pile·
백엔드·엘리시아엘리시아·

Openzeppelin & Compound Governance Part 1

엘리시아가 온체인 거버넌스를 구현하기 위해 Compound 거버넌스를 뜯어본 1부다. 제안 생성부터 집행까지의 전체 절차와 각 단계의 기간, 투표권 위임 구조, 그리고 실제 31번 제안의 트랜잭션 input data 를 디코딩해 인자 하나하나를 확인하는 데까지 간다.

핵심 포인트
  • OpenZeppelin 은 Compound 거버넌스의 audit 을 진행하면서 Compound 와 협업해, 그와 유사하되 더 모듈화·개선된 거버넌스 라이브러리를 4.3 에 내놓았다.
  • Compound 거버넌스는 Comp(투표권 토큰), GovernorBravo(제안·투표), Timelock(지연 실행) 세 컨트랙트로 구성된다.
  • 절차는 제안 생성 → 이틀 리뷰 → 3일 투표 → 통과 시 이틀 대기(queue) → 집행(execute) 순이며, queue 와 execute 는 누구나 실행할 수 있다.
  • Comp 1개가 투표권 1개이며, 65,000개 이상 보유자는 Governance Proposal 을 직접 올릴 수 있다.
  • 그 진입장벽이 너무 높다는 논란(당시 가격 기준 약 300억원 이상) 때문에 토큰 100개로도 올릴 수 있는 Autonomous Proposal 이 등장했다.
상세 정리
  • 거버넌스의 정의를 프로토콜 참여자 간의 자율적 의사결정 과정으로 두고 시작한다.
  • Proposal 의 실체는 "어떤 컨트랙트의 어떤 함수를 어떤 인자로 실행할 것인가" 를 미리 저장해 둔 데이터다.
  • 그래서 파라미터 변경뿐 아니라 컨트랙트 업그레이드도 Proposal 로 처리할 수 있다. 결국 누군가 코드를 실행하는 일이므로 미리 세팅해 두고 투표에 부치는 구조다.
  • Autonomous Proposal 의 조건: 바로 투표가 시작되지 않고, 자신을 지지하는 위임 투표권이 65,000개를 넘어야 시작된다. 제안은 쉽게, 진입은 어렵게 설계한 셈이다.
  • 투표권은 직접 행사하거나 대리자에게 위임(delegation)할 수 있다.
  • `GovernorBravo` 의 이름은 Alpha 에 이은 버전 2 라는 뜻이며, Compound 거버넌스의 42번째 투표에서 Bravo 로 마이그레이션이 이뤄졌다.
  • `propose` 함수는 targets, values, signatures, calldatas, description 다섯 인자를 받는다. 여러 validation 을 거친 뒤 새 Proposal 구조체를 만들며, startBlock 과 endBlock 은 자동 생성된다.
  • 실제 사례 분석: 31번 제안은 각종 CToken 의 `reserveFactor` 를 조정하는 내용이며, Created 트랜잭션의 input data 를 디코딩해 인자를 확인한다.
  • `targets` 는 대상 컨트랙트 주소들로, 이 제안에서는 여러 CToken 이다.
  • `values` 는 전송할 이더 양이며, 함수 실행에 이더가 필요 없어 전부 0 이다.
  • `signatures` 는 호출할 함수의 인터페이스로 `_setReserveFactor(uint256)` 가 들어 있다.
  • `calldatas` 는 함수 인자이며, 16진수를 변환하니 75000000000000000 즉 7.5%×10^18 로 제안 상세와 일치했다.
왜 읽나DAO 거버넌스가 실제로 어떤 데이터와 절차로 돌아가는지 알고 싶은 개발자에게, 문서 설명이 아니라 실제 온체인 제안의 인자를 뜯어 확인하는 방식으로 보여준다.
엘리시아
엘리시아 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·twilio-engTwilio Engineering·

    Programmable Messaging에서 Verify API로 마이그레이션하기

    Twilio의 Programmable Messaging API로 자체 OTP 솔루션을 운영하던 서비스가 Verify API로 전환하는 방법을 코드 예시와 함께 설명한다. Verify는 OTP 전송·검증을 위한 전용 API로, 전화번호 구매, 토큰 생성, DB 저장·만료 관리를 내부에서 처리해 개발자가 직접 구현할 코드를 크게 줄인다.

    요약 이어보기
    #authentication#twilio#sms+2
  2. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 2부

    포스타입 백엔드 엔지니어가 벡터 기반 개인화 추천 시스템을 실제 운영하며 맞닥뜨린 성능 장애와 용량 문제를 해결한 과정을 담은 2부다. 수백만 개의 벡터 KNN 검색이 피크 시간대에 전체 Elasticsearch 검색 성능을 흔드는 문제부터 클러스터 OOM 사태까지, 쿼리 최적화와 인프라 분리 두 가지 경로로 근본 해결에 이른다.

    요약 이어보기
    #elasticsearch#vector-search#recommendation-system+2
  3. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 1부

    포스타입이 태그 기반 추천의 한계를 극복하고 벡터 임베딩 기반 개인화 추천 시스템을 구축한 과정을 담은 1부다. 유사한 콘텐츠가 다른 용어를 쓰거나 동일한 태그가 전혀 다른 톤의 콘텐츠를 가리키는 문제를 임베딩 벡터로 해결하고, OpenSearch의 HNSW ANN 검색으로 수백만 벡터를 실시간 검색하는 시스템을 구축해 구매율 15% 향상을 달성했다.

    요약 이어보기
    #opensearch#vector-search#recommendation-system+2