REStake – 懒人 Cosmos 持份者解决方案

利用 REStake 让验证人帮忙自动委托收益。

想必大伙儿应该有听说过金融中的复利法的概念,就是利息除了会根据本金计算外,新得到的利息同样可以生息这个样子。于是只要计算利息的周期越密,财富增长就会越快。(指数函数的美妙之处,笑)

于是把这个概念推广到基于权益证明的区块链上,就是持份者定期把委托获得的收益提取出来再重新委托给验证人的过程。因为人类的记忆实在不够可靠或者只是想偷懒等各种原因,就有人帮忙写出了可以自动化这个过程的程序,就是上面说到的 REStake 啦。

REStake 是?

REstake 是由 ECO Stake ,一群致力于用去中心化技术促进环境改善的人们开发和维护的项目。它通过 Cosmos 的 Authz 模组(授权像是验证人的钱包这样的特定的钱包地址以汝自己的钱包的名义进行某些交易的功能)帮持份人定期自动完成提取收益和委托给相同验证人的功能。

  • REStake 只会授权验证人使用来自相同验证人的委托获得的收益再委托给自己,不会动用汝钱包上的其它资金。
  • 以及验证人会帮汝支付交易的 Gas Fee。
  • 还有一点,REStake 是开放源代码的,汝可以在 https://github.com/eco-stake/restake 找到它的源代码。

持份者设置 REStake

首先转到 REStake 的主页,会列出 REStake 支持的链:

每一条链从上到下的信息分别是:

  • 这种币的市值和年化利率。
  • 这条链是否支持 Authz ,如果不支持的话,REStake 不能自动完成重复委托的操作,但汝可以在网页上手动操作。
  • 这条链上有没有已经启用 REStake 的验证人。
  • REStake 的支持状态,有些链(像是 Likecoin )是自动添加到列表里的,因此会提示可能没有足够的测试。

点击对应的链以后就可以看到已经启用 REStake 的验证人了,例如 Likecoin 的话:

要查看自己的委托的话,就先用 Connect 菜单通过 Keplr 登录了。

指向每个验证人中 restake 的 Frequency 的话,可以看到这个验证人 restake 的频率和最小收益要求(只有汝的收益大于设定的值的时候验证人才会进行 restake)

如果汝委托的验证人支持 REStake 的话,REStake 那一列就会变成绿色的 REStake 按钮,点击以后可以调整REStake 的参数。

其实也没有什么需要设置的啦,就是每次委托的上限这个样子。虽然咱都是用默认的不限就是。设置好以后点下面的 Enable REStake 按钮来签署授权。

然后呢?没有然后了,最多就是不知道什么时候回来看看委托增加了多少(笑)。

验证人设置 REStake

如果汝想给自己的验证人也启用 REStake 的话,可以参考 REStake 的文档,或者学咱一样糊(不是)。

首先要准备的是:

  • 一个有 Docker 和 docker-compose 的服务器。
  • 一个新钱包地址,用来储存 REStake 支付交易费的资金。
  • 给自己的验证人关联上一个 Keybase 身份,稍候在 REStake 的操作者列表仓库发起 Pull Request 的时候需要用。LikeCoin 的话可以参考咱之前那篇刚把验证人搭起来的时候写的文章,可能需要更新一下命令。

接下来,克隆 REStake 的源代码:

$ git clone https://github.com/eco-stake/restake.git
cd restake
cp .env.sample .env

然后编辑 .env 文件,把汝的新钱包的助记词填进 MNEMONIC 字段里。

MNEMONIC=foo bar ...

然后在 src/ 目录新建或编辑 networks.local.json 文件,添加上汝的验证人的信息。因为咱目前只有 LikeCoin 的验证人所以咱就这样举例子了,其它的链的话可以参考源代码里的 src/networks.json 。

{
  "likecoin": {
    # 在 REStake 网站上显示的名称。
    "prettyName": "LikeCoin",
    # REST API 接入点。
    # 如果汝正在运行 REStake 的服务器上也有汝的验证人节点同时启用了 REST API 的话。
    # 这里可以设置成 http://localhost:1317 。
    "restUrl": [
        "https://likecoin-rest.yoitsu.xyz"
    ],
    # RPC API 接入点。
    # 如果汝正在运行 REStake 的服务器上也有汝的验证人节点的话。
    # 这里可以设置成 http://localhost:26657 。
    "rpcUrl": [
        "https://likecoin-status.yoitsu.xyz"
    ],
    # 和汝的验证人节点设置的一样的 gas price。
    "gasPrice": "2000nanolike",
    # 汝的验证人的操作者地址, likevaloper 那个
    "ownerAddress": "likevaloper1r4sv5ea8mhd7q2cp566sh5zvkwg8xf3xwgw6uw"
  }
}

设置完毕以后,可以运行下面这条命令来测试一下。

# 因为咱只有 LikeCoin 的验证人,所以就用了最后一个参数来跳过其它的链。
$ /usr/bin/docker-compose run --rm app npm run autostake likecoin

> restake@0.1.0 autostake
> NODE_OPTIONS=--openssl-legacy-provider node scripts/autostake.mjs "likecoin"

[12:14:19.513] ⚛
[12:14:22.422] Starting LikeCoin
[12:14:22.574] Bot address is like13zq4c45h5z7zf8mnu8z9nqu9pdqe29u0jgk7d3
[12:14:22.806] Using REST URL https://likecoin-rest.yoitsu.xyz
[12:14:22.807] Running autostake
[12:14:23.004] Bot balance is 46469956000 nanolike
[12:14:23.005] Finding delegators...
[12:14:23.449] ...batch 1
[12:14:23.451] Checking 22 delegators for grants...
[12:14:23.640] like1lqrvv08ygtd4q2rvrst30ww4uqfgzpl3rx68zu Not autostaking for this validator, skipping
[12:14:23.640] ...batch 1
[12:14:23.641] Found 4 delegators with valid grants...
[12:14:23.641] Calculating and autostaking in batches of 50
[12:14:23.919] like1c3fgu63q782jmxmdvcy8qkggqw2r3hzffgf3ru 1515066593 nanolike reward is too low, skipping
[12:14:23.928] like1jf7u589sr24ae47stkfl93t5xkjut3sr0usckv 986739626 nanolike reward is too low, skipping
[12:14:23.935] like1n4mugxw9wu4g0d257p4ss7l35wfa8a4003mrg5 193129283 nanolike reward is too low, skipping
[12:14:24.054] like1erg2phzhumvgsynzk0553w772ldgv48ylp3gf4 1306399824 nanolike reward is too low, skipping
[12:14:24.054] LikeCoin summary:
[12:14:24.054] LikeCoin finished: Sent 0/0 messages

要设置定时运行的话,可以通过 crontab 或者 systemd-timer ,咱因为比较熟悉后者就用这个了。可以参考下面的单元文件和定时器。

# /etc/systemd/system/restake.service
[Unit]
Description=stakebot service with docker compose
Requires=docker.service
After=docker.service
Wants=restake.timer

[Service]
Type=oneshot
# 这里换成汝 ReStake 的目录。
WorkingDirectory=/path/to/restake
ExecStart=/usr/bin/docker-compose run --rm app npm run autostake

[Install]
WantedBy=multi-user.target
# /etc/systemd/system/restake.timer
[Unit]
Description=Restake bot timer

[Timer]
AccuracySec=1min
# 这里换成汝计划的运行间隔,例如咱设置的一个小时。
OnCalendar=*-*-* *:00:00

[Install]
WantedBy=timers.target

向 REStake 提交已启用的验证人

如果测试完 OK 的话,就可以向 REStake 的验证人列表仓库提交自己的验证人了。

Fork 一下 https://github.com/eco-stake/validator-registry 仓库,在里面新建一个汝自己的验证人的名字的目录,然后新增下面两个文件。汝也可以参考一下仓库中已有的验证人是怎么写的(笑)。

# chains.json
{
  "$schema": "../chains.schema.json",
  # 验证人的名字。
  "name": "Yoitsu",
  # 验证人操作的各个链。
  "chains": [
    {
      "name": "likecoin",
      # 汝的验证人的操作者地址。
      "address": "likevaloper1r4sv5ea8mhd7q2cp566sh5zvkwg8xf3xwgw6uw",
      "restake": {
        # 汝支付 REStake 产生的 gas fee 的钱包的地址。
        "address": "like13zq4c45h5z7zf8mnu8z9nqu9pdqe29u0jgk7d3",
        # 汝多久运行一次 REStake?
        "run_time": "every 1 hour",
        # 汝进行 REStake 需要的最少收益是多少?
        # 这里是每一种币的最小单位,例如 LikeCoin 的话就是 nanolike 。
        "minimum_reward": 5000000000
      }
    }
  ]
}
# profile.json
{
  "$schema": "../profile.schema.json",
  "name": "Yoitsu",
  # 和汝的验证人关联的 Keybase 身份的 PGP 公钥指纹,短的。
  "identity": "B6CF41D1879E8002"
}

然后提交 Pull Request 就可以啦,没有问题的话,汝的验证人就会在 REStake 上标记成支持 REStake 的验证人啦。

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据