- DAO 컨트랙트는 Governance로부터 자격을 얻은 구성원이 제안을 생성하도록 하고, 구성원들이 보유한 token power에 따라 투표에 참여하거나 권리를 위임하여 신뢰성 있고 공정한 의사 결정이 이루어지도록 설계되었다.
- Governance는 투표를 통해 voting power를 산정하는 token의 종류를 결정할 수 있으며, 제안 생성의 조건과 투표 과정에 영향을 주는 컨트랙트의 종류와 환경 변수를 설정할 수 있다.
- Governance로부터 제안 생성(propose)에 대한 권한을 부여받은 proposer는 제안을 상정할 수 있다. 제안 내용과 투표 조건은 모든 구성원에게 투명하게 공개된다.
- 제안이 생성되면 토큰 보유자는 registration 기간 동안 투표권을 등록/위임하고 voting 기간 동안 투표가 진행된다. registration 기간이 끝날 때까지 투표권 등록/위임을 하지 않으면 voting token을 보유한 상태라 하더라도 투표에 참여할 수 없다.
- 투표 기간 전/후 snap을 통해 유권자의 토큰 보유량을 산정합니다. 이것은 계정 간 토큰 거래를 통한 이중투표 문제를 해결한다.
- 유권자는 자신이 보유한 투표권을 모두 사용하여 하나의 선택만 할 수 있다. 보유한 투표권을 나누어 서로 다른 선택을 하거나 일부 위임만 하는 분할투표는 허용되지 않는다.
- 투표 종료 후 정족수를 만족하는 제안은 성공한 상태가 되고 실행을 하기까지 일정 기간 대기한다. 이것은 새로운 정책이 반영되기 전 governance 구성원들이 변화에 적응하고 대응할 수 있도록 한다.
컨트랙트 배포 순서
- DAO 컨트랙트 모델은 온체인 상에서 공정하고 투명한 투표 기능을 제공한다. 이를 위해 투표에 사용될 토큰이 사전에 정의되어 있어야 한다. (또는 새로운 토큰을 발행할 수 있다.)
- 투표 기능과 관련한 핵심 로직을 담당하는 Core 컨트랙트를 배포한다.
(투표에 사용할 토큰 컨트랙트 주소, 제안 수수료, proposer 최소 토큰 보유량을 입력한다.)
- DAO 컨트랙트를 배포한다.
(Governance의 이름과 Core 컨트랙트의 주소를 입력)
- Governance는 제안을 생성할 수 있는 권한을 가진 proposer를 등록한다.
제안 생성과 투표 진행
- proposer는 Governance가 설정한 제안 수수료 이상의 토큰을 DAO 컨트랙트에 approve 한다.