DAO 거버넌스 설계: Quadratic Voting과 플래시론 공격 방어

제곱 투표의 비용 함수와 스냅샷·커밋리빌 파이프라인, 플래시론 기반 거버넌스 공격 유형별 방어 전략을 실무 관점에서 정리한다.

2026-08-12 · 최초 발행 2025-12-11

거버넌스 토큰을 담보 없이 빌려 순식간에 정족수를 채운 뒤, 악성 제안을 통과시키고 같은 트랜잭션 안에서 토큰을 갚아버린다면 — 투표권 산정이 실시간 잔고를 기준으로 삼는 한 이런 시나리오는 이론이 아니다. DAO(Decentralized Autonomous Organization)는 자율적 규칙과 온체인 실행으로 탈중앙 의사결정을 수행하는 조직 구조다. 여기서는 Quadratic Voting과 Governance Attacks를 중심으로, 제곱 투표 설계와 실무 보안·운영 절차를 정리한다. 플루토크라시(자본 지배) 완화와 플래시론 기반 공격 방어를 동시에 달성하는 것이 목표다.

핵심 개념

DAO는 스마트컨트랙트로 규칙을 집행하는 탈중앙 조직으로, 제안 생성→투표→타임락→실행의 온체인 거버넌스 파이프라인을 갖는다.

Quadratic Voting(QV)은 v표를 행사하는 비용을 c=k·v²로 산정하는 투표 메커니즘이다. 예산 B 안에서 선호 강도를 표현할 수 있어, 다수의 약한 선호 대비 소수의 강한 선호를 더 잘 반영한다. 다만 한 사람이 여러 신원을 만드는 Sybil 공격에 취약하므로 신원 인증·스테이킹·증명 기반 보강이 필요하다.

Governance Attacks는 거버넌스 규칙·인프라·경제 설계를 악용하는 공격 벡터의 총칭이다. 플래시론을 통한 순간적 지분 장악, 투표 매수(브라이버리), 스냅샷 회피, 제안 스팸·그리핑, 위임 탈취, 타임락 우회가 대표 유형이다.

QV 비용 함수를 어떻게 조율하는가

비용 함수 c=k·v²에 예산 상한 B, 최소·최대 표수 제한을 둔다. k는 도메인 민감도를 조절하는 변수로, 민감할수록 높게 잡는다. 크레딧은 비양도성(비매매)으로 설계하는 것을 권장하며, 이벤트별 재충전이나 시간 가중치를 적용한다. 다만 Sybil 분할 시 비용이 선형화되는 부작용이 있어 신원 증명·스테이킹·신뢰 점수로 방어해야 한다.

스냅샷에서 실행까지, 투표 파이프라인

투표권 산정 블록을 스냅샷으로 고정해 대여 토큰의 영향을 차단하고, 커밋-리빌로 프런트런·강요를 줄인다. 집계·검증은 다중 서명 검증자 또는 ZK 집계(MACI)로 프라이버시와 반담합을 보강한다. 실행 단계에서는 타임락·가디언·에스컬레이션(이의 제기 창구)으로 파괴적 제안의 실행을 지연시킨다.

보안·리스크 관리 체계

임계값은 제안 요건(토큰/명성), 쿼럼·슈퍼다수 규칙, 위험도 기반 가변 임계값으로 구성한다. 경제 보안은 스테이킹·슬래싱·보증금(스팸 방지)과 보상·버그바운티·리스크 예산으로 뒷받침한다. 모니터링은 대규모 토큰 이동·대여 지표 같은 체인 데이터 관측과 온·오프체인 신호 기반 경보로 이뤄진다.

운영 구조 측면에서는 위임 모델이 대표자 집단을 형성하고, 공개 성과지표와 임기·회수(리콜) 기제를 함께 설계한다. 포럼·스냅샷 투표를 예비 단계로 활용한 뒤 온체인으로 바인딩하는 오프체인 숙의 절차를 두고, 파라미터/재무/코드 등 카테고리별 변경 등급과 승인 경로를 분리한다. 변경 이력·투표 트랜잭션·집계 산출 근거는 불변 로그로 보관하고, 제안 메타데이터(SBOM, 감사 리포트, 시뮬레이션 결과)를 첨부 의무화한다.

실무에서 QV를 쓰는 장면

프로토콜 파라미터 변경에는 수수료율·인센티브 가중치 결정에 QV를 적용한다. 민감 파라미터일수록 k 값을 상향해 높은 비용을 부과하고, 커밋-리빌과 스냅샷을 조합해 영향권을 확정하고 프런트런을 막는다.

공익 예산 배분·그랜트는 Quadratic Funding과 결합해 다수의 약한 지지 프로젝트에 자금을 우선 배분한다. MACI를 적용하면 반담합·익명성이 강화되고 코디네이터에 대한 신뢰 의존도 최소화된다.

플래시론 거버넌스 공격 방어는 스냅샷을 T-Δ 블록에 고정하고, 제안자·유권자의 토큰에 타임락·언본딩 기간을 요구하는 방식이다. 타임락과 가디언의 이중 제동을 걸고, 위험한 제안에는 슈퍼다수와 다중 체인 교차 검증을 적용한다. 플래시론을 이용해 온체인 지분을 급증시킨 뒤 악성 실행을 감행한 공격 사례가 실제로 존재한다(최신 정보 확인 필요).

숫자로 보는 효과

플루토크라시 완화 효과는 제곱 비용이 대량 표 확보의 한계 비용을 급격히 끌어올리는 데서 나온다. k=1일 때 10표의 비용은 100, 20표의 비용은 400이다. 이 구조에서는 적은 수의 강한 선호가 다수의 약한 선호에 묻히지 않는 경향이 생긴다.

공격 표본 감소는 스냅샷·타임락·임계값 조합이 플래시론·브라이버리의 성공 확률을 낮추고, 커밋-리빌·MACI가 강요·매수 증거 수집의 난이도를 끌어올리는 데서 온다. 운영 안정성은 변경관리 등급제와 이의 제기 창구로 파괴적 변경을 단계적으로 검토할 수 있고, 로그·감사 가능성으로 사후 책임소재를 명확히 할 수 있다는 데서 나온다.

동일 예산 B=100, k=1을 가정한 예시를 보자. 토큰 가중 투표라면 A가 100표, B 진영이 10명씩 10표를 행사해도 A가 우세를 확정짓는다. QV에서는 A의 100표 비용이 10,000이 되어 불가능해진다. 대신 A가 30표(비용 900)를 쓰고 B 진영 10명이 각 10표(비용 100씩)를 쓰면 합산 100표가 가능해져, 다수의 약한 선호가 더 잘 반영된다.

투표 메커니즘 비교

메커니즘 성능(수행 비용/지연) 확장성(참여/처리) 일관성(결과 안정성) 안정성(공격 저항성) 운영 편의
토큰 가중 투표 높음 높음 중간 낮음(플래시론·브라이버리 취약) 높음
Quadratic Voting 중간 중간 높음(선호 강도 반영) 중간~높음(신원 보강 시) 중간
위임 투표(Delegation) 높음 높음 높음(대표자 지속성) 중간(대표자 집중 리스크) 높음

QV는 신원·반시빌 도구가 적용됐다는 것을, 위임은 건강한 대표자 생태가 존재한다는 것을 전제로 한다.

처리·에러 핸들링 흐름

검증: 신원·Sybil 점수정상집계오류: 커밋-리빌 불일치리스크 점검:쿼럼·슈퍼다수·브라이버리 신호만료중단: 가디언·비상 정지입력: 유권자선호·예산(B)·신원처리: 스냅샷·커밋처리: 리빌·제곱 비용 c=k*v^2계산출력: QV 총합·승자에러 처리: 투표 무효·환불 규칙처리: 타임락 대기출력: 제안 실행출력: 실행 취소·재검토

비용 계산 구현 예시

전제조건은 Solidity ^0.8.20, OpenZeppelin ERC20Votes 또는 Snapshot 기반, 테스트넷 사용이다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

// 단순 QV 비용 계산 및 예산 관리 예시(커밋-리빌/신원 검증은 별도 구성)
contract SimpleQuadraticVoting {
    struct Ballot {
        uint256 budget;     // 크레딧 예산(B)
        uint256 spent;      // 사용 크레딧
        mapping(bytes32 => uint256) votes; // proposalId => votes(v)
    }

    uint256 public k = 1; // 비용 계수
    mapping(address => Ballot) private ballots;

    event Voted(address indexed voter, bytes32 indexed proposalId, uint256 v, uint256 cost);

    function allocateBudget(address voter, uint256 amount) external {
        // 운영자/금고에서 주기별 예산 할당 가정(접근제어 필요)
        ballots[voter].budget += amount;
    }

    function costForVotes(uint256 v) public view returns (uint256) {
        // c = k * v^2
        return k * v * v;
    }

    function vote(bytes32 proposalId, uint256 v) external {
        require(v > 0 && v <= 1000, "invalid v"); // 표 수 상한 예시
        uint256 cost = costForVotes(v);
        Ballot storage b = ballots[msg.sender];
        require(b.spent + cost <= b.budget, "insufficient budget");
        b.spent += cost;
        b.votes[proposalId] += v;
        emit Voted(msg.sender, proposalId, v, cost);
    }

    function votesOf(address voter, bytes32 proposalId) external view returns (uint256) {
        return ballots[voter].votes[proposalId];
    }
}

실제 배포 시에는 신원/반시빌, 스냅샷, 커밋-리빌, 타임락/가디언, 감사·모니터링을 통합해야 한다. 위 코드는 비용 계산과 예산 소진 로직 예시 수준이다.

공격 유형별 방어 매핑

플래시론 기반 지분 장악은 투표권 산정이 실시간 잔고에 의존하는 데서 비롯된다. 스냅샷 블록, 제안·투표 타임락·언본딩, 실행 타임락+가디언으로 막는다.

브라이버리·투표 매수는 공개 투표와 선형 유틸리티 때문에 매수 집행 추적이 쉬운 데서 온다. 커밋-리빌·익명 집계(MACI), QV 크레딧 비양도성, 부정 행위 신고 보상으로 대응한다.

Sybil·위임 탈취는 다중 신원 생성과 대표자 집중에서 비롯된다. 신원 증명(프루프 오브 퍼슨후드·소울바운드), 위임 한도·쿨다운, 대표자 회수·임기로 막는다.

제안 스팸·그리핑·긴급 변경은 낮은 제안 요건과 무제한 실행 경로가 원인이다. 보증금·슬래싱, 위험 등급별 슈퍼다수·다중 검토, 회로 차단기로 대응한다.

프라이버시와 감사 가능성, 신원 강도와 참여 장벽, 빠른 실행과 안전 마진은 서로 트레이드오프 관계에 있다. 프로토콜 위험도와 TVL에 비례해 k·예산·임계값을 보수적으로 설정하고 점진적으로 도입하는 것을 권장한다.

DAO제곱 투표거버넌스 공격플래시론스냅샷