集成 JustLend DAO 治理

介绍

JustLend DAO 协议由 JST 持有者管理。 治理系统包含三个组件:JSTWJST)代币、治理模块(GovernorBravo)和 Timelock

JustLend DAO 的协议通过发起提案来治理,其过程可以概括为提案发布-投票-生效。 该过程中包含几个参数:

治理参数

参数描述

quorumVotes

600000000

投票生效所需的所少票数

votingPeriod

86400

投票时长(区块数),可通过提案修改

proposalThreshold

200000000

发起提案所需的最少票数, 可通过提案修改

votingDelay

1

投票开始前等待的时间(区块数)

proposalMaxOperations

10

单个提案能完成的最多事项数目

proposalCount

11

当前存在的提案数目

JST & WJST

JST 可以 1:1 的比例兑换成 WJST 代币。 持有 WJST 可对提案进行投票。

治理流程

一个帐户必须拥有至少 200,000,000 票才能创建治理提案。 创建提案时,投票期开始并将持续 86,400 个区块时间(约 3 天)。 如果该提案获得支持票占多数,并至少 600,000,000 票,该提案将在等待 2 天(根据 Timelock.delay,当前值为 172,800s)生效。

相关方法

提案

propose()

合约:GovernorBravo

function propose(address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) public returns (uint)

调用此方法会创建一个 JustLend DAO 协议的治理提案。

参数类型描述

targets

address[]

在提案执行期间进行调用的目标地址

values

uint[]

调用时需要传递的值

signatures

string[]

方法签名

calldatas

bytes[]

每个方法的calldata

description

string

关于提案具体更改内容的描述

返回值:提案ID

const result = governorBravo.propose(targets, values, signatures, calldatas, description).send({
  feeLimit:10_000_000_000,
  callValue:0,
  shouldPollResponse:true
});

queue()

合约:GovernorBravo

function queue(uint proposalId) public

调用此方法会将成功的提案移入 Timelock,并开始等待期。等待期从成功调用此方法开始。

参数类型描述

proposalId

uint

提案ID

返回值:无,错误时将回退

const result = governorBravo.queue(proposalId).send({
  feeLimit:10_000_000_000,
  callValue:0,
  shouldPollResponse:true
});

execute()

合约:GovernorBravo

function execute(uint proposalId) public payable

调用此方法会执行等待期已结束的提案。提案中的操作将在执行期间被调用。

参数类型描述

proposalId

uint

需要执行的提案 ID

返回值:无,错误时将回退

const result = governorBravo.execute(proposalId).send({
  feeLimit:10_000_000_000,
  callValue:0,
  shouldPollResponse:true
});

cancel()

合约:GovernorBravo

function cancel(uint proposalId) public

调用此函数会取消提案。提案可以在执行前的任何时间取消。

参数类型描述

proposalId

uint

需要取消的提案 ID

返回值:无,错误时将回退

const result = governorBravo.cancel(proposalId).send({
  feeLimit:10_000_000_000,
  callValue:0,
  shouldPollResponse:true
});

getActions()

合约:GovernorBravo

function getActions(uint proposalId) public view returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)

调用此方法会获取指定提案所做的操作。

参数类型描述

proposalId

uint

提案 ID

返回值类型描述

targets

address[]

在提案执行期间进行调用的目标地址

values

uint[]

调用时需要传递的值

signatures

string[]

方法签名

calldatas

bytes[]

每个方法的 calldata

const {0: targets, 1: values, 2: signatures, 3: calldatas} = governorBravo.getActions(proposalId).call();

getReceipt()

合约:GovernorBravo

function getReceipt(uint proposalId, address voter) public view returns (Receipt memory)

调用此方法可获取指定投票人对提案的投票。

参数类型描述

proposalId

uint

提案 ID

voter

address

需要查询的地址

返回值类型描述

Receipt

struct

bool hasVoted // 是否 bool support // 支持或反对 uint96 votes //票数

const {hasVoted, support, votes} = governorBravo.getReceipt(proposalId, voter).call();

state()

合约:GovernorBravo

function state(uint proposalId) public view returns (ProposalState)

调用此方法返回指定提案的状态。

参数类型描述

proposalId

uint

提案 ID

返回值类型描述

ProposalState

enum

Pending Active Canceled Defeated Succeeded Queued Expired Executed

const result = governorBravo.state(proposalId).call();

投票相关

deposit()

合约:WJST

function deposit(uint256 sad) public

调用这个方法用 JST 一比一兑换 WJST。

参数类型描述

sad

uint256

需要兑换的票数(WJST)

返回值:无,错误时将回退

const result = wjst.deposit(number).send({
  feeLimit:10_000_000_000,
  callValue:0,
  shouldPollResponse:true
});

castVote()

合约:GovernorBravo

function castVote(uint proposalId, uint votes, bool support) public

调用此方法对提案进行投票。投票权重将在提案状态为active时计算。

参数类型描述

proposalId

uint

需要投票的提案 ID

votes

uint

投出的票数

support

bool

支持或反对

返回值:无,错误时将回退

const result = governorBravo.castVote(proposalId,votes,support).send({
  feeLimit:10_000_000_000,
  callValue:0,
  shouldPollResponse:true
});

castVoteWithReason()

合约:GovernorBravo

function castVoteWithReason(uint proposalId, uint votes, bool support, string calldata reason)

调用此方法对提案进行投票。这个方法可以附带投票原因。

参数类型描述

proposalId

uint

需要投票的提案 ID

votes

uint

投出的票数

support

bool

支持或反对

reason

string

投票理由

返回值:无,错误时将回退

const result = governorBravo.castVote(proposalId,votes,support,reason).send({
  feeLimit:10_000_000_000,
  callValue:0,
  shouldPollResponse:true
});

castVoteBySig()

合约:GovernorBravo

function castVoteBySig(uint proposalId, uint votes, bool support, uint8 v, bytes32 r, bytes32 s) public

调用此方法对指定提案进行投票。和 castVote()不同的是,此方法允许离线签名。

参数类型描述

proposalId

uint

需要投票的提案 ID

votes

uint

投出的票数

support

bool

支持或反对

v

uint8

签名的 recover byte

r

bytes32

ECDSA 签名对的一半

s

bytes32

ECDSA 签名对的一半

返回值:无,错误时将回退

const result = governorBravo.castVote(proposalId,votes,support,v,r,s).send({
  feeLimit:10_000_000_000,
  callValue:0,
  shouldPollResponse:true
});

Last updated