社区治理是 Defi 项目必备,Compound 的治理非常值得参考
- 原文链接, 作者:Adam Bavosa
社区治理已经取代了Compound协议管理员,这是朝着完全权力下放的重要一步。
权力下放的主要目标是使协议能够发展成为具有弹性的金融基础设施,而没有可知的弱点,也无需依赖任何团队。 通过这种方式,协议可以随着整个加密生态系统的增长而继续扩展,并且可以永久存在或至少伴随着以太坊。
本指南将向你介绍Compound的治理智能合约,并逐步引导你构建与治理系统交互的自定义功能和界面。
Compound协议只能由COMP代币持有者及其代理升级和配置。 协议的所有潜在更改,包括增加新市场或调整系统参数(如抵押因子或利率算法),都必须通过治理智能合约中指定的提案和投票过程。
COMP是在 Compound 治理中具有 1:1 投票权的代币。 以太坊钱包中的COMP代币持有人可以使用COMP 治理合约中提供的函数将投票权委托给自己或任何其他以太坊地址。
委托投票权的接收者(称为代理人),无论他们是COMP持有人本身还是其他地址,都可以提案、投票和执行提案以修改协议。 你可以在Compound治理面板上看到当前的代理列表。
为了收到COMP,请在以太坊或任何测试网上使用Compound协议。 有关更多详细信息,请查阅文档。
一旦了解了基础知识,就可以轻松构建用于治理的接口或扩展其功能。 要更深入地了解治理,请查看完整的文档。 为了快速入门,这里仅列出关键概念。
castVote
立即提交,也可以使用 castVoteBySig
离线签名稍后提交。 如果大多数票(达到 4%的委托COMP的法定人数,即400,000 COMP)对某个提案投票赞成,则该提案将在时间锁中排队。如果社区决定以治理的形式对其进行升级,则随着时间的推移,治理系统的这些关键组件可能会发生变化。 COMP持有者将是该协议各个方面未来方向的最终仲裁者。
注:COMP 部署在0xc00e94cb662c3520282e6f5717214004a7f26888 、 治理合约部署在0xc0dA01a04C3f3E0be433606045bB7017A7323E38
应用程序开发人员可以构建自己的自定义工作流和界面,以促进其用户和社区参与Compound治理。 例如,与Compound的利率市场集成的应用程序可能对添加治理功能感兴趣,包括:
此类接口将需要以下组件的组合:
castVoteBySig
功能,用户可以创建分配给其他用户的投票。 这将允许另一个用户代理他们提交投票(并支付gas),而无需委托给另一个用户。治理界面必须在区块链之间进行读写,我们将逐步介绍一些基本的JavaScript代码示例,以实现这两种功能。 读取数据将使用Compound API和Web3完成。 但是,只能使用Web3完成写入操作,例如委托或投票。
我们将按顺序演示如何执行以下每个操作:
GitHub上的Compound 治理快速入门代码库中提供了以下示例完整代码。
让我们根据其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>
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!