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

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

图1.UnizonTimelockAdmin主界面

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

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

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

图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匹配、组织起来,简化管理员的工作。

这就是UnizontimelockAdmin项目的初衷。

功能简介

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

修改/timelock/constants.ts文件更改配置文件:

/***timelock管理的合约地址,本配置以compound为例*/exportconstcontract_address:any={3:{'unitroller':'0x52Ab60E7F463B73C6A90ee116dBB18ac61DC63FF','comptroller':'0x52Ab60E7F463B73C6A90ee116dBB18ac61DC63FF','cToken1':'','cToken2':'','cTokenn':''},1:{'unitroller':'0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B','comptroller':'0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B','cToken1':'','cToken2':'','cTokenn':''}}/***timelock管理的合约所对应的abi文件,abi文件需拷贝至/timelock/abi目录*/exportconstcontract_abi_file:any={'unitroller':'unitroller-abi.json','comptroller':'comptroller-abi.json','cToken1':'cToken-abi.json','cToken2':'cToken-abi.json','cTokenn':'cToken-abi.json'}/***deplayOffset,unit:seconds*/exportconstdelay_offset=300;/***timelock合约地址,分别为mainnet和ropsten,其中主网为compoundtimelock合约地址*/exportconsttimelock_address:any={1:'0x6d903f6003cca6255D85CcA4D3B5E5146dC33925',3:'0x4168FE8179C5e99074068244413909F40c4301B2'}/***timelock管理的合约需要执行queueTransaction的函数列表*/exportconstqueue_functions:any={'unitroller':,'comptroller':,'cToken1':,'cToken2':,'cTokenn':['_acceptAdmin','_setReserveFacto

运行及部署

运行:

在项目根目录执行

yarnyarndev

部署:

在项目根目录执行

yarnbuild

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

本文来源于非小号媒体平台:

孟岩

现已在非小号资讯平台发布18篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/9558599.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

币安为何推出第三条链?这对BNB意味着什么?

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:15ms0-3:444ms