@1hive/apps-time-lock 中文文档教程
Time Lock
1Hive 的 Time Lock 应用程序允许 Aragon 组织通过将令牌发送到 Time Lock 应用程序一段可配置的时间来要求用户锁定令牌,以便转发意图. 例如,组织可能要求用户在创建新投票之前锁定 100 个代币 1 个月。 用户将能够在一个月内回来并领取他们锁定的代币。
Project stage: development
Time Lock 应用程序仍在开发中,第一个实现已发布到 time-lock.open.aragonpm.eth
。 如果您有兴趣参与贡献,请查看我们未解决的问题。
Security review status: Contracts updated as of commit 57d4d5eaef9f4ade3218527e8942bf17d588bcc3
此 repo 中的代码未经审计。
How does it work?
Time Lock 应用程序是一个转发器。 通过授予 Time Lock 应用程序类似Create Votes
的权限,系统将提示用户并要求用户在转发用户意图之前锁定令牌。
我们会跟踪何时以及由谁进行锁定,以便用户只能在持续时间结束后收回他们进行的锁定。
我们建议(但不要求)将锁定功能与 Token Balance Oracle 一起使用,以限制应用程序的使用该组织的成员。 这就是我们的演示模板。 这允许 Oracle 在授予 canForward()
功能。 这意味着为了提交提案,必须锁定代币,并且为了锁定代币,必须是 DAO 的成员。
Initialization
Time Lock 应用程序使用 _token
、_lockDuration
、_lockAmount
和 _spamPenaltyFactor
参数进行初始化,这些参数确定令牌是锁定,代币被锁定多长时间,要锁定的代币数量和垃圾邮件提议的惩罚百分比。 在初始化时,_token
参数可以设置为 ERC20 令牌。 它不能改变。 如果需要进行更改,用户可以安装新实例并更改组织中的权限以反映更改。
Roles
Time Lock 应用程序实现了以下角色:
- Change Duration: This allows for changing the configured duration.
- Change Lock Amount: This allows for changing the amount of tokens required to lock.
- Change Spam Penalty: This allows for changing the spam penalty factor for subsequent locks.
- Lock Tokens: This should be granted to
Any Entity
and paramaterized using the ACL Token Oracle or similar contract.
Interface
Time Lock 应用程序为用户提供了一个界面,可以查看他们所做的任何锁定,以及他们可以重新申请锁定的时间。 它还显示了他们当前可收回的总解锁余额。
Time Lock 应用程序不提供用于更改持续时间或锁定量的界面。 这可以通过 aragonCLI 或直接与合约交互来完成。
How to run Time Lock app locally
首先确保您已安装并运行 node、npm 和 aragonCLI。 可以在此处找到关于如何设置的说明。 您还需要启用 Metamask 或某种网络钱包才能在浏览器中签署交易。
Git 克隆这个仓库。
git clone https://github.com/1Hive/time-lock-app.git
导航到 time-lock-app
目录。
cd time-lock-app
安装 npm 依赖项。
npm i
在您的本地环境中部署一个带有 Time Lock 应用程序的 dao。
npm run start:template
如果一切正常,您的新 DAO 将被部署,您的浏览器将打开 http://localhost:3000/#/YOUR-DAO-ADDRESS。 它应该看起来像这样:
您还将在终端中看到本地部署的配置。 它应该看起来像这样:
Ethereum Node: ws://localhost:8545
ENS registry: 0x5f6f7e8cc7346a11ca2def8f827b7a0b612c56a1
APM registry: aragonpm.eth
DAO address: YOUR-DAO-ADDRESS
Template
Time Lock 应用程序初始化为 1:30 分钟的 _lockDuration
、20 个 LKT 令牌的 _lockAmount
和 _spamPenaltyFactor 的 100%。 该应用程序具有创建投票的权限,因此如果您尝试从
tokens
应用程序中为自己铸造一些代币,它会首先提示您批准 Time Lock 应用程序将 20 LKT 代币转移到您的合约代表。 执行转发后,您应该能够看到当前锁和一个计时器,指示您可以重新领取 20 个 LKT 代币的时间。
Re-claiming your tokens
一旦您的余额被解锁,您就可以通过提款按钮取回您的代币。 您将必须输入您要收回的锁的数量,并且它们将以 FIFO 的方式被撤销(先进先出)
Aragon DAO Installation
TODO:将时间锁部署到 rinkeby
要部署到组织,您可以使用 aragonCLI。
aragon dao install <dao-address> time-lock.open.aragonpm.eth --app-init-args <token-address> <lock-duration> <lock-amount>
您必须根据您的要求设置权限,以便用户在转发意图之前锁定令牌。 因此,例如,如果您想要要求用户在创建投票之前锁定令牌,您应该授予 Time Lock 应用程序在投票应用程序上创建投票的角色。
:warning: 目前,Time Lock 应用程序必须是交易路径中的第一个转发器,以便正确提示您对所需数量的代币执行批准
Contributing
我们欢迎社区贡献!
请查看我们的未解决的问题以开始使用。
如果您发现可能影响安全的事情,请立即通知我们。 联系我们的最快方式是通过我们的team Keybase chat 中的#dev 频道。 只要打个招呼,你发现了一个潜在的安全漏洞,我们就会私信给你讨论细节。
Time Lock
1Hive's Time Lock app allows an Aragon organization to require users to lock tokens by sending them to the Time Lock app for a configurable period of time in order to forward an intent. For example the organization may require users to lock 100 tokens for 1 month before creating a new vote. The user would be able to come back in a month and claim their locked tokens.
???? Project stage: development
The Time Lock app is still in development, a first implementation was published to time-lock.open.aragonpm.eth
. If you are interested in contributing please see our open issues.
???? Security review status: Contracts updated as of commit 57d4d5eaef9f4ade3218527e8942bf17d588bcc3
The code in this repo has not been audited.
How does it work?
The Time Lock app is a forwarder. By granting the Time Lock app a permission like Create Votes
the user will be prompted and required to lock tokens before the user's intent can be forwarded.
We keep track of when locks are made and by whom so that users are only able to re-claim locks that they have made after the duration has elapsed.
We recommend (but do not require) that the lock function is used with the Token Balance Oracle to restrict use of the application to members of the organization. This is how permissions are set up in our demo template. This allows the Oracle to check if the msg.sender
of a proposal has tokens (and thus is a member of the DAO who's qualified to create proposals) before granting the canForward()
functionality. This means that in order to submit a proposal one must lock tokens, and in order to lock tokens one must be a member of the DAO.
Initialization
The Time Lock app is initialized with a _token
, _lockDuration
, _lockAmount
and _spamPenaltyFactor
parameters which determines the token to be locked, how long tokens are locked, the amount of tokens to lock and a penalty percentage for spamming proposals. At initialization the _token
parameter can be set to an ERC20 token. It cannot be changed. If a change is necessary the user can install a new instance and change permissions in the organization to reflect the change.
Roles
The Time Lock app implements the following roles:
- Change Duration: This allows for changing the configured duration.
- Change Lock Amount: This allows for changing the amount of tokens required to lock.
- Change Spam Penalty: This allows for changing the spam penalty factor for subsequent locks.
- Lock Tokens: This should be granted to
Any Entity
and paramaterized using the ACL Token Oracle or similar contract.
Interface
The Time Lock app provides an interface for a user to see any locks they have made, and how much time until they can re-claim the lock. It also shows the total unlocked balance they currently have for re-claim.
The Time Lock app does not provide an interface for changing the duration or lock amount. This can be done via the aragonCLI or directly interacting with the contract.
How to run Time Lock app locally
First make sure that you have node, npm, and the aragonCLI installed and working. Instructions on how to set that up can be found here. You'll also need to have Metamask or some kind of web wallet enabled to sign transactions in the browser.
Git clone this repo.
git clone https://github.com/1Hive/time-lock-app.git
Navigate into the time-lock-app
directory.
cd time-lock-app
Install npm dependencies.
npm i
Deploy a dao with Time Lock app installed on your local environment.
npm run start:template
If everything is working correctly, your new DAO will be deployed and your browser will open http://localhost:3000/#/YOUR-DAO-ADDRESS. It should look something like this:
You will also see the configuration for your local deployment in the terminal. It should look something like this:
Ethereum Node: ws://localhost:8545
ENS registry: 0x5f6f7e8cc7346a11ca2def8f827b7a0b612c56a1
APM registry: aragonpm.eth
DAO address: YOUR-DAO-ADDRESS
Template
The Time Lock app is initialized with a _lockDuration
of 1:30 minutes, a _lockAmount
of 20 LKT tokens and a _spamPenaltyFactor
of 100%. The app has the permission to create votes, so if you try to mint yourself some tokens from the tokens
app it will first prompt you to approve the Time Lock app to transfer 20 LKT tokens to the contract on your behalf. Once the forwarding is performed you should be able to see the current lock and a timer indicating how much time until you can re-claim your 20 LKT tokens.
Re-claiming your tokens
Once your balance is unlocked you will be able to re-claim your tokens via the withdraw button. You will have to input how many locks you'll re-claim and they'll be withdrawn on a FIFO basis (first in first out)
Aragon DAO Installation
TODO: Deploy Time Lock to rinkeby
To deploy to an organization you can use the aragonCLI.
aragon dao install <dao-address> time-lock.open.aragonpm.eth --app-init-args <token-address> <lock-duration> <lock-amount>
You have to set up permissions depending on your requirements for users to lock tokens before forwarding an intent. So for example if you want to require users to lock tokens before creating votes you should grant the Time Lock app the role to create votes on the Voting app.
:warning: Currently the Time Lock app has to be the first forwarder in the transaction pathing in order to properly prompt you to perform an approve for the required amount of tokens
Contributing
We welcome community contributions!
Please check out our open Issues to get started.
If you discover something that could potentially impact security, please notify us immediately. The quickest way to reach us is via the #dev channel in our team Keybase chat. Just say hi and that you discovered a potential security vulnerability and we'll DM you to discuss details.