
社区治理已经取代了Compound协议管理员,这是朝着完全权力下放的重要一步。
权力下放的主要目标是使协议能够发展成为具有弹性的金融基础设施,而没有可知的弱点,也无需依赖任何团队。 通过这种方式,协议可以随着整个加密生态系统的增长而继续扩展,并且可以永久存在或至少伴随着以太坊。
本指南将向你介绍Compound的治理智能合约,并逐步引导你构建与治理系统交互的自定义功能和界面。
## 什么是COMP?
Compound协议只能由COMP代币持有者及其代理升级和配置。 协议的所有潜在更改,包括增加新市场或调整系统参数(如*抵押因子*或*利率算法*),都必须通过治理智能合约中指定的提案和投票过程。
COMP是在 Compound 治理中具有 1:1 投票权的代币。 以太坊钱包中的COMP代币持有人可以使用[COMP 治理合约](https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/GovernorAlpha.sol)中提供的函数将投票权委托给自己或任何其他以太坊地址。
委托投票权的接收者(称为代理人),无论他们是COMP持有人本身还是其他地址,都可以提案、投票和执行提案以修改协议。 你可以在[Compound治理面板](https://compound.finance/governance)上看到当前的代理列表。
为了收到COMP,请在以太坊或任何测试网上使用Compound协议。 有关更多详细信息,请查阅[文档](https://compound.finance/docs/governance)。
## 治理的核心概念
一旦了解了基础知识,就可以轻松构建用于治理的接口或扩展其功能。 要更深入地了解治理,请查看完整的[文档](https://compound.finance/docs/governance)。 为了快速入门,这里仅列出关键概念。
1. **COMP** – ERC-20代币,用于指定用户的投票权。 用户钱包中的COMP余额越多,他们对提案的授权或投票就越重。
2. **Delegation委托** — COMP持有人只有在将投票权委托给某个地址后才能投票或创建提案。 一次可以委托各一个地址,包括委托给COMP持有人自己的地址。被委托人的投票数相当于用户账号的 COMP 代币余额。投票将从当前区块开始进行委托,直到发送者再次委托或者转移其 COMP。
3. **Proposals提案** — 提案是可执行的代码,可修改协议及其工作方式。 为了创建提案,必须至少有所有COMP的1%委托给该地址。现有总计1000万个COMP,因此用户必须将至少100,000个COMP委托给其地址。 提案存储在[Governor智能合约](https://etherscan.io/address/0xc0da01a04c3f3e0be433606045bbbb7017a7323e38)的 “proposals” [映射](https://learnblockchain.cn/docs/solidity/types.html#mapping-types)中。 所有提案的投票期均为3天。 如果提案者在整个投票期间未维持其投票权重,则任何人都可以取消该提案。
4. **Voting投票** — 用户将投票权委托给其地址后,便可以对单个提案投票赞成或反对。 提案处于“有效(Active)”状态时可以进行投票。 投票可以使用 `castVote` 立即提交,也可以使用 `castVoteBySig` 离线签名稍后提交。 如果大多数票(达到 4%的委托COMP的法定人数,即400,000 COMP)对某个提案投票赞成,则该提案将在时间锁中排队。
5. **Timelock时间锁** — 所有治理和其他管理操作都必须在时间锁中停留至少2天,然后才能在协议中实施。每个 cToken 合约和 Comptroller 合约都允许 Timelock 地址修改。Timelock 合约可以修改系统参数、逻辑和合约,以 “延迟时间、选择退出” 的升级模式进行修改。

如果社区决定以治理的形式对其进行升级,则随着时间的推移,治理系统的这些关键组件可能会发生变化。 COMP持有者将是该协议各个方面未来方向的最终仲裁者。
> 注:COMP 部署在[0xc00e94cb662c3520282e6f5717214004a7f26888](https://etherscan.io/token/0xc00e94cb662c3520282e6f5717214004a7f26888) 、 治理合约部署在[0xc0dA01a04C3f3E0be433606045bB7017A7323E38](https://etherscan.io/address/0xc0dA01a04C3f3E0be433606045bB7017A7323E38)
## 通过Compound治理可以构建什么?
应用程序开发人员可以构建自己的自定义工作流和界面,以促进其用户和社区参与Compound治理。 例如,与Compound的利率市场集成的应用程序可能对添加治理功能感兴趣,包括:
– 鼓励用户将COMP投票权委托给应用团队的地址,以便该团队可以代表用户参与治理。
– 向用户显示特定的管理提案,以便拥有COMP的用户可以直接对其投票。
– 向用户提供透明的洞察力,以了解Compound的即将发生的潜在变化,包括添加新市场或其他升级的提案。
此类接口将需要以下组件的组合:
– 投票界面 – 用户能对有效的提案进行投票。
– 委托界面 – 用户将投票权委托给某个地址。
– 投票权排行榜 — 列出按投票权排序的投票地址。
– 我的代理投票界面 – 使用`castVoteBySig` 功能,用户可以创建分配给其他用户的投票。 这将允许另一个用户代理他们提交投票(并支付gas),而无需委托给另一个用户。
– 提案资源管理器 – 在简化的用户界面中浏览过去或现在的治理提案。
– 提案创建界面 – 如果用户有足够的投票权重(> 1%),请选择协议修改并初始化提案。

## Compound 治理代码示例
治理界面必须在区块链之间进行读写,我们将逐步介绍一些基本的JavaScript代码示例,以实现这两种功能。 读取数据将使用Compound API和Web3完成。 但是,只能使用Web3完成写入操作,例如委托或投票。
我们将按顺序演示如何执行以下每个操作:
– 获取所有COMP代币持有人
– 获取所有委托
– 获取所有提案
– 获取所有提案的选票
– 委托投票权
– 对(有效)提案进行投票
GitHub上的[Compound 治理快速入门](https://github.com/compound-developers/compound-governance-examples)代码库中提供了以下示例完整代码。
### 获取所有COMP代币持有人
让我们根据其COMP余额按降序获取所有COMP代币持有者。 我们可以通过[CompoundAPI的治理服务](https://compound.finance/docs/api#GovernanceService)来实现。
“`js
let requestParameters = {
“page_size”: 100, // number of results in a page
“network”: “ropsten”, // mainnet, ropsten
“order_by”: “balance”, // “votes”, “balance”, “proposals_created”
// “page_number”: 1, // see subsequent response’s `pagination_summary` to specify the next page
// addresses: [‘0x123’], // array of addresses to filter on
// with_history: true, // boolean, returns a list of transaction history for the accounts
};
requestParameters = ‘?’ + new URLSearchParams(requestParameters).toString();
fetch(`https://api.compound.finance/api/v2/governance/accounts${requestParameters}`)
.then((response) => response.json())
.then((result) => {
let accounts = result.accounts;
console.log(accounts);
let holders = [];
accounts.forEach((account) => {
holders.push({
“address”: account.address,
“balance”: parseFloat(account.balance).toFixed(4),
“delegate”: account.delegate.address == 0 ? ‘None’ : account.delegate.address
});
});
holderListContainer.innerHTML = holderListTemplate(holders);
});
“`
<center>文件:get_comp_holders_api.js [完整代码示例](https://github.com/compound-developers/compound-governance-examples/blob/master/api-examples/get_comp_holders.html)</center>
这段代码使用内置的浏览器获取方法,该方法返回JavaScript Promise。 代码库有一个相同的示例,在示例中[使用Web3.js对COMP持有人进行直接区块链查询](https://github.com/compound-developers/compound-governance-examples/blob/master/web3-examples/get_comp_holders.html)。 我们可以使用COMP智能合约找到相同的信息。
这两个代码示例的结果都是一个JSON对象数组,其中包含帐户地址,COMP代币余额和帐户委托地址。
“`js comp-holder.json
[
{
“address”: “0xb61c5971d9c0472befceffbe662555b78284c307”,
“balance”: “200000.0000”,
“delegate”: “0xb61c5971d9c0472befceffbe662555b78284c307”,
}
]
“`
<center>comp-holder.json </center>
##…
- 原文链接, 作者:Adam Bavosa
社区治理已经取代了Compound协议管理员,这是朝着完全权力下放的重要一步。
权力下放的主要目标是使协议能够发展成为具有弹性的金融基础设施,而没有可知的弱点,也无需依赖任何团队。 通过这种方式,协议可以随着整个加密生态系统的增长而继续扩展,并且可以永久存在或至少伴随着以太坊。
本指南将向你介绍Compound的治理智能合约,并逐步引导你构建与治理系统交互的自定义功能和界面。
什么是COMP?
Compound协议只能由COMP代币持有者及其代理升级和配置。 协议的所有潜在更改,包括增加新市场或调整系统参数(如抵押因子或利率算法),都必须通过治理智能合约中指定的提案和投票过程。
COMP是在 Compound 治理中具有 1:1 投票权的代币。 以太坊钱包中的COMP代币持有人可以使用COMP 治理合约中提供的函数将投票权委托给自己或任何其他以太坊地址。
委托投票权的接收者(称为代理人),无论他们是COMP持有人本身还是其他地址,都可以提案、投票和执行提案以修改协议。 你可以在Compound治理面板上看到当前的代理列表。
为了收到COMP,请在以太坊或任何测试网上使用Compound协议。 有关更多详细信息,请查阅文档。
治理的核心概念
一旦了解了基础知识,就可以轻松构建用于治理的接口或扩展其功能。 要更深入地了解治理,请查看完整的文档。 为了快速入门,这里仅列出关键概念。
- COMP – ERC-20代币,用于指定用户的投票权。 用户钱包中的COMP余额越多,他们对提案的授权或投票就越重。
- Delegation委托 — COMP持有人只有在将投票权委托给某个地址后才能投票或创建提案。 一次可以委托各一个地址,包括委托给COMP持有人自己的地址。被委托人的投票数相当于用户账号的 COMP 代币余额。投票将从当前区块开始进行委托,直到发送者再次委托或者转移其 COMP。
- Proposals提案 — 提案是可执行的代码,可修改协议及其工作方式。 为了创建提案,必须至少有所有COMP的1%委托给该地址。现有总计1000万个COMP,因此用户必须将至少100,000个COMP委托给其地址。 提案存储在Governor智能合约的 “proposals” 映射中。 所有提案的投票期均为3天。 如果提案者在整个投票期间未维持其投票权重,则任何人都可以取消该提案。
- Voting投票 — 用户将投票权委托给其地址后,便可以对单个提案投票赞成或反对。 提案处于“有效(Active)”状态时可以进行投票。 投票可以使用
castVote
立即提交,也可以使用castVoteBySig
离线签名稍后提交。 如果大多数票(达到 4%的委托COMP的法定人数,即400,000 COMP)对某个提案投票赞成,则该提案将在时间锁中排队。 - Timelock时间锁 — 所有治理和其他管理操作都必须在时间锁中停留至少2天,然后才能在协议中实施。每个 cToken 合约和 Comptroller 合约都允许 Timelock 地址修改。Timelock 合约可以修改系统参数、逻辑和合约,以 “延迟时间、选择退出” 的升级模式进行修改。
如果社区决定以治理的形式对其进行升级,则随着时间的推移,治理系统的这些关键组件可能会发生变化。 COMP持有者将是该协议各个方面未来方向的最终仲裁者。
注:COMP 部署在0xc00e94cb662c3520282e6f5717214004a7f26888 、 治理合约部署在0xc0dA01a04C3f3E0be433606045bB7017A7323E38
通过Compound治理可以构建什么?
应用程序开发人员可以构建自己的自定义工作流和界面,以促进其用户和社区参与Compound治理。 例如,与Compound的利率市场集成的应用程序可能对添加治理功能感兴趣,包括:
- 鼓励用户将COMP投票权委托给应用团队的地址,以便该团队可以代表用户参与治理。
- 向用户显示特定的管理提案,以便拥有COMP的用户可以直接对其投票。
- 向用户提供透明的洞察力,以了解Compound的即将发生的潜在变化,包括添加新市场或其他升级的提案。
此类接口将需要以下组件的组合:
- 投票界面 – 用户能对有效的提案进行投票。
- 委托界面 – 用户将投票权委托给某个地址。
- 投票权排行榜 — 列出按投票权排序的投票地址。
- 我的代理投票界面 – 使用
castVoteBySig
功能,用户可以创建分配给其他用户的投票。 这将允许另一个用户代理他们提交投票(并支付gas),而无需委托给另一个用户。 - 提案资源管理器 – 在简化的用户界面中浏览过去或现在的治理提案。
- 提案创建界面 – 如果用户有足够的投票权重(> 1%),请选择协议修改并初始化提案。
Compound 治理代码示例
治理界面必须在区块链之间进行读写,我们将逐步介绍一些基本的JavaScript代码示例,以实现这两种功能。 读取数据将使用Compound API和Web3完成。 但是,只能使用Web3完成写入操作,例如委托或投票。
我们将按顺序演示如何执行以下每个操作:
- 获取所有COMP代币持有人
- 获取所有委托
- 获取所有提案
- 获取所有提案的选票
- 委托投票权
- 对(有效)提案进行投票
GitHub上的Compound 治理快速入门代码库中提供了以下示例完整代码。
获取所有COMP代币持有人
让我们根据其COMP余额按降序获取所有COMP代币持有者。 我们可以通过CompoundAPI的治理服务来实现。
let requestParameters = {
"page_size": 100, // number of results in a page
"network": "ropsten", // mainnet, ropsten
"order_by": "balance", // "votes", "balance", "proposals_created"
// "page_number": 1, // see subsequent response's `pagination_summary` to specify the next page
// addresses: ['0x123'], // array of addresses to filter on
// with_history: true, // boolean, returns a list of transaction history for the accounts
};
requestParameters = '?' + new URLSearchParams(requestParameters).toString();
fetch(`https://api.compound.finance/api/v2/governance/accounts${requestParameters}`)
.then((response) => response.json())
.then((result) => {
let accounts = result.accounts;
console.log(accounts);
let holders = [];
accounts.forEach((account) => {
holders.push({
"address": account.address,
"balance": parseFloat(account.balance).toFixed(4),
"delegate": account.delegate.address == 0 ? 'None' : account.delegate.address
});
});
holderListContainer.innerHTML = holderListTemplate(holders);
});
<center>文件:get_comp_holders_api.js 完整代码示例</center>
这段代码使用内置的浏览器获取方法,该方法返回JavaScript Promise。 代码库有一个相同的示例,在示例中使用Web3.js对COMP持有人进行直接区块链查询。 我们可以使用COMP智能合约找到相同的信息。
这两个代码示例的结果都是一个JSON对象数组,其中包含帐户地址,COMP代币余额和帐户委托地址。
[
{
"address": "0xb61c5971d9c0472befceffbe662555b78284c307",
"balance": "200000.0000",
"delegate": "0xb61c5971d9c0472befceffbe662555b78284c307",
}
]
<center>comp-holder.json </center>
…
剩余50%的内容订阅专栏后可查看
- 发表于 2020-09-29 11:49
- 阅读 ( 1879 )
- 学分 ( 312 )
- 分类:以太坊
- 专栏:热门 DEFI 分析