【发布】Unizon 去中心化时间锁管理框架

首页 » 名家观点 » 【发布】Unizon 去中心化时间锁管理框架

【发布】Unizon 去中心化时间锁管理框架

我受团队的委托,代表优证链通发布 Unizon 去中心化时间锁管理框架(Unizon Timelock Admin) 1.0 版本。

【发布】Unizon 去中心化时间锁管理框架

图 1. Unizon Timelock Admin 主界面

这个公号主要是介绍自己学习区块链的一些感悟,Timelock 这么专业技术性的内容,本来不应该在这里发表,但是因为目前我们团队刚刚成立,很多基础设施都还没有建立起来,所以借用这个频道发布我们的第一个开源项目。本文所涉及到的是代码级的技术主题,目标读者是以太坊上 DeFi 和 DAPP 开发者。据我们所知,目前这部分人群的数量是很少的,所以如果读者对于本文的内容感觉不知所云,大可以放心忽略。

时间锁(Timelock),顾名思义,就是根据时间上锁和解锁的机制。这是几乎每一个 DeFi 和 DAPP 项目都会用到的基本功能模块。粗略的理解,可以认为时间锁是一个“延时管道”,一个计划好的动作,经过时间锁的锁定,会暂停执行,等待指定的时间之后再执行。这个功能逻辑简单,但是非常有用,也非常重要,在以太坊这样的区块链平台上要做对也并不容易。

【发布】Unizon 去中心化时间锁管理框架

图 2. 一个被时间锁延迟从而挂起等待到期执行的操作

【发布】Unizon 去中心化时间锁管理框架

图 3. 一个到期执行完毕的操作

都说 DeFi 是乐高积木,像时间锁这样的基本功能,就应该有一块小积木对应它,让需要的项目随取随用。但是目前各个主流项目都是把时间锁功能实现在自己那一大坨智能合约代码里,拆不出来也补不进去。

我们团队在开发 DeFi 协议过程中也实现了一个时间锁管理框架,并且已经在若干产品中稳定可靠的运行了一段时间。我们觉得应当为 DeFi 开发生态有所贡献,因此决定将这个时间锁拆出来,做成一块乐高积木,以后其他 DeFi 项目如果需要这个功能,就不必重新开发了,可以直接使用这个管理框架,自由的集成在自己的项目中。当然,由于代码开源,我们也欢迎同好自由改进这个框架。

无论是从代码规模还是从其意义来说,这只是一个很微小的贡献。但这是我们团队成立以后发布的第一个开源项目。未来我们希望还能够向整个 DeFi 和 DAPP 社区不断的提交一些有用的“乐高积木”——区块链的平等、开放和协作,同样应该体现在技术和代码的层面上。

项目代码在这里:https://github.com/unizon-blockchain/timelock。具体使用说明,请参见下文。

目标

Timelock 已经成为高质量 DeFi 项目的标配,是治理体系不可或缺的一部分,通过 Timelock 接管 / 限制超级用户对系统参数的修改,一方面可以避免管理员作恶或者攻击者获取管理员权限后对系统造成严重破坏,另一方面也可以给用户以更大的权限,在用户不同意某些治理措施时有足够的时间提前行动,避免资产遭受损失。

目前业内普遍采纳了一个标准 timelock 合约,如同本项目所包含的,包括 Compound、SushiSwap 等项目均采用。但是,合约的使用与管理却没有一个比较简单、通行的方案,目前比较典型的有两类:一种是 Sushiswap 采用的简单查询方式,即把 timelock 合约所涉及的所有交易查询出来,按时间顺序展示,而不关心具体业务的操作逻辑。参见:https://sushi-timelock.txs.wtf/ 。另一种是与治理体系结合的比较完整的方式,如:Compound 官网上展现的。

目前我们尚未看到一个完整的、面向 timelock 使用和管理的开源项目,能够帮助 DeFi 开发者快速使用和管理 timelock。这种情况下,一个 DeFi 项目的管理者,想要有效使用 timelock,会遇到两个主要的问题。一是要有相当的开发量,自己合约对应的所有函数都要自己来编写对应的 timelock 调用,开发工作量大,正确性难以有保障。二是如果参考 SushiSwap 这种流水账式的组织方式,则无法从业务的角度去使用和管理 timelock,比如:发起一个 timelock 交易修改平台的某个参数,并且在两天后 timelock 允许生效时对这个交易进行确认,这是一个典型的场景。但在 SushiSwap 这种原始的查询方式中,无法知道当前 timelock 中有哪些待执行交易、内容是什么,必须去浏览全部的,混杂在一起的各种交易(发起、确认、取消等),找到当初发起的交易再执行。

我们认为,一个有效的 timelock 管理框架,应当做到两点:一方面应当让项目通过配置的方式就可以将自己需要管理的方法交由 timelock 实现,无需大量的开发工作。另一方面数据组织形式应该更贴合业务逻辑,采用基于业务的组织方式,将 QueueTransaction 与 ExecuteTransaction/CancelTransaction 匹配、组织起来,简化管理员的工作。

这就是 Unizon timelock Admin 项目的初衷。

功能简介

通用的 timelock 管理 DAPP,通过修改配置文件即可实现 timelock 交易展示、queueTransaction、executeTransaction、cancelTransaction 功能

修改 /timelock/constants.ts 文件更改配置文件(本配置以 compound 为例):

    /** 
    * timelock 管理的合约地址,本配置以 compound 为例  
    */  
    export const contract_address : any = {  
      3: {  
          'unitroller': '0x52Ab60E7F463B73C6A90ee116dBB18ac61DC63FF',  
          'comptroller': '0x52Ab60E7F463B73C6A90ee116dBB18ac61DC63FF',  
          'cToken1': '',  
          'cToken2': '',  
          'cTokenn': ''  
         },  
      1: {  
          'unitroller': '0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B',  
          'comptroller': '0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B',  
          'cToken1': '',  
          'cToken2': '',  
          'cTokenn': ''  
        }  
    }  


    /** 
    * timelock 管理的合约所对应的 abi 文件 , abi 文件需拷贝至 /timelock/abi 目录  
    */  


    export const contract_abi_file : any = {  
      'unitroller': 'unitroller-abi.json',  
      'comptroller': 'comptroller-abi.json',  
      'cToken1': 'cToken-abi.json',  
      'cToken2': 'cToken-abi.json',  
      'cTokenn': 'cToken-abi.json'  
    }  


    /** 
    * deplay Offset, unit: seconds  
    */  
    export const delay_offset = 300;  


    /** 
    * timelock 合约地址 , 分别为 mainnet 和 ropsten, 其中主网为 compound timelock 合约地址  
    */  
    export const timelock_address : any = {  
      1: '0x6d903f6003cca6255D85CcA4D3B5E5146dC33925',  
      3: '0x4168FE8179C5e99074068244413909F40c4301B2'  
    }  


    /** 
    * timelock 管理的合约需要执行 queueTransaction 的函数列表  
    */  


    export const queue_functions : any = {  
      'unitroller': ['_acceptAdmin', '_setPendingAdmin', '_setPendingImplementation'],  
      'comptroller': ['_become', '_setBorrowPaused', '_setMiningBuff', '_setCompRate', '_setMintPaused', '_supportMarket', '_dropCompMarket', '_setPriceOracle', '_setCollateralFactor'],  
      'cToken1': ['_acceptAdmin', '_setReserveFactor'],  
      'cToken2': ['_acceptAdmin', '_setReserveFactor'],  
      'cTokenn': ['_acceptAdmin', '_setReserveFacto

运行及部署

运行:

在项目根目录执行

    yarn  
    yarn dev

部署:

在项目根目录执行

    yarn build

通过 nginx/apache 部署 ./dist 目录即可。

0 0 投票数
文章评分
订阅评论
提醒
guest
0 Comments
内联反馈
查看所有评论
0
希望看到您的想法,请发表评论。x
()
x