# vDF Governance Kovan | Contract Name | Contract Address | Link | |:-------------------- | ------------------------------------------ |:------------------------------------------------------------------------------------- | | DF | 0x79E40d67DA6eAE5eB4A93Fc6a56A7961625E15F3 | [link](https://kovan.etherscan.io/address/0x79E40d67DA6eAE5eB4A93Fc6a56A7961625E15F3) | | vault address | 0x2294B1cE7B9d73D905d08da7411f1e9f8fec76D2 | [link](https://kovan.etherscan.io/address/0x2294B1cE7B9d73D905d08da7411f1e9f8fec76D2) | | vDF proxy admin | 0xEe5107eAe1339F02Ab27E580862d8c89293AA187 | [link](https://kovan.etherscan.io/address/0xEe5107eAe1339F02Ab27E580862d8c89293AA187) | | vDF implementation | 0x7a1cC6c77d0463cC80CAD15cbacbF7355CAa0234 | [link](https://kovan.etherscan.io/address/0x7a1cC6c77d0463cC80CAD15cbacbF7355CAa0234) | | vDF proxy | 0xDc6630379E7D04f37A262e88A19cFb0f294Ea2b6 | [link](https://kovan.etherscan.io/address/0xDc6630379E7D04f37A262e88A19cFb0f294Ea2b6) | | timelock | 0x6964981096d0370bD3B43e9E1237418009a55611 | [link](https://kovan.etherscan.io/address/0x6964981096d0370bD3B43e9E1237418009a55611) | | governance delegate | 0x2284bF22fEb8ca58Fe9B84586Dcb6031E3438E02 | [link](https://kovan.etherscan.io/address/0x2284bF22fEb8ca58Fe9B84586Dcb6031E3438E02) | | governance delegator | 0x668CA4DFE21de6264261874198E3E6157BdfA4a6 | [link](https://kovan.etherscan.io/address/0x668CA4DFE21de6264261874198E3E6157BdfA4a6) | | | | | | 01-14: | | | | vDF | 0xE1D6D7d16BddC232B73120Df435B512FAA7F1a45 | | | time lock | 0xf956256794F35d1EE3F9CF090B5a676BD5aF5B30 | | | governance delegate | 0xe264616085e35Ad0eC7cD069a068b8Dbc8229Bd2 | | | governance delegator | 0x3d9a888B4F2B2B2c98ddEe4ef542Fb13eB9bAf23 | | 方法: 1. vDF.balanceOf(address): 查询输入地址的vDF数量 2. vDF.totalSupply(): 查询vDF 的总量 3. vDF.getCurrentExchangeRate(): 查询当前DF与vDF的兑换比率 4. vDF.getUnderlyingTotalAmount(): 查询当前DF的总量 5. vDF.delegate(address): 委托投票权给输入的地址账户 6. vDF.getCurrentVotes(address): 获得查询账户的可投票数量 7. vDF.getPriorVotes(address,blockNumber): 查询在某个时刻的可投票数量(blockNumber 需小于当前block number,即blockNumber最大为 current block - 1) 6. vDF.proposalThreshold(): 最少投票数量 7. governorDelegator.propose(targets, values, signatures, calldatas, description):发起proposal 前提:发起投票用户需有一定数量的投票权。查询governorDelegator.proposalThreshold()获得最低投票权数量。只有当发起投票用户的投票权大于等于该数值才可以发起proposal。 8. 方法一: governorDelegator.castVote(prososalId, voteState) 用户针对proposalId进行投票,voteState只能为0:反对,1:赞成,2:弃权 前提: 0: let proposal = 即governorDelegator.proposals[proposalId] 1.该proposal的状态只能是激活状态,即governorDelegator.state(prososalId) == 1(active) 2.投票状态只能是0,1,2 3.用户未对该proposal投过票,即proposal.receipts.hasVoted == false 投票结束后,通过proposal.receipts查询结果, proposal.receipt.hasVoted: true(已投票)/false(未投票) proposal.receipt.support: 投票结果(0:反对,1:赞成,2:弃权) proposal.receipt.votes: 投票数量 8. 方法二:governorDelegator.castVoteWithReason(proposalId,voteState,reason), 这个方法比上面的方法只多了一个reason。其他判断条件不变 9. governorDelegator.state(proposalId): 这个proposalId的状态查询 ``` ProposalState { Pending, Active, Canceled, Defeated, Succeeded, Queued, Expired, Executed } ``` 10. governorDelegator.proposalCount(): 查询当前proposal 数量 11. governorDelegator.proposals(id): 查询某个proposal具体内容, 返回内容如下: ``` struct Proposal { uint id; address proposer; uint eta; address[] targets; uint[] values; string[] signatures; bytes[] calldatas; uint startBlock; uint endBlock; uint forVotes; uint againstVotes; uint abstainVotes; bool canceled; bool executed; mapping (address => Receipt) receipts; } ``` 12. governorDelegator.getReceipt(proposalId, voter): 查询某个用户对某个proposal的投票状态: ``` { bool hasVoted; uint8 support; uint96 votes; } ``` 13. governorDelegator.latestProposalIds(account_address): 查询某个用户上一次的proposal ID